[
  {
    "path": ".github/ISSUE_TEMPLATE/issue.md",
    "content": "---\nname: Issue\nabout: Generic Jitter Issue\ntitle: ''\nlabels: ''\nassignees: ''\n\n---\n\n**Note:** For general inquiries, such as \"How do I...?\", please use the discussion page instead of opening issues. You can find the discussion page [here](https://github.com/notgiven688/jitterphysics2/discussions).\n"
  },
  {
    "path": ".github/workflows/build-demo.yml",
    "content": "name: Build Demo\n\non:\n  push:\n    branches: [ main ]\n  pull_request:\n\njobs:\n  build-demo:\n\n    runs-on: ubuntu-latest\n\n    defaults:\n      run:\n        working-directory: ./src/JitterDemo\n\n    steps:\n      - uses: actions/checkout@v4\n\n      - name: Setup .NET\n        uses: actions/setup-dotnet@v4\n        with:\n          dotnet-version: 10.0.x\n\n      - name: Restore dependencies\n        run: dotnet restore\n\n      - name: Build\n        run: dotnet build --configuration Release --no-restore\n"
  },
  {
    "path": ".github/workflows/deploy-docs.yml",
    "content": "name: Build and deploy documentation\n\non:\n  push:\n    branches:\n      - main\n\njobs:\n  deploy:\n    name: Build and deploy documentation\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v4\n      - uses: actions/setup-dotnet@v4\n        with:\n          dotnet-version: '9.0.x'\n\n      - name: Install docfx\n        run: dotnet tool install -g docfx\n\n      - name: Generate API metadata\n        run: docfx metadata\n        working-directory: docfx\n\n      - name: Build documentation\n        run: docfx build\n        working-directory: docfx\n\n      - name: Deploy to GitHub Pages\n        uses: peaceiris/actions-gh-pages@v4\n        with:\n          github_token: ${{ secrets.GITHUB_TOKEN }}\n          publish_dir: ./docfx/_site\n          cname: jitterphysics.com\n          publish_branch: pages\n          user_name: github-actions[bot]\n          user_email: 41898282+github-actions[bot]@users.noreply.github.com\n"
  },
  {
    "path": ".github/workflows/deterministic-hash.yml",
    "content": "name: Deterministic Hash\n\non:\n  push:\n    branches: [ main ]\n  pull_request:\n\njobs:\n  deterministic-hash:\n    name: Deterministic Hash (${{ matrix.os }}, ${{ matrix.precision }})\n    runs-on: ${{ matrix.os }}\n\n    strategy:\n      fail-fast: false\n      matrix:\n        os:\n          - ubuntu-latest\n          - windows-latest\n          - macos-latest\n        precision:\n          - single\n          - double\n\n    defaults:\n      run:\n        working-directory: ./src/JitterTests\n\n    steps:\n      - uses: actions/checkout@v4\n\n      - name: Setup .NET\n        uses: actions/setup-dotnet@v4\n        with:\n          dotnet-version: 10.0.x\n\n      - name: Restore dependencies\n        run: dotnet restore\n\n      - name: Run deterministic hash repro (single precision)\n        if: matrix.precision == 'single'\n        run: dotnet test --configuration Release --no-restore --filter \"FullyQualifiedName~JitterTests.Robustness.ReproducibilityTest.DeterministicScene_MatchesAcrossThreadingForTwentySeconds\"\n\n      - name: Run deterministic hash repro (double precision)\n        if: matrix.precision == 'double'\n        run: dotnet test --configuration Release --no-restore -p:DoublePrecision=true --filter \"FullyQualifiedName~JitterTests.Robustness.ReproducibilityTest.DeterministicScene_MatchesAcrossThreadingForTwentySeconds\"\n"
  },
  {
    "path": ".github/workflows/jitter-tests.yml",
    "content": "name: JitterTests\n\non:\n  push:\n    branches: [ main ]\n  pull_request:\n\npermissions:\n  id-token: write\n  contents: write\n  checks: write\n  actions: write\n\nenv:\n  CONFIGURATION: Release\n  TEST_RESULTS_DIR: ./TestResults\n\njobs:\n  build-and-test:\n    name: Build and Test (${{ matrix.precision }})\n\n    runs-on: ubuntu-latest\n    strategy:\n      fail-fast: false\n      matrix:\n        precision:\n          - single\n          - double\n\n    defaults:\n      run:\n        working-directory: ./src/JitterTests\n\n    steps:\n      - uses: actions/checkout@v4\n      \n      - name: Setup .NET\n        uses: actions/setup-dotnet@v4\n        with:\n          dotnet-version: 9.0.x\n      \n      - name: Restore dependencies\n        run: dotnet restore\n\n      - name: Build single-precision tests\n        if: matrix.precision == 'single'\n        run: dotnet build --configuration ${{ env.CONFIGURATION }} --no-restore\n\n      - name: Build double-precision tests\n        if: matrix.precision == 'double'\n        run: dotnet build --configuration ${{ env.CONFIGURATION }} --no-restore -p:DoublePrecision=true\n\n      - name: Run single-precision tests\n        if: matrix.precision == 'single'\n        run: |\n          mkdir -p ${{ env.TEST_RESULTS_DIR }}\n\n          dotnet test --configuration ${{ env.CONFIGURATION }} --no-restore \\\n            --test-adapter-path:. --logger \"trx;LogFileName=single-precision.trx\"\n\n      - name: Run double-precision tests\n        if: matrix.precision == 'double'\n        run: |\n          mkdir -p ${{ env.TEST_RESULTS_DIR }}\n\n          dotnet test --configuration ${{ env.CONFIGURATION }} --no-restore -p:DoublePrecision=true \\\n            --test-adapter-path:. --logger \"trx;LogFileName=double-precision.trx\"\n"
  },
  {
    "path": ".github/workflows/publish.yml",
    "content": "# yaml-language-server: $schema=https://json.schemastore.org/github-workflow.json\n\nname: Publish NuGet\non:\n  workflow_dispatch: # Allow running the workflow manually from the GitHub UI\n  push:\n    branches:\n      - 'main'       # Run the workflow when pushing to the main branch\n  pull_request:\n    branches:\n      - '*'          # Run the workflow for all pull requests\n  release:\n    types:\n      - published    # Run the workflow when a new GitHub release is published\n\nenv:\n  DOTNET_SKIP_FIRST_TIME_EXPERIENCE: 1\n  DOTNET_NOLOGO: true\n  NuGetDirectory: ${{ github.workspace }}/nuget\n\ndefaults:\n  run:\n    shell: pwsh\n\njobs:\n  create_nuget:\n\n    runs-on: ubuntu-latest\n\n    defaults:\n      run:\n        working-directory: ./src/Jitter2\n\n    steps:\n      - uses: actions/checkout@v4\n        with:\n          fetch-depth: 0 # Get all history to allow automatic versioning using MinVer\n\n      - name: Setup .NET\n        uses: actions/setup-dotnet@v4\n        with:\n          dotnet-version: 9.0.x\n\n      - name: Add MinVer and Reproducible Builds\n        run: |\n          dotnet add package MinVer\n          dotnet add package DotNet.ReproducibleBuilds\n\n      # Pack single-precision version\n      - name: Pack Single Precision\n        run: dotnet pack --configuration Release --output ${{ env.NuGetDirectory }}\n\n      # Pack double-precision version\n      - name: Pack Double Precision\n        run: dotnet pack --configuration Release -p:DoublePrecision=true --output ${{ env.NuGetDirectory }}\n\n      # Upload artifacts\n      - uses: actions/upload-artifact@v4\n        with:\n          name: nuget\n          if-no-files-found: error\n          retention-days: 7\n          path: ${{ env.NuGetDirectory }}/*\n\n  validate_nuget:\n\n    runs-on: ubuntu-latest\n    needs: [create_nuget]\n    steps:\n      - name: Setup .NET\n        uses: actions/setup-dotnet@v4\n        with:\n          dotnet-version: 9.0.x\n\n      - name: Download NuGet Packages\n        uses: actions/download-artifact@v4\n        with:\n          name: nuget\n          path: ${{ env.NuGetDirectory }}\n\n      - name: Install NuGet Validator\n        run: dotnet tool update Meziantou.Framework.NuGetPackageValidation.Tool --global\n\n      - name: Validate NuGet Packages\n        run: |\n          foreach ($file in Get-ChildItem \"${{ env.NuGetDirectory }}\" -Recurse -Include *.nupkg) {\n              meziantou.validate-nuget-package $file\n          }\n\n  run_test:\n\n    runs-on: ubuntu-latest\n    strategy:\n      fail-fast: false\n      matrix:\n        precision:\n          - single\n          - double\n    name: Run Tests (${{ matrix.precision }})\n\n    defaults:\n      run:\n        working-directory: ./src/JitterTests\n\n    steps:\n      - uses: actions/checkout@v4\n      - name: Setup .NET\n        uses: actions/setup-dotnet@v4\n        with:\n          dotnet-version: 10.0.x\n\n      - name: Restore dependencies\n        run: dotnet restore\n\n      - name: Run Tests - Single Precision\n        if: matrix.precision == 'single'\n        run: dotnet test --configuration Release --no-restore\n\n      - name: Run Tests - Double Precision\n        if: matrix.precision == 'double'\n        run: dotnet test --configuration Release --no-restore -p:DoublePrecision=true\n\n  deploy:\n\n    if: github.event_name == 'release'\n    runs-on: ubuntu-latest\n    needs: [validate_nuget, run_test]\n    steps:\n      - name: Setup .NET\n        uses: actions/setup-dotnet@v4\n        with:\n          dotnet-version: 9.0.x\n\n      - name: Download NuGet Packages\n        uses: actions/download-artifact@v4\n        with:\n          name: nuget\n          path: ${{ env.NuGetDirectory }}\n\n      - name: Publish NuGet Packages\n        run: |\n          dotnet nuget add source --username notgiven688 --password ${{ secrets.GITHUB_TOKEN }} --store-password-in-clear-text --name github \"https://nuget.pkg.github.com/notgiven688/index.json\"\n\n          foreach ($file in Get-ChildItem \"${{ env.NuGetDirectory }}\" -Recurse -Include *.nupkg) {\n              dotnet nuget push $file --api-key \"${{ secrets.NUGET_APIKEY }}\" --source https://api.nuget.org/v3/index.json --skip-duplicate\n              dotnet nuget push $file --source \"github\" --skip-duplicate\n          }\n"
  },
  {
    "path": ".github/workflows/test-deploy-docs.yml",
    "content": "name: Build documentation\n\non:\n  pull_request:\n    branches:\n      - main\n\njobs:\n  test-deploy:\n    name: Build documentation\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v4\n      - uses: actions/setup-dotnet@v4\n        with:\n          dotnet-version: '9.0.x'\n\n      - name: Install docfx\n        run: dotnet tool install -g docfx\n\n      - name: Generate API metadata\n        run: docfx metadata\n        working-directory: docfx\n\n      - name: Build documentation\n        run: docfx build\n        working-directory: docfx\n"
  },
  {
    "path": "LICENSE",
    "content": "MIT License\n\nCopyright (c) Thorben Linneweber and contributors\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE."
  },
  {
    "path": "README.md",
    "content": "#  <img src=\"./media/logo/jitterstringsmallsmall.png\" alt=\"screenshot\" width=\"240\"/> Jitter Physics 2\n\n[![GitHub Actions Workflow Status](https://img.shields.io/github/actions/workflow/status/notgiven688/jitterphysics2/jitter-tests.yml?label=JitterTests)](https://github.com/notgiven688/jitterphysics2/actions/workflows/jitter-tests.yml)\n[![Nuget](https://img.shields.io/nuget/v/Jitter2?color=yellow)](https://www.nuget.org/packages/Jitter2/)\n[![Discord](https://img.shields.io/discord/1213790465225138197?logo=discord&logoColor=lightgray&label=discord&color=blue)](https://discord.gg/7jr3f4edmV)\n\nJitter Physics 2, the evolution of [Jitter Physics](https://github.com/notgiven688/jitterphysics), is an impulse-based dynamics engine with a semi-implicit Euler integrator. It is a fast, simple, and dependency-free engine written in C# with a clear and user-friendly API.\n\n📦 The official **NuGet** package ([changelog](https://jitterphysics.com/docs/changelog)) can be found [here](https://www.nuget.org/packages/Jitter2), the *double precision* version [here](https://www.nuget.org/packages/Jitter2.Double).\n\n---\n\n▶️ Try the interactive demo and explore the docs at **[jitterphysics.com](https://jitterphysics.com/docs/introduction.html)**.\n\nThere is also a tiny demo available for the [Godot engine](other/GodotDemo) 🎮.\n\n---\n\n<img src=\"./media/screenshots/jitter_screenshot0.png\" alt=\"screenshot\" width=\"400\"/> <img src=\"./media/screenshots/jitter_screenshot1.png\" alt=\"screenshot\" width=\"400\"/>\n\n<img src=\"./media/screenshots/jitter_screenshot2.png\" alt=\"screenshot\" width=\"400\"/> <img src=\"./media/screenshots/jitter_screenshot4.png\" alt=\"screenshot\" width=\"400\"/>\n\n## Getting Started\n\nJitter is cross-platform. The `src` directory contains four projects:\n\n| Project          | Description                                                |\n|------------------|------------------------------------------------------------|\n| Jitter2          | The main library housing Jitter2's functionalities.         |\n| JitterDemo       | Features demo scenes rendered with OpenGL, tested on Linux and Windows. |\n| JitterBenchmark  | The setup for conducting benchmarks using BenchmarkDotNet.  |\n| JitterTests      | Unit tests utilizing NUnit.                                |\n\nTo run the demo scenes:\n\n- Install [.NET 10 SDK](https://dotnet.microsoft.com/download/dotnet/10.0)\n- `git clone https://github.com/notgiven688/jitterphysics2.git`\n- `cd ./jitterphysics2/src/JitterDemo && dotnet run -c Release`\n\nJitterDemo uses [GLFW](https://www.glfw.org/) for accessing OpenGL and managing windows, and [cimgui](https://github.com/cimgui/cimgui) for GUI rendering. The project contains these native binaries in precompiled form.\n\n## Features\n\n- [x] Compile time option for double precision.\n- [x] Optional cross-platform deterministic solver mode for reproducible simulation.\n- [x] Speculative contacts (avoiding the bullet-through-paper problem).\n- [x] A variety of constraints and motors (AngularMotor, BallSocket, ConeLimit, DistanceLimit, FixedAngle, HingeAngle, LinearMotor, PointOnLine, PointOnPlane, TwistAngle) with support for softness.\n- [x] A sophisticated deactivation scheme with minimal cost for inactive rigid bodies (scenes with 100k inactive bodies are easily achievable).\n- [x] Edge collision filter for internal edges of triangle meshes.\n- [x] Substepping for improved constraint and contact stability.\n- [x] Generic convex-convex collision detection using EPA-aided MPR.\n- [x] \"One-shot\" contact manifolds using auxiliary contacts for flat surface collisions.\n- [x] Efficient compound shapes.\n- [x] Easy integration of custom shapes. Integrated: Box, Capsule, Cone, Convex Hull, Point Cloud, Sphere, Triangle, Transformed.\n- [x] Soft-body dynamics!\n\n## Documentation\n\nFind the [documentation here](https://notgiven688.github.io/jitterphysics2).\n\n## Credits\n\nGrateful acknowledgment to Erin Catto, Dirk Gregorius, Erwin Coumans, Gino van den Bergen, Daniel Chappuis, Marijn Tamis, Danny Chapman, Gary Snethen, and Christer Ericson for sharing their knowledge through forum posts, talks, code, papers, and books.\n\nSpecial thanks also to the contributors of the predecessor projects JigLibX and Jitter.\n\n## Contribute 👋\n\nContributions of all forms are welcome! Feel free to fork the project and create a pull request.\n"
  },
  {
    "path": "docfx/.gitignore",
    "content": "_site/\napi/\n"
  },
  {
    "path": "docfx/AppBundle/WebDemo.runtimeconfig.json",
    "content": "{\n  \"runtimeOptions\": {\n    \"tfm\": \"net9.0\",\n    \"includedFrameworks\": [\n      {\n        \"name\": \"Microsoft.NETCore.App\",\n        \"version\": \"9.0.12\"\n      }\n    ],\n    \"wasmHostProperties\": {\n      \"perHostConfig\": [\n        {\n          \"name\": \"browser\",\n          \"html-path\": \"index.html\",\n          \"Host\": \"browser\"\n        }\n      ],\n      \"runtimeArgs\": [],\n      \"mainAssembly\": \"WebDemo.dll\"\n    },\n    \"configProperties\": {\n      \"Microsoft.Extensions.DependencyInjection.VerifyOpenGenericServiceTrimmability\": true,\n      \"System.ComponentModel.DefaultValueAttribute.IsSupported\": false,\n      \"System.ComponentModel.Design.IDesignerHost.IsSupported\": false,\n      \"System.ComponentModel.TypeConverter.EnableUnsafeBinaryFormatterInDesigntimeLicenseContextSerialization\": false,\n      \"System.ComponentModel.TypeDescriptor.IsComObjectDescriptorSupported\": false,\n      \"System.Diagnostics.Debugger.IsSupported\": false,\n      \"System.Diagnostics.Metrics.Meter.IsSupported\": false,\n      \"System.Diagnostics.Tracing.EventSource.IsSupported\": false,\n      \"System.Globalization.Invariant\": true,\n      \"System.TimeZoneInfo.Invariant\": false,\n      \"System.Globalization.PredefinedCulturesOnly\": true,\n      \"System.Linq.Enumerable.IsSizeOptimized\": true,\n      \"System.Net.Http.EnableActivityPropagation\": false,\n      \"System.Net.Http.WasmEnableStreamingResponse\": true,\n      \"System.Net.SocketsHttpHandler.Http3Support\": false,\n      \"System.Reflection.Metadata.MetadataUpdater.IsSupported\": false,\n      \"System.Resources.ResourceManager.AllowCustomResourceTypes\": false,\n      \"System.Resources.UseSystemResourceKeys\": true,\n      \"System.Runtime.CompilerServices.RuntimeFeature.IsDynamicCodeSupported\": true,\n      \"System.Runtime.InteropServices.BuiltInComInterop.IsSupported\": false,\n      \"System.Runtime.InteropServices.EnableConsumingManagedCodeFromNativeHosting\": false,\n      \"System.Runtime.InteropServices.EnableCppCLIHostActivation\": false,\n      \"System.Runtime.InteropServices.Marshalling.EnableGeneratedComInterfaceComImportInterop\": false,\n      \"System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization\": false,\n      \"System.StartupHookProvider.IsSupported\": false,\n      \"System.Text.Encoding.EnableUnsafeUTF7Encoding\": false,\n      \"System.Text.Json.JsonSerializer.IsReflectionEnabledByDefault\": false,\n      \"System.Threading.Thread.EnableAutoreleasePool\": false\n    }\n  }\n}"
  },
  {
    "path": "docfx/AppBundle/_framework/blazor.boot.json",
    "content": "{\n  \"mainAssemblyName\": \"WebDemo.dll\",\n  \"resources\": {\n    \"hash\": \"sha256-hTaBZwg08pO2ImtLM7JTW8Jw7NOSyjigcWbUoIrnt6U=\",\n    \"jsModuleNative\": {\n      \"dotnet.native.js\": \"sha256-Ld26ppJjNUHS/R4z8JDWuaMVqZ2/pDQ1n0jrwXUPVFc=\"\n    },\n    \"jsModuleRuntime\": {\n      \"dotnet.runtime.js\": \"sha256-3egSZfVHFUpXw3QwgiaxDQns5wWmrugiXEFPbJyCk2g=\"\n    },\n    \"wasmNative\": {\n      \"dotnet.native.wasm\": \"sha256-4sGKLs+EUqLQmrluXnsu6Q7+ACxggCRkw8oMRVbUbCI=\"\n    },\n    \"coreAssembly\": {\n      \"Jitter2.wasm\": \"sha256-B7RYb1s28jtA5ZMG5vPIQaZUwX/xr+DrgnYwIgVif8A=\",\n      \"Raylib-cs.wasm\": \"sha256-p2KKxq0CN7gOlnyegcTDLBJSFervFCxCMvyHz9cQ3ts=\",\n      \"System.Collections.wasm\": \"sha256-ptn/+tzEZ/NpPs/MNR9RUUFYOfpXiKHnJCzl2/XZVIs=\",\n      \"System.Private.CoreLib.wasm\": \"sha256-aiWEhPBDrNSlvHyAs4T76AVsz2hkupJcU6GecTE1bfc=\",\n      \"System.Runtime.InteropServices.JavaScript.wasm\": \"sha256-lzbTBaA2PajlVJeqzd5sDwoXrmCvVnqahwA8Sa7zFBo=\",\n      \"WebDemo.wasm\": \"sha256-bqGC9TuqOglAms1NcwLG/ICV7sdEzOCPdrbklt1R5Dk=\"\n    },\n    \"assembly\": {},\n    \"coreVfs\": {\n      \"runtimeconfig.bin\": {\n        \"supportFiles/5_runtimeconfig.bin\": \"sha256-65l+4uofoVjFHnghWH/N0CP6P3I+PzGORhkPInxhR3g=\"\n      }\n    },\n    \"vfs\": {\n      \"assets/JetBrainsMono-LICENSE.txt\": {\n        \"supportFiles/0_JetBrainsMono-LICENSE.txt\": \"sha256-MPDBNuPIjkItB5Gs2XI4hw+QVKlym8NM8v8NTtjKxK0=\"\n      },\n      \"assets/JetBrainsMono-Regular.ttf\": {\n        \"supportFiles/1_JetBrainsMono-Regular.ttf\": \"sha256-oL9g7w+Dxe1NenXUWDhUix9oczct+siPcYBEkYmNE48=\"\n      },\n      \"assets/lighting.fs\": {\n        \"supportFiles/2_lighting.fs\": \"sha256-9P7bpnmnFzpHKF+2l7LLdMsUr3+eHrSVFvOYCzJ9QRM=\"\n      },\n      \"assets/lighting.vs\": {\n        \"supportFiles/3_lighting.vs\": \"sha256-J7tfxNROREVTHbd5xFSmwN74ufTd78DeWF/DD2wSKeI=\"\n      },\n      \"assets/texel_checker.png\": {\n        \"supportFiles/4_texel_checker.png\": \"sha256-Be5loiaHS9Db/IzlI0PxCQy9VfAmdDAx8VX98CAUSEc=\"\n      }\n    }\n  },\n  \"debugLevel\": 0,\n  \"globalizationMode\": \"invariant\"\n}"
  },
  {
    "path": "docfx/AppBundle/_framework/dotnet.js",
    "content": "//! Licensed to the .NET Foundation under one or more agreements.\n//! The .NET Foundation licenses this file to you under the MIT license.\nvar e=!1;const t=async()=>WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,8,1,6,0,6,64,25,11,11])),o=async()=>WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,5,1,96,0,1,123,3,2,1,0,10,10,1,8,0,65,0,253,15,253,98,11])),n=Symbol.for(\"wasm promise_control\");function r(e,t){let o=null;const r=new Promise((function(n,r){o={isDone:!1,promise:null,resolve:t=>{o.isDone||(o.isDone=!0,n(t),e&&e())},reject:e=>{o.isDone||(o.isDone=!0,r(e),t&&t())}}}));o.promise=r;const i=r;return i[n]=o,{promise:i,promise_control:o}}function i(e){return e[n]}function s(e){e&&function(e){return void 0!==e[n]}(e)||Ke(!1,\"Promise is not controllable\")}const a=\"__mono_message__\",l=[\"debug\",\"log\",\"trace\",\"warn\",\"info\",\"error\"],c=\"MONO_WASM: \";let u,d,f,m;function g(e){m=e}function h(e){if(qe.diagnosticTracing){const t=\"function\"==typeof e?e():e;console.debug(c+t)}}function p(e,...t){console.info(c+e,...t)}function b(e,...t){console.info(e,...t)}function w(e,...t){console.warn(c+e,...t)}function y(e,...t){if(t&&t.length>0&&t[0]&&\"object\"==typeof t[0]){if(t[0].silent)return;if(t[0].toString)return void console.error(c+e,t[0].toString())}console.error(c+e,...t)}function v(e,t,o){return function(...n){try{let r=n[0];if(void 0===r)r=\"undefined\";else if(null===r)r=\"null\";else if(\"function\"==typeof r)r=r.toString();else if(\"string\"!=typeof r)try{r=JSON.stringify(r)}catch(e){r=r.toString()}t(o?JSON.stringify({method:e,payload:r,arguments:n.slice(1)}):[e+r,...n.slice(1)])}catch(e){f.error(`proxyConsole failed: ${e}`)}}}function _(e,t,o){d=t,m=e,f={...t};const n=`${o}/console`.replace(\"https://\",\"wss://\").replace(\"http://\",\"ws://\");u=new WebSocket(n),u.addEventListener(\"error\",R),u.addEventListener(\"close\",j),function(){for(const e of l)d[e]=v(`console.${e}`,T,!0)}()}function E(e){let t=30;const o=()=>{u?0==u.bufferedAmount||0==t?(e&&b(e),function(){for(const e of l)d[e]=v(`console.${e}`,f.log,!1)}(),u.removeEventListener(\"error\",R),u.removeEventListener(\"close\",j),u.close(1e3,e),u=void 0):(t--,globalThis.setTimeout(o,100)):e&&f&&f.log(e)};o()}function T(e){u&&u.readyState===WebSocket.OPEN?u.send(e):f.log(e)}function R(e){f.error(`[${m}] proxy console websocket error: ${e}`,e)}function j(e){f.debug(`[${m}] proxy console websocket closed: ${e}`,e)}(new Date).valueOf();const x={},A={},S={};let O,D,k;function C(){const e=Object.values(S),t=Object.values(A),o=L(e),n=L(t),r=o+n;if(0===r)return;const i=We?\"%c\":\"\",s=We?[\"background: purple; color: white; padding: 1px 3px; border-radius: 3px;\",\"font-weight: bold;\",\"font-weight: normal;\"]:[],a=qe.config.linkerEnabled?\"\":\"\\nThis application was built with linking (tree shaking) disabled. \\nPublished applications will be significantly smaller if you install wasm-tools workload. \\nSee also https://aka.ms/dotnet-wasm-features\";console.groupCollapsed(`${i}dotnet${i} Loaded ${U(r)} resources${i}${a}`,...s),e.length&&(console.groupCollapsed(`Loaded ${U(o)} resources from cache`),console.table(S),console.groupEnd()),t.length&&(console.groupCollapsed(`Loaded ${U(n)} resources from network`),console.table(A),console.groupEnd()),console.groupEnd()}async function I(){const e=O;if(e){const t=(await e.keys()).map((async t=>{t.url in x||await e.delete(t)}));await Promise.all(t)}}function M(e){return`${e.resolvedUrl}.${e.hash}`}async function P(){O=await async function(e){if(!qe.config.cacheBootResources||void 0===globalThis.caches||void 0===globalThis.document)return null;if(!1===globalThis.isSecureContext)return null;const t=`dotnet-resources-${globalThis.document.baseURI.substring(globalThis.document.location.origin.length)}`;try{return await caches.open(t)||null}catch(e){return null}}()}function L(e){return e.reduce(((e,t)=>e+(t.responseBytes||0)),0)}function U(e){return`${(e/1048576).toFixed(2)} MB`}function $(){qe.preferredIcuAsset=N(qe.config);let e=\"invariant\"==qe.config.globalizationMode;if(!e)if(qe.preferredIcuAsset)qe.diagnosticTracing&&h(\"ICU data archive(s) available, disabling invariant mode\");else{if(\"custom\"===qe.config.globalizationMode||\"all\"===qe.config.globalizationMode||\"sharded\"===qe.config.globalizationMode){const e=\"invariant globalization mode is inactive and no ICU data archives are available\";throw y(`ERROR: ${e}`),new Error(e)}qe.diagnosticTracing&&h(\"ICU data archive(s) not available, using invariant globalization mode\"),e=!0,qe.preferredIcuAsset=null}const t=\"DOTNET_SYSTEM_GLOBALIZATION_INVARIANT\",o=\"DOTNET_SYSTEM_GLOBALIZATION_HYBRID\",n=qe.config.environmentVariables;if(void 0===n[o]&&\"hybrid\"===qe.config.globalizationMode?n[o]=\"1\":void 0===n[t]&&e&&(n[t]=\"1\"),void 0===n.TZ)try{const e=Intl.DateTimeFormat().resolvedOptions().timeZone||null;e&&(n.TZ=e)}catch(e){p(\"failed to detect timezone, will fallback to UTC\")}}function N(e){var t;if((null===(t=e.resources)||void 0===t?void 0:t.icu)&&\"invariant\"!=e.globalizationMode){const t=e.applicationCulture||(We?globalThis.navigator&&globalThis.navigator.languages&&globalThis.navigator.languages[0]:Intl.DateTimeFormat().resolvedOptions().locale),o=Object.keys(e.resources.icu),n={};for(let t=0;t<o.length;t++){const r=o[t];e.resources.fingerprinting?n[me(r)]=r:n[r]=r}let r=null;if(\"custom\"===e.globalizationMode){if(o.length>=1)return o[0]}else\"hybrid\"===e.globalizationMode?r=\"icudt_hybrid.dat\":t&&\"all\"!==e.globalizationMode?\"sharded\"===e.globalizationMode&&(r=function(e){const t=e.split(\"-\")[0];return\"en\"===t||[\"fr\",\"fr-FR\",\"it\",\"it-IT\",\"de\",\"de-DE\",\"es\",\"es-ES\"].includes(e)?\"icudt_EFIGS.dat\":[\"zh\",\"ko\",\"ja\"].includes(t)?\"icudt_CJK.dat\":\"icudt_no_CJK.dat\"}(t)):r=\"icudt.dat\";if(r&&n[r])return n[r]}return e.globalizationMode=\"invariant\",null}const z=class{constructor(e){this.url=e}toString(){return this.url}};async function W(e,t){try{const o=\"function\"==typeof globalThis.fetch;if(Ue){const n=e.startsWith(\"file://\");if(!n&&o)return globalThis.fetch(e,t||{credentials:\"same-origin\"});D||(k=He.require(\"url\"),D=He.require(\"fs\")),n&&(e=k.fileURLToPath(e));const r=await D.promises.readFile(e);return{ok:!0,headers:{length:0,get:()=>null},url:e,arrayBuffer:()=>r,json:()=>JSON.parse(r),text:()=>{throw new Error(\"NotImplementedException\")}}}if(o)return globalThis.fetch(e,t||{credentials:\"same-origin\"});if(\"function\"==typeof read)return{ok:!0,url:e,headers:{length:0,get:()=>null},arrayBuffer:()=>new Uint8Array(read(e,\"binary\")),json:()=>JSON.parse(read(e,\"utf8\")),text:()=>read(e,\"utf8\")}}catch(t){return{ok:!1,url:e,status:500,headers:{length:0,get:()=>null},statusText:\"ERR28: \"+t,arrayBuffer:()=>{throw t},json:()=>{throw t},text:()=>{throw t}}}throw new Error(\"No fetch implementation available\")}function B(e){return\"string\"!=typeof e&&Ke(!1,\"url must be a string\"),!q(e)&&0!==e.indexOf(\"./\")&&0!==e.indexOf(\"../\")&&globalThis.URL&&globalThis.document&&globalThis.document.baseURI&&(e=new URL(e,globalThis.document.baseURI).toString()),e}const F=/^[a-zA-Z][a-zA-Z\\d+\\-.]*?:\\/\\//,V=/[a-zA-Z]:[\\\\/]/;function q(e){return Ue||Be?e.startsWith(\"/\")||e.startsWith(\"\\\\\")||-1!==e.indexOf(\"///\")||V.test(e):F.test(e)}let G,H=0;const J=[],Z=[],Q=new Map,Y={\"js-module-threads\":!0,\"js-module-globalization\":!0,\"js-module-runtime\":!0,\"js-module-dotnet\":!0,\"js-module-native\":!0},K={...Y,\"js-module-library-initializer\":!0},X={...Y,dotnetwasm:!0,heap:!0,manifest:!0},ee={...K,manifest:!0},te={...K,dotnetwasm:!0},oe={dotnetwasm:!0,symbols:!0,\"segmentation-rules\":!0},ne={...K,dotnetwasm:!0,symbols:!0,\"segmentation-rules\":!0},re={symbols:!0,\"segmentation-rules\":!0};function ie(e){return!(\"icu\"==e.behavior&&e.name!=qe.preferredIcuAsset)}function se(e,t,o){const n=Object.keys(t||{});Ke(1==n.length,`Expect to have one ${o} asset in resources`);const r=n[0],i={name:r,hash:t[r],behavior:o};return ae(i),e.push(i),i}function ae(e){X[e.behavior]&&Q.set(e.behavior,e)}function le(e){const t=function(e){Ke(X[e],`Unknown single asset behavior ${e}`);const t=Q.get(e);return Ke(t,`Single asset for ${e} not found`),t}(e);if(!t.resolvedUrl)if(t.resolvedUrl=qe.locateFile(t.name),Y[t.behavior]){const e=Te(t);e?(\"string\"!=typeof e&&Ke(!1,\"loadBootResource response for 'dotnetjs' type should be a URL string\"),t.resolvedUrl=e):t.resolvedUrl=we(t.resolvedUrl,t.behavior)}else if(\"dotnetwasm\"!==t.behavior)throw new Error(`Unknown single asset behavior ${e}`);return t}let ce=!1;async function ue(){if(!ce){ce=!0,qe.diagnosticTracing&&h(\"mono_download_assets\");try{const e=[],t=[],o=(e,t)=>{!ne[e.behavior]&&ie(e)&&qe.expected_instantiated_assets_count++,!te[e.behavior]&&ie(e)&&(qe.expected_downloaded_assets_count++,t.push(he(e)))};for(const t of J)o(t,e);for(const e of Z)o(e,t);qe.allDownloadsQueued.promise_control.resolve(),Promise.all([...e,...t]).then((()=>{qe.allDownloadsFinished.promise_control.resolve()})).catch((e=>{throw qe.err(\"Error in mono_download_assets: \"+e),at(1,e),e})),await qe.runtimeModuleLoaded.promise;const n=async e=>{const t=await e;if(t.buffer){if(!ne[t.behavior]){t.buffer&&\"object\"==typeof t.buffer||Ke(!1,\"asset buffer must be array-like or buffer-like or promise of these\"),\"string\"!=typeof t.resolvedUrl&&Ke(!1,\"resolvedUrl must be string\");const e=t.resolvedUrl,o=await t.buffer,n=new Uint8Array(o);Re(t),await Fe.beforeOnRuntimeInitialized.promise,Fe.instantiate_asset(t,e,n)}}else oe[t.behavior]?(\"symbols\"===t.behavior?(await Fe.instantiate_symbols_asset(t),Re(t)):\"segmentation-rules\"===t.behavior&&(await Fe.instantiate_segmentation_rules_asset(t),Re(t)),oe[t.behavior]&&++qe.actual_downloaded_assets_count):(t.isOptional||Ke(!1,\"Expected asset to have the downloaded buffer\"),!te[t.behavior]&&ie(t)&&qe.expected_downloaded_assets_count--,!ne[t.behavior]&&ie(t)&&qe.expected_instantiated_assets_count--)},r=[],i=[];for(const t of e)r.push(n(t));for(const e of t)i.push(n(e));Promise.all(r).then((()=>{ze||Fe.coreAssetsInMemory.promise_control.resolve()})).catch((e=>{throw qe.err(\"Error in mono_download_assets: \"+e),at(1,e),e})),Promise.all(i).then((async()=>{ze||(await Fe.coreAssetsInMemory.promise,Fe.allAssetsInMemory.promise_control.resolve())})).catch((e=>{throw qe.err(\"Error in mono_download_assets: \"+e),at(1,e),e}))}catch(e){throw qe.err(\"Error in mono_download_assets: \"+e),e}}}let de=!1;function fe(){if(de)return;de=!0;const e=qe.config,t=[];if(e.assets)for(const t of e.assets)\"object\"!=typeof t&&Ke(!1,`asset must be object, it was ${typeof t} : ${t}`),\"string\"!=typeof t.behavior&&Ke(!1,\"asset behavior must be known string\"),\"string\"!=typeof t.name&&Ke(!1,\"asset name must be string\"),t.resolvedUrl&&\"string\"!=typeof t.resolvedUrl&&Ke(!1,\"asset resolvedUrl could be string\"),t.hash&&\"string\"!=typeof t.hash&&Ke(!1,\"asset resolvedUrl could be string\"),t.pendingDownload&&\"object\"!=typeof t.pendingDownload&&Ke(!1,\"asset pendingDownload could be object\"),t.isCore?J.push(t):Z.push(t),ae(t);else if(e.resources){const o=e.resources;o.wasmNative||Ke(!1,\"resources.wasmNative must be defined\"),o.jsModuleNative||Ke(!1,\"resources.jsModuleNative must be defined\"),o.jsModuleRuntime||Ke(!1,\"resources.jsModuleRuntime must be defined\"),se(Z,o.wasmNative,\"dotnetwasm\"),se(t,o.jsModuleNative,\"js-module-native\"),se(t,o.jsModuleRuntime,\"js-module-runtime\"),\"hybrid\"==e.globalizationMode&&se(t,o.jsModuleGlobalization,\"js-module-globalization\");const n=(e,t)=>{!o.fingerprinting||\"assembly\"!=e.behavior&&\"pdb\"!=e.behavior&&\"resource\"!=e.behavior||(e.virtualPath=me(e.name)),t?(e.isCore=!0,J.push(e)):Z.push(e)};if(o.coreAssembly)for(const e in o.coreAssembly)n({name:e,hash:o.coreAssembly[e],behavior:\"assembly\"},!0);if(o.assembly)for(const e in o.assembly)n({name:e,hash:o.assembly[e],behavior:\"assembly\"},!o.coreAssembly);if(0!=e.debugLevel){if(o.corePdb)for(const e in o.corePdb)n({name:e,hash:o.corePdb[e],behavior:\"pdb\"},!0);if(o.pdb)for(const e in o.pdb)n({name:e,hash:o.pdb[e],behavior:\"pdb\"},!o.corePdb)}if(e.loadAllSatelliteResources&&o.satelliteResources)for(const e in o.satelliteResources)for(const t in o.satelliteResources[e])n({name:t,hash:o.satelliteResources[e][t],behavior:\"resource\",culture:e},!o.coreAssembly);if(o.coreVfs)for(const e in o.coreVfs)for(const t in o.coreVfs[e])n({name:t,hash:o.coreVfs[e][t],behavior:\"vfs\",virtualPath:e},!0);if(o.vfs)for(const e in o.vfs)for(const t in o.vfs[e])n({name:t,hash:o.vfs[e][t],behavior:\"vfs\",virtualPath:e},!o.coreVfs);const r=N(e);if(r&&o.icu)for(const e in o.icu)e===r?Z.push({name:e,hash:o.icu[e],behavior:\"icu\",loadRemote:!0}):e.startsWith(\"segmentation-rules\")&&e.endsWith(\".json\")&&Z.push({name:e,hash:o.icu[e],behavior:\"segmentation-rules\"});if(o.wasmSymbols)for(const e in o.wasmSymbols)J.push({name:e,hash:o.wasmSymbols[e],behavior:\"symbols\"})}if(e.appsettings)for(let t=0;t<e.appsettings.length;t++){const o=e.appsettings[t],n=je(o);\"appsettings.json\"!==n&&n!==`appsettings.${e.applicationEnvironment}.json`||Z.push({name:o,behavior:\"vfs\",noCache:!0,useCredentials:!0})}e.assets=[...J,...Z,...t]}function me(e){var t;const o=null===(t=qe.config.resources)||void 0===t?void 0:t.fingerprinting;return o&&o[e]?o[e]:e}async function ge(e){const t=await he(e);return await t.pendingDownloadInternal.response,t.buffer}async function he(e){try{return await pe(e)}catch(t){if(!qe.enableDownloadRetry)throw t;if(Be||Ue)throw t;if(e.pendingDownload&&e.pendingDownloadInternal==e.pendingDownload)throw t;if(e.resolvedUrl&&-1!=e.resolvedUrl.indexOf(\"file://\"))throw t;if(t&&404==t.status)throw t;e.pendingDownloadInternal=void 0,await qe.allDownloadsQueued.promise;try{return qe.diagnosticTracing&&h(`Retrying download '${e.name}'`),await pe(e)}catch(t){return e.pendingDownloadInternal=void 0,await new Promise((e=>globalThis.setTimeout(e,100))),qe.diagnosticTracing&&h(`Retrying download (2) '${e.name}' after delay`),await pe(e)}}}async function pe(e){for(;G;)await G.promise;try{++H,H==qe.maxParallelDownloads&&(qe.diagnosticTracing&&h(\"Throttling further parallel downloads\"),G=r());const t=await async function(e){if(e.pendingDownload&&(e.pendingDownloadInternal=e.pendingDownload),e.pendingDownloadInternal&&e.pendingDownloadInternal.response)return e.pendingDownloadInternal.response;if(e.buffer){const t=await e.buffer;return e.resolvedUrl||(e.resolvedUrl=\"undefined://\"+e.name),e.pendingDownloadInternal={url:e.resolvedUrl,name:e.name,response:Promise.resolve({ok:!0,arrayBuffer:()=>t,json:()=>JSON.parse(new TextDecoder(\"utf-8\").decode(t)),text:()=>{throw new Error(\"NotImplementedException\")},headers:{get:()=>{}}})},e.pendingDownloadInternal.response}const t=e.loadRemote&&qe.config.remoteSources?qe.config.remoteSources:[\"\"];let o;for(let n of t){n=n.trim(),\"./\"===n&&(n=\"\");const t=be(e,n);e.name===t?qe.diagnosticTracing&&h(`Attempting to download '${t}'`):qe.diagnosticTracing&&h(`Attempting to download '${t}' for ${e.name}`);try{e.resolvedUrl=t;const n=_e(e);if(e.pendingDownloadInternal=n,o=await n.response,!o||!o.ok)continue;return o}catch(e){o||(o={ok:!1,url:t,status:0,statusText:\"\"+e});continue}}const n=e.isOptional||e.name.match(/\\.pdb$/)&&qe.config.ignorePdbLoadErrors;if(o||Ke(!1,`Response undefined ${e.name}`),!n){const t=new Error(`download '${o.url}' for ${e.name} failed ${o.status} ${o.statusText}`);throw t.status=o.status,t}p(`optional download '${o.url}' for ${e.name} failed ${o.status} ${o.statusText}`)}(e);return t?(oe[e.behavior]||(e.buffer=await t.arrayBuffer(),++qe.actual_downloaded_assets_count),e):e}finally{if(--H,G&&H==qe.maxParallelDownloads-1){qe.diagnosticTracing&&h(\"Resuming more parallel downloads\");const e=G;G=void 0,e.promise_control.resolve()}}}function be(e,t){let o;return null==t&&Ke(!1,`sourcePrefix must be provided for ${e.name}`),e.resolvedUrl?o=e.resolvedUrl:(o=\"\"===t?\"assembly\"===e.behavior||\"pdb\"===e.behavior?e.name:\"resource\"===e.behavior&&e.culture&&\"\"!==e.culture?`${e.culture}/${e.name}`:e.name:t+e.name,o=we(qe.locateFile(o),e.behavior)),o&&\"string\"==typeof o||Ke(!1,\"attemptUrl need to be path or url string\"),o}function we(e,t){return qe.modulesUniqueQuery&&ee[t]&&(e+=qe.modulesUniqueQuery),e}let ye=0;const ve=new Set;function _e(e){try{e.resolvedUrl||Ke(!1,\"Request's resolvedUrl must be set\");const t=async function(e){let t=await async function(e){const t=O;if(!t||e.noCache||!e.hash||0===e.hash.length)return;const o=M(e);let n;x[o]=!0;try{n=await t.match(o)}catch(e){}if(!n)return;const r=parseInt(n.headers.get(\"content-length\")||\"0\");return S[e.name]={responseBytes:r},n}(e);return t||(t=await function(e){let t=e.resolvedUrl;if(qe.loadBootResource){const o=Te(e);if(o instanceof Promise)return o;\"string\"==typeof o&&(t=o)}const o={};return qe.config.disableNoCacheFetch||(o.cache=\"no-cache\"),e.useCredentials?o.credentials=\"include\":!qe.config.disableIntegrityCheck&&e.hash&&(o.integrity=e.hash),qe.fetch_like(t,o)}(e),function(e,t){const o=O;if(!o||e.noCache||!e.hash||0===e.hash.length)return;const n=t.clone();setTimeout((()=>{const t=M(e);!async function(e,t,o,n){const r=await n.arrayBuffer(),i=function(e){if(\"undefined\"!=typeof performance)return performance.getEntriesByName(e)[0]}(n.url),s=i&&i.encodedBodySize||void 0;A[t]={responseBytes:s};const a=new Response(r,{headers:{\"content-type\":n.headers.get(\"content-type\")||\"\",\"content-length\":(s||n.headers.get(\"content-length\")||\"\").toString()}});try{await e.put(o,a)}catch(e){}}(o,e.name,t,n)}),0)}(e,t)),t}(e),o={name:e.name,url:e.resolvedUrl,response:t};return ve.add(e.name),o.response.then((()=>{\"assembly\"==e.behavior&&qe.loadedAssemblies.push(e.name),ye++,qe.onDownloadResourceProgress&&qe.onDownloadResourceProgress(ye,ve.size)})),o}catch(t){const o={ok:!1,url:e.resolvedUrl,status:500,statusText:\"ERR29: \"+t,arrayBuffer:()=>{throw t},json:()=>{throw t}};return{name:e.name,url:e.resolvedUrl,response:Promise.resolve(o)}}}const Ee={resource:\"assembly\",assembly:\"assembly\",pdb:\"pdb\",icu:\"globalization\",vfs:\"configuration\",manifest:\"manifest\",dotnetwasm:\"dotnetwasm\",\"js-module-dotnet\":\"dotnetjs\",\"js-module-native\":\"dotnetjs\",\"js-module-runtime\":\"dotnetjs\",\"js-module-threads\":\"dotnetjs\"};function Te(e){var t;if(qe.loadBootResource){const o=null!==(t=e.hash)&&void 0!==t?t:\"\",n=e.resolvedUrl,r=Ee[e.behavior];if(r){const t=qe.loadBootResource(r,e.name,n,o,e.behavior);return\"string\"==typeof t?B(t):t}}}function Re(e){e.pendingDownloadInternal=null,e.pendingDownload=null,e.buffer=null,e.moduleExports=null}function je(e){let t=e.lastIndexOf(\"/\");return t>=0&&t++,e.substring(t)}async function xe(e){if(!e)return;const t=Object.keys(e);await Promise.all(t.map((e=>async function(e){try{const t=we(qe.locateFile(e),\"js-module-library-initializer\");qe.diagnosticTracing&&h(`Attempting to import '${t}' for ${e}`);const o=await import(/*! webpackIgnore: true */t);qe.libraryInitializers.push({scriptName:e,exports:o})}catch(t){w(`Failed to import library initializer '${e}': ${t}`)}}(e))))}async function Ae(e,t){if(!qe.libraryInitializers)return;const o=[];for(let n=0;n<qe.libraryInitializers.length;n++){const r=qe.libraryInitializers[n];r.exports[e]&&o.push(Se(r.scriptName,e,(()=>r.exports[e](...t))))}await Promise.all(o)}async function Se(e,t,o){try{await o()}catch(o){throw w(`Failed to invoke '${t}' on library initializer '${e}': ${o}`),at(1,o),o}}var Oe=\"Release\";function De(e,t){if(e===t)return e;const o={...t};return void 0!==o.assets&&o.assets!==e.assets&&(o.assets=[...e.assets||[],...o.assets||[]]),void 0!==o.resources&&(o.resources=Ce(e.resources||{assembly:{},jsModuleNative:{},jsModuleRuntime:{},wasmNative:{}},o.resources)),void 0!==o.environmentVariables&&(o.environmentVariables={...e.environmentVariables||{},...o.environmentVariables||{}}),void 0!==o.runtimeOptions&&o.runtimeOptions!==e.runtimeOptions&&(o.runtimeOptions=[...e.runtimeOptions||[],...o.runtimeOptions||[]]),Object.assign(e,o)}function ke(e,t){if(e===t)return e;const o={...t};return o.config&&(e.config||(e.config={}),o.config=De(e.config,o.config)),Object.assign(e,o)}function Ce(e,t){if(e===t)return e;const o={...t};return void 0!==o.assembly&&(o.assembly={...e.assembly||{},...o.assembly||{}}),void 0!==o.lazyAssembly&&(o.lazyAssembly={...e.lazyAssembly||{},...o.lazyAssembly||{}}),void 0!==o.pdb&&(o.pdb={...e.pdb||{},...o.pdb||{}}),void 0!==o.jsModuleWorker&&(o.jsModuleWorker={...e.jsModuleWorker||{},...o.jsModuleWorker||{}}),void 0!==o.jsModuleNative&&(o.jsModuleNative={...e.jsModuleNative||{},...o.jsModuleNative||{}}),void 0!==o.jsModuleGlobalization&&(o.jsModuleGlobalization={...e.jsModuleGlobalization||{},...o.jsModuleGlobalization||{}}),void 0!==o.jsModuleRuntime&&(o.jsModuleRuntime={...e.jsModuleRuntime||{},...o.jsModuleRuntime||{}}),void 0!==o.wasmSymbols&&(o.wasmSymbols={...e.wasmSymbols||{},...o.wasmSymbols||{}}),void 0!==o.wasmNative&&(o.wasmNative={...e.wasmNative||{},...o.wasmNative||{}}),void 0!==o.icu&&(o.icu={...e.icu||{},...o.icu||{}}),void 0!==o.satelliteResources&&(o.satelliteResources=Ie(e.satelliteResources||{},o.satelliteResources||{})),void 0!==o.modulesAfterConfigLoaded&&(o.modulesAfterConfigLoaded={...e.modulesAfterConfigLoaded||{},...o.modulesAfterConfigLoaded||{}}),void 0!==o.modulesAfterRuntimeReady&&(o.modulesAfterRuntimeReady={...e.modulesAfterRuntimeReady||{},...o.modulesAfterRuntimeReady||{}}),void 0!==o.extensions&&(o.extensions={...e.extensions||{},...o.extensions||{}}),void 0!==o.vfs&&(o.vfs=Ie(e.vfs||{},o.vfs||{})),Object.assign(e,o)}function Ie(e,t){if(e===t)return e;for(const o in t)e[o]={...e[o],...t[o]};return e}function Me(){const e=qe.config;if(e.environmentVariables=e.environmentVariables||{},e.runtimeOptions=e.runtimeOptions||[],e.resources=e.resources||{assembly:{},jsModuleNative:{},jsModuleGlobalization:{},jsModuleWorker:{},jsModuleRuntime:{},wasmNative:{},vfs:{},satelliteResources:{}},e.assets){qe.diagnosticTracing&&h(\"config.assets is deprecated, use config.resources instead\");for(const t of e.assets){const o={};o[t.name]=t.hash||\"\";const n={};switch(t.behavior){case\"assembly\":n.assembly=o;break;case\"pdb\":n.pdb=o;break;case\"resource\":n.satelliteResources={},n.satelliteResources[t.culture]=o;break;case\"icu\":n.icu=o;break;case\"symbols\":n.wasmSymbols=o;break;case\"vfs\":n.vfs={},n.vfs[t.virtualPath]=o;break;case\"dotnetwasm\":n.wasmNative=o;break;case\"js-module-threads\":n.jsModuleWorker=o;break;case\"js-module-globalization\":n.jsModuleGlobalization=o;break;case\"js-module-runtime\":n.jsModuleRuntime=o;break;case\"js-module-native\":n.jsModuleNative=o;break;case\"js-module-dotnet\":break;default:throw new Error(`Unexpected behavior ${t.behavior} of asset ${t.name}`)}Ce(e.resources,n)}}void 0===e.debugLevel&&\"Debug\"===Oe&&(e.debugLevel=-1),void 0===e.cachedResourcesPurgeDelay&&(e.cachedResourcesPurgeDelay=1e4),e.applicationCulture&&(e.environmentVariables.LANG=`${e.applicationCulture}.UTF-8`),Fe.diagnosticTracing=qe.diagnosticTracing=!!e.diagnosticTracing,Fe.waitForDebugger=e.waitForDebugger,Fe.enablePerfMeasure=!!e.browserProfilerOptions&&globalThis.performance&&\"function\"==typeof globalThis.performance.measure,qe.maxParallelDownloads=e.maxParallelDownloads||qe.maxParallelDownloads,qe.enableDownloadRetry=void 0!==e.enableDownloadRetry?e.enableDownloadRetry:qe.enableDownloadRetry}let Pe=!1;async function Le(e){var t;if(Pe)return void await qe.afterConfigLoaded.promise;let o;try{if(e.configSrc||qe.config&&0!==Object.keys(qe.config).length&&(qe.config.assets||qe.config.resources)||(e.configSrc=\"./blazor.boot.json\"),o=e.configSrc,Pe=!0,o&&(qe.diagnosticTracing&&h(\"mono_wasm_load_config\"),await async function(e){const t=qe.locateFile(e.configSrc),o=void 0!==qe.loadBootResource?qe.loadBootResource(\"manifest\",\"blazor.boot.json\",t,\"\",\"manifest\"):i(t);let n;n=o?\"string\"==typeof o?await i(B(o)):await o:await i(we(t,\"manifest\"));const r=await async function(e){const t=qe.config,o=await e.json();t.applicationEnvironment||(o.applicationEnvironment=e.headers.get(\"Blazor-Environment\")||e.headers.get(\"DotNet-Environment\")||\"Production\"),o.environmentVariables||(o.environmentVariables={});const n=e.headers.get(\"DOTNET-MODIFIABLE-ASSEMBLIES\");n&&(o.environmentVariables.DOTNET_MODIFIABLE_ASSEMBLIES=n);const r=e.headers.get(\"ASPNETCORE-BROWSER-TOOLS\");return r&&(o.environmentVariables.__ASPNETCORE_BROWSER_TOOLS=r),o}(n);function i(e){return qe.fetch_like(e,{method:\"GET\",credentials:\"include\",cache:\"no-cache\"})}De(qe.config,r)}(e)),Me(),await xe(null===(t=qe.config.resources)||void 0===t?void 0:t.modulesAfterConfigLoaded),await Ae(\"onRuntimeConfigLoaded\",[qe.config]),e.onConfigLoaded)try{await e.onConfigLoaded(qe.config,Ge),Me()}catch(e){throw y(\"onConfigLoaded() failed\",e),e}Me(),qe.afterConfigLoaded.promise_control.resolve(qe.config)}catch(t){const n=`Failed to load config file ${o} ${t} ${null==t?void 0:t.stack}`;throw qe.config=e.config=Object.assign(qe.config,{message:n,error:t,isError:!0}),at(1,new Error(n)),t}}\"function\"!=typeof importScripts||globalThis.onmessage||(globalThis.dotnetSidecar=!0);const Ue=\"object\"==typeof process&&\"object\"==typeof process.versions&&\"string\"==typeof process.versions.node,$e=\"function\"==typeof importScripts,Ne=$e&&\"undefined\"!=typeof dotnetSidecar,ze=$e&&!Ne,We=\"object\"==typeof window||$e&&!Ue,Be=!We&&!Ue;let Fe={},Ve={},qe={},Ge={},He={},Je=!1;const Ze={},Qe={config:Ze},Ye={mono:{},binding:{},internal:He,module:Qe,loaderHelpers:qe,runtimeHelpers:Fe,globalizationHelpers:Ve,api:Ge};function Ke(e,t){if(e)return;const o=\"Assert failed: \"+(\"function\"==typeof t?t():t),n=new Error(o);y(o,n),Fe.nativeAbort(n)}function Xe(){return void 0!==qe.exitCode}function et(){return Fe.runtimeReady&&!Xe()}function tt(){Xe()&&Ke(!1,`.NET runtime already exited with ${qe.exitCode} ${qe.exitReason}. You can use runtime.runMain() which doesn't exit the runtime.`),Fe.runtimeReady||Ke(!1,\".NET runtime didn't start yet. Please call dotnet.create() first.\")}function ot(){We&&(globalThis.addEventListener(\"unhandledrejection\",ct),globalThis.addEventListener(\"error\",ut))}let nt,rt;function it(e){rt&&rt(e),at(e,qe.exitReason)}function st(e){nt&&nt(e||qe.exitReason),at(1,e||qe.exitReason)}function at(t,o){var n,r;const i=o&&\"object\"==typeof o;t=i&&\"number\"==typeof o.status?o.status:void 0===t?-1:t;const s=i&&\"string\"==typeof o.message?o.message:\"\"+o;(o=i?o:Fe.ExitStatus?function(e,t){const o=new Fe.ExitStatus(e);return o.message=t,o.toString=()=>t,o}(t,s):new Error(\"Exit with code \"+t+\" \"+s)).status=t,o.message||(o.message=s);const a=\"\"+(o.stack||(new Error).stack);try{Object.defineProperty(o,\"stack\",{get:()=>a})}catch(e){}const l=!!o.silent;if(o.silent=!0,Xe())qe.diagnosticTracing&&h(\"mono_exit called after exit\");else{try{Qe.onAbort==st&&(Qe.onAbort=nt),Qe.onExit==it&&(Qe.onExit=rt),We&&(globalThis.removeEventListener(\"unhandledrejection\",ct),globalThis.removeEventListener(\"error\",ut)),Fe.runtimeReady?(Fe.jiterpreter_dump_stats&&Fe.jiterpreter_dump_stats(!1),0===t&&(null===(n=qe.config)||void 0===n?void 0:n.interopCleanupOnExit)&&Fe.forceDisposeProxies(!0,!0),e&&0!==t&&(null===(r=qe.config)||void 0===r||r.dumpThreadsOnNonZeroExit)):(qe.diagnosticTracing&&h(`abort_startup, reason: ${o}`),function(e){qe.allDownloadsQueued.promise_control.reject(e),qe.allDownloadsFinished.promise_control.reject(e),qe.afterConfigLoaded.promise_control.reject(e),qe.wasmCompilePromise.promise_control.reject(e),qe.runtimeModuleLoaded.promise_control.reject(e),Fe.dotnetReady&&(Fe.dotnetReady.promise_control.reject(e),Fe.afterInstantiateWasm.promise_control.reject(e),Fe.beforePreInit.promise_control.reject(e),Fe.afterPreInit.promise_control.reject(e),Fe.afterPreRun.promise_control.reject(e),Fe.beforeOnRuntimeInitialized.promise_control.reject(e),Fe.afterOnRuntimeInitialized.promise_control.reject(e),Fe.afterPostRun.promise_control.reject(e))}(o))}catch(e){w(\"mono_exit A failed\",e)}try{l||(function(e,t){if(0!==e&&t){const e=Fe.ExitStatus&&t instanceof Fe.ExitStatus?h:y;\"string\"==typeof t?e(t):(void 0===t.stack&&(t.stack=(new Error).stack+\"\"),t.message?e(Fe.stringify_as_error_with_stack?Fe.stringify_as_error_with_stack(t.message+\"\\n\"+t.stack):t.message+\"\\n\"+t.stack):e(JSON.stringify(t)))}!ze&&qe.config&&(qe.config.logExitCode?qe.config.forwardConsoleLogsToWS?E(\"WASM EXIT \"+e):b(\"WASM EXIT \"+e):qe.config.forwardConsoleLogsToWS&&E())}(t,o),function(e){if(We&&!ze&&qe.config&&qe.config.appendElementOnExit&&document){const t=document.createElement(\"label\");t.id=\"tests_done\",0!==e&&(t.style.background=\"red\"),t.innerHTML=\"\"+e,document.body.appendChild(t)}}(t))}catch(e){w(\"mono_exit B failed\",e)}qe.exitCode=t,qe.exitReason||(qe.exitReason=o),!ze&&Fe.runtimeReady&&Qe.runtimeKeepalivePop()}if(qe.config&&qe.config.asyncFlushOnExit&&0===t)throw(async()=>{try{await async function(){try{const e=await import(/*! webpackIgnore: true */\"process\"),t=e=>new Promise(((t,o)=>{e.on(\"error\",o),e.end(\"\",\"utf8\",t)})),o=t(e.stderr),n=t(e.stdout);let r;const i=new Promise((e=>{r=setTimeout((()=>e(\"timeout\")),1e3)}));await Promise.race([Promise.all([n,o]),i]),clearTimeout(r)}catch(e){y(`flushing std* streams failed: ${e}`)}}()}finally{lt(t,o)}})(),o;lt(t,o)}function lt(e,t){if(Fe.runtimeReady&&Fe.nativeExit)try{Fe.nativeExit(e)}catch(e){!Fe.ExitStatus||e instanceof Fe.ExitStatus||w(\"set_exit_code_and_quit_now failed: \"+e.toString())}if(0!==e||!We)throw Ue&&He.process?He.process.exit(e):Fe.quit&&Fe.quit(e,t),t}function ct(e){dt(e,e.reason,\"rejection\")}function ut(e){dt(e,e.error,\"error\")}function dt(e,t,o){e.preventDefault();try{t||(t=new Error(\"Unhandled \"+o)),void 0===t.stack&&(t.stack=(new Error).stack),t.stack=t.stack+\"\",t.silent||(y(\"Unhandled error:\",t),at(1,t))}catch(e){}}!function(e){if(Je)throw new Error(\"Loader module already loaded\");Je=!0,Fe=e.runtimeHelpers,Ve=e.globalizationHelpers,qe=e.loaderHelpers,Ge=e.api,He=e.internal,Object.assign(Ge,{INTERNAL:He,invokeLibraryInitializers:Ae}),Object.assign(e.module,{config:De(Ze,{environmentVariables:{}})});const n={mono_wasm_bindings_is_ready:!1,config:e.module.config,diagnosticTracing:!1,nativeAbort:e=>{throw e||new Error(\"abort\")},nativeExit:e=>{throw new Error(\"exit:\"+e)}},a={gitHash:\"2f124007573374800632d39177cde00ca9fe1ef0\",config:e.module.config,diagnosticTracing:!1,maxParallelDownloads:16,enableDownloadRetry:!0,_loaded_files:[],loadedFiles:[],loadedAssemblies:[],libraryInitializers:[],workerNextNumber:1,actual_downloaded_assets_count:0,actual_instantiated_assets_count:0,expected_downloaded_assets_count:0,expected_instantiated_assets_count:0,afterConfigLoaded:r(),allDownloadsQueued:r(),allDownloadsFinished:r(),wasmCompilePromise:r(),runtimeModuleLoaded:r(),loadingWorkers:r(),is_exited:Xe,is_runtime_running:et,assert_runtime_running:tt,mono_exit:at,createPromiseController:r,getPromiseController:i,assertIsControllablePromise:s,mono_download_assets:ue,resolve_single_asset_path:le,setup_proxy_console:_,set_thread_prefix:g,logDownloadStatsToConsole:C,purgeUnusedCacheEntriesAsync:I,installUnhandledErrorHandler:ot,retrieve_asset_download:ge,invokeLibraryInitializers:Ae,exceptions:t,simd:o};Object.assign(Fe,n),Object.assign(qe,a)}(Ye);let ft,mt,gt=!1,ht=!1;async function pt(e){if(!ht){if(ht=!0,We&&qe.config.forwardConsoleLogsToWS&&void 0!==globalThis.WebSocket&&_(\"main\",globalThis.console,globalThis.location.origin),Qe||Ke(!1,\"Null moduleConfig\"),qe.config||Ke(!1,\"Null moduleConfig.config\"),\"function\"==typeof e){const t=e(Ye.api);if(t.ready)throw new Error(\"Module.ready couldn't be redefined.\");Object.assign(Qe,t),ke(Qe,t)}else{if(\"object\"!=typeof e)throw new Error(\"Can't use moduleFactory callback of createDotnetRuntime function.\");ke(Qe,e)}await async function(e){if(Ue){const e=await import(/*! webpackIgnore: true */\"process\"),t=14;if(e.versions.node.split(\".\")[0]<t)throw new Error(`NodeJS at '${e.execPath}' has too low version '${e.versions.node}', please use at least ${t}. See also https://aka.ms/dotnet-wasm-features`)}const t=/*! webpackIgnore: true */import.meta.url,o=t.indexOf(\"?\");var n;if(o>0&&(qe.modulesUniqueQuery=t.substring(o)),qe.scriptUrl=t.replace(/\\\\/g,\"/\").replace(/[?#].*/,\"\"),qe.scriptDirectory=(n=qe.scriptUrl).slice(0,n.lastIndexOf(\"/\"))+\"/\",qe.locateFile=e=>\"URL\"in globalThis&&globalThis.URL!==z?new URL(e,qe.scriptDirectory).toString():q(e)?e:qe.scriptDirectory+e,qe.fetch_like=W,qe.out=console.log,qe.err=console.error,qe.onDownloadResourceProgress=e.onDownloadResourceProgress,We&&globalThis.navigator){const e=globalThis.navigator,t=e.userAgentData&&e.userAgentData.brands;t&&t.length>0?qe.isChromium=t.some((e=>\"Google Chrome\"===e.brand||\"Microsoft Edge\"===e.brand||\"Chromium\"===e.brand)):e.userAgent&&(qe.isChromium=e.userAgent.includes(\"Chrome\"),qe.isFirefox=e.userAgent.includes(\"Firefox\"))}He.require=Ue?await import(/*! webpackIgnore: true */\"module\").then((e=>e.createRequire(/*! webpackIgnore: true */import.meta.url))):Promise.resolve((()=>{throw new Error(\"require not supported\")})),void 0===globalThis.URL&&(globalThis.URL=z)}(Qe)}}async function bt(e){return await pt(e),nt=Qe.onAbort,rt=Qe.onExit,Qe.onAbort=st,Qe.onExit=it,Qe.ENVIRONMENT_IS_PTHREAD?async function(){(function(){const e=new MessageChannel,t=e.port1,o=e.port2;t.addEventListener(\"message\",(e=>{var n,r;n=JSON.parse(e.data.config),r=JSON.parse(e.data.monoThreadInfo),gt?qe.diagnosticTracing&&h(\"mono config already received\"):(De(qe.config,n),Fe.monoThreadInfo=r,Me(),qe.diagnosticTracing&&h(\"mono config received\"),gt=!0,qe.afterConfigLoaded.promise_control.resolve(qe.config),We&&n.forwardConsoleLogsToWS&&void 0!==globalThis.WebSocket&&qe.setup_proxy_console(\"worker-idle\",console,globalThis.location.origin)),t.close(),o.close()}),{once:!0}),t.start(),self.postMessage({[a]:{monoCmd:\"preload\",port:o}},[o])})(),await qe.afterConfigLoaded.promise,function(){const e=qe.config;e.assets||Ke(!1,\"config.assets must be defined\");for(const t of e.assets)ae(t),re[t.behavior]&&Z.push(t)}(),setTimeout((async()=>{try{await ue()}catch(e){at(1,e)}}),0);const e=wt(),t=await Promise.all(e);return await yt(t),Qe}():async function(){var e;await Le(Qe),fe();const t=wt();await P(),async function(){try{const e=le(\"dotnetwasm\");await he(e),e&&e.pendingDownloadInternal&&e.pendingDownloadInternal.response||Ke(!1,\"Can't load dotnet.native.wasm\");const t=await e.pendingDownloadInternal.response,o=t.headers&&t.headers.get?t.headers.get(\"Content-Type\"):void 0;let n;if(\"function\"==typeof WebAssembly.compileStreaming&&\"application/wasm\"===o)n=await WebAssembly.compileStreaming(t);else{We&&\"application/wasm\"!==o&&w('WebAssembly resource does not have the expected content type \"application/wasm\", so falling back to slower ArrayBuffer instantiation.');const e=await t.arrayBuffer();qe.diagnosticTracing&&h(\"instantiate_wasm_module buffered\"),n=Be?await Promise.resolve(new WebAssembly.Module(e)):await WebAssembly.compile(e)}e.pendingDownloadInternal=null,e.pendingDownload=null,e.buffer=null,e.moduleExports=null,qe.wasmCompilePromise.promise_control.resolve(n)}catch(e){qe.wasmCompilePromise.promise_control.reject(e)}}(),setTimeout((async()=>{try{$(),await ue()}catch(e){at(1,e)}}),0);const o=await Promise.all(t);return await yt(o),await Fe.dotnetReady.promise,await xe(null===(e=qe.config.resources)||void 0===e?void 0:e.modulesAfterRuntimeReady),await Ae(\"onRuntimeReady\",[Ye.api]),Ge}()}function wt(){const e=le(\"js-module-runtime\"),t=le(\"js-module-native\");return ft&&mt||(\"object\"==typeof e.moduleExports?ft=e.moduleExports:(qe.diagnosticTracing&&h(`Attempting to import '${e.resolvedUrl}' for ${e.name}`),ft=import(/*! webpackIgnore: true */e.resolvedUrl)),\"object\"==typeof t.moduleExports?mt=t.moduleExports:(qe.diagnosticTracing&&h(`Attempting to import '${t.resolvedUrl}' for ${t.name}`),mt=import(/*! webpackIgnore: true */t.resolvedUrl))),[ft,mt]}async function yt(e){const{initializeExports:t,initializeReplacements:o,configureRuntimeStartup:n,configureEmscriptenStartup:r,configureWorkerStartup:i,setRuntimeGlobals:s,passEmscriptenInternals:a}=e[0],{default:l}=e[1];if(s(Ye),t(Ye),\"hybrid\"===qe.config.globalizationMode){const e=await async function(){let e;const t=le(\"js-module-globalization\");return\"object\"==typeof t.moduleExports?e=t.moduleExports:(h(`Attempting to import '${t.resolvedUrl}' for ${t.name}`),e=import(/*! webpackIgnore: true */t.resolvedUrl)),await e}(),{initHybrid:t}=e;t(Ve,Fe)}await n(Qe),qe.runtimeModuleLoaded.promise_control.resolve(),l((e=>(Object.assign(Qe,{ready:e.ready,__dotnet_runtime:{initializeReplacements:o,configureEmscriptenStartup:r,configureWorkerStartup:i,passEmscriptenInternals:a}}),Qe))).catch((e=>{if(e.message&&e.message.toLowerCase().includes(\"out of memory\"))throw new Error(\".NET runtime has failed to start, because too much memory was requested. Please decrease the memory by adjusting EmccMaximumHeapSize. See also https://aka.ms/dotnet-wasm-features\");throw e}))}const vt=new class{withModuleConfig(e){try{return ke(Qe,e),this}catch(e){throw at(1,e),e}}withOnConfigLoaded(e){try{return ke(Qe,{onConfigLoaded:e}),this}catch(e){throw at(1,e),e}}withConsoleForwarding(){try{return De(Ze,{forwardConsoleLogsToWS:!0}),this}catch(e){throw at(1,e),e}}withExitOnUnhandledError(){try{return De(Ze,{exitOnUnhandledError:!0}),ot(),this}catch(e){throw at(1,e),e}}withAsyncFlushOnExit(){try{return De(Ze,{asyncFlushOnExit:!0}),this}catch(e){throw at(1,e),e}}withExitCodeLogging(){try{return De(Ze,{logExitCode:!0}),this}catch(e){throw at(1,e),e}}withElementOnExit(){try{return De(Ze,{appendElementOnExit:!0}),this}catch(e){throw at(1,e),e}}withInteropCleanupOnExit(){try{return De(Ze,{interopCleanupOnExit:!0}),this}catch(e){throw at(1,e),e}}withDumpThreadsOnNonZeroExit(){try{return De(Ze,{dumpThreadsOnNonZeroExit:!0}),this}catch(e){throw at(1,e),e}}withWaitingForDebugger(e){try{return De(Ze,{waitForDebugger:e}),this}catch(e){throw at(1,e),e}}withInterpreterPgo(e,t){try{return De(Ze,{interpreterPgo:e,interpreterPgoSaveDelay:t}),Ze.runtimeOptions?Ze.runtimeOptions.push(\"--interp-pgo-recording\"):Ze.runtimeOptions=[\"--interp-pgo-recording\"],this}catch(e){throw at(1,e),e}}withConfig(e){try{return De(Ze,e),this}catch(e){throw at(1,e),e}}withConfigSrc(e){try{return e&&\"string\"==typeof e||Ke(!1,\"must be file path or URL\"),ke(Qe,{configSrc:e}),this}catch(e){throw at(1,e),e}}withVirtualWorkingDirectory(e){try{return e&&\"string\"==typeof e||Ke(!1,\"must be directory path\"),De(Ze,{virtualWorkingDirectory:e}),this}catch(e){throw at(1,e),e}}withEnvironmentVariable(e,t){try{const o={};return o[e]=t,De(Ze,{environmentVariables:o}),this}catch(e){throw at(1,e),e}}withEnvironmentVariables(e){try{return e&&\"object\"==typeof e||Ke(!1,\"must be dictionary object\"),De(Ze,{environmentVariables:e}),this}catch(e){throw at(1,e),e}}withDiagnosticTracing(e){try{return\"boolean\"!=typeof e&&Ke(!1,\"must be boolean\"),De(Ze,{diagnosticTracing:e}),this}catch(e){throw at(1,e),e}}withDebugging(e){try{return null!=e&&\"number\"==typeof e||Ke(!1,\"must be number\"),De(Ze,{debugLevel:e}),this}catch(e){throw at(1,e),e}}withApplicationArguments(...e){try{return e&&Array.isArray(e)||Ke(!1,\"must be array of strings\"),De(Ze,{applicationArguments:e}),this}catch(e){throw at(1,e),e}}withRuntimeOptions(e){try{return e&&Array.isArray(e)||Ke(!1,\"must be array of strings\"),Ze.runtimeOptions?Ze.runtimeOptions.push(...e):Ze.runtimeOptions=e,this}catch(e){throw at(1,e),e}}withMainAssembly(e){try{return De(Ze,{mainAssemblyName:e}),this}catch(e){throw at(1,e),e}}withApplicationArgumentsFromQuery(){try{if(!globalThis.window)throw new Error(\"Missing window to the query parameters from\");if(void 0===globalThis.URLSearchParams)throw new Error(\"URLSearchParams is supported\");const e=new URLSearchParams(globalThis.window.location.search).getAll(\"arg\");return this.withApplicationArguments(...e)}catch(e){throw at(1,e),e}}withApplicationEnvironment(e){try{return De(Ze,{applicationEnvironment:e}),this}catch(e){throw at(1,e),e}}withApplicationCulture(e){try{return De(Ze,{applicationCulture:e}),this}catch(e){throw at(1,e),e}}withResourceLoader(e){try{return qe.loadBootResource=e,this}catch(e){throw at(1,e),e}}async download(){try{await async function(){pt(Qe),await Le(Qe),fe(),await P(),$(),ue(),await qe.allDownloadsFinished.promise}()}catch(e){throw at(1,e),e}}async create(){try{return this.instance||(this.instance=await async function(){return await bt(Qe),Ye.api}()),this.instance}catch(e){throw at(1,e),e}}async run(){try{return Qe.config||Ke(!1,\"Null moduleConfig.config\"),this.instance||await this.create(),this.instance.runMainAndExit()}catch(e){throw at(1,e),e}}},_t=at,Et=bt;Be||\"function\"==typeof globalThis.URL||Ke(!1,\"This browser/engine doesn't support URL API. Please use a modern version. See also https://aka.ms/dotnet-wasm-features\"),\"function\"!=typeof globalThis.BigInt64Array&&Ke(!1,\"This browser/engine doesn't support BigInt64Array API. Please use a modern version. See also https://aka.ms/dotnet-wasm-features\");export{Et as default,vt as dotnet,_t as exit};\n//# sourceMappingURL=dotnet.js.map\n"
  },
  {
    "path": "docfx/AppBundle/_framework/dotnet.native.js",
    "content": "\nvar createDotnetRuntime = (() => {\n  var _scriptDir = import.meta.url;\n  \n  return (\nasync function(moduleArg = {}) {\n\nvar Module=moduleArg;var readyPromiseResolve,readyPromiseReject;Module[\"ready\"]=new Promise((resolve,reject)=>{readyPromiseResolve=resolve;readyPromiseReject=reject});if(_nativeModuleLoaded)throw new Error(\"Native module already loaded\");_nativeModuleLoaded=true;createDotnetRuntime=Module=moduleArg(Module);var moduleOverrides=Object.assign({},Module);var arguments_=[];var thisProgram=\"./this.program\";var quit_=(status,toThrow)=>{throw toThrow};var ENVIRONMENT_IS_WEB=typeof window==\"object\";var ENVIRONMENT_IS_WORKER=typeof importScripts==\"function\";var ENVIRONMENT_IS_NODE=typeof process==\"object\"&&typeof process.versions==\"object\"&&typeof process.versions.node==\"string\";var ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;var scriptDirectory=\"\";function locateFile(path){if(Module[\"locateFile\"]){return Module[\"locateFile\"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary;if(ENVIRONMENT_IS_NODE){const{createRequire:createRequire}=await import(\"module\");var require=createRequire(import.meta.url);var fs=require(\"fs\");var nodePath=require(\"path\");if(ENVIRONMENT_IS_WORKER){scriptDirectory=nodePath.dirname(scriptDirectory)+\"/\"}else{scriptDirectory=require(\"url\").fileURLToPath(new URL(\"./\",import.meta.url))}read_=(filename,binary)=>{filename=isFileURI(filename)?new URL(filename):nodePath.normalize(filename);return fs.readFileSync(filename,binary?undefined:\"utf8\")};readBinary=filename=>{var ret=read_(filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}return ret};readAsync=(filename,onload,onerror,binary=true)=>{filename=isFileURI(filename)?new URL(filename):nodePath.normalize(filename);fs.readFile(filename,binary?undefined:\"utf8\",(err,data)=>{if(err)onerror(err);else onload(binary?data.buffer:data)})};if(!Module[\"thisProgram\"]&&process.argv.length>1){thisProgram=process.argv[1].replace(/\\\\/g,\"/\")}arguments_=process.argv.slice(2);quit_=(status,toThrow)=>{process.exitCode=status;throw toThrow}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!=\"undefined\"){read_=read}readBinary=f=>{if(typeof readbuffer==\"function\"){return new Uint8Array(readbuffer(f))}let data=read(f,\"binary\");assert(typeof data==\"object\");return data};readAsync=(f,onload,onerror)=>{setTimeout(()=>onload(readBinary(f)))};if(typeof clearTimeout==\"undefined\"){globalThis.clearTimeout=id=>{}}if(typeof setTimeout==\"undefined\"){globalThis.setTimeout=f=>typeof f==\"function\"?f():abort()}if(typeof scriptArgs!=\"undefined\"){arguments_=scriptArgs}else if(typeof arguments!=\"undefined\"){arguments_=arguments}if(typeof quit==\"function\"){quit_=(status,toThrow)=>{setTimeout(()=>{if(!(toThrow instanceof ExitStatus)){let toLog=toThrow;if(toThrow&&typeof toThrow==\"object\"&&toThrow.stack){toLog=[toThrow,toThrow.stack]}err(`exiting due to exception: ${toLog}`)}quit(status)});throw toThrow}}if(typeof print!=\"undefined\"){if(typeof console==\"undefined\")console={};console.log=print;console.warn=console.error=typeof printErr!=\"undefined\"?printErr:print}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(typeof document!=\"undefined\"&&document.currentScript){scriptDirectory=document.currentScript.src}if(_scriptDir){scriptDirectory=_scriptDir}if(scriptDirectory.startsWith(\"blob:\")){scriptDirectory=\"\"}else{scriptDirectory=scriptDirectory.substr(0,scriptDirectory.replace(/[?#].*/,\"\").lastIndexOf(\"/\")+1)}{read_=url=>{var xhr=new XMLHttpRequest;xhr.open(\"GET\",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){readBinary=url=>{var xhr=new XMLHttpRequest;xhr.open(\"GET\",url,false);xhr.responseType=\"arraybuffer\";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=(url,onload,onerror)=>{var xhr=new XMLHttpRequest;xhr.open(\"GET\",url,true);xhr.responseType=\"arraybuffer\";xhr.onload=()=>{if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)}}}else{}var out=Module[\"print\"]||console.log.bind(console);var err=Module[\"printErr\"]||console.error.bind(console);Object.assign(Module,moduleOverrides);moduleOverrides=null;if(Module[\"arguments\"])arguments_=Module[\"arguments\"];if(Module[\"thisProgram\"])thisProgram=Module[\"thisProgram\"];if(Module[\"quit\"])quit_=Module[\"quit\"];var wasmBinary;if(Module[\"wasmBinary\"])wasmBinary=Module[\"wasmBinary\"];if(typeof atob==\"undefined\"){if(typeof global!=\"undefined\"&&typeof globalThis==\"undefined\"){globalThis=global}globalThis.atob=function(input){var keyStr=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";var output=\"\";var chr1,chr2,chr3;var enc1,enc2,enc3,enc4;var i=0;input=input.replace(/[^A-Za-z0-9\\+\\/\\=]/g,\"\");do{enc1=keyStr.indexOf(input.charAt(i++));enc2=keyStr.indexOf(input.charAt(i++));enc3=keyStr.indexOf(input.charAt(i++));enc4=keyStr.indexOf(input.charAt(i++));chr1=enc1<<2|enc2>>4;chr2=(enc2&15)<<4|enc3>>2;chr3=(enc3&3)<<6|enc4;output=output+String.fromCharCode(chr1);if(enc3!==64){output=output+String.fromCharCode(chr2)}if(enc4!==64){output=output+String.fromCharCode(chr3)}}while(i<input.length);return output}}var wasmMemory;var ABORT=false;var EXITSTATUS;function assert(condition,text){if(!condition){abort(text)}}var HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAP64,HEAPU64,HEAPF64;function updateMemoryViews(){var b=wasmMemory.buffer;Module[\"HEAP8\"]=HEAP8=new Int8Array(b);Module[\"HEAP16\"]=HEAP16=new Int16Array(b);Module[\"HEAPU8\"]=HEAPU8=new Uint8Array(b);Module[\"HEAPU16\"]=HEAPU16=new Uint16Array(b);Module[\"HEAP32\"]=HEAP32=new Int32Array(b);Module[\"HEAPU32\"]=HEAPU32=new Uint32Array(b);Module[\"HEAPF32\"]=HEAPF32=new Float32Array(b);Module[\"HEAPF64\"]=HEAPF64=new Float64Array(b);Module[\"HEAP64\"]=HEAP64=new BigInt64Array(b);Module[\"HEAPU64\"]=HEAPU64=new BigUint64Array(b)}var __ATPRERUN__=[];var __ATINIT__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module[\"preRun\"]){if(typeof Module[\"preRun\"]==\"function\")Module[\"preRun\"]=[Module[\"preRun\"]];while(Module[\"preRun\"].length){addOnPreRun(Module[\"preRun\"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){runtimeInitialized=true;if(!Module[\"noFSInit\"]&&!FS.init.initialized)FS.init();FS.ignorePermissions=false;TTY.init();callRuntimeCallbacks(__ATINIT__)}function exitRuntime(){___funcs_on_exit();callRuntimeCallbacks(__ATEXIT__);FS.quit();TTY.shutdown();runtimeExited=true}function postRun(){if(Module[\"postRun\"]){if(typeof Module[\"postRun\"]==\"function\")Module[\"postRun\"]=[Module[\"postRun\"]];while(Module[\"postRun\"].length){addOnPostRun(Module[\"postRun\"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnInit(cb){__ATINIT__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;Module[\"monitorRunDependencies\"]?.(runDependencies)}function removeRunDependency(id){runDependencies--;Module[\"monitorRunDependencies\"]?.(runDependencies);if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}function abort(what){Module[\"onAbort\"]?.(what);what=\"Aborted(\"+what+\")\";err(what);ABORT=true;EXITSTATUS=1;what+=\". Build with -sASSERTIONS for more info.\";if(runtimeInitialized){___trap()}var e=new WebAssembly.RuntimeError(what);readyPromiseReject(e);throw e}var dataURIPrefix=\"data:application/octet-stream;base64,\";var isDataURI=filename=>filename.startsWith(dataURIPrefix);var isFileURI=filename=>filename.startsWith(\"file://\");var wasmBinaryFile;if(Module[\"locateFile\"]){wasmBinaryFile=\"dotnet.native.wasm\";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}}else{if(ENVIRONMENT_IS_SHELL)wasmBinaryFile=\"dotnet.native.wasm\";else wasmBinaryFile=new URL(\"dotnet.native.wasm\",import.meta.url).href}function getBinarySync(file){if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}throw\"both async and sync fetching of the wasm failed\"}function getBinaryPromise(binaryFile){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)){if(typeof fetch==\"function\"&&!isFileURI(binaryFile)){return fetch(binaryFile,{credentials:\"same-origin\"}).then(response=>{if(!response[\"ok\"]){throw`failed to load wasm binary file at '${binaryFile}'`}return response[\"arrayBuffer\"]()}).catch(()=>getBinarySync(binaryFile))}else if(readAsync){return new Promise((resolve,reject)=>{readAsync(binaryFile,response=>resolve(new Uint8Array(response)),reject)})}}return Promise.resolve().then(()=>getBinarySync(binaryFile))}function instantiateArrayBuffer(binaryFile,imports,receiver){return getBinaryPromise(binaryFile).then(binary=>WebAssembly.instantiate(binary,imports)).then(receiver,reason=>{err(`failed to asynchronously prepare wasm: ${reason}`);abort(reason)})}function instantiateAsync(binary,binaryFile,imports,callback){if(!binary&&typeof WebAssembly.instantiateStreaming==\"function\"&&!isDataURI(binaryFile)&&!isFileURI(binaryFile)&&!ENVIRONMENT_IS_NODE&&typeof fetch==\"function\"){return fetch(binaryFile,{credentials:\"same-origin\"}).then(response=>{var result=WebAssembly.instantiateStreaming(response,imports);return result.then(callback,function(reason){err(`wasm streaming compile failed: ${reason}`);err(\"falling back to ArrayBuffer instantiation\");return instantiateArrayBuffer(binaryFile,imports,callback)})})}return instantiateArrayBuffer(binaryFile,imports,callback)}function createWasm(){var info={\"env\":wasmImports,\"wasi_snapshot_preview1\":wasmImports};function receiveInstance(instance,module){wasmExports=instance.exports;Module[\"wasmExports\"]=wasmExports;wasmMemory=wasmExports[\"memory\"];updateMemoryViews();wasmTable=wasmExports[\"__indirect_function_table\"];addOnInit(wasmExports[\"__wasm_call_ctors\"]);removeRunDependency(\"wasm-instantiate\");return wasmExports}addRunDependency(\"wasm-instantiate\");function receiveInstantiationResult(result){receiveInstance(result[\"instance\"])}if(Module[\"instantiateWasm\"]){try{return Module[\"instantiateWasm\"](info,receiveInstance)}catch(e){err(`Module.instantiateWasm callback failed with error: ${e}`);readyPromiseReject(e)}}instantiateAsync(wasmBinary,wasmBinaryFile,info,receiveInstantiationResult).catch(readyPromiseReject);return{}}function GetWindowInnerWidth(){return window.innerWidth}function GetWindowInnerHeight(){return window.innerHeight}function ExitStatus(status){this.name=\"ExitStatus\";this.message=`Program terminated with exit(${status})`;this.status=status}var callRuntimeCallbacks=callbacks=>{while(callbacks.length>0){callbacks.shift()(Module)}};var getCppExceptionTag=()=>wasmExports[\"__cpp_exception\"];var getCppExceptionThrownObjectFromWebAssemblyException=ex=>{var unwind_header=ex.getArg(getCppExceptionTag(),0);return ___thrown_object_from_unwind_exception(unwind_header)};var withStackSave=f=>{var stack=stackSave();var ret=f();stackRestore(stack);return ret};var UTF8Decoder=typeof TextDecoder!=\"undefined\"?new TextDecoder(\"utf8\"):undefined;var UTF8ArrayToString=(heapOrArray,idx,maxBytesToRead)=>{var endIdx=idx+maxBytesToRead;var endPtr=idx;while(heapOrArray[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&heapOrArray.buffer&&UTF8Decoder){return UTF8Decoder.decode(heapOrArray.subarray(idx,endPtr))}var str=\"\";while(idx<endPtr){var u0=heapOrArray[idx++];if(!(u0&128)){str+=String.fromCharCode(u0);continue}var u1=heapOrArray[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}var u2=heapOrArray[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u0=(u0&7)<<18|u1<<12|u2<<6|heapOrArray[idx++]&63}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}return str};var UTF8ToString=(ptr,maxBytesToRead)=>ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):\"\";var getExceptionMessageCommon=ptr=>withStackSave(()=>{var type_addr_addr=stackAlloc(4);var message_addr_addr=stackAlloc(4);___get_exception_message(ptr,type_addr_addr,message_addr_addr);var type_addr=HEAPU32[type_addr_addr>>2];var message_addr=HEAPU32[message_addr_addr>>2];var type=UTF8ToString(type_addr);_free(type_addr);var message;if(message_addr){message=UTF8ToString(message_addr);_free(message_addr)}return[type,message]});var getExceptionMessage=ex=>{var ptr=getCppExceptionThrownObjectFromWebAssemblyException(ex);return getExceptionMessageCommon(ptr)};Module[\"getExceptionMessage\"]=getExceptionMessage;function getValue(ptr,type=\"i8\"){if(type.endsWith(\"*\"))type=\"*\";switch(type){case\"i1\":return HEAP8[ptr];case\"i8\":return HEAP8[ptr];case\"i16\":return HEAP16[ptr>>1];case\"i32\":return HEAP32[ptr>>2];case\"i64\":return HEAP64[ptr>>3];case\"float\":return HEAPF32[ptr>>2];case\"double\":return HEAPF64[ptr>>3];case\"*\":return HEAPU32[ptr>>2];default:abort(`invalid type for getValue: ${type}`)}}var noExitRuntime=Module[\"noExitRuntime\"]||false;function setValue(ptr,value,type=\"i8\"){if(type.endsWith(\"*\"))type=\"*\";switch(type){case\"i1\":HEAP8[ptr]=value;break;case\"i8\":HEAP8[ptr]=value;break;case\"i16\":HEAP16[ptr>>1]=value;break;case\"i32\":HEAP32[ptr>>2]=value;break;case\"i64\":HEAP64[ptr>>3]=BigInt(value);break;case\"float\":HEAPF32[ptr>>2]=value;break;case\"double\":HEAPF64[ptr>>3]=value;break;case\"*\":HEAPU32[ptr>>2]=value;break;default:abort(`invalid type for setValue: ${type}`)}}var ___assert_fail=(condition,filename,line,func)=>{abort(`Assertion failed: ${UTF8ToString(condition)}, at: `+[filename?UTF8ToString(filename):\"unknown filename\",line,func?UTF8ToString(func):\"unknown function\"])};var PATH={isAbs:path=>path.charAt(0)===\"/\",splitPath:filename=>{var splitPathRe=/^(\\/?|)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?|)(\\.[^.\\/]*|))(?:[\\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:(parts,allowAboveRoot)=>{var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last===\".\"){parts.splice(i,1)}else if(last===\"..\"){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift(\"..\")}}return parts},normalize:path=>{var isAbsolute=PATH.isAbs(path),trailingSlash=path.substr(-1)===\"/\";path=PATH.normalizeArray(path.split(\"/\").filter(p=>!!p),!isAbsolute).join(\"/\");if(!path&&!isAbsolute){path=\".\"}if(path&&trailingSlash){path+=\"/\"}return(isAbsolute?\"/\":\"\")+path},dirname:path=>{var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return\".\"}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:path=>{if(path===\"/\")return\"/\";path=PATH.normalize(path);path=path.replace(/\\/$/,\"\");var lastSlash=path.lastIndexOf(\"/\");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},join:(...paths)=>PATH.normalize(paths.join(\"/\")),join2:(l,r)=>PATH.normalize(l+\"/\"+r)};var initRandomFill=()=>{if(typeof crypto==\"object\"&&typeof crypto[\"getRandomValues\"]==\"function\"){return view=>crypto.getRandomValues(view)}else if(ENVIRONMENT_IS_NODE){try{var crypto_module=require(\"crypto\");var randomFillSync=crypto_module[\"randomFillSync\"];if(randomFillSync){return view=>crypto_module[\"randomFillSync\"](view)}var randomBytes=crypto_module[\"randomBytes\"];return view=>(view.set(randomBytes(view.byteLength)),view)}catch(e){}}abort(\"initRandomDevice\")};var randomFill=view=>(randomFill=initRandomFill())(view);var PATH_FS={resolve:(...args)=>{var resolvedPath=\"\",resolvedAbsolute=false;for(var i=args.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?args[i]:FS.cwd();if(typeof path!=\"string\"){throw new TypeError(\"Arguments to path.resolve must be strings\")}else if(!path){return\"\"}resolvedPath=path+\"/\"+resolvedPath;resolvedAbsolute=PATH.isAbs(path)}resolvedPath=PATH.normalizeArray(resolvedPath.split(\"/\").filter(p=>!!p),!resolvedAbsolute).join(\"/\");return(resolvedAbsolute?\"/\":\"\")+resolvedPath||\".\"},relative:(from,to)=>{from=PATH_FS.resolve(from).substr(1);to=PATH_FS.resolve(to).substr(1);function trim(arr){var start=0;for(;start<arr.length;start++){if(arr[start]!==\"\")break}var end=arr.length-1;for(;end>=0;end--){if(arr[end]!==\"\")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split(\"/\"));var toParts=trim(to.split(\"/\"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i<length;i++){if(fromParts[i]!==toParts[i]){samePartsLength=i;break}}var outputParts=[];for(var i=samePartsLength;i<fromParts.length;i++){outputParts.push(\"..\")}outputParts=outputParts.concat(toParts.slice(samePartsLength));return outputParts.join(\"/\")}};var FS_stdin_getChar_buffer=[];var lengthBytesUTF8=str=>{var len=0;for(var i=0;i<str.length;++i){var c=str.charCodeAt(i);if(c<=127){len++}else if(c<=2047){len+=2}else if(c>=55296&&c<=57343){len+=4;++i}else{len+=3}}return len};var stringToUTF8Array=(str,heap,outIdx,maxBytesToWrite)=>{if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i<str.length;++i){var u=str.charCodeAt(i);if(u>=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}}heap[outIdx]=0;return outIdx-startIdx};function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var FS_stdin_getChar=()=>{if(!FS_stdin_getChar_buffer.length){var result=null;if(ENVIRONMENT_IS_NODE){var BUFSIZE=256;var buf=Buffer.alloc(BUFSIZE);var bytesRead=0;var fd=process.stdin.fd;try{bytesRead=fs.readSync(fd,buf)}catch(e){if(e.toString().includes(\"EOF\"))bytesRead=0;else throw e}if(bytesRead>0){result=buf.slice(0,bytesRead).toString(\"utf-8\")}else{result=null}}else if(typeof window!=\"undefined\"&&typeof window.prompt==\"function\"){result=window.prompt(\"Input: \");if(result!==null){result+=\"\\n\"}}else if(typeof readline==\"function\"){result=readline();if(result!==null){result+=\"\\n\"}}if(!result){return null}FS_stdin_getChar_buffer=intArrayFromString(result,true)}return FS_stdin_getChar_buffer.shift()};var TTY={ttys:[],init(){},shutdown(){},register(dev,ops){TTY.ttys[dev]={input:[],output:[],ops:ops};FS.registerDevice(dev,TTY.stream_ops)},stream_ops:{open(stream){var tty=TTY.ttys[stream.node.rdev];if(!tty){throw new FS.ErrnoError(43)}stream.tty=tty;stream.seekable=false},close(stream){stream.tty.ops.fsync(stream.tty)},fsync(stream){stream.tty.ops.fsync(stream.tty)},read(stream,buffer,offset,length,pos){if(!stream.tty||!stream.tty.ops.get_char){throw new FS.ErrnoError(60)}var bytesRead=0;for(var i=0;i<length;i++){var result;try{result=stream.tty.ops.get_char(stream.tty)}catch(e){throw new FS.ErrnoError(29)}if(result===undefined&&bytesRead===0){throw new FS.ErrnoError(6)}if(result===null||result===undefined)break;bytesRead++;buffer[offset+i]=result}if(bytesRead){stream.node.timestamp=Date.now()}return bytesRead},write(stream,buffer,offset,length,pos){if(!stream.tty||!stream.tty.ops.put_char){throw new FS.ErrnoError(60)}try{for(var i=0;i<length;i++){stream.tty.ops.put_char(stream.tty,buffer[offset+i])}}catch(e){throw new FS.ErrnoError(29)}if(length){stream.node.timestamp=Date.now()}return i}},default_tty_ops:{get_char(tty){return FS_stdin_getChar()},put_char(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},fsync(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}},ioctl_tcgets(tty){return{c_iflag:25856,c_oflag:5,c_cflag:191,c_lflag:35387,c_cc:[3,28,127,21,4,0,1,0,17,19,26,0,18,15,23,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}},ioctl_tcsets(tty,optional_actions,data){return 0},ioctl_tiocgwinsz(tty){return[24,80]}},default_tty1_ops:{put_char(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},fsync(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};var zeroMemory=(address,size)=>{HEAPU8.fill(0,address,address+size);return address};var alignMemory=(size,alignment)=>Math.ceil(size/alignment)*alignment;var mmapAlloc=size=>{size=alignMemory(size,65536);var ptr=_emscripten_builtin_memalign(65536,size);if(!ptr)return 0;return zeroMemory(ptr,size)};var MEMFS={ops_table:null,mount(mount){return MEMFS.createNode(null,\"/\",16384|511,0)},createNode(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(63)}MEMFS.ops_table||={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}};var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node;parent.timestamp=node.timestamp}return node},getFileDataAsTypedArray(node){if(!node.contents)return new Uint8Array(0);if(node.contents.subarray)return node.contents.subarray(0,node.usedBytes);return new Uint8Array(node.contents)},expandFileStorage(node,newCapacity){var prevCapacity=node.contents?node.contents.length:0;if(prevCapacity>=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity<CAPACITY_DOUBLING_MAX?2:1.125)>>>0);if(prevCapacity!=0)newCapacity=Math.max(newCapacity,256);var oldContents=node.contents;node.contents=new Uint8Array(newCapacity);if(node.usedBytes>0)node.contents.set(oldContents.subarray(0,node.usedBytes),0)},resizeFileStorage(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0}else{var oldContents=node.contents;node.contents=new Uint8Array(newSize);if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize}},node_ops:{getattr(node){var attr={};attr.dev=FS.isChrdev(node.mode)?node.id:1;attr.ino=node.id;attr.mode=node.mode;attr.nlink=1;attr.uid=0;attr.gid=0;attr.rdev=node.rdev;if(FS.isDir(node.mode)){attr.size=4096}else if(FS.isFile(node.mode)){attr.size=node.usedBytes}else if(FS.isLink(node.mode)){attr.size=node.link.length}else{attr.size=0}attr.atime=new Date(node.timestamp);attr.mtime=new Date(node.timestamp);attr.ctime=new Date(node.timestamp);attr.blksize=4096;attr.blocks=Math.ceil(attr.size/attr.blksize);return attr},setattr(node,attr){if(attr.mode!==undefined){node.mode=attr.mode}if(attr.timestamp!==undefined){node.timestamp=attr.timestamp}if(attr.size!==undefined){MEMFS.resizeFileStorage(node,attr.size)}},lookup(parent,name){throw FS.genericErrors[44]},mknod(parent,name,mode,dev){return MEMFS.createNode(parent,name,mode,dev)},rename(old_node,new_dir,new_name){if(FS.isDir(old_node.mode)){var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(new_node){for(var i in new_node.contents){throw new FS.ErrnoError(55)}}}delete old_node.parent.contents[old_node.name];old_node.parent.timestamp=Date.now();old_node.name=new_name;new_dir.contents[new_name]=old_node;new_dir.timestamp=old_node.parent.timestamp;old_node.parent=new_dir},unlink(parent,name){delete parent.contents[name];parent.timestamp=Date.now()},rmdir(parent,name){var node=FS.lookupNode(parent,name);for(var i in node.contents){throw new FS.ErrnoError(55)}delete parent.contents[name];parent.timestamp=Date.now()},readdir(node){var entries=[\".\",\"..\"];for(var key of Object.keys(node.contents)){entries.push(key)}return entries},symlink(parent,newname,oldpath){var node=MEMFS.createNode(parent,newname,511|40960,0);node.link=oldpath;return node},readlink(node){if(!FS.isLink(node.mode)){throw new FS.ErrnoError(28)}return node.link}},stream_ops:{read(stream,buffer,offset,length,position){var contents=stream.node.contents;if(position>=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i<size;i++)buffer[offset+i]=contents[position+i]}return size},write(stream,buffer,offset,length,position,canOwn){if(buffer.buffer===HEAP8.buffer){canOwn=false}if(!length)return 0;var node=stream.node;node.timestamp=Date.now();if(buffer.subarray&&(!node.contents||node.contents.subarray)){if(canOwn){node.contents=buffer.subarray(offset,offset+length);node.usedBytes=length;return length}else if(node.usedBytes===0&&position===0){node.contents=buffer.slice(offset,offset+length);node.usedBytes=length;return length}else if(position+length<=node.usedBytes){node.contents.set(buffer.subarray(offset,offset+length),position);return length}}MEMFS.expandFileStorage(node,position+length);if(node.contents.subarray&&buffer.subarray){node.contents.set(buffer.subarray(offset,offset+length),position)}else{for(var i=0;i<length;i++){node.contents[position+i]=buffer[offset+i]}}node.usedBytes=Math.max(node.usedBytes,position+length);return length},llseek(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.usedBytes}}if(position<0){throw new FS.ErrnoError(28)}return position},allocate(stream,offset,length){MEMFS.expandFileStorage(stream.node,offset+length);stream.node.usedBytes=Math.max(stream.node.usedBytes,offset+length)},mmap(stream,length,position,prot,flags){if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(43)}var ptr;var allocated;var contents=stream.node.contents;if(!(flags&2)&&contents.buffer===HEAP8.buffer){allocated=false;ptr=contents.byteOffset}else{if(position>0||position+length<contents.length){if(contents.subarray){contents=contents.subarray(position,position+length)}else{contents=Array.prototype.slice.call(contents,position,position+length)}}allocated=true;ptr=mmapAlloc(length);if(!ptr){throw new FS.ErrnoError(48)}HEAP8.set(contents,ptr)}return{ptr:ptr,allocated:allocated}},msync(stream,buffer,offset,length,mmapFlags){MEMFS.stream_ops.write(stream,buffer,0,length,offset,false);return 0}}};var asyncLoad=(url,onload,onerror,noRunDep)=>{var dep=!noRunDep?getUniqueRunDependency(`al ${url}`):\"\";readAsync(url,arrayBuffer=>{onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},event=>{if(onerror){onerror()}else{throw`Loading data file \"${url}\" failed.`}});if(dep)addRunDependency(dep)};var FS_createDataFile=(parent,name,fileData,canRead,canWrite,canOwn)=>{FS.createDataFile(parent,name,fileData,canRead,canWrite,canOwn)};var preloadPlugins=Module[\"preloadPlugins\"]||[];var FS_handledByPreloadPlugin=(byteArray,fullname,finish,onerror)=>{if(typeof Browser!=\"undefined\")Browser.init();var handled=false;preloadPlugins.forEach(plugin=>{if(handled)return;if(plugin[\"canHandle\"](fullname)){plugin[\"handle\"](byteArray,fullname,finish,onerror);handled=true}});return handled};var FS_createPreloadedFile=(parent,name,url,canRead,canWrite,onload,onerror,dontCreateFile,canOwn,preFinish)=>{var fullname=name?PATH_FS.resolve(PATH.join2(parent,name)):parent;var dep=getUniqueRunDependency(`cp ${fullname}`);function processData(byteArray){function finish(byteArray){preFinish?.();if(!dontCreateFile){FS_createDataFile(parent,name,byteArray,canRead,canWrite,canOwn)}onload?.();removeRunDependency(dep)}if(FS_handledByPreloadPlugin(byteArray,fullname,finish,()=>{onerror?.();removeRunDependency(dep)})){return}finish(byteArray)}addRunDependency(dep);if(typeof url==\"string\"){asyncLoad(url,processData,onerror)}else{processData(url)}};var FS_modeStringToFlags=str=>{var flagModes={\"r\":0,\"r+\":2,\"w\":512|64|1,\"w+\":512|64|2,\"a\":1024|64|1,\"a+\":1024|64|2};var flags=flagModes[str];if(typeof flags==\"undefined\"){throw new Error(`Unknown file open mode: ${str}`)}return flags};var FS_getMode=(canRead,canWrite)=>{var mode=0;if(canRead)mode|=292|73;if(canWrite)mode|=146;return mode};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:\"/\",initialized:false,ignorePermissions:true,ErrnoError:class{constructor(errno){this.name=\"ErrnoError\";this.errno=errno}},genericErrors:{},filesystems:null,syncFSRequests:0,FSStream:class{constructor(){this.shared={}}get object(){return this.node}set object(val){this.node=val}get isRead(){return(this.flags&2097155)!==1}get isWrite(){return(this.flags&2097155)!==0}get isAppend(){return this.flags&1024}get flags(){return this.shared.flags}set flags(val){this.shared.flags=val}get position(){return this.shared.position}set position(val){this.shared.position=val}},FSNode:class{constructor(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev;this.readMode=292|73;this.writeMode=146}get read(){return(this.mode&this.readMode)===this.readMode}set read(val){val?this.mode|=this.readMode:this.mode&=~this.readMode}get write(){return(this.mode&this.writeMode)===this.writeMode}set write(val){val?this.mode|=this.writeMode:this.mode&=~this.writeMode}get isFolder(){return FS.isDir(this.mode)}get isDevice(){return FS.isChrdev(this.mode)}},lookupPath(path,opts={}){path=PATH_FS.resolve(path);if(!path)return{path:\"\",node:null};var defaults={follow_mount:true,recurse_count:0};opts=Object.assign(defaults,opts);if(opts.recurse_count>8){throw new FS.ErrnoError(32)}var parts=path.split(\"/\").filter(p=>!!p);var current=FS.root;var current_path=\"/\";for(var i=0;i<parts.length;i++){var islast=i===parts.length-1;if(islast&&opts.parent){break}current=FS.lookupNode(current,parts[i]);current_path=PATH.join2(current_path,parts[i]);if(FS.isMountpoint(current)){if(!islast||islast&&opts.follow_mount){current=current.mounted.root}}if(!islast||opts.follow){var count=0;while(FS.isLink(current.mode)){var link=FS.readlink(current_path);current_path=PATH_FS.resolve(PATH.dirname(current_path),link);var lookup=FS.lookupPath(current_path,{recurse_count:opts.recurse_count+1});current=lookup.node;if(count++>40){throw new FS.ErrnoError(32)}}}}return{path:current_path,node:current}},getPath(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!==\"/\"?`${mount}/${path}`:mount+path}path=path?`${node.name}/${path}`:node.name;node=node.parent}},hashName(parentid,name){var hash=0;for(var i=0;i<name.length;i++){hash=(hash<<5)-hash+name.charCodeAt(i)|0}return(parentid+hash>>>0)%FS.nameTable.length},hashAddNode(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode(parent,name){var errCode=FS.mayLookup(parent);if(errCode){throw new FS.ErrnoError(errCode)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode(parent,name,mode,rdev){var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode(node){FS.hashRemoveNode(node)},isRoot(node){return node===node.parent},isMountpoint(node){return!!node.mounted},isFile(mode){return(mode&61440)===32768},isDir(mode){return(mode&61440)===16384},isLink(mode){return(mode&61440)===40960},isChrdev(mode){return(mode&61440)===8192},isBlkdev(mode){return(mode&61440)===24576},isFIFO(mode){return(mode&61440)===4096},isSocket(mode){return(mode&49152)===49152},flagsToPermissionString(flag){var perms=[\"r\",\"w\",\"rw\"][flag&3];if(flag&512){perms+=\"w\"}return perms},nodePermissions(node,perms){if(FS.ignorePermissions){return 0}if(perms.includes(\"r\")&&!(node.mode&292)){return 2}else if(perms.includes(\"w\")&&!(node.mode&146)){return 2}else if(perms.includes(\"x\")&&!(node.mode&73)){return 2}return 0},mayLookup(dir){if(!FS.isDir(dir.mode))return 54;var errCode=FS.nodePermissions(dir,\"x\");if(errCode)return errCode;if(!dir.node_ops.lookup)return 2;return 0},mayCreate(dir,name){try{var node=FS.lookupNode(dir,name);return 20}catch(e){}return FS.nodePermissions(dir,\"wx\")},mayDelete(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var errCode=FS.nodePermissions(dir,\"wx\");if(errCode){return errCode}if(isdir){if(!FS.isDir(node.mode)){return 54}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 10}}else{if(FS.isDir(node.mode)){return 31}}return 0},mayOpen(node,flags){if(!node){return 44}if(FS.isLink(node.mode)){return 32}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!==\"r\"||flags&512){return 31}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd(){for(var fd=0;fd<=FS.MAX_OPEN_FDS;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(33)},getStreamChecked(fd){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}return stream},getStream:fd=>FS.streams[fd],createStream(stream,fd=-1){stream=Object.assign(new FS.FSStream,stream);if(fd==-1){fd=FS.nextfd()}stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream(fd){FS.streams[fd]=null},dupStream(origStream,fd=-1){var stream=FS.createStream(origStream,fd);stream.stream_ops?.dup?.(stream);return stream},chrdev_stream_ops:{open(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;stream.stream_ops.open?.(stream)},llseek(){throw new FS.ErrnoError(70)}},major:dev=>dev>>8,minor:dev=>dev&255,makedev:(ma,mi)=>ma<<8|mi,registerDevice(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:dev=>FS.devices[dev],getMounts(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push(...m.mounts)}return mounts},syncfs(populate,callback){if(typeof populate==\"function\"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){err(`warning: ${FS.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`)}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(errCode){FS.syncFSRequests--;return callback(errCode)}function done(errCode){if(errCode){if(!done.errored){done.errored=true;return doCallback(errCode)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(mount=>{if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount(type,opts,mountpoint){var root=mountpoint===\"/\";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(10)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(54)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(28)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(hash=>{var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.includes(current.mount)){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup(parent,name){return parent.node_ops.lookup(parent,name)},mknod(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name===\".\"||name===\"..\"){throw new FS.ErrnoError(28)}var errCode=FS.mayCreate(parent,name);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(63)}return parent.node_ops.mknod(parent,name,mode,dev)},create(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree(path,mode){var dirs=path.split(\"/\");var d=\"\";for(var i=0;i<dirs.length;++i){if(!dirs[i])continue;d+=\"/\"+dirs[i];try{FS.mkdir(d,mode)}catch(e){if(e.errno!=20)throw e}}},mkdev(path,mode,dev){if(typeof dev==\"undefined\"){dev=mode;mode=438}mode|=8192;return FS.mknod(path,mode,dev)},symlink(oldpath,newpath){if(!PATH_FS.resolve(oldpath)){throw new FS.ErrnoError(44)}var lookup=FS.lookupPath(newpath,{parent:true});var parent=lookup.node;if(!parent){throw new FS.ErrnoError(44)}var newname=PATH.basename(newpath);var errCode=FS.mayCreate(parent,newname);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.symlink){throw new FS.ErrnoError(63)}return parent.node_ops.symlink(parent,newname,oldpath)},rename(old_path,new_path){var old_dirname=PATH.dirname(old_path);var new_dirname=PATH.dirname(new_path);var old_name=PATH.basename(old_path);var new_name=PATH.basename(new_path);var lookup,old_dir,new_dir;lookup=FS.lookupPath(old_path,{parent:true});old_dir=lookup.node;lookup=FS.lookupPath(new_path,{parent:true});new_dir=lookup.node;if(!old_dir||!new_dir)throw new FS.ErrnoError(44);if(old_dir.mount!==new_dir.mount){throw new FS.ErrnoError(75)}var old_node=FS.lookupNode(old_dir,old_name);var relative=PATH_FS.relative(old_path,new_dirname);if(relative.charAt(0)!==\".\"){throw new FS.ErrnoError(28)}relative=PATH_FS.relative(new_path,old_dirname);if(relative.charAt(0)!==\".\"){throw new FS.ErrnoError(55)}var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(old_node===new_node){return}var isdir=FS.isDir(old_node.mode);var errCode=FS.mayDelete(old_dir,old_name,isdir);if(errCode){throw new FS.ErrnoError(errCode)}errCode=new_node?FS.mayDelete(new_dir,new_name,isdir):FS.mayCreate(new_dir,new_name);if(errCode){throw new FS.ErrnoError(errCode)}if(!old_dir.node_ops.rename){throw new FS.ErrnoError(63)}if(FS.isMountpoint(old_node)||new_node&&FS.isMountpoint(new_node)){throw new FS.ErrnoError(10)}if(new_dir!==old_dir){errCode=FS.nodePermissions(old_dir,\"w\");if(errCode){throw new FS.ErrnoError(errCode)}}FS.hashRemoveNode(old_node);try{old_dir.node_ops.rename(old_node,new_dir,new_name)}catch(e){throw e}finally{FS.hashAddNode(old_node)}},rmdir(path){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var errCode=FS.mayDelete(parent,name,true);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.rmdir){throw new FS.ErrnoError(63)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}parent.node_ops.rmdir(parent,name);FS.destroyNode(node)},readdir(path){var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;if(!node.node_ops.readdir){throw new FS.ErrnoError(54)}return node.node_ops.readdir(node)},unlink(path){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;if(!parent){throw new FS.ErrnoError(44)}var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var errCode=FS.mayDelete(parent,name,false);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.unlink){throw new FS.ErrnoError(63)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}parent.node_ops.unlink(parent,name);FS.destroyNode(node)},readlink(path){var lookup=FS.lookupPath(path);var link=lookup.node;if(!link){throw new FS.ErrnoError(44)}if(!link.node_ops.readlink){throw new FS.ErrnoError(28)}return PATH_FS.resolve(FS.getPath(link.parent),link.node_ops.readlink(link))},stat(path,dontFollow){var lookup=FS.lookupPath(path,{follow:!dontFollow});var node=lookup.node;if(!node){throw new FS.ErrnoError(44)}if(!node.node_ops.getattr){throw new FS.ErrnoError(63)}return node.node_ops.getattr(node)},lstat(path){return FS.stat(path,true)},chmod(path,mode,dontFollow){var node;if(typeof path==\"string\"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(63)}node.node_ops.setattr(node,{mode:mode&4095|node.mode&~4095,timestamp:Date.now()})},lchmod(path,mode){FS.chmod(path,mode,true)},fchmod(fd,mode){var stream=FS.getStreamChecked(fd);FS.chmod(stream.node,mode)},chown(path,uid,gid,dontFollow){var node;if(typeof path==\"string\"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(63)}node.node_ops.setattr(node,{timestamp:Date.now()})},lchown(path,uid,gid){FS.chown(path,uid,gid,true)},fchown(fd,uid,gid){var stream=FS.getStreamChecked(fd);FS.chown(stream.node,uid,gid)},truncate(path,len){if(len<0){throw new FS.ErrnoError(28)}var node;if(typeof path==\"string\"){var lookup=FS.lookupPath(path,{follow:true});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(63)}if(FS.isDir(node.mode)){throw new FS.ErrnoError(31)}if(!FS.isFile(node.mode)){throw new FS.ErrnoError(28)}var errCode=FS.nodePermissions(node,\"w\");if(errCode){throw new FS.ErrnoError(errCode)}node.node_ops.setattr(node,{size:len,timestamp:Date.now()})},ftruncate(fd,len){var stream=FS.getStreamChecked(fd);if((stream.flags&2097155)===0){throw new FS.ErrnoError(28)}FS.truncate(stream.node,len)},utime(path,atime,mtime){var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;node.node_ops.setattr(node,{timestamp:Math.max(atime,mtime)})},open(path,flags,mode){if(path===\"\"){throw new FS.ErrnoError(44)}flags=typeof flags==\"string\"?FS_modeStringToFlags(flags):flags;mode=typeof mode==\"undefined\"?438:mode;if(flags&64){mode=mode&4095|32768}else{mode=0}var node;if(typeof path==\"object\"){node=path}else{path=PATH.normalize(path);try{var lookup=FS.lookupPath(path,{follow:!(flags&131072)});node=lookup.node}catch(e){}}var created=false;if(flags&64){if(node){if(flags&128){throw new FS.ErrnoError(20)}}else{node=FS.mknod(path,mode,0);created=true}}if(!node){throw new FS.ErrnoError(44)}if(FS.isChrdev(node.mode)){flags&=~512}if(flags&65536&&!FS.isDir(node.mode)){throw new FS.ErrnoError(54)}if(!created){var errCode=FS.mayOpen(node,flags);if(errCode){throw new FS.ErrnoError(errCode)}}if(flags&512&&!created){FS.truncate(node,0)}flags&=~(128|512|131072);var stream=FS.createStream({node:node,path:FS.getPath(node),flags:flags,seekable:true,position:0,stream_ops:node.stream_ops,ungotten:[],error:false});if(stream.stream_ops.open){stream.stream_ops.open(stream)}if(Module[\"logReadFiles\"]&&!(flags&1)){if(!FS.readFiles)FS.readFiles={};if(!(path in FS.readFiles)){FS.readFiles[path]=1}}return stream},close(stream){if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if(stream.getdents)stream.getdents=null;try{if(stream.stream_ops.close){stream.stream_ops.close(stream)}}catch(e){throw e}finally{FS.closeStream(stream.fd)}stream.fd=null},isClosed(stream){return stream.fd===null},llseek(stream,offset,whence){if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if(!stream.seekable||!stream.stream_ops.llseek){throw new FS.ErrnoError(70)}if(whence!=0&&whence!=1&&whence!=2){throw new FS.ErrnoError(28)}stream.position=stream.stream_ops.llseek(stream,offset,whence);stream.ungotten=[];return stream.position},read(stream,buffer,offset,length,position){if(length<0||position<0){throw new FS.ErrnoError(28)}if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if((stream.flags&2097155)===1){throw new FS.ErrnoError(8)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(31)}if(!stream.stream_ops.read){throw new FS.ErrnoError(28)}var seeking=typeof position!=\"undefined\";if(!seeking){position=stream.position}else if(!stream.seekable){throw new FS.ErrnoError(70)}var bytesRead=stream.stream_ops.read(stream,buffer,offset,length,position);if(!seeking)stream.position+=bytesRead;return bytesRead},write(stream,buffer,offset,length,position,canOwn){if(length<0||position<0){throw new FS.ErrnoError(28)}if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(8)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(31)}if(!stream.stream_ops.write){throw new FS.ErrnoError(28)}if(stream.seekable&&stream.flags&1024){FS.llseek(stream,0,2)}var seeking=typeof position!=\"undefined\";if(!seeking){position=stream.position}else if(!stream.seekable){throw new FS.ErrnoError(70)}var bytesWritten=stream.stream_ops.write(stream,buffer,offset,length,position,canOwn);if(!seeking)stream.position+=bytesWritten;return bytesWritten},allocate(stream,offset,length){if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if(offset<0||length<=0){throw new FS.ErrnoError(28)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(8)}if(!FS.isFile(stream.node.mode)&&!FS.isDir(stream.node.mode)){throw new FS.ErrnoError(43)}if(!stream.stream_ops.allocate){throw new FS.ErrnoError(138)}stream.stream_ops.allocate(stream,offset,length)},mmap(stream,length,position,prot,flags){if((prot&2)!==0&&(flags&2)===0&&(stream.flags&2097155)!==2){throw new FS.ErrnoError(2)}if((stream.flags&2097155)===1){throw new FS.ErrnoError(2)}if(!stream.stream_ops.mmap){throw new FS.ErrnoError(43)}return stream.stream_ops.mmap(stream,length,position,prot,flags)},msync(stream,buffer,offset,length,mmapFlags){if(!stream.stream_ops.msync){return 0}return stream.stream_ops.msync(stream,buffer,offset,length,mmapFlags)},ioctl(stream,cmd,arg){if(!stream.stream_ops.ioctl){throw new FS.ErrnoError(59)}return stream.stream_ops.ioctl(stream,cmd,arg)},readFile(path,opts={}){opts.flags=opts.flags||0;opts.encoding=opts.encoding||\"binary\";if(opts.encoding!==\"utf8\"&&opts.encoding!==\"binary\"){throw new Error(`Invalid encoding type \"${opts.encoding}\"`)}var ret;var stream=FS.open(path,opts.flags);var stat=FS.stat(path);var length=stat.size;var buf=new Uint8Array(length);FS.read(stream,buf,0,length,0);if(opts.encoding===\"utf8\"){ret=UTF8ArrayToString(buf,0)}else if(opts.encoding===\"binary\"){ret=buf}FS.close(stream);return ret},writeFile(path,data,opts={}){opts.flags=opts.flags||577;var stream=FS.open(path,opts.flags,opts.mode);if(typeof data==\"string\"){var buf=new Uint8Array(lengthBytesUTF8(data)+1);var actualNumBytes=stringToUTF8Array(data,buf,0,buf.length);FS.write(stream,buf,0,actualNumBytes,undefined,opts.canOwn)}else if(ArrayBuffer.isView(data)){FS.write(stream,data,0,data.byteLength,undefined,opts.canOwn)}else{throw new Error(\"Unsupported data type\")}FS.close(stream)},cwd:()=>FS.currentPath,chdir(path){var lookup=FS.lookupPath(path,{follow:true});if(lookup.node===null){throw new FS.ErrnoError(44)}if(!FS.isDir(lookup.node.mode)){throw new FS.ErrnoError(54)}var errCode=FS.nodePermissions(lookup.node,\"x\");if(errCode){throw new FS.ErrnoError(errCode)}FS.currentPath=lookup.path},createDefaultDirectories(){FS.mkdir(\"/tmp\");FS.mkdir(\"/home\");FS.mkdir(\"/home/web_user\")},createDefaultDevices(){FS.mkdir(\"/dev\");FS.registerDevice(FS.makedev(1,3),{read:()=>0,write:(stream,buffer,offset,length,pos)=>length});FS.mkdev(\"/dev/null\",FS.makedev(1,3));TTY.register(FS.makedev(5,0),TTY.default_tty_ops);TTY.register(FS.makedev(6,0),TTY.default_tty1_ops);FS.mkdev(\"/dev/tty\",FS.makedev(5,0));FS.mkdev(\"/dev/tty1\",FS.makedev(6,0));var randomBuffer=new Uint8Array(1024),randomLeft=0;var randomByte=()=>{if(randomLeft===0){randomLeft=randomFill(randomBuffer).byteLength}return randomBuffer[--randomLeft]};FS.createDevice(\"/dev\",\"random\",randomByte);FS.createDevice(\"/dev\",\"urandom\",randomByte);FS.mkdir(\"/dev/shm\");FS.mkdir(\"/dev/shm/tmp\")},createSpecialDirectories(){FS.mkdir(\"/proc\");var proc_self=FS.mkdir(\"/proc/self\");FS.mkdir(\"/proc/self/fd\");FS.mount({mount(){var node=FS.createNode(proc_self,\"fd\",16384|511,73);node.node_ops={lookup(parent,name){var fd=+name;var stream=FS.getStreamChecked(fd);var ret={parent:null,mount:{mountpoint:\"fake\"},node_ops:{readlink:()=>stream.path}};ret.parent=ret;return ret}};return node}},{},\"/proc/self/fd\")},createStandardStreams(){if(Module[\"stdin\"]){FS.createDevice(\"/dev\",\"stdin\",Module[\"stdin\"])}else{FS.symlink(\"/dev/tty\",\"/dev/stdin\")}if(Module[\"stdout\"]){FS.createDevice(\"/dev\",\"stdout\",null,Module[\"stdout\"])}else{FS.symlink(\"/dev/tty\",\"/dev/stdout\")}if(Module[\"stderr\"]){FS.createDevice(\"/dev\",\"stderr\",null,Module[\"stderr\"])}else{FS.symlink(\"/dev/tty1\",\"/dev/stderr\")}var stdin=FS.open(\"/dev/stdin\",0);var stdout=FS.open(\"/dev/stdout\",1);var stderr=FS.open(\"/dev/stderr\",1)},staticInit(){[44].forEach(code=>{FS.genericErrors[code]=new FS.ErrnoError(code);FS.genericErrors[code].stack=\"<generic error, no stack>\"});FS.nameTable=new Array(4096);FS.mount(MEMFS,{},\"/\");FS.createDefaultDirectories();FS.createDefaultDevices();FS.createSpecialDirectories();FS.filesystems={\"MEMFS\":MEMFS}},init(input,output,error){FS.init.initialized=true;Module[\"stdin\"]=input||Module[\"stdin\"];Module[\"stdout\"]=output||Module[\"stdout\"];Module[\"stderr\"]=error||Module[\"stderr\"];FS.createStandardStreams()},quit(){FS.init.initialized=false;_fflush(0);for(var i=0;i<FS.streams.length;i++){var stream=FS.streams[i];if(!stream){continue}FS.close(stream)}},findObject(path,dontResolveLastLink){var ret=FS.analyzePath(path,dontResolveLastLink);if(!ret.exists){return null}return ret.object},analyzePath(path,dontResolveLastLink){try{var lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});path=lookup.path}catch(e){}var ret={isRoot:false,exists:false,error:0,name:null,path:null,object:null,parentExists:false,parentPath:null,parentObject:null};try{var lookup=FS.lookupPath(path,{parent:true});ret.parentExists=true;ret.parentPath=lookup.path;ret.parentObject=lookup.node;ret.name=PATH.basename(path);lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});ret.exists=true;ret.path=lookup.path;ret.object=lookup.node;ret.name=lookup.node.name;ret.isRoot=lookup.path===\"/\"}catch(e){ret.error=e.errno}return ret},createPath(parent,path,canRead,canWrite){parent=typeof parent==\"string\"?parent:FS.getPath(parent);var parts=path.split(\"/\").reverse();while(parts.length){var part=parts.pop();if(!part)continue;var current=PATH.join2(parent,part);try{FS.mkdir(current)}catch(e){}parent=current}return current},createFile(parent,name,properties,canRead,canWrite){var path=PATH.join2(typeof parent==\"string\"?parent:FS.getPath(parent),name);var mode=FS_getMode(canRead,canWrite);return FS.create(path,mode)},createDataFile(parent,name,data,canRead,canWrite,canOwn){var path=name;if(parent){parent=typeof parent==\"string\"?parent:FS.getPath(parent);path=name?PATH.join2(parent,name):parent}var mode=FS_getMode(canRead,canWrite);var node=FS.create(path,mode);if(data){if(typeof data==\"string\"){var arr=new Array(data.length);for(var i=0,len=data.length;i<len;++i)arr[i]=data.charCodeAt(i);data=arr}FS.chmod(node,mode|146);var stream=FS.open(node,577);FS.write(stream,data,0,data.length,0,canOwn);FS.close(stream);FS.chmod(node,mode)}},createDevice(parent,name,input,output){var path=PATH.join2(typeof parent==\"string\"?parent:FS.getPath(parent),name);var mode=FS_getMode(!!input,!!output);if(!FS.createDevice.major)FS.createDevice.major=64;var dev=FS.makedev(FS.createDevice.major++,0);FS.registerDevice(dev,{open(stream){stream.seekable=false},close(stream){if(output?.buffer?.length){output(10)}},read(stream,buffer,offset,length,pos){var bytesRead=0;for(var i=0;i<length;i++){var result;try{result=input()}catch(e){throw new FS.ErrnoError(29)}if(result===undefined&&bytesRead===0){throw new FS.ErrnoError(6)}if(result===null||result===undefined)break;bytesRead++;buffer[offset+i]=result}if(bytesRead){stream.node.timestamp=Date.now()}return bytesRead},write(stream,buffer,offset,length,pos){for(var i=0;i<length;i++){try{output(buffer[offset+i])}catch(e){throw new FS.ErrnoError(29)}}if(length){stream.node.timestamp=Date.now()}return i}});return FS.mkdev(path,mode,dev)},forceLoadFile(obj){if(obj.isDevice||obj.isFolder||obj.link||obj.contents)return true;if(typeof XMLHttpRequest!=\"undefined\"){throw new Error(\"Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.\")}else if(read_){try{obj.contents=intArrayFromString(read_(obj.url),true);obj.usedBytes=obj.contents.length}catch(e){throw new FS.ErrnoError(29)}}else{throw new Error(\"Cannot load without read() or XMLHttpRequest.\")}},createLazyFile(parent,name,url,canRead,canWrite){class LazyUint8Array{constructor(){this.lengthKnown=false;this.chunks=[]}get(idx){if(idx>this.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]}setDataGetter(getter){this.getter=getter}cacheLength(){var xhr=new XMLHttpRequest;xhr.open(\"HEAD\",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error(\"Couldn't load \"+url+\". Status: \"+xhr.status);var datalength=Number(xhr.getResponseHeader(\"Content-length\"));var header;var hasByteServing=(header=xhr.getResponseHeader(\"Accept-Ranges\"))&&header===\"bytes\";var usesGzip=(header=xhr.getResponseHeader(\"Content-Encoding\"))&&header===\"gzip\";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=(from,to)=>{if(from>to)throw new Error(\"invalid range (\"+from+\", \"+to+\") or no bytes requested!\");if(to>datalength-1)throw new Error(\"only \"+datalength+\" bytes available! programmer error!\");var xhr=new XMLHttpRequest;xhr.open(\"GET\",url,false);if(datalength!==chunkSize)xhr.setRequestHeader(\"Range\",\"bytes=\"+from+\"-\"+to);xhr.responseType=\"arraybuffer\";if(xhr.overrideMimeType){xhr.overrideMimeType(\"text/plain; charset=x-user-defined\")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error(\"Couldn't load \"+url+\". Status: \"+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}return intArrayFromString(xhr.responseText||\"\",true)};var lazyArray=this;lazyArray.setDataGetter(chunkNum=>{var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==\"undefined\"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==\"undefined\")throw new Error(\"doXHR failed!\");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;out(\"LazyFiles on gzip forces download of the whole file when length is accessed\")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true}get length(){if(!this.lengthKnown){this.cacheLength()}return this._length}get chunkSize(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}if(typeof XMLHttpRequest!=\"undefined\"){if(!ENVIRONMENT_IS_WORKER)throw\"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc\";var lazyArray=new LazyUint8Array;var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(key=>{var fn=node.stream_ops[key];stream_ops[key]=(...args)=>{FS.forceLoadFile(node);return fn(...args)}});function writeChunks(stream,buffer,offset,length,position){var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i<size;i++){buffer[offset+i]=contents[position+i]}}else{for(var i=0;i<size;i++){buffer[offset+i]=contents.get(position+i)}}return size}stream_ops.read=(stream,buffer,offset,length,position)=>{FS.forceLoadFile(node);return writeChunks(stream,buffer,offset,length,position)};stream_ops.mmap=(stream,length,position,prot,flags)=>{FS.forceLoadFile(node);var ptr=mmapAlloc(length);if(!ptr){throw new FS.ErrnoError(48)}writeChunks(stream,HEAP8,ptr,length,position);return{ptr:ptr,allocated:true}};node.stream_ops=stream_ops;return node}};var SYSCALLS={DEFAULT_POLLMASK:5,calculateAt(dirfd,path,allowEmpty){if(PATH.isAbs(path)){return path}var dir;if(dirfd===-100){dir=FS.cwd()}else{var dirstream=SYSCALLS.getStreamFromFD(dirfd);dir=dirstream.path}if(path.length==0){if(!allowEmpty){throw new FS.ErrnoError(44)}return dir}return PATH.join2(dir,path)},doStat(func,path,buf){var stat=func(path);HEAP32[buf>>2]=stat.dev;HEAP32[buf+4>>2]=stat.mode;HEAPU32[buf+8>>2]=stat.nlink;HEAP32[buf+12>>2]=stat.uid;HEAP32[buf+16>>2]=stat.gid;HEAP32[buf+20>>2]=stat.rdev;HEAP64[buf+24>>3]=BigInt(stat.size);HEAP32[buf+32>>2]=4096;HEAP32[buf+36>>2]=stat.blocks;var atime=stat.atime.getTime();var mtime=stat.mtime.getTime();var ctime=stat.ctime.getTime();HEAP64[buf+40>>3]=BigInt(Math.floor(atime/1e3));HEAPU32[buf+48>>2]=atime%1e3*1e3;HEAP64[buf+56>>3]=BigInt(Math.floor(mtime/1e3));HEAPU32[buf+64>>2]=mtime%1e3*1e3;HEAP64[buf+72>>3]=BigInt(Math.floor(ctime/1e3));HEAPU32[buf+80>>2]=ctime%1e3*1e3;HEAP64[buf+88>>3]=BigInt(stat.ino);return 0},doMsync(addr,stream,len,flags,offset){if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(43)}if(flags&2){return 0}var buffer=HEAPU8.slice(addr,addr+len);FS.msync(stream,buffer,offset,len,flags)},varargs:undefined,get(){var ret=HEAP32[+SYSCALLS.varargs>>2];SYSCALLS.varargs+=4;return ret},getp(){return SYSCALLS.get()},getStr(ptr){var ret=UTF8ToString(ptr);return ret},getStreamFromFD(fd){var stream=FS.getStreamChecked(fd);return stream}};function ___syscall_faccessat(dirfd,path,amode,flags){try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);if(amode&~7){return-28}var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;if(!node){return-44}var perms=\"\";if(amode&4)perms+=\"r\";if(amode&2)perms+=\"w\";if(amode&1)perms+=\"x\";if(perms&&FS.nodePermissions(node,perms)){return-2}return 0}catch(e){if(typeof FS==\"undefined\"||!(e.name===\"ErrnoError\"))throw e;return-e.errno}}var ___syscall_fadvise64=(fd,offset,len,advice)=>0;function ___syscall_fcntl64(fd,cmd,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-28}while(FS.streams[arg]){arg++}var newStream;newStream=FS.dupStream(stream,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.getp();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0}return-28}catch(e){if(typeof FS==\"undefined\"||!(e.name===\"ErrnoError\"))throw e;return-e.errno}}function ___syscall_fstat64(fd,buf){try{var stream=SYSCALLS.getStreamFromFD(fd);return SYSCALLS.doStat(FS.stat,stream.path,buf)}catch(e){if(typeof FS==\"undefined\"||!(e.name===\"ErrnoError\"))throw e;return-e.errno}}function ___syscall_statfs64(path,size,buf){try{path=SYSCALLS.getStr(path);HEAP32[buf+4>>2]=4096;HEAP32[buf+40>>2]=4096;HEAP32[buf+8>>2]=1e6;HEAP32[buf+12>>2]=5e5;HEAP32[buf+16>>2]=5e5;HEAP32[buf+20>>2]=FS.nextInode;HEAP32[buf+24>>2]=1e6;HEAP32[buf+28>>2]=42;HEAP32[buf+44>>2]=2;HEAP32[buf+36>>2]=255;return 0}catch(e){if(typeof FS==\"undefined\"||!(e.name===\"ErrnoError\"))throw e;return-e.errno}}function ___syscall_fstatfs64(fd,size,buf){try{var stream=SYSCALLS.getStreamFromFD(fd);return ___syscall_statfs64(0,size,buf)}catch(e){if(typeof FS==\"undefined\"||!(e.name===\"ErrnoError\"))throw e;return-e.errno}}var MAX_INT53=9007199254740992;var MIN_INT53=-9007199254740992;var bigintToI53Checked=num=>num<MIN_INT53||num>MAX_INT53?NaN:Number(num);function ___syscall_ftruncate64(fd,length){length=bigintToI53Checked(length);try{if(isNaN(length))return 61;FS.ftruncate(fd,length);return 0}catch(e){if(typeof FS==\"undefined\"||!(e.name===\"ErrnoError\"))throw e;return-e.errno}}var stringToUTF8=(str,outPtr,maxBytesToWrite)=>stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite);function ___syscall_getcwd(buf,size){try{if(size===0)return-28;var cwd=FS.cwd();var cwdLengthInBytes=lengthBytesUTF8(cwd)+1;if(size<cwdLengthInBytes)return-68;stringToUTF8(cwd,buf,size);return cwdLengthInBytes}catch(e){if(typeof FS==\"undefined\"||!(e.name===\"ErrnoError\"))throw e;return-e.errno}}function ___syscall_getdents64(fd,dirp,count){try{var stream=SYSCALLS.getStreamFromFD(fd);stream.getdents||=FS.readdir(stream.path);var struct_size=280;var pos=0;var off=FS.llseek(stream,0,1);var idx=Math.floor(off/struct_size);while(idx<stream.getdents.length&&pos+struct_size<=count){var id;var type;var name=stream.getdents[idx];if(name===\".\"){id=stream.node.id;type=4}else if(name===\"..\"){var lookup=FS.lookupPath(stream.path,{parent:true});id=lookup.node.id;type=4}else{var child=FS.lookupNode(stream.node,name);id=child.id;type=FS.isChrdev(child.mode)?2:FS.isDir(child.mode)?4:FS.isLink(child.mode)?10:8}HEAP64[dirp+pos>>3]=BigInt(id);HEAP64[dirp+pos+8>>3]=BigInt((idx+1)*struct_size);HEAP16[dirp+pos+16>>1]=280;HEAP8[dirp+pos+18]=type;stringToUTF8(name,dirp+pos+19,256);pos+=struct_size;idx+=1}FS.llseek(stream,idx*struct_size,0);return pos}catch(e){if(typeof FS==\"undefined\"||!(e.name===\"ErrnoError\"))throw e;return-e.errno}}function ___syscall_ioctl(fd,op,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);switch(op){case 21509:{if(!stream.tty)return-59;return 0}case 21505:{if(!stream.tty)return-59;if(stream.tty.ops.ioctl_tcgets){var termios=stream.tty.ops.ioctl_tcgets(stream);var argp=SYSCALLS.getp();HEAP32[argp>>2]=termios.c_iflag||0;HEAP32[argp+4>>2]=termios.c_oflag||0;HEAP32[argp+8>>2]=termios.c_cflag||0;HEAP32[argp+12>>2]=termios.c_lflag||0;for(var i=0;i<32;i++){HEAP8[argp+i+17]=termios.c_cc[i]||0}return 0}return 0}case 21510:case 21511:case 21512:{if(!stream.tty)return-59;return 0}case 21506:case 21507:case 21508:{if(!stream.tty)return-59;if(stream.tty.ops.ioctl_tcsets){var argp=SYSCALLS.getp();var c_iflag=HEAP32[argp>>2];var c_oflag=HEAP32[argp+4>>2];var c_cflag=HEAP32[argp+8>>2];var c_lflag=HEAP32[argp+12>>2];var c_cc=[];for(var i=0;i<32;i++){c_cc.push(HEAP8[argp+i+17])}return stream.tty.ops.ioctl_tcsets(stream.tty,op,{c_iflag:c_iflag,c_oflag:c_oflag,c_cflag:c_cflag,c_lflag:c_lflag,c_cc:c_cc})}return 0}case 21519:{if(!stream.tty)return-59;var argp=SYSCALLS.getp();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-59;return-28}case 21531:{var argp=SYSCALLS.getp();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-59;if(stream.tty.ops.ioctl_tiocgwinsz){var winsize=stream.tty.ops.ioctl_tiocgwinsz(stream.tty);var argp=SYSCALLS.getp();HEAP16[argp>>1]=winsize[0];HEAP16[argp+2>>1]=winsize[1]}return 0}case 21524:{if(!stream.tty)return-59;return 0}case 21515:{if(!stream.tty)return-59;return 0}default:return-28}}catch(e){if(typeof FS==\"undefined\"||!(e.name===\"ErrnoError\"))throw e;return-e.errno}}function ___syscall_lstat64(path,buf){try{path=SYSCALLS.getStr(path);return SYSCALLS.doStat(FS.lstat,path,buf)}catch(e){if(typeof FS==\"undefined\"||!(e.name===\"ErrnoError\"))throw e;return-e.errno}}function ___syscall_newfstatat(dirfd,path,buf,flags){try{path=SYSCALLS.getStr(path);var nofollow=flags&256;var allowEmpty=flags&4096;flags=flags&~6400;path=SYSCALLS.calculateAt(dirfd,path,allowEmpty);return SYSCALLS.doStat(nofollow?FS.lstat:FS.stat,path,buf)}catch(e){if(typeof FS==\"undefined\"||!(e.name===\"ErrnoError\"))throw e;return-e.errno}}function ___syscall_openat(dirfd,path,flags,varargs){SYSCALLS.varargs=varargs;try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);var mode=varargs?SYSCALLS.get():0;return FS.open(path,flags,mode).fd}catch(e){if(typeof FS==\"undefined\"||!(e.name===\"ErrnoError\"))throw e;return-e.errno}}function ___syscall_readlinkat(dirfd,path,buf,bufsize){try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);if(bufsize<=0)return-28;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len}catch(e){if(typeof FS==\"undefined\"||!(e.name===\"ErrnoError\"))throw e;return-e.errno}}function ___syscall_stat64(path,buf){try{path=SYSCALLS.getStr(path);return SYSCALLS.doStat(FS.stat,path,buf)}catch(e){if(typeof FS==\"undefined\"||!(e.name===\"ErrnoError\"))throw e;return-e.errno}}function ___syscall_unlinkat(dirfd,path,flags){try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);if(flags===0){FS.unlink(path)}else if(flags===512){FS.rmdir(path)}else{abort(\"Invalid flags passed to unlinkat\")}return 0}catch(e){if(typeof FS==\"undefined\"||!(e.name===\"ErrnoError\"))throw e;return-e.errno}}var nowIsMonotonic=1;var __emscripten_get_now_is_monotonic=()=>nowIsMonotonic;var isLeapYear=year=>year%4===0&&(year%100!==0||year%400===0);var MONTH_DAYS_LEAP_CUMULATIVE=[0,31,60,91,121,152,182,213,244,274,305,335];var MONTH_DAYS_REGULAR_CUMULATIVE=[0,31,59,90,120,151,181,212,243,273,304,334];var ydayFromDate=date=>{var leap=isLeapYear(date.getFullYear());var monthDaysCumulative=leap?MONTH_DAYS_LEAP_CUMULATIVE:MONTH_DAYS_REGULAR_CUMULATIVE;var yday=monthDaysCumulative[date.getMonth()]+date.getDate()-1;return yday};function __localtime_js(time,tmPtr){time=bigintToI53Checked(time);var date=new Date(time*1e3);HEAP32[tmPtr>>2]=date.getSeconds();HEAP32[tmPtr+4>>2]=date.getMinutes();HEAP32[tmPtr+8>>2]=date.getHours();HEAP32[tmPtr+12>>2]=date.getDate();HEAP32[tmPtr+16>>2]=date.getMonth();HEAP32[tmPtr+20>>2]=date.getFullYear()-1900;HEAP32[tmPtr+24>>2]=date.getDay();var yday=ydayFromDate(date)|0;HEAP32[tmPtr+28>>2]=yday;HEAP32[tmPtr+36>>2]=-(date.getTimezoneOffset()*60);var start=new Date(date.getFullYear(),0,1);var summerOffset=new Date(date.getFullYear(),6,1).getTimezoneOffset();var winterOffset=start.getTimezoneOffset();var dst=(summerOffset!=winterOffset&&date.getTimezoneOffset()==Math.min(winterOffset,summerOffset))|0;HEAP32[tmPtr+32>>2]=dst}function __mmap_js(len,prot,flags,fd,offset,allocated,addr){offset=bigintToI53Checked(offset);try{if(isNaN(offset))return 61;var stream=SYSCALLS.getStreamFromFD(fd);var res=FS.mmap(stream,len,offset,prot,flags);var ptr=res.ptr;HEAP32[allocated>>2]=res.allocated;HEAPU32[addr>>2]=ptr;return 0}catch(e){if(typeof FS==\"undefined\"||!(e.name===\"ErrnoError\"))throw e;return-e.errno}}function __munmap_js(addr,len,prot,flags,fd,offset){offset=bigintToI53Checked(offset);try{var stream=SYSCALLS.getStreamFromFD(fd);if(prot&2){SYSCALLS.doMsync(addr,stream,len,flags,offset)}}catch(e){if(typeof FS==\"undefined\"||!(e.name===\"ErrnoError\"))throw e;return-e.errno}}var __tzset_js=(timezone,daylight,std_name,dst_name)=>{var currentYear=(new Date).getFullYear();var winter=new Date(currentYear,0,1);var summer=new Date(currentYear,6,1);var winterOffset=winter.getTimezoneOffset();var summerOffset=summer.getTimezoneOffset();var stdTimezoneOffset=Math.max(winterOffset,summerOffset);HEAPU32[timezone>>2]=stdTimezoneOffset*60;HEAP32[daylight>>2]=Number(winterOffset!=summerOffset);function extractZone(date){var match=date.toTimeString().match(/\\(([A-Za-z ]+)\\)$/);return match?match[1]:\"GMT\"}var winterName=extractZone(winter);var summerName=extractZone(summer);if(summerOffset<winterOffset){stringToUTF8(winterName,std_name,7);stringToUTF8(summerName,dst_name,7)}else{stringToUTF8(winterName,dst_name,7);stringToUTF8(summerName,std_name,7)}};var _abort=()=>{abort(\"\")};var _emscripten_date_now=()=>Date.now();var runtimeKeepaliveCounter=0;var keepRuntimeAlive=()=>noExitRuntime||runtimeKeepaliveCounter>0;var _proc_exit=code=>{EXITSTATUS=code;if(!keepRuntimeAlive()){Module[\"onExit\"]?.(code);ABORT=true}quit_(code,new ExitStatus(code))};var exitJS=(status,implicit)=>{EXITSTATUS=status;if(!keepRuntimeAlive()){exitRuntime()}_proc_exit(status)};var _exit=exitJS;var __emscripten_runtime_keepalive_clear=()=>{noExitRuntime=false;runtimeKeepaliveCounter=0};var _emscripten_force_exit=status=>{__emscripten_runtime_keepalive_clear();_exit(status)};Module[\"_emscripten_force_exit\"]=_emscripten_force_exit;var JSEvents={removeAllEventListeners(){while(JSEvents.eventHandlers.length){JSEvents._removeHandler(JSEvents.eventHandlers.length-1)}JSEvents.deferredCalls=[]},registerRemoveEventListeners(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},inEventHandler:0,deferredCalls:[],deferCall(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort((x,y)=>x.precedence<y.precedence)},removeDeferredCalls(targetFunction){for(var i=0;i<JSEvents.deferredCalls.length;++i){if(JSEvents.deferredCalls[i].targetFunction==targetFunction){JSEvents.deferredCalls.splice(i,1);--i}}},canPerformEventHandlerRequests(){if(navigator.userActivation){return navigator.userActivation.isActive}return JSEvents.inEventHandler&&JSEvents.currentEventHandler.allowsDeferredCalls},runDeferredCalls(){if(!JSEvents.canPerformEventHandlerRequests()){return}for(var i=0;i<JSEvents.deferredCalls.length;++i){var call=JSEvents.deferredCalls[i];JSEvents.deferredCalls.splice(i,1);--i;call.targetFunction(...call.argsList)}},eventHandlers:[],removeAllHandlersOnTarget:(target,eventTypeString)=>{for(var i=0;i<JSEvents.eventHandlers.length;++i){if(JSEvents.eventHandlers[i].target==target&&(!eventTypeString||eventTypeString==JSEvents.eventHandlers[i].eventTypeString)){JSEvents._removeHandler(i--)}}},_removeHandler(i){var h=JSEvents.eventHandlers[i];h.target.removeEventListener(h.eventTypeString,h.eventListenerFunc,h.useCapture);JSEvents.eventHandlers.splice(i,1)},registerOrRemoveHandler(eventHandler){if(!eventHandler.target){return-4}if(eventHandler.callbackfunc){eventHandler.eventListenerFunc=function(event){++JSEvents.inEventHandler;JSEvents.currentEventHandler=eventHandler;JSEvents.runDeferredCalls();eventHandler.handlerFunc(event);JSEvents.runDeferredCalls();--JSEvents.inEventHandler};eventHandler.target.addEventListener(eventHandler.eventTypeString,eventHandler.eventListenerFunc,eventHandler.useCapture);JSEvents.eventHandlers.push(eventHandler);JSEvents.registerRemoveEventListeners()}else{for(var i=0;i<JSEvents.eventHandlers.length;++i){if(JSEvents.eventHandlers[i].target==eventHandler.target&&JSEvents.eventHandlers[i].eventTypeString==eventHandler.eventTypeString){JSEvents._removeHandler(i--)}}}return 0},getNodeNameForTarget(target){if(!target)return\"\";if(target==window)return\"#window\";if(target==screen)return\"#screen\";return target?.nodeName||\"\"},fullscreenEnabled(){return document.fullscreenEnabled||document.webkitFullscreenEnabled}};var maybeCStringToJsString=cString=>cString>2?UTF8ToString(cString):cString;var specialHTMLTargets=[0,typeof document!=\"undefined\"?document:0,typeof window!=\"undefined\"?window:0];var findEventTarget=target=>{target=maybeCStringToJsString(target);var domElement=specialHTMLTargets[target]||(typeof document!=\"undefined\"?document.querySelector(target):undefined);return domElement};var getBoundingClientRect=e=>specialHTMLTargets.indexOf(e)<0?e.getBoundingClientRect():{\"left\":0,\"top\":0};var _emscripten_get_element_css_size=(target,width,height)=>{target=findEventTarget(target);if(!target)return-4;var rect=getBoundingClientRect(target);HEAPF64[width>>3]=rect.width;HEAPF64[height>>3]=rect.height;return 0};var fillGamepadEventData=(eventStruct,e)=>{HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i<e.axes.length;++i){HEAPF64[eventStruct+i*8+16>>3]=e.axes[i]}for(var i=0;i<e.buttons.length;++i){if(typeof e.buttons[i]==\"object\"){HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i<e.buttons.length;++i){if(typeof e.buttons[i]==\"object\"){HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i].pressed}else{HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i]==1}}HEAP32[eventStruct+1296>>2]=e.connected;HEAP32[eventStruct+1300>>2]=e.index;HEAP32[eventStruct+8>>2]=e.axes.length;HEAP32[eventStruct+12>>2]=e.buttons.length;stringToUTF8(e.id,eventStruct+1304,64);stringToUTF8(e.mapping,eventStruct+1368,64)};var _emscripten_get_gamepad_status=(index,gamepadState)=>{if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0};var getHeapMax=()=>2147483648;var _emscripten_get_heap_max=()=>getHeapMax();var _emscripten_get_now;_emscripten_get_now=()=>performance.now();var _emscripten_get_now_res=()=>{if(ENVIRONMENT_IS_NODE){return 1}return 1e3};var _emscripten_get_num_gamepads=()=>JSEvents.lastGamepadState.length;var webgl_enable_ANGLE_instanced_arrays=ctx=>{var ext=ctx.getExtension(\"ANGLE_instanced_arrays\");if(ext){ctx[\"vertexAttribDivisor\"]=(index,divisor)=>ext[\"vertexAttribDivisorANGLE\"](index,divisor);ctx[\"drawArraysInstanced\"]=(mode,first,count,primcount)=>ext[\"drawArraysInstancedANGLE\"](mode,first,count,primcount);ctx[\"drawElementsInstanced\"]=(mode,count,type,indices,primcount)=>ext[\"drawElementsInstancedANGLE\"](mode,count,type,indices,primcount);return 1}};var webgl_enable_OES_vertex_array_object=ctx=>{var ext=ctx.getExtension(\"OES_vertex_array_object\");if(ext){ctx[\"createVertexArray\"]=()=>ext[\"createVertexArrayOES\"]();ctx[\"deleteVertexArray\"]=vao=>ext[\"deleteVertexArrayOES\"](vao);ctx[\"bindVertexArray\"]=vao=>ext[\"bindVertexArrayOES\"](vao);ctx[\"isVertexArray\"]=vao=>ext[\"isVertexArrayOES\"](vao);return 1}};var webgl_enable_WEBGL_draw_buffers=ctx=>{var ext=ctx.getExtension(\"WEBGL_draw_buffers\");if(ext){ctx[\"drawBuffers\"]=(n,bufs)=>ext[\"drawBuffersWEBGL\"](n,bufs);return 1}};var webgl_enable_WEBGL_multi_draw=ctx=>!!(ctx.multiDrawWebgl=ctx.getExtension(\"WEBGL_multi_draw\"));var getEmscriptenSupportedExtensions=ctx=>{var supportedExtensions=[\"ANGLE_instanced_arrays\",\"EXT_blend_minmax\",\"EXT_disjoint_timer_query\",\"EXT_frag_depth\",\"EXT_shader_texture_lod\",\"EXT_sRGB\",\"OES_element_index_uint\",\"OES_fbo_render_mipmap\",\"OES_standard_derivatives\",\"OES_texture_float\",\"OES_texture_half_float\",\"OES_texture_half_float_linear\",\"OES_vertex_array_object\",\"WEBGL_color_buffer_float\",\"WEBGL_depth_texture\",\"WEBGL_draw_buffers\",\"EXT_color_buffer_half_float\",\"EXT_depth_clamp\",\"EXT_float_blend\",\"EXT_texture_compression_bptc\",\"EXT_texture_compression_rgtc\",\"EXT_texture_filter_anisotropic\",\"KHR_parallel_shader_compile\",\"OES_texture_float_linear\",\"WEBGL_blend_func_extended\",\"WEBGL_compressed_texture_astc\",\"WEBGL_compressed_texture_etc\",\"WEBGL_compressed_texture_etc1\",\"WEBGL_compressed_texture_s3tc\",\"WEBGL_compressed_texture_s3tc_srgb\",\"WEBGL_debug_renderer_info\",\"WEBGL_debug_shaders\",\"WEBGL_lose_context\",\"WEBGL_multi_draw\"];return(ctx.getSupportedExtensions()||[]).filter(ext=>supportedExtensions.includes(ext))};var GL={counter:1,buffers:[],programs:[],framebuffers:[],renderbuffers:[],textures:[],shaders:[],vaos:[],contexts:[],offscreenCanvases:{},queries:[],stringCache:{},unpackAlignment:4,recordError:errorCode=>{if(!GL.lastError){GL.lastError=errorCode}},getNewId:table=>{var ret=GL.counter++;for(var i=table.length;i<ret;i++){table[i]=null}return ret},genObject:(n,buffers,createFunction,objectTable)=>{for(var i=0;i<n;i++){var buffer=GLctx[createFunction]();var id=buffer&&GL.getNewId(objectTable);if(buffer){buffer.name=id;objectTable[id]=buffer}else{GL.recordError(1282)}HEAP32[buffers+i*4>>2]=id}},getSource:(shader,count,string,length)=>{var source=\"\";for(var i=0;i<count;++i){var len=length?HEAPU32[length+i*4>>2]:undefined;source+=UTF8ToString(HEAPU32[string+i*4>>2],len)}return source},createContext:(canvas,webGLContextAttributes)=>{if(!canvas.getContextSafariWebGL2Fixed){canvas.getContextSafariWebGL2Fixed=canvas.getContext;function fixedGetContext(ver,attrs){var gl=canvas.getContextSafariWebGL2Fixed(ver,attrs);return ver==\"webgl\"==gl instanceof WebGLRenderingContext?gl:null}canvas.getContext=fixedGetContext}var ctx=canvas.getContext(\"webgl\",webGLContextAttributes);if(!ctx)return 0;var handle=GL.registerContext(ctx,webGLContextAttributes);return handle},registerContext:(ctx,webGLContextAttributes)=>{var handle=GL.getNewId(GL.contexts);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==\"undefined\"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:contextHandle=>{GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext?.GLctx;return!(contextHandle&&!GLctx)},getContext:contextHandle=>GL.contexts[contextHandle],deleteContext:contextHandle=>{if(GL.currentContext===GL.contexts[contextHandle]){GL.currentContext=null}if(typeof JSEvents==\"object\"){JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas)}if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas){GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined}GL.contexts[contextHandle]=null},initExtensions:context=>{context||=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;webgl_enable_ANGLE_instanced_arrays(GLctx);webgl_enable_OES_vertex_array_object(GLctx);webgl_enable_WEBGL_draw_buffers(GLctx);{GLctx.disjointTimerQueryExt=GLctx.getExtension(\"EXT_disjoint_timer_query\")}webgl_enable_WEBGL_multi_draw(GLctx);getEmscriptenSupportedExtensions(GLctx).forEach(ext=>{if(!ext.includes(\"lose_context\")&&!ext.includes(\"debug\")){GLctx.getExtension(ext)}})}};var _glActiveTexture=x0=>GLctx.activeTexture(x0);var _emscripten_glActiveTexture=_glActiveTexture;var _glAttachShader=(program,shader)=>{GLctx.attachShader(GL.programs[program],GL.shaders[shader])};var _emscripten_glAttachShader=_glAttachShader;var _glBeginQueryEXT=(target,id)=>{GLctx.disjointTimerQueryExt[\"beginQueryEXT\"](target,GL.queries[id])};var _emscripten_glBeginQueryEXT=_glBeginQueryEXT;var _glBindAttribLocation=(program,index,name)=>{GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))};var _emscripten_glBindAttribLocation=_glBindAttribLocation;var _glBindBuffer=(target,buffer)=>{GLctx.bindBuffer(target,GL.buffers[buffer])};var _emscripten_glBindBuffer=_glBindBuffer;var _glBindFramebuffer=(target,framebuffer)=>{GLctx.bindFramebuffer(target,GL.framebuffers[framebuffer])};var _emscripten_glBindFramebuffer=_glBindFramebuffer;var _glBindRenderbuffer=(target,renderbuffer)=>{GLctx.bindRenderbuffer(target,GL.renderbuffers[renderbuffer])};var _emscripten_glBindRenderbuffer=_glBindRenderbuffer;var _glBindTexture=(target,texture)=>{GLctx.bindTexture(target,GL.textures[texture])};var _emscripten_glBindTexture=_glBindTexture;var _glBindVertexArray=vao=>{GLctx.bindVertexArray(GL.vaos[vao])};var _glBindVertexArrayOES=_glBindVertexArray;var _emscripten_glBindVertexArrayOES=_glBindVertexArrayOES;var _glBlendColor=(x0,x1,x2,x3)=>GLctx.blendColor(x0,x1,x2,x3);var _emscripten_glBlendColor=_glBlendColor;var _glBlendEquation=x0=>GLctx.blendEquation(x0);var _emscripten_glBlendEquation=_glBlendEquation;var _glBlendEquationSeparate=(x0,x1)=>GLctx.blendEquationSeparate(x0,x1);var _emscripten_glBlendEquationSeparate=_glBlendEquationSeparate;var _glBlendFunc=(x0,x1)=>GLctx.blendFunc(x0,x1);var _emscripten_glBlendFunc=_glBlendFunc;var _glBlendFuncSeparate=(x0,x1,x2,x3)=>GLctx.blendFuncSeparate(x0,x1,x2,x3);var _emscripten_glBlendFuncSeparate=_glBlendFuncSeparate;var _glBufferData=(target,size,data,usage)=>{GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)};var _emscripten_glBufferData=_glBufferData;var _glBufferSubData=(target,offset,size,data)=>{GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))};var _emscripten_glBufferSubData=_glBufferSubData;var _glCheckFramebufferStatus=x0=>GLctx.checkFramebufferStatus(x0);var _emscripten_glCheckFramebufferStatus=_glCheckFramebufferStatus;var _glClear=x0=>GLctx.clear(x0);var _emscripten_glClear=_glClear;var _glClearColor=(x0,x1,x2,x3)=>GLctx.clearColor(x0,x1,x2,x3);var _emscripten_glClearColor=_glClearColor;var _glClearDepthf=x0=>GLctx.clearDepth(x0);var _emscripten_glClearDepthf=_glClearDepthf;var _glClearStencil=x0=>GLctx.clearStencil(x0);var _emscripten_glClearStencil=_glClearStencil;var _glColorMask=(red,green,blue,alpha)=>{GLctx.colorMask(!!red,!!green,!!blue,!!alpha)};var _emscripten_glColorMask=_glColorMask;var _glCompileShader=shader=>{GLctx.compileShader(GL.shaders[shader])};var _emscripten_glCompileShader=_glCompileShader;var _glCompressedTexImage2D=(target,level,internalFormat,width,height,border,imageSize,data)=>{GLctx.compressedTexImage2D(target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)};var _emscripten_glCompressedTexImage2D=_glCompressedTexImage2D;var _glCompressedTexSubImage2D=(target,level,xoffset,yoffset,width,height,format,imageSize,data)=>{GLctx.compressedTexSubImage2D(target,level,xoffset,yoffset,width,height,format,data?HEAPU8.subarray(data,data+imageSize):null)};var _emscripten_glCompressedTexSubImage2D=_glCompressedTexSubImage2D;var _glCopyTexImage2D=(x0,x1,x2,x3,x4,x5,x6,x7)=>GLctx.copyTexImage2D(x0,x1,x2,x3,x4,x5,x6,x7);var _emscripten_glCopyTexImage2D=_glCopyTexImage2D;var _glCopyTexSubImage2D=(x0,x1,x2,x3,x4,x5,x6,x7)=>GLctx.copyTexSubImage2D(x0,x1,x2,x3,x4,x5,x6,x7);var _emscripten_glCopyTexSubImage2D=_glCopyTexSubImage2D;var _glCreateProgram=()=>{var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;program.maxUniformLength=program.maxAttributeLength=program.maxUniformBlockNameLength=0;program.uniformIdCounter=1;GL.programs[id]=program;return id};var _emscripten_glCreateProgram=_glCreateProgram;var _glCreateShader=shaderType=>{var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id};var _emscripten_glCreateShader=_glCreateShader;var _glCullFace=x0=>GLctx.cullFace(x0);var _emscripten_glCullFace=_glCullFace;var _glDeleteBuffers=(n,buffers)=>{for(var i=0;i<n;i++){var id=HEAP32[buffers+i*4>>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null}};var _emscripten_glDeleteBuffers=_glDeleteBuffers;var _glDeleteFramebuffers=(n,framebuffers)=>{for(var i=0;i<n;++i){var id=HEAP32[framebuffers+i*4>>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}};var _emscripten_glDeleteFramebuffers=_glDeleteFramebuffers;var _glDeleteProgram=id=>{if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null};var _emscripten_glDeleteProgram=_glDeleteProgram;var _glDeleteQueriesEXT=(n,ids)=>{for(var i=0;i<n;i++){var id=HEAP32[ids+i*4>>2];var query=GL.queries[id];if(!query)continue;GLctx.disjointTimerQueryExt[\"deleteQueryEXT\"](query);GL.queries[id]=null}};var _emscripten_glDeleteQueriesEXT=_glDeleteQueriesEXT;var _glDeleteRenderbuffers=(n,renderbuffers)=>{for(var i=0;i<n;i++){var id=HEAP32[renderbuffers+i*4>>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}};var _emscripten_glDeleteRenderbuffers=_glDeleteRenderbuffers;var _glDeleteShader=id=>{if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null};var _emscripten_glDeleteShader=_glDeleteShader;var _glDeleteTextures=(n,textures)=>{for(var i=0;i<n;i++){var id=HEAP32[textures+i*4>>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}};var _emscripten_glDeleteTextures=_glDeleteTextures;var _glDeleteVertexArrays=(n,vaos)=>{for(var i=0;i<n;i++){var id=HEAP32[vaos+i*4>>2];GLctx.deleteVertexArray(GL.vaos[id]);GL.vaos[id]=null}};var _glDeleteVertexArraysOES=_glDeleteVertexArrays;var _emscripten_glDeleteVertexArraysOES=_glDeleteVertexArraysOES;var _glDepthFunc=x0=>GLctx.depthFunc(x0);var _emscripten_glDepthFunc=_glDepthFunc;var _glDepthMask=flag=>{GLctx.depthMask(!!flag)};var _emscripten_glDepthMask=_glDepthMask;var _glDepthRangef=(x0,x1)=>GLctx.depthRange(x0,x1);var _emscripten_glDepthRangef=_glDepthRangef;var _glDetachShader=(program,shader)=>{GLctx.detachShader(GL.programs[program],GL.shaders[shader])};var _emscripten_glDetachShader=_glDetachShader;var _glDisable=x0=>GLctx.disable(x0);var _emscripten_glDisable=_glDisable;var _glDisableVertexAttribArray=index=>{GLctx.disableVertexAttribArray(index)};var _emscripten_glDisableVertexAttribArray=_glDisableVertexAttribArray;var _glDrawArrays=(mode,first,count)=>{GLctx.drawArrays(mode,first,count)};var _emscripten_glDrawArrays=_glDrawArrays;var _glDrawArraysInstanced=(mode,first,count,primcount)=>{GLctx.drawArraysInstanced(mode,first,count,primcount)};var _glDrawArraysInstancedANGLE=_glDrawArraysInstanced;var _emscripten_glDrawArraysInstancedANGLE=_glDrawArraysInstancedANGLE;var tempFixedLengthArray=[];var _glDrawBuffers=(n,bufs)=>{var bufArray=tempFixedLengthArray[n];for(var i=0;i<n;i++){bufArray[i]=HEAP32[bufs+i*4>>2]}GLctx.drawBuffers(bufArray)};var _glDrawBuffersWEBGL=_glDrawBuffers;var _emscripten_glDrawBuffersWEBGL=_glDrawBuffersWEBGL;var _glDrawElements=(mode,count,type,indices)=>{GLctx.drawElements(mode,count,type,indices)};var _emscripten_glDrawElements=_glDrawElements;var _glDrawElementsInstanced=(mode,count,type,indices,primcount)=>{GLctx.drawElementsInstanced(mode,count,type,indices,primcount)};var _glDrawElementsInstancedANGLE=_glDrawElementsInstanced;var _emscripten_glDrawElementsInstancedANGLE=_glDrawElementsInstancedANGLE;var _glEnable=x0=>GLctx.enable(x0);var _emscripten_glEnable=_glEnable;var _glEnableVertexAttribArray=index=>{GLctx.enableVertexAttribArray(index)};var _emscripten_glEnableVertexAttribArray=_glEnableVertexAttribArray;var _glEndQueryEXT=target=>{GLctx.disjointTimerQueryExt[\"endQueryEXT\"](target)};var _emscripten_glEndQueryEXT=_glEndQueryEXT;var _glFinish=()=>GLctx.finish();var _emscripten_glFinish=_glFinish;var _glFlush=()=>GLctx.flush();var _emscripten_glFlush=_glFlush;var _glFramebufferRenderbuffer=(target,attachment,renderbuffertarget,renderbuffer)=>{GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])};var _emscripten_glFramebufferRenderbuffer=_glFramebufferRenderbuffer;var _glFramebufferTexture2D=(target,attachment,textarget,texture,level)=>{GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)};var _emscripten_glFramebufferTexture2D=_glFramebufferTexture2D;var _glFrontFace=x0=>GLctx.frontFace(x0);var _emscripten_glFrontFace=_glFrontFace;var _glGenBuffers=(n,buffers)=>{GL.genObject(n,buffers,\"createBuffer\",GL.buffers)};var _emscripten_glGenBuffers=_glGenBuffers;var _glGenFramebuffers=(n,ids)=>{GL.genObject(n,ids,\"createFramebuffer\",GL.framebuffers)};var _emscripten_glGenFramebuffers=_glGenFramebuffers;var _glGenQueriesEXT=(n,ids)=>{for(var i=0;i<n;i++){var query=GLctx.disjointTimerQueryExt[\"createQueryEXT\"]();if(!query){GL.recordError(1282);while(i<n)HEAP32[ids+i++*4>>2]=0;return}var id=GL.getNewId(GL.queries);query.name=id;GL.queries[id]=query;HEAP32[ids+i*4>>2]=id}};var _emscripten_glGenQueriesEXT=_glGenQueriesEXT;var _glGenRenderbuffers=(n,renderbuffers)=>{GL.genObject(n,renderbuffers,\"createRenderbuffer\",GL.renderbuffers)};var _emscripten_glGenRenderbuffers=_glGenRenderbuffers;var _glGenTextures=(n,textures)=>{GL.genObject(n,textures,\"createTexture\",GL.textures)};var _emscripten_glGenTextures=_glGenTextures;var _glGenVertexArrays=(n,arrays)=>{GL.genObject(n,arrays,\"createVertexArray\",GL.vaos)};var _glGenVertexArraysOES=_glGenVertexArrays;var _emscripten_glGenVertexArraysOES=_glGenVertexArraysOES;var _glGenerateMipmap=x0=>GLctx.generateMipmap(x0);var _emscripten_glGenerateMipmap=_glGenerateMipmap;var __glGetActiveAttribOrUniform=(funcName,program,index,bufSize,length,size,type,name)=>{program=GL.programs[program];var info=GLctx[funcName](program,index);if(info){var numBytesWrittenExclNull=name&&stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull;if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}};var _glGetActiveAttrib=(program,index,bufSize,length,size,type,name)=>{__glGetActiveAttribOrUniform(\"getActiveAttrib\",program,index,bufSize,length,size,type,name)};var _emscripten_glGetActiveAttrib=_glGetActiveAttrib;var _glGetActiveUniform=(program,index,bufSize,length,size,type,name)=>{__glGetActiveAttribOrUniform(\"getActiveUniform\",program,index,bufSize,length,size,type,name)};var _emscripten_glGetActiveUniform=_glGetActiveUniform;var _glGetAttachedShaders=(program,maxCount,count,shaders)=>{var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i<len;++i){var id=GL.shaders.indexOf(result[i]);HEAP32[shaders+i*4>>2]=id}};var _emscripten_glGetAttachedShaders=_glGetAttachedShaders;var _glGetAttribLocation=(program,name)=>GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name));var _emscripten_glGetAttribLocation=_glGetAttribLocation;var writeI53ToI64=(ptr,num)=>{HEAPU32[ptr>>2]=num;var lower=HEAPU32[ptr>>2];HEAPU32[ptr+4>>2]=(num-lower)/4294967296};var emscriptenWebGLGet=(name_,p,type)=>{if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=0&&type!=1){GL.recordError(1280)}return;case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case\"number\":ret=result;break;case\"boolean\":ret=result?1:0;break;case\"string\":GL.recordError(1280);return;case\"object\":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i<result.length;++i){switch(type){case 0:HEAP32[p+i*4>>2]=result[i];break;case 2:HEAPF32[p+i*4>>2]=result[i];break;case 4:HEAP8[p+i]=result[i]?1:0;break}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err(`GL_INVALID_ENUM in glGet${type}v: Unknown object returned from WebGL getParameter(${name_})! (error: ${e})`);return}}break;default:GL.recordError(1280);err(`GL_INVALID_ENUM in glGet${type}v: Native code calling glGet${type}v(${name_}) and it returns ${result} of type ${typeof result}!`);return}}switch(type){case 1:writeI53ToI64(p,ret);break;case 0:HEAP32[p>>2]=ret;break;case 2:HEAPF32[p>>2]=ret;break;case 4:HEAP8[p]=ret?1:0;break}};var _glGetBooleanv=(name_,p)=>emscriptenWebGLGet(name_,p,4);var _emscripten_glGetBooleanv=_glGetBooleanv;var _glGetBufferParameteriv=(target,value,data)=>{if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)};var _emscripten_glGetBufferParameteriv=_glGetBufferParameteriv;var _glGetError=()=>{var error=GLctx.getError()||GL.lastError;GL.lastError=0;return error};var _emscripten_glGetError=_glGetError;var _glGetFloatv=(name_,p)=>emscriptenWebGLGet(name_,p,2);var _emscripten_glGetFloatv=_glGetFloatv;var _glGetFramebufferAttachmentParameteriv=(target,attachment,pname,params)=>{var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result};var _emscripten_glGetFramebufferAttachmentParameteriv=_glGetFramebufferAttachmentParameteriv;var _glGetIntegerv=(name_,p)=>emscriptenWebGLGet(name_,p,0);var _emscripten_glGetIntegerv=_glGetIntegerv;var _glGetProgramInfoLog=(program,maxLength,length,infoLog)=>{var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log=\"(unknown error)\";var numBytesWrittenExclNull=maxLength>0&&infoLog?stringToUTF8(log,infoLog,maxLength):0;if(length)HEAP32[length>>2]=numBytesWrittenExclNull};var _emscripten_glGetProgramInfoLog=_glGetProgramInfoLog;var _glGetProgramiv=(program,pname,p)=>{if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}program=GL.programs[program];if(pname==35716){var log=GLctx.getProgramInfoLog(program);if(log===null)log=\"(unknown error)\";HEAP32[p>>2]=log.length+1}else if(pname==35719){if(!program.maxUniformLength){for(var i=0;i<GLctx.getProgramParameter(program,35718);++i){program.maxUniformLength=Math.max(program.maxUniformLength,GLctx.getActiveUniform(program,i).name.length+1)}}HEAP32[p>>2]=program.maxUniformLength}else if(pname==35722){if(!program.maxAttributeLength){for(var i=0;i<GLctx.getProgramParameter(program,35721);++i){program.maxAttributeLength=Math.max(program.maxAttributeLength,GLctx.getActiveAttrib(program,i).name.length+1)}}HEAP32[p>>2]=program.maxAttributeLength}else if(pname==35381){if(!program.maxUniformBlockNameLength){for(var i=0;i<GLctx.getProgramParameter(program,35382);++i){program.maxUniformBlockNameLength=Math.max(program.maxUniformBlockNameLength,GLctx.getActiveUniformBlockName(program,i).length+1)}}HEAP32[p>>2]=program.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(program,pname)}};var _emscripten_glGetProgramiv=_glGetProgramiv;var _glGetQueryObjecti64vEXT=(id,pname,params)=>{if(!params){GL.recordError(1281);return}var query=GL.queries[id];var param;{param=GLctx.disjointTimerQueryExt[\"getQueryObjectEXT\"](query,pname)}var ret;if(typeof param==\"boolean\"){ret=param?1:0}else{ret=param}writeI53ToI64(params,ret)};var _emscripten_glGetQueryObjecti64vEXT=_glGetQueryObjecti64vEXT;var _glGetQueryObjectivEXT=(id,pname,params)=>{if(!params){GL.recordError(1281);return}var query=GL.queries[id];var param=GLctx.disjointTimerQueryExt[\"getQueryObjectEXT\"](query,pname);var ret;if(typeof param==\"boolean\"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret};var _emscripten_glGetQueryObjectivEXT=_glGetQueryObjectivEXT;var _glGetQueryObjectui64vEXT=_glGetQueryObjecti64vEXT;var _emscripten_glGetQueryObjectui64vEXT=_glGetQueryObjectui64vEXT;var _glGetQueryObjectuivEXT=_glGetQueryObjectivEXT;var _emscripten_glGetQueryObjectuivEXT=_glGetQueryObjectuivEXT;var _glGetQueryivEXT=(target,pname,params)=>{if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt[\"getQueryEXT\"](target,pname)};var _emscripten_glGetQueryivEXT=_glGetQueryivEXT;var _glGetRenderbufferParameteriv=(target,pname,params)=>{if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)};var _emscripten_glGetRenderbufferParameteriv=_glGetRenderbufferParameteriv;var _glGetShaderInfoLog=(shader,maxLength,length,infoLog)=>{var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log=\"(unknown error)\";var numBytesWrittenExclNull=maxLength>0&&infoLog?stringToUTF8(log,infoLog,maxLength):0;if(length)HEAP32[length>>2]=numBytesWrittenExclNull};var _emscripten_glGetShaderInfoLog=_glGetShaderInfoLog;var _glGetShaderPrecisionFormat=(shaderType,precisionType,range,precision)=>{var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision};var _emscripten_glGetShaderPrecisionFormat=_glGetShaderPrecisionFormat;var _glGetShaderSource=(shader,bufSize,length,source)=>{var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;var numBytesWrittenExclNull=bufSize>0&&source?stringToUTF8(result,source,bufSize):0;if(length)HEAP32[length>>2]=numBytesWrittenExclNull};var _emscripten_glGetShaderSource=_glGetShaderSource;var _glGetShaderiv=(shader,pname,p)=>{if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log=\"(unknown error)\";var logLength=log?log.length+1:0;HEAP32[p>>2]=logLength}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source?source.length+1:0;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}};var _emscripten_glGetShaderiv=_glGetShaderiv;var stringToNewUTF8=str=>{var size=lengthBytesUTF8(str)+1;var ret=_malloc(size);if(ret)stringToUTF8(str,ret,size);return ret};var webglGetExtensions=function $webglGetExtensions(){var exts=getEmscriptenSupportedExtensions(GLctx);exts=exts.concat(exts.map(e=>\"GL_\"+e));return exts};var _glGetString=name_=>{var ret=GL.stringCache[name_];if(!ret){switch(name_){case 7939:ret=stringToNewUTF8(webglGetExtensions().join(\" \"));break;case 7936:case 7937:case 37445:case 37446:var s=GLctx.getParameter(name_);if(!s){GL.recordError(1280)}ret=s?stringToNewUTF8(s):0;break;case 7938:var glVersion=GLctx.getParameter(7938);{glVersion=`OpenGL ES 2.0 (${glVersion})`}ret=stringToNewUTF8(glVersion);break;case 35724:var glslVersion=GLctx.getParameter(35724);var ver_re=/^WebGL GLSL ES ([0-9]\\.[0-9][0-9]?)(?:$| .*)/;var ver_num=glslVersion.match(ver_re);if(ver_num!==null){if(ver_num[1].length==3)ver_num[1]=ver_num[1]+\"0\";glslVersion=`OpenGL ES GLSL ES ${ver_num[1]} (${glslVersion})`}ret=stringToNewUTF8(glslVersion);break;default:GL.recordError(1280)}GL.stringCache[name_]=ret}return ret};var _emscripten_glGetString=_glGetString;var _glGetTexParameterfv=(target,pname,params)=>{if(!params){GL.recordError(1281);return}HEAPF32[params>>2]=GLctx.getTexParameter(target,pname)};var _emscripten_glGetTexParameterfv=_glGetTexParameterfv;var _glGetTexParameteriv=(target,pname,params)=>{if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)};var _emscripten_glGetTexParameteriv=_glGetTexParameteriv;var jstoi_q=str=>parseInt(str);var webglGetLeftBracePos=name=>name.slice(-1)==\"]\"&&name.lastIndexOf(\"[\");var webglPrepareUniformLocationsBeforeFirstUse=program=>{var uniformLocsById=program.uniformLocsById,uniformSizeAndIdsByName=program.uniformSizeAndIdsByName,i,j;if(!uniformLocsById){program.uniformLocsById=uniformLocsById={};program.uniformArrayNamesById={};for(i=0;i<GLctx.getProgramParameter(program,35718);++i){var u=GLctx.getActiveUniform(program,i);var nm=u.name;var sz=u.size;var lb=webglGetLeftBracePos(nm);var arrayName=lb>0?nm.slice(0,lb):nm;var id=program.uniformIdCounter;program.uniformIdCounter+=sz;uniformSizeAndIdsByName[arrayName]=[sz,id];for(j=0;j<sz;++j){uniformLocsById[id]=j;program.uniformArrayNamesById[id++]=arrayName}}}};var _glGetUniformLocation=(program,name)=>{name=UTF8ToString(name);if(program=GL.programs[program]){webglPrepareUniformLocationsBeforeFirstUse(program);var uniformLocsById=program.uniformLocsById;var arrayIndex=0;var uniformBaseName=name;var leftBrace=webglGetLeftBracePos(name);if(leftBrace>0){arrayIndex=jstoi_q(name.slice(leftBrace+1))>>>0;uniformBaseName=name.slice(0,leftBrace)}var sizeAndId=program.uniformSizeAndIdsByName[uniformBaseName];if(sizeAndId&&arrayIndex<sizeAndId[0]){arrayIndex+=sizeAndId[1];if(uniformLocsById[arrayIndex]=uniformLocsById[arrayIndex]||GLctx.getUniformLocation(program,name)){return arrayIndex}}}else{GL.recordError(1281)}return-1};var _emscripten_glGetUniformLocation=_glGetUniformLocation;var webglGetUniformLocation=location=>{var p=GLctx.currentProgram;if(p){var webglLoc=p.uniformLocsById[location];if(typeof webglLoc==\"number\"){p.uniformLocsById[location]=webglLoc=GLctx.getUniformLocation(p,p.uniformArrayNamesById[location]+(webglLoc>0?`[${webglLoc}]`:\"\"))}return webglLoc}else{GL.recordError(1282)}};var emscriptenWebGLGetUniform=(program,location,params,type)=>{if(!params){GL.recordError(1281);return}program=GL.programs[program];webglPrepareUniformLocationsBeforeFirstUse(program);var data=GLctx.getUniform(program,webglGetUniformLocation(location));if(typeof data==\"number\"||typeof data==\"boolean\"){switch(type){case 0:HEAP32[params>>2]=data;break;case 2:HEAPF32[params>>2]=data;break}}else{for(var i=0;i<data.length;i++){switch(type){case 0:HEAP32[params+i*4>>2]=data[i];break;case 2:HEAPF32[params+i*4>>2]=data[i];break}}}};var _glGetUniformfv=(program,location,params)=>{emscriptenWebGLGetUniform(program,location,params,2)};var _emscripten_glGetUniformfv=_glGetUniformfv;var _glGetUniformiv=(program,location,params)=>{emscriptenWebGLGetUniform(program,location,params,0)};var _emscripten_glGetUniformiv=_glGetUniformiv;var _glGetVertexAttribPointerv=(index,pname,pointer)=>{if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)};var _emscripten_glGetVertexAttribPointerv=_glGetVertexAttribPointerv;var emscriptenWebGLGetVertexAttrib=(index,pname,params,type)=>{if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data&&data[\"name\"]}else if(typeof data==\"number\"||typeof data==\"boolean\"){switch(type){case 0:HEAP32[params>>2]=data;break;case 2:HEAPF32[params>>2]=data;break;case 5:HEAP32[params>>2]=Math.fround(data);break}}else{for(var i=0;i<data.length;i++){switch(type){case 0:HEAP32[params+i*4>>2]=data[i];break;case 2:HEAPF32[params+i*4>>2]=data[i];break;case 5:HEAP32[params+i*4>>2]=Math.fround(data[i]);break}}}};var _glGetVertexAttribfv=(index,pname,params)=>{emscriptenWebGLGetVertexAttrib(index,pname,params,2)};var _emscripten_glGetVertexAttribfv=_glGetVertexAttribfv;var _glGetVertexAttribiv=(index,pname,params)=>{emscriptenWebGLGetVertexAttrib(index,pname,params,5)};var _emscripten_glGetVertexAttribiv=_glGetVertexAttribiv;var _glHint=(x0,x1)=>GLctx.hint(x0,x1);var _emscripten_glHint=_glHint;var _glIsBuffer=buffer=>{var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)};var _emscripten_glIsBuffer=_glIsBuffer;var _glIsEnabled=x0=>GLctx.isEnabled(x0);var _emscripten_glIsEnabled=_glIsEnabled;var _glIsFramebuffer=framebuffer=>{var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)};var _emscripten_glIsFramebuffer=_glIsFramebuffer;var _glIsProgram=program=>{program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)};var _emscripten_glIsProgram=_glIsProgram;var _glIsQueryEXT=id=>{var query=GL.queries[id];if(!query)return 0;return GLctx.disjointTimerQueryExt[\"isQueryEXT\"](query)};var _emscripten_glIsQueryEXT=_glIsQueryEXT;var _glIsRenderbuffer=renderbuffer=>{var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)};var _emscripten_glIsRenderbuffer=_glIsRenderbuffer;var _glIsShader=shader=>{var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)};var _emscripten_glIsShader=_glIsShader;var _glIsTexture=id=>{var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)};var _emscripten_glIsTexture=_glIsTexture;var _glIsVertexArray=array=>{var vao=GL.vaos[array];if(!vao)return 0;return GLctx.isVertexArray(vao)};var _glIsVertexArrayOES=_glIsVertexArray;var _emscripten_glIsVertexArrayOES=_glIsVertexArrayOES;var _glLineWidth=x0=>GLctx.lineWidth(x0);var _emscripten_glLineWidth=_glLineWidth;var _glLinkProgram=program=>{program=GL.programs[program];GLctx.linkProgram(program);program.uniformLocsById=0;program.uniformSizeAndIdsByName={}};var _emscripten_glLinkProgram=_glLinkProgram;var _glPixelStorei=(pname,param)=>{if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)};var _emscripten_glPixelStorei=_glPixelStorei;var _glPolygonOffset=(x0,x1)=>GLctx.polygonOffset(x0,x1);var _emscripten_glPolygonOffset=_glPolygonOffset;var _glQueryCounterEXT=(id,target)=>{GLctx.disjointTimerQueryExt[\"queryCounterEXT\"](GL.queries[id],target)};var _emscripten_glQueryCounterEXT=_glQueryCounterEXT;var computeUnpackAlignedImageSize=(width,height,sizePerPixel,alignment)=>{function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize};var colorChannelsInGlTextureFormat=format=>{var colorChannels={5:3,6:4,8:2,29502:3,29504:4};return colorChannels[format-6402]||1};var heapObjectForWebGLType=type=>{type-=5120;if(type==1)return HEAPU8;if(type==4)return HEAP32;if(type==6)return HEAPF32;if(type==5||type==28922)return HEAPU32;return HEAPU16};var toTypedArrayIndex=(pointer,heap)=>pointer>>>31-Math.clz32(heap.BYTES_PER_ELEMENT);var emscriptenWebGLGetTexPixelData=(type,format,width,height,pixels,internalFormat)=>{var heap=heapObjectForWebGLType(type);var sizePerPixel=colorChannelsInGlTextureFormat(format)*heap.BYTES_PER_ELEMENT;var bytes=computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);return heap.subarray(toTypedArrayIndex(pixels,heap),toTypedArrayIndex(pixels+bytes,heap))};var _glReadPixels=(x,y,width,height,format,type,pixels)=>{var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)};var _emscripten_glReadPixels=_glReadPixels;var _glReleaseShaderCompiler=()=>{};var _emscripten_glReleaseShaderCompiler=_glReleaseShaderCompiler;var _glRenderbufferStorage=(x0,x1,x2,x3)=>GLctx.renderbufferStorage(x0,x1,x2,x3);var _emscripten_glRenderbufferStorage=_glRenderbufferStorage;var _glSampleCoverage=(value,invert)=>{GLctx.sampleCoverage(value,!!invert)};var _emscripten_glSampleCoverage=_glSampleCoverage;var _glScissor=(x0,x1,x2,x3)=>GLctx.scissor(x0,x1,x2,x3);var _emscripten_glScissor=_glScissor;var _glShaderBinary=(count,shaders,binaryformat,binary,length)=>{GL.recordError(1280)};var _emscripten_glShaderBinary=_glShaderBinary;var _glShaderSource=(shader,count,string,length)=>{var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)};var _emscripten_glShaderSource=_glShaderSource;var _glStencilFunc=(x0,x1,x2)=>GLctx.stencilFunc(x0,x1,x2);var _emscripten_glStencilFunc=_glStencilFunc;var _glStencilFuncSeparate=(x0,x1,x2,x3)=>GLctx.stencilFuncSeparate(x0,x1,x2,x3);var _emscripten_glStencilFuncSeparate=_glStencilFuncSeparate;var _glStencilMask=x0=>GLctx.stencilMask(x0);var _emscripten_glStencilMask=_glStencilMask;var _glStencilMaskSeparate=(x0,x1)=>GLctx.stencilMaskSeparate(x0,x1);var _emscripten_glStencilMaskSeparate=_glStencilMaskSeparate;var _glStencilOp=(x0,x1,x2)=>GLctx.stencilOp(x0,x1,x2);var _emscripten_glStencilOp=_glStencilOp;var _glStencilOpSeparate=(x0,x1,x2,x3)=>GLctx.stencilOpSeparate(x0,x1,x2,x3);var _emscripten_glStencilOpSeparate=_glStencilOpSeparate;var _glTexImage2D=(target,level,internalFormat,width,height,border,format,type,pixels)=>{var pixelData=pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null;GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixelData)};var _emscripten_glTexImage2D=_glTexImage2D;var _glTexParameterf=(x0,x1,x2)=>GLctx.texParameterf(x0,x1,x2);var _emscripten_glTexParameterf=_glTexParameterf;var _glTexParameterfv=(target,pname,params)=>{var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)};var _emscripten_glTexParameterfv=_glTexParameterfv;var _glTexParameteri=(x0,x1,x2)=>GLctx.texParameteri(x0,x1,x2);var _emscripten_glTexParameteri=_glTexParameteri;var _glTexParameteriv=(target,pname,params)=>{var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)};var _emscripten_glTexParameteriv=_glTexParameteriv;var _glTexSubImage2D=(target,level,xoffset,yoffset,width,height,format,type,pixels)=>{var pixelData=pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0):null;GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)};var _emscripten_glTexSubImage2D=_glTexSubImage2D;var _glUniform1f=(location,v0)=>{GLctx.uniform1f(webglGetUniformLocation(location),v0)};var _emscripten_glUniform1f=_glUniform1f;var miniTempWebGLFloatBuffers=[];var _glUniform1fv=(location,count,value)=>{if(count<=288){var view=miniTempWebGLFloatBuffers[count-1];for(var i=0;i<count;++i){view[i]=HEAPF32[value+4*i>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(webglGetUniformLocation(location),view)};var _emscripten_glUniform1fv=_glUniform1fv;var _glUniform1i=(location,v0)=>{GLctx.uniform1i(webglGetUniformLocation(location),v0)};var _emscripten_glUniform1i=_glUniform1i;var miniTempWebGLIntBuffers=[];var _glUniform1iv=(location,count,value)=>{if(count<=288){var view=miniTempWebGLIntBuffers[count-1];for(var i=0;i<count;++i){view[i]=HEAP32[value+4*i>>2]}}else{var view=HEAP32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1iv(webglGetUniformLocation(location),view)};var _emscripten_glUniform1iv=_glUniform1iv;var _glUniform2f=(location,v0,v1)=>{GLctx.uniform2f(webglGetUniformLocation(location),v0,v1)};var _emscripten_glUniform2f=_glUniform2f;var _glUniform2fv=(location,count,value)=>{if(count<=144){var view=miniTempWebGLFloatBuffers[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(webglGetUniformLocation(location),view)};var _emscripten_glUniform2fv=_glUniform2fv;var _glUniform2i=(location,v0,v1)=>{GLctx.uniform2i(webglGetUniformLocation(location),v0,v1)};var _emscripten_glUniform2i=_glUniform2i;var _glUniform2iv=(location,count,value)=>{if(count<=144){var view=miniTempWebGLIntBuffers[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAP32[value+4*i>>2];view[i+1]=HEAP32[value+(4*i+4)>>2]}}else{var view=HEAP32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2iv(webglGetUniformLocation(location),view)};var _emscripten_glUniform2iv=_glUniform2iv;var _glUniform3f=(location,v0,v1,v2)=>{GLctx.uniform3f(webglGetUniformLocation(location),v0,v1,v2)};var _emscripten_glUniform3f=_glUniform3f;var _glUniform3fv=(location,count,value)=>{if(count<=96){var view=miniTempWebGLFloatBuffers[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(webglGetUniformLocation(location),view)};var _emscripten_glUniform3fv=_glUniform3fv;var _glUniform3i=(location,v0,v1,v2)=>{GLctx.uniform3i(webglGetUniformLocation(location),v0,v1,v2)};var _emscripten_glUniform3i=_glUniform3i;var _glUniform3iv=(location,count,value)=>{if(count<=96){var view=miniTempWebGLIntBuffers[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAP32[value+4*i>>2];view[i+1]=HEAP32[value+(4*i+4)>>2];view[i+2]=HEAP32[value+(4*i+8)>>2]}}else{var view=HEAP32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3iv(webglGetUniformLocation(location),view)};var _emscripten_glUniform3iv=_glUniform3iv;var _glUniform4f=(location,v0,v1,v2,v3)=>{GLctx.uniform4f(webglGetUniformLocation(location),v0,v1,v2,v3)};var _emscripten_glUniform4f=_glUniform4f;var _glUniform4fv=(location,count,value)=>{if(count<=72){var view=miniTempWebGLFloatBuffers[4*count-1];var heap=HEAPF32;value=value>>2;for(var i=0;i<4*count;i+=4){var dst=value+i;view[i]=heap[dst];view[i+1]=heap[dst+1];view[i+2]=heap[dst+2];view[i+3]=heap[dst+3]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(webglGetUniformLocation(location),view)};var _emscripten_glUniform4fv=_glUniform4fv;var _glUniform4i=(location,v0,v1,v2,v3)=>{GLctx.uniform4i(webglGetUniformLocation(location),v0,v1,v2,v3)};var _emscripten_glUniform4i=_glUniform4i;var _glUniform4iv=(location,count,value)=>{if(count<=72){var view=miniTempWebGLIntBuffers[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAP32[value+4*i>>2];view[i+1]=HEAP32[value+(4*i+4)>>2];view[i+2]=HEAP32[value+(4*i+8)>>2];view[i+3]=HEAP32[value+(4*i+12)>>2]}}else{var view=HEAP32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4iv(webglGetUniformLocation(location),view)};var _emscripten_glUniform4iv=_glUniform4iv;var _glUniformMatrix2fv=(location,count,transpose,value)=>{if(count<=72){var view=miniTempWebGLFloatBuffers[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(webglGetUniformLocation(location),!!transpose,view)};var _emscripten_glUniformMatrix2fv=_glUniformMatrix2fv;var _glUniformMatrix3fv=(location,count,transpose,value)=>{if(count<=32){var view=miniTempWebGLFloatBuffers[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(webglGetUniformLocation(location),!!transpose,view)};var _emscripten_glUniformMatrix3fv=_glUniformMatrix3fv;var _glUniformMatrix4fv=(location,count,transpose,value)=>{if(count<=18){var view=miniTempWebGLFloatBuffers[16*count-1];var heap=HEAPF32;value=value>>2;for(var i=0;i<16*count;i+=16){var dst=value+i;view[i]=heap[dst];view[i+1]=heap[dst+1];view[i+2]=heap[dst+2];view[i+3]=heap[dst+3];view[i+4]=heap[dst+4];view[i+5]=heap[dst+5];view[i+6]=heap[dst+6];view[i+7]=heap[dst+7];view[i+8]=heap[dst+8];view[i+9]=heap[dst+9];view[i+10]=heap[dst+10];view[i+11]=heap[dst+11];view[i+12]=heap[dst+12];view[i+13]=heap[dst+13];view[i+14]=heap[dst+14];view[i+15]=heap[dst+15]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(webglGetUniformLocation(location),!!transpose,view)};var _emscripten_glUniformMatrix4fv=_glUniformMatrix4fv;var _glUseProgram=program=>{program=GL.programs[program];GLctx.useProgram(program);GLctx.currentProgram=program};var _emscripten_glUseProgram=_glUseProgram;var _glValidateProgram=program=>{GLctx.validateProgram(GL.programs[program])};var _emscripten_glValidateProgram=_glValidateProgram;var _glVertexAttrib1f=(x0,x1)=>GLctx.vertexAttrib1f(x0,x1);var _emscripten_glVertexAttrib1f=_glVertexAttrib1f;var _glVertexAttrib1fv=(index,v)=>{GLctx.vertexAttrib1f(index,HEAPF32[v>>2])};var _emscripten_glVertexAttrib1fv=_glVertexAttrib1fv;var _glVertexAttrib2f=(x0,x1,x2)=>GLctx.vertexAttrib2f(x0,x1,x2);var _emscripten_glVertexAttrib2f=_glVertexAttrib2f;var _glVertexAttrib2fv=(index,v)=>{GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])};var _emscripten_glVertexAttrib2fv=_glVertexAttrib2fv;var _glVertexAttrib3f=(x0,x1,x2,x3)=>GLctx.vertexAttrib3f(x0,x1,x2,x3);var _emscripten_glVertexAttrib3f=_glVertexAttrib3f;var _glVertexAttrib3fv=(index,v)=>{GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])};var _emscripten_glVertexAttrib3fv=_glVertexAttrib3fv;var _glVertexAttrib4f=(x0,x1,x2,x3,x4)=>GLctx.vertexAttrib4f(x0,x1,x2,x3,x4);var _emscripten_glVertexAttrib4f=_glVertexAttrib4f;var _glVertexAttrib4fv=(index,v)=>{GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])};var _emscripten_glVertexAttrib4fv=_glVertexAttrib4fv;var _glVertexAttribDivisor=(index,divisor)=>{GLctx.vertexAttribDivisor(index,divisor)};var _glVertexAttribDivisorANGLE=_glVertexAttribDivisor;var _emscripten_glVertexAttribDivisorANGLE=_glVertexAttribDivisorANGLE;var _glVertexAttribPointer=(index,size,type,normalized,stride,ptr)=>{GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)};var _emscripten_glVertexAttribPointer=_glVertexAttribPointer;var _glViewport=(x0,x1,x2,x3)=>GLctx.viewport(x0,x1,x2,x3);var _emscripten_glViewport=_glViewport;var growMemory=size=>{var b=wasmMemory.buffer;var pages=(size-b.byteLength+65535)/65536;try{wasmMemory.grow(pages);updateMemoryViews();return 1}catch(e){}};var _emscripten_resize_heap=requestedSize=>{var oldSize=HEAPU8.length;requestedSize>>>=0;var maxHeapSize=getHeapMax();if(requestedSize>maxHeapSize){return false}var alignUp=(x,multiple)=>x+(multiple-x%multiple)%multiple;for(var cutDown=1;cutDown<=4;cutDown*=2){var overGrownHeapSize=oldSize*(1+.2/cutDown);overGrownHeapSize=Math.min(overGrownHeapSize,requestedSize+100663296);var newSize=Math.min(maxHeapSize,alignUp(Math.max(requestedSize,overGrownHeapSize),65536));var replacement=growMemory(newSize);if(replacement){return true}}return false};var _emscripten_sample_gamepad_data=()=>{try{if(navigator.getGamepads)return(JSEvents.lastGamepadState=navigator.getGamepads())?0:-1}catch(e){navigator.getGamepads=null}return-1};var findCanvasEventTarget=findEventTarget;var _emscripten_set_canvas_element_size=(target,width,height)=>{var canvas=findCanvasEventTarget(target);if(!canvas)return-4;canvas.width=width;canvas.height=height;return 0};var fillMouseEventData=(eventStruct,e,target)=>{HEAPF64[eventStruct>>3]=e.timeStamp;var idx=eventStruct>>2;HEAP32[idx+2]=e.screenX;HEAP32[idx+3]=e.screenY;HEAP32[idx+4]=e.clientX;HEAP32[idx+5]=e.clientY;HEAP32[idx+6]=e.ctrlKey;HEAP32[idx+7]=e.shiftKey;HEAP32[idx+8]=e.altKey;HEAP32[idx+9]=e.metaKey;HEAP16[idx*2+20]=e.button;HEAP16[idx*2+21]=e.buttons;HEAP32[idx+11]=e[\"movementX\"];HEAP32[idx+12]=e[\"movementY\"];var rect=getBoundingClientRect(target);HEAP32[idx+13]=e.clientX-(rect.left|0);HEAP32[idx+14]=e.clientY-(rect.top|0)};var wasmTableMirror=[];var wasmTable;var getWasmTableEntry=funcPtr=>{var func=wasmTableMirror[funcPtr];if(!func){if(funcPtr>=wasmTableMirror.length)wasmTableMirror.length=funcPtr+1;wasmTableMirror[funcPtr]=func=wasmTable.get(funcPtr)}return func};var registerMouseEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=findEventTarget(target);var mouseEventHandlerFunc=(e=event)=>{fillMouseEventData(JSEvents.mouseEvent,e,target);if(getWasmTableEntry(callbackfunc)(eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!=\"mousemove\"&&eventTypeString!=\"mouseenter\"&&eventTypeString!=\"mouseleave\",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};var _emscripten_set_click_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,\"click\",targetThread);var fillFullscreenChangeEventData=eventStruct=>{var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement?.id||\"\";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}};var registerFullscreenChangeEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=(e=event)=>{var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;fillFullscreenChangeEventData(fullscreenChangeEvent);if(getWasmTableEntry(callbackfunc)(eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};var _emscripten_set_fullscreenchange_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>{if(!JSEvents.fullscreenEnabled())return-1;target=findEventTarget(target);if(!target)return-4;registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,\"webkitfullscreenchange\",targetThread);return registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,\"fullscreenchange\",targetThread)};var registerGamepadEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=(e=event)=>{var gamepadEvent=JSEvents.gamepadEvent;fillGamepadEventData(gamepadEvent,e[\"gamepad\"]);if(getWasmTableEntry(callbackfunc)(eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};var _emscripten_set_gamepadconnected_callback_on_thread=(userData,useCapture,callbackfunc,targetThread)=>{if(_emscripten_sample_gamepad_data())return-1;return registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,\"gamepadconnected\",targetThread)};var _emscripten_set_gamepaddisconnected_callback_on_thread=(userData,useCapture,callbackfunc,targetThread)=>{if(_emscripten_sample_gamepad_data())return-1;return registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,\"gamepaddisconnected\",targetThread)};var registerUiEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{if(!JSEvents.uiEvent)JSEvents.uiEvent=_malloc(36);target=findEventTarget(target);var uiEventHandlerFunc=(e=event)=>{if(e.target!=target){return}var b=document.body;if(!b){return}var uiEvent=JSEvents.uiEvent;HEAP32[uiEvent>>2]=0;HEAP32[uiEvent+4>>2]=b.clientWidth;HEAP32[uiEvent+8>>2]=b.clientHeight;HEAP32[uiEvent+12>>2]=innerWidth;HEAP32[uiEvent+16>>2]=innerHeight;HEAP32[uiEvent+20>>2]=outerWidth;HEAP32[uiEvent+24>>2]=outerHeight;HEAP32[uiEvent+28>>2]=pageXOffset|0;HEAP32[uiEvent+32>>2]=pageYOffset|0;if(getWasmTableEntry(callbackfunc)(eventTypeId,uiEvent,userData))e.preventDefault()};var eventHandler={target:target,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:uiEventHandlerFunc,useCapture:useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};var _emscripten_set_resize_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>registerUiEventCallback(target,userData,useCapture,callbackfunc,10,\"resize\",targetThread);var registerTouchEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1696);target=findEventTarget(target);var touchEventHandlerFunc=e=>{var t,touches={},et=e.touches;for(var i=0;i<et.length;++i){t=et[i];t.isChanged=t.onTarget=0;touches[t.identifier]=t}for(var i=0;i<e.changedTouches.length;++i){t=e.changedTouches[i];t.isChanged=1;touches[t.identifier]=t}for(var i=0;i<e.targetTouches.length;++i){touches[e.targetTouches[i].identifier].onTarget=1}var touchEvent=JSEvents.touchEvent;HEAPF64[touchEvent>>3]=e.timeStamp;var idx=touchEvent>>2;HEAP32[idx+3]=e.ctrlKey;HEAP32[idx+4]=e.shiftKey;HEAP32[idx+5]=e.altKey;HEAP32[idx+6]=e.metaKey;idx+=7;var targetRect=getBoundingClientRect(target);var numTouches=0;for(var i in touches){t=touches[i];HEAP32[idx+0]=t.identifier;HEAP32[idx+1]=t.screenX;HEAP32[idx+2]=t.screenY;HEAP32[idx+3]=t.clientX;HEAP32[idx+4]=t.clientY;HEAP32[idx+5]=t.pageX;HEAP32[idx+6]=t.pageY;HEAP32[idx+7]=t.isChanged;HEAP32[idx+8]=t.onTarget;HEAP32[idx+9]=t.clientX-(targetRect.left|0);HEAP32[idx+10]=t.clientY-(targetRect.top|0);idx+=13;if(++numTouches>31){break}}HEAP32[touchEvent+8>>2]=numTouches;if(getWasmTableEntry(callbackfunc)(eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString==\"touchstart\"||eventTypeString==\"touchend\",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};var _emscripten_set_touchcancel_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,\"touchcancel\",targetThread);var _emscripten_set_touchend_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,\"touchend\",targetThread);var _emscripten_set_touchmove_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,\"touchmove\",targetThread);var _emscripten_set_touchstart_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,\"touchstart\",targetThread);var runtimeKeepalivePush=()=>{runtimeKeepaliveCounter+=1};var _emscripten_set_main_loop_timing=(mode,value)=>{Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(!Browser.mainLoop.running){runtimeKeepalivePush();Browser.mainLoop.running=true}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method=\"timeout\"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method=\"rAF\"}else if(mode==2){if(typeof Browser.setImmediate==\"undefined\"){if(typeof setImmediate==\"undefined\"){var setImmediates=[];var emscriptenMainLoopMessageId=\"setimmediate\";var Browser_setImmediate_messageHandler=event=>{if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener(\"message\",Browser_setImmediate_messageHandler,true);Browser.setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module[\"setImmediates\"]===undefined)Module[\"setImmediates\"]=[];Module[\"setImmediates\"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,\"*\")}}else{Browser.setImmediate=setImmediate}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){Browser.setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method=\"immediate\"}return 0};var handleException=e=>{if(e instanceof ExitStatus||e==\"unwind\"){return EXITSTATUS}quit_(1,e)};var maybeExit=()=>{if(runtimeExited){return}if(!keepRuntimeAlive()){try{_exit(EXITSTATUS)}catch(e){handleException(e)}}};var runtimeKeepalivePop=()=>{runtimeKeepaliveCounter-=1};var setMainLoop=(browserIterationFunc,fps,simulateInfiniteLoop,arg,noSetTiming)=>{Browser.mainLoop.func=browserIterationFunc;Browser.mainLoop.arg=arg;var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;function checkIsRunning(){if(thisMainLoopId<Browser.mainLoop.currentlyRunningMainloop){runtimeKeepalivePop();maybeExit();return false}return true}Browser.mainLoop.running=false;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}Browser.mainLoop.updateStatus();if(!checkIsRunning())return;setTimeout(Browser.mainLoop.runner,0);return}if(!checkIsRunning())return;Browser.mainLoop.currentFrameNumber=Browser.mainLoop.currentFrameNumber+1|0;if(Browser.mainLoop.timingMode==1&&Browser.mainLoop.timingValue>1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}Browser.mainLoop.runIter(browserIterationFunc);if(!checkIsRunning())return;if(typeof SDL==\"object\")SDL.audio?.queueNewAudioData?.();Browser.mainLoop.scheduler()};if(!noSetTiming){if(fps&&fps>0){_emscripten_set_main_loop_timing(0,1e3/fps)}else{_emscripten_set_main_loop_timing(1,1)}Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw\"unwind\"}};var callUserCallback=func=>{if(runtimeExited||ABORT){return}try{func();maybeExit()}catch(e){handleException(e)}};var safeSetTimeout=(func,timeout)=>{runtimeKeepalivePush();return setTimeout(()=>{runtimeKeepalivePop();callUserCallback(func)},timeout)};var warnOnce=text=>{warnOnce.shown||={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;if(ENVIRONMENT_IS_NODE)text=\"warning: \"+text;err(text)}};var Browser={mainLoop:{running:false,scheduler:null,method:\"\",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;setMainLoop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus(){if(Module[\"setStatus\"]){var message=Module[\"statusMessage\"]||\"Please wait...\";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining<expected){Module[\"setStatus\"](`{message} ({expected - remaining}/{expected})`)}else{Module[\"setStatus\"](message)}}else{Module[\"setStatus\"](\"\")}}},runIter(func){if(ABORT)return;if(Module[\"preMainLoop\"]){var preRet=Module[\"preMainLoop\"]();if(preRet===false){return}}callUserCallback(func);Module[\"postMainLoop\"]?.()}},isFullscreen:false,pointerLock:false,moduleContextCreatedCallbacks:[],workers:[],init(){if(Browser.initted)return;Browser.initted=true;var imagePlugin={};imagePlugin[\"canHandle\"]=function imagePlugin_canHandle(name){return!Module.noImageDecoding&&/\\.(jpg|jpeg|png|bmp)$/i.test(name)};imagePlugin[\"handle\"]=function imagePlugin_handle(byteArray,name,onload,onerror){var b=new Blob([byteArray],{type:Browser.getMimetype(name)});if(b.size!==byteArray.length){b=new Blob([new Uint8Array(byteArray).buffer],{type:Browser.getMimetype(name)})}var url=URL.createObjectURL(b);var img=new Image;img.onload=()=>{var canvas=document.createElement(\"canvas\");canvas.width=img.width;canvas.height=img.height;var ctx=canvas.getContext(\"2d\");ctx.drawImage(img,0,0);preloadedImages[name]=canvas;URL.revokeObjectURL(url);onload?.(byteArray)};img.onerror=event=>{err(`Image ${url} could not be decoded`);onerror?.()};img.src=url};preloadPlugins.push(imagePlugin);var audioPlugin={};audioPlugin[\"canHandle\"]=function audioPlugin_canHandle(name){return!Module.noAudioDecoding&&name.substr(-4)in{\".ogg\":1,\".wav\":1,\".mp3\":1}};audioPlugin[\"handle\"]=function audioPlugin_handle(byteArray,name,onload,onerror){var done=false;function finish(audio){if(done)return;done=true;preloadedAudios[name]=audio;onload?.(byteArray)}var b=new Blob([byteArray],{type:Browser.getMimetype(name)});var url=URL.createObjectURL(b);var audio=new Audio;audio.addEventListener(\"canplaythrough\",()=>finish(audio),false);audio.onerror=function audio_onerror(event){if(done)return;err(`warning: browser could not fully decode audio ${name}, trying slower base64 approach`);function encode64(data){var BASE=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";var PAD=\"=\";var ret=\"\";var leftchar=0;var leftbits=0;for(var i=0;i<data.length;i++){leftchar=leftchar<<8|data[i];leftbits+=8;while(leftbits>=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src=\"data:audio/x-\"+name.substr(-3)+\";base64,\"+encode64(byteArray);finish(audio)};audio.src=url;safeSetTimeout(()=>{finish(audio)},1e4)};preloadPlugins.push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document[\"pointerLockElement\"]===Module[\"canvas\"]||document[\"mozPointerLockElement\"]===Module[\"canvas\"]||document[\"webkitPointerLockElement\"]===Module[\"canvas\"]||document[\"msPointerLockElement\"]===Module[\"canvas\"]}var canvas=Module[\"canvas\"];if(canvas){canvas.requestPointerLock=canvas[\"requestPointerLock\"]||canvas[\"mozRequestPointerLock\"]||canvas[\"webkitRequestPointerLock\"]||canvas[\"msRequestPointerLock\"]||(()=>{});canvas.exitPointerLock=document[\"exitPointerLock\"]||document[\"mozExitPointerLock\"]||document[\"webkitExitPointerLock\"]||document[\"msExitPointerLock\"]||(()=>{});canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener(\"pointerlockchange\",pointerLockChange,false);document.addEventListener(\"mozpointerlockchange\",pointerLockChange,false);document.addEventListener(\"webkitpointerlockchange\",pointerLockChange,false);document.addEventListener(\"mspointerlockchange\",pointerLockChange,false);if(Module[\"elementPointerLock\"]){canvas.addEventListener(\"click\",ev=>{if(!Browser.pointerLock&&Module[\"canvas\"].requestPointerLock){Module[\"canvas\"].requestPointerLock();ev.preventDefault()}},false)}}},createContext(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=\"undefined\"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext(\"2d\")}if(!ctx)return null;if(setInModule){Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(callback=>callback());Browser.init()}return ctx},destroyContext(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen(lockPointer,resizeCanvas){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;if(typeof Browser.lockPointer==\"undefined\")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==\"undefined\")Browser.resizeCanvas=false;var canvas=Module[\"canvas\"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document[\"fullscreenElement\"]||document[\"mozFullScreenElement\"]||document[\"msFullscreenElement\"]||document[\"webkitFullscreenElement\"]||document[\"webkitCurrentFullScreenElement\"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}Module[\"onFullScreen\"]?.(Browser.isFullscreen);Module[\"onFullscreen\"]?.(Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener(\"fullscreenchange\",fullscreenChange,false);document.addEventListener(\"mozfullscreenchange\",fullscreenChange,false);document.addEventListener(\"webkitfullscreenchange\",fullscreenChange,false);document.addEventListener(\"MSFullscreenChange\",fullscreenChange,false)}var canvasContainer=document.createElement(\"div\");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer[\"requestFullscreen\"]||canvasContainer[\"mozRequestFullScreen\"]||canvasContainer[\"msRequestFullscreen\"]||(canvasContainer[\"webkitRequestFullscreen\"]?()=>canvasContainer[\"webkitRequestFullscreen\"](Element[\"ALLOW_KEYBOARD_INPUT\"]):null)||(canvasContainer[\"webkitRequestFullScreen\"]?()=>canvasContainer[\"webkitRequestFullScreen\"](Element[\"ALLOW_KEYBOARD_INPUT\"]):null);canvasContainer.requestFullscreen()},exitFullscreen(){if(!Browser.isFullscreen){return false}var CFS=document[\"exitFullscreen\"]||document[\"cancelFullScreen\"]||document[\"mozCancelFullScreen\"]||document[\"msExitFullscreen\"]||document[\"webkitCancelFullScreen\"]||(()=>{});CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame(func){if(typeof requestAnimationFrame==\"function\"){requestAnimationFrame(func);return}var RAF=Browser.fakeRequestAnimationFrame;RAF(func)},safeSetTimeout(func,timeout){return safeSetTimeout(func,timeout)},safeRequestAnimationFrame(func){runtimeKeepalivePush();return Browser.requestAnimationFrame(()=>{runtimeKeepalivePop();callUserCallback(func)})},getMimetype(name){return{\"jpg\":\"image/jpeg\",\"jpeg\":\"image/jpeg\",\"png\":\"image/png\",\"bmp\":\"image/bmp\",\"ogg\":\"audio/ogg\",\"wav\":\"audio/wav\",\"mp3\":\"audio/mpeg\"}[name.substr(name.lastIndexOf(\".\")+1)]},getUserMedia(func){window.getUserMedia||=navigator[\"getUserMedia\"]||navigator[\"mozGetUserMedia\"];window.getUserMedia(func)},getMovementX(event){return event[\"movementX\"]||event[\"mozMovementX\"]||event[\"webkitMovementX\"]||0},getMovementY(event){return event[\"movementY\"]||event[\"mozMovementY\"]||event[\"webkitMovementY\"]||0},getMouseWheelDelta(event){var delta=0;switch(event.type){case\"DOMMouseScroll\":delta=event.detail/3;break;case\"mousewheel\":delta=event.wheelDelta/120;break;case\"wheel\":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw\"unrecognized mouse wheel delta mode: \"+event.deltaMode}break;default:throw\"unrecognized mouse wheel event: \"+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseCoords(pageX,pageY){var rect=Module[\"canvas\"].getBoundingClientRect();var cw=Module[\"canvas\"].width;var ch=Module[\"canvas\"].height;var scrollX=typeof window.scrollX!=\"undefined\"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=\"undefined\"?window.scrollY:window.pageYOffset;var adjustedX=pageX-(scrollX+rect.left);var adjustedY=pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);return{x:adjustedX,y:adjustedY}},setMouseCoords(pageX,pageY){const{x:x,y:y}=Browser.calculateMouseCoords(pageX,pageY);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y},calculateMouseEvent(event){if(Browser.pointerLock){if(event.type!=\"mousemove\"&&\"mozMovementX\"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!=\"undefined\"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{if(event.type===\"touchstart\"||event.type===\"touchend\"||event.type===\"touchmove\"){var touch=event.touch;if(touch===undefined){return}var coords=Browser.calculateMouseCoords(touch.pageX,touch.pageY);if(event.type===\"touchstart\"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type===\"touchend\"||event.type===\"touchmove\"){var last=Browser.touches[touch.identifier];last||=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}Browser.setMouseCoords(event.pageX,event.pageY)}},resizeListeners:[],updateResizeListeners(){var canvas=Module[\"canvas\"];Browser.resizeListeners.forEach(listener=>listener(canvas.width,canvas.height))},setCanvasSize(width,height,noUpdates){var canvas=Module[\"canvas\"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize(){if(typeof SDL!=\"undefined\"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module[\"canvas\"]);Browser.updateResizeListeners()},setWindowedCanvasSize(){if(typeof SDL!=\"undefined\"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module[\"canvas\"]);Browser.updateResizeListeners()},updateCanvasDimensions(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module[\"forcedAspectRatio\"]&&Module[\"forcedAspectRatio\"]>0){if(w/h<Module[\"forcedAspectRatio\"]){w=Math.round(h*Module[\"forcedAspectRatio\"])}else{h=Math.round(w/Module[\"forcedAspectRatio\"])}}if((document[\"fullscreenElement\"]||document[\"mozFullScreenElement\"]||document[\"msFullscreenElement\"]||document[\"webkitFullscreenElement\"]||document[\"webkitCurrentFullScreenElement\"])===canvas.parentNode&&typeof screen!=\"undefined\"){var factor=Math.min(screen.width/w,screen.height/h);w=Math.round(w*factor);h=Math.round(h*factor)}if(Browser.resizeCanvas){if(canvas.width!=w)canvas.width=w;if(canvas.height!=h)canvas.height=h;if(typeof canvas.style!=\"undefined\"){canvas.style.removeProperty(\"width\");canvas.style.removeProperty(\"height\")}}else{if(canvas.width!=wNative)canvas.width=wNative;if(canvas.height!=hNative)canvas.height=hNative;if(typeof canvas.style!=\"undefined\"){if(w!=wNative||h!=hNative){canvas.style.setProperty(\"width\",w+\"px\",\"important\");canvas.style.setProperty(\"height\",h+\"px\",\"important\")}else{canvas.style.removeProperty(\"width\");canvas.style.removeProperty(\"height\")}}}}};var _emscripten_set_window_title=title=>document.title=UTF8ToString(title);var ENV={};var getExecutableName=()=>thisProgram||\"./this.program\";var getEnvStrings=()=>{if(!getEnvStrings.strings){var lang=(typeof navigator==\"object\"&&navigator.languages&&navigator.languages[0]||\"C\").replace(\"-\",\"_\")+\".UTF-8\";var env={\"USER\":\"web_user\",\"LOGNAME\":\"web_user\",\"PATH\":\"/\",\"PWD\":\"/\",\"HOME\":\"/home/web_user\",\"LANG\":lang,\"_\":getExecutableName()};for(var x in ENV){if(ENV[x]===undefined)delete env[x];else env[x]=ENV[x]}var strings=[];for(var x in env){strings.push(`${x}=${env[x]}`)}getEnvStrings.strings=strings}return getEnvStrings.strings};var stringToAscii=(str,buffer)=>{for(var i=0;i<str.length;++i){HEAP8[buffer++]=str.charCodeAt(i)}HEAP8[buffer]=0};var _environ_get=(__environ,environ_buf)=>{var bufSize=0;getEnvStrings().forEach((string,i)=>{var ptr=environ_buf+bufSize;HEAPU32[__environ+i*4>>2]=ptr;stringToAscii(string,ptr);bufSize+=string.length+1});return 0};var _environ_sizes_get=(penviron_count,penviron_buf_size)=>{var strings=getEnvStrings();HEAPU32[penviron_count>>2]=strings.length;var bufSize=0;strings.forEach(string=>bufSize+=string.length+1);HEAPU32[penviron_buf_size>>2]=bufSize;return 0};function _fd_close(fd){try{var stream=SYSCALLS.getStreamFromFD(fd);FS.close(stream);return 0}catch(e){if(typeof FS==\"undefined\"||!(e.name===\"ErrnoError\"))throw e;return e.errno}}var doReadv=(stream,iov,iovcnt,offset)=>{var ret=0;for(var i=0;i<iovcnt;i++){var ptr=HEAPU32[iov>>2];var len=HEAPU32[iov+4>>2];iov+=8;var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr<len)break;if(typeof offset!==\"undefined\"){offset+=curr}}return ret};function _fd_pread(fd,iov,iovcnt,offset,pnum){offset=bigintToI53Checked(offset);try{if(isNaN(offset))return 61;var stream=SYSCALLS.getStreamFromFD(fd);var num=doReadv(stream,iov,iovcnt,offset);HEAPU32[pnum>>2]=num;return 0}catch(e){if(typeof FS==\"undefined\"||!(e.name===\"ErrnoError\"))throw e;return e.errno}}function _fd_read(fd,iov,iovcnt,pnum){try{var stream=SYSCALLS.getStreamFromFD(fd);var num=doReadv(stream,iov,iovcnt);HEAPU32[pnum>>2]=num;return 0}catch(e){if(typeof FS==\"undefined\"||!(e.name===\"ErrnoError\"))throw e;return e.errno}}function _fd_seek(fd,offset,whence,newOffset){offset=bigintToI53Checked(offset);try{if(isNaN(offset))return 61;var stream=SYSCALLS.getStreamFromFD(fd);FS.llseek(stream,offset,whence);HEAP64[newOffset>>3]=BigInt(stream.position);if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==\"undefined\"||!(e.name===\"ErrnoError\"))throw e;return e.errno}}var doWritev=(stream,iov,iovcnt,offset)=>{var ret=0;for(var i=0;i<iovcnt;i++){var ptr=HEAPU32[iov>>2];var len=HEAPU32[iov+4>>2];iov+=8;var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(typeof offset!==\"undefined\"){offset+=curr}}return ret};function _fd_write(fd,iov,iovcnt,pnum){try{var stream=SYSCALLS.getStreamFromFD(fd);var num=doWritev(stream,iov,iovcnt);HEAPU32[pnum>>2]=num;return 0}catch(e){if(typeof FS==\"undefined\"||!(e.name===\"ErrnoError\"))throw e;return e.errno}}function GLFW_Window(id,width,height,framebufferWidth,framebufferHeight,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.framebufferWidth=framebufferWidth;this.framebufferHeight=framebufferHeight;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=Object.assign({},GLFW.hints);this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=0;this.windowSizeFunc=0;this.windowCloseFunc=0;this.windowRefreshFunc=0;this.windowFocusFunc=0;this.windowIconifyFunc=0;this.windowMaximizeFunc=0;this.framebufferSizeFunc=0;this.windowContentScaleFunc=0;this.mouseButtonFunc=0;this.cursorPosFunc=0;this.cursorEnterFunc=0;this.scrollFunc=0;this.dropFunc=0;this.keyFunc=0;this.charFunc=0;this.userptr=0}var GLFW={WindowFromId:id=>{if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:0,errorFunc:0,monitorFunc:0,active:null,scale:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,devicePixelRatioMQL:null,hints:null,primaryTouchId:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,131082:0,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0,139276:0},DOMToGLFWKeyCode:keycode=>{switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 96;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 224:return 343;case 93:return 348;default:return-1}},getModBits:win=>{var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343]||win.keys[348])mod|=8;return mod},onKeyPress:event=>{if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;getWasmTableEntry(GLFW.active.charFunc)(GLFW.active.id,charCode)},onKeyChanged:(keyCode,status)=>{if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(GLFW.active.keyFunc){if(repeat)status=2;getWasmTableEntry(GLFW.active.keyFunc)(GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))}},onGamepadConnected:event=>{GLFW.refreshJoysticks()},onGamepadDisconnected:event=>{GLFW.refreshJoysticks()},onKeydown:event=>{GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:event=>{GLFW.onKeyChanged(event.keyCode,0)},onBlur:event=>{if(!GLFW.active)return;for(var i=0;i<GLFW.active.domKeys.length;++i){if(GLFW.active.domKeys[i]){GLFW.onKeyChanged(i,0)}}},onMousemove:event=>{if(!GLFW.active)return;if(event.type===\"touchmove\"){event.preventDefault();let primaryChanged=false;for(let i of event.changedTouches){if(GLFW.primaryTouchId===i.identifier){Browser.setMouseCoords(i.pageX,i.pageY);primaryChanged=true;break}}if(!primaryChanged){return}}else{Browser.calculateMouseEvent(event)}if(event.target!=Module[\"canvas\"]||!GLFW.active.cursorPosFunc)return;if(GLFW.active.cursorPosFunc){getWasmTableEntry(GLFW.active.cursorPosFunc)(GLFW.active.id,Browser.mouseX,Browser.mouseY)}},DOMToGLFWMouseButton:event=>{var eventButton=event[\"button\"];if(eventButton>0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:event=>{if(!GLFW.active)return;if(event.target!=Module[\"canvas\"])return;if(GLFW.active.cursorEnterFunc){getWasmTableEntry(GLFW.active.cursorEnterFunc)(GLFW.active.id,1)}},onMouseleave:event=>{if(!GLFW.active)return;if(event.target!=Module[\"canvas\"])return;if(GLFW.active.cursorEnterFunc){getWasmTableEntry(GLFW.active.cursorEnterFunc)(GLFW.active.id,0)}},onMouseButtonChanged:(event,status)=>{if(!GLFW.active)return;if(event.target!=Module[\"canvas\"])return;const isTouchType=event.type===\"touchstart\"||event.type===\"touchend\"||event.type===\"touchcancel\";let eventButton=0;if(isTouchType){event.preventDefault();let primaryChanged=false;if(GLFW.primaryTouchId===null&&event.type===\"touchstart\"&&event.targetTouches.length>0){const chosenTouch=event.targetTouches[0];GLFW.primaryTouchId=chosenTouch.identifier;Browser.setMouseCoords(chosenTouch.pageX,chosenTouch.pageY);primaryChanged=true}else if(event.type===\"touchend\"||event.type===\"touchcancel\"){for(let i of event.changedTouches){if(GLFW.primaryTouchId===i.identifier){GLFW.primaryTouchId=null;primaryChanged=true;break}}}if(!primaryChanged){return}}else{Browser.calculateMouseEvent(event);eventButton=GLFW.DOMToGLFWMouseButton(event)}if(status==1){GLFW.active.buttons|=1<<eventButton;try{event.target.setCapture()}catch(e){}}else{GLFW.active.buttons&=~(1<<eventButton)}if(GLFW.active.mouseButtonFunc){getWasmTableEntry(GLFW.active.mouseButtonFunc)(GLFW.active.id,eventButton,status,GLFW.getModBits(GLFW.active))}},onMouseButtonDown:event=>{if(!GLFW.active)return;GLFW.onMouseButtonChanged(event,1)},onMouseButtonUp:event=>{if(!GLFW.active)return;GLFW.onMouseButtonChanged(event,0)},onMouseWheel:event=>{var delta=-Browser.getMouseWheelDelta(event);delta=delta==0?0:delta>0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module[\"canvas\"])return;var sx=0;var sy=delta;if(event.type==\"mousewheel\"){sx=event.wheelDeltaX}else{sx=event.deltaX}getWasmTableEntry(GLFW.active.scrollFunc)(GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:(width,height,framebufferWidth,framebufferHeight)=>{if(!GLFW.active)return;var resizeNeeded=false;if(document[\"fullscreen\"]||document[\"fullScreen\"]||document[\"mozFullScreen\"]||document[\"webkitIsFullScreen\"]){if(!GLFW.active.fullscreen){resizeNeeded=width!=screen.width||height!=screen.height;GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}}else if(GLFW.active.fullscreen==true){resizeNeeded=width!=GLFW.active.storedWidth||height!=GLFW.active.storedHeight;GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height)}else if(GLFW.active.width!=width||GLFW.active.height!=height||GLFW.active.framebufferWidth!=framebufferWidth||GLFW.active.framebufferHeight!=framebufferHeight){GLFW.active.width=width;GLFW.active.height=height;GLFW.active.framebufferWidth=framebufferWidth;GLFW.active.framebufferHeight=framebufferHeight;GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:()=>{if(!GLFW.active)return;if(GLFW.active.windowSizeFunc){getWasmTableEntry(GLFW.active.windowSizeFunc)(GLFW.active.id,GLFW.active.width,GLFW.active.height)}},onFramebufferSizeChanged:()=>{if(!GLFW.active)return;if(GLFW.active.framebufferSizeFunc){getWasmTableEntry(GLFW.active.framebufferSizeFunc)(GLFW.active.id,GLFW.active.framebufferWidth,GLFW.active.framebufferHeight)}},onWindowContentScaleChanged:scale=>{GLFW.scale=scale;if(!GLFW.active)return;if(GLFW.active.windowContentScaleFunc){getWasmTableEntry(GLFW.active.windowContentScaleFunc)(GLFW.active.id,GLFW.scale,GLFW.scale)}},getTime:()=>_emscripten_get_now()/1e3,setWindowTitle:(winid,title)=>{var win=GLFW.WindowFromId(winid);if(!win)return;win.title=title;if(GLFW.active.id==win.id){_emscripten_set_window_title(title)}},setJoystickCallback:cbfun=>{var prevcbfun=GLFW.joystickFunc;GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks();return prevcbfun},joys:{},lastGamepadState:[],lastGamepadStateFrame:null,refreshJoysticks:()=>{if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads||[];GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy<GLFW.lastGamepadState.length;++joy){var gamepad=GLFW.lastGamepadState[joy];if(gamepad){if(!GLFW.joys[joy]){out(\"glfw joystick connected:\",joy);GLFW.joys[joy]={id:stringToNewUTF8(gamepad.id),buttonsCount:gamepad.buttons.length,axesCount:gamepad.axes.length,buttons:_malloc(gamepad.buttons.length),axes:_malloc(gamepad.axes.length*4)};if(GLFW.joystickFunc){getWasmTableEntry(GLFW.joystickFunc)(joy,262145)}}var data=GLFW.joys[joy];for(var i=0;i<gamepad.buttons.length;++i){HEAP8[data.buttons+i]=gamepad.buttons[i].pressed}for(var i=0;i<gamepad.axes.length;++i){HEAPF32[data.axes+i*4>>2]=gamepad.axes[i]}}else{if(GLFW.joys[joy]){out(\"glfw joystick disconnected\",joy);if(GLFW.joystickFunc){getWasmTableEntry(GLFW.joystickFunc)(joy,262146)}_free(GLFW.joys[joy].id);_free(GLFW.joys[joy].buttons);_free(GLFW.joys[joy].axes);delete GLFW.joys[joy]}}}}},setKeyCallback:(winid,cbfun)=>{var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.keyFunc;win.keyFunc=cbfun;return prevcbfun},setCharCallback:(winid,cbfun)=>{var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.charFunc;win.charFunc=cbfun;return prevcbfun},setMouseButtonCallback:(winid,cbfun)=>{var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.mouseButtonFunc;win.mouseButtonFunc=cbfun;return prevcbfun},setCursorPosCallback:(winid,cbfun)=>{var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.cursorPosFunc;win.cursorPosFunc=cbfun;return prevcbfun},setScrollCallback:(winid,cbfun)=>{var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.scrollFunc;win.scrollFunc=cbfun;return prevcbfun},setDropCallback:(winid,cbfun)=>{var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.dropFunc;win.dropFunc=cbfun;return prevcbfun},onDrop:event=>{if(!GLFW.active||!GLFW.active.dropFunc)return;if(!event.dataTransfer||!event.dataTransfer.files||event.dataTransfer.files.length==0)return;event.preventDefault();var filenames=_malloc(event.dataTransfer.files.length*4);var filenamesArray=[];var count=event.dataTransfer.files.length;var written=0;var drop_dir=\".glfw_dropped_files\";FS.createPath(\"/\",drop_dir);function save(file){var path=\"/\"+drop_dir+\"/\"+file.name.replace(/\\//g,\"_\");var reader=new FileReader;reader.onloadend=e=>{if(reader.readyState!=2){++written;out(\"failed to read dropped file: \"+file.name+\": \"+reader.error);return}var data=e.target.result;FS.writeFile(path,new Uint8Array(data));if(++written===count){getWasmTableEntry(GLFW.active.dropFunc)(GLFW.active.id,count,filenames);for(var i=0;i<filenamesArray.length;++i){_free(filenamesArray[i])}_free(filenames)}};reader.readAsArrayBuffer(file);var filename=stringToNewUTF8(path);filenamesArray.push(filename);HEAPU32[filenames+i*4>>2]=filename}for(var i=0;i<count;++i){save(event.dataTransfer.files[i])}return false},onDragover:event=>{if(!GLFW.active||!GLFW.active.dropFunc)return;event.preventDefault();return false},setWindowSizeCallback:(winid,cbfun)=>{var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.windowSizeFunc;win.windowSizeFunc=cbfun;return prevcbfun},setWindowCloseCallback:(winid,cbfun)=>{var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.windowCloseFunc;win.windowCloseFunc=cbfun;return prevcbfun},setWindowRefreshCallback:(winid,cbfun)=>{var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.windowRefreshFunc;win.windowRefreshFunc=cbfun;return prevcbfun},onClickRequestPointerLock:e=>{if(!Browser.pointerLock&&Module[\"canvas\"].requestPointerLock){Module[\"canvas\"].requestPointerLock();e.preventDefault()}},setInputMode:(winid,mode,value)=>{var win=GLFW.WindowFromId(winid);if(!win)return;switch(mode){case 208897:{switch(value){case 212993:{win.inputModes[mode]=value;Module[\"canvas\"].removeEventListener(\"click\",GLFW.onClickRequestPointerLock,true);Module[\"canvas\"].exitPointerLock();break}case 212994:{err(\"glfwSetInputMode called with GLFW_CURSOR_HIDDEN value not implemented\");break}case 212995:{win.inputModes[mode]=value;Module[\"canvas\"].addEventListener(\"click\",GLFW.onClickRequestPointerLock,true);Module[\"canvas\"].requestPointerLock();break}default:{err(`glfwSetInputMode called with unknown value parameter value: ${value}`);break}}break}case 208898:{err(\"glfwSetInputMode called with GLFW_STICKY_KEYS mode not implemented\");break}case 208899:{err(\"glfwSetInputMode called with GLFW_STICKY_MOUSE_BUTTONS mode not implemented\");break}case 208900:{err(\"glfwSetInputMode called with GLFW_LOCK_KEY_MODS mode not implemented\");break}case 3342341:{err(\"glfwSetInputMode called with GLFW_RAW_MOUSE_MOTION mode not implemented\");break}default:{err(`glfwSetInputMode called with unknown mode parameter value: ${mode}`);break}}},getKey:(winid,key)=>{var win=GLFW.WindowFromId(winid);if(!win)return 0;return win.keys[key]},getMouseButton:(winid,button)=>{var win=GLFW.WindowFromId(winid);if(!win)return 0;return(win.buttons&1<<button)>0},getCursorPos:(winid,x,y)=>{HEAPF64[x>>3]=Browser.mouseX;HEAPF64[y>>3]=Browser.mouseY},getMousePos:(winid,x,y)=>{HEAP32[x>>2]=Browser.mouseX;HEAP32[y>>2]=Browser.mouseY},setCursorPos:(winid,x,y)=>{},getWindowPos:(winid,x,y)=>{var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}if(x){HEAP32[x>>2]=wx}if(y){HEAP32[y>>2]=wy}},setWindowPos:(winid,x,y)=>{var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:(winid,width,height)=>{var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}if(width){HEAP32[width>>2]=ww}if(height){HEAP32[height>>2]=wh}},setWindowSize:(winid,width,height)=>{var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){Browser.setCanvasSize(width,height)}},defaultWindowHints:()=>{GLFW.hints=Object.assign({},GLFW.defaultHints)},createWindow:(width,height,title,monitor,share)=>{var i,id;for(i=0;i<GLFW.windows.length&&GLFW.windows[i]!==null;i++){}if(i>0)throw\"glfwCreateWindow only supports one window at time currently\";id=i+1;if(width<=0||height<=0)return 0;if(monitor){Browser.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i<GLFW.windows.length&&GLFW.windows[i]==null;i++){}var useWebGL=GLFW.hints[139265]>0;if(i==GLFW.windows.length){if(useWebGL){var contextAttributes={antialias:GLFW.hints[135181]>1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module[\"canvas\"],true,true,contextAttributes)}else{Browser.init()}}if(!Module.ctx&&useWebGL)return 0;const canvas=Module[\"canvas\"];var win=new GLFW_Window(id,canvas.clientWidth,canvas.clientHeight,canvas.width,canvas.height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;GLFW.adjustCanvasDimensions();return win.id},destroyWindow:winid=>{var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc){getWasmTableEntry(win.windowCloseFunc)(win.id)}GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i<GLFW.windows.length;i++)if(GLFW.windows[i]!==null)return;Module.ctx=Browser.destroyContext(Module[\"canvas\"],true,true)},swapBuffers:winid=>{},requestFullscreen(lockPointer,resizeCanvas){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;if(typeof Browser.lockPointer==\"undefined\")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==\"undefined\")Browser.resizeCanvas=false;var canvas=Module[\"canvas\"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document[\"fullscreenElement\"]||document[\"mozFullScreenElement\"]||document[\"msFullscreenElement\"]||document[\"webkitFullscreenElement\"]||document[\"webkitCurrentFullScreenElement\"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas);Browser.updateResizeListeners()}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas);Browser.updateResizeListeners()}}if(Module[\"onFullScreen\"])Module[\"onFullScreen\"](Browser.isFullscreen);if(Module[\"onFullscreen\"])Module[\"onFullscreen\"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener(\"fullscreenchange\",fullscreenChange,false);document.addEventListener(\"mozfullscreenchange\",fullscreenChange,false);document.addEventListener(\"webkitfullscreenchange\",fullscreenChange,false);document.addEventListener(\"MSFullscreenChange\",fullscreenChange,false)}var canvasContainer=document.createElement(\"div\");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer[\"requestFullscreen\"]||canvasContainer[\"mozRequestFullScreen\"]||canvasContainer[\"msRequestFullscreen\"]||(canvasContainer[\"webkitRequestFullscreen\"]?()=>canvasContainer[\"webkitRequestFullscreen\"](Element[\"ALLOW_KEYBOARD_INPUT\"]):null)||(canvasContainer[\"webkitRequestFullScreen\"]?()=>canvasContainer[\"webkitRequestFullScreen\"](Element[\"ALLOW_KEYBOARD_INPUT\"]):null);canvasContainer.requestFullscreen()},updateCanvasDimensions(canvas,wNative,hNative){const scale=GLFW.getHiDPIScale();if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module[\"forcedAspectRatio\"]&&Module[\"forcedAspectRatio\"]>0){if(w/h<Module[\"forcedAspectRatio\"]){w=Math.round(h*Module[\"forcedAspectRatio\"])}else{h=Math.round(w/Module[\"forcedAspectRatio\"])}}if((document[\"fullscreenElement\"]||document[\"mozFullScreenElement\"]||document[\"msFullscreenElement\"]||document[\"webkitFullscreenElement\"]||document[\"webkitCurrentFullScreenElement\"])===canvas.parentNode&&typeof screen!=\"undefined\"){var factor=Math.min(screen.width/w,screen.height/h);w=Math.round(w*factor);h=Math.round(h*factor)}if(Browser.resizeCanvas){wNative=w;hNative=h}const wNativeScaled=Math.floor(wNative*scale);const hNativeScaled=Math.floor(hNative*scale);if(canvas.width!=wNativeScaled)canvas.width=wNativeScaled;if(canvas.height!=hNativeScaled)canvas.height=hNativeScaled;if(typeof canvas.style!=\"undefined\"){if(wNativeScaled!=wNative||hNativeScaled!=hNative){canvas.style.setProperty(\"width\",wNative+\"px\",\"important\");canvas.style.setProperty(\"height\",hNative+\"px\",\"important\")}else{canvas.style.removeProperty(\"width\");canvas.style.removeProperty(\"height\")}}},calculateMouseCoords(pageX,pageY){var rect=Module[\"canvas\"].getBoundingClientRect();var cw=Module[\"canvas\"].clientWidth;var ch=Module[\"canvas\"].clientHeight;var scrollX=typeof window.scrollX!=\"undefined\"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=\"undefined\"?window.scrollY:window.pageYOffset;var adjustedX=pageX-(scrollX+rect.left);var adjustedY=pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);return{x:adjustedX,y:adjustedY}},setWindowAttrib:(winid,attrib,value)=>{var win=GLFW.WindowFromId(winid);if(!win)return;const isHiDPIAware=GLFW.isHiDPIAware();win.attributes[attrib]=value;if(isHiDPIAware!==GLFW.isHiDPIAware())GLFW.adjustCanvasDimensions()},getDevicePixelRatio(){return typeof devicePixelRatio==\"number\"&&devicePixelRatio||1},isHiDPIAware(){if(GLFW.active)return GLFW.active.attributes[139276]>0;else return false},adjustCanvasDimensions(){const canvas=Module[\"canvas\"];Browser.updateCanvasDimensions(canvas,canvas.clientWidth,canvas.clientHeight);Browser.updateResizeListeners()},getHiDPIScale(){return GLFW.isHiDPIAware()?GLFW.scale:1},onDevicePixelRatioChange(){GLFW.onWindowContentScaleChanged(GLFW.getDevicePixelRatio());GLFW.adjustCanvasDimensions()},GLFW2ParamToGLFW3Param:param=>{var table={196609:0,196610:0,196611:0,196612:0,196613:0,196614:0,131073:0,131074:0,131075:0,131076:0,131077:135169,131078:135170,131079:135171,131080:135172,131081:135173,131082:135174,131083:135183,131084:135175,131085:135176,131086:135177,131087:135178,131088:135179,131089:135180,131090:0,131091:135181,131092:139266,131093:139267,131094:139270,131095:139271,131096:139272};return table[param]}};var _glfwCreateWindow=(width,height,title,monitor,share)=>GLFW.createWindow(width,height,title,monitor,share);var _glfwDefaultWindowHints=()=>GLFW.defaultWindowHints();var _glfwGetPrimaryMonitor=()=>1;var _glfwGetTime=()=>GLFW.getTime()-GLFW.initialTime;var _glfwGetVideoModes=(monitor,count)=>{HEAP32[count>>2]=0;return 0};var _glfwInit=()=>{if(GLFW.windows)return 1;GLFW.initialTime=GLFW.getTime();GLFW.defaultWindowHints();GLFW.windows=new Array;GLFW.active=null;GLFW.scale=GLFW.getDevicePixelRatio();window.addEventListener(\"gamepadconnected\",GLFW.onGamepadConnected,true);window.addEventListener(\"gamepaddisconnected\",GLFW.onGamepadDisconnected,true);window.addEventListener(\"keydown\",GLFW.onKeydown,true);window.addEventListener(\"keypress\",GLFW.onKeyPress,true);window.addEventListener(\"keyup\",GLFW.onKeyup,true);window.addEventListener(\"blur\",GLFW.onBlur,true);GLFW.devicePixelRatioMQL=window.matchMedia(\"(resolution: \"+GLFW.getDevicePixelRatio()+\"dppx)\");GLFW.devicePixelRatioMQL.addEventListener(\"change\",GLFW.onDevicePixelRatioChange);Module[\"canvas\"].addEventListener(\"touchmove\",GLFW.onMousemove,true);Module[\"canvas\"].addEventListener(\"touchstart\",GLFW.onMouseButtonDown,true);Module[\"canvas\"].addEventListener(\"touchcancel\",GLFW.onMouseButtonUp,true);Module[\"canvas\"].addEventListener(\"touchend\",GLFW.onMouseButtonUp,true);Module[\"canvas\"].addEventListener(\"mousemove\",GLFW.onMousemove,true);Module[\"canvas\"].addEventListener(\"mousedown\",GLFW.onMouseButtonDown,true);Module[\"canvas\"].addEventListener(\"mouseup\",GLFW.onMouseButtonUp,true);Module[\"canvas\"].addEventListener(\"wheel\",GLFW.onMouseWheel,true);Module[\"canvas\"].addEventListener(\"mousewheel\",GLFW.onMouseWheel,true);Module[\"canvas\"].addEventListener(\"mouseenter\",GLFW.onMouseenter,true);Module[\"canvas\"].addEventListener(\"mouseleave\",GLFW.onMouseleave,true);Module[\"canvas\"].addEventListener(\"drop\",GLFW.onDrop,true);Module[\"canvas\"].addEventListener(\"dragover\",GLFW.onDragover,true);Browser.requestFullscreen=GLFW.requestFullscreen;Browser.calculateMouseCoords=GLFW.calculateMouseCoords;Browser.updateCanvasDimensions=GLFW.updateCanvasDimensions;Browser.resizeListeners.push((width,height)=>{if(GLFW.isHiDPIAware()){var canvas=Module[\"canvas\"];GLFW.onCanvasResize(canvas.clientWidth,canvas.clientHeight,width,height)}else{GLFW.onCanvasResize(width,height,width,height)}});return 1};var _glfwMakeContextCurrent=winid=>{};var _glfwSetCharCallback=(winid,cbfun)=>GLFW.setCharCallback(winid,cbfun);var _glfwSetCursorEnterCallback=(winid,cbfun)=>{var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.cursorEnterFunc;win.cursorEnterFunc=cbfun;return prevcbfun};var _glfwSetCursorPosCallback=(winid,cbfun)=>GLFW.setCursorPosCallback(winid,cbfun);var _glfwSetDropCallback=(winid,cbfun)=>GLFW.setDropCallback(winid,cbfun);var _glfwSetErrorCallback=cbfun=>{var prevcbfun=GLFW.errorFunc;GLFW.errorFunc=cbfun;return prevcbfun};var _glfwSetKeyCallback=(winid,cbfun)=>GLFW.setKeyCallback(winid,cbfun);var _glfwSetMouseButtonCallback=(winid,cbfun)=>GLFW.setMouseButtonCallback(winid,cbfun);var _glfwSetScrollCallback=(winid,cbfun)=>GLFW.setScrollCallback(winid,cbfun);var _glfwSetWindowFocusCallback=(winid,cbfun)=>{var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.windowFocusFunc;win.windowFocusFunc=cbfun;return prevcbfun};var _glfwSetWindowIconifyCallback=(winid,cbfun)=>{var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.windowIconifyFunc;win.windowIconifyFunc=cbfun;return prevcbfun};var _glfwSetWindowShouldClose=(winid,value)=>{var win=GLFW.WindowFromId(winid);if(!win)return;win.shouldClose=value};var _glfwSetWindowSize=(winid,width,height)=>GLFW.setWindowSize(winid,width,height);var _glfwSetWindowSizeCallback=(winid,cbfun)=>GLFW.setWindowSizeCallback(winid,cbfun);var _glfwSwapBuffers=winid=>GLFW.swapBuffers(winid);var _glfwTerminate=()=>{window.removeEventListener(\"gamepadconnected\",GLFW.onGamepadConnected,true);window.removeEventListener(\"gamepaddisconnected\",GLFW.onGamepadDisconnected,true);window.removeEventListener(\"keydown\",GLFW.onKeydown,true);window.removeEventListener(\"keypress\",GLFW.onKeyPress,true);window.removeEventListener(\"keyup\",GLFW.onKeyup,true);window.removeEventListener(\"blur\",GLFW.onBlur,true);Module[\"canvas\"].removeEventListener(\"touchmove\",GLFW.onMousemove,true);Module[\"canvas\"].removeEventListener(\"touchstart\",GLFW.onMouseButtonDown,true);Module[\"canvas\"].removeEventListener(\"touchcancel\",GLFW.onMouseButtonUp,true);Module[\"canvas\"].removeEventListener(\"touchend\",GLFW.onMouseButtonUp,true);Module[\"canvas\"].removeEventListener(\"mousemove\",GLFW.onMousemove,true);Module[\"canvas\"].removeEventListener(\"mousedown\",GLFW.onMouseButtonDown,true);Module[\"canvas\"].removeEventListener(\"mouseup\",GLFW.onMouseButtonUp,true);Module[\"canvas\"].removeEventListener(\"wheel\",GLFW.onMouseWheel,true);Module[\"canvas\"].removeEventListener(\"mousewheel\",GLFW.onMouseWheel,true);Module[\"canvas\"].removeEventListener(\"mouseenter\",GLFW.onMouseenter,true);Module[\"canvas\"].removeEventListener(\"mouseleave\",GLFW.onMouseleave,true);Module[\"canvas\"].removeEventListener(\"drop\",GLFW.onDrop,true);Module[\"canvas\"].removeEventListener(\"dragover\",GLFW.onDragover,true);if(GLFW.devicePixelRatioMQL)GLFW.devicePixelRatioMQL.removeEventListener(\"change\",GLFW.onDevicePixelRatioChange);Module[\"canvas\"].width=Module[\"canvas\"].height=1;GLFW.windows=null;GLFW.active=null};var _glfwWindowHint=(target,hint)=>{GLFW.hints[target]=hint};var DOTNET={setup:function setup(emscriptenBuildOptions){const modulePThread={};const ENVIRONMENT_IS_PTHREAD=false;const dotnet_replacements={fetch:globalThis.fetch,ENVIRONMENT_IS_WORKER:ENVIRONMENT_IS_WORKER,require:require,modulePThread:modulePThread,scriptDirectory:scriptDirectory};ENVIRONMENT_IS_WORKER=dotnet_replacements.ENVIRONMENT_IS_WORKER;Module.__dotnet_runtime.initializeReplacements(dotnet_replacements);noExitRuntime=dotnet_replacements.noExitRuntime;fetch=dotnet_replacements.fetch;require=dotnet_replacements.require;_scriptDir=__dirname=scriptDirectory=dotnet_replacements.scriptDirectory;Module.__dotnet_runtime.passEmscriptenInternals({isPThread:ENVIRONMENT_IS_PTHREAD,quit_:quit_,ExitStatus:ExitStatus,updateMemoryViews:updateMemoryViews,getMemory:()=>wasmMemory,getWasmIndirectFunctionTable:()=>wasmTable},emscriptenBuildOptions);Module.__dotnet_runtime.configureEmscriptenStartup(Module)}};function _mono_interp_flush_jitcall_queue(){return{runtime_idx:12}}function _mono_interp_invoke_wasm_jit_call_trampoline(){return{runtime_idx:11}}function _mono_interp_jit_wasm_entry_trampoline(){return{runtime_idx:9}}function _mono_interp_jit_wasm_jit_call_trampoline(){return{runtime_idx:10}}function _mono_interp_record_interp_entry(){return{runtime_idx:8}}function _mono_interp_tier_prepare_jiterpreter(){return{runtime_idx:7}}function _mono_jiterp_free_method_data_js(){return{runtime_idx:13}}function _mono_wasm_bind_js_import_ST(){return{runtime_idx:22}}function _mono_wasm_browser_entropy(){return{runtime_idx:19}}function _mono_wasm_cancel_promise(){return{runtime_idx:26}}function _mono_wasm_change_case(){return{runtime_idx:27}}function _mono_wasm_compare_string(){return{runtime_idx:28}}function _mono_wasm_console_clear(){return{runtime_idx:20}}function _mono_wasm_ends_with(){return{runtime_idx:30}}function _mono_wasm_get_calendar_info(){return{runtime_idx:32}}function _mono_wasm_get_culture_info(){return{runtime_idx:33}}function _mono_wasm_get_first_day_of_week(){return{runtime_idx:34}}function _mono_wasm_get_first_week_of_year(){return{runtime_idx:35}}function _mono_wasm_get_locale_info(){return{runtime_idx:36}}function _mono_wasm_index_of(){return{runtime_idx:31}}function _mono_wasm_invoke_js_function(){return{runtime_idx:23}}function _mono_wasm_invoke_jsimport_ST(){return{runtime_idx:24}}function _mono_wasm_release_cs_owned_object(){return{runtime_idx:21}}function _mono_wasm_resolve_or_reject_promise(){return{runtime_idx:25}}function _mono_wasm_schedule_timer(){return{runtime_idx:0}}function _mono_wasm_set_entrypoint_breakpoint(){return{runtime_idx:17}}function _mono_wasm_starts_with(){return{runtime_idx:29}}function _mono_wasm_trace_logger(){return{runtime_idx:16}}function _schedule_background_exec(){return{runtime_idx:6}}var arraySum=(array,index)=>{var sum=0;for(var i=0;i<=index;sum+=array[i++]){}return sum};var MONTH_DAYS_LEAP=[31,29,31,30,31,30,31,31,30,31,30,31];var MONTH_DAYS_REGULAR=[31,28,31,30,31,30,31,31,30,31,30,31];var addDays=(date,days)=>{var newDate=new Date(date.getTime());while(days>0){var leap=isLeapYear(newDate.getFullYear());var currentMonth=newDate.getMonth();var daysInCurrentMonth=(leap?MONTH_DAYS_LEAP:MONTH_DAYS_REGULAR)[currentMonth];if(days>daysInCurrentMonth-newDate.getDate()){days-=daysInCurrentMonth-newDate.getDate()+1;newDate.setDate(1);if(currentMonth<11){newDate.setMonth(currentMonth+1)}else{newDate.setMonth(0);newDate.setFullYear(newDate.getFullYear()+1)}}else{newDate.setDate(newDate.getDate()+days);return newDate}}return newDate};var writeArrayToMemory=(array,buffer)=>{HEAP8.set(array,buffer)};var _strftime=(s,maxsize,format,tm)=>{var tm_zone=HEAPU32[tm+40>>2];var date={tm_sec:HEAP32[tm>>2],tm_min:HEAP32[tm+4>>2],tm_hour:HEAP32[tm+8>>2],tm_mday:HEAP32[tm+12>>2],tm_mon:HEAP32[tm+16>>2],tm_year:HEAP32[tm+20>>2],tm_wday:HEAP32[tm+24>>2],tm_yday:HEAP32[tm+28>>2],tm_isdst:HEAP32[tm+32>>2],tm_gmtoff:HEAP32[tm+36>>2],tm_zone:tm_zone?UTF8ToString(tm_zone):\"\"};var pattern=UTF8ToString(format);var EXPANSION_RULES_1={\"%c\":\"%a %b %d %H:%M:%S %Y\",\"%D\":\"%m/%d/%y\",\"%F\":\"%Y-%m-%d\",\"%h\":\"%b\",\"%r\":\"%I:%M:%S %p\",\"%R\":\"%H:%M\",\"%T\":\"%H:%M:%S\",\"%x\":\"%m/%d/%y\",\"%X\":\"%H:%M:%S\",\"%Ec\":\"%c\",\"%EC\":\"%C\",\"%Ex\":\"%m/%d/%y\",\"%EX\":\"%H:%M:%S\",\"%Ey\":\"%y\",\"%EY\":\"%Y\",\"%Od\":\"%d\",\"%Oe\":\"%e\",\"%OH\":\"%H\",\"%OI\":\"%I\",\"%Om\":\"%m\",\"%OM\":\"%M\",\"%OS\":\"%S\",\"%Ou\":\"%u\",\"%OU\":\"%U\",\"%OV\":\"%V\",\"%Ow\":\"%w\",\"%OW\":\"%W\",\"%Oy\":\"%y\"};for(var rule in EXPANSION_RULES_1){pattern=pattern.replace(new RegExp(rule,\"g\"),EXPANSION_RULES_1[rule])}var WEEKDAYS=[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"];var MONTHS=[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"];function leadingSomething(value,digits,character){var str=typeof value==\"number\"?value.toString():value||\"\";while(str.length<digits){str=character[0]+str}return str}function leadingNulls(value,digits){return leadingSomething(value,digits,\"0\")}function compareByDay(date1,date2){function sgn(value){return value<0?-1:value>0?1:0}var compare;if((compare=sgn(date1.getFullYear()-date2.getFullYear()))===0){if((compare=sgn(date1.getMonth()-date2.getMonth()))===0){compare=sgn(date1.getDate()-date2.getDate())}}return compare}function getFirstWeekStartDate(janFourth){switch(janFourth.getDay()){case 0:return new Date(janFourth.getFullYear()-1,11,29);case 1:return janFourth;case 2:return new Date(janFourth.getFullYear(),0,3);case 3:return new Date(janFourth.getFullYear(),0,2);case 4:return new Date(janFourth.getFullYear(),0,1);case 5:return new Date(janFourth.getFullYear()-1,11,31);case 6:return new Date(janFourth.getFullYear()-1,11,30)}}function getWeekBasedYear(date){var thisDate=addDays(new Date(date.tm_year+1900,0,1),date.tm_yday);var janFourthThisYear=new Date(thisDate.getFullYear(),0,4);var janFourthNextYear=new Date(thisDate.getFullYear()+1,0,4);var firstWeekStartThisYear=getFirstWeekStartDate(janFourthThisYear);var firstWeekStartNextYear=getFirstWeekStartDate(janFourthNextYear);if(compareByDay(firstWeekStartThisYear,thisDate)<=0){if(compareByDay(firstWeekStartNextYear,thisDate)<=0){return thisDate.getFullYear()+1}return thisDate.getFullYear()}return thisDate.getFullYear()-1}var EXPANSION_RULES_2={\"%a\":date=>WEEKDAYS[date.tm_wday].substring(0,3),\"%A\":date=>WEEKDAYS[date.tm_wday],\"%b\":date=>MONTHS[date.tm_mon].substring(0,3),\"%B\":date=>MONTHS[date.tm_mon],\"%C\":date=>{var year=date.tm_year+1900;return leadingNulls(year/100|0,2)},\"%d\":date=>leadingNulls(date.tm_mday,2),\"%e\":date=>leadingSomething(date.tm_mday,2,\" \"),\"%g\":date=>getWeekBasedYear(date).toString().substring(2),\"%G\":getWeekBasedYear,\"%H\":date=>leadingNulls(date.tm_hour,2),\"%I\":date=>{var twelveHour=date.tm_hour;if(twelveHour==0)twelveHour=12;else if(twelveHour>12)twelveHour-=12;return leadingNulls(twelveHour,2)},\"%j\":date=>leadingNulls(date.tm_mday+arraySum(isLeapYear(date.tm_year+1900)?MONTH_DAYS_LEAP:MONTH_DAYS_REGULAR,date.tm_mon-1),3),\"%m\":date=>leadingNulls(date.tm_mon+1,2),\"%M\":date=>leadingNulls(date.tm_min,2),\"%n\":()=>\"\\n\",\"%p\":date=>{if(date.tm_hour>=0&&date.tm_hour<12){return\"AM\"}return\"PM\"},\"%S\":date=>leadingNulls(date.tm_sec,2),\"%t\":()=>\"\\t\",\"%u\":date=>date.tm_wday||7,\"%U\":date=>{var days=date.tm_yday+7-date.tm_wday;return leadingNulls(Math.floor(days/7),2)},\"%V\":date=>{var val=Math.floor((date.tm_yday+7-(date.tm_wday+6)%7)/7);if((date.tm_wday+371-date.tm_yday-2)%7<=2){val++}if(!val){val=52;var dec31=(date.tm_wday+7-date.tm_yday-1)%7;if(dec31==4||dec31==5&&isLeapYear(date.tm_year%400-1)){val++}}else if(val==53){var jan1=(date.tm_wday+371-date.tm_yday)%7;if(jan1!=4&&(jan1!=3||!isLeapYear(date.tm_year)))val=1}return leadingNulls(val,2)},\"%w\":date=>date.tm_wday,\"%W\":date=>{var days=date.tm_yday+7-(date.tm_wday+6)%7;return leadingNulls(Math.floor(days/7),2)},\"%y\":date=>(date.tm_year+1900).toString().substring(2),\"%Y\":date=>date.tm_year+1900,\"%z\":date=>{var off=date.tm_gmtoff;var ahead=off>=0;off=Math.abs(off)/60;off=off/60*100+off%60;return(ahead?\"+\":\"-\")+String(\"0000\"+off).slice(-4)},\"%Z\":date=>date.tm_zone,\"%%\":()=>\"%\"};pattern=pattern.replace(/%%/g,\"\\0\\0\");for(var rule in EXPANSION_RULES_2){if(pattern.includes(rule)){pattern=pattern.replace(new RegExp(rule,\"g\"),EXPANSION_RULES_2[rule](date))}}pattern=pattern.replace(/\\0\\0/g,\"%\");var bytes=intArrayFromString(pattern,false);if(bytes.length>maxsize){return 0}writeArrayToMemory(bytes,s);return bytes.length-1};var getCFunc=ident=>{var func=Module[\"_\"+ident];return func};var stringToUTF8OnStack=str=>{var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8(str,ret,size);return ret};var ccall=(ident,returnType,argTypes,args,opts)=>{var toC={\"string\":str=>{var ret=0;if(str!==null&&str!==undefined&&str!==0){ret=stringToUTF8OnStack(str)}return ret},\"array\":arr=>{var ret=stackAlloc(arr.length);writeArrayToMemory(arr,ret);return ret}};function convertReturnValue(ret){if(returnType===\"string\"){return UTF8ToString(ret)}if(returnType===\"boolean\")return Boolean(ret);return ret}var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;i<args.length;i++){var converter=toC[argTypes[i]];if(converter){if(stack===0)stack=stackSave();cArgs[i]=converter(args[i])}else{cArgs[i]=args[i]}}}var ret=func(...cArgs);function onDone(ret){if(stack!==0)stackRestore(stack);return convertReturnValue(ret)}ret=onDone(ret);return ret};var cwrap=(ident,returnType,argTypes,opts)=>{var numericArgs=!argTypes||argTypes.every(type=>type===\"number\"||type===\"boolean\");var numericRet=returnType!==\"string\";if(numericRet&&numericArgs&&!opts){return getCFunc(ident)}return(...args)=>ccall(ident,returnType,argTypes,args,opts)};var uleb128Encode=(n,target)=>{if(n<128){target.push(n)}else{target.push(n%128|128,n>>7)}};var sigToWasmTypes=sig=>{var typeNames={\"i\":\"i32\",\"j\":\"i64\",\"f\":\"f32\",\"d\":\"f64\",\"e\":\"externref\",\"p\":\"i32\"};var type={parameters:[],results:sig[0]==\"v\"?[]:[typeNames[sig[0]]]};for(var i=1;i<sig.length;++i){type.parameters.push(typeNames[sig[i]])}return type};var generateFuncType=(sig,target)=>{var sigRet=sig.slice(0,1);var sigParam=sig.slice(1);var typeCodes={\"i\":127,\"p\":127,\"j\":126,\"f\":125,\"d\":124,\"e\":111};target.push(96);uleb128Encode(sigParam.length,target);for(var i=0;i<sigParam.length;++i){target.push(typeCodes[sigParam[i]])}if(sigRet==\"v\"){target.push(0)}else{target.push(1,typeCodes[sigRet])}};var convertJsFunctionToWasm=(func,sig)=>{if(typeof WebAssembly.Function==\"function\"){return new WebAssembly.Function(sigToWasmTypes(sig),func)}var typeSectionBody=[1];generateFuncType(sig,typeSectionBody);var bytes=[0,97,115,109,1,0,0,0,1];uleb128Encode(typeSectionBody.length,bytes);bytes.push(...typeSectionBody);bytes.push(2,7,1,1,101,1,102,0,0,7,5,1,1,102,0,0);var module=new WebAssembly.Module(new Uint8Array(bytes));var instance=new WebAssembly.Instance(module,{\"e\":{\"f\":func}});var wrappedFunc=instance.exports[\"f\"];return wrappedFunc};var updateTableMap=(offset,count)=>{if(functionsInTableMap){for(var i=offset;i<offset+count;i++){var item=getWasmTableEntry(i);if(item){functionsInTableMap.set(item,i)}}}};var functionsInTableMap;var getFunctionAddress=func=>{if(!functionsInTableMap){functionsInTableMap=new WeakMap;updateTableMap(0,wasmTable.length)}return functionsInTableMap.get(func)||0};var freeTableIndexes=[];var getEmptyTableSlot=()=>{if(freeTableIndexes.length){return freeTableIndexes.pop()}try{wasmTable.grow(1)}catch(err){if(!(err instanceof RangeError)){throw err}throw\"Unable to grow wasm table. Set ALLOW_TABLE_GROWTH.\"}return wasmTable.length-1};var setWasmTableEntry=(idx,func)=>{wasmTable.set(idx,func);wasmTableMirror[idx]=wasmTable.get(idx)};var addFunction=(func,sig)=>{var rtn=getFunctionAddress(func);if(rtn){return rtn}var ret=getEmptyTableSlot();try{setWasmTableEntry(ret,func)}catch(err){if(!(err instanceof TypeError)){throw err}var wrapped=convertJsFunctionToWasm(func,sig);setWasmTableEntry(ret,wrapped)}functionsInTableMap.set(func,ret);return ret};FS.createPreloadedFile=FS_createPreloadedFile;FS.staticInit();Module[\"FS_createPath\"]=FS.createPath;Module[\"FS_createDataFile\"]=FS.createDataFile;Module[\"FS_createPath\"]=FS.createPath;Module[\"FS_createDataFile\"]=FS.createDataFile;Module[\"FS_createPreloadedFile\"]=FS.createPreloadedFile;Module[\"FS_unlink\"]=FS.unlink;Module[\"FS_createLazyFile\"]=FS.createLazyFile;Module[\"FS_createDevice\"]=FS.createDevice;var GLctx;for(var i=0;i<32;++i)tempFixedLengthArray.push(new Array(i));var miniTempWebGLFloatBuffersStorage=new Float32Array(288);for(var i=0;i<288;++i){miniTempWebGLFloatBuffers[i]=miniTempWebGLFloatBuffersStorage.subarray(0,i+1)}var miniTempWebGLIntBuffersStorage=new Int32Array(288);for(var i=0;i<288;++i){miniTempWebGLIntBuffers[i]=miniTempWebGLIntBuffersStorage.subarray(0,i+1)}Module[\"requestFullscreen\"]=Browser.requestFullscreen;Module[\"requestAnimationFrame\"]=Browser.requestAnimationFrame;Module[\"setCanvasSize\"]=Browser.setCanvasSize;Module[\"pauseMainLoop\"]=Browser.mainLoop.pause;Module[\"resumeMainLoop\"]=Browser.mainLoop.resume;Module[\"getUserMedia\"]=Browser.getUserMedia;Module[\"createContext\"]=Browser.createContext;var preloadedImages={};var preloadedAudios={};DOTNET.setup({wasmEnableSIMD:true,wasmEnableEH:true,enableAotProfiler:false,enableBrowserProfiler:false,enableLogProfiler:false,runAOTCompilation:true,wasmEnableThreads:false,gitHash:\"2f124007573374800632d39177cde00ca9fe1ef0\"});var wasmImports={GetWindowInnerHeight:GetWindowInnerHeight,GetWindowInnerWidth:GetWindowInnerWidth,__assert_fail:___assert_fail,__syscall_faccessat:___syscall_faccessat,__syscall_fadvise64:___syscall_fadvise64,__syscall_fcntl64:___syscall_fcntl64,__syscall_fstat64:___syscall_fstat64,__syscall_fstatfs64:___syscall_fstatfs64,__syscall_ftruncate64:___syscall_ftruncate64,__syscall_getcwd:___syscall_getcwd,__syscall_getdents64:___syscall_getdents64,__syscall_ioctl:___syscall_ioctl,__syscall_lstat64:___syscall_lstat64,__syscall_newfstatat:___syscall_newfstatat,__syscall_openat:___syscall_openat,__syscall_readlinkat:___syscall_readlinkat,__syscall_stat64:___syscall_stat64,__syscall_unlinkat:___syscall_unlinkat,_emscripten_get_now_is_monotonic:__emscripten_get_now_is_monotonic,_localtime_js:__localtime_js,_mmap_js:__mmap_js,_munmap_js:__munmap_js,_tzset_js:__tzset_js,abort:_abort,emscripten_date_now:_emscripten_date_now,emscripten_force_exit:_emscripten_force_exit,emscripten_get_element_css_size:_emscripten_get_element_css_size,emscripten_get_gamepad_status:_emscripten_get_gamepad_status,emscripten_get_heap_max:_emscripten_get_heap_max,emscripten_get_now:_emscripten_get_now,emscripten_get_now_res:_emscripten_get_now_res,emscripten_get_num_gamepads:_emscripten_get_num_gamepads,emscripten_glActiveTexture:_emscripten_glActiveTexture,emscripten_glAttachShader:_emscripten_glAttachShader,emscripten_glBeginQueryEXT:_emscripten_glBeginQueryEXT,emscripten_glBindAttribLocation:_emscripten_glBindAttribLocation,emscripten_glBindBuffer:_emscripten_glBindBuffer,emscripten_glBindFramebuffer:_emscripten_glBindFramebuffer,emscripten_glBindRenderbuffer:_emscripten_glBindRenderbuffer,emscripten_glBindTexture:_emscripten_glBindTexture,emscripten_glBindVertexArrayOES:_emscripten_glBindVertexArrayOES,emscripten_glBlendColor:_emscripten_glBlendColor,emscripten_glBlendEquation:_emscripten_glBlendEquation,emscripten_glBlendEquationSeparate:_emscripten_glBlendEquationSeparate,emscripten_glBlendFunc:_emscripten_glBlendFunc,emscripten_glBlendFuncSeparate:_emscripten_glBlendFuncSeparate,emscripten_glBufferData:_emscripten_glBufferData,emscripten_glBufferSubData:_emscripten_glBufferSubData,emscripten_glCheckFramebufferStatus:_emscripten_glCheckFramebufferStatus,emscripten_glClear:_emscripten_glClear,emscripten_glClearColor:_emscripten_glClearColor,emscripten_glClearDepthf:_emscripten_glClearDepthf,emscripten_glClearStencil:_emscripten_glClearStencil,emscripten_glColorMask:_emscripten_glColorMask,emscripten_glCompileShader:_emscripten_glCompileShader,emscripten_glCompressedTexImage2D:_emscripten_glCompressedTexImage2D,emscripten_glCompressedTexSubImage2D:_emscripten_glCompressedTexSubImage2D,emscripten_glCopyTexImage2D:_emscripten_glCopyTexImage2D,emscripten_glCopyTexSubImage2D:_emscripten_glCopyTexSubImage2D,emscripten_glCreateProgram:_emscripten_glCreateProgram,emscripten_glCreateShader:_emscripten_glCreateShader,emscripten_glCullFace:_emscripten_glCullFace,emscripten_glDeleteBuffers:_emscripten_glDeleteBuffers,emscripten_glDeleteFramebuffers:_emscripten_glDeleteFramebuffers,emscripten_glDeleteProgram:_emscripten_glDeleteProgram,emscripten_glDeleteQueriesEXT:_emscripten_glDeleteQueriesEXT,emscripten_glDeleteRenderbuffers:_emscripten_glDeleteRenderbuffers,emscripten_glDeleteShader:_emscripten_glDeleteShader,emscripten_glDeleteTextures:_emscripten_glDeleteTextures,emscripten_glDeleteVertexArraysOES:_emscripten_glDeleteVertexArraysOES,emscripten_glDepthFunc:_emscripten_glDepthFunc,emscripten_glDepthMask:_emscripten_glDepthMask,emscripten_glDepthRangef:_emscripten_glDepthRangef,emscripten_glDetachShader:_emscripten_glDetachShader,emscripten_glDisable:_emscripten_glDisable,emscripten_glDisableVertexAttribArray:_emscripten_glDisableVertexAttribArray,emscripten_glDrawArrays:_emscripten_glDrawArrays,emscripten_glDrawArraysInstancedANGLE:_emscripten_glDrawArraysInstancedANGLE,emscripten_glDrawBuffersWEBGL:_emscripten_glDrawBuffersWEBGL,emscripten_glDrawElements:_emscripten_glDrawElements,emscripten_glDrawElementsInstancedANGLE:_emscripten_glDrawElementsInstancedANGLE,emscripten_glEnable:_emscripten_glEnable,emscripten_glEnableVertexAttribArray:_emscripten_glEnableVertexAttribArray,emscripten_glEndQueryEXT:_emscripten_glEndQueryEXT,emscripten_glFinish:_emscripten_glFinish,emscripten_glFlush:_emscripten_glFlush,emscripten_glFramebufferRenderbuffer:_emscripten_glFramebufferRenderbuffer,emscripten_glFramebufferTexture2D:_emscripten_glFramebufferTexture2D,emscripten_glFrontFace:_emscripten_glFrontFace,emscripten_glGenBuffers:_emscripten_glGenBuffers,emscripten_glGenFramebuffers:_emscripten_glGenFramebuffers,emscripten_glGenQueriesEXT:_emscripten_glGenQueriesEXT,emscripten_glGenRenderbuffers:_emscripten_glGenRenderbuffers,emscripten_glGenTextures:_emscripten_glGenTextures,emscripten_glGenVertexArraysOES:_emscripten_glGenVertexArraysOES,emscripten_glGenerateMipmap:_emscripten_glGenerateMipmap,emscripten_glGetActiveAttrib:_emscripten_glGetActiveAttrib,emscripten_glGetActiveUniform:_emscripten_glGetActiveUniform,emscripten_glGetAttachedShaders:_emscripten_glGetAttachedShaders,emscripten_glGetAttribLocation:_emscripten_glGetAttribLocation,emscripten_glGetBooleanv:_emscripten_glGetBooleanv,emscripten_glGetBufferParameteriv:_emscripten_glGetBufferParameteriv,emscripten_glGetError:_emscripten_glGetError,emscripten_glGetFloatv:_emscripten_glGetFloatv,emscripten_glGetFramebufferAttachmentParameteriv:_emscripten_glGetFramebufferAttachmentParameteriv,emscripten_glGetIntegerv:_emscripten_glGetIntegerv,emscripten_glGetProgramInfoLog:_emscripten_glGetProgramInfoLog,emscripten_glGetProgramiv:_emscripten_glGetProgramiv,emscripten_glGetQueryObjecti64vEXT:_emscripten_glGetQueryObjecti64vEXT,emscripten_glGetQueryObjectivEXT:_emscripten_glGetQueryObjectivEXT,emscripten_glGetQueryObjectui64vEXT:_emscripten_glGetQueryObjectui64vEXT,emscripten_glGetQueryObjectuivEXT:_emscripten_glGetQueryObjectuivEXT,emscripten_glGetQueryivEXT:_emscripten_glGetQueryivEXT,emscripten_glGetRenderbufferParameteriv:_emscripten_glGetRenderbufferParameteriv,emscripten_glGetShaderInfoLog:_emscripten_glGetShaderInfoLog,emscripten_glGetShaderPrecisionFormat:_emscripten_glGetShaderPrecisionFormat,emscripten_glGetShaderSource:_emscripten_glGetShaderSource,emscripten_glGetShaderiv:_emscripten_glGetShaderiv,emscripten_glGetString:_emscripten_glGetString,emscripten_glGetTexParameterfv:_emscripten_glGetTexParameterfv,emscripten_glGetTexParameteriv:_emscripten_glGetTexParameteriv,emscripten_glGetUniformLocation:_emscripten_glGetUniformLocation,emscripten_glGetUniformfv:_emscripten_glGetUniformfv,emscripten_glGetUniformiv:_emscripten_glGetUniformiv,emscripten_glGetVertexAttribPointerv:_emscripten_glGetVertexAttribPointerv,emscripten_glGetVertexAttribfv:_emscripten_glGetVertexAttribfv,emscripten_glGetVertexAttribiv:_emscripten_glGetVertexAttribiv,emscripten_glHint:_emscripten_glHint,emscripten_glIsBuffer:_emscripten_glIsBuffer,emscripten_glIsEnabled:_emscripten_glIsEnabled,emscripten_glIsFramebuffer:_emscripten_glIsFramebuffer,emscripten_glIsProgram:_emscripten_glIsProgram,emscripten_glIsQueryEXT:_emscripten_glIsQueryEXT,emscripten_glIsRenderbuffer:_emscripten_glIsRenderbuffer,emscripten_glIsShader:_emscripten_glIsShader,emscripten_glIsTexture:_emscripten_glIsTexture,emscripten_glIsVertexArrayOES:_emscripten_glIsVertexArrayOES,emscripten_glLineWidth:_emscripten_glLineWidth,emscripten_glLinkProgram:_emscripten_glLinkProgram,emscripten_glPixelStorei:_emscripten_glPixelStorei,emscripten_glPolygonOffset:_emscripten_glPolygonOffset,emscripten_glQueryCounterEXT:_emscripten_glQueryCounterEXT,emscripten_glReadPixels:_emscripten_glReadPixels,emscripten_glReleaseShaderCompiler:_emscripten_glReleaseShaderCompiler,emscripten_glRenderbufferStorage:_emscripten_glRenderbufferStorage,emscripten_glSampleCoverage:_emscripten_glSampleCoverage,emscripten_glScissor:_emscripten_glScissor,emscripten_glShaderBinary:_emscripten_glShaderBinary,emscripten_glShaderSource:_emscripten_glShaderSource,emscripten_glStencilFunc:_emscripten_glStencilFunc,emscripten_glStencilFuncSeparate:_emscripten_glStencilFuncSeparate,emscripten_glStencilMask:_emscripten_glStencilMask,emscripten_glStencilMaskSeparate:_emscripten_glStencilMaskSeparate,emscripten_glStencilOp:_emscripten_glStencilOp,emscripten_glStencilOpSeparate:_emscripten_glStencilOpSeparate,emscripten_glTexImage2D:_emscripten_glTexImage2D,emscripten_glTexParameterf:_emscripten_glTexParameterf,emscripten_glTexParameterfv:_emscripten_glTexParameterfv,emscripten_glTexParameteri:_emscripten_glTexParameteri,emscripten_glTexParameteriv:_emscripten_glTexParameteriv,emscripten_glTexSubImage2D:_emscripten_glTexSubImage2D,emscripten_glUniform1f:_emscripten_glUniform1f,emscripten_glUniform1fv:_emscripten_glUniform1fv,emscripten_glUniform1i:_emscripten_glUniform1i,emscripten_glUniform1iv:_emscripten_glUniform1iv,emscripten_glUniform2f:_emscripten_glUniform2f,emscripten_glUniform2fv:_emscripten_glUniform2fv,emscripten_glUniform2i:_emscripten_glUniform2i,emscripten_glUniform2iv:_emscripten_glUniform2iv,emscripten_glUniform3f:_emscripten_glUniform3f,emscripten_glUniform3fv:_emscripten_glUniform3fv,emscripten_glUniform3i:_emscripten_glUniform3i,emscripten_glUniform3iv:_emscripten_glUniform3iv,emscripten_glUniform4f:_emscripten_glUniform4f,emscripten_glUniform4fv:_emscripten_glUniform4fv,emscripten_glUniform4i:_emscripten_glUniform4i,emscripten_glUniform4iv:_emscripten_glUniform4iv,emscripten_glUniformMatrix2fv:_emscripten_glUniformMatrix2fv,emscripten_glUniformMatrix3fv:_emscripten_glUniformMatrix3fv,emscripten_glUniformMatrix4fv:_emscripten_glUniformMatrix4fv,emscripten_glUseProgram:_emscripten_glUseProgram,emscripten_glValidateProgram:_emscripten_glValidateProgram,emscripten_glVertexAttrib1f:_emscripten_glVertexAttrib1f,emscripten_glVertexAttrib1fv:_emscripten_glVertexAttrib1fv,emscripten_glVertexAttrib2f:_emscripten_glVertexAttrib2f,emscripten_glVertexAttrib2fv:_emscripten_glVertexAttrib2fv,emscripten_glVertexAttrib3f:_emscripten_glVertexAttrib3f,emscripten_glVertexAttrib3fv:_emscripten_glVertexAttrib3fv,emscripten_glVertexAttrib4f:_emscripten_glVertexAttrib4f,emscripten_glVertexAttrib4fv:_emscripten_glVertexAttrib4fv,emscripten_glVertexAttribDivisorANGLE:_emscripten_glVertexAttribDivisorANGLE,emscripten_glVertexAttribPointer:_emscripten_glVertexAttribPointer,emscripten_glViewport:_emscripten_glViewport,emscripten_resize_heap:_emscripten_resize_heap,emscripten_sample_gamepad_data:_emscripten_sample_gamepad_data,emscripten_set_canvas_element_size:_emscripten_set_canvas_element_size,emscripten_set_click_callback_on_thread:_emscripten_set_click_callback_on_thread,emscripten_set_fullscreenchange_callback_on_thread:_emscripten_set_fullscreenchange_callback_on_thread,emscripten_set_gamepadconnected_callback_on_thread:_emscripten_set_gamepadconnected_callback_on_thread,emscripten_set_gamepaddisconnected_callback_on_thread:_emscripten_set_gamepaddisconnected_callback_on_thread,emscripten_set_resize_callback_on_thread:_emscripten_set_resize_callback_on_thread,emscripten_set_touchcancel_callback_on_thread:_emscripten_set_touchcancel_callback_on_thread,emscripten_set_touchend_callback_on_thread:_emscripten_set_touchend_callback_on_thread,emscripten_set_touchmove_callback_on_thread:_emscripten_set_touchmove_callback_on_thread,emscripten_set_touchstart_callback_on_thread:_emscripten_set_touchstart_callback_on_thread,emscripten_set_window_title:_emscripten_set_window_title,environ_get:_environ_get,environ_sizes_get:_environ_sizes_get,exit:_exit,fd_close:_fd_close,fd_pread:_fd_pread,fd_read:_fd_read,fd_seek:_fd_seek,fd_write:_fd_write,glActiveTexture:_glActiveTexture,glAttachShader:_glAttachShader,glBindAttribLocation:_glBindAttribLocation,glBindBuffer:_glBindBuffer,glBindTexture:_glBindTexture,glBlendFunc:_glBlendFunc,glBufferData:_glBufferData,glBufferSubData:_glBufferSubData,glClear:_glClear,glClearColor:_glClearColor,glClearDepthf:_glClearDepthf,glCompileShader:_glCompileShader,glCompressedTexImage2D:_glCompressedTexImage2D,glCreateProgram:_glCreateProgram,glCreateShader:_glCreateShader,glCullFace:_glCullFace,glDeleteBuffers:_glDeleteBuffers,glDeleteProgram:_glDeleteProgram,glDeleteShader:_glDeleteShader,glDeleteTextures:_glDeleteTextures,glDepthFunc:_glDepthFunc,glDetachShader:_glDetachShader,glDisable:_glDisable,glDisableVertexAttribArray:_glDisableVertexAttribArray,glDrawArrays:_glDrawArrays,glDrawElements:_glDrawElements,glEnable:_glEnable,glEnableVertexAttribArray:_glEnableVertexAttribArray,glFrontFace:_glFrontFace,glGenBuffers:_glGenBuffers,glGenTextures:_glGenTextures,glGetAttribLocation:_glGetAttribLocation,glGetFloatv:_glGetFloatv,glGetProgramInfoLog:_glGetProgramInfoLog,glGetProgramiv:_glGetProgramiv,glGetShaderInfoLog:_glGetShaderInfoLog,glGetShaderiv:_glGetShaderiv,glGetString:_glGetString,glGetUniformLocation:_glGetUniformLocation,glLinkProgram:_glLinkProgram,glPixelStorei:_glPixelStorei,glReadPixels:_glReadPixels,glShaderSource:_glShaderSource,glTexImage2D:_glTexImage2D,glTexParameterf:_glTexParameterf,glTexParameteri:_glTexParameteri,glUniform1fv:_glUniform1fv,glUniform1i:_glUniform1i,glUniform1iv:_glUniform1iv,glUniform2fv:_glUniform2fv,glUniform2iv:_glUniform2iv,glUniform3fv:_glUniform3fv,glUniform3iv:_glUniform3iv,glUniform4f:_glUniform4f,glUniform4fv:_glUniform4fv,glUniform4iv:_glUniform4iv,glUniformMatrix4fv:_glUniformMatrix4fv,glUseProgram:_glUseProgram,glVertexAttrib1fv:_glVertexAttrib1fv,glVertexAttrib2fv:_glVertexAttrib2fv,glVertexAttrib3fv:_glVertexAttrib3fv,glVertexAttrib4fv:_glVertexAttrib4fv,glVertexAttribPointer:_glVertexAttribPointer,glViewport:_glViewport,glfwCreateWindow:_glfwCreateWindow,glfwDefaultWindowHints:_glfwDefaultWindowHints,glfwGetPrimaryMonitor:_glfwGetPrimaryMonitor,glfwGetTime:_glfwGetTime,glfwGetVideoModes:_glfwGetVideoModes,glfwInit:_glfwInit,glfwMakeContextCurrent:_glfwMakeContextCurrent,glfwSetCharCallback:_glfwSetCharCallback,glfwSetCursorEnterCallback:_glfwSetCursorEnterCallback,glfwSetCursorPosCallback:_glfwSetCursorPosCallback,glfwSetDropCallback:_glfwSetDropCallback,glfwSetErrorCallback:_glfwSetErrorCallback,glfwSetKeyCallback:_glfwSetKeyCallback,glfwSetMouseButtonCallback:_glfwSetMouseButtonCallback,glfwSetScrollCallback:_glfwSetScrollCallback,glfwSetWindowFocusCallback:_glfwSetWindowFocusCallback,glfwSetWindowIconifyCallback:_glfwSetWindowIconifyCallback,glfwSetWindowShouldClose:_glfwSetWindowShouldClose,glfwSetWindowSize:_glfwSetWindowSize,glfwSetWindowSizeCallback:_glfwSetWindowSizeCallback,glfwSwapBuffers:_glfwSwapBuffers,glfwTerminate:_glfwTerminate,glfwWindowHint:_glfwWindowHint,mono_interp_flush_jitcall_queue:_mono_interp_flush_jitcall_queue,mono_interp_invoke_wasm_jit_call_trampoline:_mono_interp_invoke_wasm_jit_call_trampoline,mono_interp_jit_wasm_entry_trampoline:_mono_interp_jit_wasm_entry_trampoline,mono_interp_jit_wasm_jit_call_trampoline:_mono_interp_jit_wasm_jit_call_trampoline,mono_interp_record_interp_entry:_mono_interp_record_interp_entry,mono_interp_tier_prepare_jiterpreter:_mono_interp_tier_prepare_jiterpreter,mono_jiterp_free_method_data_js:_mono_jiterp_free_method_data_js,mono_wasm_bind_js_import_ST:_mono_wasm_bind_js_import_ST,mono_wasm_browser_entropy:_mono_wasm_browser_entropy,mono_wasm_cancel_promise:_mono_wasm_cancel_promise,mono_wasm_change_case:_mono_wasm_change_case,mono_wasm_compare_string:_mono_wasm_compare_string,mono_wasm_console_clear:_mono_wasm_console_clear,mono_wasm_ends_with:_mono_wasm_ends_with,mono_wasm_get_calendar_info:_mono_wasm_get_calendar_info,mono_wasm_get_culture_info:_mono_wasm_get_culture_info,mono_wasm_get_first_day_of_week:_mono_wasm_get_first_day_of_week,mono_wasm_get_first_week_of_year:_mono_wasm_get_first_week_of_year,mono_wasm_get_locale_info:_mono_wasm_get_locale_info,mono_wasm_index_of:_mono_wasm_index_of,mono_wasm_invoke_js_function:_mono_wasm_invoke_js_function,mono_wasm_invoke_jsimport_ST:_mono_wasm_invoke_jsimport_ST,mono_wasm_release_cs_owned_object:_mono_wasm_release_cs_owned_object,mono_wasm_resolve_or_reject_promise:_mono_wasm_resolve_or_reject_promise,mono_wasm_schedule_timer:_mono_wasm_schedule_timer,mono_wasm_set_entrypoint_breakpoint:_mono_wasm_set_entrypoint_breakpoint,mono_wasm_starts_with:_mono_wasm_starts_with,mono_wasm_trace_logger:_mono_wasm_trace_logger,schedule_background_exec:_schedule_background_exec,strftime:_strftime};var wasmExports=createWasm();var ___wasm_call_ctors=()=>(___wasm_call_ctors=wasmExports[\"__wasm_call_ctors\"])();var _memset=Module[\"_memset\"]=(a0,a1,a2)=>(_memset=Module[\"_memset\"]=wasmExports[\"memset\"])(a0,a1,a2);var _fflush=a0=>(_fflush=wasmExports[\"fflush\"])(a0);var _free=Module[\"_free\"]=a0=>(_free=Module[\"_free\"]=wasmExports[\"free\"])(a0);var _malloc=Module[\"_malloc\"]=a0=>(_malloc=Module[\"_malloc\"]=wasmExports[\"malloc\"])(a0);var _cosf=Module[\"_cosf\"]=a0=>(_cosf=Module[\"_cosf\"]=wasmExports[\"cosf\"])(a0);var _sinf=Module[\"_sinf\"]=a0=>(_sinf=Module[\"_sinf\"]=wasmExports[\"sinf\"])(a0);var _log=Module[\"_log\"]=a0=>(_log=Module[\"_log\"]=wasmExports[\"log\"])(a0);var _atan2f=Module[\"_atan2f\"]=(a0,a1)=>(_atan2f=Module[\"_atan2f\"]=wasmExports[\"atan2f\"])(a0,a1);var _tan=Module[\"_tan\"]=a0=>(_tan=Module[\"_tan\"]=wasmExports[\"tan\"])(a0);var _acosf=Module[\"_acosf\"]=a0=>(_acosf=Module[\"_acosf\"]=wasmExports[\"acosf\"])(a0);var _asinf=Module[\"_asinf\"]=a0=>(_asinf=Module[\"_asinf\"]=wasmExports[\"asinf\"])(a0);var _pow=Module[\"_pow\"]=(a0,a1)=>(_pow=Module[\"_pow\"]=wasmExports[\"pow\"])(a0,a1);var _logf=Module[\"_logf\"]=a0=>(_logf=Module[\"_logf\"]=wasmExports[\"logf\"])(a0);var _fmodf=Module[\"_fmodf\"]=(a0,a1)=>(_fmodf=Module[\"_fmodf\"]=wasmExports[\"fmodf\"])(a0,a1);var _acos=Module[\"_acos\"]=a0=>(_acos=Module[\"_acos\"]=wasmExports[\"acos\"])(a0);var _cos=Module[\"_cos\"]=a0=>(_cos=Module[\"_cos\"]=wasmExports[\"cos\"])(a0);var _powf=Module[\"_powf\"]=(a0,a1)=>(_powf=Module[\"_powf\"]=wasmExports[\"powf\"])(a0,a1);var _sin=Module[\"_sin\"]=a0=>(_sin=Module[\"_sin\"]=wasmExports[\"sin\"])(a0);var _mono_wasm_register_root=Module[\"_mono_wasm_register_root\"]=(a0,a1,a2)=>(_mono_wasm_register_root=Module[\"_mono_wasm_register_root\"]=wasmExports[\"mono_wasm_register_root\"])(a0,a1,a2);var _mono_wasm_deregister_root=Module[\"_mono_wasm_deregister_root\"]=a0=>(_mono_wasm_deregister_root=Module[\"_mono_wasm_deregister_root\"]=wasmExports[\"mono_wasm_deregister_root\"])(a0);var _mono_wasm_add_assembly=Module[\"_mono_wasm_add_assembly\"]=(a0,a1,a2)=>(_mono_wasm_add_assembly=Module[\"_mono_wasm_add_assembly\"]=wasmExports[\"mono_wasm_add_assembly\"])(a0,a1,a2);var _mono_wasm_add_satellite_assembly=Module[\"_mono_wasm_add_satellite_assembly\"]=(a0,a1,a2,a3)=>(_mono_wasm_add_satellite_assembly=Module[\"_mono_wasm_add_satellite_assembly\"]=wasmExports[\"mono_wasm_add_satellite_assembly\"])(a0,a1,a2,a3);var _mono_wasm_setenv=Module[\"_mono_wasm_setenv\"]=(a0,a1)=>(_mono_wasm_setenv=Module[\"_mono_wasm_setenv\"]=wasmExports[\"mono_wasm_setenv\"])(a0,a1);var _mono_wasm_getenv=Module[\"_mono_wasm_getenv\"]=a0=>(_mono_wasm_getenv=Module[\"_mono_wasm_getenv\"]=wasmExports[\"mono_wasm_getenv\"])(a0);var _mono_wasm_load_runtime=Module[\"_mono_wasm_load_runtime\"]=a0=>(_mono_wasm_load_runtime=Module[\"_mono_wasm_load_runtime\"]=wasmExports[\"mono_wasm_load_runtime\"])(a0);var _mono_wasm_invoke_jsexport=Module[\"_mono_wasm_invoke_jsexport\"]=(a0,a1)=>(_mono_wasm_invoke_jsexport=Module[\"_mono_wasm_invoke_jsexport\"]=wasmExports[\"mono_wasm_invoke_jsexport\"])(a0,a1);var _mono_wasm_string_from_utf16_ref=Module[\"_mono_wasm_string_from_utf16_ref\"]=(a0,a1,a2)=>(_mono_wasm_string_from_utf16_ref=Module[\"_mono_wasm_string_from_utf16_ref\"]=wasmExports[\"mono_wasm_string_from_utf16_ref\"])(a0,a1,a2);var _mono_wasm_exec_regression=Module[\"_mono_wasm_exec_regression\"]=(a0,a1)=>(_mono_wasm_exec_regression=Module[\"_mono_wasm_exec_regression\"]=wasmExports[\"mono_wasm_exec_regression\"])(a0,a1);var _mono_wasm_exit=Module[\"_mono_wasm_exit\"]=a0=>(_mono_wasm_exit=Module[\"_mono_wasm_exit\"]=wasmExports[\"mono_wasm_exit\"])(a0);var _mono_wasm_set_main_args=Module[\"_mono_wasm_set_main_args\"]=(a0,a1)=>(_mono_wasm_set_main_args=Module[\"_mono_wasm_set_main_args\"]=wasmExports[\"mono_wasm_set_main_args\"])(a0,a1);var _mono_wasm_strdup=Module[\"_mono_wasm_strdup\"]=a0=>(_mono_wasm_strdup=Module[\"_mono_wasm_strdup\"]=wasmExports[\"mono_wasm_strdup\"])(a0);var _mono_wasm_parse_runtime_options=Module[\"_mono_wasm_parse_runtime_options\"]=(a0,a1)=>(_mono_wasm_parse_runtime_options=Module[\"_mono_wasm_parse_runtime_options\"]=wasmExports[\"mono_wasm_parse_runtime_options\"])(a0,a1);var _mono_wasm_intern_string_ref=Module[\"_mono_wasm_intern_string_ref\"]=a0=>(_mono_wasm_intern_string_ref=Module[\"_mono_wasm_intern_string_ref\"]=wasmExports[\"mono_wasm_intern_string_ref\"])(a0);var _mono_wasm_string_get_data_ref=Module[\"_mono_wasm_string_get_data_ref\"]=(a0,a1,a2,a3)=>(_mono_wasm_string_get_data_ref=Module[\"_mono_wasm_string_get_data_ref\"]=wasmExports[\"mono_wasm_string_get_data_ref\"])(a0,a1,a2,a3);var _mono_wasm_write_managed_pointer_unsafe=Module[\"_mono_wasm_write_managed_pointer_unsafe\"]=(a0,a1)=>(_mono_wasm_write_managed_pointer_unsafe=Module[\"_mono_wasm_write_managed_pointer_unsafe\"]=wasmExports[\"mono_wasm_write_managed_pointer_unsafe\"])(a0,a1);var _mono_wasm_copy_managed_pointer=Module[\"_mono_wasm_copy_managed_pointer\"]=(a0,a1)=>(_mono_wasm_copy_managed_pointer=Module[\"_mono_wasm_copy_managed_pointer\"]=wasmExports[\"mono_wasm_copy_managed_pointer\"])(a0,a1);var _mono_wasm_init_finalizer_thread=Module[\"_mono_wasm_init_finalizer_thread\"]=()=>(_mono_wasm_init_finalizer_thread=Module[\"_mono_wasm_init_finalizer_thread\"]=wasmExports[\"mono_wasm_init_finalizer_thread\"])();var _mono_wasm_i52_to_f64=Module[\"_mono_wasm_i52_to_f64\"]=(a0,a1)=>(_mono_wasm_i52_to_f64=Module[\"_mono_wasm_i52_to_f64\"]=wasmExports[\"mono_wasm_i52_to_f64\"])(a0,a1);var _mono_wasm_u52_to_f64=Module[\"_mono_wasm_u52_to_f64\"]=(a0,a1)=>(_mono_wasm_u52_to_f64=Module[\"_mono_wasm_u52_to_f64\"]=wasmExports[\"mono_wasm_u52_to_f64\"])(a0,a1);var _mono_wasm_f64_to_u52=Module[\"_mono_wasm_f64_to_u52\"]=(a0,a1)=>(_mono_wasm_f64_to_u52=Module[\"_mono_wasm_f64_to_u52\"]=wasmExports[\"mono_wasm_f64_to_u52\"])(a0,a1);var _mono_wasm_f64_to_i52=Module[\"_mono_wasm_f64_to_i52\"]=(a0,a1)=>(_mono_wasm_f64_to_i52=Module[\"_mono_wasm_f64_to_i52\"]=wasmExports[\"mono_wasm_f64_to_i52\"])(a0,a1);var _mono_wasm_method_get_full_name=Module[\"_mono_wasm_method_get_full_name\"]=a0=>(_mono_wasm_method_get_full_name=Module[\"_mono_wasm_method_get_full_name\"]=wasmExports[\"mono_wasm_method_get_full_name\"])(a0);var _mono_wasm_method_get_name=Module[\"_mono_wasm_method_get_name\"]=a0=>(_mono_wasm_method_get_name=Module[\"_mono_wasm_method_get_name\"]=wasmExports[\"mono_wasm_method_get_name\"])(a0);var _mono_wasm_get_f32_unaligned=Module[\"_mono_wasm_get_f32_unaligned\"]=a0=>(_mono_wasm_get_f32_unaligned=Module[\"_mono_wasm_get_f32_unaligned\"]=wasmExports[\"mono_wasm_get_f32_unaligned\"])(a0);var _mono_wasm_get_f64_unaligned=Module[\"_mono_wasm_get_f64_unaligned\"]=a0=>(_mono_wasm_get_f64_unaligned=Module[\"_mono_wasm_get_f64_unaligned\"]=wasmExports[\"mono_wasm_get_f64_unaligned\"])(a0);var _mono_wasm_get_i32_unaligned=Module[\"_mono_wasm_get_i32_unaligned\"]=a0=>(_mono_wasm_get_i32_unaligned=Module[\"_mono_wasm_get_i32_unaligned\"]=wasmExports[\"mono_wasm_get_i32_unaligned\"])(a0);var _mono_wasm_is_zero_page_reserved=Module[\"_mono_wasm_is_zero_page_reserved\"]=()=>(_mono_wasm_is_zero_page_reserved=Module[\"_mono_wasm_is_zero_page_reserved\"]=wasmExports[\"mono_wasm_is_zero_page_reserved\"])();var _mono_wasm_read_as_bool_or_null_unsafe=Module[\"_mono_wasm_read_as_bool_or_null_unsafe\"]=a0=>(_mono_wasm_read_as_bool_or_null_unsafe=Module[\"_mono_wasm_read_as_bool_or_null_unsafe\"]=wasmExports[\"mono_wasm_read_as_bool_or_null_unsafe\"])(a0);var _mono_wasm_assembly_load=Module[\"_mono_wasm_assembly_load\"]=a0=>(_mono_wasm_assembly_load=Module[\"_mono_wasm_assembly_load\"]=wasmExports[\"mono_wasm_assembly_load\"])(a0);var _mono_wasm_assembly_find_class=Module[\"_mono_wasm_assembly_find_class\"]=(a0,a1,a2)=>(_mono_wasm_assembly_find_class=Module[\"_mono_wasm_assembly_find_class\"]=wasmExports[\"mono_wasm_assembly_find_class\"])(a0,a1,a2);var _mono_wasm_assembly_find_method=Module[\"_mono_wasm_assembly_find_method\"]=(a0,a1,a2)=>(_mono_wasm_assembly_find_method=Module[\"_mono_wasm_assembly_find_method\"]=wasmExports[\"mono_wasm_assembly_find_method\"])(a0,a1,a2);var _mono_aot_Jitter2_get_method=Module[\"_mono_aot_Jitter2_get_method\"]=a0=>(_mono_aot_Jitter2_get_method=Module[\"_mono_aot_Jitter2_get_method\"]=wasmExports[\"mono_aot_Jitter2_get_method\"])(a0);var _mono_aot_Raylib_cs_get_method=Module[\"_mono_aot_Raylib_cs_get_method\"]=a0=>(_mono_aot_Raylib_cs_get_method=Module[\"_mono_aot_Raylib_cs_get_method\"]=wasmExports[\"mono_aot_Raylib_cs_get_method\"])(a0);var _mono_aot_System_Collections_get_method=Module[\"_mono_aot_System_Collections_get_method\"]=a0=>(_mono_aot_System_Collections_get_method=Module[\"_mono_aot_System_Collections_get_method\"]=wasmExports[\"mono_aot_System_Collections_get_method\"])(a0);var _mono_aot_corlib_get_method=Module[\"_mono_aot_corlib_get_method\"]=a0=>(_mono_aot_corlib_get_method=Module[\"_mono_aot_corlib_get_method\"]=wasmExports[\"mono_aot_corlib_get_method\"])(a0);var _mono_aot_System_Runtime_InteropServices_JavaScript_get_method=Module[\"_mono_aot_System_Runtime_InteropServices_JavaScript_get_method\"]=a0=>(_mono_aot_System_Runtime_InteropServices_JavaScript_get_method=Module[\"_mono_aot_System_Runtime_InteropServices_JavaScript_get_method\"]=wasmExports[\"mono_aot_System_Runtime_InteropServices_JavaScript_get_method\"])(a0);var _mono_aot_WebDemo_get_method=Module[\"_mono_aot_WebDemo_get_method\"]=a0=>(_mono_aot_WebDemo_get_method=Module[\"_mono_aot_WebDemo_get_method\"]=wasmExports[\"mono_aot_WebDemo_get_method\"])(a0);var _mono_aot_aot_instances_get_method=Module[\"_mono_aot_aot_instances_get_method\"]=a0=>(_mono_aot_aot_instances_get_method=Module[\"_mono_aot_aot_instances_get_method\"]=wasmExports[\"mono_aot_aot_instances_get_method\"])(a0);var _mono_wasm_send_dbg_command_with_parms=Module[\"_mono_wasm_send_dbg_command_with_parms\"]=(a0,a1,a2,a3,a4,a5,a6)=>(_mono_wasm_send_dbg_command_with_parms=Module[\"_mono_wasm_send_dbg_command_with_parms\"]=wasmExports[\"mono_wasm_send_dbg_command_with_parms\"])(a0,a1,a2,a3,a4,a5,a6);var _mono_wasm_send_dbg_command=Module[\"_mono_wasm_send_dbg_command\"]=(a0,a1,a2,a3,a4)=>(_mono_wasm_send_dbg_command=Module[\"_mono_wasm_send_dbg_command\"]=wasmExports[\"mono_wasm_send_dbg_command\"])(a0,a1,a2,a3,a4);var _mono_wasm_event_pipe_enable=Module[\"_mono_wasm_event_pipe_enable\"]=(a0,a1,a2,a3,a4,a5)=>(_mono_wasm_event_pipe_enable=Module[\"_mono_wasm_event_pipe_enable\"]=wasmExports[\"mono_wasm_event_pipe_enable\"])(a0,a1,a2,a3,a4,a5);var _mono_wasm_event_pipe_session_start_streaming=Module[\"_mono_wasm_event_pipe_session_start_streaming\"]=a0=>(_mono_wasm_event_pipe_session_start_streaming=Module[\"_mono_wasm_event_pipe_session_start_streaming\"]=wasmExports[\"mono_wasm_event_pipe_session_start_streaming\"])(a0);var _mono_wasm_event_pipe_session_disable=Module[\"_mono_wasm_event_pipe_session_disable\"]=a0=>(_mono_wasm_event_pipe_session_disable=Module[\"_mono_wasm_event_pipe_session_disable\"]=wasmExports[\"mono_wasm_event_pipe_session_disable\"])(a0);var _mono_jiterp_register_jit_call_thunk=Module[\"_mono_jiterp_register_jit_call_thunk\"]=(a0,a1)=>(_mono_jiterp_register_jit_call_thunk=Module[\"_mono_jiterp_register_jit_call_thunk\"]=wasmExports[\"mono_jiterp_register_jit_call_thunk\"])(a0,a1);var _mono_jiterp_stackval_to_data=Module[\"_mono_jiterp_stackval_to_data\"]=(a0,a1,a2)=>(_mono_jiterp_stackval_to_data=Module[\"_mono_jiterp_stackval_to_data\"]=wasmExports[\"mono_jiterp_stackval_to_data\"])(a0,a1,a2);var _mono_jiterp_stackval_from_data=Module[\"_mono_jiterp_stackval_from_data\"]=(a0,a1,a2)=>(_mono_jiterp_stackval_from_data=Module[\"_mono_jiterp_stackval_from_data\"]=wasmExports[\"mono_jiterp_stackval_from_data\"])(a0,a1,a2);var _mono_jiterp_get_arg_offset=Module[\"_mono_jiterp_get_arg_offset\"]=(a0,a1,a2)=>(_mono_jiterp_get_arg_offset=Module[\"_mono_jiterp_get_arg_offset\"]=wasmExports[\"mono_jiterp_get_arg_offset\"])(a0,a1,a2);var _mono_jiterp_overflow_check_i4=Module[\"_mono_jiterp_overflow_check_i4\"]=(a0,a1,a2)=>(_mono_jiterp_overflow_check_i4=Module[\"_mono_jiterp_overflow_check_i4\"]=wasmExports[\"mono_jiterp_overflow_check_i4\"])(a0,a1,a2);var _mono_jiterp_overflow_check_u4=Module[\"_mono_jiterp_overflow_check_u4\"]=(a0,a1,a2)=>(_mono_jiterp_overflow_check_u4=Module[\"_mono_jiterp_overflow_check_u4\"]=wasmExports[\"mono_jiterp_overflow_check_u4\"])(a0,a1,a2);var _mono_jiterp_ld_delegate_method_ptr=Module[\"_mono_jiterp_ld_delegate_method_ptr\"]=(a0,a1)=>(_mono_jiterp_ld_delegate_method_ptr=Module[\"_mono_jiterp_ld_delegate_method_ptr\"]=wasmExports[\"mono_jiterp_ld_delegate_method_ptr\"])(a0,a1);var _mono_jiterp_interp_entry=Module[\"_mono_jiterp_interp_entry\"]=(a0,a1)=>(_mono_jiterp_interp_entry=Module[\"_mono_jiterp_interp_entry\"]=wasmExports[\"mono_jiterp_interp_entry\"])(a0,a1);var _fmod=Module[\"_fmod\"]=(a0,a1)=>(_fmod=Module[\"_fmod\"]=wasmExports[\"fmod\"])(a0,a1);var _asin=Module[\"_asin\"]=a0=>(_asin=Module[\"_asin\"]=wasmExports[\"asin\"])(a0);var _asinh=Module[\"_asinh\"]=a0=>(_asinh=Module[\"_asinh\"]=wasmExports[\"asinh\"])(a0);var _acosh=Module[\"_acosh\"]=a0=>(_acosh=Module[\"_acosh\"]=wasmExports[\"acosh\"])(a0);var _atan=Module[\"_atan\"]=a0=>(_atan=Module[\"_atan\"]=wasmExports[\"atan\"])(a0);var _atanh=Module[\"_atanh\"]=a0=>(_atanh=Module[\"_atanh\"]=wasmExports[\"atanh\"])(a0);var _cbrt=Module[\"_cbrt\"]=a0=>(_cbrt=Module[\"_cbrt\"]=wasmExports[\"cbrt\"])(a0);var _cosh=Module[\"_cosh\"]=a0=>(_cosh=Module[\"_cosh\"]=wasmExports[\"cosh\"])(a0);var _exp=Module[\"_exp\"]=a0=>(_exp=Module[\"_exp\"]=wasmExports[\"exp\"])(a0);var _log2=Module[\"_log2\"]=a0=>(_log2=Module[\"_log2\"]=wasmExports[\"log2\"])(a0);var _log10=Module[\"_log10\"]=a0=>(_log10=Module[\"_log10\"]=wasmExports[\"log10\"])(a0);var _sinh=Module[\"_sinh\"]=a0=>(_sinh=Module[\"_sinh\"]=wasmExports[\"sinh\"])(a0);var _tanh=Module[\"_tanh\"]=a0=>(_tanh=Module[\"_tanh\"]=wasmExports[\"tanh\"])(a0);var _atan2=Module[\"_atan2\"]=(a0,a1)=>(_atan2=Module[\"_atan2\"]=wasmExports[\"atan2\"])(a0,a1);var _fma=Module[\"_fma\"]=(a0,a1,a2)=>(_fma=Module[\"_fma\"]=wasmExports[\"fma\"])(a0,a1,a2);var _asinhf=Module[\"_asinhf\"]=a0=>(_asinhf=Module[\"_asinhf\"]=wasmExports[\"asinhf\"])(a0);var _acoshf=Module[\"_acoshf\"]=a0=>(_acoshf=Module[\"_acoshf\"]=wasmExports[\"acoshf\"])(a0);var _atanf=Module[\"_atanf\"]=a0=>(_atanf=Module[\"_atanf\"]=wasmExports[\"atanf\"])(a0);var _atanhf=Module[\"_atanhf\"]=a0=>(_atanhf=Module[\"_atanhf\"]=wasmExports[\"atanhf\"])(a0);var _cbrtf=Module[\"_cbrtf\"]=a0=>(_cbrtf=Module[\"_cbrtf\"]=wasmExports[\"cbrtf\"])(a0);var _coshf=Module[\"_coshf\"]=a0=>(_coshf=Module[\"_coshf\"]=wasmExports[\"coshf\"])(a0);var _expf=Module[\"_expf\"]=a0=>(_expf=Module[\"_expf\"]=wasmExports[\"expf\"])(a0);var _log2f=Module[\"_log2f\"]=a0=>(_log2f=Module[\"_log2f\"]=wasmExports[\"log2f\"])(a0);var _log10f=Module[\"_log10f\"]=a0=>(_log10f=Module[\"_log10f\"]=wasmExports[\"log10f\"])(a0);var _sinhf=Module[\"_sinhf\"]=a0=>(_sinhf=Module[\"_sinhf\"]=wasmExports[\"sinhf\"])(a0);var _tanf=Module[\"_tanf\"]=a0=>(_tanf=Module[\"_tanf\"]=wasmExports[\"tanf\"])(a0);var _tanhf=Module[\"_tanhf\"]=a0=>(_tanhf=Module[\"_tanhf\"]=wasmExports[\"tanhf\"])(a0);var _fmaf=Module[\"_fmaf\"]=(a0,a1,a2)=>(_fmaf=Module[\"_fmaf\"]=wasmExports[\"fmaf\"])(a0,a1,a2);var _mono_jiterp_get_polling_required_address=Module[\"_mono_jiterp_get_polling_required_address\"]=()=>(_mono_jiterp_get_polling_required_address=Module[\"_mono_jiterp_get_polling_required_address\"]=wasmExports[\"mono_jiterp_get_polling_required_address\"])();var _mono_jiterp_do_safepoint=Module[\"_mono_jiterp_do_safepoint\"]=(a0,a1)=>(_mono_jiterp_do_safepoint=Module[\"_mono_jiterp_do_safepoint\"]=wasmExports[\"mono_jiterp_do_safepoint\"])(a0,a1);var _mono_jiterp_imethod_to_ftnptr=Module[\"_mono_jiterp_imethod_to_ftnptr\"]=a0=>(_mono_jiterp_imethod_to_ftnptr=Module[\"_mono_jiterp_imethod_to_ftnptr\"]=wasmExports[\"mono_jiterp_imethod_to_ftnptr\"])(a0);var _mono_jiterp_enum_hasflag=Module[\"_mono_jiterp_enum_hasflag\"]=(a0,a1,a2,a3)=>(_mono_jiterp_enum_hasflag=Module[\"_mono_jiterp_enum_hasflag\"]=wasmExports[\"mono_jiterp_enum_hasflag\"])(a0,a1,a2,a3);var _mono_jiterp_get_simd_intrinsic=Module[\"_mono_jiterp_get_simd_intrinsic\"]=(a0,a1)=>(_mono_jiterp_get_simd_intrinsic=Module[\"_mono_jiterp_get_simd_intrinsic\"]=wasmExports[\"mono_jiterp_get_simd_intrinsic\"])(a0,a1);var _mono_jiterp_get_simd_opcode=Module[\"_mono_jiterp_get_simd_opcode\"]=(a0,a1)=>(_mono_jiterp_get_simd_opcode=Module[\"_mono_jiterp_get_simd_opcode\"]=wasmExports[\"mono_jiterp_get_simd_opcode\"])(a0,a1);var _mono_jiterp_get_opcode_info=Module[\"_mono_jiterp_get_opcode_info\"]=(a0,a1)=>(_mono_jiterp_get_opcode_info=Module[\"_mono_jiterp_get_opcode_info\"]=wasmExports[\"mono_jiterp_get_opcode_info\"])(a0,a1);var _mono_jiterp_placeholder_trace=Module[\"_mono_jiterp_placeholder_trace\"]=(a0,a1,a2,a3)=>(_mono_jiterp_placeholder_trace=Module[\"_mono_jiterp_placeholder_trace\"]=wasmExports[\"mono_jiterp_placeholder_trace\"])(a0,a1,a2,a3);var _mono_jiterp_placeholder_jit_call=Module[\"_mono_jiterp_placeholder_jit_call\"]=(a0,a1,a2,a3)=>(_mono_jiterp_placeholder_jit_call=Module[\"_mono_jiterp_placeholder_jit_call\"]=wasmExports[\"mono_jiterp_placeholder_jit_call\"])(a0,a1,a2,a3);var _mono_jiterp_get_interp_entry_func=Module[\"_mono_jiterp_get_interp_entry_func\"]=a0=>(_mono_jiterp_get_interp_entry_func=Module[\"_mono_jiterp_get_interp_entry_func\"]=wasmExports[\"mono_jiterp_get_interp_entry_func\"])(a0);var _mono_jiterp_is_enabled=Module[\"_mono_jiterp_is_enabled\"]=()=>(_mono_jiterp_is_enabled=Module[\"_mono_jiterp_is_enabled\"]=wasmExports[\"mono_jiterp_is_enabled\"])();var _mono_jiterp_encode_leb64_ref=Module[\"_mono_jiterp_encode_leb64_ref\"]=(a0,a1,a2)=>(_mono_jiterp_encode_leb64_ref=Module[\"_mono_jiterp_encode_leb64_ref\"]=wasmExports[\"mono_jiterp_encode_leb64_ref\"])(a0,a1,a2);var _mono_jiterp_encode_leb52=Module[\"_mono_jiterp_encode_leb52\"]=(a0,a1,a2)=>(_mono_jiterp_encode_leb52=Module[\"_mono_jiterp_encode_leb52\"]=wasmExports[\"mono_jiterp_encode_leb52\"])(a0,a1,a2);var _mono_jiterp_encode_leb_signed_boundary=Module[\"_mono_jiterp_encode_leb_signed_boundary\"]=(a0,a1,a2)=>(_mono_jiterp_encode_leb_signed_boundary=Module[\"_mono_jiterp_encode_leb_signed_boundary\"]=wasmExports[\"mono_jiterp_encode_leb_signed_boundary\"])(a0,a1,a2);var _mono_jiterp_increase_entry_count=Module[\"_mono_jiterp_increase_entry_count\"]=a0=>(_mono_jiterp_increase_entry_count=Module[\"_mono_jiterp_increase_entry_count\"]=wasmExports[\"mono_jiterp_increase_entry_count\"])(a0);var _mono_jiterp_object_unbox=Module[\"_mono_jiterp_object_unbox\"]=a0=>(_mono_jiterp_object_unbox=Module[\"_mono_jiterp_object_unbox\"]=wasmExports[\"mono_jiterp_object_unbox\"])(a0);var _mono_jiterp_type_is_byref=Module[\"_mono_jiterp_type_is_byref\"]=a0=>(_mono_jiterp_type_is_byref=Module[\"_mono_jiterp_type_is_byref\"]=wasmExports[\"mono_jiterp_type_is_byref\"])(a0);var _mono_jiterp_value_copy=Module[\"_mono_jiterp_value_copy\"]=(a0,a1,a2)=>(_mono_jiterp_value_copy=Module[\"_mono_jiterp_value_copy\"]=wasmExports[\"mono_jiterp_value_copy\"])(a0,a1,a2);var _mono_jiterp_try_newobj_inlined=Module[\"_mono_jiterp_try_newobj_inlined\"]=(a0,a1)=>(_mono_jiterp_try_newobj_inlined=Module[\"_mono_jiterp_try_newobj_inlined\"]=wasmExports[\"mono_jiterp_try_newobj_inlined\"])(a0,a1);var _mono_jiterp_try_newstr=Module[\"_mono_jiterp_try_newstr\"]=(a0,a1)=>(_mono_jiterp_try_newstr=Module[\"_mono_jiterp_try_newstr\"]=wasmExports[\"mono_jiterp_try_newstr\"])(a0,a1);var _mono_jiterp_gettype_ref=Module[\"_mono_jiterp_gettype_ref\"]=(a0,a1)=>(_mono_jiterp_gettype_ref=Module[\"_mono_jiterp_gettype_ref\"]=wasmExports[\"mono_jiterp_gettype_ref\"])(a0,a1);var _mono_jiterp_has_parent_fast=Module[\"_mono_jiterp_has_parent_fast\"]=(a0,a1)=>(_mono_jiterp_has_parent_fast=Module[\"_mono_jiterp_has_parent_fast\"]=wasmExports[\"mono_jiterp_has_parent_fast\"])(a0,a1);var _mono_jiterp_implements_interface=Module[\"_mono_jiterp_implements_interface\"]=(a0,a1)=>(_mono_jiterp_implements_interface=Module[\"_mono_jiterp_implements_interface\"]=wasmExports[\"mono_jiterp_implements_interface\"])(a0,a1);var _mono_jiterp_is_special_interface=Module[\"_mono_jiterp_is_special_interface\"]=a0=>(_mono_jiterp_is_special_interface=Module[\"_mono_jiterp_is_special_interface\"]=wasmExports[\"mono_jiterp_is_special_interface\"])(a0);var _mono_jiterp_implements_special_interface=Module[\"_mono_jiterp_implements_special_interface\"]=(a0,a1,a2)=>(_mono_jiterp_implements_special_interface=Module[\"_mono_jiterp_implements_special_interface\"]=wasmExports[\"mono_jiterp_implements_special_interface\"])(a0,a1,a2);var _mono_jiterp_cast_v2=Module[\"_mono_jiterp_cast_v2\"]=(a0,a1,a2,a3)=>(_mono_jiterp_cast_v2=Module[\"_mono_jiterp_cast_v2\"]=wasmExports[\"mono_jiterp_cast_v2\"])(a0,a1,a2,a3);var _mono_jiterp_localloc=Module[\"_mono_jiterp_localloc\"]=(a0,a1,a2)=>(_mono_jiterp_localloc=Module[\"_mono_jiterp_localloc\"]=wasmExports[\"mono_jiterp_localloc\"])(a0,a1,a2);var _mono_jiterp_ldtsflda=Module[\"_mono_jiterp_ldtsflda\"]=(a0,a1)=>(_mono_jiterp_ldtsflda=Module[\"_mono_jiterp_ldtsflda\"]=wasmExports[\"mono_jiterp_ldtsflda\"])(a0,a1);var _mono_jiterp_box_ref=Module[\"_mono_jiterp_box_ref\"]=(a0,a1,a2,a3)=>(_mono_jiterp_box_ref=Module[\"_mono_jiterp_box_ref\"]=wasmExports[\"mono_jiterp_box_ref\"])(a0,a1,a2,a3);var _mono_jiterp_conv=Module[\"_mono_jiterp_conv\"]=(a0,a1,a2)=>(_mono_jiterp_conv=Module[\"_mono_jiterp_conv\"]=wasmExports[\"mono_jiterp_conv\"])(a0,a1,a2);var _mono_jiterp_relop_fp=Module[\"_mono_jiterp_relop_fp\"]=(a0,a1,a2)=>(_mono_jiterp_relop_fp=Module[\"_mono_jiterp_relop_fp\"]=wasmExports[\"mono_jiterp_relop_fp\"])(a0,a1,a2);var _mono_jiterp_get_size_of_stackval=Module[\"_mono_jiterp_get_size_of_stackval\"]=()=>(_mono_jiterp_get_size_of_stackval=Module[\"_mono_jiterp_get_size_of_stackval\"]=wasmExports[\"mono_jiterp_get_size_of_stackval\"])();var _mono_jiterp_type_get_raw_value_size=Module[\"_mono_jiterp_type_get_raw_value_size\"]=a0=>(_mono_jiterp_type_get_raw_value_size=Module[\"_mono_jiterp_type_get_raw_value_size\"]=wasmExports[\"mono_jiterp_type_get_raw_value_size\"])(a0);var _mono_jiterp_trace_bailout=Module[\"_mono_jiterp_trace_bailout\"]=a0=>(_mono_jiterp_trace_bailout=Module[\"_mono_jiterp_trace_bailout\"]=wasmExports[\"mono_jiterp_trace_bailout\"])(a0);var _mono_jiterp_get_trace_bailout_count=Module[\"_mono_jiterp_get_trace_bailout_count\"]=a0=>(_mono_jiterp_get_trace_bailout_count=Module[\"_mono_jiterp_get_trace_bailout_count\"]=wasmExports[\"mono_jiterp_get_trace_bailout_count\"])(a0);var _mono_jiterp_adjust_abort_count=Module[\"_mono_jiterp_adjust_abort_count\"]=(a0,a1)=>(_mono_jiterp_adjust_abort_count=Module[\"_mono_jiterp_adjust_abort_count\"]=wasmExports[\"mono_jiterp_adjust_abort_count\"])(a0,a1);var _mono_jiterp_interp_entry_prologue=Module[\"_mono_jiterp_interp_entry_prologue\"]=(a0,a1)=>(_mono_jiterp_interp_entry_prologue=Module[\"_mono_jiterp_interp_entry_prologue\"]=wasmExports[\"mono_jiterp_interp_entry_prologue\"])(a0,a1);var _mono_jiterp_get_opcode_value_table_entry=Module[\"_mono_jiterp_get_opcode_value_table_entry\"]=a0=>(_mono_jiterp_get_opcode_value_table_entry=Module[\"_mono_jiterp_get_opcode_value_table_entry\"]=wasmExports[\"mono_jiterp_get_opcode_value_table_entry\"])(a0);var _mono_jiterp_get_trace_hit_count=Module[\"_mono_jiterp_get_trace_hit_count\"]=a0=>(_mono_jiterp_get_trace_hit_count=Module[\"_mono_jiterp_get_trace_hit_count\"]=wasmExports[\"mono_jiterp_get_trace_hit_count\"])(a0);var _mono_jiterp_parse_option=Module[\"_mono_jiterp_parse_option\"]=a0=>(_mono_jiterp_parse_option=Module[\"_mono_jiterp_parse_option\"]=wasmExports[\"mono_jiterp_parse_option\"])(a0);var _mono_jiterp_get_options_version=Module[\"_mono_jiterp_get_options_version\"]=()=>(_mono_jiterp_get_options_version=Module[\"_mono_jiterp_get_options_version\"]=wasmExports[\"mono_jiterp_get_options_version\"])();var _mono_jiterp_get_options_as_json=Module[\"_mono_jiterp_get_options_as_json\"]=()=>(_mono_jiterp_get_options_as_json=Module[\"_mono_jiterp_get_options_as_json\"]=wasmExports[\"mono_jiterp_get_options_as_json\"])();var _mono_jiterp_get_option_as_int=Module[\"_mono_jiterp_get_option_as_int\"]=a0=>(_mono_jiterp_get_option_as_int=Module[\"_mono_jiterp_get_option_as_int\"]=wasmExports[\"mono_jiterp_get_option_as_int\"])(a0);var _mono_jiterp_object_has_component_size=Module[\"_mono_jiterp_object_has_component_size\"]=a0=>(_mono_jiterp_object_has_component_size=Module[\"_mono_jiterp_object_has_component_size\"]=wasmExports[\"mono_jiterp_object_has_component_size\"])(a0);var _mono_jiterp_get_hashcode=Module[\"_mono_jiterp_get_hashcode\"]=a0=>(_mono_jiterp_get_hashcode=Module[\"_mono_jiterp_get_hashcode\"]=wasmExports[\"mono_jiterp_get_hashcode\"])(a0);var _mono_jiterp_try_get_hashcode=Module[\"_mono_jiterp_try_get_hashcode\"]=a0=>(_mono_jiterp_try_get_hashcode=Module[\"_mono_jiterp_try_get_hashcode\"]=wasmExports[\"mono_jiterp_try_get_hashcode\"])(a0);var _mono_jiterp_get_signature_has_this=Module[\"_mono_jiterp_get_signature_has_this\"]=a0=>(_mono_jiterp_get_signature_has_this=Module[\"_mono_jiterp_get_signature_has_this\"]=wasmExports[\"mono_jiterp_get_signature_has_this\"])(a0);var _mono_jiterp_get_signature_return_type=Module[\"_mono_jiterp_get_signature_return_type\"]=a0=>(_mono_jiterp_get_signature_return_type=Module[\"_mono_jiterp_get_signature_return_type\"]=wasmExports[\"mono_jiterp_get_signature_return_type\"])(a0);var _mono_jiterp_get_signature_param_count=Module[\"_mono_jiterp_get_signature_param_count\"]=a0=>(_mono_jiterp_get_signature_param_count=Module[\"_mono_jiterp_get_signature_param_count\"]=wasmExports[\"mono_jiterp_get_signature_param_count\"])(a0);var _mono_jiterp_get_signature_params=Module[\"_mono_jiterp_get_signature_params\"]=a0=>(_mono_jiterp_get_signature_params=Module[\"_mono_jiterp_get_signature_params\"]=wasmExports[\"mono_jiterp_get_signature_params\"])(a0);var _mono_jiterp_type_to_ldind=Module[\"_mono_jiterp_type_to_ldind\"]=a0=>(_mono_jiterp_type_to_ldind=Module[\"_mono_jiterp_type_to_ldind\"]=wasmExports[\"mono_jiterp_type_to_ldind\"])(a0);var _mono_jiterp_type_to_stind=Module[\"_mono_jiterp_type_to_stind\"]=a0=>(_mono_jiterp_type_to_stind=Module[\"_mono_jiterp_type_to_stind\"]=wasmExports[\"mono_jiterp_type_to_stind\"])(a0);var _mono_jiterp_get_array_rank=Module[\"_mono_jiterp_get_array_rank\"]=(a0,a1)=>(_mono_jiterp_get_array_rank=Module[\"_mono_jiterp_get_array_rank\"]=wasmExports[\"mono_jiterp_get_array_rank\"])(a0,a1);var _mono_jiterp_get_array_element_size=Module[\"_mono_jiterp_get_array_element_size\"]=(a0,a1)=>(_mono_jiterp_get_array_element_size=Module[\"_mono_jiterp_get_array_element_size\"]=wasmExports[\"mono_jiterp_get_array_element_size\"])(a0,a1);var _mono_jiterp_set_object_field=Module[\"_mono_jiterp_set_object_field\"]=(a0,a1,a2,a3)=>(_mono_jiterp_set_object_field=Module[\"_mono_jiterp_set_object_field\"]=wasmExports[\"mono_jiterp_set_object_field\"])(a0,a1,a2,a3);var _mono_jiterp_debug_count=Module[\"_mono_jiterp_debug_count\"]=()=>(_mono_jiterp_debug_count=Module[\"_mono_jiterp_debug_count\"]=wasmExports[\"mono_jiterp_debug_count\"])();var _mono_jiterp_stelem_ref=Module[\"_mono_jiterp_stelem_ref\"]=(a0,a1,a2)=>(_mono_jiterp_stelem_ref=Module[\"_mono_jiterp_stelem_ref\"]=wasmExports[\"mono_jiterp_stelem_ref\"])(a0,a1,a2);var _mono_jiterp_get_member_offset=Module[\"_mono_jiterp_get_member_offset\"]=a0=>(_mono_jiterp_get_member_offset=Module[\"_mono_jiterp_get_member_offset\"]=wasmExports[\"mono_jiterp_get_member_offset\"])(a0);var _mono_jiterp_get_counter=Module[\"_mono_jiterp_get_counter\"]=a0=>(_mono_jiterp_get_counter=Module[\"_mono_jiterp_get_counter\"]=wasmExports[\"mono_jiterp_get_counter\"])(a0);var _mono_jiterp_modify_counter=Module[\"_mono_jiterp_modify_counter\"]=(a0,a1)=>(_mono_jiterp_modify_counter=Module[\"_mono_jiterp_modify_counter\"]=wasmExports[\"mono_jiterp_modify_counter\"])(a0,a1);var _mono_jiterp_write_number_unaligned=Module[\"_mono_jiterp_write_number_unaligned\"]=(a0,a1,a2)=>(_mono_jiterp_write_number_unaligned=Module[\"_mono_jiterp_write_number_unaligned\"]=wasmExports[\"mono_jiterp_write_number_unaligned\"])(a0,a1,a2);var _mono_jiterp_get_rejected_trace_count=Module[\"_mono_jiterp_get_rejected_trace_count\"]=()=>(_mono_jiterp_get_rejected_trace_count=Module[\"_mono_jiterp_get_rejected_trace_count\"]=wasmExports[\"mono_jiterp_get_rejected_trace_count\"])();var _mono_jiterp_boost_back_branch_target=Module[\"_mono_jiterp_boost_back_branch_target\"]=a0=>(_mono_jiterp_boost_back_branch_target=Module[\"_mono_jiterp_boost_back_branch_target\"]=wasmExports[\"mono_jiterp_boost_back_branch_target\"])(a0);var _mono_jiterp_is_imethod_var_address_taken=Module[\"_mono_jiterp_is_imethod_var_address_taken\"]=(a0,a1)=>(_mono_jiterp_is_imethod_var_address_taken=Module[\"_mono_jiterp_is_imethod_var_address_taken\"]=wasmExports[\"mono_jiterp_is_imethod_var_address_taken\"])(a0,a1);var _mono_jiterp_initialize_table=Module[\"_mono_jiterp_initialize_table\"]=(a0,a1,a2)=>(_mono_jiterp_initialize_table=Module[\"_mono_jiterp_initialize_table\"]=wasmExports[\"mono_jiterp_initialize_table\"])(a0,a1,a2);var _mono_jiterp_allocate_table_entry=Module[\"_mono_jiterp_allocate_table_entry\"]=a0=>(_mono_jiterp_allocate_table_entry=Module[\"_mono_jiterp_allocate_table_entry\"]=wasmExports[\"mono_jiterp_allocate_table_entry\"])(a0);var _mono_jiterp_tlqueue_next=Module[\"_mono_jiterp_tlqueue_next\"]=a0=>(_mono_jiterp_tlqueue_next=Module[\"_mono_jiterp_tlqueue_next\"]=wasmExports[\"mono_jiterp_tlqueue_next\"])(a0);var _mono_jiterp_tlqueue_add=Module[\"_mono_jiterp_tlqueue_add\"]=(a0,a1)=>(_mono_jiterp_tlqueue_add=Module[\"_mono_jiterp_tlqueue_add\"]=wasmExports[\"mono_jiterp_tlqueue_add\"])(a0,a1);var _mono_jiterp_tlqueue_clear=Module[\"_mono_jiterp_tlqueue_clear\"]=a0=>(_mono_jiterp_tlqueue_clear=Module[\"_mono_jiterp_tlqueue_clear\"]=wasmExports[\"mono_jiterp_tlqueue_clear\"])(a0);var _mono_interp_pgo_load_table=Module[\"_mono_interp_pgo_load_table\"]=(a0,a1)=>(_mono_interp_pgo_load_table=Module[\"_mono_interp_pgo_load_table\"]=wasmExports[\"mono_interp_pgo_load_table\"])(a0,a1);var _mono_interp_pgo_save_table=Module[\"_mono_interp_pgo_save_table\"]=(a0,a1)=>(_mono_interp_pgo_save_table=Module[\"_mono_interp_pgo_save_table\"]=wasmExports[\"mono_interp_pgo_save_table\"])(a0,a1);var _mono_llvm_cpp_catch_exception=Module[\"_mono_llvm_cpp_catch_exception\"]=(a0,a1,a2)=>(_mono_llvm_cpp_catch_exception=Module[\"_mono_llvm_cpp_catch_exception\"]=wasmExports[\"mono_llvm_cpp_catch_exception\"])(a0,a1,a2);var _mono_jiterp_begin_catch=Module[\"_mono_jiterp_begin_catch\"]=a0=>(_mono_jiterp_begin_catch=Module[\"_mono_jiterp_begin_catch\"]=wasmExports[\"mono_jiterp_begin_catch\"])(a0);var _mono_jiterp_end_catch=Module[\"_mono_jiterp_end_catch\"]=()=>(_mono_jiterp_end_catch=Module[\"_mono_jiterp_end_catch\"]=wasmExports[\"mono_jiterp_end_catch\"])();var _sbrk=Module[\"_sbrk\"]=a0=>(_sbrk=Module[\"_sbrk\"]=wasmExports[\"sbrk\"])(a0);var _mono_background_exec=Module[\"_mono_background_exec\"]=()=>(_mono_background_exec=Module[\"_mono_background_exec\"]=wasmExports[\"mono_background_exec\"])();var _mono_wasm_gc_lock=Module[\"_mono_wasm_gc_lock\"]=()=>(_mono_wasm_gc_lock=Module[\"_mono_wasm_gc_lock\"]=wasmExports[\"mono_wasm_gc_lock\"])();var _mono_wasm_gc_unlock=Module[\"_mono_wasm_gc_unlock\"]=()=>(_mono_wasm_gc_unlock=Module[\"_mono_wasm_gc_unlock\"]=wasmExports[\"mono_wasm_gc_unlock\"])();var _mono_print_method_from_ip=Module[\"_mono_print_method_from_ip\"]=a0=>(_mono_print_method_from_ip=Module[\"_mono_print_method_from_ip\"]=wasmExports[\"mono_print_method_from_ip\"])(a0);var _mono_wasm_execute_timer=Module[\"_mono_wasm_execute_timer\"]=()=>(_mono_wasm_execute_timer=Module[\"_mono_wasm_execute_timer\"]=wasmExports[\"mono_wasm_execute_timer\"])();var ___funcs_on_exit=()=>(___funcs_on_exit=wasmExports[\"__funcs_on_exit\"])();var _htons=Module[\"_htons\"]=a0=>(_htons=Module[\"_htons\"]=wasmExports[\"htons\"])(a0);var _emscripten_builtin_memalign=(a0,a1)=>(_emscripten_builtin_memalign=wasmExports[\"emscripten_builtin_memalign\"])(a0,a1);var _ntohs=Module[\"_ntohs\"]=a0=>(_ntohs=Module[\"_ntohs\"]=wasmExports[\"ntohs\"])(a0);var _memalign=Module[\"_memalign\"]=(a0,a1)=>(_memalign=Module[\"_memalign\"]=wasmExports[\"memalign\"])(a0,a1);var ___trap=()=>(___trap=wasmExports[\"__trap\"])();var stackSave=Module[\"stackSave\"]=()=>(stackSave=Module[\"stackSave\"]=wasmExports[\"stackSave\"])();var stackRestore=Module[\"stackRestore\"]=a0=>(stackRestore=Module[\"stackRestore\"]=wasmExports[\"stackRestore\"])(a0);var stackAlloc=Module[\"stackAlloc\"]=a0=>(stackAlloc=Module[\"stackAlloc\"]=wasmExports[\"stackAlloc\"])(a0);var ___cxa_decrement_exception_refcount=a0=>(___cxa_decrement_exception_refcount=wasmExports[\"__cxa_decrement_exception_refcount\"])(a0);var ___cxa_increment_exception_refcount=a0=>(___cxa_increment_exception_refcount=wasmExports[\"__cxa_increment_exception_refcount\"])(a0);var ___thrown_object_from_unwind_exception=a0=>(___thrown_object_from_unwind_exception=wasmExports[\"__thrown_object_from_unwind_exception\"])(a0);var ___get_exception_message=(a0,a1,a2)=>(___get_exception_message=wasmExports[\"__get_exception_message\"])(a0,a1,a2);var ___start_em_js=Module[\"___start_em_js\"]=1792604;var ___stop_em_js=Module[\"___stop_em_js\"]=1792677;Module[\"addRunDependency\"]=addRunDependency;Module[\"removeRunDependency\"]=removeRunDependency;Module[\"FS_createPath\"]=FS.createPath;Module[\"FS_createLazyFile\"]=FS.createLazyFile;Module[\"FS_createDevice\"]=FS.createDevice;Module[\"out\"]=out;Module[\"err\"]=err;Module[\"abort\"]=abort;Module[\"wasmExports\"]=wasmExports;Module[\"runtimeKeepalivePush\"]=runtimeKeepalivePush;Module[\"runtimeKeepalivePop\"]=runtimeKeepalivePop;Module[\"maybeExit\"]=maybeExit;Module[\"ccall\"]=ccall;Module[\"cwrap\"]=cwrap;Module[\"addFunction\"]=addFunction;Module[\"setValue\"]=setValue;Module[\"getValue\"]=getValue;Module[\"UTF8ArrayToString\"]=UTF8ArrayToString;Module[\"UTF8ToString\"]=UTF8ToString;Module[\"stringToUTF8Array\"]=stringToUTF8Array;Module[\"lengthBytesUTF8\"]=lengthBytesUTF8;Module[\"safeSetTimeout\"]=safeSetTimeout;Module[\"FS_createPreloadedFile\"]=FS.createPreloadedFile;Module[\"FS\"]=FS;Module[\"FS_createDataFile\"]=FS.createDataFile;Module[\"FS_unlink\"]=FS.unlink;var calledRun;dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function run(){if(runDependencies>0){return}preRun();if(runDependencies>0){return}function doRun(){if(calledRun)return;calledRun=true;Module[\"calledRun\"]=true;if(ABORT)return;initRuntime();readyPromiseResolve(Module);if(Module[\"onRuntimeInitialized\"])Module[\"onRuntimeInitialized\"]();postRun()}if(Module[\"setStatus\"]){Module[\"setStatus\"](\"Running...\");setTimeout(function(){setTimeout(function(){Module[\"setStatus\"](\"\")},1);doRun()},1)}else{doRun()}}if(Module[\"preInit\"]){if(typeof Module[\"preInit\"]==\"function\")Module[\"preInit\"]=[Module[\"preInit\"]];while(Module[\"preInit\"].length>0){Module[\"preInit\"].pop()()}}run();\n\n\n  return moduleArg.ready\n}\n);\n})();\nexport default createDotnetRuntime;\nvar fetch = fetch || undefined; var require = require || undefined; var __dirname = __dirname || ''; var _nativeModuleLoaded = false;\n"
  },
  {
    "path": "docfx/AppBundle/_framework/dotnet.runtime.js",
    "content": "//! Licensed to the .NET Foundation under one or more agreements.\n//! The .NET Foundation licenses this file to you under the MIT license.\nvar e=\"9.0.12\",t=\"Release\",n=!1;const r=[[!0,\"mono_wasm_register_root\",\"number\",[\"number\",\"number\",\"string\"]],[!0,\"mono_wasm_deregister_root\",null,[\"number\"]],[!0,\"mono_wasm_string_get_data_ref\",null,[\"number\",\"number\",\"number\",\"number\"]],[!0,\"mono_wasm_set_is_debugger_attached\",\"void\",[\"bool\"]],[!0,\"mono_wasm_send_dbg_command\",\"bool\",[\"number\",\"number\",\"number\",\"number\",\"number\"]],[!0,\"mono_wasm_send_dbg_command_with_parms\",\"bool\",[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"string\"]],[!0,\"mono_wasm_setenv\",null,[\"string\",\"string\"]],[!0,\"mono_wasm_parse_runtime_options\",null,[\"number\",\"number\"]],[!0,\"mono_wasm_strdup\",\"number\",[\"string\"]],[!0,\"mono_background_exec\",null,[]],[!0,\"mono_wasm_execute_timer\",null,[]],[!0,\"mono_wasm_load_icu_data\",\"number\",[\"number\"]],[!1,\"mono_wasm_add_assembly\",\"number\",[\"string\",\"number\",\"number\"]],[!0,\"mono_wasm_add_satellite_assembly\",\"void\",[\"string\",\"string\",\"number\",\"number\"]],[!1,\"mono_wasm_load_runtime\",null,[\"number\"]],[!0,\"mono_wasm_change_debugger_log_level\",\"void\",[\"number\"]],[!0,\"mono_wasm_assembly_load\",\"number\",[\"string\"]],[!0,\"mono_wasm_assembly_find_class\",\"number\",[\"number\",\"string\",\"string\"]],[!0,\"mono_wasm_assembly_find_method\",\"number\",[\"number\",\"string\",\"number\"]],[!0,\"mono_wasm_string_from_utf16_ref\",\"void\",[\"number\",\"number\",\"number\"]],[!0,\"mono_wasm_intern_string_ref\",\"void\",[\"number\"]],[!1,\"mono_wasm_exit\",\"void\",[\"number\"]],[!0,\"mono_wasm_getenv\",\"number\",[\"string\"]],[!0,\"mono_wasm_set_main_args\",\"void\",[\"number\",\"number\"]],[()=>!ot.emscriptenBuildOptions.enableAotProfiler,\"mono_wasm_profiler_init_aot\",\"void\",[\"string\"]],[()=>!ot.emscriptenBuildOptions.enableBrowserProfiler,\"mono_wasm_profiler_init_browser\",\"void\",[\"string\"]],[()=>!ot.emscriptenBuildOptions.enableLogProfiler,\"mono_wasm_profiler_init_log\",\"void\",[\"string\"]],[!0,\"mono_wasm_profiler_init_browser\",\"void\",[\"number\"]],[!1,\"mono_wasm_exec_regression\",\"number\",[\"number\",\"string\"]],[!1,\"mono_wasm_invoke_jsexport\",\"void\",[\"number\",\"number\"]],[!0,\"mono_wasm_write_managed_pointer_unsafe\",\"void\",[\"number\",\"number\"]],[!0,\"mono_wasm_copy_managed_pointer\",\"void\",[\"number\",\"number\"]],[!0,\"mono_wasm_i52_to_f64\",\"number\",[\"number\",\"number\"]],[!0,\"mono_wasm_u52_to_f64\",\"number\",[\"number\",\"number\"]],[!0,\"mono_wasm_f64_to_i52\",\"number\",[\"number\",\"number\"]],[!0,\"mono_wasm_f64_to_u52\",\"number\",[\"number\",\"number\"]],[!0,\"mono_wasm_method_get_name\",\"number\",[\"number\"]],[!0,\"mono_wasm_method_get_full_name\",\"number\",[\"number\"]],[!0,\"mono_wasm_gc_lock\",\"void\",[]],[!0,\"mono_wasm_gc_unlock\",\"void\",[]],[!0,\"mono_wasm_get_i32_unaligned\",\"number\",[\"number\"]],[!0,\"mono_wasm_get_f32_unaligned\",\"number\",[\"number\"]],[!0,\"mono_wasm_get_f64_unaligned\",\"number\",[\"number\"]],[!0,\"mono_wasm_read_as_bool_or_null_unsafe\",\"number\",[\"number\"]],[!0,\"mono_jiterp_trace_bailout\",\"void\",[\"number\"]],[!0,\"mono_jiterp_get_trace_bailout_count\",\"number\",[\"number\"]],[!0,\"mono_jiterp_value_copy\",\"void\",[\"number\",\"number\",\"number\"]],[!0,\"mono_jiterp_get_member_offset\",\"number\",[\"number\"]],[!0,\"mono_jiterp_encode_leb52\",\"number\",[\"number\",\"number\",\"number\"]],[!0,\"mono_jiterp_encode_leb64_ref\",\"number\",[\"number\",\"number\",\"number\"]],[!0,\"mono_jiterp_encode_leb_signed_boundary\",\"number\",[\"number\",\"number\",\"number\"]],[!0,\"mono_jiterp_write_number_unaligned\",\"void\",[\"number\",\"number\",\"number\"]],[!0,\"mono_jiterp_type_is_byref\",\"number\",[\"number\"]],[!0,\"mono_jiterp_get_size_of_stackval\",\"number\",[]],[!0,\"mono_jiterp_parse_option\",\"number\",[\"string\"]],[!0,\"mono_jiterp_get_options_as_json\",\"number\",[]],[!0,\"mono_jiterp_get_option_as_int\",\"number\",[\"string\"]],[!0,\"mono_jiterp_get_options_version\",\"number\",[]],[!0,\"mono_jiterp_adjust_abort_count\",\"number\",[\"number\",\"number\"]],[!0,\"mono_jiterp_register_jit_call_thunk\",\"void\",[\"number\",\"number\"]],[!0,\"mono_jiterp_type_get_raw_value_size\",\"number\",[\"number\"]],[!0,\"mono_jiterp_get_signature_has_this\",\"number\",[\"number\"]],[!0,\"mono_jiterp_get_signature_return_type\",\"number\",[\"number\"]],[!0,\"mono_jiterp_get_signature_param_count\",\"number\",[\"number\"]],[!0,\"mono_jiterp_get_signature_params\",\"number\",[\"number\"]],[!0,\"mono_jiterp_type_to_ldind\",\"number\",[\"number\"]],[!0,\"mono_jiterp_type_to_stind\",\"number\",[\"number\"]],[!0,\"mono_jiterp_imethod_to_ftnptr\",\"number\",[\"number\"]],[!0,\"mono_jiterp_debug_count\",\"number\",[]],[!0,\"mono_jiterp_get_trace_hit_count\",\"number\",[\"number\"]],[!0,\"mono_jiterp_get_polling_required_address\",\"number\",[]],[!0,\"mono_jiterp_get_rejected_trace_count\",\"number\",[]],[!0,\"mono_jiterp_boost_back_branch_target\",\"void\",[\"number\"]],[!0,\"mono_jiterp_is_imethod_var_address_taken\",\"number\",[\"number\",\"number\"]],[!0,\"mono_jiterp_get_opcode_value_table_entry\",\"number\",[\"number\"]],[!0,\"mono_jiterp_get_simd_intrinsic\",\"number\",[\"number\",\"number\"]],[!0,\"mono_jiterp_get_simd_opcode\",\"number\",[\"number\",\"number\"]],[!0,\"mono_jiterp_get_arg_offset\",\"number\",[\"number\",\"number\",\"number\"]],[!0,\"mono_jiterp_get_opcode_info\",\"number\",[\"number\",\"number\"]],[!0,\"mono_wasm_is_zero_page_reserved\",\"number\",[]],[!0,\"mono_jiterp_is_special_interface\",\"number\",[\"number\"]],[!0,\"mono_jiterp_initialize_table\",\"void\",[\"number\",\"number\",\"number\"]],[!0,\"mono_jiterp_allocate_table_entry\",\"number\",[\"number\"]],[!0,\"mono_jiterp_get_interp_entry_func\",\"number\",[\"number\"]],[!0,\"mono_jiterp_get_counter\",\"number\",[\"number\"]],[!0,\"mono_jiterp_modify_counter\",\"number\",[\"number\",\"number\"]],[!0,\"mono_jiterp_tlqueue_next\",\"number\",[\"number\"]],[!0,\"mono_jiterp_tlqueue_add\",\"number\",[\"number\",\"number\"]],[!0,\"mono_jiterp_tlqueue_clear\",\"void\",[\"number\"]],[!0,\"mono_jiterp_begin_catch\",\"void\",[\"number\"]],[!0,\"mono_jiterp_end_catch\",\"void\",[]],[!0,\"mono_interp_pgo_load_table\",\"number\",[\"number\",\"number\"]],[!0,\"mono_interp_pgo_save_table\",\"number\",[\"number\",\"number\"]]],o={},s=o,a=[\"void\",\"number\",null];function i(e,t,n,r){let o=void 0===r&&a.indexOf(t)>=0&&(!n||n.every((e=>a.indexOf(e)>=0)))&&Xe.wasmExports?Xe.wasmExports[e]:void 0;if(o&&n&&o.length!==n.length&&(Pe(`argument count mismatch for cwrap ${e}`),o=void 0),\"function\"!=typeof o&&(o=Xe.cwrap(e,t,n,r)),\"function\"!=typeof o)throw new Error(`cwrap ${e} not found or not a function`);return o}const c=0,l=0,p=0,u=BigInt(\"9223372036854775807\"),d=BigInt(\"-9223372036854775808\");function f(e,t,n){if(!Number.isSafeInteger(e))throw new Error(`Assert failed: Value is not an integer: ${e} (${typeof e})`);if(!(e>=t&&e<=n))throw new Error(`Assert failed: Overflow: value ${e} is out of ${t} ${n} range`)}function _(e,t){Y().fill(0,e,e+t)}function m(e,t){const n=!!t;\"number\"==typeof t&&f(t,0,1),Xe.HEAP32[e>>>2]=n?1:0}function h(e,t){const n=!!t;\"number\"==typeof t&&f(t,0,1),Xe.HEAPU8[e]=n?1:0}function g(e,t){f(t,0,255),Xe.HEAPU8[e]=t}function b(e,t){f(t,0,65535),Xe.HEAPU16[e>>>1]=t}function y(e,t,n){f(n,0,65535),e[t>>>1]=n}function w(e,t){f(t,0,4294967295),Xe.HEAPU32[e>>>2]=t}function k(e,t){f(t,-128,127),Xe.HEAP8[e]=t}function S(e,t){f(t,-32768,32767),Xe.HEAP16[e>>>1]=t}function v(e,t){f(t,-2147483648,2147483647),Xe.HEAP32[e>>>2]=t}function U(e){if(0!==e)switch(e){case 1:throw new Error(\"value was not an integer\");case 2:throw new Error(\"value out of range\");default:throw new Error(\"unknown internal error\")}}function E(e,t){if(!Number.isSafeInteger(t))throw new Error(`Assert failed: Value is not a safe integer: ${t} (${typeof t})`);U(o.mono_wasm_f64_to_i52(e,t))}function T(e,t){if(!Number.isSafeInteger(t))throw new Error(`Assert failed: Value is not a safe integer: ${t} (${typeof t})`);if(!(t>=0))throw new Error(\"Assert failed: Can't convert negative Number into UInt64\");U(o.mono_wasm_f64_to_u52(e,t))}function x(e,t){if(\"bigint\"!=typeof t)throw new Error(`Assert failed: Value is not an bigint: ${t} (${typeof t})`);if(!(t>=d&&t<=u))throw new Error(`Assert failed: Overflow: value ${t} is out of ${d} ${u} range`);Xe.HEAP64[e>>>3]=t}function I(e,t){if(\"number\"!=typeof t)throw new Error(`Assert failed: Value is not a Number: ${t} (${typeof t})`);Xe.HEAPF32[e>>>2]=t}function A(e,t){if(\"number\"!=typeof t)throw new Error(`Assert failed: Value is not a Number: ${t} (${typeof t})`);Xe.HEAPF64[e>>>3]=t}let j=!0;function $(e){const t=Xe.HEAPU32[e>>>2];return t>1&&j&&(j=!1,Me(`getB32: value at ${e} is not a boolean, but a number: ${t}`)),!!t}function L(e){return!!Xe.HEAPU8[e]}function R(e){return Xe.HEAPU8[e]}function B(e){return Xe.HEAPU16[e>>>1]}function N(e){return Xe.HEAPU32[e>>>2]}function C(e,t){return e[t>>>2]}function O(e){return o.mono_wasm_get_i32_unaligned(e)}function D(e){return o.mono_wasm_get_i32_unaligned(e)>>>0}function F(e){return Xe.HEAP8[e]}function M(e){return Xe.HEAP16[e>>>1]}function P(e){return Xe.HEAP32[e>>>2]}function V(e){const t=o.mono_wasm_i52_to_f64(e,ot._i52_error_scratch_buffer);return U(P(ot._i52_error_scratch_buffer)),t}function z(e){const t=o.mono_wasm_u52_to_f64(e,ot._i52_error_scratch_buffer);return U(P(ot._i52_error_scratch_buffer)),t}function H(e){return Xe.HEAP64[e>>>3]}function W(e){return Xe.HEAPF32[e>>>2]}function q(e){return Xe.HEAPF64[e>>>3]}function G(){return Xe.HEAP8}function J(){return Xe.HEAP16}function X(){return Xe.HEAP32}function Q(){return Xe.HEAP64}function Y(){return Xe.HEAPU8}function Z(){return Xe.HEAPU16}function K(){return Xe.HEAPU32}function ee(){return Xe.HEAPF32}function te(){return Xe.HEAPF64}let ne=!1;function re(){if(ne)throw new Error(\"GC is already locked\");ne=!0}function oe(){if(!ne)throw new Error(\"GC is not locked\");ne=!1}const se=8192;let ae=null,ie=null,ce=0;const le=[],pe=[];function ue(e,t){if(e<=0)throw new Error(\"capacity >= 1\");const n=4*(e|=0),r=Xe._malloc(n);if(r%4!=0)throw new Error(\"Malloc returned an unaligned offset\");return _(r,n),new WasmRootBufferImpl(r,e,!0,t)}class WasmRootBufferImpl{constructor(e,t,n,r){const s=4*t;this.__offset=e,this.__offset32=e>>>2,this.__count=t,this.length=t,this.__handle=o.mono_wasm_register_root(e,s,r||\"noname\"),this.__ownsAllocation=n}_throw_index_out_of_range(){throw new Error(\"index out of range\")}_check_in_range(e){(e>=this.__count||e<0)&&this._throw_index_out_of_range()}get_address(e){return this._check_in_range(e),this.__offset+4*e}get_address_32(e){return this._check_in_range(e),this.__offset32+e}get(e){this._check_in_range(e);const t=this.get_address_32(e);return K()[t]}set(e,t){const n=this.get_address(e);return o.mono_wasm_write_managed_pointer_unsafe(n,t),t}copy_value_from_address(e,t){const n=this.get_address(e);o.mono_wasm_copy_managed_pointer(n,t)}_unsafe_get(e){return K()[this.__offset32+e]}_unsafe_set(e,t){const n=this.__offset+e;o.mono_wasm_write_managed_pointer_unsafe(n,t)}clear(){this.__offset&&_(this.__offset,4*this.__count)}release(){this.__offset&&this.__ownsAllocation&&(o.mono_wasm_deregister_root(this.__offset),_(this.__offset,4*this.__count),Xe._free(this.__offset)),this.__handle=this.__offset=this.__count=this.__offset32=0}toString(){return`[root buffer @${this.get_address(0)}, size ${this.__count} ]`}}class de{constructor(e,t){this.__buffer=e,this.__index=t}get_address(){return this.__buffer.get_address(this.__index)}get_address_32(){return this.__buffer.get_address_32(this.__index)}get address(){return this.__buffer.get_address(this.__index)}get(){return this.__buffer._unsafe_get(this.__index)}set(e){const t=this.__buffer.get_address(this.__index);return o.mono_wasm_write_managed_pointer_unsafe(t,e),e}copy_from(e){const t=e.address,n=this.address;o.mono_wasm_copy_managed_pointer(n,t)}copy_to(e){const t=this.address,n=e.address;o.mono_wasm_copy_managed_pointer(n,t)}copy_from_address(e){const t=this.address;o.mono_wasm_copy_managed_pointer(t,e)}copy_to_address(e){const t=this.address;o.mono_wasm_copy_managed_pointer(e,t)}get value(){return this.get()}set value(e){this.set(e)}valueOf(){throw new Error(\"Implicit conversion of roots to pointers is no longer supported. Use .value or .address as appropriate\")}clear(){const e=this.__buffer.get_address_32(this.__index);K()[e]=0}release(){if(!this.__buffer)throw new Error(\"No buffer\");var e;le.length>128?(void 0!==(e=this.__index)&&(ae.set(e,0),ie[ce]=e,ce++),this.__buffer=null,this.__index=0):(this.set(0),le.push(this))}toString(){return`[root @${this.address}]`}}class fe{constructor(e){this.__external_address=0,this.__external_address_32=0,this._set_address(e)}_set_address(e){this.__external_address=e,this.__external_address_32=e>>>2}get address(){return this.__external_address}get_address(){return this.__external_address}get_address_32(){return this.__external_address_32}get(){return K()[this.__external_address_32]}set(e){return o.mono_wasm_write_managed_pointer_unsafe(this.__external_address,e),e}copy_from(e){const t=e.address,n=this.__external_address;o.mono_wasm_copy_managed_pointer(n,t)}copy_to(e){const t=this.__external_address,n=e.address;o.mono_wasm_copy_managed_pointer(n,t)}copy_from_address(e){const t=this.__external_address;o.mono_wasm_copy_managed_pointer(t,e)}copy_to_address(e){const t=this.__external_address;o.mono_wasm_copy_managed_pointer(e,t)}get value(){return this.get()}set value(e){this.set(e)}valueOf(){throw new Error(\"Implicit conversion of roots to pointers is no longer supported. Use .value or .address as appropriate\")}clear(){K()[this.__external_address>>>2]=0}release(){pe.length<128&&pe.push(this)}toString(){return`[external root @${this.address}]`}}const _e=new Map,me=\"\";let he;const ge=new Map;let be,ye,we,ke,Se,ve=0,Ue=null,Ee=0;function Te(e){if(void 0===ke){const t=Xe.lengthBytesUTF8(e),n=new Uint8Array(t);return Xe.stringToUTF8Array(e,n,0,t),n}return ke.encode(e)}function xe(e){const t=Y();return function(e,t,n){const r=t+n;let o=t;for(;e[o]&&!(o>=r);)++o;if(o-t<=16)return Xe.UTF8ArrayToString(e,t,n);if(void 0===we)return Xe.UTF8ArrayToString(e,t,n);const s=Ne(e,t,o);return we.decode(s)}(t,e,t.length-e)}function Ie(e,t){if(be){const n=Ne(Y(),e,t);return be.decode(n)}return Ae(e,t)}function Ae(e,t){let n=\"\";const r=Z();for(let o=e;o<t;o+=2){const e=r[o>>>1];n+=String.fromCharCode(e)}return n}function je(e,t,n){const r=Z(),o=n.length;for(let s=0;s<o&&(y(r,e,n.charCodeAt(s)),!((e+=2)>=t));s++);}function $e(e){const t=2*(e.length+1),n=Xe._malloc(t);return _(n,2*e.length),je(n,n+t,e),n}function Le(e){if(e.value===l)return null;const t=he+0,n=he+4,r=he+8;let s;o.mono_wasm_string_get_data_ref(e.address,t,n,r);const a=K(),i=C(a,n),c=C(a,t),p=C(a,r);if(p&&(s=ge.get(e.value)),void 0===s&&(i&&c?(s=Ie(c,c+i),p&&ge.set(e.value,s)):s=me),void 0===s)throw new Error(`internal error when decoding string at location ${e.value}`);return s}function Re(e,t){let n;if(\"symbol\"==typeof e?(n=e.description,\"string\"!=typeof n&&(n=Symbol.keyFor(e)),\"string\"!=typeof n&&(n=\"<unknown Symbol>\")):\"string\"==typeof e&&(n=e),\"string\"!=typeof n)throw new Error(`Argument to stringToInternedMonoStringRoot must be a string but was ${e}`);if(0===n.length&&ve)return void t.set(ve);const r=_e.get(n);r?t.set(r):(Be(n,t),function(e,t,n){if(!t.value)throw new Error(\"null pointer passed to _store_string_in_intern_table\");Ee>=8192&&(Ue=null),Ue||(Ue=ue(8192,\"interned strings\"),Ee=0);const r=Ue,s=Ee++;if(o.mono_wasm_intern_string_ref(t.address),!t.value)throw new Error(\"mono_wasm_intern_string_ref produced a null pointer\");_e.set(e,t.value),ge.set(t.value,e),0!==e.length||ve||(ve=t.value),r.copy_value_from_address(s,t.address)}(n,t))}function Be(e,t){const n=2*(e.length+1),r=Xe._malloc(n);je(r,r+n,e),o.mono_wasm_string_from_utf16_ref(r,e.length,t.address),Xe._free(r)}function Ne(e,t,n){return e.buffer,e.subarray(t,n)}function Ce(e){if(e===l)return null;Se.value=e;const t=Le(Se);return Se.value=l,t}let Oe=\"MONO_WASM: \";function De(e){if(ot.diagnosticTracing){const t=\"function\"==typeof e?e():e;console.debug(Oe+t)}}function Fe(e,...t){console.info(Oe+e,...t)}function Me(e,...t){console.warn(Oe+e,...t)}function Pe(e,...t){if(t&&t.length>0&&t[0]&&\"object\"==typeof t[0]){if(t[0].silent)return;if(t[0].toString)return void console.error(Oe+e,t[0].toString())}console.error(Oe+e,...t)}const Ve=new Map;let ze;const He=[];function We(e){try{if(Ge(),0==Ve.size)return e;const t=e;for(let n=0;n<He.length;n++){const r=e.replace(new RegExp(He[n],\"g\"),((e,...t)=>{const n=t.find((e=>\"object\"==typeof e&&void 0!==e.replaceSection));if(void 0===n)return e;const r=n.funcNum,o=n.replaceSection,s=Ve.get(Number(r));return void 0===s?e:e.replace(o,`${s} (${o})`)}));if(r!==t)return r}return t}catch(t){return console.debug(`failed to symbolicate: ${t}`),e}}function qe(e){let t;return t=\"string\"==typeof e?e:null==e||void 0===e.stack?(new Error).stack+\"\":e.stack+\"\",We(t)}function Ge(){if(!ze)return;He.push(/at (?<replaceSection>[^:()]+:wasm-function\\[(?<funcNum>\\d+)\\]:0x[a-fA-F\\d]+)((?![^)a-fA-F\\d])|$)/),He.push(/(?:WASM \\[[\\da-zA-Z]+\\], (?<replaceSection>function #(?<funcNum>[\\d]+) \\(''\\)))/),He.push(/(?<replaceSection>[a-z]+:\\/\\/[^ )]*:wasm-function\\[(?<funcNum>\\d+)\\]:0x[a-fA-F\\d]+)/),He.push(/(?<replaceSection><[^ >]+>[.:]wasm-function\\[(?<funcNum>[0-9]+)\\])/);const e=ze;ze=void 0;try{e.split(/[\\r\\n]/).forEach((e=>{const t=e.split(/:/);t.length<2||(t[1]=t.splice(1).join(\":\"),Ve.set(Number(t[0]),t[1]))})),st.diagnosticTracing&&De(`Loaded ${Ve.size} symbols`)}catch(e){Me(`Failed to load symbol map: ${e}`)}}function Je(){return Ge(),[...Ve.values()]}let Xe,Qe;const Ye=\"object\"==typeof process&&\"object\"==typeof process.versions&&\"string\"==typeof process.versions.node,Ze=\"function\"==typeof importScripts,Ke=Ze&&\"undefined\"!=typeof dotnetSidecar,et=Ze&&!Ke,tt=\"object\"==typeof window||Ze&&!Ye,nt=!tt&&!Ye;let rt=null,ot=null,st=null,at=null,it=!1;function ct(e,t){ot.emscriptenBuildOptions=t,e.isPThread,ot.quit=e.quit_,ot.ExitStatus=e.ExitStatus,ot.getMemory=e.getMemory,ot.getWasmIndirectFunctionTable=e.getWasmIndirectFunctionTable,ot.updateMemoryViews=e.updateMemoryViews}function lt(e){if(it)throw new Error(\"Runtime module already loaded\");it=!0,Xe=e.module,Qe=e.internal,ot=e.runtimeHelpers,st=e.loaderHelpers,at=e.globalizationHelpers,rt=e.api;const t={gitHash:\"2f124007573374800632d39177cde00ca9fe1ef0\",coreAssetsInMemory:pt(),allAssetsInMemory:pt(),dotnetReady:pt(),afterInstantiateWasm:pt(),beforePreInit:pt(),afterPreInit:pt(),afterPreRun:pt(),beforeOnRuntimeInitialized:pt(),afterMonoStarted:pt(),afterDeputyReady:pt(),afterIOStarted:pt(),afterOnRuntimeInitialized:pt(),afterPostRun:pt(),nativeAbort:e=>{throw e||new Error(\"abort\")},nativeExit:e=>{throw new Error(\"exit:\"+e)}};Object.assign(ot,t),Object.assign(e.module.config,{}),Object.assign(e.api,{Module:e.module,...e.module}),Object.assign(e.api,{INTERNAL:e.internal})}function pt(e,t){return st.createPromiseController(e,t)}function ut(e,t){if(e)return;const n=\"Assert failed: \"+(\"function\"==typeof t?t():t),r=new Error(n);Pe(n,r),ot.nativeAbort(r)}function dt(e,t,n){const r=function(e,t,n){let r,o=0;r=e.length-o;const s={read:function(){if(o>=r)return null;const t=e[o];return o+=1,t}};return Object.defineProperty(s,\"eof\",{get:function(){return o>=r},configurable:!0,enumerable:!0}),s}(e);let o=\"\",s=0,a=0,i=0,c=0,l=0,p=0;for(;s=r.read(),a=r.read(),i=r.read(),null!==s;)null===a&&(a=0,l+=1),null===i&&(i=0,l+=1),p=s<<16|a<<8|i,c=(16777215&p)>>18,o+=ft[c],c=(262143&p)>>12,o+=ft[c],l<2&&(c=(4095&p)>>6,o+=ft[c]),2===l?o+=\"==\":1===l?o+=\"=\":(c=63&p,o+=ft[c]);return o}const ft=[\"A\",\"B\",\"C\",\"D\",\"E\",\"F\",\"G\",\"H\",\"I\",\"J\",\"K\",\"L\",\"M\",\"N\",\"O\",\"P\",\"Q\",\"R\",\"S\",\"T\",\"U\",\"V\",\"W\",\"X\",\"Y\",\"Z\",\"a\",\"b\",\"c\",\"d\",\"e\",\"f\",\"g\",\"h\",\"i\",\"j\",\"k\",\"l\",\"m\",\"n\",\"o\",\"p\",\"q\",\"r\",\"s\",\"t\",\"u\",\"v\",\"w\",\"x\",\"y\",\"z\",\"0\",\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"+\",\"/\"],_t=new Map;_t.remove=function(e){const t=this.get(e);return this.delete(e),t};let mt,ht,gt,bt={},yt=0,wt=-1;function mono_wasm_fire_debugger_agent_message_with_data_to_pause(e){console.assert(!0,`mono_wasm_fire_debugger_agent_message_with_data ${e}`);debugger}function kt(e){e.length>wt&&(mt&&Xe._free(mt),wt=Math.max(e.length,wt,256),mt=Xe._malloc(wt));const t=atob(e),n=Y();for(let e=0;e<t.length;e++)n[mt+e]=t.charCodeAt(e)}function St(e,t,n,r,s,a,i){kt(r),o.mono_wasm_send_dbg_command_with_parms(e,t,n,mt,s,a,i.toString());const{res_ok:c,res:l}=_t.remove(e);if(!c)throw new Error(\"Failed on mono_wasm_send_dbg_command_with_parms\");return l}function vt(e,t,n,r){kt(r),o.mono_wasm_send_dbg_command(e,t,n,mt,r.length);const{res_ok:s,res:a}=_t.remove(e);if(!s)throw new Error(\"Failed on mono_wasm_send_dbg_command\");return a}function Ut(){const{res_ok:e,res:t}=_t.remove(0);if(!e)throw new Error(\"Failed on mono_wasm_get_dbg_command_info\");return t}function Et(){}function Tt(){o.mono_wasm_set_is_debugger_attached(!1)}function xt(e){o.mono_wasm_change_debugger_log_level(e)}function It(e,t={}){if(\"object\"!=typeof e)throw new Error(`event must be an object, but got ${JSON.stringify(e)}`);if(void 0===e.eventName)throw new Error(`event.eventName is a required parameter, in event: ${JSON.stringify(e)}`);if(\"object\"!=typeof t)throw new Error(`args must be an object, but got ${JSON.stringify(t)}`);console.debug(\"mono_wasm_debug_event_raised:aef14bca-5519-4dfe-b35a-f867abc123ae\",JSON.stringify(e),JSON.stringify(t))}function At(){-1==ot.waitForDebugger&&(ot.waitForDebugger=1),o.mono_wasm_set_is_debugger_attached(!0)}function jt(e){if(null!=e.arguments&&!Array.isArray(e.arguments))throw new Error(`\"arguments\" should be an array, but was ${e.arguments}`);const t=e.objectId,n=e.details;let r={};if(t.startsWith(\"dotnet:cfo_res:\")){if(!(t in bt))throw new Error(`Unknown object id ${t}`);r=bt[t]}else r=function(e,t){if(e.startsWith(\"dotnet:array:\")){let e;if(void 0===t.items)return e=t.map((e=>e.value)),e;if(void 0===t.dimensionsDetails||1===t.dimensionsDetails.length)return e=t.items.map((e=>e.value)),e}const n={};return Object.keys(t).forEach((e=>{const r=t[e];void 0!==r.get?Object.defineProperty(n,r.name,{get:()=>vt(r.get.id,r.get.commandSet,r.get.command,r.get.buffer),set:function(e){return St(r.set.id,r.set.commandSet,r.set.command,r.set.buffer,r.set.length,r.set.valtype,e),!0}}):void 0!==r.set?Object.defineProperty(n,r.name,{get:()=>r.value,set:function(e){return St(r.set.id,r.set.commandSet,r.set.command,r.set.buffer,r.set.length,r.set.valtype,e),!0}}):n[r.name]=r.value})),n}(t,n);const o=null!=e.arguments?e.arguments.map((e=>JSON.stringify(e.value))):[],s=`const fn = ${e.functionDeclaration}; return fn.apply(proxy, [${o}]);`,a=new Function(\"proxy\",s)(r);if(void 0===a)return{type:\"undefined\"};if(Object(a)!==a)return\"object\"==typeof a&&null==a?{type:typeof a,subtype:`${a}`,value:null}:{type:typeof a,description:`${a}`,value:`${a}`};if(e.returnByValue&&null==a.subtype)return{type:\"object\",value:a};if(Object.getPrototypeOf(a)==Array.prototype){const e=Lt(a);return{type:\"object\",subtype:\"array\",className:\"Array\",description:`Array(${a.length})`,objectId:e}}return void 0!==a.value||void 0!==a.subtype?a:a==r?{type:\"object\",className:\"Object\",description:\"Object\",objectId:t}:{type:\"object\",className:\"Object\",description:\"Object\",objectId:Lt(a)}}function $t(e,t={}){return function(e,t){if(!(e in bt))throw new Error(`Could not find any object with id ${e}`);const n=bt[e],r=Object.getOwnPropertyDescriptors(n);t.accessorPropertiesOnly&&Object.keys(r).forEach((e=>{void 0===r[e].get&&Reflect.deleteProperty(r,e)}));const o=[];return Object.keys(r).forEach((e=>{let t;const n=r[e];t=\"object\"==typeof n.value?Object.assign({name:e},n):void 0!==n.value?{name:e,value:Object.assign({type:typeof n.value,description:\"\"+n.value},n)}:void 0!==n.get?{name:e,get:{className:\"Function\",description:`get ${e} () {}`,type:\"function\"}}:{name:e,value:{type:\"symbol\",value:\"<Unknown>\",description:\"<Unknown>\"}},o.push(t)})),{__value_as_json_string__:JSON.stringify(o)}}(`dotnet:cfo_res:${e}`,t)}function Lt(e){const t=\"dotnet:cfo_res:\"+yt++;return bt[t]=e,t}function Rt(e){e in bt&&delete bt[e]}function Bt(){if(ot.enablePerfMeasure)return globalThis.performance.now()}function Nt(e,t,n){if(ot.enablePerfMeasure&&e){const r=tt?{start:e}:{startTime:e},o=n?`${t}${n} `:t;globalThis.performance.measure(o,r)}}const Ct=[],Ot=new Map;function Dt(e,t,n){if(0===t||1===t||2===t||26===t)return;let r,o,s,a;o=Yr(Rn(e)),s=Yr(Bn(e)),a=Yr(Nn(e));const i=Ln(e);r=Ft(i),19===t&&(t=i);const c=Ft(t),l=Rn(e),p=n*Un;return e=>c(e+p,l,r,o,s,a)}function Ft(e){if(0===e||1===e)return;const t=yn.get(e);return t&&\"function\"==typeof t||ut(!1,`ERR41: Unknown converter for type ${e}. ${Xr}`),t}function Mt(e){return 0==Dn(e)?null:function(e){return e||ut(!1,\"Null arg\"),L(e)}(e)}function Pt(e){return 0==Dn(e)?null:function(e){return e||ut(!1,\"Null arg\"),R(e)}(e)}function Vt(e){return 0==Dn(e)?null:function(e){return e||ut(!1,\"Null arg\"),B(e)}(e)}function zt(e){return 0==Dn(e)?null:function(e){return e||ut(!1,\"Null arg\"),M(e)}(e)}function Ht(e){return 0==Dn(e)?null:function(e){return e||ut(!1,\"Null arg\"),P(e)}(e)}function Wt(e){return 0==Dn(e)?null:function(e){return e||ut(!1,\"Null arg\"),q(e)}(e)}function qt(e){return 0==Dn(e)?null:function(e){return e||ut(!1,\"Null arg\"),H(e)}(e)}function Gt(e){return 0==Dn(e)?null:function(e){return e||ut(!1,\"Null arg\"),W(e)}(e)}function Jt(e){return 0==Dn(e)?null:function(e){return e||ut(!1,\"Null arg\"),q(e)}(e)}function Xt(e){return 0==Dn(e)?null:Pn(e)}function Qt(){return null}function Yt(e){return 0===Dn(e)?null:function(e){e||ut(!1,\"Null arg\");const t=q(e);return new Date(t)}(e)}function Zt(e,t,n,r,o,s){if(0===Dn(e))return null;const a=Jn(e);let i=Vr(a);return null==i&&(i=(e,t,i)=>function(e,t,n,r,o,s,a,i){st.assert_runtime_running();const c=Xe.stackSave();try{const c=xn(6),l=In(c,2);if(Mn(l,14),Xn(l,e),s&&s(In(c,3),t),a&&a(In(c,4),n),i&&i(In(c,5),r),gn(mn.CallDelegate,c),o)return o(In(c,1))}finally{Xe.stackRestore(c)}}(a,e,t,i,n,r,o,s),i.dispose=()=>{i.isDisposed||(i.isDisposed=!0,Fr(i,a))},i.isDisposed=!1,Dr(i,a)),i}class Kt{constructor(e,t){this.promise=e,this.resolve_or_reject=t}}function en(e,t,n){const r=Dn(e);30==r&&ut(!1,\"Unexpected Task type: TaskPreCreated\");const o=rn(e,r,n);if(!1!==o)return o;const s=qn(e),a=on(n);return function(e,t){dr(),vr[0-t]=e,Object.isExtensible(e)&&(e[Rr]=t)}(a,s),a.promise}function tn(e,t,n){const r=on(n);return Gn(e,Cr(r)),Mn(e,30),r.promise}function nn(e,t,n){const r=In(e,1),o=Dn(r);if(30===o)return n;Or(Cr(n));const s=rn(r,o,t);return!1===s&&ut(!1,`Expected synchronous result, got: ${o}`),s}function rn(e,t,n){if(0===t)return null;if(29===t)return Promise.reject(an(e));if(28===t){const t=Fn(e);if(1===t)return Promise.resolve();Mn(e,t),n||(n=yn.get(t)),n||ut(!1,`Unknown sub_converter for type ${t}. ${Xr}`);const r=n(e);return Promise.resolve(r)}return!1}function on(e){const{promise:t,promise_control:n}=st.createPromiseController();return new Kt(t,((t,r,o)=>{if(29===t){const e=an(o);n.reject(e)}else if(28===t){const t=Dn(o);if(1===t)n.resolve(void 0);else{e||(e=yn.get(t)),e||ut(!1,`Unknown sub_converter for type ${t}. ${Xr}`);const r=e(o);n.resolve(r)}}else ut(!1,`Unexpected type ${t}`);Or(r)}))}function sn(e){if(0==Dn(e))return null;{const t=Qn(e);try{return Le(t)}finally{t.release()}}}function an(e){const t=Dn(e);if(0==t)return null;if(27==t)return Nr(qn(e));const n=Jn(e);let r=Vr(n);if(null==r){const t=sn(e);r=new ManagedError(t),Dr(r,n)}return r}function cn(e){if(0==Dn(e))return null;const t=qn(e),n=Nr(t);return void 0===n&&ut(!1,`JS object JSHandle ${t} was not found`),n}function ln(e){const t=Dn(e);if(0==t)return null;if(13==t)return Nr(qn(e));if(21==t)return un(e,Fn(e));if(14==t){const t=Jn(e);if(t===p)return null;let n=Vr(t);return n||(n=new ManagedObject,Dr(n,t)),n}const n=yn.get(t);return n||ut(!1,`Unknown converter for type ${t}. ${Xr}`),n(e)}function pn(e,t){return t||ut(!1,\"Expected valid element_type parameter\"),un(e,t)}function un(e,t){if(0==Dn(e))return null;-1==Kn(t)&&ut(!1,`Element type ${t} not supported`);const n=Pn(e),r=Yn(e);let s=null;if(15==t){s=new Array(r);for(let e=0;e<r;e++){const t=In(n,e);s[e]=sn(t)}o.mono_wasm_deregister_root(n)}else if(14==t){s=new Array(r);for(let e=0;e<r;e++){const t=In(n,e);s[e]=ln(t)}o.mono_wasm_deregister_root(n)}else if(13==t){s=new Array(r);for(let e=0;e<r;e++){const t=In(n,e);s[e]=cn(t)}}else if(4==t)s=Y().subarray(n,n+r).slice();else if(7==t)s=X().subarray(n>>2,(n>>2)+r).slice();else{if(10!=t)throw new Error(`NotImplementedException ${t}. ${Xr}`);s=te().subarray(n>>3,(n>>3)+r).slice()}return Xe._free(n),s}function dn(e,t){t||ut(!1,\"Expected valid element_type parameter\");const n=Pn(e),r=Yn(e);let o=null;if(4==t)o=new Span(n,r,0);else if(7==t)o=new Span(n,r,1);else{if(10!=t)throw new Error(`NotImplementedException ${t}. ${Xr}`);o=new Span(n,r,2)}return o}function fn(e,t){t||ut(!1,\"Expected valid element_type parameter\");const n=Pn(e),r=Yn(e);let o=null;if(4==t)o=new ArraySegment(n,r,0);else if(7==t)o=new ArraySegment(n,r,1);else{if(10!=t)throw new Error(`NotImplementedException ${t}. ${Xr}`);o=new ArraySegment(n,r,2)}return Dr(o,Jn(e)),o}const _n={pthreadId:0,reuseCount:0,updateCount:0,threadPrefix:\"          -    \",threadName:\"emscripten-loaded\"},mn={};function hn(e,t,n,r){if(dr(),o.mono_wasm_invoke_jsexport(t,n),An(n))throw an(In(n,0))}function gn(e,t){if(dr(),o.mono_wasm_invoke_jsexport(e,t),An(t))throw an(In(t,0))}function bn(e){const t=o.mono_wasm_assembly_find_method(ot.runtime_interop_exports_class,e,-1);if(!t)throw\"Can't find method \"+ot.runtime_interop_namespace+\".\"+ot.runtime_interop_exports_classname+\".\"+e;return t}const yn=new Map,wn=new Map,kn=Symbol.for(\"wasm bound_cs_function\"),Sn=Symbol.for(\"wasm bound_js_function\"),vn=Symbol.for(\"wasm imported_js_function\"),Un=32,En=32,Tn=32;function xn(e){const t=Un*e,n=Xe.stackAlloc(t);return _(n,t),n}function In(e,t){return e||ut(!1,\"Null args\"),e+t*Un}function An(e){return e||ut(!1,\"Null args\"),0!==Dn(e)}function jn(e,t){return e||ut(!1,\"Null signatures\"),e+t*En+Tn}function $n(e){return e||ut(!1,\"Null sig\"),R(e+0)}function Ln(e){return e||ut(!1,\"Null sig\"),R(e+16)}function Rn(e){return e||ut(!1,\"Null sig\"),R(e+20)}function Bn(e){return e||ut(!1,\"Null sig\"),R(e+24)}function Nn(e){return e||ut(!1,\"Null sig\"),R(e+28)}function Cn(e){return e||ut(!1,\"Null signatures\"),P(e+4)}function On(e){return e||ut(!1,\"Null signatures\"),P(e+0)}function Dn(e){return e||ut(!1,\"Null arg\"),R(e+12)}function Fn(e){return e||ut(!1,\"Null arg\"),R(e+13)}function Mn(e,t){e||ut(!1,\"Null arg\"),g(e+12,t)}function Pn(e){return e||ut(!1,\"Null arg\"),P(e)}function Vn(e,t){if(e||ut(!1,\"Null arg\"),\"boolean\"!=typeof t)throw new Error(`Assert failed: Value is not a Boolean: ${t} (${typeof t})`);h(e,t)}function zn(e,t){e||ut(!1,\"Null arg\"),v(e,t)}function Hn(e,t){e||ut(!1,\"Null arg\"),A(e,t.getTime())}function Wn(e,t){e||ut(!1,\"Null arg\"),A(e,t)}function qn(e){return e||ut(!1,\"Null arg\"),P(e+4)}function Gn(e,t){e||ut(!1,\"Null arg\"),v(e+4,t)}function Jn(e){return e||ut(!1,\"Null arg\"),P(e+4)}function Xn(e,t){e||ut(!1,\"Null arg\"),v(e+4,t)}function Qn(e){return e||ut(!1,\"Null arg\"),function(e){let t;if(!e)throw new Error(\"address must be a location in the native heap\");return pe.length>0?(t=pe.pop(),t._set_address(e)):t=new fe(e),t}(e)}function Yn(e){return e||ut(!1,\"Null arg\"),P(e+8)}function Zn(e,t){e||ut(!1,\"Null arg\"),v(e+8,t)}class ManagedObject{dispose(){Fr(this,p)}get isDisposed(){return this[Lr]===p}toString(){return`CsObject(gc_handle: ${this[Lr]})`}}class ManagedError extends Error{constructor(e){super(e),this.superStack=Object.getOwnPropertyDescriptor(this,\"stack\"),Object.defineProperty(this,\"stack\",{get:this.getManageStack})}getSuperStack(){if(this.superStack){if(void 0!==this.superStack.value)return this.superStack.value;if(void 0!==this.superStack.get)return this.superStack.get.call(this)}return super.stack}getManageStack(){if(this.managed_stack)return this.managed_stack;if(!st.is_runtime_running())return this.managed_stack=\"... omitted managed stack trace.\\n\"+this.getSuperStack(),this.managed_stack;{const e=this[Lr];if(e!==p){const t=function(e){st.assert_runtime_running();const t=Xe.stackSave();try{const t=xn(3),n=In(t,2);return Mn(n,16),Xn(n,e),gn(mn.GetManagedStackTrace,t),sn(In(t,1))}finally{Xe.stackRestore(t)}}(e);if(t)return this.managed_stack=t+\"\\n\"+this.getSuperStack(),this.managed_stack}}return this.getSuperStack()}dispose(){Fr(this,p)}get isDisposed(){return this[Lr]===p}}function Kn(e){return 4==e?1:7==e?4:8==e||10==e?8:15==e||14==e||13==e?Un:-1}class er{constructor(e,t,n){this._pointer=e,this._length=t,this._viewType=n}_unsafe_create_view(){const e=0==this._viewType?new Uint8Array(Y().buffer,this._pointer,this._length):1==this._viewType?new Int32Array(X().buffer,this._pointer,this._length):2==this._viewType?new Float64Array(te().buffer,this._pointer,this._length):null;if(!e)throw new Error(\"NotImplementedException\");return e}set(e,t){if(this.isDisposed)throw new Error(\"Assert failed: ObjectDisposedException\");const n=this._unsafe_create_view();if(!e||!n||e.constructor!==n.constructor)throw new Error(`Assert failed: Expected ${n.constructor}`);n.set(e,t)}copyTo(e,t){if(this.isDisposed)throw new Error(\"Assert failed: ObjectDisposedException\");const n=this._unsafe_create_view();if(!e||!n||e.constructor!==n.constructor)throw new Error(`Assert failed: Expected ${n.constructor}`);const r=n.subarray(t);e.set(r)}slice(e,t){if(this.isDisposed)throw new Error(\"Assert failed: ObjectDisposedException\");return this._unsafe_create_view().slice(e,t)}get length(){if(this.isDisposed)throw new Error(\"Assert failed: ObjectDisposedException\");return this._length}get byteLength(){if(this.isDisposed)throw new Error(\"Assert failed: ObjectDisposedException\");return 0==this._viewType?this._length:1==this._viewType?this._length<<2:2==this._viewType?this._length<<3:0}}class Span extends er{constructor(e,t,n){super(e,t,n),this.is_disposed=!1}dispose(){this.is_disposed=!0}get isDisposed(){return this.is_disposed}}class ArraySegment extends er{constructor(e,t,n){super(e,t,n)}dispose(){Fr(this,p)}get isDisposed(){return this[Lr]===p}}const tr=[null];function nr(e){const t=e.args_count,r=e.arg_marshalers,o=e.res_converter,s=e.arg_cleanup,a=e.has_cleanup,i=e.fn,c=e.fqn;return e=null,function(l){const p=Bt();try{n&&e.isDisposed;const c=new Array(t);for(let e=0;e<t;e++){const t=(0,r[e])(l);c[e]=t}const p=i(...c);if(o&&o(l,p),a)for(let e=0;e<t;e++){const t=s[e];t&&t(c[e])}}catch(e){ho(l,e)}finally{Nt(p,\"mono.callCsFunction:\",c)}}}function rr(e,t){pr.set(e,t),st.diagnosticTracing&&De(`added module imports '${e}'`)}function or(e,t,n){if(!e)throw new Error(\"Assert failed: Null reference\");e[t]=n}function sr(e,t){if(!e)throw new Error(\"Assert failed: Null reference\");return e[t]}function ar(e,t){if(!e)throw new Error(\"Assert failed: Null reference\");return t in e}function ir(e,t){if(!e)throw new Error(\"Assert failed: Null reference\");return typeof e[t]}function cr(){return globalThis}const lr=new Map,pr=new Map;function ur(e,t){dr(),e&&\"string\"==typeof e||ut(!1,\"module_name must be string\"),t&&\"string\"==typeof t||ut(!1,\"module_url must be string\");let n=lr.get(e);const r=!n;return r&&(st.diagnosticTracing&&De(`importing ES6 module '${e}' from '${t}'`),n=import(/*! webpackIgnore: true */t),lr.set(e,n)),qr((async()=>{const o=await n;return r&&(pr.set(e,o),st.diagnosticTracing&&De(`imported ES6 module '${e}' from '${t}'`)),o}))}function dr(){st.assert_runtime_running(),ot.mono_wasm_bindings_is_ready||ut(!1,\"The runtime must be initialized.\")}function fr(e){e()}const _r=\"function\"==typeof globalThis.WeakRef;function mr(e){return _r?new WeakRef(e):function(e){return{deref:()=>e,dispose:()=>{e=null}}}(e)}function hr(e,t,n,r,o,s,a){const i=`[${t}] ${n}.${r}:${o}`,c=Bt();st.diagnosticTracing&&De(`Binding [JSExport] ${n}.${r}:${o} from ${t} assembly`);const l=On(a);2!==l&&ut(!1,`Signature version ${l} mismatch.`);const p=Cn(a),u=new Array(p);for(let e=0;e<p;e++){const t=jn(a,e+2),n=Qr(t,$n(t),e+2);n||ut(!1,\"ERR43: argument marshaler must be resolved\"),u[e]=n}const d=jn(a,1);let f=$n(d);const _=20==f,m=26==f;_&&(f=30);const h=Dt(d,f,1),g={method:e,fullyQualifiedName:i,args_count:p,arg_marshalers:u,res_converter:h,is_async:_,is_discard_no_wait:m,isDisposed:!1};let b;b=_?1==p&&h?function(e){const t=e.method,n=e.arg_marshalers[0],r=e.res_converter,o=e.fullyQualifiedName;return e=null,function(e){const s=Bt();st.assert_runtime_running();const a=Xe.stackSave();try{const o=xn(3);n(o,e);let s=r(o);return hn(ot.managedThreadTID,t,o),s=nn(o,void 0,s),s}finally{Xe.stackRestore(a),Nt(s,\"mono.callCsFunction:\",o)}}}(g):2==p&&h?function(e){const t=e.method,n=e.arg_marshalers[0],r=e.arg_marshalers[1],o=e.res_converter,s=e.fullyQualifiedName;return e=null,function(e,a){const i=Bt();st.assert_runtime_running();const c=Xe.stackSave();try{const s=xn(4);n(s,e),r(s,a);let i=o(s);return hn(ot.managedThreadTID,t,s),i=nn(s,void 0,i),i}finally{Xe.stackRestore(c),Nt(i,\"mono.callCsFunction:\",s)}}}(g):gr(g):m?gr(g):0!=p||h?1!=p||h?1==p&&h?function(e){const t=e.method,n=e.arg_marshalers[0],r=e.res_converter,o=e.fullyQualifiedName;return e=null,function(e){const s=Bt();st.assert_runtime_running();const a=Xe.stackSave();try{const o=xn(3);return n(o,e),gn(t,o),r(o)}finally{Xe.stackRestore(a),Nt(s,\"mono.callCsFunction:\",o)}}}(g):2==p&&h?function(e){const t=e.method,n=e.arg_marshalers[0],r=e.arg_marshalers[1],o=e.res_converter,s=e.fullyQualifiedName;return e=null,function(e,a){const i=Bt();st.assert_runtime_running();const c=Xe.stackSave();try{const s=xn(4);return n(s,e),r(s,a),gn(t,s),o(s)}finally{Xe.stackRestore(c),Nt(i,\"mono.callCsFunction:\",s)}}}(g):gr(g):function(e){const t=e.method,n=e.arg_marshalers[0],r=e.fullyQualifiedName;return e=null,function(e){const o=Bt();st.assert_runtime_running();const s=Xe.stackSave();try{const r=xn(3);n(r,e),gn(t,r)}finally{Xe.stackRestore(s),Nt(o,\"mono.callCsFunction:\",r)}}}(g):function(e){const t=e.method,n=e.fullyQualifiedName;return e=null,function(){const e=Bt();st.assert_runtime_running();const r=Xe.stackSave();try{const e=xn(2);gn(t,e)}finally{Xe.stackRestore(r),Nt(e,\"mono.callCsFunction:\",n)}}}(g),b[kn]=g,function(e,t,n,r,o,s){const a=`${t}.${n}`.replace(/\\//g,\".\").split(\".\");let i,c=br.get(e);c||(c={},br.set(e,c),br.set(e+\".dll\",c)),i=c;for(let e=0;e<a.length;e++){const t=a[e];if(\"\"!=t){let e=i[t];void 0===e&&(e={},i[t]=e),e||ut(!1,`${t} not found while looking up ${n}`),i=e}}i[r]||(i[r]=s),i[`${r}.${o}`]=s}(t,n,r,o,s,b),Nt(c,\"mono.bindCsFunction:\",i)}function gr(e){const t=e.args_count,n=e.arg_marshalers,r=e.res_converter,o=e.method,s=e.fullyQualifiedName,a=e.is_async,i=e.is_discard_no_wait;return e=null,function(...e){const c=Bt();st.assert_runtime_running();const l=Xe.stackSave();try{const s=xn(2+t);for(let r=0;r<t;r++){const t=n[r];t&&t(s,e[r])}let c;return a&&(c=r(s)),a?(hn(ot.managedThreadTID,o,s),c=nn(s,void 0,c)):i?hn(ot.managedThreadTID,o,s):(gn(o,s),r&&(c=r(s))),c}finally{Xe.stackRestore(l),Nt(c,\"mono.callCsFunction:\",s)}}}const br=new Map;async function yr(e){return dr(),br.get(e)||await function(e){st.assert_runtime_running();const t=Xe.stackSave();try{const t=xn(3),n=In(t,1);po(In(t,2),e);let r=tn(n);return hn(ot.managedThreadTID,mn.BindAssemblyExports,t),r=nn(t,Ht,r),null==r&&(r=Promise.resolve()),r}finally{Xe.stackRestore(t)}}(e),br.get(e)||{}}const wr=\"function\"==typeof globalThis.FinalizationRegistry;let kr;const Sr=[null],vr=[null],Ur=[];let Er=1;const Tr=new Map,xr=[];let Ir=-2;function Ar(e){return e<-1}function jr(e){return e>0}function $r(e){return e<-1}wr&&(kr=new globalThis.FinalizationRegistry(Pr));const Lr=Symbol.for(\"wasm js_owned_gc_handle\"),Rr=Symbol.for(\"wasm cs_owned_js_handle\"),Br=Symbol.for(\"wasm do_not_force_dispose\");function Nr(e){return jr(e)?Sr[e]:Ar(e)?vr[0-e]:null}function Cr(e){if(dr(),e[Rr])return e[Rr];const t=Ur.length?Ur.pop():Er++;return Sr[t]=e,Object.isExtensible(e)&&(e[Rr]=t),t}function Or(e){let t;jr(e)?(t=Sr[e],Sr[e]=void 0,Ur.push(e)):Ar(e)&&(t=vr[0-e],vr[0-e]=void 0),null==t&&ut(!1,\"ObjectDisposedException\"),void 0!==t[Rr]&&(t[Rr]=void 0)}function Dr(e,t){dr(),e[Lr]=t,wr&&kr.register(e,t,e);const n=mr(e);Tr.set(t,n)}function Fr(e,t,r){var o;dr(),e&&(t=e[Lr],e[Lr]=p,wr&&kr.unregister(e)),t!==p&&Tr.delete(t)&&!r&&st.is_runtime_running()&&!zr&&function(e){e||ut(!1,\"Must be valid gc_handle\"),st.assert_runtime_running();const t=Xe.stackSave();try{const t=xn(3),r=In(t,2);Mn(r,14),Xn(r,e),n&&!$r(e)&&_n.isUI||gn(mn.ReleaseJSOwnedObjectByGCHandle,t)}finally{Xe.stackRestore(t)}}(t),$r(t)&&(o=t,xr.push(o))}function Mr(e){const t=e[Lr];if(t==p)throw new Error(\"Assert failed: ObjectDisposedException\");return t}function Pr(e){st.is_runtime_running()&&Fr(null,e)}function Vr(e){if(!e)return null;const t=Tr.get(e);return t?t.deref():null}let zr=!1;function Hr(e,t){let n=!1,r=!1;zr=!0;let o=0,s=0,a=0,i=0;const c=[...Tr.keys()];for(const e of c){const r=Tr.get(e),o=r&&r.deref();if(wr&&o&&kr.unregister(o),o){const s=\"boolean\"==typeof o[Br]&&o[Br];if(t&&Me(`Proxy of C# ${typeof o} with GCHandle ${e} was still alive. ${s?\"keeping\":\"disposing\"}.`),s)n=!0;else{const t=st.getPromiseController(o);t&&t.reject(new Error(\"WebWorker which is origin of the Task is being terminated.\")),\"function\"==typeof o.dispose&&o.dispose(),o[Lr]===e&&(o[Lr]=p),!_r&&r&&r.dispose(),a++}}}n||(Tr.clear(),wr&&(kr=new globalThis.FinalizationRegistry(Pr)));const l=(e,n)=>{const o=n[e],s=o&&\"boolean\"==typeof o[Br]&&o[Br];if(s||(n[e]=void 0),o)if(t&&Me(`Proxy of JS ${typeof o} with JSHandle ${e} was still alive. ${s?\"keeping\":\"disposing\"}.`),s)r=!0;else{const t=st.getPromiseController(o);t&&t.reject(new Error(\"WebWorker which is origin of the Task is being terminated.\")),\"function\"==typeof o.dispose&&o.dispose(),o[Rr]===e&&(o[Rr]=void 0),i++}};for(let e=0;e<Sr.length;e++)l(e,Sr);for(let e=0;e<vr.length;e++)l(e,vr);if(r||(Sr.length=1,vr.length=1,Er=1,Ur.length=0),xr.length=0,Ir=-2,e){for(const e of tr)if(e){const t=e[vn];t&&(t.disposed=!0,o++)}tr.length=1;const e=[...br.values()];for(const t of e)for(const e in t){const n=t[e][kn];n&&(n.disposed=!0,s++)}br.clear()}Fe(`forceDisposeProxies done: ${o} imports, ${s} exports, ${a} GCHandles, ${i} JSHandles.`)}function Wr(e){return Promise.resolve(e)===e||(\"object\"==typeof e||\"function\"==typeof e)&&\"function\"==typeof e.then}function qr(e){const{promise:t,promise_control:n}=pt();return e().then((e=>n.resolve(e))).catch((e=>n.reject(e))),t}const Gr=Symbol.for(\"wasm promise_holder\");class Jr extends ManagedObject{constructor(e,t,n,r){super(),this.promise=e,this.gc_handle=t,this.promiseHolderPtr=n,this.res_converter=r,this.isResolved=!1,this.isPosted=!1,this.isPostponed=!1,this.data=null,this.reason=void 0}setIsResolving(){return!0}resolve(e){st.is_runtime_running()?(this.isResolved&&ut(!1,\"resolve could be called only once\"),this.isDisposed&&ut(!1,\"resolve is already disposed.\"),this.isResolved=!0,this.complete_task_wrapper(e,null)):st.diagnosticTracing&&De(\"This promise resolution can't be propagated to managed code, mono runtime already exited.\")}reject(e){st.is_runtime_running()?(e||(e=new Error),this.isResolved&&ut(!1,\"reject could be called only once\"),this.isDisposed&&ut(!1,\"resolve is already disposed.\"),e[Gr],this.isResolved=!0,this.complete_task_wrapper(null,e)):st.diagnosticTracing&&De(\"This promise rejection can't be propagated to managed code, mono runtime already exited.\")}cancel(){if(st.is_runtime_running())if(this.isResolved&&ut(!1,\"cancel could be called only once\"),this.isDisposed&&ut(!1,\"resolve is already disposed.\"),this.isPostponed)this.isResolved=!0,void 0!==this.reason?this.complete_task_wrapper(null,this.reason):this.complete_task_wrapper(this.data,null);else{const e=this.promise;st.assertIsControllablePromise(e);const t=st.getPromiseController(e),n=new Error(\"OperationCanceledException\");n[Gr]=this,t.reject(n)}else st.diagnosticTracing&&De(\"This promise cancelation can't be propagated to managed code, mono runtime already exited.\")}complete_task_wrapper(e,t){try{this.isPosted&&ut(!1,\"Promise is already posted to managed.\"),this.isPosted=!0,Fr(this,this.gc_handle,!0),function(e,t,n,r){st.assert_runtime_running();const o=Xe.stackSave();try{const o=xn(5),s=In(o,2);Mn(s,14),Xn(s,e);const a=In(o,3);if(t)ho(a,t);else{Mn(a,0);const e=In(o,4);r||ut(!1,\"res_converter missing\"),r(e,n)}hn(ot.ioThreadTID,mn.CompleteTask,o)}finally{Xe.stackRestore(o)}}(this.gc_handle,t,e,this.res_converter||bo)}catch(e){try{st.mono_exit(1,e)}catch(e){}}}}const Xr=\"For more information see https://aka.ms/dotnet-wasm-jsinterop\";function Qr(e,t,n){if(0===t||1===t||2===t||26===t)return;let r,o,s,a;o=Ft(Rn(e)),s=Ft(Bn(e)),a=Ft(Nn(e));const i=Ln(e);r=Yr(i),19===t&&(t=i);const c=Yr(t),l=Rn(e),p=n*Un;return(e,t)=>{c(e+p,t,l,r,o,s,a)}}function Yr(e){if(0===e||1===e)return;const t=wn.get(e);return t&&\"function\"==typeof t||ut(!1,`ERR30: Unknown converter for type ${e}`),t}function Zr(e,t){null==t?Mn(e,0):(Mn(e,3),Vn(e,t))}function Kr(e,t){null==t?Mn(e,0):(Mn(e,4),function(e,t){e||ut(!1,\"Null arg\"),g(e,t)}(e,t))}function eo(e,t){null==t?Mn(e,0):(Mn(e,5),function(e,t){e||ut(!1,\"Null arg\"),b(e,t)}(e,t))}function to(e,t){null==t?Mn(e,0):(Mn(e,6),function(e,t){e||ut(!1,\"Null arg\"),S(e,t)}(e,t))}function no(e,t){null==t?Mn(e,0):(Mn(e,7),function(e,t){e||ut(!1,\"Null arg\"),v(e,t)}(e,t))}function ro(e,t){null==t?Mn(e,0):(Mn(e,8),function(e,t){if(e||ut(!1,\"Null arg\"),!Number.isSafeInteger(t))throw new Error(`Assert failed: Value is not an integer: ${t} (${typeof t})`);A(e,t)}(e,t))}function oo(e,t){null==t?Mn(e,0):(Mn(e,9),function(e,t){e||ut(!1,\"Null arg\"),x(e,t)}(e,t))}function so(e,t){null==t?Mn(e,0):(Mn(e,10),Wn(e,t))}function ao(e,t){null==t?Mn(e,0):(Mn(e,11),function(e,t){e||ut(!1,\"Null arg\"),I(e,t)}(e,t))}function io(e,t){null==t?Mn(e,0):(Mn(e,12),zn(e,t))}function co(e,t){if(null==t)Mn(e,0);else{if(!(t instanceof Date))throw new Error(\"Assert failed: Value is not a Date\");Mn(e,17),Hn(e,t)}}function lo(e,t){if(null==t)Mn(e,0);else{if(!(t instanceof Date))throw new Error(\"Assert failed: Value is not a Date\");Mn(e,18),Hn(e,t)}}function po(e,t){if(null==t)Mn(e,0);else{if(Mn(e,15),\"string\"!=typeof t)throw new Error(\"Assert failed: Value is not a String\");uo(e,t)}}function uo(e,t){{const n=Qn(e);try{!function(e,t){if(t.clear(),null!==e)if(\"symbol\"==typeof e)Re(e,t);else{if(\"string\"!=typeof e)throw new Error(\"Expected string argument, got \"+typeof e);if(0===e.length)Re(e,t);else{if(e.length<=256){const n=_e.get(e);if(n)return void t.set(n)}Be(e,t)}}}(t,n)}finally{n.release()}}}function fo(e){Mn(e,0)}function _o(e,t,r,o,s,a,i){if(null==t)return void Mn(e,0);if(!(t&&t instanceof Function))throw new Error(\"Assert failed: Value is not a Function\");const c=function(e){const r=In(e,0),l=In(e,1),p=In(e,2),u=In(e,3),d=In(e,4),f=ot.isPendingSynchronousCall;try{let e,r,f;n&&c.isDisposed,s&&(e=s(p)),a&&(r=a(u)),i&&(f=i(d)),ot.isPendingSynchronousCall=!0;const _=t(e,r,f);o&&o(l,_)}catch(e){ho(r,e)}finally{ot.isPendingSynchronousCall=f}};c[Sn]=!0,c.isDisposed=!1,c.dispose=()=>{c.isDisposed=!0},Gn(e,Cr(c)),Mn(e,25)}function mo(e,t,n,r){const o=30==Dn(e);if(null==t)return void Mn(e,0);if(!Wr(t))throw new Error(\"Assert failed: Value is not a Promise\");const s=o?Jn(e):xr.length?xr.pop():Ir--;o||(Xn(e,s),Mn(e,20));const a=new Jr(t,s,0,r);Dr(a,s),t.then((e=>a.resolve(e)),(e=>a.reject(e)))}function ho(e,t){if(null==t)Mn(e,0);else if(t instanceof ManagedError)Mn(e,16),Xn(e,Mr(t));else{if(\"object\"!=typeof t&&\"string\"!=typeof t)throw new Error(\"Assert failed: Value is not an Error \"+typeof t);Mn(e,27),uo(e,t.toString());const n=t[Rr];Gn(e,n||Cr(t))}}function go(e,t){if(null==t)Mn(e,0);else{if(void 0!==t[Lr])throw new Error(`Assert failed: JSObject proxy of ManagedObject proxy is not supported. ${Xr}`);if(\"function\"!=typeof t&&\"object\"!=typeof t)throw new Error(`Assert failed: JSObject proxy of ${typeof t} is not supported`);Mn(e,13),Gn(e,Cr(t))}}function bo(e,t){if(null==t)Mn(e,0);else{const n=t[Lr],r=typeof t;if(void 0===n)if(\"string\"===r||\"symbol\"===r)Mn(e,15),uo(e,t);else if(\"number\"===r)Mn(e,10),Wn(e,t);else{if(\"bigint\"===r)throw new Error(\"NotImplementedException: bigint\");if(\"boolean\"===r)Mn(e,3),Vn(e,t);else if(t instanceof Date)Mn(e,17),Hn(e,t);else if(t instanceof Error)ho(e,t);else if(t instanceof Uint8Array)wo(e,t,4);else if(t instanceof Float64Array)wo(e,t,10);else if(t instanceof Int32Array)wo(e,t,7);else if(Array.isArray(t))wo(e,t,14);else{if(t instanceof Int16Array||t instanceof Int8Array||t instanceof Uint8ClampedArray||t instanceof Uint16Array||t instanceof Uint32Array||t instanceof Float32Array)throw new Error(\"NotImplementedException: TypedArray\");if(Wr(t))mo(e,t);else{if(t instanceof Span)throw new Error(\"NotImplementedException: Span\");if(\"object\"!=r)throw new Error(`JSObject proxy is not supported for ${r} ${t}`);{const n=Cr(t);Mn(e,13),Gn(e,n)}}}}else{if(Mr(t),t instanceof ArraySegment)throw new Error(\"NotImplementedException: ArraySegment. \"+Xr);if(t instanceof ManagedError)Mn(e,16),Xn(e,n);else{if(!(t instanceof ManagedObject))throw new Error(\"NotImplementedException \"+r+\". \"+Xr);Mn(e,14),Xn(e,n)}}}}function yo(e,t,n){n||ut(!1,\"Expected valid element_type parameter\"),wo(e,t,n)}function wo(e,t,n){if(null==t)Mn(e,0);else{const r=Kn(n);-1==r&&ut(!1,`Element type ${n} not supported`);const s=t.length,a=r*s,i=Xe._malloc(a);if(15==n){if(!Array.isArray(t))throw new Error(\"Assert failed: Value is not an Array\");_(i,a),o.mono_wasm_register_root(i,a,\"marshal_array_to_cs\");for(let e=0;e<s;e++)po(In(i,e),t[e])}else if(14==n){if(!Array.isArray(t))throw new Error(\"Assert failed: Value is not an Array\");_(i,a),o.mono_wasm_register_root(i,a,\"marshal_array_to_cs\");for(let e=0;e<s;e++)bo(In(i,e),t[e])}else if(13==n){if(!Array.isArray(t))throw new Error(\"Assert failed: Value is not an Array\");_(i,a);for(let e=0;e<s;e++)go(In(i,e),t[e])}else if(4==n){if(!(Array.isArray(t)||t instanceof Uint8Array))throw new Error(\"Assert failed: Value is not an Array or Uint8Array\");Y().subarray(i,i+s).set(t)}else if(7==n){if(!(Array.isArray(t)||t instanceof Int32Array))throw new Error(\"Assert failed: Value is not an Array or Int32Array\");X().subarray(i>>2,(i>>2)+s).set(t)}else{if(10!=n)throw new Error(\"not implemented\");if(!(Array.isArray(t)||t instanceof Float64Array))throw new Error(\"Assert failed: Value is not an Array or Float64Array\");te().subarray(i>>3,(i>>3)+s).set(t)}zn(e,i),Mn(e,21),function(e,t){e||ut(!1,\"Null arg\"),g(e+13,t)}(e,n),Zn(e,t.length)}}function ko(e,t,n){if(n||ut(!1,\"Expected valid element_type parameter\"),t.isDisposed)throw new Error(\"Assert failed: ObjectDisposedException\");vo(n,t._viewType),Mn(e,23),zn(e,t._pointer),Zn(e,t.length)}function So(e,t,n){n||ut(!1,\"Expected valid element_type parameter\");const r=Mr(t);r||ut(!1,\"Only roundtrip of ArraySegment instance created by C#\"),vo(n,t._viewType),Mn(e,22),zn(e,t._pointer),Zn(e,t.length),Xn(e,r)}function vo(e,t){if(4==e){if(0!=t)throw new Error(\"Assert failed: Expected MemoryViewType.Byte\")}else if(7==e){if(1!=t)throw new Error(\"Assert failed: Expected MemoryViewType.Int32\")}else{if(10!=e)throw new Error(`NotImplementedException ${e} `);if(2!=t)throw new Error(\"Assert failed: Expected MemoryViewType.Double\")}}const Uo={now:function(){return Date.now()}};function Eo(e){void 0===globalThis.performance&&(globalThis.performance=Uo),e.require=Qe.require,e.scriptDirectory=st.scriptDirectory,Xe.locateFile===Xe.__locateFile&&(Xe.locateFile=st.locateFile),e.fetch=st.fetch_like,e.ENVIRONMENT_IS_WORKER=et}function To(){if(\"function\"!=typeof globalThis.fetch||\"function\"!=typeof globalThis.AbortController)throw new Error(Ye?\"Please install `node-fetch` and `node-abort-controller` npm packages to enable HTTP client support. See also https://aka.ms/dotnet-wasm-features\":\"This browser doesn't support fetch API. Please use a modern browser. See also https://aka.ms/dotnet-wasm-features\")}let xo,Io;function Ao(){if(void 0!==xo)return xo;if(\"undefined\"!=typeof Request&&\"body\"in Request.prototype&&\"function\"==typeof ReadableStream&&\"function\"==typeof TransformStream){let e=!1;const t=new Request(\"\",{body:new ReadableStream,method:\"POST\",get duplex(){return e=!0,\"half\"}}).headers.has(\"Content-Type\");xo=e&&!t}else xo=!1;return xo}function jo(){return void 0!==Io||(Io=\"undefined\"!=typeof Response&&\"body\"in Response.prototype&&\"function\"==typeof ReadableStream),Io}function $o(){return To(),dr(),{abortController:new AbortController}}function Lo(e){e.catch((e=>{e&&\"AbortError\"!==e&&\"AbortError\"!==e.name&&De(\"http muted: \"+e)}))}function Ro(e){try{e.isAborted||(e.streamWriter&&(Lo(e.streamWriter.abort()),e.isAborted=!0),e.streamReader&&(Lo(e.streamReader.cancel()),e.isAborted=!0)),e.isAborted||e.abortController.signal.aborted||e.abortController.abort(\"AbortError\")}catch(e){}}function Bo(e,t,n){n>0||ut(!1,\"expected bufferLength > 0\");const r=new Span(t,n,0).slice();return qr((async()=>{e.streamWriter||ut(!1,\"expected streamWriter\"),e.responsePromise||ut(!1,\"expected fetch promise\");try{await e.streamWriter.ready,await e.streamWriter.write(r)}catch(e){throw new Error(\"BrowserHttpWriteStream.Rejected\")}}))}function No(e){return e||ut(!1,\"expected controller\"),qr((async()=>{e.streamWriter||ut(!1,\"expected streamWriter\"),e.responsePromise||ut(!1,\"expected fetch promise\");try{await e.streamWriter.ready,await e.streamWriter.close()}catch(e){throw new Error(\"BrowserHttpWriteStream.Rejected\")}}))}function Co(e,t,n,r,o,s){const a=new TransformStream;return e.streamWriter=a.writable.getWriter(),Lo(e.streamWriter.closed),Lo(e.streamWriter.ready),Do(e,t,n,r,o,s,a.readable)}function Oo(e,t,n,r,o,s,a,i){return Do(e,t,n,r,o,s,new Span(a,i,0).slice())}function Do(e,t,n,r,o,s,a){To(),dr(),t&&\"string\"==typeof t||ut(!1,\"expected url string\"),n&&r&&Array.isArray(n)&&Array.isArray(r)&&n.length===r.length||ut(!1,\"expected headerNames and headerValues arrays\"),o&&s&&Array.isArray(o)&&Array.isArray(s)&&o.length===s.length||ut(!1,\"expected headerNames and headerValues arrays\");const i=new Headers;for(let e=0;e<n.length;e++)i.append(n[e],r[e]);const c={body:a,headers:i,signal:e.abortController.signal};\"undefined\"!=typeof ReadableStream&&a instanceof ReadableStream&&(c.duplex=\"half\");for(let e=0;e<o.length;e++)c[o[e]]=s[e];return e.responsePromise=qr((()=>st.fetch_like(t,c).then((t=>(e.response=t,null))))),e.responsePromise.then((()=>{if(e.response||ut(!1,\"expected response\"),e.responseHeaderNames=[],e.responseHeaderValues=[],e.response.headers&&e.response.headers.entries){const t=e.response.headers.entries();for(const n of t)e.responseHeaderNames.push(n[0]),e.responseHeaderValues.push(n[1])}})).catch((()=>{})),e.responsePromise}function Fo(e){var t;return null===(t=e.response)||void 0===t?void 0:t.type}function Mo(e){var t,n;return null!==(n=null===(t=e.response)||void 0===t?void 0:t.status)&&void 0!==n?n:0}function Po(e){return e.responseHeaderNames||ut(!1,\"expected responseHeaderNames\"),e.responseHeaderNames}function Vo(e){return e.responseHeaderValues||ut(!1,\"expected responseHeaderValues\"),e.responseHeaderValues}function zo(e){return qr((async()=>{const t=await e.response.arrayBuffer();return e.responseBuffer=t,e.currentBufferOffset=0,t.byteLength}))}function Ho(e,t){if(e||ut(!1,\"expected controller\"),e.responseBuffer||ut(!1,\"expected resoved arrayBuffer\"),null==e.currentBufferOffset&&ut(!1,\"expected currentBufferOffset\"),e.currentBufferOffset==e.responseBuffer.byteLength)return 0;const n=new Uint8Array(e.responseBuffer,e.currentBufferOffset);t.set(n,0);const r=Math.min(t.byteLength,n.byteLength);return e.currentBufferOffset+=r,r}function Wo(e,t,n){const r=new Span(t,n,0);return qr((async()=>{if(await e.responsePromise,e.response||ut(!1,\"expected response\"),!e.response.body)return 0;if(e.streamReader||(e.streamReader=e.response.body.getReader(),Lo(e.streamReader.closed)),e.currentStreamReaderChunk&&void 0!==e.currentBufferOffset||(e.currentStreamReaderChunk=await e.streamReader.read(),e.currentBufferOffset=0),e.currentStreamReaderChunk.done){if(e.isAborted)throw new Error(\"OperationCanceledException\");return 0}const t=e.currentStreamReaderChunk.value.byteLength-e.currentBufferOffset;t>0||ut(!1,\"expected remaining_source to be greater than 0\");const n=Math.min(t,r.byteLength),o=e.currentStreamReaderChunk.value.subarray(e.currentBufferOffset,e.currentBufferOffset+n);return r.set(o,0),e.currentBufferOffset+=n,t==n&&(e.currentStreamReaderChunk=void 0),n}))}let qo,Go=0,Jo=0;function Xo(){if(!st.isChromium)return;const e=(new Date).valueOf(),t=e+36e4;for(let n=Math.max(e+1e3,Go);n<t;n+=1e3){const t=n-e;globalThis.setTimeout(Qo,t)}Go=t}function Qo(){if(Xe.maybeExit(),st.is_runtime_running()){try{o.mono_wasm_execute_timer(),Jo++}catch(e){st.mono_exit(1,e)}Yo()}}function Yo(){Xe.maybeExit();try{for(;Jo>0;){if(--Jo,!st.is_runtime_running())return;o.mono_background_exec()}}catch(e){st.mono_exit(1,e)}}function mono_wasm_schedule_timer_tick(){if(Xe.maybeExit(),st.is_runtime_running()){qo=void 0;try{o.mono_wasm_execute_timer(),Jo++}catch(e){st.mono_exit(1,e)}}}class Zo{constructor(){this.queue=[],this.offset=0}getLength(){return this.queue.length-this.offset}isEmpty(){return 0==this.queue.length}enqueue(e){this.queue.push(e)}dequeue(){if(0===this.queue.length)return;const e=this.queue[this.offset];return this.queue[this.offset]=null,2*++this.offset>=this.queue.length&&(this.queue=this.queue.slice(this.offset),this.offset=0),e}peek(){return this.queue.length>0?this.queue[this.offset]:void 0}drain(e){for(;this.getLength();)e(this.dequeue())}}const Ko=Symbol.for(\"wasm ws_pending_send_buffer\"),es=Symbol.for(\"wasm ws_pending_send_buffer_offset\"),ts=Symbol.for(\"wasm ws_pending_send_buffer_type\"),ns=Symbol.for(\"wasm ws_pending_receive_event_queue\"),rs=Symbol.for(\"wasm ws_pending_receive_promise_queue\"),os=Symbol.for(\"wasm ws_pending_open_promise\"),ss=Symbol.for(\"wasm wasm_ws_pending_open_promise_used\"),as=Symbol.for(\"wasm wasm_ws_pending_error\"),is=Symbol.for(\"wasm ws_pending_close_promises\"),cs=Symbol.for(\"wasm ws_pending_send_promises\"),ls=Symbol.for(\"wasm ws_is_aborted\"),ps=Symbol.for(\"wasm wasm_ws_close_sent\"),us=Symbol.for(\"wasm wasm_ws_close_received\"),ds=Symbol.for(\"wasm ws_receive_status_ptr\"),fs=65536,_s=new Uint8Array;function ms(e){var t,n;return e.readyState!=WebSocket.CLOSED?null!==(t=e.readyState)&&void 0!==t?t:-1:0==e[ns].getLength()?null!==(n=e.readyState)&&void 0!==n?n:-1:WebSocket.OPEN}function hs(e,t,n){let r;!function(){if(nt)throw new Error(\"WebSockets are not supported in shell JS engine.\");if(\"function\"!=typeof globalThis.WebSocket)throw new Error(Ye?\"Please install `ws` npm package to enable networking support. See also https://aka.ms/dotnet-wasm-features\":\"This browser doesn't support WebSocket API. Please use a modern browser. See also https://aka.ms/dotnet-wasm-features\")}(),dr(),e&&\"string\"==typeof e||ut(!1,\"ERR12: Invalid uri \"+typeof e);try{r=new globalThis.WebSocket(e,t||void 0)}catch(e){throw Me(\"WebSocket error in ws_wasm_create: \"+e.toString()),e}const{promise_control:o}=pt();r[ns]=new Zo,r[rs]=new Zo,r[os]=o,r[cs]=[],r[is]=[],r[ds]=n,r.binaryType=\"arraybuffer\";const s=()=>{try{if(r[ls])return;if(!st.is_runtime_running())return;o.resolve(r),Xo()}catch(e){Me(\"failed to propagate WebSocket open event: \"+e.toString())}},a=e=>{try{if(r[ls])return;if(!st.is_runtime_running())return;!function(e,t){const n=e[ns],r=e[rs];if(\"string\"==typeof t.data)n.enqueue({type:0,data:Te(t.data),offset:0});else{if(\"ArrayBuffer\"!==t.data.constructor.name)throw new Error(\"ERR19: WebSocket receive expected ArrayBuffer\");n.enqueue({type:1,data:new Uint8Array(t.data),offset:0})}if(r.getLength()&&n.getLength()>1)throw new Error(\"ERR21: Invalid WS state\");for(;r.getLength()&&n.getLength();){const t=r.dequeue();vs(e,n,t.buffer_ptr,t.buffer_length),t.resolve()}Xo()}(r,e),Xo()}catch(e){Me(\"failed to propagate WebSocket message event: \"+e.toString())}},i=e=>{try{if(r.removeEventListener(\"message\",a),r[ls])return;if(!st.is_runtime_running())return;r[us]=!0,r.close_status=e.code,r.close_status_description=e.reason,r[ss]&&o.reject(new Error(e.reason));for(const e of r[is])e.resolve();r[rs].drain((e=>{v(n,0),v(n+4,2),v(n+8,1),e.resolve()}))}catch(e){Me(\"failed to propagate WebSocket close event: \"+e.toString())}},c=e=>{try{if(r[ls])return;if(!st.is_runtime_running())return;r.removeEventListener(\"message\",a);const t=e.message?\"WebSocket error: \"+e.message:\"WebSocket error\";Me(t),r[as]=t,Ss(r,new Error(t))}catch(e){Me(\"failed to propagate WebSocket error event: \"+e.toString())}};return r.addEventListener(\"message\",a),r.addEventListener(\"open\",s,{once:!0}),r.addEventListener(\"close\",i,{once:!0}),r.addEventListener(\"error\",c,{once:!0}),r.dispose=()=>{r.removeEventListener(\"message\",a),r.removeEventListener(\"open\",s),r.removeEventListener(\"close\",i),r.removeEventListener(\"error\",c),ks(r)},r}function gs(e){if(e||ut(!1,\"ERR17: expected ws instance\"),e[as])return Us(e[as]);const t=e[os];return e[ss]=!0,t.promise}function bs(e,t,n,r,o){if(e||ut(!1,\"ERR17: expected ws instance\"),e[as])return Us(e[as]);if(e[ls]||e[ps])return Us(\"InvalidState: The WebSocket is not connected.\");if(e.readyState==WebSocket.CLOSED)return null;const s=function(e,t,n,r){let o=e[Ko],s=0;const a=t.byteLength;if(o){if(s=e[es],n=e[ts],0!==a){if(s+a>o.length){const n=new Uint8Array(1.5*(s+a+50));n.set(o,0),n.subarray(s).set(t),e[Ko]=o=n}else o.subarray(s).set(t);s+=a,e[es]=s}}else r?0!==a&&(o=t,s=a):(0!==a&&(o=t.slice(),s=a,e[es]=s,e[Ko]=o),e[ts]=n);return r?0==s||null==o?_s:0===n?function(e){return void 0===ye?Xe.UTF8ArrayToString(e,0,e.byteLength):ye.decode(e)}(Ne(o,0,s)):o.subarray(0,s):null}(e,new Uint8Array(Y().buffer,t,n),r,o);return o&&s?function(e,t){if(e.send(t),e[Ko]=null,e.bufferedAmount<fs)return null;const{promise:n,promise_control:r}=pt(),o=e[cs];o.push(r);let s=1;const a=()=>{try{if(0===e.bufferedAmount)r.resolve();else{const t=e.readyState;if(t!=WebSocket.OPEN&&t!=WebSocket.CLOSING)r.reject(new Error(`InvalidState: ${t} The WebSocket is not connected.`));else if(!r.isDone)return globalThis.setTimeout(a,s),void(s=Math.min(1.5*s,1e3))}const t=o.indexOf(r);t>-1&&o.splice(t,1)}catch(e){Me(\"WebSocket error in web_socket_send_and_wait: \"+e.toString()),r.reject(e)}};return globalThis.setTimeout(a,0),n}(e,s):null}function ys(e,t,n){if(e||ut(!1,\"ERR18: expected ws instance\"),e[as])return Us(e[as]);if(e[ls]){const t=e[ds];return v(t,0),v(t+4,2),v(t+8,1),null}const r=e[ns],o=e[rs];if(r.getLength())return 0!=o.getLength()&&ut(!1,\"ERR20: Invalid WS state\"),vs(e,r,t,n),null;if(e[us]){const t=e[ds];return v(t,0),v(t+4,2),v(t+8,1),null}const{promise:s,promise_control:a}=pt(),i=a;return i.buffer_ptr=t,i.buffer_length=n,o.enqueue(i),s}function ws(e,t,n,r){if(e||ut(!1,\"ERR19: expected ws instance\"),e[ls]||e[ps]||e.readyState==WebSocket.CLOSED)return null;if(e[as])return Us(e[as]);if(e[ps]=!0,r){const{promise:r,promise_control:o}=pt();return e[is].push(o),\"string\"==typeof n?e.close(t,n):e.close(t),r}return\"string\"==typeof n?e.close(t,n):e.close(t),null}function ks(e){if(e||ut(!1,\"ERR18: expected ws instance\"),!e[ls]&&!e[ps]){e[ls]=!0,Ss(e,new Error(\"OperationCanceledException\"));try{e.close(1e3,\"Connection was aborted.\")}catch(e){Me(\"WebSocket error in ws_wasm_abort: \"+e.toString())}}}function Ss(e,t){const n=e[os],r=e[ss];n&&r&&n.reject(t);for(const n of e[is])n.reject(t);for(const n of e[cs])n.reject(t);e[rs].drain((e=>{e.reject(t)}))}function vs(e,t,n,r){const o=t.peek(),s=Math.min(r,o.data.length-o.offset);if(s>0){const e=o.data.subarray(o.offset,o.offset+s);new Uint8Array(Y().buffer,n,r).set(e,0),o.offset+=s}const a=o.data.length===o.offset?1:0;a&&t.dequeue();const i=e[ds];v(i,s),v(i+4,o.type),v(i+8,a)}function Us(e){return function(e){const{promise:t,promise_control:n}=pt();return e.then((e=>n.resolve(e))).catch((e=>n.reject(e))),t}(Promise.reject(new Error(e)))}function Es(e,t,n){st.diagnosticTracing&&De(`Loaded:${e.name} as ${e.behavior} size ${n.length} from ${t}`);const r=Bt(),s=\"string\"==typeof e.virtualPath?e.virtualPath:e.name;let a=null;switch(e.behavior){case\"dotnetwasm\":case\"js-module-threads\":case\"js-module-globalization\":case\"symbols\":case\"segmentation-rules\":break;case\"resource\":case\"assembly\":case\"pdb\":st._loaded_files.push({url:t,file:s});case\"heap\":case\"icu\":a=function(e){const t=e.length+16;let n=Xe._sbrk(t);if(n<=0){if(n=Xe._sbrk(t),n<=0)throw Pe(`sbrk failed to allocate ${t} bytes, and failed upon retry.`),new Error(\"Out of memory\");Me(`sbrk failed to allocate ${t} bytes, but succeeded upon retry!`)}return new Uint8Array(Y().buffer,n,e.length).set(e),n}(n);break;case\"vfs\":{const e=s.lastIndexOf(\"/\");let t=e>0?s.substring(0,e):null,r=e>0?s.substring(e+1):s;r.startsWith(\"/\")&&(r=r.substring(1)),t?(t.startsWith(\"/\")||(t=\"/\"+t),De(`Creating directory '${t}'`),Xe.FS_createPath(\"/\",t,!0,!0)):t=\"/\",st.diagnosticTracing&&De(`Creating file '${r}' in directory '${t}'`),Xe.FS_createDataFile(t,r,n,!0,!0,!0);break}default:throw new Error(`Unrecognized asset behavior:${e.behavior}, for asset ${e.name}`)}if(\"assembly\"===e.behavior){if(!o.mono_wasm_add_assembly(s,a,n.length)){const e=st._loaded_files.findIndex((e=>e.file==s));st._loaded_files.splice(e,1)}}else\"pdb\"===e.behavior?o.mono_wasm_add_assembly(s,a,n.length):\"icu\"===e.behavior?function(e){if(!o.mono_wasm_load_icu_data(e))throw new Error(\"Failed to load ICU data\")}(a):\"resource\"===e.behavior&&o.mono_wasm_add_satellite_assembly(s,e.culture||\"\",a,n.length);Nt(r,\"mono.instantiateAsset:\",e.name),++st.actual_instantiated_assets_count}async function Ts(e){try{const n=await e.pendingDownloadInternal.response;t=await n.text(),ze&&ut(!1,\"Another symbol map was already loaded\"),ze=t,st.diagnosticTracing&&De(`Deferred loading of ${t.length}ch symbol map`)}catch(t){Fe(`Error loading symbol file ${e.name}: ${JSON.stringify(t)}`)}var t}async function xs(e){try{const t=await e.pendingDownloadInternal.response,n=await t.json();at.setSegmentationRulesFromJson(n)}catch(t){Fe(`Error loading static json asset ${e.name}: ${JSON.stringify(t)}`)}}function Is(){return st.loadedFiles}const As={};function js(e){let t=As[e];if(\"string\"!=typeof t){const n=o.mono_jiterp_get_opcode_info(e,0);As[e]=t=xe(n)}return t}const $s=2,Ls=64,Rs=64,Bs={};class Ns{constructor(e){this.locals=new Map,this.permanentFunctionTypeCount=0,this.permanentFunctionTypes={},this.permanentFunctionTypesByShape={},this.permanentFunctionTypesByIndex={},this.functionTypesByIndex={},this.permanentImportedFunctionCount=0,this.permanentImportedFunctions={},this.nextImportIndex=0,this.functions=[],this.estimatedExportBytes=0,this.frame=0,this.traceBuf=[],this.branchTargets=new Set,this.constantSlots=[],this.backBranchOffsets=[],this.callHandlerReturnAddresses=[],this.nextConstantSlot=0,this.backBranchTraceLevel=0,this.compressImportNames=!1,this.lockImports=!1,this._assignParameterIndices=e=>{let t=0;for(const n in e)this.locals.set(n,t),t++;return t},this.stack=[new Cs],this.clear(e),this.cfg=new Os(this),this.defineType(\"__cpp_exception\",{ptr:127},64,!0)}clear(e){this.options=pa(),this.stackSize=1,this.inSection=!1,this.inFunction=!1,this.lockImports=!1,this.locals.clear(),this.functionTypeCount=this.permanentFunctionTypeCount,this.functionTypes=Object.create(this.permanentFunctionTypes),this.functionTypesByShape=Object.create(this.permanentFunctionTypesByShape),this.functionTypesByIndex=Object.create(this.permanentFunctionTypesByIndex),this.nextImportIndex=0,this.importedFunctionCount=0,this.importedFunctions=Object.create(this.permanentImportedFunctions);for(const e in this.importedFunctions)this.importedFunctions[e].index=void 0;this.functions.length=0,this.estimatedExportBytes=0,this.argumentCount=0,this.current.clear(),this.traceBuf.length=0,this.branchTargets.clear(),this.activeBlocks=0,this.nextConstantSlot=0,this.constantSlots.length=this.options.useConstants?e:0;for(let e=0;e<this.constantSlots.length;e++)this.constantSlots[e]=0;this.backBranchOffsets.length=0,this.callHandlerReturnAddresses.length=0,this.allowNullCheckOptimization=this.options.eliminateNullChecks,this.containsSimd=!1,this.containsAtomics=!1}_push(){this.stackSize++,this.stackSize>=this.stack.length&&this.stack.push(new Cs),this.current.clear()}_pop(e){if(this.stackSize<=1)throw new Error(\"Stack empty\");const t=this.current;return this.stackSize--,e?(this.appendULeb(t.size),t.copyTo(this.current),null):t.getArrayView(!1).slice(0,t.size)}setImportFunction(e,t){const n=this.importedFunctions[e];if(!n)throw new Error(\"No import named \"+e);n.func=t}getExceptionTag(){const e=Xe.wasmExports.__cpp_exception;return void 0!==e&&(e instanceof WebAssembly.Tag||ut(!1,`expected __cpp_exception export from dotnet.wasm to be WebAssembly.Tag but was ${e}`)),e}getWasmImports(){const e=ot.getMemory();e instanceof WebAssembly.Memory||ut(!1,`expected heap import to be WebAssembly.Memory but was ${e}`);const t=this.getExceptionTag(),n={c:this.getConstants(),m:{h:e}};t&&(n.x={e:t});const r=this.getImportsToEmit();for(let e=0;e<r.length;e++){const t=r[e];if(\"function\"!=typeof t.func)throw new Error(`Import '${t.name}' not found or not a function`);const o=this.getCompressedName(t);let s=n[t.module];s||(s=n[t.module]={}),s[o]=t.func}return n}get bytesGeneratedSoFar(){const e=this.compressImportNames?8:20;return this.stack[0].size+32+this.importedFunctionCount*e+2*this.functions.length+this.estimatedExportBytes}get current(){return this.stack[this.stackSize-1]}get size(){return this.current.size}appendU8(e){if(e!=e>>>0||e>255)throw new Error(`Byte out of range: ${e}`);return this.current.appendU8(e)}appendSimd(e,t){return this.current.appendU8(253),0|e||0===e&&!0===t||ut(!1,\"Expected non-v128_load simd opcode or allowLoad==true\"),this.current.appendULeb(e)}appendAtomic(e,t){return this.current.appendU8(254),0|e||0===e&&!0===t||ut(!1,\"Expected non-notify atomic opcode or allowNotify==true\"),this.current.appendU8(e)}appendU32(e){return this.current.appendU32(e)}appendF32(e){return this.current.appendF32(e)}appendF64(e){return this.current.appendF64(e)}appendBoundaryValue(e,t){return this.current.appendBoundaryValue(e,t)}appendULeb(e){return this.current.appendULeb(e)}appendLeb(e){return this.current.appendLeb(e)}appendLebRef(e,t){return this.current.appendLebRef(e,t)}appendBytes(e){return this.current.appendBytes(e)}appendName(e){return this.current.appendName(e)}ret(e){this.ip_const(e),this.appendU8(15)}i32_const(e){this.appendU8(65),this.appendLeb(e)}ptr_const(e){let t=this.options.useConstants?this.constantSlots.indexOf(e):-1;this.options.useConstants&&t<0&&this.nextConstantSlot<this.constantSlots.length&&(t=this.nextConstantSlot++,this.constantSlots[t]=e),t>=0?(this.appendU8(35),this.appendLeb(t)):this.i32_const(e)}ip_const(e){this.appendU8(65),this.appendLeb(e-this.base)}i52_const(e){this.appendU8(66),this.appendLeb(e)}v128_const(e){if(0===e)this.local(\"v128_zero\");else{if(\"object\"!=typeof e)throw new Error(\"Expected v128_const arg to be 0 or a Uint8Array\");{16!==e.byteLength&&ut(!1,\"Expected v128_const arg to be 16 bytes in size\");let t=!0;for(let n=0;n<16;n++)0!==e[n]&&(t=!1);t?this.local(\"v128_zero\"):(this.appendSimd(12),this.appendBytes(e))}}}defineType(e,t,n,r){if(this.functionTypes[e])throw new Error(`Function type ${e} already defined`);if(r&&this.functionTypeCount>this.permanentFunctionTypeCount)throw new Error(\"New permanent function types cannot be defined after non-permanent ones\");let o=\"\";for(const e in t)o+=t[e]+\",\";o+=n;let s=this.functionTypesByShape[o];\"number\"!=typeof s&&(s=this.functionTypeCount++,r?(this.permanentFunctionTypeCount++,this.permanentFunctionTypesByShape[o]=s,this.permanentFunctionTypesByIndex[s]=[t,Object.values(t).length,n]):(this.functionTypesByShape[o]=s,this.functionTypesByIndex[s]=[t,Object.values(t).length,n]));const a=[s,t,n,`(${JSON.stringify(t)}) -> ${n}`,r];return r?this.permanentFunctionTypes[e]=a:this.functionTypes[e]=a,s}generateTypeSection(){this.beginSection(1),this.appendULeb(this.functionTypeCount);for(let e=0;e<this.functionTypeCount;e++){const t=this.functionTypesByIndex[e][0],n=this.functionTypesByIndex[e][1],r=this.functionTypesByIndex[e][2];this.appendU8(96),this.appendULeb(n);for(const e in t)this.appendU8(t[e]);64!==r?(this.appendULeb(1),this.appendU8(r)):this.appendULeb(0)}this.endSection()}getImportedFunctionTable(){const e={};for(const t in this.importedFunctions){const n=this.importedFunctions[t];e[this.getCompressedName(n)]=n.func}return e}getCompressedName(e){if(!this.compressImportNames||\"number\"!=typeof e.index)return e.name;let t=Bs[e.index];return\"string\"!=typeof t&&(Bs[e.index]=t=e.index.toString(36)),t}getImportsToEmit(){const e=[];for(const t in this.importedFunctions){const n=this.importedFunctions[t];\"number\"==typeof n.index&&e.push(n)}return e.sort(((e,t)=>e.index-t.index)),e}_generateImportSection(e){const t=this.getImportsToEmit();if(this.lockImports=!0,!1!==e)throw new Error(\"function table imports are disabled\");const n=void 0!==this.getExceptionTag();this.beginSection(2),this.appendULeb(1+(n?1:0)+t.length+this.constantSlots.length+(!1!==e?1:0));for(let e=0;e<t.length;e++){const n=t[e];this.appendName(n.module),this.appendName(this.getCompressedName(n)),this.appendU8(0),this.appendU8(n.typeIndex)}for(let e=0;e<this.constantSlots.length;e++)this.appendName(\"c\"),this.appendName(e.toString(36)),this.appendU8(3),this.appendU8(127),this.appendU8(0);this.appendName(\"m\"),this.appendName(\"h\"),this.appendU8(2),this.appendU8(0),this.appendULeb(1),n&&(this.appendName(\"x\"),this.appendName(\"e\"),this.appendU8(4),this.appendU8(0),this.appendULeb(this.getTypeIndex(\"__cpp_exception\"))),!1!==e&&(this.appendName(\"f\"),this.appendName(\"f\"),this.appendU8(1),this.appendU8(112),this.appendU8(0),this.appendULeb(1))}defineImportedFunction(e,t,n,r,o){if(this.lockImports)throw new Error(\"Import section already generated\");if(r&&this.importedFunctionCount>0)throw new Error(\"New permanent imports cannot be defined after any indexes have been assigned\");const s=this.functionTypes[n];if(!s)throw new Error(\"No function type named \"+n);if(r&&!s[4])throw new Error(\"A permanent import must have a permanent function type\");const a=s[0],i=r?this.permanentImportedFunctions:this.importedFunctions;if(\"number\"==typeof o&&(o=zs().get(o)),\"function\"!=typeof o&&void 0!==o)throw new Error(`Value passed for imported function ${t} was not a function or valid function pointer or undefined`);return i[t]={index:void 0,typeIndex:a,module:e,name:t,func:o}}markImportAsUsed(e){const t=this.importedFunctions[e];if(!t)throw new Error(\"No imported function named \"+e);\"number\"!=typeof t.index&&(t.index=this.importedFunctionCount++)}getTypeIndex(e){const t=this.functionTypes[e];if(!t)throw new Error(\"No type named \"+e);return t[0]}defineFunction(e,t){const n={index:this.functions.length,name:e.name,typeName:e.type,typeIndex:this.getTypeIndex(e.type),export:e.export,locals:e.locals,generator:t,error:null,blob:null};return this.functions.push(n),n.export&&(this.estimatedExportBytes+=n.name.length+8),n}emitImportsAndFunctions(e){let t=0;for(let e=0;e<this.functions.length;e++){const n=this.functions[e];n.export&&t++,this.beginFunction(n.typeName,n.locals);try{n.blob=n.generator()}finally{try{n.blob||(n.blob=this.endFunction(!1))}catch(e){}}}this._generateImportSection(e),this.beginSection(3),this.appendULeb(this.functions.length);for(let e=0;e<this.functions.length;e++)this.appendULeb(this.functions[e].typeIndex);this.beginSection(7),this.appendULeb(t);for(let e=0;e<this.functions.length;e++){const t=this.functions[e];t.export&&(this.appendName(t.name),this.appendU8(0),this.appendULeb(this.importedFunctionCount+e))}this.beginSection(10),this.appendULeb(this.functions.length);for(let e=0;e<this.functions.length;e++){const t=this.functions[e];t.blob||ut(!1,`expected function ${t.name} to have a body`),this.appendULeb(t.blob.length),this.appendBytes(t.blob)}this.endSection()}call_indirect(){throw new Error(\"call_indirect unavailable\")}callImport(e){const t=this.importedFunctions[e];if(!t)throw new Error(\"No imported function named \"+e);if(\"number\"!=typeof t.index){if(this.lockImports)throw new Error(\"Import section was emitted before assigning an index to import named \"+e);t.index=this.importedFunctionCount++}this.appendU8(16),this.appendULeb(t.index)}beginSection(e){this.inSection&&this._pop(!0),this.appendU8(e),this._push(),this.inSection=!0}endSection(){if(!this.inSection)throw new Error(\"Not in section\");this.inFunction&&this.endFunction(!0),this._pop(!0),this.inSection=!1}_assignLocalIndices(e,t,n,r){e[127]=0,e[126]=0,e[125]=0,e[124]=0,e[123]=0;for(const n in t){const o=t[n];e[o]<=0&&r++,e[o]++}const o=e[127],s=o+e[126],a=s+e[125],i=a+e[124];e[127]=0,e[126]=0,e[125]=0,e[124]=0,e[123]=0;for(const r in t){const c=t[r];let l,p=0;switch(c){case 127:l=0;break;case 126:l=o;break;case 125:l=s;break;case 124:l=a;break;case 123:l=i;break;default:throw new Error(`Unimplemented valtype: ${c}`)}p=e[c]+++l+n,this.locals.set(r,p)}return r}beginFunction(e,t){if(this.inFunction)throw new Error(\"Already in function\");this._push();const n=this.functionTypes[e];this.locals.clear(),this.branchTargets.clear();let r={};const o=[127,126,125,124,123];let s=0;const a=this._assignParameterIndices(n[1]);t?s=this._assignLocalIndices(r,t,a,s):r={},this.appendULeb(s);for(let e=0;e<o.length;e++){const t=o[e],n=r[t];n&&(this.appendULeb(n),this.appendU8(t))}this.inFunction=!0}endFunction(e){if(!this.inFunction)throw new Error(\"Not in function\");if(this.activeBlocks>0)throw new Error(`${this.activeBlocks} unclosed block(s) at end of function`);const t=this._pop(e);return this.inFunction=!1,t}block(e,t){const n=this.appendU8(t||2);return e?this.appendU8(e):this.appendU8(64),this.activeBlocks++,n}endBlock(){if(this.activeBlocks<=0)throw new Error(\"No blocks active\");this.activeBlocks--,this.appendU8(11)}arg(e,t){const n=\"string\"==typeof e?this.locals.has(e)?this.locals.get(e):void 0:e;if(\"number\"!=typeof n)throw new Error(\"No local named \"+e);t&&this.appendU8(t),this.appendULeb(n)}local(e,t){const n=\"string\"==typeof e?this.locals.has(e)?this.locals.get(e):void 0:e+this.argumentCount;if(\"number\"!=typeof n)throw new Error(\"No local named \"+e);t?this.appendU8(t):this.appendU8(32),this.appendULeb(n)}appendMemarg(e,t){this.appendULeb(t),this.appendULeb(e)}lea(e,t){\"string\"==typeof e?this.local(e):this.i32_const(e),this.i32_const(t),this.appendU8(106)}getArrayView(e){if(this.stackSize>1)throw new Error(\"Jiterpreter block stack not empty\");return this.stack[0].getArrayView(e)}getConstants(){const e={};for(let t=0;t<this.constantSlots.length;t++)e[t.toString(36)]=this.constantSlots[t];return e}}class Cs{constructor(){this.textBuf=new Uint8Array(1024),this.capacity=16384,this.buffer=Xe._malloc(this.capacity),Y().fill(0,this.buffer,this.buffer+this.capacity),this.size=0,this.clear(),\"function\"==typeof TextEncoder&&(this.encoder=new TextEncoder)}clear(){this.size=0}appendU8(e){if(this.size>=this.capacity)throw new Error(\"Buffer full\");const t=this.size;return Y()[this.buffer+this.size++]=e,t}appendU32(e){const t=this.size;return o.mono_jiterp_write_number_unaligned(this.buffer+this.size,e,0),this.size+=4,t}appendI32(e){const t=this.size;return o.mono_jiterp_write_number_unaligned(this.buffer+this.size,e,1),this.size+=4,t}appendF32(e){const t=this.size;return o.mono_jiterp_write_number_unaligned(this.buffer+this.size,e,2),this.size+=4,t}appendF64(e){const t=this.size;return o.mono_jiterp_write_number_unaligned(this.buffer+this.size,e,3),this.size+=8,t}appendBoundaryValue(e,t){if(this.size+8>=this.capacity)throw new Error(\"Buffer full\");const n=o.mono_jiterp_encode_leb_signed_boundary(this.buffer+this.size,e,t);if(n<1)throw new Error(`Failed to encode ${e} bit boundary value with sign ${t}`);return this.size+=n,n}appendULeb(e){if(\"number\"!=typeof e&&ut(!1,`appendULeb expected number but got ${e}`),e>=0||ut(!1,\"cannot pass negative value to appendULeb\"),e<127){if(this.size+1>=this.capacity)throw new Error(\"Buffer full\");return this.appendU8(e),1}if(this.size+8>=this.capacity)throw new Error(\"Buffer full\");const t=o.mono_jiterp_encode_leb52(this.buffer+this.size,e,0);if(t<1)throw new Error(`Failed to encode value '${e}' as unsigned leb`);return this.size+=t,t}appendLeb(e){if(\"number\"!=typeof e&&ut(!1,`appendLeb expected number but got ${e}`),this.size+8>=this.capacity)throw new Error(\"Buffer full\");const t=o.mono_jiterp_encode_leb52(this.buffer+this.size,e,1);if(t<1)throw new Error(`Failed to encode value '${e}' as signed leb`);return this.size+=t,t}appendLebRef(e,t){if(this.size+8>=this.capacity)throw new Error(\"Buffer full\");const n=o.mono_jiterp_encode_leb64_ref(this.buffer+this.size,e,t?1:0);if(n<1)throw new Error(\"Failed to encode value as leb\");return this.size+=n,n}copyTo(e,t){\"number\"!=typeof t&&(t=this.size),Y().copyWithin(e.buffer+e.size,this.buffer,this.buffer+t),e.size+=t}appendBytes(e,t){const n=this.size,r=Y();return e.buffer===r.buffer?(\"number\"!=typeof t&&(t=e.length),r.copyWithin(this.buffer+n,e.byteOffset,e.byteOffset+t),this.size+=t):(\"number\"==typeof t&&(e=new Uint8Array(e.buffer,e.byteOffset,t)),this.getArrayView(!0).set(e,this.size),this.size+=e.length),n}appendName(e){let t=e.length,n=1===e.length?e.charCodeAt(0):-1;if(n>127&&(n=-1),t&&n<0)if(this.encoder)t=this.encoder.encodeInto(e,this.textBuf).written||0;else for(let n=0;n<t;n++){const t=e.charCodeAt(n);if(t>127)throw new Error(\"Out of range character and no TextEncoder available\");this.textBuf[n]=t}this.appendULeb(t),n>=0?this.appendU8(n):t>1&&this.appendBytes(this.textBuf,t)}getArrayView(e){return new Uint8Array(Y().buffer,this.buffer,e?this.capacity:this.size)}}class Os{constructor(e){this.segments=[],this.backBranchTargets=null,this.lastSegmentEnd=0,this.overheadBytes=0,this.blockStack=[],this.backDispatchOffsets=[],this.dispatchTable=new Map,this.observedBackBranchTargets=new Set,this.trace=0,this.builder=e}initialize(e,t,n){this.segments.length=0,this.blockStack.length=0,this.startOfBody=e,this.backBranchTargets=t,this.base=this.builder.base,this.ip=this.lastSegmentStartIp=this.firstOpcodeIp=this.builder.base,this.lastSegmentEnd=0,this.overheadBytes=10,this.dispatchTable.clear(),this.observedBackBranchTargets.clear(),this.trace=n,this.backDispatchOffsets.length=0}entry(e){this.entryIp=e;const t=o.mono_jiterp_get_opcode_info(675,1);return this.firstOpcodeIp=e+2*t,this.appendBlob(),1!==this.segments.length&&ut(!1,\"expected 1 segment\"),\"blob\"!==this.segments[0].type&&ut(!1,\"expected blob\"),this.entryBlob=this.segments[0],this.segments.length=0,this.overheadBytes+=9,this.backBranchTargets&&(this.overheadBytes+=20,this.overheadBytes+=this.backBranchTargets.length),this.firstOpcodeIp}appendBlob(){this.builder.current.size!==this.lastSegmentEnd&&(this.segments.push({type:\"blob\",ip:this.lastSegmentStartIp,start:this.lastSegmentEnd,length:this.builder.current.size-this.lastSegmentEnd}),this.lastSegmentStartIp=this.ip,this.lastSegmentEnd=this.builder.current.size,this.overheadBytes+=2)}startBranchBlock(e,t){this.appendBlob(),this.segments.push({type:\"branch-block-header\",ip:e,isBackBranchTarget:t}),this.overheadBytes+=1}branch(e,t,n){t&&this.observedBackBranchTargets.add(e),this.appendBlob(),this.segments.push({type:\"branch\",from:this.ip,target:e,isBackward:t,branchType:n}),this.overheadBytes+=4,t&&(this.overheadBytes+=4)}emitBlob(e,t){const n=t.subarray(e.start,e.start+e.length);this.builder.appendBytes(n)}generate(){this.appendBlob();const e=this.builder.endFunction(!1);this.builder._push(),this.builder.base=this.base,this.emitBlob(this.entryBlob,e),this.backBranchTargets&&this.builder.block(64,3);for(let e=0;e<this.segments.length;e++){const t=this.segments[e];\"branch-block-header\"===t.type&&this.blockStack.push(t.ip)}this.blockStack.sort(((e,t)=>e-t));for(let e=0;e<this.blockStack.length;e++)this.builder.block(64);if(this.backBranchTargets){this.backDispatchOffsets.length=0;for(let e=0;e<this.backBranchTargets.length;e++){const t=2*this.backBranchTargets[e]+this.startOfBody;this.blockStack.indexOf(t)<0||this.observedBackBranchTargets.has(t)&&(this.dispatchTable.set(t,this.backDispatchOffsets.length+1),this.backDispatchOffsets.push(t))}if(0===this.backDispatchOffsets.length)this.trace>0&&Fe(\"No back branch targets were reachable after filtering\");else if(1===this.backDispatchOffsets.length)this.trace>0&&(this.backDispatchOffsets[0]===this.entryIp?Fe(`Exactly one back dispatch offset and it was the entry point 0x${this.entryIp.toString(16)}`):Fe(`Exactly one back dispatch offset and it was 0x${this.backDispatchOffsets[0].toString(16)}`)),this.builder.local(\"disp\"),this.builder.appendU8(13),this.builder.appendULeb(this.blockStack.indexOf(this.backDispatchOffsets[0]));else{this.trace>0&&Fe(`${this.backDispatchOffsets.length} back branch offsets after filtering.`),this.builder.block(64),this.builder.block(64),this.builder.local(\"disp\"),this.builder.appendU8(14),this.builder.appendULeb(this.backDispatchOffsets.length+1),this.builder.appendULeb(1);for(let e=0;e<this.backDispatchOffsets.length;e++)this.builder.appendULeb(this.blockStack.indexOf(this.backDispatchOffsets[e])+2);this.builder.appendULeb(0),this.builder.endBlock(),this.builder.appendU8(0),this.builder.endBlock()}this.backDispatchOffsets.length>0&&this.blockStack.push(0)}this.trace>1&&Fe(`blockStack=${this.blockStack}`);for(let t=0;t<this.segments.length;t++){const n=this.segments[t];switch(n.type){case\"blob\":this.emitBlob(n,e);break;case\"branch-block-header\":{const e=this.blockStack.indexOf(n.ip);0!==e&&ut(!1,`expected ${n.ip} on top of blockStack but found it at index ${e}, top is ${this.blockStack[0]}`),this.builder.endBlock(),this.blockStack.shift();break}case\"branch\":{const e=n.isBackward?0:n.target;let t,r=this.blockStack.indexOf(e),o=!1;if(n.isBackward&&(this.dispatchTable.has(n.target)?(t=this.dispatchTable.get(n.target),this.trace>1&&Fe(`backward br from ${n.from.toString(16)} to ${n.target.toString(16)}: disp=${t}`),o=!0):(this.trace>0&&Fe(`br from ${n.from.toString(16)} to ${n.target.toString(16)} failed: back branch target not in dispatch table`),r=-1)),r>=0||o){let e=0;switch(n.branchType){case 2:this.builder,n.from,void 0!==t&&(this.builder.i32_const(t),this.builder.local(\"disp\",33)),this.builder.appendU8(12);break;case 3:this.builder.block(64,4),this.builder,n.from,void 0!==t&&(this.builder.i32_const(t),this.builder.local(\"disp\",33)),this.builder.appendU8(12),e=1;break;case 0:void 0!==t&&(this.builder.i32_const(t),this.builder.local(\"disp\",33)),this.builder.appendU8(12);break;case 1:void 0!==t?(this.builder.block(64,4),this.builder.i32_const(t),this.builder.local(\"disp\",33),e=1,this.builder.appendU8(12)):this.builder.appendU8(13);break;default:throw new Error(\"Unimplemented branch type\")}this.builder.appendULeb(e+r),e&&this.builder.endBlock(),this.trace>1&&Fe(`br from ${n.from.toString(16)} to ${n.target.toString(16)} breaking out ${e+r+1} level(s)`)}else{if(this.trace>0){const e=this.base;n.target>=e&&n.target<this.exitIp?Fe(`br from ${n.from.toString(16)} to ${n.target.toString(16)} failed (inside of trace!)`):this.trace>1&&Fe(`br from ${n.from.toString(16)} to ${n.target.toString(16)} failed (outside of trace 0x${e.toString(16)} - 0x${this.exitIp.toString(16)})`)}const e=1===n.branchType||3===n.branchType;e&&this.builder.block(64,4),Ps(this.builder,n.target,4),e&&this.builder.endBlock()}break}default:throw new Error(\"unreachable\")}}return this.backBranchTargets&&(this.blockStack.length<=1||ut(!1,\"expected one or zero entries in the block stack at the end\"),this.blockStack.length&&this.blockStack.shift(),this.builder.endBlock()),0!==this.blockStack.length&&ut(!1,`expected block stack to be empty at end of function but it was ${this.blockStack}`),this.builder.ip_const(this.exitIp),this.builder.appendU8(15),this.builder.appendU8(11),this.builder._pop(!1)}}let Ds;const Fs={},Ms=globalThis.performance&&globalThis.performance.now?globalThis.performance.now.bind(globalThis.performance):Date.now;function Ps(e,t,n){e.ip_const(t),e.options.countBailouts&&(e.i32_const(e.traceIndex),e.i32_const(n),e.callImport(\"bailout\")),e.appendU8(15)}function Vs(e,t,n,r){e.local(\"cinfo\"),e.block(64,4),e.local(\"cinfo\"),e.local(\"disp\"),e.appendU8(54),e.appendMemarg(Ys(19),0),n<=e.options.monitoringLongDistance+2&&(e.local(\"cinfo\"),e.i32_const(n),e.appendU8(54),e.appendMemarg(Ys(20),0)),e.endBlock(),e.ip_const(t),e.options.countBailouts&&(e.i32_const(e.traceIndex),e.i32_const(r),e.callImport(\"bailout\")),e.appendU8(15)}function zs(){if(Ds||(Ds=ot.getWasmIndirectFunctionTable()),!Ds)throw new Error(\"Module did not export the indirect function table\");return Ds}function Hs(e,t){t||ut(!1,\"Attempting to set null function into table\");const n=o.mono_jiterp_allocate_table_entry(e);return n>0&&zs().set(n,t),n}function Ws(e,t,n,r,o){if(r<=0)return o&&e.appendU8(26),!0;if(r>=Ls)return!1;const s=o?\"memop_dest\":\"pLocals\";o&&e.local(s,33);let a=o?0:t;if(e.options.enableSimd){const t=16;for(;r>=t;)e.local(s),e.v128_const(0),e.appendSimd(11),e.appendMemarg(a,0),a+=t,r-=t}for(;r>=8;)e.local(s),e.i52_const(0),e.appendU8(55),e.appendMemarg(a,0),a+=8,r-=8;for(;r>=1;){e.local(s),e.i32_const(0);let t=r%4;switch(t){case 0:t=4,e.appendU8(54);break;case 1:e.appendU8(58);break;case 3:case 2:t=2,e.appendU8(59)}e.appendMemarg(a,0),a+=t,r-=t}return!0}function qs(e,t,n){Ws(e,0,0,n,!0)||(e.i32_const(t),e.i32_const(n),e.appendU8(252),e.appendU8(11),e.appendU8(0))}function Gs(e,t,n,r,o,s,a){if(r<=0)return o&&(e.appendU8(26),e.appendU8(26)),!0;if(r>=Rs)return!1;o?(s=s||\"memop_dest\",a=a||\"memop_src\",e.local(a,33),e.local(s,33)):s&&a||(s=a=\"pLocals\");let i=o?0:t,c=o?0:n;if(e.options.enableSimd){const t=16;for(;r>=t;)e.local(s),e.local(a),e.appendSimd(0,!0),e.appendMemarg(c,0),e.appendSimd(11),e.appendMemarg(i,0),i+=t,c+=t,r-=t}for(;r>=8;)e.local(s),e.local(a),e.appendU8(41),e.appendMemarg(c,0),e.appendU8(55),e.appendMemarg(i,0),i+=8,c+=8,r-=8;for(;r>=1;){let t,n,o=r%4;switch(o){case 0:o=4,t=40,n=54;break;default:case 1:o=1,t=44,n=58;break;case 3:case 2:o=2,t=46,n=59}e.local(s),e.local(a),e.appendU8(t),e.appendMemarg(c,0),e.appendU8(n),e.appendMemarg(i,0),c+=o,i+=o,r-=o}return!0}function Js(e,t){return Gs(e,0,0,t,!0)||(e.i32_const(t),e.appendU8(252),e.appendU8(10),e.appendU8(0),e.appendU8(0)),!0}function Xs(){const e=la(5,1);e>=$s&&(Fe(`Disabling jiterpreter after ${e} failures`),ia({enableTraces:!1,enableInterpEntry:!1,enableJitCall:!1}))}const Qs={};function Ys(e){const t=Qs[e];return void 0===t?Qs[e]=o.mono_jiterp_get_member_offset(e):t}function Zs(e){const t=Xe.wasmExports[e];if(\"function\"!=typeof t)throw new Error(`raw cwrap ${e} not found`);return t}const Ks={};function ea(e){let t=Ks[e];return\"number\"!=typeof t&&(t=Ks[e]=o.mono_jiterp_get_opcode_value_table_entry(e)),t}function ta(e,t){return[e,e,t]}let na;function ra(){if(!o.mono_wasm_is_zero_page_reserved())return!1;if(!0===na)return!1;const e=K();for(let t=0;t<8;t++)if(0!==e[t])return!1===na&&Pe(`Zero page optimizations are enabled but garbage appeared in memory at address ${4*t}: ${e[t]}`),na=!0,!1;return na=!1,!0}const oa={enableTraces:\"jiterpreter-traces-enabled\",enableInterpEntry:\"jiterpreter-interp-entry-enabled\",enableJitCall:\"jiterpreter-jit-call-enabled\",enableBackwardBranches:\"jiterpreter-backward-branch-entries-enabled\",enableCallResume:\"jiterpreter-call-resume-enabled\",enableWasmEh:\"jiterpreter-wasm-eh-enabled\",enableSimd:\"jiterpreter-simd-enabled\",enableAtomics:\"jiterpreter-atomics-enabled\",zeroPageOptimization:\"jiterpreter-zero-page-optimization\",cprop:\"jiterpreter-constant-propagation\",enableStats:\"jiterpreter-stats-enabled\",disableHeuristic:\"jiterpreter-disable-heuristic\",estimateHeat:\"jiterpreter-estimate-heat\",countBailouts:\"jiterpreter-count-bailouts\",dumpTraces:\"jiterpreter-dump-traces\",useConstants:\"jiterpreter-use-constants\",eliminateNullChecks:\"jiterpreter-eliminate-null-checks\",noExitBackwardBranches:\"jiterpreter-backward-branches-enabled\",directJitCalls:\"jiterpreter-direct-jit-calls\",minimumTraceValue:\"jiterpreter-minimum-trace-value\",minimumTraceHitCount:\"jiterpreter-minimum-trace-hit-count\",monitoringPeriod:\"jiterpreter-trace-monitoring-period\",monitoringShortDistance:\"jiterpreter-trace-monitoring-short-distance\",monitoringLongDistance:\"jiterpreter-trace-monitoring-long-distance\",monitoringMaxAveragePenalty:\"jiterpreter-trace-monitoring-max-average-penalty\",backBranchBoost:\"jiterpreter-back-branch-boost\",jitCallHitCount:\"jiterpreter-jit-call-hit-count\",jitCallFlushThreshold:\"jiterpreter-jit-call-queue-flush-threshold\",interpEntryHitCount:\"jiterpreter-interp-entry-hit-count\",interpEntryFlushThreshold:\"jiterpreter-interp-entry-queue-flush-threshold\",wasmBytesLimit:\"jiterpreter-wasm-bytes-limit\",tableSize:\"jiterpreter-table-size\",aotTableSize:\"jiterpreter-aot-table-size\"};let sa=-1,aa={};function ia(e){for(const t in e){const n=oa[t];if(!n){Pe(`Unrecognized jiterpreter option: ${t}`);continue}const r=e[t];\"boolean\"==typeof r?o.mono_jiterp_parse_option((r?\"--\":\"--no-\")+n):\"number\"==typeof r?o.mono_jiterp_parse_option(`--${n}=${r}`):Pe(`Jiterpreter option must be a boolean or a number but was ${typeof r} '${r}'`)}}function ca(e){return o.mono_jiterp_get_counter(e)}function la(e,t){return o.mono_jiterp_modify_counter(e,t)}function pa(){const e=o.mono_jiterp_get_options_version();return e!==sa&&(function(){aa={};for(const e in oa){const t=o.mono_jiterp_get_option_as_int(oa[e]);t>-2147483647?aa[e]=t:Fe(`Failed to retrieve value of option ${oa[e]}`)}}(),sa=e),aa}function ua(e,t,n,r){const s=zs(),a=t,i=a+n-1;return i<s.length||ut(!1,`Last index out of range: ${i} >= ${s.length}`),s.set(a,r),o.mono_jiterp_initialize_table(e,a,i),t+n}let da=!1;const fa=[\"Unknown\",\"InterpreterTiering\",\"NullCheck\",\"VtableNotInitialized\",\"Branch\",\"BackwardBranch\",\"ConditionalBranch\",\"ConditionalBackwardBranch\",\"ComplexBranch\",\"ArrayLoadFailed\",\"ArrayStoreFailed\",\"StringOperationFailed\",\"DivideByZero\",\"Overflow\",\"Return\",\"Call\",\"Throw\",\"AllocFailed\",\"SpanOperationFailed\",\"CastFailed\",\"SafepointBranchTaken\",\"UnboxFailed\",\"CallDelegate\",\"Debugging\",\"Icall\",\"UnexpectedRetIp\",\"LeaveCheck\"],_a={2:[\"V128_I1_NEGATION\",\"V128_I2_NEGATION\",\"V128_I4_NEGATION\",\"V128_ONES_COMPLEMENT\",\"V128_U2_WIDEN_LOWER\",\"V128_U2_WIDEN_UPPER\",\"V128_I1_CREATE_SCALAR\",\"V128_I2_CREATE_SCALAR\",\"V128_I4_CREATE_SCALAR\",\"V128_I8_CREATE_SCALAR\",\"V128_I1_EXTRACT_MSB\",\"V128_I2_EXTRACT_MSB\",\"V128_I4_EXTRACT_MSB\",\"V128_I8_EXTRACT_MSB\",\"V128_I1_CREATE\",\"V128_I2_CREATE\",\"V128_I4_CREATE\",\"V128_I8_CREATE\",\"SplatX1\",\"SplatX2\",\"SplatX4\",\"SplatX8\",\"NegateD1\",\"NegateD2\",\"NegateD4\",\"NegateD8\",\"NegateR4\",\"NegateR8\",\"SqrtR4\",\"SqrtR8\",\"CeilingR4\",\"CeilingR8\",\"FloorR4\",\"FloorR8\",\"TruncateR4\",\"TruncateR8\",\"RoundToNearestR4\",\"RoundToNearestR8\",\"NotANY\",\"AnyTrueANY\",\"AllTrueD1\",\"AllTrueD2\",\"AllTrueD4\",\"AllTrueD8\",\"PopCountU1\",\"BitmaskD1\",\"BitmaskD2\",\"BitmaskD4\",\"BitmaskD8\",\"AddPairwiseWideningI1\",\"AddPairwiseWideningU1\",\"AddPairwiseWideningI2\",\"AddPairwiseWideningU2\",\"AbsI1\",\"AbsI2\",\"AbsI4\",\"AbsI8\",\"AbsR4\",\"AbsR8\",\"ConvertToSingleI4\",\"ConvertToSingleU4\",\"ConvertToSingleR8\",\"ConvertToDoubleLowerI4\",\"ConvertToDoubleLowerU4\",\"ConvertToDoubleLowerR4\",\"ConvertToInt32SaturateR4\",\"ConvertToUInt32SaturateR4\",\"ConvertToInt32SaturateR8\",\"ConvertToUInt32SaturateR8\",\"SignExtendWideningLowerD1\",\"SignExtendWideningLowerD2\",\"SignExtendWideningLowerD4\",\"SignExtendWideningUpperD1\",\"SignExtendWideningUpperD2\",\"SignExtendWideningUpperD4\",\"ZeroExtendWideningLowerD1\",\"ZeroExtendWideningLowerD2\",\"ZeroExtendWideningLowerD4\",\"ZeroExtendWideningUpperD1\",\"ZeroExtendWideningUpperD2\",\"ZeroExtendWideningUpperD4\",\"LoadVector128ANY\",\"LoadScalarVector128X4\",\"LoadScalarVector128X8\",\"LoadScalarAndSplatVector128X1\",\"LoadScalarAndSplatVector128X2\",\"LoadScalarAndSplatVector128X4\",\"LoadScalarAndSplatVector128X8\",\"LoadWideningVector128I1\",\"LoadWideningVector128U1\",\"LoadWideningVector128I2\",\"LoadWideningVector128U2\",\"LoadWideningVector128I4\",\"LoadWideningVector128U4\"],3:[\"V128_I1_ADD\",\"V128_I2_ADD\",\"V128_I4_ADD\",\"V128_R4_ADD\",\"V128_I1_SUB\",\"V128_I2_SUB\",\"V128_I4_SUB\",\"V128_R4_SUB\",\"V128_BITWISE_AND\",\"V128_BITWISE_OR\",\"V128_BITWISE_EQUALITY\",\"V128_BITWISE_INEQUALITY\",\"V128_R4_FLOAT_EQUALITY\",\"V128_R8_FLOAT_EQUALITY\",\"V128_EXCLUSIVE_OR\",\"V128_I1_MULTIPLY\",\"V128_I2_MULTIPLY\",\"V128_I4_MULTIPLY\",\"V128_R4_MULTIPLY\",\"V128_R4_DIVISION\",\"V128_I1_LEFT_SHIFT\",\"V128_I2_LEFT_SHIFT\",\"V128_I4_LEFT_SHIFT\",\"V128_I8_LEFT_SHIFT\",\"V128_I1_RIGHT_SHIFT\",\"V128_I2_RIGHT_SHIFT\",\"V128_I4_RIGHT_SHIFT\",\"V128_I1_URIGHT_SHIFT\",\"V128_I2_URIGHT_SHIFT\",\"V128_I4_URIGHT_SHIFT\",\"V128_I8_URIGHT_SHIFT\",\"V128_U1_NARROW\",\"V128_U1_GREATER_THAN\",\"V128_I1_LESS_THAN\",\"V128_U1_LESS_THAN\",\"V128_I2_LESS_THAN\",\"V128_I1_EQUALS\",\"V128_I2_EQUALS\",\"V128_I4_EQUALS\",\"V128_R4_EQUALS\",\"V128_I8_EQUALS\",\"V128_I1_EQUALS_ANY\",\"V128_I2_EQUALS_ANY\",\"V128_I4_EQUALS_ANY\",\"V128_I8_EQUALS_ANY\",\"V128_AND_NOT\",\"V128_U2_LESS_THAN_EQUAL\",\"V128_I1_SHUFFLE\",\"V128_I2_SHUFFLE\",\"V128_I4_SHUFFLE\",\"V128_I8_SHUFFLE\",\"ExtractScalarI1\",\"ExtractScalarU1\",\"ExtractScalarI2\",\"ExtractScalarU2\",\"ExtractScalarD4\",\"ExtractScalarD8\",\"ExtractScalarR4\",\"ExtractScalarR8\",\"SwizzleD1\",\"AddD1\",\"AddD2\",\"AddD4\",\"AddD8\",\"AddR4\",\"AddR8\",\"SubtractD1\",\"SubtractD2\",\"SubtractD4\",\"SubtractD8\",\"SubtractR4\",\"SubtractR8\",\"MultiplyD2\",\"MultiplyD4\",\"MultiplyD8\",\"MultiplyR4\",\"MultiplyR8\",\"DivideR4\",\"DivideR8\",\"DotI2\",\"ShiftLeftD1\",\"ShiftLeftD2\",\"ShiftLeftD4\",\"ShiftLeftD8\",\"ShiftRightArithmeticD1\",\"ShiftRightArithmeticD2\",\"ShiftRightArithmeticD4\",\"ShiftRightArithmeticD8\",\"ShiftRightLogicalD1\",\"ShiftRightLogicalD2\",\"ShiftRightLogicalD4\",\"ShiftRightLogicalD8\",\"AndANY\",\"AndNotANY\",\"OrANY\",\"XorANY\",\"CompareEqualD1\",\"CompareEqualD2\",\"CompareEqualD4\",\"CompareEqualD8\",\"CompareEqualR4\",\"CompareEqualR8\",\"CompareNotEqualD1\",\"CompareNotEqualD2\",\"CompareNotEqualD4\",\"CompareNotEqualD8\",\"CompareNotEqualR4\",\"CompareNotEqualR8\",\"CompareLessThanI1\",\"CompareLessThanU1\",\"CompareLessThanI2\",\"CompareLessThanU2\",\"CompareLessThanI4\",\"CompareLessThanU4\",\"CompareLessThanI8\",\"CompareLessThanR4\",\"CompareLessThanR8\",\"CompareLessThanOrEqualI1\",\"CompareLessThanOrEqualU1\",\"CompareLessThanOrEqualI2\",\"CompareLessThanOrEqualU2\",\"CompareLessThanOrEqualI4\",\"CompareLessThanOrEqualU4\",\"CompareLessThanOrEqualI8\",\"CompareLessThanOrEqualR4\",\"CompareLessThanOrEqualR8\",\"CompareGreaterThanI1\",\"CompareGreaterThanU1\",\"CompareGreaterThanI2\",\"CompareGreaterThanU2\",\"CompareGreaterThanI4\",\"CompareGreaterThanU4\",\"CompareGreaterThanI8\",\"CompareGreaterThanR4\",\"CompareGreaterThanR8\",\"CompareGreaterThanOrEqualI1\",\"CompareGreaterThanOrEqualU1\",\"CompareGreaterThanOrEqualI2\",\"CompareGreaterThanOrEqualU2\",\"CompareGreaterThanOrEqualI4\",\"CompareGreaterThanOrEqualU4\",\"CompareGreaterThanOrEqualI8\",\"CompareGreaterThanOrEqualR4\",\"CompareGreaterThanOrEqualR8\",\"ConvertNarrowingSaturateSignedI2\",\"ConvertNarrowingSaturateSignedI4\",\"ConvertNarrowingSaturateUnsignedI2\",\"ConvertNarrowingSaturateUnsignedI4\",\"MultiplyWideningLowerI1\",\"MultiplyWideningLowerI2\",\"MultiplyWideningLowerI4\",\"MultiplyWideningLowerU1\",\"MultiplyWideningLowerU2\",\"MultiplyWideningLowerU4\",\"MultiplyWideningUpperI1\",\"MultiplyWideningUpperI2\",\"MultiplyWideningUpperI4\",\"MultiplyWideningUpperU1\",\"MultiplyWideningUpperU2\",\"MultiplyWideningUpperU4\",\"AddSaturateI1\",\"AddSaturateU1\",\"AddSaturateI2\",\"AddSaturateU2\",\"SubtractSaturateI1\",\"SubtractSaturateU1\",\"SubtractSaturateI2\",\"SubtractSaturateU2\",\"MultiplyRoundedSaturateQ15I2\",\"MinI1\",\"MinI2\",\"MinI4\",\"MinU1\",\"MinU2\",\"MinU4\",\"MaxI1\",\"MaxI2\",\"MaxI4\",\"MaxU1\",\"MaxU2\",\"MaxU4\",\"AverageRoundedU1\",\"AverageRoundedU2\",\"MinR4\",\"MinR8\",\"MaxR4\",\"MaxR8\",\"PseudoMinR4\",\"PseudoMinR8\",\"PseudoMaxR4\",\"PseudoMaxR8\",\"StoreANY\"],4:[\"V128_CONDITIONAL_SELECT\",\"ReplaceScalarD1\",\"ReplaceScalarD2\",\"ReplaceScalarD4\",\"ReplaceScalarD8\",\"ReplaceScalarR4\",\"ReplaceScalarR8\",\"ShuffleD1\",\"BitwiseSelectANY\",\"LoadScalarAndInsertX1\",\"LoadScalarAndInsertX2\",\"LoadScalarAndInsertX4\",\"LoadScalarAndInsertX8\",\"StoreSelectedScalarX1\",\"StoreSelectedScalarX2\",\"StoreSelectedScalarX4\",\"StoreSelectedScalarX8\"]},ma={13:[65,0],14:[65,1]},ha={456:168,462:174,457:170,463:176},ga={508:[69,40,54],428:[106,40,54],430:[107,40,54],432:[107,40,54],436:[115,40,54],429:[124,41,55],431:[125,41,55],433:[125,41,55],437:[133,41,55],511:[106,40,54],515:[108,40,54],513:[124,41,55],517:[126,41,55],434:[140,42,56],435:[154,43,57],464:[178,40,56],467:[183,40,57],438:[184,40,57],465:[180,41,56],468:[185,41,57],439:[186,41,57],469:[187,42,57],466:[182,43,56],460:[1,52,55],461:[1,53,55],444:[113,40,54],452:[113,40,54],440:[117,40,54],448:[117,40,54],445:[113,41,54],453:[113,41,54],441:[117,41,54],449:[117,41,54],525:[116,40,54],526:[134,41,55],527:[117,40,54],528:[135,41,55],523:[118,40,54],524:[136,41,55],639:[119,40,54],640:[137,41,55],641:[120,40,54],642:[138,41,55],643:[103,40,54],645:[104,40,54],647:[105,40,54],644:[121,41,55],646:[122,41,55],648:[123,41,55],512:[106,40,54],516:[108,40,54],514:[124,41,55],518:[126,41,55],519:[113,40,54],520:[113,40,54],521:[114,40,54],522:[114,40,54]},ba={394:187,395:1,398:187,399:1,402:187,403:1,406:187,407:1,412:187,413:1,416:187,417:1,426:187,427:1,420:187,421:1,65536:187,65537:187,65535:187,65539:1,65540:1,65538:1},ya={344:[106,40,54],362:[106,40,54],364:[106,40,54],348:[107,40,54],352:[108,40,54],366:[108,40,54],368:[108,40,54],356:[109,40,54],360:[110,40,54],380:[111,40,54],384:[112,40,54],374:[113,40,54],376:[114,40,54],378:[115,40,54],388:[116,40,54],390:[117,40,54],386:[118,40,54],345:[124,41,55],349:[125,41,55],353:[126,41,55],357:[127,41,55],381:[129,41,55],361:[128,41,55],385:[130,41,55],375:[131,41,55],377:[132,41,55],379:[133,41,55],389:[134,41,55],391:[135,41,55],387:[136,41,55],346:[146,42,56],350:[147,42,56],354:[148,42,56],358:[149,42,56],347:[160,43,57],351:[161,43,57],355:[162,43,57],359:[163,43,57],392:[70,40,54],396:[71,40,54],414:[72,40,54],400:[74,40,54],418:[76,40,54],404:[78,40,54],424:[73,40,54],410:[75,40,54],422:[77,40,54],408:[79,40,54],393:[81,41,54],397:[82,41,54],415:[83,41,54],401:[85,41,54],419:[87,41,54],405:[89,41,54],425:[84,41,54],411:[86,41,54],423:[88,41,54],409:[90,41,54]},wa={187:392,207:396,195:400,215:410,199:414,223:424,191:404,211:408,203:418,219:422,231:[392,!1,!0],241:[396,!1,!0],235:[400,!1,!0],245:[410,!1,!0],237:[414,!1,!0],249:[424,!1,!0],233:[404,!1,!0],243:[408,!1,!0],239:[418,!1,!0],247:[422,!1,!0],251:[392,65,!0],261:[396,65,!0],255:[400,65,!0],265:[410,65,!0],257:[414,65,!0],269:[424,65,!0],253:[404,65,!0],263:[408,65,!0],259:[418,65,!0],267:[422,65,!0],188:393,208:397,196:401,216:411,200:415,224:425,192:405,212:409,204:419,220:423,252:[393,66,!0],256:[401,66,!0],266:[411,66,!0],258:[415,66,!0],270:[425,66,!0],254:[405,66,!0],264:[409,66,!0],260:[419,66,!0],268:[423,66,!0],189:394,209:65535,197:402,217:412,201:416,225:426,193:406,213:65536,205:420,221:65537,190:395,210:65538,198:403,218:413,202:417,226:427,194:407,214:65539,206:421,222:65540},ka={599:[!0,!1,159],626:[!0,!0,145],586:[!0,!1,155],613:[!0,!0,141],592:[!0,!1,156],619:[!0,!0,142],603:[!0,!1,153],630:[!0,!0,139],581:[!0,!1,\"acos\"],608:[!0,!0,\"acosf\"],582:[!0,!1,\"acosh\"],609:[!0,!0,\"acoshf\"],587:[!0,!1,\"cos\"],614:[!0,!0,\"cosf\"],579:[!0,!1,\"asin\"],606:[!0,!0,\"asinf\"],580:[!0,!1,\"asinh\"],607:[!0,!0,\"asinhf\"],598:[!0,!1,\"sin\"],625:[!0,!0,\"sinf\"],583:[!0,!1,\"atan\"],610:[!0,!0,\"atanf\"],584:[!0,!1,\"atanh\"],611:[!0,!0,\"atanhf\"],601:[!0,!1,\"tan\"],628:[!0,!0,\"tanf\"],588:[!0,!1,\"cbrt\"],615:[!0,!0,\"cbrtf\"],590:[!0,!1,\"exp\"],617:[!0,!0,\"expf\"],593:[!0,!1,\"log\"],620:[!0,!0,\"logf\"],594:[!0,!1,\"log2\"],621:[!0,!0,\"log2f\"],595:[!0,!1,\"log10\"],622:[!0,!0,\"log10f\"],604:[!1,!1,164],631:[!1,!0,150],605:[!1,!1,165],632:[!1,!0,151],585:[!1,!1,\"atan2\"],612:[!1,!0,\"atan2f\"],596:[!1,!1,\"pow\"],623:[!1,!0,\"powf\"],383:[!1,!1,\"fmod\"],382:[!1,!0,\"fmodf\"]},Sa={560:[67,0,0],561:[67,192,0],562:[68,0,1],563:[68,193,1],564:[65,0,2],565:[66,0,3]},va={566:[74,0,0],567:[74,192,0],568:[75,0,1],569:[75,193,1],570:[72,0,2],571:[73,0,3]},Ua={652:1,653:2,654:4,655:8},Ea={652:44,653:46,654:40,655:41},Ta={652:58,653:59,654:54,655:55},xa=new Set([20,21,22,23,24,25,26,27,28,29,30]),Ia={51:[16,54],52:[16,54],53:[8,54],54:[8,54],55:[4,54],57:[4,56],56:[2,55],58:[2,57]},Aa={1:[16,40],2:[8,40],3:[4,40],5:[4,42],4:[2,41],6:[2,43]},ja=new Set([81,84,85,86,87,82,83,88,89,90,91,92,93]),$a={13:[16],14:[8],15:[4],16:[2]},La={10:100,11:132,12:164,13:196},Ra={6:[44,23],7:[46,26],8:[40,28],9:[41,30]};function Ba(e,t){return B(e+2*t)}function Na(e,t){return M(e+2*t)}function Ca(e,t){return O(e+2*t)}function Oa(e){return D(e+Ys(4))}function Da(e,t){const n=D(Oa(e)+Ys(5));return D(n+t*fc)}function Fa(e,t){const n=D(Oa(e)+Ys(12));return D(n+t*fc)}function Ma(e,t,n){if(!n)return!1;for(let r=0;r<n.length;r++)if(2*n[r]+t===e)return!0;return!1}const Pa=new Map;function Va(e,t){if(!oi(e,t))return Pa.get(t)}function za(e,t){const n=Va(e,t);if(void 0!==n)switch(n.type){case\"i32\":case\"v128\":return n.value}}const Ha=new Map;let Wa,qa=-1;function Ga(){qa=-1,Ha.clear(),Pa.clear()}function Ja(e){qa===e&&(qa=-1),Ha.delete(e),Pa.delete(e)}function Xa(e,t){for(let n=0;n<t;n+=1)Ja(e+n)}function Qa(e,t,n){e.cfg.startBranchBlock(t,n)}function Ya(e,t,n){let r=0;switch(e%16==0?r=4:e%8==0?r=3:e%4==0?r=2:e%2==0&&(r=1),t){case 253:r=0===n||11===n?Math.min(r,4):0;break;case 41:case 43:case 55:case 57:r=Math.min(r,3);break;case 52:case 53:case 62:case 40:case 42:case 54:case 56:r=Math.min(r,2);break;case 50:case 51:case 46:case 47:case 61:case 59:r=Math.min(r,1);break;default:r=0}return r}function Za(e,t,n,r,o){if(e.options.cprop&&40===n){const n=Va(e,t);if(n)switch(n.type){case\"i32\":return!(o&&0===n.value||(r||e.i32_const(n.value),0));case\"ldloca\":return r||ti(e,n.offset,0),!0}}return!1}function Ka(e,t,n,r){if(Za(e,t,n,!1))return;if(e.local(\"pLocals\"),n>=40||ut(!1,`Expected load opcode but got ${n}`),e.appendU8(n),void 0!==r)e.appendULeb(r);else if(253===n)throw new Error(\"PREFIX_simd ldloc without a simdOpcode\");const o=Ya(t,n,r);e.appendMemarg(t,o)}function ei(e,t,n,r){n>=54||ut(!1,`Expected store opcode but got ${n}`),e.appendU8(n),void 0!==r&&e.appendULeb(r);const o=Ya(t,n,r);e.appendMemarg(t,o),Ja(t),void 0!==r&&Ja(t+8)}function ti(e,t,n){\"number\"!=typeof n&&(n=512),n>0&&Xa(t,n),e.lea(\"pLocals\",t)}function ni(e,t,n,r){Xa(t,r),Ws(e,t,0,r,!1)||(ti(e,t,r),qs(e,n,r))}function ri(e,t,n,r){if(Xa(t,r),Gs(e,t,n,r,!1))return!0;ti(e,t,r),ti(e,n,0),Js(e,r)}function oi(e,t){return 0!==o.mono_jiterp_is_imethod_var_address_taken(Oa(e.frame),t)}function si(e,t,n,r){if(e.allowNullCheckOptimization&&Ha.has(t)&&!oi(e,t))return la(7,1),void(qa===t?r&&e.local(\"cknull_ptr\"):(Ka(e,t,40),e.local(\"cknull_ptr\",r?34:33),qa=t));Ka(e,t,40),e.local(\"cknull_ptr\",34),e.appendU8(69),e.block(64,4),Ps(e,n,2),e.endBlock(),r&&e.local(\"cknull_ptr\"),e.allowNullCheckOptimization&&!oi(e,t)?(Ha.set(t,n),qa=t):qa=-1}function ai(e,t,n){let r,s=54;const a=ma[n];if(a)e.local(\"pLocals\"),e.appendU8(a[0]),r=a[1],e.appendLeb(r);else switch(n){case 15:e.local(\"pLocals\"),r=Na(t,2),e.i32_const(r);break;case 16:e.local(\"pLocals\"),r=Ca(t,2),e.i32_const(r);break;case 17:e.local(\"pLocals\"),e.i52_const(0),s=55;break;case 19:e.local(\"pLocals\"),e.appendU8(66),e.appendLebRef(t+4,!0),s=55;break;case 18:e.local(\"pLocals\"),e.i52_const(Na(t,2)),s=55;break;case 20:e.local(\"pLocals\"),e.appendU8(67),e.appendF32(function(e,t){return n=e+2*t,o.mono_wasm_get_f32_unaligned(n);var n}(t,2)),s=56;break;case 21:e.local(\"pLocals\"),e.appendU8(68),e.appendF64(function(e,t){return n=e+2*t,o.mono_wasm_get_f64_unaligned(n);var n}(t,2)),s=57;break;default:return!1}e.appendU8(s);const i=Ba(t,1);return e.appendMemarg(i,2),Ja(i),\"number\"==typeof r?Pa.set(i,{type:\"i32\",value:r}):Pa.delete(i),!0}function ii(e,t,n){let r=40,o=54;switch(n){case 74:r=44;break;case 75:r=45;break;case 76:r=46;break;case 77:r=47;break;case 78:r=45,o=58;break;case 79:r=47,o=59;break;case 80:break;case 81:r=41,o=55;break;case 82:{const n=Ba(t,3);return ri(e,Ba(t,1),Ba(t,2),n),!0}case 83:return ri(e,Ba(t,1),Ba(t,2),8),ri(e,Ba(t,3),Ba(t,4),8),!0;case 84:return ri(e,Ba(t,1),Ba(t,2),8),ri(e,Ba(t,3),Ba(t,4),8),ri(e,Ba(t,5),Ba(t,6),8),!0;case 85:return ri(e,Ba(t,1),Ba(t,2),8),ri(e,Ba(t,3),Ba(t,4),8),ri(e,Ba(t,5),Ba(t,6),8),ri(e,Ba(t,7),Ba(t,8),8),!0;default:return!1}return e.local(\"pLocals\"),Ka(e,Ba(t,2),r),ei(e,Ba(t,1),o),!0}function ci(e,t,n,r){const o=r>=23&&r<=36||r>=50&&r<=60,s=Ba(n,o?2:1),a=Ba(n,3),i=Ba(n,o?1:2),c=e.allowNullCheckOptimization&&Ha.has(s)&&!oi(e,s);36!==r&&45!==r&&si(e,s,n,!1);let l=54,p=40;switch(r){case 23:p=44;break;case 24:p=45;break;case 25:p=46;break;case 26:p=47;break;case 31:case 41:case 27:break;case 43:case 29:p=42,l=56;break;case 44:case 30:p=43,l=57;break;case 37:case 38:l=58;break;case 39:case 40:l=59;break;case 28:case 42:p=41,l=55;break;case 45:return c||e.block(),e.local(\"pLocals\"),e.i32_const(a),e.i32_const(s),e.i32_const(i),e.callImport(\"stfld_o\"),c?(e.appendU8(26),la(7,1)):(e.appendU8(13),e.appendULeb(0),Ps(e,n,2),e.endBlock()),!0;case 32:{const t=Ba(n,4);return ti(e,i,t),e.local(\"cknull_ptr\"),0!==a&&(e.i32_const(a),e.appendU8(106)),Js(e,t),!0}case 46:{const r=Da(t,Ba(n,4));return e.local(\"cknull_ptr\"),0!==a&&(e.i32_const(a),e.appendU8(106)),ti(e,i,0),e.ptr_const(r),e.callImport(\"value_copy\"),!0}case 47:{const t=Ba(n,4);return e.local(\"cknull_ptr\"),0!==a&&(e.i32_const(a),e.appendU8(106)),ti(e,i,0),Js(e,t),!0}case 36:case 35:return e.local(\"pLocals\"),Ka(e,s,40),0!==a&&(e.i32_const(a),e.appendU8(106)),ei(e,i,l),!0;default:return!1}return o&&e.local(\"pLocals\"),e.local(\"cknull_ptr\"),o?(e.appendU8(p),e.appendMemarg(a,0),ei(e,i,l),!0):(Ka(e,i,p),e.appendU8(l),e.appendMemarg(a,0),!0)}function li(e,t,n,r){const o=r>=23&&r<=36||r>=50&&r<=60,s=Ba(n,1),a=Da(t,Ba(n,2)),i=Da(t,Ba(n,3));!function(e,t,n){e.block(),e.ptr_const(t),e.appendU8(45),e.appendMemarg(Ys(0),0),e.appendU8(13),e.appendULeb(0),Ps(e,n,3),e.endBlock()}(e,a,n);let c=54,l=40;switch(r){case 50:l=44;break;case 51:l=45;break;case 52:l=46;break;case 53:l=47;break;case 58:case 65:case 54:break;case 67:case 56:l=42,c=56;break;case 68:case 57:l=43,c=57;break;case 61:case 62:c=58;break;case 63:case 64:c=59;break;case 55:case 66:l=41,c=55;break;case 69:return e.ptr_const(i),ti(e,s,0),e.callImport(\"copy_ptr\"),!0;case 59:{const t=Ba(n,4);return ti(e,s,t),e.ptr_const(i),Js(e,t),!0}case 72:return e.local(\"pLocals\"),e.ptr_const(i),ei(e,s,c),!0;default:return!1}return o?(e.local(\"pLocals\"),e.ptr_const(i),e.appendU8(l),e.appendMemarg(0,0),ei(e,s,c),!0):(e.ptr_const(i),Ka(e,s,l),e.appendU8(c),e.appendMemarg(0,0),!0)}function pi(e,t,n){let r,o,s,a,i=\"math_lhs32\",c=\"math_rhs32\",l=!1;const p=ba[n];if(p){e.local(\"pLocals\");const r=1==p;return Ka(e,Ba(t,2),r?43:42),r||e.appendU8(p),Ka(e,Ba(t,3),r?43:42),r||e.appendU8(p),e.i32_const(n),e.callImport(\"relop_fp\"),ei(e,Ba(t,1),54),!0}switch(n){case 382:case 383:return hi(e,t,n);default:if(a=ya[n],!a)return!1;a.length>3?(r=a[1],o=a[2],s=a[3]):(r=o=a[1],s=a[2])}switch(n){case 356:case 357:case 360:case 361:case 380:case 381:case 384:case 385:{const s=361===n||385===n||357===n||381===n;i=s?\"math_lhs64\":\"math_lhs32\",c=s?\"math_rhs64\":\"math_rhs32\",e.block(),Ka(e,Ba(t,2),r),e.local(i,33),Ka(e,Ba(t,3),o),e.local(c,34),l=!0,s&&(e.appendU8(80),e.appendU8(69)),e.appendU8(13),e.appendULeb(0),Ps(e,t,12),e.endBlock(),356!==n&&380!==n&&357!==n&&381!==n||(e.block(),e.local(c),s?e.i52_const(-1):e.i32_const(-1),e.appendU8(s?82:71),e.appendU8(13),e.appendULeb(0),e.local(i),e.appendU8(s?66:65),e.appendBoundaryValue(s?64:32,-1),e.appendU8(s?82:71),e.appendU8(13),e.appendULeb(0),Ps(e,t,13),e.endBlock());break}case 362:case 364:case 366:case 368:Ka(e,Ba(t,2),r),e.local(i,34),Ka(e,Ba(t,3),o),e.local(c,34),e.i32_const(n),e.callImport(364===n||368===n?\"ckovr_u4\":\"ckovr_i4\"),e.block(64,4),Ps(e,t,13),e.endBlock(),l=!0}return e.local(\"pLocals\"),l?(e.local(i),e.local(c)):(Ka(e,Ba(t,2),r),Ka(e,Ba(t,3),o)),e.appendU8(a[0]),ei(e,Ba(t,1),s),!0}function ui(e,t,n){const r=ga[n];if(!r)return!1;const o=r[1],s=r[2];switch((n<472||n>507)&&e.local(\"pLocals\"),n){case 428:case 430:Ka(e,Ba(t,2),o),e.i32_const(1);break;case 432:e.i32_const(0),Ka(e,Ba(t,2),o);break;case 436:Ka(e,Ba(t,2),o),e.i32_const(-1);break;case 444:case 445:Ka(e,Ba(t,2),o),41===o&&e.appendU8(167),e.i32_const(255);break;case 452:case 453:Ka(e,Ba(t,2),o),41===o&&e.appendU8(167),e.i32_const(65535);break;case 440:case 441:Ka(e,Ba(t,2),o),41===o&&e.appendU8(167),e.i32_const(24),e.appendU8(116),e.i32_const(24);break;case 448:case 449:Ka(e,Ba(t,2),o),41===o&&e.appendU8(167),e.i32_const(16),e.appendU8(116),e.i32_const(16);break;case 429:case 431:Ka(e,Ba(t,2),o),e.i52_const(1);break;case 433:e.i52_const(0),Ka(e,Ba(t,2),o);break;case 437:Ka(e,Ba(t,2),o),e.i52_const(-1);break;case 511:case 515:case 519:case 521:case 525:case 527:case 523:case 639:case 641:Ka(e,Ba(t,2),o),e.i32_const(Na(t,3));break;case 512:case 516:case 520:case 522:Ka(e,Ba(t,2),o),e.i32_const(Ca(t,3));break;case 513:case 517:case 526:case 528:case 524:case 640:case 642:Ka(e,Ba(t,2),o),e.i52_const(Na(t,3));break;case 514:case 518:Ka(e,Ba(t,2),o),e.i52_const(Ca(t,3));break;default:Ka(e,Ba(t,2),o)}return 1!==r[0]&&e.appendU8(r[0]),ei(e,Ba(t,1),s),!0}function di(e,t,n,r){const o=133===r?t+6:t+8,s=Fa(n,B(o-2));e.local(\"pLocals\"),e.ptr_const(o),e.appendU8(54),e.appendMemarg(s,0),e.callHandlerReturnAddresses.push(o)}function fi(e,t){const n=o.mono_jiterp_get_opcode_info(t,4),r=e+2+2*o.mono_jiterp_get_opcode_info(t,2);let s;switch(n){case 7:s=O(r);break;case 8:s=M(r);break;case 17:s=M(r+2);break;default:return}return s}function _i(e,t,n,r){const s=r>=227&&r<=270,a=fi(t,r);if(\"number\"!=typeof a)return!1;switch(r){case 132:case 133:case 128:case 129:{const s=132===r||133===r,i=t+2*a;return a<=0?e.backBranchOffsets.indexOf(i)>=0?(e.backBranchTraceLevel>1&&Fe(`0x${t.toString(16)} performing backward branch to 0x${i.toString(16)}`),s&&di(e,t,n,r),e.cfg.branch(i,!0,0),la(9,1),!0):(i<e.cfg.entryIp?(e.backBranchTraceLevel>1||e.cfg.trace>1)&&Fe(`0x${t.toString(16)} ${js(r)} target 0x${i.toString(16)} before start of trace`):(e.backBranchTraceLevel>0||e.cfg.trace>0)&&Fe(`0x${t.toString(16)} ${js(r)} target 0x${i.toString(16)} not found in list `+e.backBranchOffsets.map((e=>\"0x\"+e.toString(16))).join(\", \")),o.mono_jiterp_boost_back_branch_target(i),Ps(e,i,5),la(10,1),!0):(e.branchTargets.add(i),s&&di(e,t,n,r),e.cfg.branch(i,!1,0),!0)}case 145:case 143:case 229:case 227:case 146:case 144:{const n=146===r||144===r;Ka(e,Ba(t,1),n?41:40),143===r||227===r?e.appendU8(69):144===r?e.appendU8(80):146===r&&(e.appendU8(80),e.appendU8(69));break}default:if(void 0===wa[r])throw new Error(`Unsupported relop branch opcode: ${js(r)}`);if(4!==o.mono_jiterp_get_opcode_info(r,1))throw new Error(`Unsupported long branch opcode: ${js(r)}`)}const i=t+2*a;return a<0?e.backBranchOffsets.indexOf(i)>=0?(e.backBranchTraceLevel>1&&Fe(`0x${t.toString(16)} performing conditional backward branch to 0x${i.toString(16)}`),e.cfg.branch(i,!0,s?3:1),la(9,1)):(i<e.cfg.entryIp?(e.backBranchTraceLevel>1||e.cfg.trace>1)&&Fe(`0x${t.toString(16)} ${js(r)} target 0x${i.toString(16)} before start of trace`):(e.backBranchTraceLevel>0||e.cfg.trace>0)&&Fe(`0x${t.toString(16)} ${js(r)} target 0x${i.toString(16)} not found in list `+e.backBranchOffsets.map((e=>\"0x\"+e.toString(16))).join(\", \")),o.mono_jiterp_boost_back_branch_target(i),e.block(64,4),Ps(e,i,5),e.endBlock(),la(10,1)):(e.branchTargets.add(i),e.cfg.branch(i,!1,s?3:1)),!0}function mi(e,t,n,r){const o=wa[r];if(!o)return!1;const s=Array.isArray(o)?o[0]:o,a=ya[s],i=ba[s];if(!a&&!i)return!1;const c=a?a[1]:1===i?43:42;return Ka(e,Ba(t,1),c),a||1===i||e.appendU8(i),Array.isArray(o)&&o[1]?(e.appendU8(o[1]),e.appendLeb(Na(t,2))):Ka(e,Ba(t,2),c),a||1==i||e.appendU8(i),a?e.appendU8(a[0]):(e.i32_const(s),e.callImport(\"relop_fp\")),_i(e,t,n,r)}function hi(e,t,n){let r,o,s,a;const i=Ba(t,1),c=Ba(t,2),l=Ba(t,3),p=ka[n];if(!p)return!1;if(r=p[0],o=p[1],\"string\"==typeof p[2]?s=p[2]:a=p[2],e.local(\"pLocals\"),r){if(Ka(e,c,o?42:43),a)e.appendU8(a);else{if(!s)throw new Error(\"internal error\");e.callImport(s)}return ei(e,i,o?56:57),!0}if(Ka(e,c,o?42:43),Ka(e,l,o?42:43),a)e.appendU8(a);else{if(!s)throw new Error(\"internal error\");e.callImport(s)}return ei(e,i,o?56:57),!0}function gi(e,t,n){const r=n>=87&&n<=112,o=n>=107&&n<=112,s=n>=95&&n<=106||n>=120&&n<=127||o,a=n>=101&&n<=106||n>=124&&n<=127||o;let i,c,l=-1,p=0,u=1;o?(i=Ba(t,1),c=Ba(t,2),l=Ba(t,3),p=Na(t,4),u=Na(t,5)):s?a?r?(i=Ba(t,1),c=Ba(t,2),p=Na(t,3)):(i=Ba(t,2),c=Ba(t,1),p=Na(t,3)):r?(i=Ba(t,1),c=Ba(t,2),l=Ba(t,3)):(i=Ba(t,3),c=Ba(t,1),l=Ba(t,2)):r?(c=Ba(t,2),i=Ba(t,1)):(c=Ba(t,1),i=Ba(t,2));let d,f=54;switch(n){case 87:case 95:case 101:case 107:d=44;break;case 88:case 96:case 102:case 108:d=45;break;case 89:case 97:case 103:case 109:d=46;break;case 90:case 98:case 104:case 110:d=47;break;case 113:case 120:case 124:d=40,f=58;break;case 114:case 121:case 125:d=40,f=59;break;case 91:case 99:case 105:case 111:case 115:case 122:case 126:case 119:d=40;break;case 93:case 117:d=42,f=56;break;case 94:case 118:d=43,f=57;break;case 92:case 100:case 106:case 112:case 116:case 123:case 127:d=41,f=55;break;default:return!1}const _=Za(e,c,40,!0,!0);return _||si(e,c,t,!1),r?(e.local(\"pLocals\"),_?ut(Za(e,c,40,!1,!0),\"Unknown jiterpreter cprop failure\"):e.local(\"cknull_ptr\"),o?(Ka(e,l,40),0!==p&&(e.i32_const(p),e.appendU8(106),p=0),1!==u&&(e.i32_const(u),e.appendU8(108)),e.appendU8(106)):s&&l>=0?(Ka(e,l,40),e.appendU8(106)):p<0&&(e.i32_const(p),e.appendU8(106),p=0),e.appendU8(d),e.appendMemarg(p,0),ei(e,i,f)):119===n?(_?ut(Za(e,c,40,!1,!0),\"Unknown jiterpreter cprop failure\"):e.local(\"cknull_ptr\"),ti(e,i,0),e.callImport(\"copy_ptr\")):(_?ut(Za(e,c,40,!1,!0),\"Unknown jiterpreter cprop failure\"):e.local(\"cknull_ptr\"),s&&l>=0?(Ka(e,l,40),e.appendU8(106)):p<0&&(e.i32_const(p),e.appendU8(106),p=0),Ka(e,i,d),e.appendU8(f),e.appendMemarg(p,0)),!0}function bi(e,t,n,r,o){e.block(),Ka(e,r,40),e.local(\"index\",34);let s=\"cknull_ptr\";e.options.zeroPageOptimization&&ra()?(la(8,1),Ka(e,n,40),s=\"src_ptr\",e.local(s,34)):si(e,n,t,!0),e.appendU8(40),e.appendMemarg(Ys(9),2),e.appendU8(73),e.appendU8(13),e.appendULeb(0),Ps(e,t,9),e.endBlock(),e.local(s),e.i32_const(Ys(1)),e.appendU8(106),e.local(\"index\"),1!=o&&(e.i32_const(o),e.appendU8(108)),e.appendU8(106)}function yi(e,t,n,r){const o=r<=328&&r>=315||341===r,s=Ba(n,o?2:1),a=Ba(n,o?1:3),i=Ba(n,o?3:2);let c,l,p=54;switch(r){case 341:return e.local(\"pLocals\"),si(e,s,n,!0),e.appendU8(40),e.appendMemarg(Ys(9),2),ei(e,a,54),!0;case 326:return e.local(\"pLocals\"),l=Ba(n,4),bi(e,n,s,i,l),ei(e,a,54),!0;case 337:return e.block(),Ka(e,Ba(n,1),40),Ka(e,Ba(n,2),40),Ka(e,Ba(n,3),40),e.callImport(\"stelemr_tc\"),e.appendU8(13),e.appendULeb(0),Ps(e,n,10),e.endBlock(),!0;case 340:return bi(e,n,s,i,4),ti(e,a,0),e.callImport(\"copy_ptr\"),!0;case 324:case 320:case 319:case 333:l=4,c=40;break;case 315:l=1,c=44;break;case 316:l=1,c=45;break;case 330:case 329:l=1,c=40,p=58;break;case 317:l=2,c=46;break;case 318:l=2,c=47;break;case 332:case 331:l=2,c=40,p=59;break;case 322:case 335:l=4,c=42,p=56;break;case 321:case 334:l=8,c=41,p=55;break;case 323:case 336:l=8,c=43,p=57;break;case 325:{const t=Ba(n,4);return e.local(\"pLocals\"),e.i32_const(Ba(n,1)),e.appendU8(106),bi(e,n,s,i,t),Js(e,t),Xa(Ba(n,1),t),!0}case 338:{const r=Ba(n,5),o=Da(t,Ba(n,4));return bi(e,n,s,i,r),ti(e,a,0),e.ptr_const(o),e.callImport(\"value_copy\"),!0}case 339:{const t=Ba(n,5);return bi(e,n,s,i,t),ti(e,a,0),Js(e,t),!0}default:return!1}return o?(e.local(\"pLocals\"),bi(e,n,s,i,l),e.appendU8(c),e.appendMemarg(0,0),ei(e,a,p)):(bi(e,n,s,i,l),Ka(e,a,c),e.appendU8(p),e.appendMemarg(0,0)),!0}function wi(){return void 0!==Wa||(Wa=!0===ot.featureWasmSimd,Wa||Fe(\"Disabling Jiterpreter SIMD\")),Wa}function ki(e,t,n){const r=`${t}_${n.toString(16)}`;return\"object\"!=typeof e.importedFunctions[r]&&e.defineImportedFunction(\"s\",r,t,!1,n),r}function Si(e,t,n,r,s,a){if(e.options.enableSimd&&wi())switch(s){case 2:if(function(e,t,n){const r=o.mono_jiterp_get_simd_opcode(1,n);if(r>=0)return ja.has(n)?(e.local(\"pLocals\"),Ka(e,Ba(t,2),40),e.appendSimd(r,!0),e.appendMemarg(0,0),vi(e,t)):(Ui(e,t),e.appendSimd(r),vi(e,t)),!0;const s=La[n];if(s)return Ui(e,t),e.appendSimd(s),ei(e,Ba(t,1),54),!0;switch(n){case 6:case 7:case 8:case 9:{const r=Ra[n];return e.local(\"pLocals\"),e.v128_const(0),Ka(e,Ba(t,2),r[0]),e.appendSimd(r[1]),e.appendU8(0),ei(e,Ba(t,1),253,11),!0}case 14:return Ui(e,t,7),vi(e,t),!0;case 15:return Ui(e,t,8),vi(e,t),!0;case 16:return Ui(e,t,9),vi(e,t),!0;case 17:return Ui(e,t,10),vi(e,t),!0;default:return!1}}(e,t,a))return!0;break;case 3:if(function(e,t,n){const r=o.mono_jiterp_get_simd_opcode(2,n);if(r>=0){const o=xa.has(n),s=Ia[n];if(o)e.local(\"pLocals\"),Ka(e,Ba(t,2),253,0),Ka(e,Ba(t,3),40),e.appendSimd(r),vi(e,t);else if(Array.isArray(s)){const n=za(e,Ba(t,3)),o=s[0];if(\"number\"!=typeof n)return Pe(`${e.functions[0].name}: Non-constant lane index passed to ExtractScalar`),!1;if(n>=o||n<0)return Pe(`${e.functions[0].name}: ExtractScalar index ${n} out of range (0 - ${o-1})`),!1;e.local(\"pLocals\"),Ka(e,Ba(t,2),253,0),e.appendSimd(r),e.appendU8(n),ei(e,Ba(t,1),s[1])}else Ei(e,t),e.appendSimd(r),vi(e,t);return!0}switch(n){case 191:return Ka(e,Ba(t,2),40),Ka(e,Ba(t,3),253,0),e.appendSimd(11),e.appendMemarg(0,0),!0;case 10:case 11:return Ei(e,t),e.appendSimd(214),e.appendSimd(195),11===n&&e.appendU8(69),ei(e,Ba(t,1),54),!0;case 12:case 13:{const r=13===n,o=r?71:65;return e.local(\"pLocals\"),Ka(e,Ba(t,2),253,0),e.local(\"math_lhs128\",34),Ka(e,Ba(t,3),253,0),e.local(\"math_rhs128\",34),e.appendSimd(o),e.local(\"math_lhs128\"),e.local(\"math_lhs128\"),e.appendSimd(o),e.local(\"math_rhs128\"),e.local(\"math_rhs128\"),e.appendSimd(o),e.appendSimd(80),e.appendSimd(77),e.appendSimd(80),e.appendSimd(r?195:163),ei(e,Ba(t,1),54),!0}case 47:{const n=Ba(t,3),r=za(e,n);return e.local(\"pLocals\"),Ka(e,Ba(t,2),253,0),\"object\"==typeof r?(e.appendSimd(12),e.appendBytes(r)):Ka(e,n,253,0),e.appendSimd(14),vi(e,t),!0}case 48:case 49:return function(e,t,n){const r=16/n,o=Ba(t,3),s=za(e,o);if(2!==r&&4!==r&&ut(!1,\"Unsupported shuffle element size\"),e.local(\"pLocals\"),Ka(e,Ba(t,2),253,0),\"object\"==typeof s){const t=new Uint8Array(_c),o=2===r?new Uint16Array(s.buffer,s.byteOffset,n):new Uint32Array(s.buffer,s.byteOffset,n);for(let e=0,s=0;e<n;e++,s+=r){const n=o[e];for(let e=0;e<r;e++)t[s+e]=n*r+e}e.appendSimd(12),e.appendBytes(t)}else{Ka(e,o,253,0),4===n&&(e.v128_const(0),e.appendSimd(134)),e.v128_const(0),e.appendSimd(102),e.appendSimd(12);for(let t=0;t<n;t++)for(let n=0;n<r;n++)e.appendU8(t);e.appendSimd(14),e.i32_const(4===n?2:1),e.appendSimd(107),e.appendSimd(12);for(let t=0;t<n;t++)for(let t=0;t<r;t++)e.appendU8(t);e.appendSimd(80)}return e.appendSimd(14),vi(e,t),!0}(e,t,48===n?8:4);default:return!1}return!1}(e,t,a))return!0;break;case 4:if(function(e,t,n){const r=o.mono_jiterp_get_simd_opcode(3,n);if(r>=0){const o=Aa[n],s=$a[n];if(Array.isArray(o)){const n=o[0],s=za(e,Ba(t,3));if(\"number\"!=typeof s)return Pe(`${e.functions[0].name}: Non-constant lane index passed to ReplaceScalar`),!1;if(s>=n||s<0)return Pe(`${e.functions[0].name}: ReplaceScalar index ${s} out of range (0 - ${n-1})`),!1;e.local(\"pLocals\"),Ka(e,Ba(t,2),253,0),Ka(e,Ba(t,4),o[1]),e.appendSimd(r),e.appendU8(s),vi(e,t)}else if(Array.isArray(s)){const n=s[0],o=za(e,Ba(t,4));if(\"number\"!=typeof o)return Pe(`${e.functions[0].name}: Non-constant lane index passed to store method`),!1;if(o>=n||o<0)return Pe(`${e.functions[0].name}: Store lane ${o} out of range (0 - ${n-1})`),!1;Ka(e,Ba(t,2),40),Ka(e,Ba(t,3),253,0),e.appendSimd(r),e.appendMemarg(0,0),e.appendU8(o)}else!function(e,t){e.local(\"pLocals\"),Ka(e,Ba(t,2),253,0),Ka(e,Ba(t,3),253,0),Ka(e,Ba(t,4),253,0)}(e,t),e.appendSimd(r),vi(e,t);return!0}switch(n){case 0:return e.local(\"pLocals\"),Ka(e,Ba(t,3),253,0),Ka(e,Ba(t,4),253,0),Ka(e,Ba(t,2),253,0),e.appendSimd(82),vi(e,t),!0;case 7:{const n=za(e,Ba(t,4));if(\"object\"!=typeof n)return Pe(`${e.functions[0].name}: Non-constant indices passed to PackedSimd.Shuffle`),!1;for(let t=0;t<32;t++){const r=n[t];if(r<0||r>31)return Pe(`${e.functions[0].name}: Shuffle lane index #${t} (${r}) out of range (0 - 31)`),!1}return e.local(\"pLocals\"),Ka(e,Ba(t,2),253,0),Ka(e,Ba(t,3),253,0),e.appendSimd(13),e.appendBytes(n),vi(e,t),!0}default:return!1}}(e,t,a))return!0}switch(n){case 651:if(e.options.enableSimd&&wi()){e.local(\"pLocals\");const n=Y().slice(t+4,t+4+_c);e.v128_const(n),vi(e,t),Pa.set(Ba(t,1),{type:\"v128\",value:n})}else ti(e,Ba(t,1),_c),e.ptr_const(t+4),Js(e,_c);return!0;case 652:case 653:case 654:case 655:{const r=Ua[n],o=_c/r,s=Ba(t,1),a=Ba(t,2),i=Ea[n],c=Ta[n];for(let t=0;t<o;t++)e.local(\"pLocals\"),Ka(e,a+t*mc,i),ei(e,s+t*r,c);return!0}case 656:{Fs[r]=(Fs[r]||0)+1,ti(e,Ba(t,1),_c),ti(e,Ba(t,2),0);const n=ki(e,\"simd_p_p\",o.mono_jiterp_get_simd_intrinsic(1,a));return e.callImport(n),!0}case 657:{Fs[r]=(Fs[r]||0)+1,ti(e,Ba(t,1),_c),ti(e,Ba(t,2),0),ti(e,Ba(t,3),0);const n=ki(e,\"simd_p_pp\",o.mono_jiterp_get_simd_intrinsic(2,a));return e.callImport(n),!0}case 658:{Fs[r]=(Fs[r]||0)+1,ti(e,Ba(t,1),_c),ti(e,Ba(t,2),0),ti(e,Ba(t,3),0),ti(e,Ba(t,4),0);const n=ki(e,\"simd_p_ppp\",o.mono_jiterp_get_simd_intrinsic(3,a));return e.callImport(n),!0}default:return Fe(`jiterpreter emit_simd failed for ${r}`),!1}}function vi(e,t){ei(e,Ba(t,1),253,11)}function Ui(e,t,n){e.local(\"pLocals\"),Ka(e,Ba(t,2),253,n||0)}function Ei(e,t){e.local(\"pLocals\"),Ka(e,Ba(t,2),253,0),Ka(e,Ba(t,3),253,0)}function Ti(e,t,n){if(!e.options.enableAtomics)return!1;const r=Sa[n];if(r){const n=r[2]>2;return e.local(\"pLocals\"),si(e,Ba(t,2),t,!0),Ka(e,Ba(t,3),n?41:40),e.appendAtomic(r[0],!1),e.appendMemarg(0,r[2]),0!==r[1]&&e.appendU8(r[1]),ei(e,Ba(t,1),n?55:54),!0}const o=va[n];if(o){const n=o[2]>2;return e.local(\"pLocals\"),si(e,Ba(t,2),t,!0),Ka(e,Ba(t,4),n?41:40),Ka(e,Ba(t,3),n?41:40),e.appendAtomic(o[0],!1),e.appendMemarg(0,o[2]),0!==o[1]&&e.appendU8(o[1]),ei(e,Ba(t,1),n?55:54),!0}return!1}const xi=64;let Ii,Ai,ji,$i=0;const Li={};function Ri(){return Ai||(Ai=[ta(\"interp_entry_prologue\",Zs(\"mono_jiterp_interp_entry_prologue\")),ta(\"interp_entry\",Zs(\"mono_jiterp_interp_entry\")),ta(\"unbox\",Zs(\"mono_jiterp_object_unbox\")),ta(\"stackval_from_data\",Zs(\"mono_jiterp_stackval_from_data\"))],Ai)}let Bi,Ni=class{constructor(e,t,n,r,o,s,a,i){this.imethod=e,this.method=t,this.argumentCount=n,this.unbox=o,this.hasThisReference=s,this.hasReturnValue=a,this.paramTypes=new Array(n);for(let e=0;e<n;e++)this.paramTypes[e]=D(r+4*e);this.defaultImplementation=i,this.result=0,this.hitCount=0}generateName(){const e=o.mono_wasm_method_get_full_name(this.method);try{const t=xe(e);this.name=t;let n=t;if(n){const e=24;n.length>e&&(n=n.substring(n.length-e,n.length)),n=`${this.imethod.toString(16)}_${n}`}else n=`${this.imethod.toString(16)}_${this.hasThisReference?\"i\":\"s\"}${this.hasReturnValue?\"_r\":\"\"}_${this.argumentCount}`;this.traceName=n}finally{e&&Xe._free(e)}}getTraceName(){return this.traceName||this.generateName(),this.traceName||\"unknown\"}getName(){return this.name||this.generateName(),this.name||\"unknown\"}};function Ci(){const e=[];let t=0;for(;0!=(t=o.mono_jiterp_tlqueue_next(1));){const n=Li[t];n?e.push(n):Fe(`Failed to find corresponding info for method ptr ${t} from jit queue!`)}if(!e.length)return;const n=4*e.length+1;let r=Ii;if(r?r.clear(n):(Ii=r=new Ns(n),r.defineType(\"unbox\",{pMonoObject:127},127,!0),r.defineType(\"interp_entry_prologue\",{pData:127,this_arg:127},127,!0),r.defineType(\"interp_entry\",{pData:127,res:127},64,!0),r.defineType(\"stackval_from_data\",{type:127,result:127,value:127},64,!0)),r.options.wasmBytesLimit<=ca(6))return;const s=Ms();let a=0,i=!0,c=!1;try{r.appendU32(1836278016),r.appendU32(1);for(let t=0;t<e.length;t++){const n=e[t],o={};n.hasThisReference&&(o.this_arg=127),n.hasReturnValue&&(o.res=127);for(let e=0;e<n.argumentCount;e++)o[`arg${e}`]=127;o.rmethod=127,r.defineType(n.getTraceName(),o,64,!1)}r.generateTypeSection();const t=Ri();r.compressImportNames=!0;for(let e=0;e<t.length;e++)t[e]||ut(!1,`trace #${e} missing`),r.defineImportedFunction(\"i\",t[e][0],t[e][1],!0,t[e][2]);for(let e=0;e<t.length;e++)r.markImportAsUsed(t[e][0]);r._generateImportSection(!1),r.beginSection(3),r.appendULeb(e.length);for(let t=0;t<e.length;t++){const n=e[t].getTraceName();r.functionTypes[n]||ut(!1,\"func type missing\"),r.appendULeb(r.functionTypes[n][0])}r.beginSection(7),r.appendULeb(e.length);for(let t=0;t<e.length;t++){const n=e[t].getTraceName();r.appendName(n),r.appendU8(0),r.appendULeb(r.importedFunctionCount+t)}r.beginSection(10),r.appendULeb(e.length);for(let t=0;t<e.length;t++){const n=e[t],o=n.getTraceName();r.beginFunction(o,{sp_args:127,need_unbox:127,scratchBuffer:127}),Di(r,n),r.appendU8(11),r.endFunction(!0)}r.endSection(),a=Ms();const n=r.getArrayView();la(6,n.length);const o=new WebAssembly.Module(n),s=r.getWasmImports(),c=new WebAssembly.Instance(o,s);for(let t=0;t<e.length;t++){const n=e[t],r=n.getTraceName(),o=c.exports[r];ji.set(n.result,o),i=!1}la(2,e.length)}catch(e){c=!0,i=!1,Pe(`interp_entry code generation failed: ${e}`),Xs()}finally{const t=Ms();if(a?(la(11,a-s),la(12,t-a)):la(11,t-s),c){Fe(`// ${e.length} trampolines generated, blob follows //`);let t=\"\",n=0;try{r.inSection&&r.endSection()}catch(e){}const o=r.getArrayView();for(let e=0;e<o.length;e++){const r=o[e];r<16&&(t+=\"0\"),t+=r.toString(16),t+=\" \",t.length%10==0&&(Fe(`${n}\\t${t}`),t=\"\",n=e+1)}Fe(`${n}\\t${t}`),Fe(\"// end blob //\")}else i&&!c&&Pe(\"failed to generate trampoline for unknown reason\")}}function Oi(e,t,n,r,s){const a=o.mono_jiterp_type_get_raw_value_size(n),i=o.mono_jiterp_get_arg_offset(t,0,s);switch(a){case 256:e.local(\"sp_args\"),e.local(r),e.appendU8(54),e.appendMemarg(i,2);break;case-1:case-2:case 1:case 2:case 4:switch(e.local(\"sp_args\"),e.local(r),a){case-1:e.appendU8(45),e.appendMemarg(0,0);break;case 1:e.appendU8(44),e.appendMemarg(0,0);break;case-2:e.appendU8(47),e.appendMemarg(0,0);break;case 2:e.appendU8(46),e.appendMemarg(0,0);break;case 4:e.appendU8(40),e.appendMemarg(0,2)}e.appendU8(54),e.appendMemarg(i,2);break;default:e.ptr_const(n),e.local(\"sp_args\"),e.i32_const(i),e.appendU8(106),e.local(r),e.callImport(\"stackval_from_data\")}}function Di(e,t){const n=Xe._malloc(xi);_(n,xi),v(n+Ys(13),t.paramTypes.length+(t.hasThisReference?1:0)),t.hasThisReference&&(e.block(),e.local(\"rmethod\"),e.i32_const(1),e.appendU8(113),e.appendU8(69),e.appendU8(13),e.appendULeb(0),e.local(\"this_arg\"),e.callImport(\"unbox\"),e.local(\"this_arg\",33),e.endBlock()),e.ptr_const(n),e.local(\"scratchBuffer\",34),e.local(\"rmethod\"),e.i32_const(-2),e.appendU8(113),e.appendU8(54),e.appendMemarg(Ys(6),0),e.local(\"scratchBuffer\"),t.hasThisReference?e.local(\"this_arg\"):e.i32_const(0),e.callImport(\"interp_entry_prologue\"),e.local(\"sp_args\",33),t.hasThisReference&&Oi(e,t.imethod,0,\"this_arg\",0);for(let n=0;n<t.paramTypes.length;n++){const r=t.paramTypes[n];Oi(e,t.imethod,r,`arg${n}`,n+(t.hasThisReference?1:0))}return e.local(\"scratchBuffer\"),t.hasReturnValue?e.local(\"res\"):e.i32_const(0),e.callImport(\"interp_entry\"),e.appendU8(15),!0}const Fi=16,Mi=0;let Pi,Vi,zi,Hi=0;const Wi=[],qi={},Gi={};class Ji{constructor(e,t,n,r,s){this.queue=[],r||ut(!1,\"Expected nonzero arg_offsets pointer\"),this.method=e,this.rmethod=t,this.catchExceptions=s,this.cinfo=n,this.addr=D(n+0),this.wrapper=D(n+8),this.signature=D(n+12),this.noWrapper=0!==R(n+28),this.hasReturnValue=-1!==O(n+24),this.returnType=o.mono_jiterp_get_signature_return_type(this.signature),this.paramCount=o.mono_jiterp_get_signature_param_count(this.signature),this.hasThisReference=0!==o.mono_jiterp_get_signature_has_this(this.signature);const a=o.mono_jiterp_get_signature_params(this.signature);this.paramTypes=new Array(this.paramCount);for(let e=0;e<this.paramCount;e++)this.paramTypes[e]=D(a+4*e);const i=this.paramCount+(this.hasThisReference?1:0);this.argOffsets=new Array(this.paramCount);for(let e=0;e<i;e++)this.argOffsets[e]=D(r+4*e);this.target=this.noWrapper?this.addr:this.wrapper,this.result=0,this.wasmNativeReturnType=this.returnType&&this.hasReturnValue?Yi[o.mono_jiterp_type_to_stind(this.returnType)]:64,this.wasmNativeSignature=this.paramTypes.map((e=>Yi[o.mono_jiterp_type_to_ldind(e)])),this.enableDirect=pa().directJitCalls&&!this.noWrapper&&this.wasmNativeReturnType&&(0===this.wasmNativeSignature.length||this.wasmNativeSignature.every((e=>e))),this.enableDirect&&(this.target=this.addr);let c=this.target.toString(16);const l=Hi++;this.name=`${this.enableDirect?\"jcp\":\"jcw\"}_${c}_${l.toString(16)}`}}function Xi(e){let t=Wi[e];return t||(e>=Wi.length&&(Wi.length=e+1),Vi||(Vi=zs()),Wi[e]=t=Vi.get(e)),t}function Qi(){const e=[];let t=0;for(;0!=(t=o.mono_jiterp_tlqueue_next(0));){const n=Gi[t];if(n)for(let t=0;t<n.length;t++)0===n[t].result&&e.push(n[t]);else Fe(`Failed to find corresponding info list for method ptr ${t} from jit queue!`)}if(!e.length)return;let n=Pi;if(n?n.clear(0):(Pi=n=new Ns(0),n.defineType(\"trampoline\",{ret_sp:127,sp:127,ftndesc:127,thrown:127},64,!0),n.defineType(\"begin_catch\",{ptr:127},64,!0),n.defineType(\"end_catch\",{},64,!0),n.defineImportedFunction(\"i\",\"begin_catch\",\"begin_catch\",!0,Zs(\"mono_jiterp_begin_catch\")),n.defineImportedFunction(\"i\",\"end_catch\",\"end_catch\",!0,Zs(\"mono_jiterp_end_catch\"))),n.options.wasmBytesLimit<=ca(6))return void o.mono_jiterp_tlqueue_clear(0);n.options.enableWasmEh&&(void 0!==zi||(zi=!0===ot.featureWasmEh,zi||Fe(\"Disabling Jiterpreter Exception Handling\")),zi||(ia({enableWasmEh:!1}),n.options.enableWasmEh=!1));const r=Ms();let s=0,a=!0,i=!1;const c=[];try{Vi||(Vi=zs()),n.appendU32(1836278016),n.appendU32(1);for(let t=0;t<e.length;t++){const r=e[t],o={};if(r.enableDirect){r.hasThisReference&&(o.this=127);for(let e=0;e<r.wasmNativeSignature.length;e++)o[`arg${e}`]=r.wasmNativeSignature[e];o.rgctx=127}else{const e=(r.hasThisReference?1:0)+(r.hasReturnValue?1:0)+r.paramCount;for(let t=0;t<e;t++)o[`arg${t}`]=127;o.ftndesc=127}n.defineType(r.name,o,r.enableDirect?r.wasmNativeReturnType:64,!1);const s=Xi(r.target);\"function\"!=typeof s&&ut(!1,`expected call target to be function but was ${s}`),c.push([r.name,r.name,s])}n.generateTypeSection(),n.compressImportNames=!0;for(let e=0;e<c.length;e++)n.defineImportedFunction(\"i\",c[e][0],c[e][1],!1,c[e][2]);for(let e=0;e<c.length;e++)n.markImportAsUsed(c[e][0]);n.markImportAsUsed(\"begin_catch\"),n.markImportAsUsed(\"end_catch\"),n._generateImportSection(!1),n.beginSection(3),n.appendULeb(e.length),n.functionTypes.trampoline||ut(!1,\"func type missing\");for(let t=0;t<e.length;t++)n.appendULeb(n.functionTypes.trampoline[0]);n.beginSection(7),n.appendULeb(e.length);for(let t=0;t<e.length;t++){const r=e[t];n.appendName(r.name),n.appendU8(0),n.appendULeb(n.importedFunctionCount+t)}n.beginSection(10),n.appendULeb(e.length);for(let t=0;t<e.length;t++){const r=e[t];if(n.beginFunction(\"trampoline\",{old_sp:127}),!tc(n,r))throw new Error(`Failed to generate ${r.name}`);n.appendU8(11),n.endFunction(!0)}n.endSection(),s=Ms();const t=n.getArrayView();la(6,t.length);const r=new WebAssembly.Module(t),i=n.getWasmImports(),l=new WebAssembly.Instance(r,i);for(let t=0;t<e.length;t++){const n=e[t],r=Hs(1,l.exports[n.name]);if(n.result=r,r>0){o.mono_jiterp_register_jit_call_thunk(n.cinfo,r);for(let e=0;e<n.queue.length;e++)o.mono_jiterp_register_jit_call_thunk(n.queue[e],r);n.enableDirect&&la(4,1),la(3,1)}n.queue.length=0,a=!1}}catch(e){i=!0,a=!1,Pe(`jit_call code generation failed: ${e}`),Xs()}finally{const t=Ms();if(s?(la(11,s-r),la(12,t-s)):la(11,t-r),i||a)for(let t=0;t<e.length;t++)e[t].result=-1;if(i){Fe(`// ${e.length} jit call wrappers generated, blob follows //`);for(let t=0;t<e.length;t++)Fe(`// #${t} === ${e[t].name} hasThis=${e[t].hasThisReference} hasRet=${e[t].hasReturnValue} wasmArgTypes=${e[t].wasmNativeSignature}`);let t=\"\",r=0;try{n.inSection&&n.endSection()}catch(e){}const o=n.getArrayView();for(let e=0;e<o.length;e++){const n=o[e];n<16&&(t+=\"0\"),t+=n.toString(16),t+=\" \",t.length%10==0&&(Fe(`${r}\\t${t}`),t=\"\",r=e+1)}Fe(`${r}\\t${t}`),Fe(\"// end blob //\")}else a&&!i&&Pe(\"failed to generate trampoline for unknown reason\")}}const Yi={65535:127,70:127,71:127,72:127,73:127,74:127,75:127,76:126,77:127,78:125,79:124,80:127,81:127,82:127,83:127,84:127,85:126,86:125,87:124,223:127},Zi={70:44,71:45,72:46,73:47,74:40,75:40,76:41,77:40,78:42,79:43,80:40,81:54,82:58,83:59,84:54,85:55,86:56,87:57,223:54};function Ki(e,t,n){e.local(\"sp\"),e.appendU8(n),e.appendMemarg(t,0)}function ec(e,t){e.local(\"sp\"),e.i32_const(t),e.appendU8(106)}function tc(e,t){let n=0;e.options.enableWasmEh&&e.block(64,6),t.hasReturnValue&&t.enableDirect&&e.local(\"ret_sp\"),t.hasThisReference&&(Ki(e,t.argOffsets[0],40),n++),t.hasReturnValue&&!t.enableDirect&&e.local(\"ret_sp\");for(let r=0;r<t.paramCount;r++){const s=t.argOffsets[n+r];if(R(D(t.cinfo+Fi)+r)==Mi)Ki(e,s,40);else if(t.enableDirect){const n=o.mono_jiterp_type_to_ldind(t.paramTypes[r]);if(n||ut(!1,`No load opcode for ${t.paramTypes[r]}`),65535===n)ec(e,s);else{const o=Zi[n];if(!o)return Pe(`No wasm load op for arg #${r} type ${t.paramTypes[r]} cil opcode ${n}`),!1;Ki(e,s,o)}}else ec(e,s)}if(e.local(\"ftndesc\"),(t.enableDirect||t.noWrapper)&&(e.appendU8(40),e.appendMemarg(4,0)),e.callImport(t.name),t.hasReturnValue&&t.enableDirect){const n=o.mono_jiterp_type_to_stind(t.returnType),r=Zi[n];if(!r)return Pe(`No wasm store op for return type ${t.returnType} cil opcode ${n}`),!1;e.appendU8(r),e.appendMemarg(0,0)}return e.options.enableWasmEh&&(e.appendU8(7),e.appendULeb(e.getTypeIndex(\"__cpp_exception\")),e.callImport(\"begin_catch\"),e.callImport(\"end_catch\"),e.local(\"thrown\"),e.i32_const(1),e.appendU8(54),e.appendMemarg(0,2),e.endBlock()),e.appendU8(15),!0}const nc=30;let rc,oc;const sc=[],ac=[];class ic{constructor(e){this.name=e,this.eip=0}}class cc{constructor(e,t,n){this.ip=e,this.index=t,this.isVerbose=!!n}get hitCount(){return o.mono_jiterp_get_trace_hit_count(this.index)}}const lc={};let pc=1;const uc={},dc={},fc=4,_c=16,mc=8;let hc,gc;const bc=[\"asin\",\"acos\",\"atan\",\"asinh\",\"acosh\",\"atanh\",\"cos\",\"sin\",\"tan\",\"cosh\",\"sinh\",\"tanh\",\"exp\",\"log\",\"log2\",\"log10\",\"cbrt\"],yc=[\"fmod\",\"atan2\",\"pow\"],wc=[\"asinf\",\"acosf\",\"atanf\",\"asinhf\",\"acoshf\",\"atanhf\",\"cosf\",\"sinf\",\"tanf\",\"coshf\",\"sinhf\",\"tanhf\",\"expf\",\"logf\",\"log2f\",\"log10f\",\"cbrtf\"],kc=[\"fmodf\",\"atan2f\",\"powf\"];function Sc(e,t,n){if(o.mono_jiterp_trace_bailout(n),14===n)return e;const r=dc[t];if(!r)return void Pe(`trace info not found for ${t}`);let s=r.bailoutCounts;s||(r.bailoutCounts=s={});const a=s[n];return s[n]=a?a+1:1,r.bailoutCount?r.bailoutCount++:r.bailoutCount=1,e}function vc(){if(gc)return gc;gc=[ta(\"bailout\",Sc),ta(\"copy_ptr\",Zs(\"mono_wasm_copy_managed_pointer\")),ta(\"entry\",Zs(\"mono_jiterp_increase_entry_count\")),ta(\"value_copy\",Zs(\"mono_jiterp_value_copy\")),ta(\"gettype\",Zs(\"mono_jiterp_gettype_ref\")),ta(\"castv2\",Zs(\"mono_jiterp_cast_v2\")),ta(\"hasparent\",Zs(\"mono_jiterp_has_parent_fast\")),ta(\"imp_iface\",Zs(\"mono_jiterp_implements_interface\")),ta(\"imp_iface_s\",Zs(\"mono_jiterp_implements_special_interface\")),ta(\"box\",Zs(\"mono_jiterp_box_ref\")),ta(\"localloc\",Zs(\"mono_jiterp_localloc\")),[\"ckovr_i4\",\"overflow_check_i4\",Zs(\"mono_jiterp_overflow_check_i4\")],[\"ckovr_u4\",\"overflow_check_i4\",Zs(\"mono_jiterp_overflow_check_u4\")],ta(\"newobj_i\",Zs(\"mono_jiterp_try_newobj_inlined\")),ta(\"newstr\",Zs(\"mono_jiterp_try_newstr\")),ta(\"ld_del_ptr\",Zs(\"mono_jiterp_ld_delegate_method_ptr\")),ta(\"ldtsflda\",Zs(\"mono_jiterp_ldtsflda\")),ta(\"conv\",Zs(\"mono_jiterp_conv\")),ta(\"relop_fp\",Zs(\"mono_jiterp_relop_fp\")),ta(\"safepoint\",Zs(\"mono_jiterp_do_safepoint\")),ta(\"hashcode\",Zs(\"mono_jiterp_get_hashcode\")),ta(\"try_hash\",Zs(\"mono_jiterp_try_get_hashcode\")),ta(\"hascsize\",Zs(\"mono_jiterp_object_has_component_size\")),ta(\"hasflag\",Zs(\"mono_jiterp_enum_hasflag\")),ta(\"array_rank\",Zs(\"mono_jiterp_get_array_rank\")),[\"a_elesize\",\"array_rank\",Zs(\"mono_jiterp_get_array_element_size\")],ta(\"stfld_o\",Zs(\"mono_jiterp_set_object_field\")),[\"stelemr_tc\",\"stelemr\",Zs(\"mono_jiterp_stelem_ref\")],ta(\"fma\",Zs(\"fma\")),ta(\"fmaf\",Zs(\"fmaf\"))],ac.length>0&&(gc.push([\"trace_eip\",\"trace_eip\",Uc]),gc.push([\"trace_args\",\"trace_eip\",Ec]));const e=(e,t)=>{for(let n=0;n<e.length;n++){const r=e[n];gc.push([r,t,Zs(r)])}};return e(wc,\"mathop_f_f\"),e(kc,\"mathop_ff_f\"),e(bc,\"mathop_d_d\"),e(yc,\"mathop_dd_d\"),gc}function Uc(e,t){const n=lc[e];if(!n)throw new Error(`Unrecognized instrumented trace id ${e}`);n.eip=t,rc=n}function Ec(e,t){if(!rc)throw new Error(\"No trace active\");rc.operand1=e>>>0,rc.operand2=t>>>0}function Tc(e,t,n,r){if(\"number\"==typeof r)o.mono_jiterp_adjust_abort_count(r,1),r=js(r);else{let e=uc[r];\"number\"!=typeof e?e=1:e++,uc[r]=e}dc[e].abortReason=r}function xc(e){if(!ot.runtimeReady)return;if(oc||(oc=pa()),!oc.enableStats)return;const t=ca(9),n=ca(10),r=ca(7),s=ca(8),a=ca(3),i=ca(4),c=ca(2),l=ca(1),p=ca(0),u=ca(6),d=ca(11),f=ca(12),_=t/(t+n)*100,m=o.mono_jiterp_get_rejected_trace_count(),h=oc.eliminateNullChecks?r.toString():\"off\",g=oc.zeroPageOptimization?s.toString()+(ra()?\"\":\" (disabled)\"):\"off\",b=oc.enableBackwardBranches?`emitted: ${t}, failed: ${n} (${_.toFixed(1)}%)`:\": off\",y=a?oc.directJitCalls?`direct jit calls: ${i} (${(i/a*100).toFixed(1)}%)`:\"direct jit calls: off\":\"\";if(Fe(`// jitted ${u} bytes; ${l} traces (${(l/p*100).toFixed(1)}%) (${m} rejected); ${a} jit_calls; ${c} interp_entries`),Fe(`// cknulls eliminated: ${h}, fused: ${g}; back-branches ${b}; ${y}`),Fe(`// time: ${0|d}ms generating, ${0|f}ms compiling wasm.`),!e){if(oc.countBailouts){const e=Object.values(dc);e.sort(((e,t)=>(t.bailoutCount||0)-(e.bailoutCount||0)));for(let e=0;e<fa.length;e++){const t=o.mono_jiterp_get_trace_bailout_count(e);t&&Fe(`// traces bailed out ${t} time(s) due to ${fa[e]}`)}for(let t=0,n=0;t<e.length&&n<nc;t++){const r=e[t];if(r.bailoutCount){n++,Fe(`${r.name}: ${r.bailoutCount} bailout(s)`);for(const e in r.bailoutCounts)Fe(`  ${fa[e]} x${r.bailoutCounts[e]}`)}}}if(oc.estimateHeat){const e={},t=Object.values(dc);for(let n=0;n<t.length;n++){const r=t[n];r.abortReason&&\"end-of-body\"!==r.abortReason&&(e[r.abortReason]?e[r.abortReason]+=r.hitCount:e[r.abortReason]=r.hitCount)}t.sort(((e,t)=>t.hitCount-e.hitCount)),Fe(\"// hottest failed traces:\");for(let e=0,n=0;e<t.length&&n<nc;e++)if(t[e].name&&!(t[e].fnPtr||t[e].name.indexOf(\"Xunit.\")>=0)){if(t[e].abortReason){if(t[e].abortReason.startsWith(\"mono_icall_\")||t[e].abortReason.startsWith(\"ret.\"))continue;switch(t[e].abortReason){case\"trace-too-small\":case\"trace-too-big\":case\"call\":case\"callvirt.fast\":case\"calli.nat.fast\":case\"calli.nat\":case\"call.delegate\":case\"newobj\":case\"newobj_vt\":case\"newobj_slow\":case\"switch\":case\"rethrow\":case\"end-of-body\":case\"ret\":case\"intrins_marvin_block\":case\"intrins_ascii_chars_to_uppercase\":continue}}n++,Fe(`${t[e].name} @${t[e].ip} (${t[e].hitCount} hits) ${t[e].abortReason}`)}const n=[];for(const t in e)n.push([t,e[t]]);n.sort(((e,t)=>t[1]-e[1])),Fe(\"// heat:\");for(let e=0;e<n.length;e++)Fe(`// ${n[e][0]}: ${n[e][1]}`)}else{for(let e=0;e<690;e++){const t=js(e),n=o.mono_jiterp_adjust_abort_count(e,0);n>0?uc[t]=n:delete uc[t]}const e=Object.keys(uc);e.sort(((e,t)=>uc[t]-uc[e]));for(let t=0;t<e.length;t++)Fe(`// ${e[t]}: ${uc[e[t]]} abort(s)`)}for(const e in Fs)Fe(`// simd ${e}: ${Fs[e]} fallback insn(s)`)}}const Ic=\"https://dotnet.generated.invalid/interp_pgo\";async function Ac(){if(!st.is_runtime_running())return void Fe(\"Skipped saving interp_pgo table (already exited)\");const e=await Lc(Ic);if(e)try{const t=o.mono_interp_pgo_save_table(0,0);if(t<=0)return void Fe(\"Failed to save interp_pgo table (No data to save)\");const r=Xe._malloc(t);if(0!==o.mono_interp_pgo_save_table(r,t))return void Pe(\"Failed to save interp_pgo table (Unknown error)\");const s=Y().slice(r,r+t);await async function(e,t,r){try{const r=await $c();if(!r)return!1;const o=n?new Uint8Array(t).slice(0):t,s=new Response(o,{headers:{\"content-type\":\"application/octet-stream\",\"content-length\":t.byteLength.toString()}});return await r.put(e,s),!0}catch(t){return Me(\"Failed to store entry to the cache: \"+e,t),!1}}(e,s)&&Fe(\"Saved interp_pgo table to cache\"),async function(e,t){try{const n=await $c();if(!n)return;const r=await n.keys();for(const o of r)o.url&&o.url!==t&&o.url.startsWith(e)&&await n.delete(o)}catch(e){return}}(Ic,e),Xe._free(r)}catch(e){Pe(`Failed to save interp_pgo table: ${e}`)}else Pe(\"Failed to save interp_pgo table (No cache key)\")}async function jc(){const e=await Lc(Ic);if(!e)return void Pe(\"Failed to create cache key for interp_pgo table\");const t=await async function(e){try{const t=await $c();if(!t)return;const n=await t.match(e);if(!n)return;return n.arrayBuffer()}catch(t){return void Me(\"Failed to load entry from the cache: \"+e,t)}}(e);if(!t)return void Fe(\"Failed to load interp_pgo table (No table found in cache)\");const n=Xe._malloc(t.byteLength);Y().set(new Uint8Array(t),n),o.mono_interp_pgo_load_table(n,t.byteLength)&&Pe(\"Failed to load interp_pgo table (Unknown error)\"),Xe._free(n)}async function $c(){if(tt&&!1===globalThis.window.isSecureContext)return Me(\"Failed to open the cache, running on an insecure origin\"),null;if(void 0===globalThis.caches)return Me(\"Failed to open the cache, probably running on an insecure origin\"),null;const e=`dotnet-resources${document.baseURI.substring(document.location.origin.length)}`;try{return await globalThis.caches.open(e)||null}catch(e){return Me(\"Failed to open cache\"),null}}async function Lc(t){if(!ot.subtle)return null;const n=Object.assign({},ot.config);n.resourcesHash=n.resources.hash,delete n.assets,delete n.resources,n.preferredIcuAsset=st.preferredIcuAsset,delete n.forwardConsoleLogsToWS,delete n.diagnosticTracing,delete n.appendElementOnExit,delete n.interopCleanupOnExit,delete n.dumpThreadsOnNonZeroExit,delete n.logExitCode,delete n.pthreadPoolInitialSize,delete n.pthreadPoolUnusedSize,delete n.asyncFlushOnExit,delete n.remoteSources,delete n.ignorePdbLoadErrors,delete n.maxParallelDownloads,delete n.enableDownloadRetry,delete n.extensions,delete n.runtimeId,delete n.jsThreadBlockingMode,n.GitHash=st.gitHash,n.ProductVersion=e;const r=JSON.stringify(n),o=await ot.subtle.digest(\"SHA-256\",(new TextEncoder).encode(r)),s=new Uint8Array(o);return`${t}-${Array.from(s).map((e=>e.toString(16).padStart(2,\"0\"))).join(\"\")}`}async function Rc(e){const t=st.config.resources.lazyAssembly;if(!t)throw new Error(\"No assemblies have been marked as lazy-loadable. Use the 'BlazorWebAssemblyLazyLoad' item group in your project file to enable lazy loading an assembly.\");let n=e;e.endsWith(\".dll\")?n=e.substring(0,e.length-4):e.endsWith(\".wasm\")&&(n=e.substring(0,e.length-5));const r=n+\".dll\",o=n+\".wasm\";if(st.config.resources.fingerprinting){const t=st.config.resources.fingerprinting;for(const n in t){const s=t[n];if(s==r||s==o){e=n;break}}}if(!t[e])if(t[r])e=r;else{if(!t[o])throw new Error(`${e} must be marked with 'BlazorWebAssemblyLazyLoad' item group in your project file to allow lazy-loading.`);e=o}const s={name:e,hash:t[e],behavior:\"assembly\"};if(st.loadedAssemblies.includes(e))return!1;let a=n+\".pdb\",i=!1;if(0!=st.config.debugLevel&&(i=Object.prototype.hasOwnProperty.call(t,a),st.config.resources.fingerprinting)){const e=st.config.resources.fingerprinting;for(const t in e)if(e[t]==a){a=t,i=!0;break}}const c=st.retrieve_asset_download(s);let l=null,p=null;if(i){const e=t[a]?st.retrieve_asset_download({name:a,hash:t[a],behavior:\"pdb\"}):Promise.resolve(null),[n,r]=await Promise.all([c,e]);l=new Uint8Array(n),p=r?new Uint8Array(r):null}else{const e=await c;l=new Uint8Array(e),p=null}return function(e,t){st.assert_runtime_running();const n=Xe.stackSave();try{const n=xn(4),r=In(n,2),o=In(n,3);Mn(r,21),Mn(o,21),yo(r,e,4),yo(o,t,4),gn(mn.LoadLazyAssembly,n)}finally{Xe.stackRestore(n)}}(l,p),!0}async function Bc(e){const t=st.config.resources.satelliteResources;t&&await Promise.all(e.filter((e=>Object.prototype.hasOwnProperty.call(t,e))).map((e=>{const n=[];for(const r in t[e]){const o={name:r,hash:t[e][r],behavior:\"resource\",culture:e};n.push(st.retrieve_asset_download(o))}return n})).reduce(((e,t)=>e.concat(t)),new Array).map((async e=>{const t=await e;!function(e){st.assert_runtime_running();const t=Xe.stackSave();try{const t=xn(3),n=In(t,2);Mn(n,21),yo(n,e,4),gn(mn.LoadSatelliteAssembly,t)}finally{Xe.stackRestore(t)}}(new Uint8Array(t))})))}function Nc(e){if(e===c)return null;const t=o.mono_wasm_read_as_bool_or_null_unsafe(e);return 0!==t&&(1===t||null)}var Cc,Oc;function Dc(e){if(e)try{(e=e.toLocaleLowerCase()).includes(\"zh\")&&(e=e.replace(\"chs\",\"HANS\").replace(\"cht\",\"HANT\"));const t=Intl.getCanonicalLocales(e.replace(\"_\",\"-\"));return t.length>0?t[0]:void 0}catch(e){return}}!function(e){e[e.Sending=0]=\"Sending\",e[e.Closed=1]=\"Closed\",e[e.Error=2]=\"Error\"}(Cc||(Cc={})),function(e){e[e.Idle=0]=\"Idle\",e[e.PartialCommand=1]=\"PartialCommand\",e[e.Error=2]=\"Error\"}(Oc||(Oc={}));const Fc=[function(e){qo&&(globalThis.clearTimeout(qo),qo=void 0),qo=Xe.safeSetTimeout(mono_wasm_schedule_timer_tick,e)},function(e,t,n,r,o){if(!0!==ot.mono_wasm_runtime_is_ready)return;const s=Y(),a=0!==e?xe(e).concat(\".dll\"):\"\",i=dt(new Uint8Array(s.buffer,t,n));let c;r&&(c=dt(new Uint8Array(s.buffer,r,o))),It({eventName:\"AssemblyLoaded\",assembly_name:a,assembly_b64:i,pdb_b64:c})},function(e,t){const n=xe(t);Qe.logging&&\"function\"==typeof Qe.logging.debugger&&Qe.logging.debugger(e,n)},function(e,t,n,r){const o={res_ok:e,res:{id:t,value:dt(new Uint8Array(Y().buffer,n,r))}};_t.has(t)&&Me(`Adding an id (${t}) that already exists in commands_received`),_t.set(t,o)},function mono_wasm_fire_debugger_agent_message_with_data(e,t){mono_wasm_fire_debugger_agent_message_with_data_to_pause(dt(new Uint8Array(Y().buffer,e,t)))},mono_wasm_fire_debugger_agent_message_with_data_to_pause,function(){++Jo,Xe.safeSetTimeout(Yo,0)},function(e,t,n,r,s,a,i,c){if(n||ut(!1,\"expected instruction pointer\"),oc||(oc=pa()),!oc.enableTraces)return 1;if(oc.wasmBytesLimit<=ca(6))return 1;let l,p=dc[r];if(p||(dc[r]=p=new cc(n,r,i)),la(0,1),oc.estimateHeat||ac.length>0||p.isVerbose){const e=o.mono_wasm_method_get_full_name(t);l=xe(e),Xe._free(e)}const u=xe(o.mono_wasm_method_get_name(t));p.name=l||u;let d=oc.noExitBackwardBranches?function(e,t,n){const r=t+n,s=[],a=(e-t)/2;for(;e<r;){const n=(e-t)/2,r=B(e);if(271===r)break;const i=o.mono_jiterp_get_opcode_info(r,1),c=fi(e,r);if(\"number\"==typeof c){if(0===c){Fe(`opcode @${e} branch target is self. aborting backbranch table generation`);break}if(c<0){const t=n+c;if(t<0){Fe(`opcode @${e}'s displacement of ${c} goes before body: ${t}. aborting backbranch table generation`);break}t>=a&&s.push(t)}switch(r){case 132:case 133:s.push(n+i)}e+=2*i}else e+=2*i}return s.length<=0?null:new Uint16Array(s)}(n,s,a):null;if(d&&n!==s){const e=(n-s)/2;let t=!1;for(let n=0;n<d.length;n++)if(d[n]>=e){t=!0;break}t||(d=null)}const f=function(e,t,n,r,s,a,i,c,l){let p=hc;p?p.clear(8):(hc=p=new Ns(8),function(e){e.defineType(\"trace\",{frame:127,pLocals:127,cinfo:127,ip:127},127,!0),e.defineType(\"bailout\",{retval:127,base:127,reason:127},127,!0),e.defineType(\"copy_ptr\",{dest:127,src:127},64,!0),e.defineType(\"value_copy\",{dest:127,src:127,klass:127},64,!0),e.defineType(\"entry\",{imethod:127},127,!0),e.defineType(\"strlen\",{ppString:127,pResult:127},127,!0),e.defineType(\"getchr\",{ppString:127,pIndex:127,pResult:127},127,!0),e.defineType(\"getspan\",{destination:127,span:127,index:127,element_size:127},127,!0),e.defineType(\"overflow_check_i4\",{lhs:127,rhs:127,opcode:127},127,!0),e.defineType(\"mathop_d_d\",{value:124},124,!0),e.defineType(\"mathop_dd_d\",{lhs:124,rhs:124},124,!0),e.defineType(\"mathop_f_f\",{value:125},125,!0),e.defineType(\"mathop_ff_f\",{lhs:125,rhs:125},125,!0),e.defineType(\"fmaf\",{x:125,y:125,z:125},125,!0),e.defineType(\"fma\",{x:124,y:124,z:124},124,!0),e.defineType(\"trace_eip\",{traceId:127,eip:127},64,!0),e.defineType(\"newobj_i\",{ppDestination:127,vtable:127},127,!0),e.defineType(\"newstr\",{ppDestination:127,length:127},127,!0),e.defineType(\"localloc\",{destination:127,len:127,frame:127},64,!0),e.defineType(\"ld_del_ptr\",{ppDestination:127,ppSource:127},64,!0),e.defineType(\"ldtsflda\",{ppDestination:127,offset:127},64,!0),e.defineType(\"gettype\",{destination:127,source:127},127,!0),e.defineType(\"castv2\",{destination:127,source:127,klass:127,opcode:127},127,!0),e.defineType(\"hasparent\",{klass:127,parent:127},127,!0),e.defineType(\"imp_iface\",{vtable:127,klass:127},127,!0),e.defineType(\"imp_iface_s\",{obj:127,vtable:127,klass:127},127,!0),e.defineType(\"box\",{vtable:127,destination:127,source:127,vt:127},64,!0),e.defineType(\"conv\",{destination:127,source:127,opcode:127},127,!0),e.defineType(\"relop_fp\",{lhs:124,rhs:124,opcode:127},127,!0),e.defineType(\"safepoint\",{frame:127,ip:127},64,!0),e.defineType(\"hashcode\",{ppObj:127},127,!0),e.defineType(\"try_hash\",{ppObj:127},127,!0),e.defineType(\"hascsize\",{ppObj:127},127,!0),e.defineType(\"hasflag\",{klass:127,dest:127,sp1:127,sp2:127},64,!0),e.defineType(\"array_rank\",{destination:127,source:127},127,!0),e.defineType(\"stfld_o\",{locals:127,fieldOffsetBytes:127,targetLocalOffsetBytes:127,sourceLocalOffsetBytes:127},127,!0),e.defineType(\"notnull\",{ptr:127,expected:127,traceIp:127,ip:127},64,!0),e.defineType(\"stelemr\",{o:127,aindex:127,ref:127},127,!0),e.defineType(\"simd_p_p\",{arg0:127,arg1:127},64,!0),e.defineType(\"simd_p_pp\",{arg0:127,arg1:127,arg2:127},64,!0),e.defineType(\"simd_p_ppp\",{arg0:127,arg1:127,arg2:127,arg3:127},64,!0);const t=vc();for(let n=0;n<t.length;n++)t[n]||ut(!1,`trace #${n} missing`),e.defineImportedFunction(\"i\",t[n][0],t[n][1],!0,t[n][2])}(p)),oc=p.options;const u=r+s,d=`${t}:${(n-r).toString(16)}`,f=Ms();let _=0,m=!0,h=!1;const g=dc[a],b=g.isVerbose||i&&ac.findIndex((e=>i.indexOf(e)>=0))>=0;b&&!i&&ut(!1,\"Expected methodFullName if trace is instrumented\");const y=b?pc++:0;b&&(Fe(`instrumenting: ${i}`),lc[y]=new ic(i)),p.compressImportNames=!b;try{p.appendU32(1836278016),p.appendU32(1),p.generateTypeSection();const t={disp:127,cknull_ptr:127,dest_ptr:127,src_ptr:127,memop_dest:127,memop_src:127,index:127,count:127,math_lhs32:127,math_rhs32:127,math_lhs64:126,math_rhs64:126,temp_f32:125,temp_f64:124};p.options.enableSimd&&(t.v128_zero=123,t.math_lhs128=123,t.math_rhs128=123);let s=!0,i=0;if(p.defineFunction({type:\"trace\",name:d,export:!0,locals:t},(()=>{switch(p.base=n,p.traceIndex=a,p.frame=e,B(n)){case 673:case 674:case 676:case 675:break;default:throw new Error(`Expected *ip to be a jiterpreter opcode but it was ${B(n)}`)}return p.cfg.initialize(r,c,b?1:0),i=function(e,t,n,r,s,a,i,c){let l=!0,p=!1,u=!1,d=!1,f=0,_=0,m=0;Ga(),a.backBranchTraceLevel=i?2:0;let h=a.cfg.entry(n);for(;n&&n;){if(a.cfg.ip=n,n>=s){Tc(a.traceIndex,0,0,\"end-of-body\"),i&&Fe(`instrumented trace ${t} exited at end of body @${n.toString(16)}`);break}const g=3840-a.bytesGeneratedSoFar-a.cfg.overheadBytes;if(a.size>=g){Tc(a.traceIndex,0,0,\"trace-too-big\"),i&&Fe(`instrumented trace ${t} exited because of size limit at @${n.toString(16)} (spaceLeft=${g}b)`);break}let b=B(n);const y=o.mono_jiterp_get_opcode_info(b,2),w=o.mono_jiterp_get_opcode_info(b,3),k=o.mono_jiterp_get_opcode_info(b,1),S=b>=656&&b<=658,v=S?b-656+2:0,U=S?Ba(n,1+v):0;b>=0&&b<690||ut(!1,`invalid opcode ${b}`);const E=S?_a[v][U]:js(b),T=n,x=a.options.noExitBackwardBranches&&Ma(n,r,c),I=a.branchTargets.has(n),A=x||I||l&&c,j=m+_+a.branchTargets.size;let $=!1,L=ea(b);switch(x&&(a.backBranchTraceLevel>1&&Fe(`${t} recording back branch target 0x${n.toString(16)}`),a.backBranchOffsets.push(n)),A&&(u=!1,d=!1,Qa(a,n,x),p=!0,Ga(),m=0),L<-1&&p&&(L=-2===L?2:0),l=!1,271===b||(sc.indexOf(b)>=0?(Ps(a,n,23),b=677):u&&(b=677)),b){case 677:u&&(d||a.appendU8(0),d=!0);break;case 313:case 314:ni(a,Ba(n,1),0,Ba(n,2));break;case 312:ti(a,Ba(n,1)),Ka(a,Ba(n,2),40),a.local(\"frame\"),a.callImport(\"localloc\");break;case 285:Ka(a,Ba(n,1),40),a.i32_const(0),Ka(a,Ba(n,2),40),a.appendU8(252),a.appendU8(11),a.appendU8(0);break;case 286:Ka(a,Ba(n,1),40),qs(a,0,Ba(n,2));break;case 310:{const e=Ba(n,3),t=Ba(n,2),r=Ba(n,1),o=za(a,e);0!==o&&(\"number\"!=typeof o?(Ka(a,e,40),a.local(\"count\",34),a.block(64,4)):(a.i32_const(o),a.local(\"count\",33)),Ka(a,r,40),a.local(\"dest_ptr\",34),a.appendU8(69),Ka(a,t,40),a.local(\"src_ptr\",34),a.appendU8(69),a.appendU8(114),a.block(64,4),Ps(a,n,2),a.endBlock(),\"number\"==typeof o&&Gs(a,0,0,o,!1,\"dest_ptr\",\"src_ptr\")||(a.local(\"dest_ptr\"),a.local(\"src_ptr\"),a.local(\"count\"),a.appendU8(252),a.appendU8(10),a.appendU8(0),a.appendU8(0)),\"number\"!=typeof o&&a.endBlock());break}case 311:{const e=Ba(n,3),t=Ba(n,2);si(a,Ba(n,1),n,!0),Ka(a,t,40),Ka(a,e,40),a.appendU8(252),a.appendU8(11),a.appendU8(0);break}case 143:case 145:case 227:case 229:case 144:case 146:case 129:case 132:case 133:_i(a,n,e,b)?p=!0:n=0;break;case 538:{const e=Ba(n,2),t=Ba(n,1);e!==t?(a.local(\"pLocals\"),si(a,e,n,!0),ei(a,t,54)):si(a,e,n,!1),a.allowNullCheckOptimization&&Ha.set(t,n),$=!0;break}case 637:case 638:{const t=D(e+Ys(4));a.ptr_const(t),a.callImport(\"entry\"),a.block(64,4),Ps(a,n,1),a.endBlock();break}case 675:L=0;break;case 138:break;case 86:{a.local(\"pLocals\");const e=Ba(n,2),r=oi(a,e),o=Ba(n,1);r||Pe(`${t}: Expected local ${e} to have address taken flag`),ti(a,e),ei(a,o,54),Pa.set(o,{type:\"ldloca\",offset:e}),$=!0;break}case 272:case 300:case 301:case 556:{a.local(\"pLocals\");let t=Da(e,Ba(n,2));300===b&&(t=o.mono_jiterp_imethod_to_ftnptr(t)),a.ptr_const(t),ei(a,Ba(n,1),54);break}case 305:{const t=Da(e,Ba(n,3));Ka(a,Ba(n,1),40),Ka(a,Ba(n,2),40),a.ptr_const(t),a.callImport(\"value_copy\");break}case 306:{const e=Ba(n,3);Ka(a,Ba(n,1),40),Ka(a,Ba(n,2),40),Js(a,e);break}case 307:{const e=Ba(n,3);ti(a,Ba(n,1),e),si(a,Ba(n,2),n,!0),Js(a,e);break}case 308:{const t=Da(e,Ba(n,3));Ka(a,Ba(n,1),40),ti(a,Ba(n,2),0),a.ptr_const(t),a.callImport(\"value_copy\");break}case 309:{const e=Ba(n,3);Ka(a,Ba(n,1),40),ti(a,Ba(n,2),0),Js(a,e);break}case 540:a.local(\"pLocals\"),si(a,Ba(n,2),n,!0),a.appendU8(40),a.appendMemarg(Ys(2),2),ei(a,Ba(n,1),54);break;case 539:{a.block(),Ka(a,Ba(n,3),40),a.local(\"index\",34);let e=\"cknull_ptr\";a.options.zeroPageOptimization&&ra()?(la(8,1),Ka(a,Ba(n,2),40),e=\"src_ptr\",a.local(e,34)):si(a,Ba(n,2),n,!0),a.appendU8(40),a.appendMemarg(Ys(2),2),a.appendU8(72),a.local(\"index\"),a.i32_const(0),a.appendU8(78),a.appendU8(113),a.appendU8(13),a.appendULeb(0),Ps(a,n,11),a.endBlock(),a.local(\"pLocals\"),a.local(\"index\"),a.i32_const(2),a.appendU8(108),a.local(e),a.appendU8(106),a.appendU8(47),a.appendMemarg(Ys(3),1),ei(a,Ba(n,1),54);break}case 342:case 343:{const e=Na(n,4);a.block(),Ka(a,Ba(n,3),40),a.local(\"index\",34);let t=\"cknull_ptr\";342===b?si(a,Ba(n,2),n,!0):(ti(a,Ba(n,2),0),t=\"src_ptr\",a.local(t,34)),a.appendU8(40),a.appendMemarg(Ys(7),2),a.appendU8(73),a.local(\"index\"),a.i32_const(0),a.appendU8(78),a.appendU8(113),a.appendU8(13),a.appendULeb(0),Ps(a,n,18),a.endBlock(),a.local(\"pLocals\"),a.local(t),a.appendU8(40),a.appendMemarg(Ys(8),2),a.local(\"index\"),a.i32_const(e),a.appendU8(108),a.appendU8(106),ei(a,Ba(n,1),54);break}case 663:a.block(),Ka(a,Ba(n,3),40),a.local(\"count\",34),a.i32_const(0),a.appendU8(78),a.appendU8(13),a.appendULeb(0),Ps(a,n,18),a.endBlock(),ti(a,Ba(n,1),16),a.local(\"dest_ptr\",34),Ka(a,Ba(n,2),40),a.appendU8(54),a.appendMemarg(0,0),a.local(\"dest_ptr\"),a.local(\"count\"),a.appendU8(54),a.appendMemarg(4,0);break;case 577:ti(a,Ba(n,1),8),ti(a,Ba(n,2),8),a.callImport(\"ld_del_ptr\");break;case 73:ti(a,Ba(n,1),4),a.ptr_const(Ca(n,2)),a.callImport(\"ldtsflda\");break;case 662:a.block(),ti(a,Ba(n,1),4),ti(a,Ba(n,2),0),a.callImport(\"gettype\"),a.appendU8(13),a.appendULeb(0),Ps(a,n,2),a.endBlock();break;case 659:{const t=Da(e,Ba(n,4));a.ptr_const(t),ti(a,Ba(n,1),4),ti(a,Ba(n,2),0),ti(a,Ba(n,3),0),a.callImport(\"hasflag\");break}case 668:{const e=Ys(1);a.local(\"pLocals\"),si(a,Ba(n,2),n,!0),a.i32_const(e),a.appendU8(106),ei(a,Ba(n,1),54);break}case 660:a.local(\"pLocals\"),ti(a,Ba(n,2),0),a.callImport(\"hashcode\"),ei(a,Ba(n,1),54);break;case 661:a.local(\"pLocals\"),ti(a,Ba(n,2),0),a.callImport(\"try_hash\"),ei(a,Ba(n,1),54);break;case 664:a.local(\"pLocals\"),ti(a,Ba(n,2),0),a.callImport(\"hascsize\"),ei(a,Ba(n,1),54);break;case 669:a.local(\"pLocals\"),Ka(a,Ba(n,2),40),a.local(\"math_lhs32\",34),Ka(a,Ba(n,3),40),a.appendU8(115),a.i32_const(2),a.appendU8(116),a.local(\"math_rhs32\",33),a.local(\"math_lhs32\"),a.i32_const(327685),a.appendU8(106),a.i32_const(10485920),a.appendU8(114),a.i32_const(1703962),a.appendU8(106),a.i32_const(-8388737),a.appendU8(114),a.local(\"math_rhs32\"),a.appendU8(113),a.appendU8(69),ei(a,Ba(n,1),54);break;case 541:case 542:a.block(),ti(a,Ba(n,1),4),ti(a,Ba(n,2),0),a.callImport(541===b?\"array_rank\":\"a_elesize\"),a.appendU8(13),a.appendULeb(0),Ps(a,n,2),a.endBlock();break;case 289:case 290:{const t=Da(e,Ba(n,3)),r=o.mono_jiterp_is_special_interface(t),s=289===b,i=Ba(n,1);if(!t){Tc(a.traceIndex,0,0,\"null-klass\"),n=0;continue}a.block(),a.options.zeroPageOptimization&&ra()?(Ka(a,Ba(n,2),40),a.local(\"dest_ptr\",34),la(8,1)):(a.block(),Ka(a,Ba(n,2),40),a.local(\"dest_ptr\",34),a.appendU8(13),a.appendULeb(0),a.local(\"pLocals\"),a.i32_const(0),ei(a,i,54),a.appendU8(12),a.appendULeb(1),a.endBlock(),a.local(\"dest_ptr\")),r&&a.local(\"dest_ptr\"),a.appendU8(40),a.appendMemarg(Ys(14),0),a.ptr_const(t),a.callImport(r?\"imp_iface_s\":\"imp_iface\"),s&&(a.local(\"dest_ptr\"),a.appendU8(69),a.appendU8(114)),a.block(64,4),a.local(\"pLocals\"),a.local(\"dest_ptr\"),ei(a,i,54),a.appendU8(5),s?Ps(a,n,19):(a.local(\"pLocals\"),a.i32_const(0),ei(a,i,54)),a.endBlock(),a.endBlock();break}case 291:case 292:case 287:case 288:{const t=Da(e,Ba(n,3)),r=291===b||292===b,o=287===b||291===b,s=Ba(n,1);if(!t){Tc(a.traceIndex,0,0,\"null-klass\"),n=0;continue}a.block(),a.options.zeroPageOptimization&&ra()?(Ka(a,Ba(n,2),40),a.local(\"dest_ptr\",34),la(8,1)):(a.block(),Ka(a,Ba(n,2),40),a.local(\"dest_ptr\",34),a.appendU8(13),a.appendULeb(0),a.local(\"pLocals\"),a.i32_const(0),ei(a,s,54),a.appendU8(12),a.appendULeb(1),a.endBlock(),a.local(\"dest_ptr\")),a.appendU8(40),a.appendMemarg(Ys(14),0),a.appendU8(40),a.appendMemarg(Ys(15),0),r&&a.local(\"src_ptr\",34),a.i32_const(t),a.appendU8(70),a.block(64,4),a.local(\"pLocals\"),a.local(\"dest_ptr\"),ei(a,s,54),a.appendU8(5),r?(a.local(\"src_ptr\"),a.ptr_const(t),a.callImport(\"hasparent\"),o&&(a.local(\"dest_ptr\"),a.appendU8(69),a.appendU8(114)),a.block(64,4),a.local(\"pLocals\"),a.local(\"dest_ptr\"),ei(a,s,54),a.appendU8(5),o?Ps(a,n,19):(a.local(\"pLocals\"),a.i32_const(0),ei(a,s,54)),a.endBlock()):(ti(a,Ba(n,1),4),a.local(\"dest_ptr\"),a.ptr_const(t),a.i32_const(b),a.callImport(\"castv2\"),a.appendU8(69),a.block(64,4),Ps(a,n,19),a.endBlock()),a.endBlock(),a.endBlock();break}case 295:case 296:a.ptr_const(Da(e,Ba(n,3))),ti(a,Ba(n,1),4),ti(a,Ba(n,2),0),a.i32_const(296===b?1:0),a.callImport(\"box\");break;case 299:{const t=Da(e,Ba(n,3)),r=Ys(17),o=Ba(n,1),s=D(t+r);if(!t||!s){Tc(a.traceIndex,0,0,\"null-klass\"),n=0;continue}a.options.zeroPageOptimization&&ra()?(Ka(a,Ba(n,2),40),a.local(\"dest_ptr\",34),la(8,1)):(si(a,Ba(n,2),n,!0),a.local(\"dest_ptr\",34)),a.appendU8(40),a.appendMemarg(Ys(14),0),a.appendU8(40),a.appendMemarg(Ys(15),0),a.local(\"src_ptr\",34),a.appendU8(40),a.appendMemarg(r,0),a.i32_const(s),a.appendU8(70),a.local(\"src_ptr\"),a.appendU8(45),a.appendMemarg(Ys(16),0),a.appendU8(69),a.appendU8(113),a.block(64,4),a.local(\"pLocals\"),a.local(\"dest_ptr\"),a.i32_const(Ys(18)),a.appendU8(106),ei(a,o,54),a.appendU8(5),Ps(a,n,21),a.endBlock();break}case 294:a.block(),ti(a,Ba(n,1),4),Ka(a,Ba(n,2),40),a.callImport(\"newstr\"),a.appendU8(13),a.appendULeb(0),Ps(a,n,17),a.endBlock();break;case 283:a.block(),ti(a,Ba(n,1),4),a.ptr_const(Da(e,Ba(n,2))),a.callImport(\"newobj_i\"),a.appendU8(13),a.appendULeb(0),Ps(a,n,17),a.endBlock();break;case 282:case 284:case 544:case 543:p?(Vs(a,n,j,15),u=!0,L=0):n=0;break;case 546:case 547:case 548:case 549:case 545:p?(Vs(a,n,j,545==b?22:15),u=!0):n=0;break;case 137:case 134:Ps(a,n,16),u=!0;break;case 130:case 131:Ps(a,n,26),u=!0;break;case 136:if(a.callHandlerReturnAddresses.length>0&&a.callHandlerReturnAddresses.length<=3){const t=Fa(e,Ba(n,1));a.local(\"pLocals\"),a.appendU8(40),a.appendMemarg(t,0),a.local(\"index\",33);for(let e=0;e<a.callHandlerReturnAddresses.length;e++){const t=a.callHandlerReturnAddresses[e];a.local(\"index\"),a.ptr_const(t),a.appendU8(70),a.cfg.branch(t,t<n,1)}Ps(a,n,25)}else n=0;break;case 135:case 634:case 635:n=0;break;case 493:case 498:case 494:case 496:case 503:case 495:case 502:case 497:a.block(),ti(a,Ba(n,1),8),ti(a,Ba(n,2),0),a.i32_const(b),a.callImport(\"conv\"),a.appendU8(13),a.appendULeb(0),Ps(a,n,13),a.endBlock();break;case 456:case 457:case 462:case 463:{const e=456===b||462===b,t=462===b||463===b,r=t?0x8000000000000000:2147483648,o=e?\"temp_f32\":\"temp_f64\";a.local(\"pLocals\"),Ka(a,Ba(n,2),e?42:43),a.local(o,34),a.appendU8(e?139:153),a.appendU8(e?67:68),e?a.appendF32(r):a.appendF64(r),a.appendU8(e?93:99),a.block(t?126:127,4),a.local(o),a.appendU8(ha[b]),a.appendU8(5),a.appendU8(t?66:65),a.appendBoundaryValue(t?64:32,-1),a.endBlock(),ei(a,Ba(n,1),t?55:54);break}case 529:case 530:{const e=529===b;a.local(\"pLocals\"),Ka(a,Ba(n,2),e?40:41);const t=Na(n,3),r=Na(n,4);e?a.i32_const(t):a.i52_const(t),a.appendU8(e?106:124),e?a.i32_const(r):a.i52_const(r),a.appendU8(e?108:126),ei(a,Ba(n,1),e?54:55);break}case 649:case 650:{const e=650===b;a.local(\"pLocals\"),Ka(a,Ba(n,2),e?41:40),e?a.i52_const(1):a.i32_const(1),a.appendU8(e?132:114),a.appendU8(e?121:103),e&&a.appendU8(167),a.i32_const(e?63:31),a.appendU8(115),ei(a,Ba(n,1),54);break}case 531:case 532:{const e=531===b,t=e?40:41,r=e?54:55;a.local(\"pLocals\"),Ka(a,Ba(n,2),t),Ka(a,Ba(n,3),t),e?a.i32_const(31):a.i52_const(63),a.appendU8(e?113:131),a.appendU8(e?116:134),ei(a,Ba(n,1),r);break}case 591:case 618:{const e=618===b,t=e?42:43,r=e?56:57;a.local(\"pLocals\"),Ka(a,Ba(n,2),t),Ka(a,Ba(n,3),t),Ka(a,Ba(n,4),t),a.callImport(e?\"fmaf\":\"fma\"),ei(a,Ba(n,1),r);break}default:b>=3&&b<=12||b>=509&&b<=510?p||a.options.countBailouts?(Ps(a,n,14),u=!0):n=0:b>=13&&b<=21?ai(a,n,b)?$=!0:n=0:b>=74&&b<=85?ii(a,n,b)||(n=0):b>=344&&b<=427?pi(a,n,b)||(n=0):ga[b]?ui(a,n,b)||(n=0):wa[b]?mi(a,n,e,b)?p=!0:n=0:b>=23&&b<=49?ci(a,e,n,b)||(n=0):b>=50&&b<=73?li(a,e,n,b)||(n=0):b>=87&&b<=127?gi(a,n,b)||(n=0):b>=579&&b<=632?hi(a,n,b)||(n=0):b>=315&&b<=341?yi(a,e,n,b)||(n=0):b>=227&&b<=270?a.branchTargets.size>0?(Vs(a,n,j,8),u=!0):n=0:b>=651&&b<=658?(a.containsSimd=!0,Si(a,n,b,E,v,U)?$=!0:n=0):b>=559&&b<=571?(a.containsAtomics=!0,Ti(a,n,b)||(n=0)):0===L||(n=0)}if(n){if(!$){const e=n+2;for(let t=0;t<w;t++)Ja(B(e+2*t))}if(oc.dumpTraces||i){let e=`${n.toString(16)} ${E} `;const t=n+2,r=t+2*w;for(let t=0;t<y;t++)0!==t&&(e+=\", \"),e+=B(r+2*t);w>0&&(e+=\" -> \");for(let n=0;n<w;n++)0!==n&&(e+=\", \"),e+=B(t+2*n);a.traceBuf.push(e)}L>0&&(p?m++:_++,f+=L),(n+=2*k)<=s&&(h=n)}else i&&Fe(`instrumented trace ${t} aborted for opcode ${E} @${T.toString(16)}`),Tc(a.traceIndex,0,0,b)}for(;a.activeBlocks>0;)a.endBlock();return a.cfg.exitIp=h,a.containsSimd&&(f+=10240),f}(e,d,n,r,u,p,y,c),s=i>=oc.minimumTraceValue,p.cfg.generate()})),p.emitImportsAndFunctions(!1),!s)return g&&\"end-of-body\"===g.abortReason&&(g.abortReason=\"trace-too-small\"),0;_=Ms();const f=p.getArrayView();if(la(6,f.length),f.length>=4080)return Me(`Jiterpreter generated too much code (${f.length} bytes) for trace ${d}. Please report this issue.`),0;const h=new WebAssembly.Module(f),w=p.getWasmImports(),k=new WebAssembly.Instance(h,w).exports[d];let S;m=!1,l?(zs().set(l,k),S=l):S=Hs(0,k);const v=ca(1);return p.options.enableStats&&v&&v%500==0&&xc(!0),S}catch(e){h=!0,m=!1;let t=p.containsSimd?\" (simd)\":\"\";return p.containsAtomics&&(t+=\" (atomics)\"),Pe(`${i||d}${t} code generation failed: ${e} ${e.stack}`),Xs(),0}finally{const e=Ms();if(_?(la(11,_-f),la(12,e-_)):la(11,e-f),h||!m&&oc.dumpTraces||b){if(h||oc.dumpTraces||b)for(let e=0;e<p.traceBuf.length;e++)Fe(p.traceBuf[e]);Fe(`// ${i||d} generated, blob follows //`);let e=\"\",t=0;try{for(;p.activeBlocks>0;)p.endBlock();p.inSection&&p.endSection()}catch(e){}const n=p.getArrayView();for(let r=0;r<n.length;r++){const o=n[r];o<16&&(e+=\"0\"),e+=o.toString(16),e+=\" \",e.length%10==0&&(Fe(`${t}\\t${e}`),e=\"\",t=r+1)}Fe(`${t}\\t${e}`),Fe(\"// end blob //\")}}}(e,u,n,s,a,r,l,d,c);return f?(la(1,1),p.fnPtr=f,f):oc.estimateHeat?0:1},function(e){const t=Li[e&=-2];if(t){if(Bi||(Bi=pa()),t.hitCount++,t.hitCount===Bi.interpEntryFlushThreshold)Ci();else if(t.hitCount!==Bi.interpEntryHitCount)return;o.mono_jiterp_tlqueue_add(1,e)>=4?Ci():$i>0||\"function\"==typeof globalThis.setTimeout&&($i=globalThis.setTimeout((()=>{$i=0,Ci()}),10))}},function(e,t,n,r,o,s,a,i){if(n>16)return 0;const c=new Ni(e,t,n,r,o,s,a,i);ji||(ji=zs());const l=ji.get(i),p=(s?a?29:20:a?11:2)+n;return c.result=Hs(p,l),Li[e]=c,c.result},function(e,t,n,r,s){const a=D(n+0),i=qi[a];if(i)return void(i.result>0?o.mono_jiterp_register_jit_call_thunk(n,i.result):(i.queue.push(n),i.queue.length>12&&Qi()));const c=new Ji(e,t,n,r,0!==s);qi[a]=c;const l=o.mono_jiterp_tlqueue_add(0,e);let p=Gi[e];p||(p=Gi[e]=[]),p.push(c),l>=6&&Qi()},function(e,t,n,r,s){const a=Xi(e);try{a(t,n,r,s)}catch(e){const t=Xe.wasmExports.__cpp_exception,n=t instanceof WebAssembly.Tag;if(n&&!(e instanceof WebAssembly.Exception&&e.is(t)))throw e;if(i=s,Xe.HEAPU32[i>>>2]=1,n){const n=e.getArg(t,0);o.mono_jiterp_begin_catch(n),o.mono_jiterp_end_catch()}else{if(\"number\"!=typeof e)throw e;o.mono_jiterp_begin_catch(e),o.mono_jiterp_end_catch()}}var i},Qi,function(e,t,n){delete dc[n],function(e){delete Li[e]}(t),function(e){const t=Gi[e];if(t){for(let e=0;e<t.length;e++)delete qi[t[e].addr];delete Gi[e]}}(e)},function(){ot.enablePerfMeasure&&Ct.push(globalThis.performance.now())},function(e){if(ot.enablePerfMeasure){const t=Ct.pop(),n=tt?{start:t}:{startTime:t};let r=Ot.get(e);r||(r=xe(s.mono_wasm_method_get_name(e)),Ot.set(e,r)),globalThis.performance.measure(r,n)}},function(e,t,n,r,o){const s=xe(n),a=!!r,i=xe(e),c=o,l=xe(t),p=`[MONO] ${s}`;if(Qe.logging&&\"function\"==typeof Qe.logging.trace)Qe.logging.trace(i,l,p,a,c);else switch(l){case\"critical\":case\"error\":{const e=p+\"\\n\"+(new Error).stack;st.exitReason||(st.exitReason=e),console.error(qe(e))}break;case\"warning\":console.warn(p);break;case\"message\":default:console.log(p);break;case\"info\":console.info(p);break;case\"debug\":console.debug(p)}},function(e){ht=st.config.mainAssemblyName+\".dll\",gt=e,console.assert(!0,`Adding an entrypoint breakpoint ${ht} at method token  ${gt}`);debugger},function(){},function(e,t){if(!globalThis.crypto||!globalThis.crypto.getRandomValues)return-1;const n=Y(),r=n.subarray(e,e+t),o=(n.buffer,!1),s=o?new Uint8Array(t):r;for(let e=0;e<t;e+=65536){const n=s.subarray(e,e+Math.min(t-e,65536));globalThis.crypto.getRandomValues(n)}return o&&r.set(s),0},function(){console.clear()},Or,function(e){dr();try{return function(e){dr();const t=Bt(),r=On(e);2!==r&&ut(!1,`Signature version ${r} mismatch.`);const o=function(e){e||ut(!1,\"Null signatures\");const t=P(e+16);if(0===t)return null;const n=P(e+20);return t||ut(!1,\"Null name\"),Ie(e+t,e+t+n)}(e),s=function(e){e||ut(!1,\"Null signatures\");const t=P(e+24);return 0===t?null:Ie(e+t,e+t+P(e+28))}(e),a=function(e){return e||ut(!1,\"Null signatures\"),P(e+8)}(e);st.diagnosticTracing&&De(`Binding [JSImport] ${o} from ${s} module`);const i=function(e,t){e&&\"string\"==typeof e||ut(!1,\"function_name must be string\");let n={};const r=e.split(\".\");t?(n=pr.get(t),n||ut(!1,`ES6 module ${t} was not imported yet, please call JSHost.ImportAsync() first.`)):\"INTERNAL\"===r[0]?(n=Qe,r.shift()):\"globalThis\"===r[0]&&(n=globalThis,r.shift());for(let t=0;t<r.length-1;t++){const o=r[t],s=n[o];if(!s)throw new Error(`${o} not found while looking up ${e}`);n=s}const o=n[r[r.length-1]];if(\"function\"!=typeof o)throw new Error(`${e} must be a Function but was ${typeof o}`);return o.bind(n)}(o,s),c=Cn(e),l=new Array(c),p=new Array(c);let u=!1;for(let t=0;t<c;t++){const n=jn(e,t+2),r=$n(n),o=Dt(n,r,t+2);o||ut(!1,\"ERR42: argument marshaler must be resolved\"),l[t]=o,23===r&&(p[t]=e=>{e&&e.dispose()},u=!0)}const d=jn(e,1),f=$n(d),_=Qr(d,f,1),m=26==f,h=20==f||30==f,g={fn:i,fqn:s+\":\"+o,args_count:c,arg_marshalers:l,res_converter:_,has_cleanup:u,arg_cleanup:p,is_discard_no_wait:m,is_async:h,isDisposed:!1};let b;b=h||m||u?nr(g):0!=c||_?1!=c||_?1==c&&_?function(e){const t=e.fn,r=e.arg_marshalers[0],o=e.res_converter,s=e.fqn;return e=null,function(a){const i=Bt();try{n&&e.isDisposed;const s=r(a),i=t(s);o(a,i)}catch(e){ho(a,e)}finally{Nt(i,\"mono.callCsFunction:\",s)}}}(g):2==c&&_?function(e){const t=e.fn,r=e.arg_marshalers[0],o=e.arg_marshalers[1],s=e.res_converter,a=e.fqn;return e=null,function(i){const c=Bt();try{n&&e.isDisposed;const a=r(i),c=o(i),l=t(a,c);s(i,l)}catch(e){ho(i,e)}finally{Nt(c,\"mono.callCsFunction:\",a)}}}(g):nr(g):function(e){const t=e.fn,r=e.arg_marshalers[0],o=e.fqn;return e=null,function(s){const a=Bt();try{n&&e.isDisposed;const o=r(s);t(o)}catch(e){ho(s,e)}finally{Nt(a,\"mono.callCsFunction:\",o)}}}(g):function(e){const t=e.fn,r=e.fqn;return e=null,function(o){const s=Bt();try{n&&e.isDisposed,t()}catch(e){ho(o,e)}finally{Nt(s,\"mono.callCsFunction:\",r)}}}(g);let y=b;y[vn]=g,tr[a]=y,Nt(t,\"mono.bindJsFunction:\",o)}(e),0}catch(e){return $e(function(e){let t=\"unknown exception\";if(e){t=e.toString();const n=e.stack;n&&(n.startsWith(t)?t=n:t+=\"\\n\"+n),t=We(t)}return t}(e))}},function(e,t){!function(e,t){st.assert_runtime_running();const n=Nr(e);n&&\"function\"==typeof n&&n[Sn]||ut(!1,`Bound function handle expected ${e}`),n(t)}(e,t)},function(e,t){st.assert_runtime_running();const n=tr[e];n||ut(!1,`Imported function handle expected ${e}`),n(t)},function(e){fr((()=>function(e){if(!st.is_runtime_running())return void(st.diagnosticTracing&&De(\"This promise resolution/rejection can't be propagated to managed code, mono runtime already exited.\"));const t=In(e,0),r=n;try{st.assert_runtime_running();const n=In(e,1),o=In(e,2),s=In(e,3),a=Dn(o),i=qn(o),c=Nr(i);c||ut(!1,`Cannot find Promise for JSHandle ${i}`),c.resolve_or_reject(a,i,s),r||(Mn(n,1),Mn(t,0))}catch(e){ho(t,e)}}(e)))},function(e){fr((()=>function(e){if(!st.is_runtime_running())return void(st.diagnosticTracing&&De(\"This promise can't be canceled, mono runtime already exited.\"));const t=Vr(e);t||ut(!1,`Expected Promise for GCHandle ${e}`),t.cancel()}(e)))},function(e,t,n,r,o,s,a){return\"function\"==typeof at.mono_wasm_change_case?at.mono_wasm_change_case(e,t,n,r,o,s,a):0},function(e,t,n,r,o,s,a,i){return\"function\"==typeof at.mono_wasm_compare_string?at.mono_wasm_compare_string(e,t,n,r,o,s,a,i):0},function(e,t,n,r,o,s,a,i){return\"function\"==typeof at.mono_wasm_starts_with?at.mono_wasm_starts_with(e,t,n,r,o,s,a,i):0},function(e,t,n,r,o,s,a,i){return\"function\"==typeof at.mono_wasm_ends_with?at.mono_wasm_ends_with(e,t,n,r,o,s,a,i):0},function(e,t,n,r,o,s,a,i,c){return\"function\"==typeof at.mono_wasm_index_of?at.mono_wasm_index_of(e,t,n,r,o,s,a,i,c):0},function(e,t,n,r,o,s){return\"function\"==typeof at.mono_wasm_get_calendar_info?at.mono_wasm_get_calendar_info(e,t,n,r,o,s):0},function(e,t,n,r,o){return\"function\"==typeof at.mono_wasm_get_culture_info?at.mono_wasm_get_culture_info(e,t,n,r,o):0},function(e,t,n){return\"function\"==typeof at.mono_wasm_get_first_day_of_week?at.mono_wasm_get_first_day_of_week(e,t,n):0},function(e,t,n){return\"function\"==typeof at.mono_wasm_get_first_week_of_year?at.mono_wasm_get_first_week_of_year(e,t,n):0},function(e,t,n,r,o,s,a){try{const i=Ie(n,n+2*r),c=Dc(i);if(!c&&i)return je(o,o+2*i.length,i),v(a,i.length),0;const l=Dc(Ie(e,e+2*t));if(!c||!l)throw new Error(`Locale or culture name is null or empty. localeName=${c}, cultureName=${l}`);const p=c.split(\"-\");let u,d;try{const e=p.length>1?p.pop():void 0;d=e?new Intl.DisplayNames([l],{type:\"region\"}).of(e):void 0;const t=p.join(\"-\");u=new Intl.DisplayNames([l],{type:\"language\"}).of(t)}catch(e){if(!(e instanceof RangeError))throw e;try{u=new Intl.DisplayNames([l],{type:\"language\"}).of(c)}catch(e){if(e instanceof RangeError&&i)return je(o,o+2*i.length,i),v(a,i.length),0;throw e}}const f={LanguageName:u,RegionName:d},_=Object.values(f).join(\"##\");if(!_)throw new Error(`Locale info for locale=${c} is null or empty.`);if(_.length>s)throw new Error(`Locale info for locale=${c} exceeds length of ${s}.`);return je(o,o+2*_.length,_),v(a,_.length),0}catch(e){return v(a,-1),$e(e.toString())}}];async function Mc(e,t){try{const n=await Pc(e,t);return st.mono_exit(n),n}catch(e){try{st.mono_exit(1,e)}catch(e){}return e&&\"number\"==typeof e.status?e.status:1}}async function Pc(e,t){null!=e&&\"\"!==e||(e=st.config.mainAssemblyName)||ut(!1,\"Null or empty config.mainAssemblyName\"),null==t&&(t=ot.config.applicationArguments),null==t&&(t=Ye?(await import(/*! webpackIgnore: true */\"process\")).argv.slice(2):[]),function(e,t){const n=t.length+1,r=Xe._malloc(4*n);let s=0;Xe.setValue(r+4*s,o.mono_wasm_strdup(e),\"i32\"),s+=1;for(let e=0;e<t.length;++e)Xe.setValue(r+4*s,o.mono_wasm_strdup(t[e]),\"i32\"),s+=1;o.mono_wasm_set_main_args(n,r)}(e,t),st.config.mainAssemblyName=e,-1==ot.waitForDebugger&&(Fe(\"waiting for debugger...\"),await new Promise((e=>{const t=setInterval((()=>{1==ot.waitForDebugger&&(clearInterval(t),e())}),100)})));try{return Xe.runtimeKeepalivePush(),await new Promise((e=>globalThis.setTimeout(e,0))),await function(e,t,n){st.assert_runtime_running();const r=Xe.stackSave();try{const r=xn(5),o=In(r,1),s=In(r,2),a=In(r,3),i=In(r,4),c=function(e){const t=Xe.lengthBytesUTF8(e)+1,n=Xe._malloc(t),r=Y().subarray(n,n+t);return Xe.stringToUTF8Array(e,r,0,t),r[t-1]=0,n}(e);io(s,c),wo(a,t&&!t.length?void 0:t,15),Zr(i,n);let l=tn(o,0,Ht);return hn(ot.managedThreadTID,mn.CallEntrypoint,r),l=nn(r,Ht,l),null==l&&(l=Promise.resolve(0)),l[Br]=!0,l}finally{Xe.stackRestore(r)}}(e,t,1==ot.waitForDebugger)}finally{Xe.runtimeKeepalivePop()}}function Vc(e){ot.runtimeReady&&(ot.runtimeReady=!1,o.mono_wasm_exit(e))}function zc(e){if(st.exitReason=e,ot.runtimeReady){ot.runtimeReady=!1;const t=qe(e);Xe.abort(t)}throw e}async function Hc(e){e.out||(e.out=console.log.bind(console)),e.err||(e.err=console.error.bind(console)),e.print||(e.print=e.out),e.printErr||(e.printErr=e.err),st.out=e.print,st.err=e.printErr,await async function(){var e;if(Ye){if(globalThis.performance===Uo){const{performance:e}=Qe.require(\"perf_hooks\");globalThis.performance=e}if(Qe.process=await import(/*! webpackIgnore: true */\"process\"),globalThis.crypto||(globalThis.crypto={}),!globalThis.crypto.getRandomValues){let e;try{e=Qe.require(\"node:crypto\")}catch(e){}e?e.webcrypto?globalThis.crypto=e.webcrypto:e.randomBytes&&(globalThis.crypto.getRandomValues=t=>{t&&t.set(e.randomBytes(t.length))}):globalThis.crypto.getRandomValues=()=>{throw new Error(\"Using node without crypto support. To enable current operation, either provide polyfill for 'globalThis.crypto.getRandomValues' or enable 'node:crypto' module.\")}}}ot.subtle=null===(e=globalThis.crypto)||void 0===e?void 0:e.subtle}()}function Wc(e){const t=Bt();e.locateFile||(e.locateFile=e.__locateFile=e=>st.scriptDirectory+e),e.mainScriptUrlOrBlob=st.scriptUrl;const a=e.instantiateWasm,c=e.preInit?\"function\"==typeof e.preInit?[e.preInit]:e.preInit:[],l=e.preRun?\"function\"==typeof e.preRun?[e.preRun]:e.preRun:[],p=e.postRun?\"function\"==typeof e.postRun?[e.postRun]:e.postRun:[],u=e.onRuntimeInitialized?e.onRuntimeInitialized:()=>{};e.instantiateWasm=(e,t)=>function(e,t,n){const r=Bt();if(n){const o=n(e,((e,n)=>{Nt(r,\"mono.instantiateWasm\"),ot.afterInstantiateWasm.promise_control.resolve(),t(e,n)}));return o}return async function(e,t){try{await st.afterConfigLoaded,st.diagnosticTracing&&De(\"instantiate_wasm_module\"),await ot.beforePreInit.promise,Xe.addRunDependency(\"instantiate_wasm_module\"),await async function(){ot.featureWasmSimd=await st.simd(),ot.featureWasmEh=await st.exceptions(),ot.emscriptenBuildOptions.wasmEnableSIMD&&(ot.featureWasmSimd||ut(!1,\"This browser/engine doesn't support WASM SIMD. Please use a modern version. See also https://aka.ms/dotnet-wasm-features\")),ot.emscriptenBuildOptions.wasmEnableEH&&(ot.featureWasmEh||ut(!1,\"This browser/engine doesn't support WASM exception handling. Please use a modern version. See also https://aka.ms/dotnet-wasm-features\"))}(),function(e){const t=e.env||e.a;if(!t)return void Me(\"WARNING: Neither imports.env or imports.a were present when instantiating the wasm module. This likely indicates an emscripten configuration issue.\");const n=new Array(Fc.length);for(const e in t){const r=t[e];if(\"function\"==typeof r&&-1!==r.toString().indexOf(\"runtime_idx\"))try{const{runtime_idx:t}=r();if(void 0!==n[t])throw new Error(`Duplicate runtime_idx ${t}`);n[t]=e}catch(e){}}for(const[e,r]of Fc.entries()){const o=n[e];if(void 0!==o){if(\"function\"!=typeof t[o])throw new Error(`Expected ${o} to be a function`);t[o]=r}}}(e);const n=await st.wasmCompilePromise.promise;t(await WebAssembly.instantiate(n,e),n),st.diagnosticTracing&&De(\"instantiate_wasm_module done\"),ot.afterInstantiateWasm.promise_control.resolve()}catch(e){throw Pe(\"instantiate_wasm_module() failed\",e),st.mono_exit(1,e),e}Xe.removeRunDependency(\"instantiate_wasm_module\")}(e,t),[]}(e,t,a),e.preInit=[()=>function(e){Xe.addRunDependency(\"mono_pre_init\");const t=Bt();try{Xe.addRunDependency(\"mono_wasm_pre_init_essential\"),st.diagnosticTracing&&De(\"mono_wasm_pre_init_essential\"),st.gitHash!==ot.gitHash&&Me(`The version of dotnet.runtime.js ${ot.gitHash} is different from the version of dotnet.js ${st.gitHash}!`),st.gitHash!==ot.emscriptenBuildOptions.gitHash&&Me(`The version of dotnet.native.js ${ot.emscriptenBuildOptions.gitHash}  is different from the version of dotnet.js ${st.gitHash}!`),n!==ot.emscriptenBuildOptions.wasmEnableThreads&&Me(`The threads of dotnet.native.js ${ot.emscriptenBuildOptions.wasmEnableThreads} is different from the version of dotnet.runtime.js ${n}!`),function(){const e=[...r];for(const t of e){const e=o,[n,r,s,a,c]=t,l=\"function\"==typeof n;if(!0===n||l)e[r]=function(...t){!l||!n()||ut(!1,`cwrap ${r} should not be called when binding was skipped`);const o=i(r,s,a,c);return e[r]=o,o(...t)};else{const t=i(r,s,a,c);e[r]=t}}}(),a=Qe,Object.assign(a,{mono_wasm_exit:o.mono_wasm_exit,mono_wasm_profiler_init_aot:s.mono_wasm_profiler_init_aot,mono_wasm_profiler_init_browser:s.mono_wasm_profiler_init_browser,mono_wasm_exec_regression:o.mono_wasm_exec_regression,mono_wasm_print_thread_dump:void 0}),Xe.removeRunDependency(\"mono_wasm_pre_init_essential\"),st.diagnosticTracing&&De(\"preInit\"),ot.beforePreInit.promise_control.resolve(),e.forEach((e=>e()))}catch(e){throw Pe(\"user preInint() failed\",e),st.mono_exit(1,e),e}var a;(async()=>{try{await async function(){st.diagnosticTracing&&De(\"mono_wasm_pre_init_essential_async\"),Xe.addRunDependency(\"mono_wasm_pre_init_essential_async\"),Xe.removeRunDependency(\"mono_wasm_pre_init_essential_async\")}(),Nt(t,\"mono.preInit\")}catch(e){throw st.mono_exit(1,e),e}ot.afterPreInit.promise_control.resolve(),Xe.removeRunDependency(\"mono_pre_init\")})()}(c)],e.preRun=[()=>async function(e){Xe.addRunDependency(\"mono_pre_run_async\");try{await ot.afterInstantiateWasm.promise,await ot.afterPreInit.promise,st.diagnosticTracing&&De(\"preRunAsync\");const t=Bt();e.map((e=>e())),Nt(t,\"mono.preRun\")}catch(e){throw Pe(\"preRunAsync() failed\",e),st.mono_exit(1,e),e}ot.afterPreRun.promise_control.resolve(),Xe.removeRunDependency(\"mono_pre_run_async\")}(l)],e.onRuntimeInitialized=()=>async function(e){try{await ot.afterPreRun.promise,st.diagnosticTracing&&De(\"onRuntimeInitialized\"),ot.nativeExit=Vc,ot.nativeAbort=zc;const t=Bt();if(ot.beforeOnRuntimeInitialized.promise_control.resolve(),await ot.coreAssetsInMemory.promise,ot.config.virtualWorkingDirectory){const e=Xe.FS,t=ot.config.virtualWorkingDirectory;try{const n=e.stat(t);n?n&&e.isDir(n.mode)||ut(!1,`FS.chdir: ${t} is not a directory`):Xe.FS_createPath(\"/\",t,!0,!0)}catch(e){Xe.FS_createPath(\"/\",t,!0,!0)}e.chdir(t)}ot.config.interpreterPgo&&setTimeout(Gc,1e3*(ot.config.interpreterPgoSaveDelay||15)),Xe.runtimeKeepalivePush(),n||await async function(){try{const t=Bt();st.diagnosticTracing&&De(\"Initializing mono runtime\");for(const e in ot.config.environmentVariables){const t=ot.config.environmentVariables[e];if(\"string\"!=typeof t)throw new Error(`Expected environment variable '${e}' to be a string but it was ${typeof t}: '${t}'`);qc(e,t)}ot.config.runtimeOptions&&function(e){if(!Array.isArray(e))throw new Error(\"Expected runtimeOptions to be an array of strings\");const t=Xe._malloc(4*e.length);let n=0;for(let r=0;r<e.length;++r){const s=e[r];if(\"string\"!=typeof s)throw new Error(\"Expected runtimeOptions to be an array of strings\");Xe.setValue(t+4*n,o.mono_wasm_strdup(s),\"i32\"),n+=1}o.mono_wasm_parse_runtime_options(e.length,t)}(ot.config.runtimeOptions),ot.config.aotProfilerOptions&&function(e){ot.emscriptenBuildOptions.enableAotProfiler||ut(!1,\"AOT profiler is not enabled, please use <WasmProfilers>aot;</WasmProfilers> in your project file.\"),null==e&&(e={}),\"writeAt\"in e||(e.writeAt=\"System.Runtime.InteropServices.JavaScript.JavaScriptExports::StopProfile\"),\"sendTo\"in e||(e.sendTo=\"Interop/Runtime::DumpAotProfileData\");const t=\"aot:write-at-method=\"+e.writeAt+\",send-to-method=\"+e.sendTo;s.mono_wasm_profiler_init_aot(t)}(ot.config.aotProfilerOptions),ot.config.browserProfilerOptions&&(ot.config.browserProfilerOptions,ot.emscriptenBuildOptions.enableBrowserProfiler||ut(!1,\"Browser profiler is not enabled, please use <WasmProfilers>browser;</WasmProfilers> in your project file.\"),s.mono_wasm_profiler_init_browser(\"browser:\")),ot.config.logProfilerOptions&&(e=ot.config.logProfilerOptions,ot.emscriptenBuildOptions.enableLogProfiler||ut(!1,\"Log profiler is not enabled, please use <WasmProfilers>log;</WasmProfilers> in your project file.\"),e.takeHeapshot||ut(!1,\"Log profiler is not enabled, the takeHeapshot method must be defined in LogProfilerOptions.takeHeapshot\"),s.mono_wasm_profiler_init_log((e.configuration||\"log:alloc,output=output.mlpd\")+`,take-heapshot-method=${e.takeHeapshot}`)),function(){st.diagnosticTracing&&De(\"mono_wasm_load_runtime\");try{const e=Bt();let t=ot.config.debugLevel;null==t&&(t=0,ot.config.debugLevel&&(t=0+t)),o.mono_wasm_load_runtime(t),Nt(e,\"mono.loadRuntime\")}catch(e){throw Pe(\"mono_wasm_load_runtime () failed\",e),st.mono_exit(1,e),e}}(),function(){if(da)return;da=!0;const e=pa(),t=e.tableSize,n=ot.emscriptenBuildOptions.runAOTCompilation?e.tableSize:1,r=ot.emscriptenBuildOptions.runAOTCompilation?e.aotTableSize:1,s=t+n+36*r+1,a=zs();let i=a.length;const c=performance.now();a.grow(s);const l=performance.now();e.enableStats&&Fe(`Allocated ${s} function table entries for jiterpreter, bringing total table size to ${a.length}`),i=ua(0,i,t,Zs(\"mono_jiterp_placeholder_trace\")),i=ua(1,i,n,Zs(\"mono_jiterp_placeholder_jit_call\"));for(let e=2;e<=37;e++)i=ua(e,i,r,a.get(o.mono_jiterp_get_interp_entry_func(e)));const p=performance.now();e.enableStats&&Fe(`Growing wasm function table took ${l-c}. Filling table took ${p-l}.`)}(),function(){if(!ot.mono_wasm_bindings_is_ready){st.diagnosticTracing&&De(\"bindings_init\"),ot.mono_wasm_bindings_is_ready=!0;try{const e=Bt();he||(\"undefined\"!=typeof TextDecoder&&(be=new TextDecoder(\"utf-16le\"),ye=new TextDecoder(\"utf-8\",{fatal:!1}),we=new TextDecoder(\"utf-8\"),ke=new TextEncoder),he=Xe._malloc(12)),Se||(Se=function(e){let t;if(le.length>0)t=le.pop();else{const e=function(){if(null==ae||!ie){ae=ue(se,\"js roots\"),ie=new Int32Array(se),ce=se;for(let e=0;e<se;e++)ie[e]=se-e-1}if(ce<1)throw new Error(\"Out of scratch root space\");const e=ie[ce-1];return ce--,e}();t=new de(ae,e)}if(void 0!==e){if(\"number\"!=typeof e)throw new Error(\"value must be an address in the managed heap\");t.set(e)}else t.set(0);return t}()),function(){const e=\"System.Runtime.InteropServices.JavaScript\";if(ot.runtime_interop_module=o.mono_wasm_assembly_load(e),!ot.runtime_interop_module)throw\"Can't find bindings module assembly: \"+e;if(ot.runtime_interop_namespace=e,ot.runtime_interop_exports_classname=\"JavaScriptExports\",ot.runtime_interop_exports_class=o.mono_wasm_assembly_find_class(ot.runtime_interop_module,ot.runtime_interop_namespace,ot.runtime_interop_exports_classname),!ot.runtime_interop_exports_class)throw\"Can't find \"+ot.runtime_interop_namespace+\".\"+ot.runtime_interop_exports_classname+\" class\";mn.InstallMainSynchronizationContext=void 0,mn.CallEntrypoint=bn(\"CallEntrypoint\"),mn.BindAssemblyExports=bn(\"BindAssemblyExports\"),mn.ReleaseJSOwnedObjectByGCHandle=bn(\"ReleaseJSOwnedObjectByGCHandle\"),mn.CompleteTask=bn(\"CompleteTask\"),mn.CallDelegate=bn(\"CallDelegate\"),mn.GetManagedStackTrace=bn(\"GetManagedStackTrace\"),mn.LoadSatelliteAssembly=bn(\"LoadSatelliteAssembly\"),mn.LoadLazyAssembly=bn(\"LoadLazyAssembly\")}(),0==yn.size&&(yn.set(21,pn),yn.set(23,dn),yn.set(22,fn),yn.set(3,Mt),yn.set(4,Pt),yn.set(5,Vt),yn.set(6,zt),yn.set(7,Ht),yn.set(8,Wt),yn.set(9,qt),yn.set(11,Gt),yn.set(12,Xt),yn.set(10,Jt),yn.set(15,sn),yn.set(16,an),yn.set(27,an),yn.set(13,cn),yn.set(14,ln),yn.set(17,Yt),yn.set(18,Yt),yn.set(20,en),yn.set(29,en),yn.set(28,en),yn.set(30,tn),yn.set(24,Zt),yn.set(25,Zt),yn.set(0,Qt),yn.set(1,Qt),yn.set(2,Qt),yn.set(26,Qt)),0==wn.size&&(wn.set(21,yo),wn.set(23,ko),wn.set(22,So),wn.set(3,Zr),wn.set(4,Kr),wn.set(5,eo),wn.set(6,to),wn.set(7,no),wn.set(8,ro),wn.set(9,oo),wn.set(10,so),wn.set(11,ao),wn.set(12,io),wn.set(17,co),wn.set(18,lo),wn.set(15,po),wn.set(16,ho),wn.set(27,ho),wn.set(13,go),wn.set(14,bo),wn.set(20,mo),wn.set(28,mo),wn.set(29,mo),wn.set(24,_o),wn.set(25,_o),wn.set(0,fo),wn.set(2,fo),wn.set(1,fo),wn.set(26,fo)),ot._i52_error_scratch_buffer=Xe._malloc(4),Nt(e,\"mono.bindingsInit\")}catch(e){throw Pe(\"Error in bindings_init\",e),e}}}(),ot.runtimeReady=!0,ot.afterMonoStarted.promise_control.resolve(),ot.config.interpreterPgo&&await jc(),Nt(t,\"mono.startRuntime\")}catch(e){throw Pe(\"start_runtime() failed\",e),st.mono_exit(1,e),e}var e}(),await async function(){await ot.allAssetsInMemory.promise,ot.config.assets&&(st.actual_downloaded_assets_count!=st.expected_downloaded_assets_count&&ut(!1,`Expected ${st.expected_downloaded_assets_count} assets to be downloaded, but only finished ${st.actual_downloaded_assets_count}`),st.actual_instantiated_assets_count!=st.expected_instantiated_assets_count&&ut(!1,`Expected ${st.expected_instantiated_assets_count} assets to be in memory, but only instantiated ${st.actual_instantiated_assets_count}`),st._loaded_files.forEach((e=>st.loadedFiles.push(e.url))),st.diagnosticTracing&&De(\"all assets are loaded in wasm memory\"))}(),Xc.registerRuntime(rt),0===st.config.debugLevel||ot.mono_wasm_runtime_is_ready||function mono_wasm_runtime_ready(){if(Qe.mono_wasm_runtime_is_ready=ot.mono_wasm_runtime_is_ready=!0,yt=0,bt={},wt=-1,globalThis.dotnetDebugger)debugger}(),0!==st.config.debugLevel&&st.config.cacheBootResources&&st.logDownloadStatsToConsole(),setTimeout((()=>{st.purgeUnusedCacheEntriesAsync()}),st.config.cachedResourcesPurgeDelay);try{e()}catch(e){throw Pe(\"user callback onRuntimeInitialized() failed\",e),e}await async function(){st.diagnosticTracing&&De(\"mono_wasm_after_user_runtime_initialized\");try{if(Xe.onDotnetReady)try{await Xe.onDotnetReady()}catch(e){throw Pe(\"onDotnetReady () failed\",e),e}}catch(e){throw Pe(\"mono_wasm_after_user_runtime_initialized () failed\",e),e}}(),Nt(t,\"mono.onRuntimeInitialized\")}catch(e){throw Xe.runtimeKeepalivePop(),Pe(\"onRuntimeInitializedAsync() failed\",e),st.mono_exit(1,e),e}ot.afterOnRuntimeInitialized.promise_control.resolve()}(u),e.postRun=[()=>async function(e){try{await ot.afterOnRuntimeInitialized.promise,st.diagnosticTracing&&De(\"postRunAsync\");const t=Bt();Xe.FS_createPath(\"/\",\"usr\",!0,!0),Xe.FS_createPath(\"/\",\"usr/share\",!0,!0),e.map((e=>e())),Nt(t,\"mono.postRun\")}catch(e){throw Pe(\"postRunAsync() failed\",e),st.mono_exit(1,e),e}ot.afterPostRun.promise_control.resolve()}(p)],e.ready.then((async()=>{await ot.afterPostRun.promise,Nt(t,\"mono.emscriptenStartup\"),ot.dotnetReady.promise_control.resolve(rt)})).catch((e=>{ot.dotnetReady.promise_control.reject(e)})),e.ready=ot.dotnetReady.promise}function qc(e,t){o.mono_wasm_setenv(e,t)}async function Gc(){void 0!==st.exitCode&&0!==st.exitCode||await Ac()}async function Jc(e){}let Xc;function Qc(r){const o=Xe,s=r,a=globalThis;Object.assign(s.internal,{mono_wasm_exit:e=>{Xe.err(\"early exit \"+e)},forceDisposeProxies:Hr,mono_wasm_dump_threads:void 0,logging:void 0,mono_wasm_stringify_as_error_with_stack:qe,mono_wasm_get_loaded_files:Is,mono_wasm_send_dbg_command_with_parms:St,mono_wasm_send_dbg_command:vt,mono_wasm_get_dbg_command_info:Ut,mono_wasm_get_details:$t,mono_wasm_release_object:Rt,mono_wasm_call_function_on:jt,mono_wasm_debugger_resume:Et,mono_wasm_detach_debugger:Tt,mono_wasm_raise_debug_event:It,mono_wasm_change_debugger_log_level:xt,mono_wasm_debugger_attached:At,mono_wasm_runtime_is_ready:ot.mono_wasm_runtime_is_ready,mono_wasm_get_func_id_to_name_mappings:Je,get_property:sr,set_property:or,has_property:ar,get_typeof_property:ir,get_global_this:cr,get_dotnet_instance:()=>rt,dynamic_import:ur,mono_wasm_bind_cs_function:hr,ws_wasm_create:hs,ws_wasm_open:gs,ws_wasm_send:bs,ws_wasm_receive:ys,ws_wasm_close:ws,ws_wasm_abort:ks,ws_get_state:ms,http_wasm_supports_streaming_request:Ao,http_wasm_supports_streaming_response:jo,http_wasm_create_controller:$o,http_wasm_get_response_type:Fo,http_wasm_get_response_status:Mo,http_wasm_abort:Ro,http_wasm_transform_stream_write:Bo,http_wasm_transform_stream_close:No,http_wasm_fetch:Do,http_wasm_fetch_stream:Co,http_wasm_fetch_bytes:Oo,http_wasm_get_response_header_names:Po,http_wasm_get_response_header_values:Vo,http_wasm_get_response_bytes:Ho,http_wasm_get_response_length:zo,http_wasm_get_streamed_response_bytes:Wo,jiterpreter_dump_stats:xc,jiterpreter_apply_options:ia,jiterpreter_get_options:pa,interp_pgo_load_data:jc,interp_pgo_save_data:Ac,mono_wasm_gc_lock:re,mono_wasm_gc_unlock:oe,monoObjectAsBoolOrNullUnsafe:Nc,monoStringToStringUnsafe:Ce,loadLazyAssembly:Rc,loadSatelliteAssemblies:Bc});const i={stringify_as_error_with_stack:qe,instantiate_symbols_asset:Ts,instantiate_asset:Es,jiterpreter_dump_stats:xc,forceDisposeProxies:Hr,instantiate_segmentation_rules_asset:xs};\"hybrid\"===st.config.globalizationMode&&(i.stringToUTF16=je,i.stringToUTF16Ptr=$e,i.utf16ToString=Ie,i.utf16ToStringLoop=Ae,i.localHeapViewU16=Z,i.setU16_local=y,i.setI32=v),Object.assign(ot,i);const c={runMain:Pc,runMainAndExit:Mc,exit:st.mono_exit,setEnvironmentVariable:qc,getAssemblyExports:yr,setModuleImports:rr,getConfig:()=>ot.config,invokeLibraryInitializers:st.invokeLibraryInitializers,setHeapB32:m,setHeapB8:h,setHeapU8:g,setHeapU16:b,setHeapU32:w,setHeapI8:k,setHeapI16:S,setHeapI32:v,setHeapI52:E,setHeapU52:T,setHeapI64Big:x,setHeapF32:I,setHeapF64:A,getHeapB32:$,getHeapB8:L,getHeapU8:R,getHeapU16:B,getHeapU32:N,getHeapI8:F,getHeapI16:M,getHeapI32:P,getHeapI52:V,getHeapU52:z,getHeapI64Big:H,getHeapF32:W,getHeapF64:q,localHeapViewU8:Y,localHeapViewU16:Z,localHeapViewU32:K,localHeapViewI8:G,localHeapViewI16:J,localHeapViewI32:X,localHeapViewI64Big:Q,localHeapViewF32:ee,localHeapViewF64:te};return Object.assign(rt,{INTERNAL:s.internal,Module:o,runtimeBuildInfo:{productVersion:e,gitHash:ot.gitHash,buildConfiguration:t,wasmEnableThreads:n,wasmEnableSIMD:!0,wasmEnableExceptionHandling:!0},...c}),a.getDotnetRuntime?Xc=a.getDotnetRuntime.__list:(a.getDotnetRuntime=e=>a.getDotnetRuntime.__list.getRuntime(e),a.getDotnetRuntime.__list=Xc=new Yc),rt}class Yc{constructor(){this.list={}}registerRuntime(e){return void 0===e.runtimeId&&(e.runtimeId=Object.keys(this.list).length),this.list[e.runtimeId]=mr(e),st.config.runtimeId=e.runtimeId,e.runtimeId}getRuntime(e){const t=this.list[e];return t?t.deref():void 0}}export{Wc as configureEmscriptenStartup,Hc as configureRuntimeStartup,Jc as configureWorkerStartup,Qc as initializeExports,Eo as initializeReplacements,ct as passEmscriptenInternals,Xc as runtimeList,lt as setRuntimeGlobals};\n//# sourceMappingURL=dotnet.runtime.js.map\n"
  },
  {
    "path": "docfx/AppBundle/_framework/supportFiles/0_JetBrainsMono-LICENSE.txt",
    "content": "Copyright 2020 The JetBrains Mono Project Authors (https://github.com/JetBrains/JetBrainsMono)\n\nThis Font Software is licensed under the SIL Open Font License, Version 1.1.\nThis license is copied below, and is also available with a FAQ at:\nhttps://scripts.sil.org/OFL\n\n\n-----------------------------------------------------------\nSIL OPEN FONT LICENSE Version 1.1 - 26 February 2007\n-----------------------------------------------------------\n\nPREAMBLE\nThe goals of the Open Font License (OFL) are to stimulate worldwide\ndevelopment of collaborative font projects, to support the font creation\nefforts of academic and linguistic communities, and to provide a free and\nopen framework in which fonts may be shared and improved in partnership\nwith others.\n\nThe OFL allows the licensed fonts to be used, studied, modified and\nredistributed freely as long as they are not sold by themselves. The\nfonts, including any derivative works, can be bundled, embedded, \nredistributed and/or sold with any software provided that any reserved\nnames are not used by derivative works. The fonts and derivatives,\nhowever, cannot be released under any other type of license. The\nrequirement for fonts to remain under this license does not apply\nto any document created using the fonts or their derivatives.\n\nDEFINITIONS\n\"Font Software\" refers to the set of files released by the Copyright\nHolder(s) under this license and clearly marked as such. This may\ninclude source files, build scripts and documentation.\n\n\"Reserved Font Name\" refers to any names specified as such after the\ncopyright statement(s).\n\n\"Original Version\" refers to the collection of Font Software components as\ndistributed by the Copyright Holder(s).\n\n\"Modified Version\" refers to any derivative made by adding to, deleting,\nor substituting -- in part or in whole -- any of the components of the\nOriginal Version, by changing formats or by porting the Font Software to a\nnew environment.\n\n\"Author\" refers to any designer, engineer, programmer, technical\nwriter or other person who contributed to the Font Software.\n\nPERMISSION & CONDITIONS\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Font Software, to use, study, copy, merge, embed, modify,\nredistribute, and sell modified and unmodified copies of the Font\nSoftware, subject to the following conditions:\n\n1) Neither the Font Software nor any of its individual components,\nin Original or Modified Versions, may be sold by itself.\n\n2) Original or Modified Versions of the Font Software may be bundled,\nredistributed and/or sold with any software, provided that each copy\ncontains the above copyright notice and this license. These can be\nincluded either as stand-alone text files, human-readable headers or\nin the appropriate machine-readable metadata fields within text or\nbinary files as long as those fields can be easily viewed by the user.\n\n3) No Modified Version of the Font Software may use the Reserved Font\nName(s) unless explicit written permission is granted by the corresponding\nCopyright Holder. This restriction only applies to the primary font name as\npresented to the users.\n\n4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font\nSoftware shall not be used to promote, endorse or advertise any\nModified Version, except to acknowledge the contribution(s) of the\nCopyright Holder(s) and the Author(s) or with their explicit written\npermission.\n\n5) The Font Software, modified or unmodified, in part or in whole,\nmust be distributed entirely under this license, and must not be\ndistributed under any other license. The requirement for fonts to\nremain under this license does not apply to any document created\nusing the Font Software.\n\nTERMINATION\nThis license becomes null and void if any of the above conditions are\nnot met.\n\nDISCLAIMER\nTHE FONT SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT\nOF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE\nCOPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\nINCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL\nDAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\nFROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM\nOTHER DEALINGS IN THE FONT SOFTWARE.\n"
  },
  {
    "path": "docfx/AppBundle/_framework/supportFiles/2_lighting.fs",
    "content": "#version 100\n\nprecision mediump float;\n\n// Input vertex attributes (from vertex shader)\nvarying vec3 fragPosition;\nvarying vec2 fragTexCoord;\nvarying vec4 fragColor;\nvarying vec3 fragNormal;\n\n// Input uniform values\nuniform sampler2D texture0;\nuniform vec4 colDiffuse;\n\n// NOTE: Add here your custom variables\n\n#define     MAX_LIGHTS              4\n#define     LIGHT_DIRECTIONAL       0\n#define     LIGHT_POINT             1\n\nstruct MaterialProperty {\n    vec3 color;\n    int useSampler;\n    sampler2D sampler;\n};\n\nstruct Light {\n    int enabled;\n    int type;\n    vec3 position;\n    vec3 target;\n    vec4 color;\n};\n\n// Input lighting values\nuniform Light lights[MAX_LIGHTS];\nuniform vec4 ambient;\nuniform vec3 viewPos;\n\nvoid main()\n{\n    // Texel color fetching from texture sampler\n    vec4 texelColor = texture2D(texture0, fragTexCoord);\n    vec3 lightDot = vec3(0.0);\n    vec3 normal = normalize(fragNormal);\n    vec3 viewD = normalize(viewPos - fragPosition);\n    vec3 specular = vec3(0.0);\n\n    // NOTE: Implement here your fragment shader code\n\n    for (int i = 0; i < MAX_LIGHTS; i++)\n    {\n        if (lights[i].enabled == 1)\n        {\n            vec3 light = vec3(0.0);\n\n            if (lights[i].type == LIGHT_DIRECTIONAL) light = -normalize(lights[i].target - lights[i].position);\n            if (lights[i].type == LIGHT_POINT) light = normalize(lights[i].position - fragPosition);\n\n            float NdotL = max(dot(normal, light), 0.0);\n            lightDot += lights[i].color.rgb*NdotL;\n\n            float specCo = 0.0;\n            if (NdotL > 0.0) specCo = pow(max(0.0, dot(viewD, reflect(-(light), normal))), 16.0); // Shine: 16.0\n            specular += specCo;\n        }\n    }\n\n    vec4 finalColor = (texelColor*((colDiffuse + vec4(specular,1))*vec4(lightDot, 1.0)));\n    finalColor += texelColor*(ambient/10.0);\n\n    // Gamma correction\n    gl_FragColor = pow(finalColor, vec4(1.0/2.2));\n}\n"
  },
  {
    "path": "docfx/AppBundle/_framework/supportFiles/3_lighting.vs",
    "content": "#version 100\n\n// Input vertex attributes\nattribute vec3 vertexPosition;\nattribute vec2 vertexTexCoord;\nattribute vec3 vertexNormal;\nattribute vec4 vertexColor;\n\n// Input uniform values\nuniform mat4 mvp;\nuniform mat4 matModel;\n\n// Output vertex attributes (to fragment shader)\nvarying vec3 fragPosition;\nvarying vec2 fragTexCoord;\nvarying vec4 fragColor;\nvarying vec3 fragNormal;\n\n// NOTE: Add here your custom variables\n\n// https://github.com/glslify/glsl-inverse\nmat3 inverse(mat3 m)\n{\n  float a00 = m[0][0], a01 = m[0][1], a02 = m[0][2];\n  float a10 = m[1][0], a11 = m[1][1], a12 = m[1][2];\n  float a20 = m[2][0], a21 = m[2][1], a22 = m[2][2];\n\n  float b01 = a22*a11 - a12*a21;\n  float b11 = -a22*a10 + a12*a20;\n  float b21 = a21*a10 - a11*a20;\n\n  float det = a00*b01 + a01*b11 + a02*b21;\n\n  return mat3(b01, (-a22*a01 + a02*a21), (a12*a01 - a02*a11),\n              b11, (a22*a00 - a02*a20), (-a12*a00 + a02*a10),\n              b21, (-a21*a00 + a01*a20), (a11*a00 - a01*a10))/det;\n}\n\n// https://github.com/glslify/glsl-transpose\nmat3 transpose(mat3 m)\n{\n  return mat3(m[0][0], m[1][0], m[2][0],\n              m[0][1], m[1][1], m[2][1],\n              m[0][2], m[1][2], m[2][2]);\n}\n\nvoid main()\n{\n    // Send vertex attributes to fragment shader\n    fragPosition = vec3(matModel*vec4(vertexPosition, 1.0));\n    fragTexCoord = vertexTexCoord;\n    fragColor = vertexColor;\n\n    mat3 normalMatrix = transpose(inverse(mat3(matModel)));\n    fragNormal = normalize(normalMatrix*vertexNormal);\n\n    // Calculate final vertex position\n    gl_Position = mvp*vec4(vertexPosition, 1.0);\n}\n"
  },
  {
    "path": "docfx/AppBundle/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n\n<head>\n  <title>Jitter2 WebDemo</title>\n  <meta charset=\"UTF-8\">\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  <link rel=\"modulepreload\" href=\"./main.js\" />\n  <link rel=\"modulepreload\" href=\"./_framework/dotnet.js\" />\n\n<style>\n  html, body {\n    margin: 0;\n    min-height: 100%;\n    background: #222;\n    color: #ddd;\n    font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif;\n  }\n\n  #page {\n    max-width: 800px;\n    margin: 0 auto;\n    padding: 24px 16px;\n  }\n\ndiv#canvas_wrapper {\n  position: relative;\n  width: 100%;\n  aspect-ratio: 800 / 600;\n  padding: 0;\n  overflow: hidden;\n}\n\ncanvas.emscripten {\n  display: block;\n  width: 100%;\n  height: 100%;\n}\n\n  #github-link {\n    position: fixed;\n    top: 12px;\n    right: 16px;\n    color: #fff;\n    background: #333;\n    font-family: sans-serif;\n    font-size: 14px;\n    font-weight: bold;\n    text-decoration: none;\n    padding: 8px 14px;\n    border-radius: 6px;\n    border: 1px solid #555;\n    z-index: 1000;\n    transition: background 0.2s;\n  }\n\n  #github-link:hover {\n    background: #555;\n  }\n\n  html.embed-mode #github-link {\n    display: none;\n  }\n\n  html.light-theme,\n  html.light-theme body {\n    background: #eef3f8;\n    color: #22303c;\n  }\n\n  html.light-theme #github-link {\n    color: #22303c;\n    background: rgba(255, 255, 255, 0.92);\n    border-color: rgba(34, 48, 60, 0.18);\n  }\n\n  html.light-theme #github-link:hover {\n    background: #ffffff;\n  }\n\n  html.light-theme .hint {\n    color: #5f6f80;\n  }\n\n  h1 { color: #fff; font-size: 1.6em; margin: 24px 0 8px; }\n  h2 { color: #ccc; font-size: 1.2em; margin: 20px 0 8px; }\n  p, li { line-height: 1.6; color: #bbb; font-size: 0.95em; }\n  a { color: #5ba8f5; }\n  code { background: #333; padding: 2px 6px; border-radius: 3px; font-size: 0.9em; }\n  ol { padding-left: 20px; }\n  .hint { color: #888; font-size: 0.85em; margin-top: 8px; }\n\n  #spinner {\n    position: absolute;\n    top: 25%;\n    left: 50%;\n    transform: translate(-50%, -50%);\n  }\n\n  #spinner_animation {\n    height: 60px;\n    width: 60px;\n    animation: rotation .6s infinite linear;\n    border-left: 6px solid rgba(0,174,239,.15);\n    border-right: 6px solid rgba(0,174,239,.15);\n    border-bottom: 6px solid rgba(0,174,239,.15);\n    border-top: 6px solid rgba(0,174,239,.8);\n    border-radius: 100%;\n  }\n\n  @keyframes rotation {\n    from { transform: rotate(0deg); }\n    to { transform: rotate(359deg); }\n  }\n\n  @media (max-width: 700px) {\n    #github-link {\n      position: static;\n      display: inline-block;\n      margin-bottom: 12px;\n    }\n  }\n</style>\n<script>\n  const params = new URLSearchParams(window.location.search);\n\n  if (params.get('embed') === '1') {\n    document.documentElement.classList.add('embed-mode');\n  }\n\n  if (params.get('theme') === 'light') {\n    document.documentElement.classList.add('light-theme');\n  }\n</script>\n</head>\n\n<body>\n  <a id=\"github-link\" href=\"https://github.com/notgiven688/jitterphysics2\" target=\"_blank\">⭐ View on GitHub</a>\n  <div id=\"page\">\n    <div id=\"canvas_wrapper\">\n      <canvas class=\"emscripten\" id=\"canvas\" oncontextmenu=\"event.preventDefault()\" tabindex=-1></canvas>\n      <!-- Spinner is removed when .NET is loaded -->\n      <div id=\"spinner\"><div id=\"spinner_animation\"></div></div>\n    </div>\n    <p class=\"hint\">Use <strong>← →</strong> to switch scenes and press <strong>R</strong> to reset.</p>\n  </div>\n\n  <script type=\"module\" src=\"./main.js\"></script>\n</body>\n\n</html>\n"
  },
  {
    "path": "docfx/AppBundle/main.js",
    "content": "import { dotnet } from './_framework/dotnet.js';\n\nasync function initialize() {\n    const canvas = document.getElementById('canvas');\n    const params = new URLSearchParams(window.location.search);\n    const lightTheme = params.get('theme') === 'light';\n\n    // Force an opaque WebGL backbuffer so browser page colors cannot bleed\n    // through anti-aliased canvas content such as UI text.\n    const originalGetContext = canvas.getContext.bind(canvas);\n    canvas.getContext = function(type, attrs) {\n        if (type === 'webgl' || type === 'webgl2' || type === 'experimental-webgl') {\n            return originalGetContext(type, {\n                ...attrs,\n                alpha: false\n            });\n        }\n\n        return originalGetContext(type, attrs);\n    };\n\n    const { getAssemblyExports, getConfig, runMain } = await dotnet\n    .withDiagnosticTracing(false)\n    .create();\n\n    const config = getConfig();\n    const exports = await getAssemblyExports(config.mainAssemblyName);\n\n    dotnet.instance.Module['canvas'] = canvas;\n\n    function pointerToCanvasPixels(clientX, clientY) {\n        const rect = canvas.getBoundingClientRect();\n        const localX = clientX - rect.left;\n        const localY = clientY - rect.top;\n        const scaleX = rect.width > 0 ? canvas.width / rect.width : 1;\n        const scaleY = rect.height > 0 ? canvas.height / rect.height : 1;\n\n        return {\n            x: localX * scaleX,\n            y: localY * scaleY\n        };\n    }\n\n    function resizeCanvasToDisplaySize() {\n        const dpr = Math.min(window.devicePixelRatio || 1, 2);\n\n        const cssWidth = canvas.clientWidth;\n        const cssHeight = canvas.clientHeight;\n\n        const pixelWidth = Math.max(1, Math.round(cssWidth * dpr));\n        const pixelHeight = Math.max(1, Math.round(cssHeight * dpr));\n\n        if (canvas.width !== pixelWidth || canvas.height !== pixelHeight) {\n            canvas.width = pixelWidth;\n            canvas.height = pixelHeight;\n        }\n\n        exports.WebDemo.Application.Resize(pixelWidth, pixelHeight);\n    }\n\n    function mainLoop() {\n        resizeCanvasToDisplaySize();\n        exports.WebDemo.Application.UpdateFrame();\n        window.requestAnimationFrame(mainLoop);\n    }\n\n    function queuePointerTap(clientX, clientY) {\n        const point = pointerToCanvasPixels(clientX, clientY);\n        exports.WebDemo.Application.PointerTap(point.x, point.y);\n    }\n\n    window.addEventListener('resize', resizeCanvasToDisplaySize);\n    window.addEventListener('orientationchange', resizeCanvasToDisplaySize);\n    canvas.addEventListener('pointerdown', evt => {\n        queuePointerTap(evt.clientX, evt.clientY);\n        if (evt.pointerType === 'touch') {\n            evt.preventDefault();\n        }\n    }, { passive: false });\n\n    await runMain();\n\n    exports.WebDemo.Application.SetTheme(lightTheme);\n    resizeCanvasToDisplaySize();\n\n    document.getElementById('spinner')?.remove();\n    window.requestAnimationFrame(mainLoop);\n}\n\ninitialize().catch(err => {\n    console.error('An error occurred during initialization:', err);\n});\n"
  },
  {
    "path": "docfx/AppBundle/package.json",
    "content": "{ \"type\":\"module\" }"
  },
  {
    "path": "docfx/docfx.json",
    "content": "{\n  \"$schema\": \"https://raw.githubusercontent.com/dotnet/docfx/main/schemas/docfx.schema.json\",\n  \"metadata\": [\n    {\n      \"src\": [\n        {\n          \"src\": \"../src/Jitter2\",\n          \"files\": [\n            \"**/*.csproj\"\n          ]\n        }\n      ],\n      \"dest\": \"api\"\n    }\n  ],\n  \"build\": {\n    \"content\": [\n      {\n        \"files\": [\n          \"**/*.{md,yml}\"\n        ],\n        \"exclude\": [\n          \"_site/**\"\n        ]\n      }\n    ],\n    \"resource\": [\n      {\n        \"files\": [\n          \"images/**\",\n          \"docs/**/images/**\",\n          \"logo.png\",\n          \"favicon.ico\",\n          \"AppBundle/**\"\n        ]\n      }\n    ],\n    \"output\": \"_site\",\n    \"template\": [\n      \"default\",\n      \"modern\",\n      \"template\"\n    ],\n    \"globalMetadata\": {\n      \"_appName\": \"\",\n      \"_appTitle\": \"Jitter2\",\n      \"_appFaviconPath\": \"favicon.ico\",\n      \"_appLogoPath\": \"logo.png\",\n      \"_enableSearch\": true,\n      \"pdf\": false,\n      \"_gitUrlPattern\": \"github\",\n      \"_gitContribute\": {\n        \"repo\": \"https://github.com/notgiven688/jitterphysics2\",\n        \"branch\": \"main\"\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "docfx/docs/changelog.md",
    "content": "# Changelog\n\n### Jitter 2.8.4 (2026-04-19)\n\n- Improved `CollisionManifold` generation by performing full clipping, producing better contact sets.\n- Fixed indexed `TriangleMesh` adjacency generation for meshes with duplicated seam vertices.\n- Added generic methods in `ShapeHelper`.\n- Improved XML documentation throughout the codebase.\n\n### Jitter 2.8.3 (2026-04-13)\n\n- Added `SolveMode.Deterministic` - an optional cross-platform deterministic solver mode.\n- Fixed bugs in sleeping logic.\n- Added `PersistentContactManifold` property.\n\n### Jitter 2.8.2 (2026-03-30)\n\n- Added `DynamicTree.SweepCast` and `DynamicTree.FindNearest` - new tree queries combining broadphase pruning with exact narrowphase tests. `SweepCast` sweeps a shape through the tree; `FindNearest` finds the closest proxy by distance. Both include bounded variants and convenience overloads for common shapes.\n- Added `World.Stabilize` - solves existing contacts and constraints at the velocity level without advancing body transforms. Useful for warm-starting a restored scene before resuming normal simulation.\n\n### Jitter 2.8.1 (2026-03-21)\n\n- Fixed velocity setter bug in `RigidBody` - introduced in 2.8.0.\n- Minor API improvements.\n\n### Jitter 2.8.0 (2026-03-19)\n\n- Added `RigidBody.AddImpulse` methods for applying instantaneous impulses (linear and at a world-space position).\n- Fixed corner case in wake-up logic: setting velocity to zero no longer unnecessarily activates sleeping bodies.\n- Introduced `ISink<T>` interface and `CollectionSink<T>` adapter as a struct-friendly alternative to `ICollection<T>` on hot paths.\n- Added `ref TSink` overloads for `ShapeHelper.Tessellate` and `DynamicTree.Query`.\n- Extracted default constraint tuning values into named constants on the `Constraint` base class (`DefaultLinearBias`, `DefaultLinearSoftness`, `DefaultAngularBias`, etc.).\n- **Breaking Change:** `DynamicTree.Nodes` changed from `Node[]` to `ReadOnlySpan<Node>`, exposing only the occupied portion of the internal array.\n- **Breaking Change:** `World.DebugTimings` is now `ReadOnlySpan<double>` instead of `double[]`.\n- Renamed generic type parameters in `NarrowPhase` and `CollisionManifold` from `TA`/`TB` to `Ta`/`Tb`.\n\n### Jitter 2.7.9 (2026-02-14)\n\n- Fixed distance calculation in `SpringConstraint`.\n- Fixed register bug in `UniversalJoint`.\n- Fixed `ConeLimit.Limit` property and added upper bound validation.\n- Fixed inconsistent friction clamping between scalar and SIMD contact solver paths. Both paths now use the pre-update normal impulse for the friction cone.\n- Fixed unnecessary wake-ups for sleeping bodies in contact with static bodies.\n- Added basic debug draw methods to constraints.\n- Added world ownership validation in `World.Remove` and `World.CreateConstraint`. Passing bodies, constraints, or arbiters from a different world now throws `ArgumentException`.\n- Improved XML documentation throughout the codebase.\n\n### Jitter 2.7.8 (2026-01-18)\n\n- Fixed degraded tree quality for large proxies in `DynamicTree`.\n- Added `JQuaternion.Lerp`, `JQuaternion.Slerp`, `JQuaternion.Dot`, and `JQuaternion.Inverse` methods for quaternion interpolation and math.\n- Added `JTriangle.GetCenter`, `JTriangle.GetNormal`, `JTriangle.GetArea`, `JTriangle.GetBoundingBox`, and `JTriangle.ClosestPoint` helper methods.\n- Added `JBoundingBox.Disjoint` and `JBoundingBox.Contains` methods (also in `TreeBox`).\n- Added `World.GetArbiter(id0, id1)` to retrieve existing arbiters without creating new ones.\n- Improved XML documentation throughout the codebase.\n- Fixed `CalculateMassInertia` in `TransformedShape` returning incorrect values.\n- Fixed normalization bug in `TriangleEdgeCollisionFilter`.\n- Fixed validation in `SphereShape` radius setter.\n- Fixed a bug in speculative contact implementation.\n- Improved `TriangleMesh`. Added option to build directly from vertices and indices.\n- Added overloads for `Span` throughout the engine (in `TriangleMesh`, `ShapeHelper`, `PointCloudShape`, `ConvexHullShape`).\n\n### Jitter 2.7.7 (2026-01-08)\n\n- Added `vector.UnsafeAs<T>` and `JVector.UnsafeFrom<T>`. Same for `JQuaternion`.\n- Added `world.PreSubStep` and `world.PostSubStep` events.\n\n### Jitter 2.7.6 (2025-12-18)\n\n- Removed `World.Capacity`. Number of entities in `World` no longer has to be specified in advance.\n- Fixed a bug in `TwistAngle`.\n- Added `WeldJoint`.\n- Exposed more properties in `ConeLimit`.\n\n### Jitter 2.7.5 (2025-11-16)\n\n- Improved cost heuristic for `DynamicTree`.\n\n### Jitter 2.7.4 (2025-10-29)\n\n- Add `MotionType` property to `RigidBody` instances. Bodies might me `Dynamic`, `Static` or `Kinematic`.\nStatic bodies with non-zero velocity are no longer supported, kinematic bodies must be used instead.\n- The contact graph information is used to optimize the memory layout for contacts (`ReorderContacts` step). This makes the solver more cache friendly.\n- Reduced overhead of `CheckDeactivation` step in the engine.\n\n### Jitter 2.7.3 (2025-10-19)\n\n- Improved multi-threading performance.\n\n### Jitter 2.7.2 (2025-09-21)\n\n- Reduced GC in `DynamicTree.Optimize`.\n- Default to LocalRayCast if body is not set for `RigidBodyShape`.\n- Added wakeup parameter to `AddForce` overloads for finer activation state control.\n- Added generic `ICloneableShape<T>` interface for type-safe shape cloning.\n\n### Jitter 2.7.1 (2025-06-28)\n\n- Added `RigidBody.EnableGyroscopicForces` to include gyroscopic forces.\n\n### Jitter 2.7.0 (2025-06-14)\n\n- **Dropped .NET7 support**\n- Added `JQuaternion.ToAxisAngle` method\n- Renamed `JBBox` to `JBoundingBox`and `TreeBBox` to `TreeBox`.\n- Various smaller API changes.\n\n### Jitter 2.6.7 (2025-06-09)\n\n- Introduced SIMD accelerated `TreeBBox` for `DynamicTree`.\n\n### Jitter 2.6.6 (2025-05-31)\n\n- Implicit conversion for `JVector` and `JQuaternion` from tuples, e.g. `cube.Position = (1, 2, 3);`.\n- Added `PreStep` and `PostStep` to `World.Timings`.\n- Added `NarrowPhase.Sweep` overload which calculates time of impact (TOI) for rotating shapes.\n- `RegisterContact` no longer requires a `penetration` and a `speculative` parameter.\n- Bugfix: `MathHelper.RotationQuaternion`, fixed wrong/not normalized quaternion generation for large `dt`.\n- Added an additional `normal` out-parameter to `NarrowPhase.Distance`.\n- Renamed `JVector.TransposedTransform(in JVector vector, in JQuaternion quat)` to `ConjugatedTransform`.\n- Added `Anchor1` and `Anchor2` properties to `BallSocket`.\n- Bugfix: Skipping degenerate triangles in `TriangleMesh` now works correctly.\n\n### Jitter 2.6.5 (2025-05-21)\n\n- Rigid bodies now activate on velocity or force changes.\n- Removed FatTriangleShape.\n- Renamed 'Active' to 'ActiveCount' and add span-based accessors in ReadOnlyPartitionedSet.\n- Fixed bug in TriangleEdgeCollisionFilter.\n\n### Jitter 2.6.4 (2025-05-19)\n\n- **Breaking Change:** Triangle winding order in `TriangleMesh` is now counter-clockwise (CCW) for front-facing triangles.\n*If you're using `TriangleMesh`, swap the vertex order to maintain correct normal orientation.*\n- Added `JTriangle.RayIntersect` method.\n- Renamed `ConvexHullIntersection` to `CollisionManifold`.\n- Modified support function for `BoxShape`.\n\n### Jitter 2.6.3 (2025-05-17)\n\n- Aligned rigid bodies (`RigidBodyData`) to a 64-byte boundary (reduce false sharing).\n- Bugfix in speculative contacts.\n\n### Jitter 2.6.2 (2025-05-06)\n\n- Use **Generics** in `NarrowPhase.cs` (avoid boxing for structs implementing the `ISupportMappable` interface).\n- Added special code paths in `Contact.cs` for static bodies (avoid unnecessary cache line invalidation).\n- Added `PredictPosition`, `PredictOrientation` and `PredictPose` to `RigidBody`.\n- Added `CreateFromAxisAngle` and `Normalize` methods in `JQuaternion`.\n\n### Jitter 2.6.1 (2025-04-24)\n\n- Bugfix in `TriangleEdgeCollisionFilter` for speculative contacts.\n\n### Jitter 2.6.0 (2025-04-24)\n\n- Added `SampleHull` and `MakeHull` to `ShapeHelper`.\n- Fixed hill climbing getting stuck for `ConvexHullShape`s.\n- Added SIMD support for `PointCloudShape`s.\n- Added option to ignore degenerated triangles in `TriangleMesh`.\n- Made thickness parameter mandatory in `FatTriangleShape`.\n- Added Fisher-Yates shuffle to `DynamicTree.Optimize`.\n- Optimized `TriangleEdgeCollisionFilter`.\n\n### Jitter 2.5.9 (2025-04-17)\n\n- Use `CollideEpsilon` 1e-5 in MPREPA.\n- Fixed a bug in `ShardedDictionary`.\n\n### Jitter 2.5.8 (2025-04-16)\n\n- Fixed `DynamicTree.Optimize` messing up collision pairs.\n- Refactored `SoftBody.cs`\n- Improved `TriangleEdgeCollisionFilter`.\n- Further reduced GC.\n\n### Jitter 2.5.7 (2025-04-06)\n\n- Fixed possible crash when dynamically making bodies static.\n- Improved memory footprint and reduced GC.\n- Added `Logger` as a replacement for `Trace`.\n\n### Jitter 2.5.6 (2025-03-08)\n\n- Fixed concurrency bug in `world.GetArbiter`.\n\n### Jitter 2.5.5 (2025-03-02)\n\n- Added implicit conversion operators for System.Numerics Vector3 and Quaternion.\n- Replaced Trace.WriteLine with Trace.Information, Warning, Error.\n\n### Jitter 2.5.4 (2025-02-08)\n\n- Renamed `JAngle.Radiant` to `JAngle.Radian`.\n- Renamed namespace `Jitter2.UnmanagedMemory` to `Jitter2.Unmanaged`.\n- Fixed `body.AddShape(IEnumerable<RigidBodyShape> shapes)` for one-time-use iterators.\n- Smaller improvements in XML-documentation.\n\n### Jitter 2.5.3 (2025-01-12)\n\n- DynamicTree, `Optimize` takes a delegate now.\n- Fixed `TriangleShape` ray cast not returning a normalized normal.\n- Removed the `CollisionHelper` class.\n- Renamed `ActiveList` and `UnmanagedActiveList` to `PartitionedSet` and `PartitionedBuffer`, respectively.\n- Various smaller improvements (ToString() overloads, IEquality\\<T\\> implementations, XML-documentation)\n\n### Jitter 2.5.2 (2025-01-08)\n\n- Added enumeration method to `DynamicTree` and made `PairHashSet` internal.\n- **Breaking Change:** Removed `UseFullEPASolver` option.\n- Further improved simulation performance under high lock contention scenarios.\n\n### Jitter 2.5.1 (2024-12-31)\n\n- Bugfix in `PairHashSet`.\n\n### Jitter 2.5.0 (2024-12-23)\n\n- Better utilization of multi core systems.\n- Bugfix in collision detection (possible NaN values).\n\n### Jitter 2.4.9 (2024-12-18)\n\n- Huge improvements for the `DynamicTree` implementation.\n\n### Jitter 2.4.8 (2024-11-27)\n\n- Add option to build in double precision mode.\n- Made `Constraint` constructor public to allow for custom constraints.\n\n### Jitter 2.4.7 (2024-11-18)\n\n- **Breaking Change:** Dropped .NET6 support, added .NET9.\n- SIMD for contacts.\n- Contact manifold overflow fix.\n- Changed default damping.\n- Improved auxiliary contact points.\n- Minor API changes.\n\n### Jitter 2.4.6 (2024-10-28)\n\n- **Breaking Change:** Jitter world is now constructed using World.Capacity.\n- **Breaking Change:** World.RayCast moved to World.DynamicTree.RayCast.\n- **Breaking Change:** Renamed NumberSubsteps to SubstepCount.\n- Added split impulses. **Breaking Change:** SolverIterations property is now a tuple.\n- Several smaller improvements in the API.\n\n\n### Jitter 2.4.5 (2024-10-07)\n\n- Added new methods to NarrowPhase: Distance and Overlap.\n- **Breaking Change:**  Renamed NarrowPhase.SweepTest to NarrowPhase.Sweep.\n- **Breaking Change:**  Renamed NarrowPhase.GJKEPA to NarrowPhase.Collision.\n- Made PointTest, Raycast and SweepTest to use new SimplexSolver and SimplexSolverAB implementations.\n- Fixed normal in GJKEPA for separating case.\n\n### Jitter 2.4.4 (2024-09-14)\n\n- Implemented fixes and workarounds for using Jitter with a debugger attached.\n\n### Jitter 2.4.3 (2024-08-31)\n\n- Correct corner case beeing wrong in MPR collision detection due to typo (bug fix).\n- FatTriangleShape level did not properly take transformations into account (bug fix).\n\n### Jitter 2.4.2 (2024-08-26)\n\n- Added FatTriangleShape to give triangles thickness which can be useful for static triangle meshes.\n- Removal from potential pairs in DynamicTree ignores filters from now on (bug fix).\n- Use sweep tests for speculative contacts, vastly improving simulation quality in this scenario.\n- **Breaking Change:** Redefinition of NarrowPhase.SweepTest results.\n- Improved TriangleEdgeCollisionFilter.\n\n### Jitter 2.4.1 (2024-08-21)\n\n- Improved TriangleEdgeCollisionFilter.\n- Implemented analytical box and sphere ray casting.\n- Made Restitution and Friction public in Contact.\n- Improved DynamicTree interface.\n- Added Debug.Asserts in ActiveList.\n- Marked ArbiterKey as readonly.\n- Added enumerator to PairHashSet.\n- Changed ShapeHelper.MakeHull to take a generic of type ICollection.\n\n### Jitter 2.4.0 (2024-08-10)\n\n- Improved TrimPotentialPairs logic.\n- Optimized quaternion vector transformation.\n- Extended functionality of ContactData.UsageMask.\n- **Breaking Change:** Overhauled the shape system. Regular shapes (box, sphere, capsule, ...) now derive from RigidBodyShape. Some method signatures changed slightly, e.g. ray casting.\n- Improved exceptions.\n- Added ReferenceFrameAttribute.\n\n### Jitter 2.3.1 (2024-06-02)\n\n- ReadOnly wrappers (ReadOnlyList, ReadOnlyHashset) are now structs.\n- Shapes with very small dimensions might have close to zero or zero mass/inertia. Creating rigid bodies from them now throws an exception (use body.AddShape(shape, setMassInertia: false) to not use the shape's mass properties).\n- Added BeginCollide and EndCollide events per body.\n\n### Jitter 2.3.0 (2024-05-20)\n\n- Added RigidBody.RemoveShape overload to remove multiple shapes at once.\n- Marked Rigid.ClearShapes deprecated.\n- **Breaking Change:** Use JQuaternion for orientations. Sorry for the API break.\n\n### Jitter 2.2.1 (2024-04-29)\n\n- Add optional activate parameter to world.AddShape.\n- Add NarrowPhase.SweepTest.\n- EPA collision detection: various improvements.\n- Improve exit condition for RayCast and PointTest.\n- Remove redundant ArgumentException for zero mass shapes.\n- Handle zero time steps. Throw ArgumentException for negative time steps.\n- Add joint base class to joint classes.\n\n### Jitter 2.2.0 (2024-01-02)\n\n- **Breaking Change:** Renamed `Raycast` to `RayCast`.\n- `world.Remove(world.NullBody)` does now remove all shapes, constraints and contacts associated with NullBody.\n- `world.AddShape(shape)` respects the activation state of the associated rigid body. Most notable: performance improvement when directly adding `TriangleShape`s to world.NullBody for static geometry.\n- Performance improvements for ConvexHullShape.\n- Improved termination condition in GJKEPA collision detection.\n\n### Jitter 2.1.1 (2023-12-17)\n\n- Fixed O(n^2) problem in `TriangleMesh` due to hash collisions.\n- `WorldBoundingBox` of `Shape` is now updated even if no `RigidBody` is attached.\n\n### Jitter 2.1.0 (2023-12-10)\n\n- Added debug drawing for rigid bodies (`RigidBody.DebugDraw`).\n- Fixed a bug in `CalculateMassInertia` within `TransformedShape.cs`.\n- Improved ray casting performance and introduced `NarrowPhase.PointTest`.\n- **Breaking Change:** Inverted behavior of `BroadPhaseCollisionFilter`.\n- **Breaking Change:** Inverted definition of damping factors in `RigidBody.Damping` (0 = no damping, 1 = immediate halt).\n- Added `RigidBody.SetMassInertia` overload to enable setting the inverse inertia to zero.\n- An exception is now thrown when a body's mass is set to zero.\n- Fixed a bug in the friction handling in `Contact.cs`.\n\n### Jitter 2.0.1 (2023-10-28)\n\n- Fixed a bug in contact initialization which affected soft body physics.\n\n### Jitter 2.0.0 (2023-10-22)\n\nInitial stable Release.\n"
  },
  {
    "path": "docfx/docs/documentation/arbiters.md",
    "content": "# Arbiters\n\nArbiters manage contact information between two rigid bodies.\nAn arbiter is created when two shapes begin overlapping and is removed when they separate or when one of the involved bodies is removed from the world.\nEach arbiter can hold up to four cached contact points (see `ContactData`).\n\n## Arbiters and shapes\n\nArbiters are created between *shapes*, not bodies.\nSince a rigid body can have multiple shapes attached to it, a single pair of bodies may produce multiple arbiters—one for each pair of overlapping shapes.\n\nFor example, consider two bodies where body A has two box shapes and body B has one sphere shape.\nIf both boxes overlap with the sphere, two separate arbiters are created: one for each box–sphere pair.\n\n> [!NOTE]\n> **One arbiter per shape pair**\n> Even if the contact manifold changes over time, the arbiter remains the same as long as the two shapes stay in proximity.\n> Contact points within the arbiter are cached and updated across frames.\n\n## ArbiterKey\n\nEach arbiter is identified by an `ArbiterKey`, which is an ordered pair of `ulong` identifiers.\nFor arbiters created by the engine, these identifiers are the `ShapeId` values of the two shapes involved.\nThe ordering is canonical: the shape with the smaller ID is always first.\n\n```cs\npublic readonly struct ArbiterKey(ulong key1, ulong key2) : IEquatable<ArbiterKey>\n{\n    public readonly ulong Key1 = key1;\n    public readonly ulong Key2 = key2;\n}\n```\n\nThe order of `Key1` and `Key2` matters for equality comparison.\n\n## Accessing contact data\n\nThe `Arbiter` class exposes a `Handle` property of type `JHandle<ContactData>`.\nThrough `arbiter.Handle.Data`, the underlying contact information can be read and modified:\n\n```cs\nref ContactData data = ref arbiter.Handle.Data;\n```\n\nThe `ContactData` structure contains up to four contact slots.\nThe `UsageMask` bitfield indicates which slots are active.\nIt also stores the combined `Friction` and `Restitution` coefficients for the contact pair (derived from the maximum of the two bodies' values).\n\n> [!CAUTION]\n> **Lifetime**\n> The contact data is only valid while the arbiter is registered with the world.\n> Do not cache references to `ContactData`.\n> Accessing it after the arbiter has been removed results in undefined behavior.\n\n## Collision events\n\nThe `RigidBody` class provides two events that supply the associated arbiter:\n\n```cs\nbody.BeginCollide += (Arbiter arb) =>\n{\n    // Called when a new arbiter is created involving this body.\n};\n\nbody.EndCollide += (Arbiter arb) =>\n{\n    // Called when an arbiter involving this body is removed.\n};\n```\n\nThese events can be used to inspect or modify contact properties.\nFor example, overriding friction for a specific contact:\n\n```cs\nbody.BeginCollide += (Arbiter arb) =>\n{\n    arb.Handle.Data.Friction = 0.0f;\n};\n```\n\nSince arbiters are per shape pair, a body with multiple shapes may trigger `BeginCollide` multiple times for the same opposing body—once for each shape pair.\n\n## Custom arbiters\n\nArbiters are not limited to the engine's built-in collision detection.\nCustom arbiters can be created and managed using `world.GetOrCreateArbiter` and `world.RegisterContact`.\n\n### Creating an arbiter\n\n`GetOrCreateArbiter` takes two `ulong` identifiers and two rigid bodies.\nIf an arbiter for the given ID pair already exists, it is returned; otherwise, a new one is created:\n\n```cs\nworld.GetOrCreateArbiter(id0, id1, body1, body2, out Arbiter arbiter);\n```\n\nThe identifiers do not have to be shape IDs—they can be any `ulong` values that uniquely identify the contact pair.\nThis allows custom collision systems to create arbiters for application-specific purposes.\n\n> [!WARNING]\n> **ID ordering**\n> The order of the two identifiers matters.\n> `ArbiterKey(1, 2)` and `ArbiterKey(2, 1)` are considered different keys.\n> When creating custom arbiters, be consistent with the ordering.\n\n### Registering contacts\n\nOnce an arbiter exists, contacts can be registered into it:\n\n```cs\nworld.RegisterContact(arbiter, point1, point2, normal);\n```\n\nAll vectors must be in world space, and the normal must be a unit vector.\nThe `removeFlags` parameter can be used to exclude certain velocity components from the solver (e.g., `ContactData.SolveMode.Angular` for angular-only or linear-only responses).\n\nAlternatively, contacts can be registered using IDs directly, which also creates the arbiter if needed:\n\n```cs\nworld.RegisterContact(id0, id1, body1, body2, point1, point2, normal);\n```\n\n### Contact caching\n\nAn arbiter holds at most four contact points.\nWhen a new contact is registered, the arbiter decides how to incorporate it:\n\n1. **Slot available**: If fewer than four contacts are active, the new point is compared to existing contacts. If it is close enough to an existing contact (within a break threshold), it replaces that contact and inherits its accumulated impulse for warm-starting. Otherwise it is inserted into an empty slot as a new contact.\n2. **All slots full**: When all four slots are occupied, the algorithm evaluates which existing contact to replace. For each of the four candidates, it computes the area of the quadrilateral formed by the new point and the three remaining contacts. The candidate whose removal maximizes this area is replaced. This heuristic keeps contacts well-distributed across the contact patch, which produces the most stable contact manifold.\n\nContacts that drift apart beyond a distance threshold during position integration are automatically removed from the manifold.\n\n## Arbiter lifecycle\n\n1. **Creation**: When two shapes begin overlapping, the engine calls `GetOrCreateArbiter` using the shape IDs as keys. The `BeginCollide` event is raised on both bodies.\n2. **Update**: Each `world.Step`, contact positions are updated. Contacts that have separated beyond a threshold are removed from the arbiter. New contacts from ongoing collisions are added.\n3. **Removal**: When all contacts in an arbiter are broken and the shapes are no longer overlapping, the arbiter is removed. The `EndCollide` event is raised on both bodies. The arbiter is returned to an internal pool for reuse.\n"
  },
  {
    "path": "docfx/docs/documentation/bodies.md",
    "content": "# Rigid Bodies\n\nRigid bodies are the main entity of the dynamics system.\n\n## Creating a body\n\nRigid bodies are associated with an instance of the `World` class:\n\n```cs\nvar world = new World();\nvar body = world.CreateRigidBody();\n```\n\n## Adding shapes\n\nMultiple shapes can be added to a rigid body, for example:\n\n```cs\nbody.AddShapes([new SphereShape(radius: 2), new BoxShape(size: 1)]);\n```\n\nShapes determine how bodies collide with each other.\n\n> [!WARNING]\n> **Creating many bodies at once**\n> When calling body.AddShape(shape), the shape is registered in the collision system of the engine and immediately added to the spatial tree structure (`DynamicTree`) for efficient broad-phase collision detection.\n> Registering many objects at $(0, 0, 0)$ must be prevented by specifying the rigid body position, before adding shapes.\n\n> [!WARNING]\n> **Passing the same instance to multiple bodies**\n> Passing the same instance of a shape to multiple bodies is not allowed in Jitter and will throw an exception.\n\nThe sphere shape is defined so that its geometric center aligns with the (local) coordinate system's center at $(0, 0, 0)$.\nThe same holds for all basic primitives (sphere, box, capsule, cone, cylinder).\n\nAfter adding a shape, the mass properties (mass and inertia) of the associated rigid body are calculated accordingly.\nUnit density is assumed for the calculations.\n\nAdding just a sphere\n\n```cs\nbody.AddShape(new SphereShape(radius: 1));\n```\n\nwill result in a body with the textbook inertia and mass of a unit-density sphere of radius one.\n\nThe mass properties of the body can also be set directly using `body.SetMassInertia`.\nPassing `MassInertiaUpdateMode.Preserve` to `body.AddShape(...)` or `body.AddShapes(...)` prevents the automatic recalculation of mass properties when shapes are added.\n\n***The position of the rigid body has to align with the center of mass.**\nSo in the local reference frame of the body, the center of mass is $(0, 0, 0)$. Shapes or combinations of shapes must be translated accordingly.*\n\n### Debugging shapes\n\nThe `RigidBody` class offers the `body.DebugDraw(IDebugDrawer drawer)` method which creates a triangle hull for each shape added to the body and calls the `drawer.DrawTriangle` method in the provided `IDebugDrawer` implementation.\nThe coordinates of the triangles are in world space and can be drawn to debug the collision shape of the rigid body.\n\n> [!WARNING]\n> **body.DebugDraw performance**\n> Every call to `body.DebugDraw` the triangle hulls are generated on the fly.\n> Since this is a slow operation the method should only be called for debugging purposes.\n\n## Forces and impulses\n\nForces and torques can be applied using `body.AddForce`. Forces accumulate over the current step and are reset after integration.\n\nFor instantaneous velocity changes, use `body.ApplyImpulse`:\n\n```cs\n// Linear impulse — changes velocity immediately.\nbody.ApplyImpulse(new JVector(0, 10, 0));\n\n// Impulse at a world-space position — changes both linear and angular velocity.\nbody.ApplyImpulse(new JVector(0, 10, 0), hitPosition);\n```\n\nBoth overloads accept an optional `wakeup` parameter (default `true`).\nWhen set to `false`, the impulse is silently ignored if the body is sleeping.\n\n## Gravity\n\nThe gravity for the world can be set using `world.Gravity`.\nThe property `body.AffectedByGravity` can be used to disable gravity for individual bodies.\n\n## Damping\n\nJitter2 uses a simple damping system to slow rigid bodies down.\nThis improves simulation stability and also resembles mechanical systems losing energy in the real world.\nThere is a linear and an angular damping factor for each body which can be set using `body.Damping`.\nWith each `world.Step`, the angular and linear velocity of each rigid body is multiplied by $1-\\gamma$, where $\\gamma$ is the damping factor.\nFor performance reasons there is no time dependency for the damping system.\nAs a result, bodies in a simulation with smaller timesteps experience greater damping.\n\n## Speculative contacts\n\nSpeculative contacts can be utilized to prevent fast and small objects from tunneling through thin objects.\nAn object moving quickly enough might 'miss' a collision since the distance traveled between two frames exceeds the thickness of another object.\nSpeculative contacts can be enabled on a per-body basis using `body.EnableSpeculativeContacts`.\nThe `world.SpeculativeRelaxationFactor` and `world.SpeculativeVelocityThreshold` can be adjusted to fine-tune speculative contacts for specific use cases.\nHowever, it should be noted that an accurate simulation of fast-moving objects is only possible using smaller time steps.\nSpeculative contacts may involve a trade-off of less accurate collision detection and response.\n\n## Friction and Restitution\n\nFriction and restitution coefficients may be set through `body.Friction` and `body.Restitution`.\nFor a collision of two bodies with different coefficients the maximum value of each body is taken.\n\n## Collide events\n\n`RigidBody` provides two events: `BeginCollide` and `EndCollide`.\nThese events are triggered whenever an arbiter is created or removed which involves the rigid body.\nSee [Arbiters](arbiters.md#collision-events) for details and examples.\n\n## Activation/Deactivation\n\nA rigid body is always assigned to an island.\nIslands are formed by bodies which are pairwise interacting with each other through contacts or constraints.\nDifferent islands are not interacting with each other in any way.\n\nActive rigid bodies may be marked for deactivation by the world once their angular and linear velocity remain below the thresholds defined in `body.DeactivationThreshold` for a period defined by `body.DeactivationTime`.\nIf all bodies within an island are marked for deactivation the whole island gets deactivated.\nThe simulation cost for inactive bodies is effectively zero.\nIslands (and their associated bodies) may get woken up as soon as a collision with an active body is registered.\n\nUsing `body.SetActivationState`, the user can reset the internal deactivation time clock for the rigid body.\nIt will not immediately change the activation state of the body (`body.IsActive`).\nThe next `world.Step` will then consider this body and its connected island for activation or deactivation.\nCalling e.g. `body.SetActivationState(false)` on a falling body with a velocity greater than `body.DeactivationThreshold` will have no effect.\n\n## Static bodies\n\nStatic bodies (`body.MotionType == MotionType.Static`) have infinite mass and therefore are not affected by collisions or constraints.\nThey also do not join islands.\nStatic bodies do not generate collisions with other static or inactive bodies.\nBecause of this, the position of static bodies should not be altered while in contact with other bodies.\n\n## Kinematic bodies\n\nKinematic bodies (`body.MotionType == MotionType.Kinematic`) can have a velocity and therefore change their position.\nThey act similar to static bodies during collisions—their velocity is not changed when colliding with a regular body.\nThey do take part in collision islands.\n"
  },
  {
    "path": "docfx/docs/documentation/constraints.md",
    "content": "# Constraints\n\nConstraints restrict degrees of freedom of rigid bodies.\nIn Jitter2, constraints always act between two bodies.\nA joint is a collection of multiple constraints, so it may act on multiple bodies.\n\n## Degrees of Freedom\n\nA rigid body has 6 degrees of freedom (DOF): 3 translational and 3 rotational.\nConstraints remove one or more of these degrees of freedom.\n\n| Constraint | Removed DOF | Description |\n|------------|-------------|-------------|\n| `BallSocket` | 3 translational | Anchors a point on each body together |\n| `FixedAngle` | 3 rotational | Locks relative orientation between bodies |\n| `HingeAngle` | 2 rotational (3 with limit) | Allows rotation around a single axis only, optionally enforces angular limits |\n| `PointOnLine` | 2 translational (3 with limit) | Constrains a point to a line, optionally limits distance along the axis |\n| `PointOnPlane` | 1 translational (when limit active) | Constrains a point to a plane, only enforced when the limit is violated |\n| `DistanceLimit` | 1 translational (when limit active) | Constrains the distance between anchor points, only enforced when outside the limit range |\n| `TwistAngle` | 1 rotational (when limit active) | Limits relative twist around an axis, only enforced when outside the limit range |\n| `ConeLimit` | 1 rotational (when limit active) | Limits angular tilt between two axes, only enforced when outside the limit range |\n| `AngularMotor` | — | Drives angular velocity (does not remove DOF) |\n| `LinearMotor` | — | Drives linear velocity (does not remove DOF) |\n| `SpringConstraint` | 1 translational | Spring-like force along the anchor connection |\n\n## Joints\n\nJoints are combinations of constraints for common use cases:\n\n| Joint | Constraints used | Remaining DOF |\n|-------|------------------|---------------|\n| `HingeJoint` | `BallSocket` + `HingeAngle` (+ optional `AngularMotor`) | 1 rotational |\n| `PrismaticJoint` | `PointOnLine` + `FixedAngle` or `HingeAngle` (+ optional `LinearMotor`) | 1 translational |\n| `UniversalJoint` | `BallSocket` + `TwistAngle` (+ optional `AngularMotor`) | 2 rotational |\n| `WeldJoint` | `BallSocket` + `FixedAngle` | 0 (fully locked) |\n\n## Creating constraints\n\nConstraints are instantiated through a create method in the world class:\n\n```cs\nvar constraint = world.CreateConstraint<ConstraintType>(body1, body2);\n```\n\nJitter2 allocates and assigns unmanaged memory to constraints internally, allowing them to be used like regular classes.\nThe solver interacts with unmanaged memory structures of type `ConstraintData` (256 bytes) or `SmallConstraintData` (128 bytes), depending on whether `constraint.IsSmallConstraint` is set.\nSmall constraints are designed for simpler constraints with a smaller memory footprint, such as spring constraints for soft bodies.\n\n> [!CAUTION]\n> **Constraint Initialization**\n> For all default constraints, `constraint.Initialize` must be called once after `world.CreateConstraint`.\n\n### World space initialization\n\nConstraints are initialized using world space coordinates (anchor points, axes).\nThe bodies should be positioned in a valid configuration before calling `Initialize`.\nThe constraint then computes and stores local reference frames for each body based on their current poses.\nThis means the constraint \"remembers\" the initial setup and will try to maintain it during simulation.\n\n### Example: Hinge joint\n\nA swinging door can be implemented by combining two constraints: A `HingeAngle` constraint which removes two degrees of angular freedom (the bodies can only rotate around a single axis), and a `BallSocket` constraint removing all three translational degrees of freedom:\n\n```cs\nvar hingeAngle = world.CreateConstraint<HingeAngle>(body1, body2);\nhingeAngle.Initialize(hingeAxis, AngularLimit.Full);\n\nvar ballSocket = world.CreateConstraint<BallSocket>(body1, body2);\nballSocket.Initialize(hingeCenter);\n```\n\nAlternatively, the `HingeJoint` can be used for convenience:\n\n```cs\nvar hinge = new HingeJoint(world, body1, body2, hingeCenter, hingeAxis);\n```\n\n### Fixed constraints\n\nTo constrain a rigid body relative to world space, use `world.NullBody` as one of the bodies.\nFor example, to keep a capsule upright:\n\n```cs\nvar upright = world.CreateConstraint<HingeAngle>(capsule, world.NullBody);\nupright.Initialize(JVector.UnitY, AngularLimit.Full);\n```\n\n### Softness and Bias\n\nFor most constraints, softness and bias values can be set.\nThese values define how strictly the constraint limits are enforced.\nSofter constraints may improve simulation stability but do not fully enforce the constraint limits.\nThe softness and bias parameters can be tweaked for optimal results.\nBetter constraint behavior can also be achieved by sub-stepping, see [World](world.md).\n\n### Enable/Disable constraints\n\nConstraints can be temporarily enabled or disabled using `constraint.IsEnabled`.\n"
  },
  {
    "path": "docfx/docs/documentation/dynamictree.md",
    "content": "# Dynamic Tree\n\nThe dynamic tree holds instances which implement the `IDynamicTreeProxy` interface.\nIts main task is to efficiently determine if a proxy's axis-aligned bounding box overlaps with the axis-aligned bounding box of any other proxy in the world.\nA naive implementation requires $\\mathcal{O}\\left(n\\right)$ operations (checking for an overlap with every of the $n-1$ entities).\nThe tree structure accelerates this to $\\mathcal{O}\\left(\\mathrm{log}(n)\\right)$.\nSince proxies are dynamic and can move, the tree must be continuously updated.\nTo trigger updates less frequently, entities are enclosed within slightly larger bounding boxes than their actual size.\nThis bounding box extension is defined by the `Velocity` property of the `IDynamicTreeProxy` interface.\n\n![img alt](images/dynamictree.png)\n\n## Adding proxies\n\nAll shapes added to a rigid body (`body.AddShape`) are automatically registered with `world.DynamicTree`.\nCustom implementations of `IDynamicTreeProxy` can be added to the tree using `tree.AddProxy`.\nIn this case, a `BroadPhaseFilter` must be implemented and registered (using `world.BroadPhaseFilter`) to handle collisions with the custom proxy, otherwise an `InvalidCollisionTypeException` is thrown.\n\n## Enumerate Overlaps\n\nThe tree implementation needs to be updated using `tree.Update`.\nThis is done automatically for the dynamic tree owned by the world class (`world.DynamicTree`).\nInternally, `UpdateWorldBoundingBox` is called for active proxies implementing the `IUpdatableBoundingBox` interface, and the internal book-keeping of overlapping pairs is updated.\nOverlaps can be queried using `tree.EnumerateOverlaps`.\n\n## Querying the tree\n\nThe dynamic tree is a broadphase structure.\nIts job is to quickly reduce the set of possible candidates.\nSome APIs stop there and return proxies, while others continue with an exact narrowphase test.\n\nIn practice there are two layers of queries:\n\n- Broadphase-only queries, such as `Query(...)`, which return candidate proxies.\n- Broadphase + narrowphase queries, such as `RayCast(...)`, `SweepCast(...)`, and `FindNearest(...)`, which continue with exact tests on supported proxies.\n\n### Broadphase-only queries\n\nAll tree proxies that overlap a given axis-aligned box can be queried:\n\n```cs\npublic void Query<T>(T hits, in JBoundingBox box) where T : class, ICollection<IDynamicTreeProxy>\npublic void Query<TSink>(ref TSink hits, in JBoundingBox box) where TSink : ISink<IDynamicTreeProxy>\n```\n\nAs well as all proxies which overlap with a ray:\n\n```cs\npublic void Query<T>(T hits, in JVector rayOrigin, in JVector rayDirection) where T : class, ICollection<IDynamicTreeProxy>\npublic void Query<TSink>(ref TSink hits, in JVector rayOrigin, in JVector rayDirection) where TSink : ISink<IDynamicTreeProxy>\n```\n\nCustom broadphase queries can easily be implemented.\nAn implementation which queries all proxies overlapping with a single point:\n\n```cs\nvar stack = new Stack<int>();\nstack.Push(tree.Root);\n\nReadOnlySpan<DynamicTree.Node> nodes = tree.Nodes;\n\nwhile (stack.TryPop(out int id))\n{\n    ref readonly DynamicTree.Node node = ref nodes[id];\n\n    if (node.ExpandedBox.Contains(point))\n    {\n        if (node.IsLeaf)\n        {\n            Console.WriteLine($'{node.Proxy} contains {point}.');\n        }\n        else\n        {\n            stack.Push(node.Left);\n            stack.Push(node.Right);\n        }\n    }\n}\n```\n\n### Exact query helpers\n\nThe tree also provides helpers that combine broadphase pruning with an exact narrowphase test.\nThese return the closest exact hit instead of raw candidate proxies.\nAll exact query helpers return `true` on success and `false` when nothing is found.\n\n#### Ray casting\n\nAll proxies implementing `IRayCastable` can be ray cast, including all shapes:\n\n```cs\n// Unbounded\npublic bool RayCast(JVector origin, JVector direction, RayCastFilterPre? pre, RayCastFilterPost? post,\n    out IDynamicTreeProxy? proxy, out JVector normal, out Real lambda)\n\n// Bounded: only considers hits with lambda ≤ maxLambda\npublic bool RayCast(JVector origin, JVector direction, Real maxLambda, RayCastFilterPre? pre, RayCastFilterPost? post,\n    out IDynamicTreeProxy? proxy, out JVector normal, out Real lambda)\n```\n\nThe pre- and post-filters can be used to discard hits during the ray cast.\nA ray is shot from the origin into the specified direction.\nReturns `true` if a hit is found, including the case where the ray origin is inside the hit shape (in which case `lambda` is zero and `normal` is `JVector.Zero`).\nThe point of collision is given by `hit = origin + lambda * direction`.\n\n#### Sweep casting\n\nAll proxies implementing `ISweepTestable` can be sweep-tested, including all shapes:\n\n```cs\n// Unbounded\npublic bool SweepCast<T>(in T support, in JQuaternion orientation, in JVector position, in JVector direction,\n    SweepCastFilterPre? pre, SweepCastFilterPost? post,\n    out IDynamicTreeProxy? proxy, out JVector pointA, out JVector pointB, out JVector normal, out Real lambda)\n    where T : ISupportMappable\n\n// Bounded: only considers hits with lambda ≤ maxLambda\npublic bool SweepCast<T>(in T support, in JQuaternion orientation, in JVector position, in JVector direction, Real maxLambda,\n    SweepCastFilterPre? pre, SweepCastFilterPost? post,\n    out IDynamicTreeProxy? proxy, out JVector pointA, out JVector pointB, out JVector normal, out Real lambda)\n    where T : ISupportMappable\n```\n\nThe query shape is defined by an `ISupportMappable` plus its world-space `orientation` and `position`.\n`direction` is the sweep direction vector; `lambda` is expressed in units of `direction`, so the query shape's center at impact is at `position + lambda * direction`.\n\n`pointA` and `pointB` are the contact points at the sweep origin (before any displacement is applied).\nBecause sweep cast targets are always stationary, `pointB` is simply the world-space contact point.\nThe world-space contact point on the query shape at impact is `pointA + lambda * direction`.\n`normal` is the collision normal in world space.\n\nReturns `true` if a hit is found, including the case where the shapes already overlap (in which case `lambda` is zero and `normal` is `JVector.Zero`).\n\nThe **pre-filter** (`SweepCastFilterPre`) is called before the exact narrowphase test and receives only the candidate proxy.\nUse it to cheaply skip proxies by identity (e.g. ignore the body being swept).\nThe **post-filter** (`SweepCastFilterPost`) is called after the exact test and receives the full `SweepCastResult` (including `Lambda`, `Normal`, `PointA`, `PointB`).\nUse it to reject hits based on geometry, or to collect multiple results rather than stopping at the first.\nReturning `false` from either filter skips that candidate without terminating the sweep.\n\nFor common built-in query shapes, convenience overloads are available:\n\n```cs\npublic bool SweepCastSphere(Real radius, in JVector position, in JVector direction, ...)\npublic bool SweepCastBox(in JVector halfExtents, in JQuaternion orientation, in JVector position, in JVector direction, ...)\npublic bool SweepCastCapsule(Real radius, Real halfLength, in JQuaternion orientation, in JVector position, in JVector direction, ...)\npublic bool SweepCastCylinder(Real radius, Real halfHeight, in JQuaternion orientation, in JVector position, in JVector direction, ...)\n```\n\nEach has a bounded variant with a `maxLambda` parameter.\n\n#### Find nearest query\n\nAll proxies implementing `IDistanceTestable` can be distance-queried, including all shapes:\n\n```cs\n// Unbounded: considers all IDistanceTestable proxies in the tree\npublic bool FindNearest<T>(in T support, in JQuaternion orientation, in JVector position,\n    FindNearestFilterPre? pre, FindNearestFilterPost? post,\n    out IDynamicTreeProxy? proxy, out JVector pointA, out JVector pointB, out JVector normal, out Real distance)\n    where T : ISupportMappable\n\n// Bounded: only considers proxies closer than maxDistance\npublic bool FindNearest<T>(in T support, in JQuaternion orientation, in JVector position, Real maxDistance,\n    FindNearestFilterPre? pre, FindNearestFilterPost? post,\n    out IDynamicTreeProxy? proxy, out JVector pointA, out JVector pointB, out JVector normal, out Real distance)\n    where T : ISupportMappable\n```\n\nThe query shape is defined by an `ISupportMappable` plus its world-space `orientation` and `position`.\n`pointA` and `pointB` are the closest points on the query shape and the found proxy respectively.\n`normal` is the unit direction from the query shape toward the found proxy.\n\nReturns `true` if a proxy is found, including the case where the query shape already overlaps a proxy (in which case `distance` is zero and `normal` is `JVector.Zero`).\nReturns `false` only when no proxy is found within range.\n\nThe **pre-filter** (`FindNearestFilterPre`) is called before the exact narrowphase test and receives only the candidate proxy.\nThe **post-filter** (`FindNearestFilterPost`) is called after the exact test and receives the full `FindNearestResult`.\nFor overlap results the post-filter receives `distance = 0` and `normal = Zero`.\nReturning `false` from either filter skips that candidate and continues the search.\n\nTo skip overlapping proxies and find the nearest *separated* proxy instead, reject overlap results in the post-filter:\n\n```cs\nworld.DynamicTree.FindNearestSphere(radius, position,\n    pre: null,\n    post: result => result.Distance > 0,\n    out proxy, out pointA, out pointB, out normal, out distance);\n```\n\nFor common built-in query shapes, convenience overloads are available:\n\n```cs\npublic bool FindNearestPoint(in JVector position, ...)\npublic bool FindNearestSphere(Real radius, in JVector position, ...)\n```\n\nEach has a bounded variant with a `maxDistance` parameter.\n\n### Overlap check example\n\nOverlap checks can be composed by querying the tree with a bounding box first and then running an exact narrowphase overlap test against the returned candidates:\n\n```cs\n// Returns all RigidBodyShapes overlapping a sphere at 'center' with 'radius'.\nstatic IEnumerable<RigidBodyShape> OverlapSphere(World world, JVector center, float radius)\n{\n    var queryBox = new JBoundingBox(\n        center - new JVector(radius),\n        center + new JVector(radius));\n\n    var candidates = new List<IDynamicTreeProxy>();\n    world.DynamicTree.Query(candidates, queryBox);\n\n    var querySphere = SupportPrimitives.CreateSphere(radius);\n\n    foreach (var proxy in candidates)\n    {\n        if (proxy is not RigidBodyShape shape) continue;\n\n        ref var data = ref shape.RigidBody.Data;\n\n        bool hit = NarrowPhase.Overlap(\n            querySphere,\n            shape,\n            JQuaternion.Identity,\n            data.Orientation,\n            center,\n            data.Position);\n\n        if (hit) yield return shape;\n    }\n}\n```\n\nThis pattern is usually enough for overlap checks and avoids introducing additional broadphase API surface.\n"
  },
  {
    "path": "docfx/docs/documentation/filters.md",
    "content": "# Collision Filters\n\nThere are three types of collision filters: `world.DynamicTree.Filter`, `world.BroadPhaseFilter`, and `world.NarrowPhaseFilter`.\n\n## Dynamic tree filter\n\nThe `world.DynamicTree.Filter`\n\n```cs\npublic Func<IDynamicTreeProxy, IDynamicTreeProxy, bool> Filter { get; set; }\n```\n\nis the earliest filter applied during `world.Step` and is set by default to `World.DefaultDynamicTreeFilter`:\n\n```cs\npublic static bool DefaultDynamicTreeFilter(IDynamicTreeProxy proxyA, IDynamicTreeProxy proxyB)\n{\n    if (proxyA is RigidBodyShape rbsA && proxyB is RigidBodyShape rbsB)\n    {\n        return rbsA.RigidBody != rbsB.RigidBody;\n    }\n\n    return true;\n}\n```\n\nThis filters out collisions between shapes that belong to the same body.\nThe dynamic tree will ignore these collisions, and no potential pairs will be created.\n\nFor soft bodies, another collision filter is typically used (defined in `SoftBodies.DynamicTreeCollisionFilter.Filter`), which also filters out collisions between shapes belonging to the same soft body.\n\n## Broad phase filter\n\nBy default `world.BroadPhaseFilter`\n\n```cs\npublic IBroadPhaseFilter? BroadPhaseFilter { get; set; }\n```\n\nis `null`. It is used to filter out collisions that passed broad phase collision detection—that is, after the `DynamicTree` has added the collision to the `PotentialPair` hash set.\n\nThis can be useful if custom collision proxies are added to `world.DynamicTree`.\nSince the world only knows how to handle collisions between `RigidBodyShape`s, a filter must handle the detected collision (implement custom collision response code and filter out the collision) such that no `InvalidCollisionTypeException` is thrown.\nThe soft body implementation is based on this kind of filter (see `SoftBodies.BroadPhaseCollisionFilter`).\n\n### Example: Collision groups\n\nCollision groups can be implemented using a broad phase filter.\nIn this example, there are two teams: team blue and team red.\nA filter that disregards all collisions between team members of different colors:\n\n```cs\npublic class TeamFilter : IBroadPhaseFilter\n{\n    public class TeamMember { }\n    \n    public static TeamMember TeamRed = new();\n    public static TeamMember TeamBlue = new();\n    \n    public bool Filter(Shape shapeA, Shape shapeB)\n    {\n        if (shapeA.RigidBody.Tag is not TeamMember || shapeB.RigidBody.Tag is not TeamMember)\n        {\n            // Handle collision normally if at least one body is not a member of any team\n            return true;\n        }\n\n        // There is no collision between team red and team blue.\n        return shapeA.RigidBody.Tag == shapeB.RigidBody.Tag;\n    }\n}\n```\n\nThe `TeamFilter` class can then be instantiated and assigned to `world.BroadPhaseFilter`:\n\n```cs\nworld.BroadPhaseFilter = new TeamFilter();\n...\nbodyA.Tag = TeamFilter.TeamBlue;\nbodyB.Tag = TeamFilter.TeamRed;\nbodyC.Tag = TeamFilter.TeamRed;\n```\n\n## Narrow phase filter\n\nThe `world.NarrowPhaseFilter`\n\n```cs\npublic INarrowPhaseFilter? NarrowPhaseFilter { get; set; }\n```\n\noperates similarly.\nHowever, this callback is called after narrow phase collision detection, meaning detailed collision information (such as normal, penetration depth, and collision points) is available at this stage.\nThe filter can not only exclude collisions but also modify collision information.\n\nThe default narrow phase collision filter is assigned to an instance of `TriangleEdgeCollisionFilter`, which filters out so-called 'internal edges' for `TriangleShape`s.\nThese internal edges typically cause collision artifacts when rigid bodies slide over the edges of connected triangles forming static geometry.\nThis problem is also known as 'ghost collisions'.\n"
  },
  {
    "path": "docfx/docs/documentation/general.md",
    "content": "# General\n\nThis section covers fundamental design decisions and configuration options.\n\n## Collision Detection Philosophy\n\nJitter2 takes a unified approach to collision detection that differs from many other physics engines. Unlike engines that implement dedicated algorithms for specific shape pairs (sphere-sphere, box-box, capsule-capsule, etc.), Jitter2 treats all collision detection uniformly using implicit shapes. Every shape is represented through a support function, and collisions are resolved via MPR (Minkowski Portal Refinement), falling back to EPA (Expanding Polytope Algorithm) for deep penetrations. This design simplifies the codebase and makes it straightforward to add custom shapes—any shape that provides a support mapping automatically works with all other shapes.\n\nTraditional physics engines use a three-phase collision pipeline: broad phase (spatial partitioning), mid-phase (hierarchical bounding volumes for complex meshes), and narrow phase (exact shape intersection). Jitter2 eliminates the mid-phase entirely. Instead of building internal acceleration structures for complex geometry, Jitter2 relies on [collision filters](filters.md) to handle large-scale environments. This enables user-defined spatial partitioning strategies—heightmaps, detailed triangle meshes, or even infinite voxel worlds can be implemented by generating collision geometry on-demand within filter callbacks.\n\n## Precision\n\nJitter2 supports both single-precision (`float`) and double-precision (`double`) floating-point arithmetic, selected at compile time. To build with double precision, either uncomment `#define USE_DOUBLE_PRECISION` in [Precision.cs](https://github.com/notgiven688/jitterphysics2/blob/main/src/Jitter2/Precision.cs), or use the command line option:\n\n```bash\ndotnet build -c Release -p:DoublePrecision=true\n```\n\nThe active precision mode can be checked at runtime via `Precision.IsDoublePrecision`. In single precision, `JVector.X` is a `float`; in double precision, it is a `double`.\n\n## Deterministic Simulation\n\nJitter2 provides an optional cross-platform deterministic solver mode via <xref:Jitter2.SolveMode>:\n\n```cs\nworld.SolveMode = SolveMode.Deterministic;\n```\n\nThis mode is intended for reproducible simulation across platforms when the same Jitter2 version, precision mode, and stepping inputs are used. It is useful for automated tests, replay systems, debugging, and lockstep-style simulation.\n\nThe important requirement is not that the entire world matches. What matters is that each interacting island is assembled in the same order: the bodies, shapes, and constraints that participate in that island must be added in the same sequence. If the same island is created in the same order and receives the same inputs, it will evolve the same even if unrelated parts of the world were built differently.\n\nThe deterministic path keeps contacts and constraints in a stable order and uses internal stable trigonometric helpers (`StableMath`) so critical math does not depend on platform-specific `Math`/`MathF` behavior.\n\n| Configuration | What is guaranteed | What must match | What is not guaranteed |\n| --- | --- | --- | --- |\n| `SolveMode.Deterministic` | Cross-platform reproducible simulation results, independent of threading mode and internal SIMD/scalar execution path | Same Jitter2 version, same precision mode, same step sequence / fixed time step, same order in which the participating bodies, shapes, and constraints are added within each interacting island | Float and double matching each other, results across different engine versions |\n| `SolveMode.Regular` with `multiThread: false` | Reproducibility only in the narrow sense that the exact same world build can produce the same result again within the same .NET process | Exact same construction path, exact same addition order, same step sequence, same .NET process / runtime run | Cross-platform determinism, rebuilding the same final scene through a different history, matching results across different process launches |\n| `SolveMode.Regular` with `multiThread: true` | No deterministic guarantee | None | Reproducible ordering or cross-platform bit identity |\n\n> [!WARNING]\n> To the best of our current knowledge, this feature is cross-platform deterministic for the cases described above, but the claim is based on the current implementation and test coverage. At the time of writing, CI exercises the deterministic hash test on `ubuntu-latest`, `windows-latest`, and `macos-latest`, which currently correspond to x64 Linux, x64 Windows, and arm64 macOS on GitHub-hosted runners.\n\n`SolveMode.Deterministic` can be significantly slower than `SolveMode.Regular`, which remains the default and recommended option for normal gameplay or interactive sandbox scenes.\n\n## Coordinate System\n\nJitter2 uses a right-handed coordinate system.\nThe engine itself is coordinate-system agnostic and does not enforce any particular axis convention.\n\nThe only default that assumes a specific orientation is `World.Gravity`, which is initialized to `(0, -9.81, 0)`, treating the Y-axis as up.\nThis can be changed:\n\n```cs\nworld.Gravity = new JVector(0, 0, -9.81f);  // Z-up convention\n```\n\n## Tracing and Logging\n\nJitter2 provides mechanisms for logging and performance profiling.\n\n### Logging\n\nThe `Logger` class provides a simple logging interface with three severity levels: `Information`, `Warning`, and `Error`.\nTo receive log messages, register a listener:\n\n```cs\nLogger.Listener = (level, message) =>\n{\n    Console.WriteLine($\"[{level}] {message}\");\n};\n```\n\nThe engine logs warnings for events such as EPA convergence issues or memory allocation fallbacks.\n\n### Performance Tracing\n\nWhen compiled with the `PROFILE` symbol, Jitter2 records detailed timing information for each simulation phase (broad phase, narrow phase, solver iterations, etc.).\nThe trace data is stored in thread-local buffers for minimal overhead.\n\nTo export the recorded data:\n\n```cs\nTracer.WriteToFile(\"trace.json\");\n```\n\nThe output file uses the Chrome Trace Event format and can be visualized in:\n\n- `chrome://tracing` (paste in Chrome's address bar)\n- [Perfetto UI](https://ui.perfetto.dev/)\n\nWhen `PROFILE` is not defined, all tracing calls are completely stripped by the compiler via `[Conditional]` attributes, resulting in zero runtime overhead.\n\n## Custom Math Types\n\nJitter2 defines its own math types (`JVector`, `JMatrix`, `JQuaternion`, `JBoundingBox`) rather than using `System.Numerics`. This allows precision to be switched globally between `float` and `double` without code changes, gives explicit control over memory layout using `[StructLayout(LayoutKind.Explicit)]`, and avoids dependencies on external math library behavior.\n\nThe explicit field offsets guarantee a predictable memory layout, enabling zero-copy conversion to and from other libraries' types:\n\n```cs\n// Convert to any layout-compatible type\nMyVector3 myVec = jitterVector.UnsafeAs<MyVector3>();\n\n// Convert from any layout-compatible type\nJVector jitterVector = JVector.UnsafeFrom(myVec);\n```\n\nFor convenience, implicit conversions to and from `System.Numerics` types are also provided:\n\n```cs\nSystem.Numerics.Vector3 sysVec = jitterVector;  // implicit conversion\nJVector jitterVec = sysVec;                      // implicit conversion\n```\n\nThese conversions involve copying and potential precision loss when converting from double to float.\n\n### Vector and matrix convention\n\nJitter2 treats vectors as **column vectors**.\nA vector $v$ is transformed by a matrix $M$ using $M \\cdot v$ (post-multiplication):\n\n```cs\nJVector result = JVector.Transform(v, M);  // computes M * v\n```\n\nThis is the standard convention used in mathematics, physics, and most graphics APIs (e.g., OpenGL, Vulkan/GLSL).\n`System.Numerics` uses the opposite convention: vectors are **row vectors** and transformation is written as $v \\cdot M$ (pre-multiplication).\n\nAs a consequence, when converting transformation matrices between Jitter2 and `System.Numerics`, the matrices must be transposed.\nJitter2's `JMatrix` also stores its elements in column-major order in memory (i.e., `M11`, `M21`, `M31` are contiguous), whereas `System.Numerics.Matrix4x4` uses row-major storage.\n"
  },
  {
    "path": "docfx/docs/documentation/shapes.md",
    "content": "# Shapes\n\nShapes define how the rigid body collides with other objects.\nShapes implement the `ISupportMappable` interface and are always convex.\nThey can be passed to static methods defined in the `NarrowPhase` class for collision detection.\nShapes also implement the `IDynamicTreeEntry` interface and can be added to the `DynamicTree` class.\nWhen a shape is added to a rigid body this is done automatically (`world.DynamicTree`).\n\n> [!NOTE]\n> **Concave Shapes**\n> A concave shape can be represented by combining multiple convex shapes on a single rigid body.\n> Third-party libraries for 'convex decomposition' can be used to generate convex hulls from arbitrary meshes.\n\n## Default types\n\nThe inheritance hierarchy for the default shapes:\n\n```text\nShape\n├── RigidBodyShape\n│   ├── BoxShape\n│   ├── CapsuleShape\n│   ├── ConeShape\n│   ├── ConvexHullShape\n│   ├── CylinderShape\n│   ├── PointCloudShape\n│   ├── TransformedShape\n│   └── TriangleShape\n└── SoftBodyShape\n    ├── SoftBodyTetrahedron\n    └── SoftBodyTriangle\n```\n\nMost shapes are self-explanatory (additional details are in the API documentation), while some specifics are outlined below.\n\n### ConvexHullShape\n\nThe constructor of the `ConvexHullShape` takes a list of triangles.\n\n```cs\npublic ConvexHullShape(List<JTriangle> triangles)\n```\n\nThe triangles provided *must* form a convex hull.\nThe validity of the convex shape is not checked.\nInvalid shapes can lead to glitched\ncollisions and/or non-terminating algorithms during collision detection.\nThe triangles are used to construct an internal acceleration structure that speeds up collision detection for this shape through hill-climbing.\n\nThe `convexHullShape.Clone()` method can be used to clone the shape:\nThe internal data structure is then used for both shapes.\n\n### PointCloudShape\n\nThe `PointCloudShape` is very similar to the `ConvexHullShape`.\nThe constructor takes a list of vertices.\n\n```cs\npublic PointCloudShape(List<JVector> vertices)\n```\n\nThe vertices do not need to form a convex hull; however, collision detection will 'shrink-wrap' these vertices, so the final collision shape is convex.\nFor example, passing the 8 vertices of a cube to the constructor generates a cube shape; adding a 9th vertex at the cube's center has no effect.\n\n> [!WARNING]\n> **Number of vertices**\n> `PointCloudShape`s should only be used for a small to moderate number of vertices ($\\approx{}300$). Larger numbers of vertices can negatively impact performance.\n> `ConvexHullShape`s are the better choice for more complex hulls.\n\n### TransformedShape\n\nThe `TransformedShape` takes another shape as input and transforms it.\n\n```cs\npublic TransformedShape(RigidBodyShape shape, in JVector translation, in JMatrix transform)\n```\n\nAny affine transformation is possible.\nThe wrapped shape might be translated, rotated, scaled and sheared.\nFor example, a sphere shape could be transformed into an ellipsoid.\n\n### TriangleShape\n\nThe `TriangleShape` has no volume.\nIt is mostly used for static geometry, although it can be added to non-static bodies.\nThe `TriangleShape` is constructed with a `TriangleMesh` and an index.\n\n```cs\npublic TriangleShape(TriangleMesh mesh, int index)\n```\n\nA `TriangleMesh.Triangle` stores information about neighbour triangles.\nThis information is used in the `TriangleEdgeCollisionFilter` (enabled by default) to resolve collision artifacts that occur when shapes slide over the edges between connected triangles.\nThese edges are often referred to as 'internal edges' and can cause major problems when adding level geometry to a game.\n\n### SoftBodyShape\n\nThe vertices of the `SoftBodyShape` are represented by rigid bodies.\nThe shapes (triangle and tetrahedron) are dynamically defined by the position of the vertices.\nA `SoftBodyShape` is not added to a body.\n\n## Custom shapes\n\nCustom shapes can easily be implemented.\nA shape is defined by its support function—which can be looked up or derived.\n\nThe following example demonstrates implementing a half-sphere (symmetry axis aligned with the y-axis) with a radius of one:\n\n```cs\npublic class HalfSphereShape : RigidBodyShape\n{\n    public override void SupportMap(in JVector direction, out JVector result)\n    {\n        const float centerOfMassOffset = 3.0f / 8.0f;\n\n        if (direction.Y >= 0.0f)\n        {\n            result = JVector.Normalize(direction);\n        }\n        else\n        {\n            JVector pDir = new JVector(direction.X, 0.0f, direction.Z);\n            float pDirSq = pDir.LengthSquared();\n\n            if (pDirSq < 1e-12f) result = JVector.Zero;\n            else result = (1.0f / MathF.Sqrt(pDirSq)) * pDir;\n        }\n\n        // shift, such that (0, 0, 0) is the center of mass\n        result.Y -= centerOfMassOffset;\n    }\n\n    public override void GetCenter(out JVector point)\n    {\n        point = JVector.Zero;\n    }\n}\n```\n\nMass properties and bounding boxes are automatically calculated from the support map using methods in the `ShapeHelper` class.\nPerformance can be optimized by providing overrides directly in the shape class:\n\n```cs\npublic override void CalculateBoundingBox(in JQuaternion orientation, in JVector position, out JBoundingBox box)\n\npublic override void CalculateMassInertia(out JMatrix inertia, out JVector com, out float mass)\n\npublic override bool LocalRayCast(in JVector origin, in JVector direction, out JVector normal, out float lambda)\n```\n\nThe `ShapeHelper` class can also be used to generate a triangle mesh representation of the shape (or any class implementing `ISupportMappable`):\n\n```cs\npublic static List<JTriangle> Tessellate(ISupportMappable support, int subdivisions = 3)\n```\n"
  },
  {
    "path": "docfx/docs/documentation/world.md",
    "content": "# Jitter World\n\nThe `World` class contains all entities in the physics simulation and provides the `World.Step` method to advance the simulation by a single time step.\n\n## World.Step\n\nForward the world by a single time step using\n\n```cs\nStep(float dt, bool multiThread = true)\n```\n\n### Time step size\n\n> [!NOTE]\n> **Units in Jitter2**\n> The unit system is not explicitly defined.\n> The engine is optimized for objects with a size of 1 [len_unit].\n> For example, the collision system uses length thresholds on the order of 1e-04 [len_unit].\n> It assumes a unit density of 1 [mass_unit/len_unit³] for mass properties of shapes.\n> Consequently, the default mass of a unit cube is 1 [mass_unit].\n> The default value for gravity is 9.81 [len_unit/time_unit²], which aligns with the gravitational acceleration on Earth in metric units (m/s²).\n> Therefore, it is reasonable to use metric units (kg, m, s) when conceptualizing these values.\n\nThe smaller the time step size, the more stable the simulation.\nTimesteps larger than $\\mathrm{dt}=1/60\\,\\mathrm{s}$ are not advised.\nIt is also recommended to use fixed time steps.\nTypical code accumulates delta times and calls `world.Step` only at fixed time intervals, as shown in the following example.\n\n```cs\nprivate float accumulatedTime = 0.0f;\n\npublic void FixedTimeStep(float dt, int maxSteps = 4)\n{\n    const float fixedStep = 1.0f / 100.0f;\n\n    int steps = 0;\n    accumulatedTime += dt;\n\n    while (accumulatedTime > fixedStep)\n    {\n        world.Step(fixedStep, multiThread);\n        accumulatedTime -= fixedStep;\n\n        // we can not keep up with the real time, i.e. the simulation\n        // is running slower than the real time is passing.\n        if (++steps >= maxSteps) return;\n    }\n}\n```\n\n### Multithreading\n\nJitter2 employs its own thread pool (`Parallelization.ThreadPool`) to distribute tasks across multiple threads.\nThe thread pool is utilized when `world.Step` is invoked with `multiThread` set to true.\nBy default, `ThreadPool.ThreadCountSuggestion`$-1$ additional threads are spawned, where the suggestion is calculated by\n\n```cs\npublic const float ThreadsPerProcessor = 0.9f;\npublic static int ThreadCountSuggestion => Math.Max((int)(Environment.ProcessorCount * ThreadsPerProcessor), 1);\n```\n\nThe number of worker threads managed by the thread pool can be adjusted using `ChangeThreadCount(int numThreads)`.\nA singleton pattern is used here, as demonstrated below:\n\n```cs\nThreadPool.Instance.ChangeThreadCount(4);\n```\n\nThis adjusts the number of additional (with respect to the main thread) worker threads to $4-1=3$.\n\nThe `world.ThreadModel` property may be used to keep the thread pool in a tight loop waiting for work to be processed after `world.Step` has been run (`ThreadModelType.Persistent`), or to yield threads afterwards (`ThreadModelType.Regular`).\nThe latter option is recommended to free processing power for other code, such as rendering.\n\n## Solver Mode\n\nJitter2 offers two solver strategies through <xref:Jitter2.World.SolveMode>:\n\n```cs\nworld.SolveMode = SolveMode.Regular;       // default\nworld.SolveMode = SolveMode.Deterministic; // reproducible, slower\n```\n\n`SolveMode.Regular` is the default and optimized for throughput. It keeps the solver fast, but the exact order in which contacts and constraints are processed may vary.\n\n`SolveMode.Deterministic` is the best-effort cross-platform deterministic path. It processes each simulation island in a stable order and uses deterministic tie-breakers for contacts and constraints. Islands can still be distributed across threads, so `world.Step(dt, multiThread: true)` remains valid in deterministic mode.\n\nUse deterministic mode when repeatability matters more than raw performance, for example for tests, replays, debugging, or deterministic gameplay simulation. It can be significantly slower than `SolveMode.Regular`, so it should generally be enabled deliberately rather than used as the default for all worlds.\n\nBy contrast, `SolveMode.Regular` with `multiThread: false` can still look reproducible when the world is built in the exact same way inside the same .NET process, but that is a much weaker property and should not be confused with cross-platform determinism.\n\nFor deterministic mode, it is not necessary that the entire world was built through the same history. What must match is the setup order inside each interacting island: the participating bodies, shapes, and constraints must be added in the same order. Precision still matters: a float build and a double build are both deterministic, but they will not produce the same bit pattern. See [General](general.md#deterministic-simulation) for a summary of what each solver configuration guarantees and the current CI coverage behind that claim.\n\n## Solver Iterations\n\nJitter2 employs an iterative solver to solve contacts and constraints.\nThe number of iterations can be raised to improve simulation quality (`world.SolverIterations`).\n\n```cs\nworld.SolverIterations = (solver: 6, relaxation: 4);\n```\n\nJitter2 solves physical contacts (and constraints) on the velocity level ('solver iterations').\nJitter2 also adds velocities to rigid bodies to resolve unphysical interpenetrations of bodies.\nThese additional velocities add unwanted energy to the system which can be removed by an additional relaxation phase after integrating the new positions from these velocities.\nThe number of iterations in the relaxation phase ('relaxation iterations') is specified here as well.\nThe runtime for solving contacts and constraints scales linearly with the number of iterations.\n\n## Substep Count\n\nThe time step can be divided into smaller steps, defined by `world.SubstepCount`.\nThese smaller time steps are solved similar to regular full steps, however collision information is not updated.\nEach sub step is solved with the number of solver iterations specified in `world.SolverIterations`.\nFor example\n\n```cs\nworld.SubstepCount = 4;\nworld.SolverIterations = (solver: 2, relaxation: 1);\n```\n\ndoes perform $12$ solver iterations in total for each call to `world.Step`.\nThe runtime is slower than a single regular step with $12$ iterations but this approach enhances the stability of the simulation.\nSubstepping is excellent for enhancing the overall quality of constraints, stabilizing large stacks of objects, and simulating large mass ratios (like heavy objects resting on light objects) with greater accuracy.\n\n## Contact Manifold Persistence\n\nBy default, Jitter2 caches contact points and their accumulated impulses between frames (`world.PersistentContactManifold = true`). This allows the solver to warm-start from the previous solution and lets the manifold grow over several steps, which improves stability for resting contacts.\n\nSetting `world.PersistentContactManifold = false` discards all contact data at the end of each frame, so every contact is treated as brand-new. This removes frame-to-frame contact memory at the cost of solver convergence speed.\n\nIndividual bodies can discard their cached contacts without changing the global setting:\n\n```cs\nbody.ClearContactCache();  // discard cached manifold for this body\n```\n\nThis is useful after discontinuous user-driven transforms such as teleports. When `SolveMode.Deterministic` is active, setting a body's `Position` or `Orientation` property automatically calls `ClearContactCache()`.\n\n## Warm-Start Reset\n\nThe iterative solver warm-starts each frame from the accumulated impulses of the previous frame. After restoring a snapshot or any other discontinuous state change, this cached state can be stale. Every constraint exposes a `ResetWarmStart()` method that clears its accumulated impulses without removing the constraint:\n\n```cs\nforeach (var constraint in body.Constraints)\n{\n    constraint.ResetWarmStart();\n}\n```\n\n`World.Stabilize` can then be called to re-solve the restored contacts and constraints before resuming normal simulation. `Stabilize` respects `SolveMode.Deterministic` when it is set.\n\n## Auxiliary Contacts\n\nJitter2 employs a technique termed 'auxiliary contacts', where additional contacts are generated for the general case where two flat surfaces of shapes are in contact.\nThese additional contacts are calculated within one frame, generating the full contact manifold in a 'single pass' and preventing jitter commonly encountered with incrementally constructed collision manifolds.\nThe `world.EnableAuxiliaryContactPoints` property can be used to enable or disable the usage of auxiliary contact point generation.\n\n## Rigid Bodies\n\nAll rigid bodies registered with the world can be accessed using\n\n```cs\nworld.RigidBodies\n```\n\nwhere `RigidBodies` is of type `ReadOnlyPartitionedSet<RigidBody>`.\nThe bodies are in no particular order and may be reordered during calls to `world.Step`.\n\n## Raw Data\n\n`RigidBody`s, `Arbiter`s, and `(Small)Constraint`s are regular C# classes that reside on the managed heap.\nHowever, these objects are linked to their unmanaged counterparts: `RigidBodyData`, `ContactData`, and `(Small)ConstraintData` which can be accessed using:\n\n```cs\nworld.RawData\n```\n\nJitter2 relocates native structures so that active objects are stored in contiguous memory, enabling efficient access by the iterative solver.\n\n> [!CAUTION]\n> **Raw Memory Access**\n> Accessing raw memory is generally not required when utilizing the standard functionalities of Jitter2.\n> Although reading the raw data of objects is generally safe, modifying data can corrupt the internal state of the engine.\n\n> [!WARNING]\n> **Accessing Removed Entities**\n> Instances of `RigidBody`, `Arbiter`, and `Constraint` store some of their data in unmanaged memory, which is automatically freed once the entities are removed (`world.Remove`) from the world.\n> These entities must not be used any longer, i.e., their functions and properties must not be called or accessed, otherwise, a `NullReferenceException` is thrown.\n\n## Removing Entities\n\nRigid bodies, constraints, and shapes can be removed from the world:\n\n```cs\nworld.Remove(body);        // removes body and its shapes\nworld.Remove(constraint);  // removes a constraint\nworld.Clear();             // removes all entities\n```\n\n## NullBody\n\nThe world provides a special static body `world.NullBody` that is pinned to the world.\nIt can be used to create constraints that fix a body relative to world space (see [Constraints](constraints.md)).\n\n## Deactivation\n\nThe deactivation system can be globally disabled using `world.AllowDeactivation`.\nSetting this to `false` prevents bodies from being deactivated but does not wake up already sleeping bodies.\n"
  },
  {
    "path": "docfx/docs/introduction.md",
    "content": "---\n_disableBreadcrumb: true\n_disableContribution: true\n---\n\n<div class=\"jp-hero\">\n  <p class=\"jp-hero-eyebrow\">Fast &middot; Lightweight &middot; Pure C# &middot; MIT License</p>\n  <h1 class=\"jp-hero-title\">Jitter Physics 2</h1>\n  <p class=\"jp-hero-sub\">\n    An impulse-based 3D rigid-body physics engine for .NET &mdash;<br>\n    zero native dependencies, runs anywhere .NET runs.\n  </p>\n  <div class=\"jp-hero-ctas\">\n    <a href=\"~/docs/tutorials/boxes/project-setup.md\" class=\"jp-btn-primary\">Get Started</a>\n    <a href=\"https://github.com/notgiven688/jitterphysics2\" class=\"jp-btn-ghost\">View on GitHub</a>\n  </div>\n  <div class=\"jp-badges\">\n    <img src=\"https://img.shields.io/nuget/v/Jitter2?style=flat-square&label=NuGet&color=5ba8f5\" alt=\"NuGet version\">\n    <img src=\"https://img.shields.io/github/stars/notgiven688/jitterphysics2?style=flat-square&label=Stars&color=5ba8f5\" alt=\"GitHub stars\">\n    <img src=\"https://img.shields.io/badge/.NET-8%2B-blueviolet?style=flat-square\" alt=\".NET 8+\">\n    <img src=\"https://img.shields.io/github/license/notgiven688/jitterphysics2?style=flat-square&color=22c55e\" alt=\"MIT License\">\n  </div>\n</div>\n\n<div class=\"jp-features\">\n  <div class=\"jp-feature-card\">\n    <div class=\"jp-feature-icon\">&#9889;</div>\n    <div class=\"jp-feature-title\">Zero Dependencies</div>\n    <div class=\"jp-feature-body\">Pure C# with no native DLLs, no P/Invoke. Runs on any platform that supports .NET 8 or later.</div>\n  </div>\n  <div class=\"jp-feature-card\">\n    <div class=\"jp-feature-icon\">&#128296;</div>\n    <div class=\"jp-feature-title\">Impulse-Based Dynamics</div>\n    <div class=\"jp-feature-body\">Semi-implicit Euler integrator with sub-stepping for stable, stiff simulations at interactive frame rates.</div>\n  </div>\n  <div class=\"jp-feature-card\">\n    <div class=\"jp-feature-icon\">&#129513;</div>\n    <div class=\"jp-feature-title\">Deterministic Solver</div>\n    <div class=\"jp-feature-body\">Optional cross-platform deterministic mode for reproducible simulations.</div>\n  </div>\n  <div class=\"jp-feature-card\">\n    <div class=\"jp-feature-icon\">&#128164;</div>\n    <div class=\"jp-feature-title\">Massive Sleeping Worlds</div>\n    <div class=\"jp-feature-body\">Deactivation system keeps large simulations fast — 100k+ inactive bodies have near-zero per-frame cost.</div>\n  </div>\n  <div class=\"jp-feature-card\">\n    <div class=\"jp-feature-icon\">&#127919;</div>\n    <div class=\"jp-feature-title\">Speculative Contacts</div>\n    <div class=\"jp-feature-body\">Prevents tunneling at high velocities without the overhead of continuous collision detection.</div>\n  </div>\n  <div class=\"jp-feature-card\">\n    <div class=\"jp-feature-icon\">&#128279;</div>\n    <div class=\"jp-feature-title\">Rich Constraints</div>\n    <div class=\"jp-feature-body\">BallSocket, Hinge, Prismatic, Universal Joint, Linear &amp; Angular Motor, Spring, Distance Limit, and more.</div>\n  </div>\n  <div class=\"jp-feature-card\">\n    <div class=\"jp-feature-icon\">&#128142;</div>\n    <div class=\"jp-feature-title\">Convex &amp; Mesh Shapes</div>\n    <div class=\"jp-feature-body\">Box, Capsule, Sphere, Cone, Cylinder, ConvexHull, PointCloud, and TriangleMesh &mdash; unified GJK/MPR pipeline.</div>\n  </div>\n  <div class=\"jp-feature-card\">\n    <div class=\"jp-feature-icon\">&#128260;</div>\n    <div class=\"jp-feature-title\">Float or Double Precision</div>\n    <div class=\"jp-feature-body\">Compile-time precision switch &mdash; the same API and source code works with either <code>float</code> or <code>double</code>.</div>\n  </div>\n  <div class=\"jp-feature-card\">\n    <div class=\"jp-feature-icon\">&#129527;</div>\n    <div class=\"jp-feature-title\">Soft-Body Dynamics</div>\n    <div class=\"jp-feature-body\">Cloth, ropes, and deformable bodies coexist alongside rigid bodies in the same simulation world.</div>\n  </div>\n</div>\n\n\n<div class=\"demo-shell\">\n  <div class=\"demo-card\" id=\"demo_card\">\n    <div class=\"demo-copy\">\n      <strong>Interactive Web Demo</strong>\n      <span>Run the physics engine live in your browser &mdash; no install required.</span>\n    </div>\n    <button class=\"demo-button\" id=\"load_demo_button\" type=\"button\">Launch Demo</button>\n  </div>\n  <div class=\"demo-frame-wrap\" id=\"demo_frame_wrap\" hidden>\n    <iframe\n      id=\"demo_frame\"\n      title=\"Jitter2 Web Demo\"\n      loading=\"lazy\"\n      allow=\"fullscreen\"\n      referrerpolicy=\"strict-origin-when-cross-origin\"></iframe>\n  </div>\n</div>\n\n<div class=\"jp-nav-cards\">\n  <a class=\"jp-nav-card\" href=\"~/docs/tutorials/boxes/project-setup.md\">\n    <div class=\"jp-nav-card-icon\">&#128218;</div>\n    <div class=\"jp-nav-card-title\">Hello World Tutorial</div>\n    <div class=\"jp-nav-card-body\">Set up a project and simulate your first falling box in minutes.</div>\n  </a>\n  <a class=\"jp-nav-card\" href=\"~/docs/tutorials/teapots/project-setup.md\">\n    <div class=\"jp-nav-card-icon\">&#127861;</div>\n    <div class=\"jp-nav-card-title\">Teapot Stacking</div>\n    <div class=\"jp-nav-card-body\">Load convex hull meshes and simulate a tower of Utah teapots.</div>\n  </a>\n  <a class=\"jp-nav-card\" href=\"~/docs/documentation/world.md\">\n    <div class=\"jp-nav-card-icon\">&#128196;</div>\n    <div class=\"jp-nav-card-title\">Documentation</div>\n    <div class=\"jp-nav-card-body\">Dive into bodies, shapes, constraints, and the broad-phase tree.</div>\n  </a>\n  <a class=\"jp-nav-card\" href=\"~/api/Jitter2.yml\">\n    <div class=\"jp-nav-card-icon\">&#128214;</div>\n    <div class=\"jp-nav-card-title\">API Reference</div>\n    <div class=\"jp-nav-card-body\">Full generated reference for every public type in Jitter2.</div>\n  </a>\n</div>\n\n<style>\n/* ── Accent & token ─────────────────────────────────────── */\n:root { --jp-accent: #5ba8f5; --jp-accent-hover: #7cbaf8; }\n\n/* ── Hero ───────────────────────────────────────────────── */\n.jp-hero {\n  padding: 2.5rem 0 2rem;\n  text-align: center;\n}\n.jp-hero-eyebrow {\n  font-size: 0.8rem;\n  letter-spacing: 0.08em;\n  text-transform: uppercase;\n  color: var(--jp-accent);\n  margin-bottom: 0.75rem;\n}\n.jp-hero-title {\n  font-size: clamp(2rem, 5vw, 3rem);\n  font-weight: 800;\n  line-height: 1.1;\n  margin: 0 0 1rem;\n  color: var(--bs-body-color);\n}\n.jp-hero-sub {\n  font-size: 1.1rem;\n  color: var(--bs-secondary-color);\n  line-height: 1.7;\n  margin-bottom: 1.75rem;\n}\n.jp-hero-ctas {\n  display: flex;\n  gap: 0.75rem;\n  justify-content: center;\n  flex-wrap: wrap;\n  margin-bottom: 1.25rem;\n}\n.jp-btn-primary, .jp-btn-ghost {\n  display: inline-block;\n  padding: 0.7rem 1.4rem;\n  border-radius: 999px;\n  font-weight: 700;\n  font-size: 0.95rem;\n  text-decoration: none;\n  transition: background 0.15s, color 0.15s, border-color 0.15s;\n}\n.jp-btn-primary {\n  background: var(--jp-accent);\n  color: #08111c;\n  border: 2px solid transparent;\n}\n.jp-btn-primary:hover { background: var(--jp-accent-hover); color: #08111c; text-decoration: none; }\n.jp-btn-ghost {\n  background: transparent;\n  color: var(--bs-body-color);\n  border: 2px solid var(--bs-border-color);\n}\n.jp-btn-ghost:hover {\n  border-color: var(--jp-accent);\n  color: var(--jp-accent);\n  text-decoration: none;\n}\n.jp-badges {\n  display: flex;\n  gap: 0.4rem;\n  justify-content: center;\n  flex-wrap: wrap;\n}\n.jp-badges img { height: 20px; border-radius: 4px; }\n\n/* ── Feature grid ───────────────────────────────────────── */\n.jp-features {\n  display: grid;\n  grid-template-columns: repeat(auto-fill, minmax(210px, 1fr));\n  gap: 1rem;\n  margin: 2.5rem 0;\n}\n.jp-feature-card {\n  background: var(--bs-tertiary-bg);\n  border: 1px solid var(--bs-border-color);\n  border-radius: 0.75rem;\n  padding: 1.25rem 1.1rem 1.1rem;\n  transition: border-color 0.15s, transform 0.15s;\n}\n.jp-feature-card:hover {\n  border-color: var(--jp-accent);\n  transform: translateY(-2px);\n}\n.jp-feature-icon {\n  font-size: 1.5rem;\n  margin-bottom: 0.6rem;\n  line-height: 1;\n}\n.jp-feature-title {\n  font-weight: 700;\n  font-size: 0.95rem;\n  margin-bottom: 0.4rem;\n  color: var(--bs-body-color);\n}\n.jp-feature-body {\n  font-size: 0.85rem;\n  color: var(--bs-secondary-color);\n  line-height: 1.5;\n}\n\n/* ── Demo shell ─────────────────────────────────────────── */\n.demo-shell { margin: 0 0 2rem; }\n.demo-card,\n.demo-frame-wrap {\n  width: 100%;\n  aspect-ratio: 800 / 600;\n  border-radius: 10px;\n  overflow: hidden;\n  background: linear-gradient(160deg, #15181d 0%, #1f2732 100%);\n  border: 1px solid rgba(255,255,255,0.08);\n}\nhtml[data-bs-theme=\"light\"] .demo-card,\nhtml[data-bs-theme=\"light\"] .demo-frame-wrap {\n  background: linear-gradient(160deg, #eef3f8 0%, #dde8f2 100%);\n  border-color: rgba(34,48,60,0.12);\n}\n.demo-card {\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n  align-items: center;\n  gap: 1rem;\n  padding: 1.5rem;\n  text-align: center;\n}\n.demo-copy { display: flex; flex-direction: column; gap: 0.5rem; max-width: 34rem; align-items: center; }\n.demo-copy strong { font-size: 1.1rem; color: #fff; }\nhtml[data-bs-theme=\"light\"] .demo-copy strong { color: #22303c; }\n.demo-copy span { color: #b6c2d0; line-height: 1.5; }\nhtml[data-bs-theme=\"light\"] .demo-copy span { color: #5f6f80; }\n.demo-button {\n  appearance: none;\n  border: 0;\n  border-radius: 999px;\n  padding: 0.75rem 1.4rem;\n  background: var(--jp-accent);\n  color: #08111c;\n  font: inherit;\n  font-weight: 700;\n  cursor: pointer;\n  transition: background 0.15s;\n}\n.demo-button:hover, .demo-button:focus-visible { background: var(--jp-accent-hover); }\nhtml[data-bs-theme=\"light\"] .demo-button { background: #22303c; color: #f4f8fb; }\nhtml[data-bs-theme=\"light\"] .demo-button:hover,\nhtml[data-bs-theme=\"light\"] .demo-button:focus-visible { background: #314253; }\n.demo-frame-wrap iframe { display: block; width: 100%; height: 100%; border: 0; }\n\n/* ── Navigation cards ───────────────────────────────────── */\n.jp-nav-cards {\n  display: grid;\n  grid-template-columns: repeat(auto-fill, minmax(180px, 1fr));\n  gap: 1rem;\n  margin: 2rem 0;\n}\n.jp-nav-card {\n  background: var(--bs-tertiary-bg);\n  border: 1px solid var(--bs-border-color);\n  border-radius: 0.75rem;\n  padding: 1.2rem 1rem;\n  text-decoration: none;\n  color: var(--bs-body-color);\n  transition: border-color 0.15s, transform 0.15s;\n  display: block;\n}\n.jp-nav-card:hover {\n  border-color: var(--jp-accent);\n  transform: translateY(-2px);\n  text-decoration: none;\n  color: var(--bs-body-color);\n}\n.jp-nav-card-icon { font-size: 1.5rem; margin-bottom: 0.5rem; }\n.jp-nav-card-title { font-weight: 700; font-size: 0.9rem; margin-bottom: 0.3rem; }\n.jp-nav-card-body { font-size: 0.82rem; color: var(--bs-secondary-color); line-height: 1.4; }\n\n/* ── Responsive tweaks ──────────────────────────────────── */\n@media (max-width: 600px) {\n  .jp-hero { padding: 1.5rem 0 1.25rem; }\n  .demo-card { padding: 1.1rem; }\n}\n</style>\n\n<script>\n(() => {\n  const button   = document.getElementById('load_demo_button');\n  const card     = document.getElementById('demo_card');\n  const frameWrap = document.getElementById('demo_frame_wrap');\n  const frame    = document.getElementById('demo_frame');\n  if (!button || !card || !frameWrap || !frame) return;\n\n  const buildFrameUrl = () => {\n    const theme = document.documentElement.getAttribute('data-bs-theme') === 'light'\n      ? 'light' : 'dark';\n    return `https://jitterphysics.com/AppBundle/index.html?embed=1&theme=${theme}`;\n  };\n\n  button.addEventListener('click', () => {\n    if (!frame.src) frame.src = buildFrameUrl();\n    card.hidden = true;\n    frameWrap.hidden = false;\n  }, { once: true });\n\n  new MutationObserver(() => {\n    if (frame.src) frame.src = buildFrameUrl();\n  }).observe(document.documentElement, {\n    attributes: true,\n    attributeFilter: ['data-bs-theme']\n  });\n})();\n</script>\n"
  },
  {
    "path": "docfx/docs/toc.yml",
    "content": "- name: Welcome\n  href: introduction.md\n- name: Quickstart\n  expanded: true\n  items:\n    - name: Boxes\n      expanded: true\n      items:\n        - name: Project Setup\n          href: tutorials/boxes/project-setup.md\n        - name: Render Loop\n          href: tutorials/boxes/render-loop.md\n        - name: Hello World\n          href: tutorials/boxes/hello-world.md\n    - name: Teapots\n      expanded: true\n      items:\n        - name: Project Setup\n          href: tutorials/teapots/project-setup.md\n        - name: Hull Sampling\n          href: tutorials/teapots/hull-sampling.md\n        - name: Hello World\n          href: tutorials/teapots/hello-world.md\n        - name: Aftermath\n          href: tutorials/teapots/aftermath.md\n- name: Overview\n  expanded: true\n  items:\n    - name: General\n      href: documentation/general.md\n    - name: World\n      href: documentation/world.md\n    - name: Rigid Bodies\n      href: documentation/bodies.md\n    - name: Shapes\n      href: documentation/shapes.md\n    - name: Arbiters\n      href: documentation/arbiters.md\n    - name: Constraints\n      href: documentation/constraints.md\n    - name: Dynamic Tree\n      href: documentation/dynamictree.md\n    - name: Collision Filters\n      href: documentation/filters.md\n- name: Changelog\n  href: changelog.md\n"
  },
  {
    "path": "docfx/docs/tutorials/boxes/hello-world.md",
    "content": "# Hello World\n\nWe will now add physics to the scene. We do this by creating a new instance of the World class and adding several rigid bodies to it.\n\nReplace the content of `Program.cs` with the following code (marked lines indicate the additions to the source code):\n\n```cs\nusing System.Numerics;\nusing Raylib_cs;\nusing Jitter2;\nusing Jitter2.Collision.Shapes;\nusing Jitter2.Dynamics;\nusing Jitter2.LinearMath;\nusing static Raylib_cs.Raylib;\n\nstatic Matrix4x4 GetRayLibTransformMatrix(RigidBody body)\n{\n    JMatrix ori = JMatrix.CreateFromQuaternion(body.Orientation);\n    JVector pos = body.Position;\n\n    return new Matrix4x4(ori.M11, ori.M12, ori.M13, pos.X,\n                         ori.M21, ori.M22, ori.M23, pos.Y,\n                         ori.M31, ori.M32, ori.M33, pos.Z,\n                         0, 0, 0, 1.0f);\n}\n\nstatic Texture2D GenCheckedTexture(int size, int checks, Color colorA, Color colorB)\n{\n    Image imageMag = GenImageChecked(size, size, checks, checks, colorA, colorB);\n    Texture2D textureMag = LoadTextureFromImage(imageMag);\n    UnloadImage(imageMag);\n    return textureMag;\n}\n\nconst int NumberOfBoxes = 12;\n\n// set a hint for anti-aliasing\nSetConfigFlags(ConfigFlags.Msaa4xHint);\n\n// initialize a 1200x800 px window with a title\nInitWindow(1200, 800, \"BoxDrop example\");\n\n// dynamically create a plane model\nTexture2D texture = GenCheckedTexture(10, 1,  Color.LightGray, Color.Gray);\nModel planeModel = LoadModelFromMesh(GenMeshPlane(10, 10, 10, 10));\nSetMaterialTexture(ref planeModel, 0, MaterialMapIndex.Diffuse, ref texture);\n\n// dynamically create a box model\ntexture = GenCheckedTexture(2, 1,  Color.White, Color.Magenta);\nMesh boxMesh = GenMeshCube(1, 1, 1);\nMaterial boxMat = LoadMaterialDefault();\nSetMaterialTexture(ref boxMat, MaterialMapIndex.Diffuse, texture);\n\n// initialize the Jitter physics world\nWorld world = new ();\nworld.SubstepCount = 4;\n\n// add a body representing the plane\nRigidBody planeBody = world.CreateRigidBody();\nplaneBody.AddShape(new BoxShape(10));\nplaneBody.Position = new JVector(0, -5, 0);\nplaneBody.MotionType = MotionType.Static;\n\n// add NumberOfBoxes cubes\nfor(int i = 0; i < NumberOfBoxes; i++)\n{\n    RigidBody body = world.CreateRigidBody();\n    body.AddShape(new BoxShape(1));\n    body.Position = new JVector(0, i * 2 + 0.5f, 0);\n}\n\n// create a camera\nCamera3D camera = new ()\n{\n    Position = new Vector3(-20.0f, 8.0f, 10.0f),\n    Target = new Vector3(0.0f, 4.0f, 0.0f),\n    Up = new Vector3(0.0f, 1.0f, 0.0f),\n    FovY = 45.0f,\n    Projection = CameraProjection.Perspective\n};\n\n// 100 fps target\nSetTargetFPS(100);\n\n// simple render loop\nwhile (!WindowShouldClose())\n{\n    BeginDrawing();\n    ClearBackground(Color.Blue);\n\n    BeginMode3D(camera);\n\n    DrawModel(planeModel, Vector3.Zero, 1.0f, Color.White);\n\n    world.Step(1.0f / 100.0f, true);\n\n    foreach(var body in world.RigidBodies)\n    {\n        if (body == planeBody || body == world.NullBody) continue; // do not draw this\n        DrawMesh(boxMesh, boxMat, GetRayLibTransformMatrix(body));\n    }\n\n    EndMode3D();\n    DrawText($\"{GetFPS()} fps\", 10, 10, 20, Color.White);\n\n    EndDrawing();\n}\n\nCloseWindow();\n```\n\nRunning your program, you should now see a few boxes dynamically falling onto the ground.\n\n![plane](images/raylibjitter.gif)\n"
  },
  {
    "path": "docfx/docs/tutorials/boxes/project-setup.md",
    "content": "# Project Setup\n\nIn this project we will use Raylib and Jitter to implement a simple scene of boxes falling to the ground.\n\n## Requirements\n\nInstall the [.NET 10 SDK](https://dotnet.microsoft.com/download/dotnet/10.0).\n\nEnsure that dotnet is correctly set up by executing the following command:\n\n```sh\ndotnet --version\n```\n\n## Create a New Console Application and Add Jitter and Raylib\n\nFirst, create a new directory named \"BoxDrop\" and navigate into it:\n\n```sh\nmkdir BoxDrop && cd BoxDrop\n```\n\nNext, create a new console application in this directory and add Raylib-cs and Jitter2:\n\n```sh\ndotnet new console\ndotnet add package Raylib-cs --version 6.1.1\ndotnet add package Jitter2\n```\n\nYou have completed the setup. If you now execute the following command:\n\n```sh\ndotnet run\n```\n\nYour console should display: \"Hello, World!\".\n"
  },
  {
    "path": "docfx/docs/tutorials/boxes/render-loop.md",
    "content": "# Render Loop\n\nThe first thing we need to do is to familiarize ourselves a bit with Raylib_cs. Replace the content of `Program.cs` with the following code:\n\n```cs\nusing System.Numerics;\nusing Raylib_cs;\nusing static Raylib_cs.Raylib;\n\nstatic Texture2D GenCheckedTexture(int size, int checks, Color colorA, Color colorB)\n{\n    Image imageMag = GenImageChecked(size, size, checks, checks, colorA, colorB);\n    Texture2D textureMag = LoadTextureFromImage(imageMag);\n    UnloadImage(imageMag);\n    return textureMag;\n}\n\n// set a hint for anti-aliasing\nSetConfigFlags(ConfigFlags.Msaa4xHint);\n\n// initialize a 1200x800 px window with a title\nInitWindow(1200, 800, \"BoxDrop example\");\n\n// dynamically create a plane model\nTexture2D texture = GenCheckedTexture(10, 1,  Color.LightGray, Color.Gray);\nModel planeModel = LoadModelFromMesh(GenMeshPlane(10, 10, 10, 10));\nSetMaterialTexture(ref planeModel, 0, MaterialMapIndex.Diffuse, ref texture);\n\n// create a camera\nCamera3D camera = new ()\n{\n    Position = new Vector3(-20.0f, 8.0f, 10.0f),\n    Target = new Vector3(0.0f, 4.0f, 0.0f),\n    Up = new Vector3(0.0f, 1.0f, 0.0f),\n    FovY = 45.0f,\n    Projection = CameraProjection.Perspective\n};\n\n// 100 fps target\nSetTargetFPS(100);\n\n// simple render loop\nwhile (!WindowShouldClose())\n{\n    BeginDrawing();\n    ClearBackground(Color.Blue);\n\n    BeginMode3D(camera);\n\n    DrawModel(planeModel, Vector3.Zero, 1.0f, Color.White);\n\n    EndMode3D();\n    DrawText($\"{GetFPS()} fps\", 10, 10, 20, Color.White);\n\n    EndDrawing();\n}\n\nCloseWindow();\n```\n\nRunning your program should now display a plane:\n\n![plane](images/raylibplane.png)\n\nWe will add some physically simulated boxes in the next chapter.\n"
  },
  {
    "path": "docfx/docs/tutorials/teapots/aftermath.md",
    "content": "# Aftermath\n\n### `PointCloudShape` vs `ConvexHullShape`\n\nIn this example, we used the `PointCloudShape` to simulate a rigid body with a convex hull. As the name suggests, this shape only requires a set of points — they don't need to lie exactly on a convex surface. By design, Jitter treats the convex hull of these points as the actual shape for collision detection.\n\nAlthough the algorithm used here is brute-force, it can be extremely fast: the data is stored in a linear memory layout, and SIMD instructions are used to accelerate the support function. Because of this, `PointCloudShape` is usually the best choice for quickly and efficiently adding simple convex geometry to your simulation.\n\nThe `ConvexHullShape`, on the other hand, is intended for more complex and detailed convex models. Unlike `PointCloudShape`, this shape requires a precomputed convex hull provided as a list of triangles (`List<JTriangle>`). Jitter does not generate this for you — you'll need to use third-party tools like Blender or dedicated convex hull libraries. The input mesh must be strictly convex for collision detection to work correctly.\n\nInternally, `ConvexHullShape` uses a hill-climbing algorithm to compute the support function. While this approach is algorithmically more efficient than brute-force, the performance benefits only become noticeable with larger shapes. As a general rule of thumb, `ConvexHullShape` starts to outperform `PointCloudShape` at around 300 vertices or more.\n"
  },
  {
    "path": "docfx/docs/tutorials/teapots/hello-world.md",
    "content": "# Hello World\n\n### Creating the `PointCloudShape`\n\nWe can now create a `PointCloudShape` from the sampled vertices:\n\n```cs\n// find a few points on the convex hull of the teapot.\nvar vertices = ShapeHelper.SampleHull(allVertices, subdivisions: 3);\n\n// use these points to create a PointCloudShape.\nvar pointCloudShape = new PointCloudShape(vertices);\n```\n\nHowever, we need to be a bit careful here.\nIf we add this shape to a rigid body as-is, the body may not behave as intuitively expected.\nThis is because the center of mass of a rigid body is always located at `(0, 0, 0)` in its local coordinate frame.\n\nIf you open `teapot.obj` in a model editor, you'll notice that the model is not centered around the origin.\nTo correct this, we either need to center the model manually in a model editor—or, more conveniently, use the `Shift` property of `PointCloudShape` to align the center of mass with the origin:\n\n```cs\n// find a few points on the convex hull of the teapot.\nvar vertices = ShapeHelper.SampleHull(allVertices, subdivisions: 3);\n\n// use these points to create a PointCloudShape.\nvar pointCloudShape = new PointCloudShape(vertices);\n\n// shift the shape so its center of mass is at the origin.\npointCloudShape.GetCenter(out JVector centerOfMass);\npointCloudShape.Shift = -centerOfMass;\n\n// pointCloudShape.GetCenter(out centerOfMass); // now returns (0, 0, 0)\n\n// finally, create the rigid body for the teapot\nvar rigidBody = world.CreateRigidBody();\nrigidBody.AddShape(pointCloudShape);\n```\n\n> [!WARNING]\n> The shift applied to the shape must also be taken into account when rendering the model, to ensure it aligns visually with the simulation.\n\n#### Creating Multiple Instances of the Same Shape\n\nIn Jitter, it is not valid to add the same shape instance to multiple rigid bodies.\nTo create additional instances of a shape, use the `Clone()` method of `PointCloudShape`.\n\nThis method creates a new shape object that shares the underlying data structure, saving both memory and computation time:\n\n```cs\nvar shapeInstance1 = new PointCloudShape(vertices);\nvar shapeInstance2 = shapeInstance1.Clone(); // Safe to use in a second body\n```\n\nThis approach is especially useful when many bodies share the same geometry, such as multiple identical props or characters in a simulation.\n\n### Putting it all together\n\n\n```cs\nusing System.Numerics;\nusing Raylib_cs;\nusing Jitter2;\nusing Jitter2.Collision.Shapes;\nusing Jitter2.Dynamics;\nusing Jitter2.LinearMath;\nusing static Raylib_cs.Raylib;\n\nstatic Matrix4x4 GetRayLibTransformMatrix(RigidBody body)\n{\n    JMatrix ori = JMatrix.CreateFromQuaternion(body.Orientation);\n    JVector pos = body.Position;\n\n    return new Matrix4x4(ori.M11, ori.M12, ori.M13, pos.X,\n                         ori.M21, ori.M22, ori.M23, pos.Y,\n                         ori.M31, ori.M32, ori.M33, pos.Z,\n                         0, 0, 0, 1.0f);\n}\n\nstatic Texture2D GenCheckedTexture(int size, int checks, Color colorA, Color colorB)\n{\n    Image imageMag = GenImageChecked(size, size, checks, checks, colorA, colorB);\n    Texture2D textureMag = LoadTextureFromImage(imageMag);\n    UnloadImage(imageMag);\n    return textureMag;\n}\n\nconst int numberOfTeapots = 12;\n\n// set a hint for anti-aliasing\nSetConfigFlags(ConfigFlags.Msaa4xHint);\n\n// initialize a 1200x800 px window with a title\nInitWindow(1200, 800, \"TeaDrop example\");\n\n// dynamically create a plane model\nTexture2D texture = GenCheckedTexture(10, 1,  Color.LightGray, Color.Gray);\nModel planeModel = LoadModelFromMesh(GenMeshPlane(20, 20, 10, 10));\nSetMaterialTexture(ref planeModel, 0, MaterialMapIndex.Diffuse, ref texture);\n\n// load the teapot model from file\nModel teapotModel = LoadModel(\"teapot.obj\");\n\n// load the mesh vertices\nif (teapotModel.MeshCount == 0)\n    throw new Exception(\"Model could not be loaded!\");\n\nMesh teapotMesh;\nunsafe { teapotMesh = teapotModel.Meshes[0]; }\nvar allVertices = teapotMesh.VerticesAs<JVector>();\n\n// sample vertices on the convex hull\nvar vertices = ShapeHelper.SampleHull(allVertices, 4);\n\n// create the PointCloudShape from the reduced vertices\nvar pointCloudShape = new PointCloudShape(vertices);\n\n// shift the shape, such that the center of mass is at the origin\npointCloudShape.GetCenter(out JVector center);\npointCloudShape.Shift = -center;\n\n// we need to take the transpose here, since Raylib and System.Numerics\n// use a different convention\nMatrix4x4 shift = Matrix4x4.CreateTranslation(-center);\nshift = Matrix4x4.Transpose(shift);\n\ntexture = GenCheckedTexture(16, 2,  Color.White, Color.Magenta);\nMaterial teapotMat = LoadMaterialDefault();\nSetMaterialTexture(ref teapotMat, MaterialMapIndex.Diffuse, texture);\n\n// initialize the Jitter physics world\nWorld world = new ();\nworld.SubstepCount = 4;\n\n// add a body representing the plane\nRigidBody planeBody = world.CreateRigidBody();\nplaneBody.AddShape(new BoxShape(20));\nplaneBody.Position = new JVector(0, -10, 0);\nplaneBody.MotionType = MotionType.Static;\n\n// add numberOfTeapots teapots\nfor(int i = 0; i < numberOfTeapots; i++)\n{\n    RigidBody body = world.CreateRigidBody();\n    body.AddShape(pointCloudShape.Clone());\n    body.Position = new JVector(0, i * 4 + 0.5f, 0);\n}\n\n// create a camera\nCamera3D camera = new ()\n{\n    Position = new Vector3(-40.0f, 16.0f, 20.0f),\n    Target = new Vector3(0.0f, 4.0f, 0.0f),\n    Up = new Vector3(0.0f, 1.0f, 0.0f),\n    FovY = 45.0f,\n    Projection = CameraProjection.Perspective\n};\n\n// 100 fps target\nSetTargetFPS(100);\n\n// simple render loop\nwhile (!WindowShouldClose())\n{\n    BeginDrawing();\n    ClearBackground(Color.Blue);\n\n    BeginMode3D(camera);\n\n    DrawModel(planeModel, Vector3.Zero, 1.0f, Color.White);\n\n    world.Step(1.0f / 100.0f, true);\n\n    foreach(var body in world.RigidBodies)\n    {\n        if (body == planeBody || body == world.NullBody) continue; // do not draw this\n        DrawMesh(teapotMesh, teapotMat, GetRayLibTransformMatrix(body) * shift);\n    }\n\n    EndMode3D();\n    DrawText($\"{GetFPS()} fps\", 10, 10, 20, Color.White);\n\n    EndDrawing();\n}\n\nCloseWindow();\n```\n\n![plane](images/teapots.gif)\n"
  },
  {
    "path": "docfx/docs/tutorials/teapots/hull-sampling.md",
    "content": "# Hull Sampling\n\nThe teapot is a concave shape, which we will approximate using its convex hull ([Wikipedia](https://en.wikipedia.org/wiki/Convex_hull)).\nAs a first step, we will reduce the number of vertices used to construct the convex hull.\n\n> [!NOTE]\n> **Sampling**\n>\n> We could work with the entire set of vertices, but this comes with two main disadvantages:\n>\n> 1. The set may include vertices that lie inside the hull. While these do not affect the simulation outcome, they are still briefly considered during collision detection in each frame.\n>\n> 2. We typically don't need an exact convex hull. Omitting a few vertices often has little effect on accuracy while significantly improving performance.\n>\n> Reducing the number of vertices can help speed up the simulation without sacrificing collision fidelity.\n\nJitter provides a built-in method to simplify the vertex set: `ShapeHelper.SampleHull`.\nThis function samples directions uniformly across the unit sphere and returns the vertices that are furthest away in those directions. These vertices, by definition, lie on the convex hull of the original shape.\n\nReplace the content of `Program.cs` with the following code:\n\n```cs\nusing System.Numerics;\nusing Jitter2.Collision.Shapes;\nusing Jitter2.LinearMath;\nusing Raylib_cs;\nusing static Raylib_cs.Raylib;\n\n// set a hint for anti-aliasing\nSetConfigFlags(ConfigFlags.Msaa4xHint);\n\n// initialize a 1200x800 px window with a title\nInitWindow(1200, 800, \"TeaDrop example\");\n\n// load the teapot model from a file\nModel teapotModel = LoadModel(\"teapot.obj\");\n\n// load the mesh vertices\nif (teapotModel.MeshCount == 0)\n    throw new Exception(\"Model could not be loaded!\");\n\nMesh mesh;\nunsafe { mesh = teapotModel.Meshes[0]; }\n\nvar allVertices = mesh.VerticesAs<JVector>();\nvar vertices = ShapeHelper.SampleHull(allVertices, 4);\n\n// just for visualization -\n// we will not need to construct the explicit hull for the simulation!\nvar debugHull = ShapeHelper.Tessellate(vertices, 4);\n\n// create a camera\nCamera3D camera = new ()\n{\n    Position = new Vector3(-5.0f, 2.0f, 3.0f),\n    Target = new Vector3(0.0f, 1.0f, 0.0f),\n    Up = new Vector3(0.0f, 1.0f, 0.0f),\n    FovY = 45.0f,\n    Projection = CameraProjection.Perspective\n};\n\n// 100 fps target\nSetTargetFPS(100);\n\n// simple render loop\nwhile (!WindowShouldClose())\n{\n    BeginDrawing();\n    ClearBackground(Color.Blue);\n\n    // make the scene rotate\n    UpdateCamera(ref camera, CameraMode.Orbital);\n\n    BeginMode3D(camera);\n\n    // draw the teapot model\n    DrawModelWires(teapotModel, Vector3.Zero, 1.0f, Color.White);\n\n    // draw the sample vertices of the convex hull\n    foreach (var vertex in vertices)\n    {\n        DrawSphere(vertex, 0.02f, Color.Red);\n    }\n\n    // for debugging: draw the explicit hull\n    foreach (var vertex in debugHull)\n    {\n        DrawLine3D(vertex.V0, vertex.V1, Color.Green);\n        DrawLine3D(vertex.V1, vertex.V2, Color.Green);\n        DrawLine3D(vertex.V2, vertex.V0, Color.Green);\n    }\n\n    EndMode3D();\n    DrawText($\"{GetFPS()} fps\", 10, 10, 20, Color.White);\n\n    EndDrawing();\n}\n\nCloseWindow();\n```\n\n![plane](images/teapot.png)\n\nThe teapot's wireframe is drawn in white, the green wireframe shows the convex hull, and the sampled hull vertices are depicted as red dots.\n"
  },
  {
    "path": "docfx/docs/tutorials/teapots/project-setup.md",
    "content": "# Project Setup\n\nIn the previous section, we created a simulation of falling boxes. Jitter includes several default shapes, such as capsules, cylinders, and spheres.\nThese shapes can be transformed and/or combined, and they are already sufficient to represent many types of collidable entities.\n\nIn this section, we will add a custom convex shape to the simulation—specifically, the famous *Utah teapot*. We'll construct this shape from its visual representation by loading a `teapot.obj` file and using its vertices to create the convex shape.\n\n\n### Requirements\n\nInstall the [.NET 10 SDK](https://dotnet.microsoft.com/download/dotnet/10.0).\n\nEnsure that dotnet is correctly set up by executing the following command:\n\n```sh\ndotnet --version\n```\n\n### Create a New Console Application and Add Jitter and Raylib\n\nFirst, create a new directory named \"TeaDrop\" and navigate into it:\n\n```sh\nmkdir TeaDrop && cd TeaDrop\n```\n\nDownload and unzip the [teapot.obj](https://github.com/notgiven688/jitterphysics2/raw/refs/heads/main/src/JitterDemo/assets/teapot.obj.zip) model.\n\n```sh\nwget https://github.com/notgiven688/jitterphysics2/raw/refs/heads/main/src/JitterDemo/assets/teapot.obj.zip\nunzip teapot.obj.zip\n```\n\nNext, create a new console application in this directory and add Raylib-cs and Jitter2:\n\n```sh\ndotnet new console\ndotnet add package Raylib-cs --version 6.1.1\ndotnet add package Jitter2\n```\n\nAdd the following code to `TeaDrop.csproj` to allow unsafe code, and to copy teapot.obj automatically to the output directory:\n\n```xml\n  <PropertyGroup>\n    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <None Update=\"teapot.obj\">\n      <CopyToOutputDirectory>Always</CopyToOutputDirectory>\n    </None>\n  </ItemGroup>\n```\n\nYou have completed the setup. If you now execute the following command:\n\n```sh\ndotnet run\n```\n\nYour console should display: \"Hello, World!\".\n"
  },
  {
    "path": "docfx/index.md",
    "content": "---\n_layout: redirect\nredirect_url: docs/introduction.html\n---\n"
  },
  {
    "path": "docfx/run.sh",
    "content": "#!/bin/bash\ndocfx metadata\ndocfx build\ndocfx serve _site\n"
  },
  {
    "path": "docfx/template/public/main.js",
    "content": "export default {\n  iconLinks: [\n    {\n      icon: 'github',\n      href: 'https://github.com/notgiven688/jitterphysics2',\n      title: 'GitHub'\n    },\n    {\n      icon: 'box-seam',\n      href: 'https://www.nuget.org/packages/Jitter2',\n      title: 'NuGet'\n    }\n  ]\n}\n"
  },
  {
    "path": "docfx/toc.yml",
    "content": "- name: Docs\n  href: ./docs/\n- name: API (single precision)\n  href: api/"
  },
  {
    "path": "other/ContactClipping/ClipDebug.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Numerics;\n\nnamespace JitterClipVisualizer;\n\ninternal readonly record struct ClipPoint(float X, float Y)\n{\n    public static ClipPoint operator +(ClipPoint left, ClipPoint right)\n    {\n        return new ClipPoint(left.X + right.X, left.Y + right.Y);\n    }\n\n    public static ClipPoint operator -(ClipPoint left, ClipPoint right)\n    {\n        return new ClipPoint(left.X - right.X, left.Y - right.Y);\n    }\n\n    public static ClipPoint operator *(float scale, ClipPoint point)\n    {\n        return new ClipPoint(scale * point.X, scale * point.Y);\n    }\n\n    public float LengthSquared()\n    {\n        return X * X + Y * Y;\n    }\n\n    public Vector2 ToVector2()\n    {\n        return new Vector2(X, Y);\n    }\n}\n\ninternal enum ClipDebugMode\n{\n    PolygonClip,\n    SegmentAgainstPolygon,\n    SegmentAgainstSegment,\n    NoIntersection\n}\n\ninternal sealed record ClipStep(\n    string Title,\n    string Summary,\n    ClipPoint[] InputPolygon,\n    ClipPoint[] OutputPolygon,\n    int EdgeIndex = -1,\n    ClipPoint EdgeStart = default,\n    ClipPoint EdgeEnd = default);\n\ninternal sealed record ClipSnapshot(\n    string PresetName,\n    string Description,\n    ClipDebugMode Mode,\n    string Status,\n    ClipPoint[] Left,\n    ClipPoint[] Right,\n    ClipPoint[] Result,\n    ClipStep[] Steps);\n\ninternal sealed record ClipFrame(ClipPoint[] Left, ClipPoint[] Right);\n\ninternal sealed record ClipPreset(string Name, string Description, Func<float, ClipFrame> BuildFrame);\n\ninternal static class ContactManifoldClipDebugger\n{\n    private const int MaxManifoldPoints = 6;\n    private const int MaxClipPoints = 12;\n    private const int FinalVertexLimit = 4;\n\n    private static readonly ClipPoint[] polygonA =\n    [\n        new ClipPoint(100.0f, 0.0f),\n        new ClipPoint(50.0f, 86.0f),\n        new ClipPoint(-50.0f, 86.0f),\n        new ClipPoint(-100.0f, 0.0f),\n        new ClipPoint(-50.0f, -86.0f),\n        new ClipPoint(50.0f, -86.0f)\n    ];\n\n    private static readonly ClipPoint[] polygonB =\n    [\n        new ClipPoint(118.0f, 0.0f),\n        new ClipPoint(36.0f, 110.0f),\n        new ClipPoint(-96.0f, 68.0f),\n        new ClipPoint(-96.0f, -68.0f),\n        new ClipPoint(36.0f, -110.0f)\n    ];\n\n    private static readonly ClipPoint[] lineA =\n    [\n        new ClipPoint(-165.0f, 0.0f),\n        new ClipPoint(165.0f, 0.0f)\n    ];\n\n    private static readonly ClipPoint[] lineB =\n    [\n        new ClipPoint(-130.0f, 0.0f),\n        new ClipPoint(130.0f, 0.0f)\n    ];\n\n    public static IReadOnlyList<ClipPreset> CreatePresets()\n    {\n        return\n        [\n            new ClipPreset(\n                \"Polygon Clip\",\n                \"The Sutherland-Hodgman style pass sequence used for area overlap in CollisionManifold.\",\n                BuildPolygonClipFrame),\n            new ClipPreset(\n                \"Segment vs Polygon\",\n                \"The linear fallback path used when one projected feature collapses to a segment.\",\n                BuildSegmentVsPolygonFrame),\n            new ClipPreset(\n                \"Segment vs Segment\",\n                \"The segment-overlap helper used when both projected features collapse to lines.\",\n                BuildSegmentVsSegmentFrame)\n        ];\n    }\n\n    public static ClipSnapshot BuildSnapshot(ClipPreset preset, float time)\n    {\n        ClipFrame frame = preset.BuildFrame(time);\n        return BuildSnapshot(preset.Name, preset.Description, frame.Left, frame.Right);\n    }\n\n    public static ClipSnapshot BuildSnapshot(string presetName, string description, ClipPoint[] leftInput, ClipPoint[] rightInput)\n    {\n        if (leftInput.Length == 0 || rightInput.Length == 0)\n        {\n            return new ClipSnapshot(\n                presetName,\n                description,\n                ClipDebugMode.NoIntersection,\n                \"Both inputs need at least one point.\",\n                leftInput,\n                rightInput,\n                [],\n                [\n                    new ClipStep(\n                        \"Invalid input\",\n                        \"At least one polygon was empty.\",\n                        Copy(leftInput, leftInput.Length),\n                        [])\n                ]);\n        }\n\n        if (leftInput.Length > MaxClipPoints || rightInput.Length > MaxClipPoints)\n        {\n            throw new ArgumentOutOfRangeException(nameof(leftInput),\n                $\"This visualizer mirrors the manifold clipper limits and supports up to {MaxClipPoints} points per feature.\");\n        }\n\n        ClipPoint[] left = new ClipPoint[MaxClipPoints];\n        ClipPoint[] right = new ClipPoint[MaxClipPoints];\n        Array.Copy(leftInput, left, leftInput.Length);\n        Array.Copy(rightInput, right, rightInput.Length);\n\n        int leftCount = leftInput.Length;\n        int rightCount = rightInput.Length;\n\n        CalculateClipTolerance(left, leftCount, right, rightCount,\n            out float sideEpsilon, out float distanceEpsilonSq, out float areaEpsilon);\n\n        CompactPolygon(left, ref leftCount, distanceEpsilonSq, areaEpsilon);\n        CompactPolygon(right, ref rightCount, distanceEpsilonSq, areaEpsilon);\n\n        if (leftCount > 2) NormalizeWinding(left, leftCount);\n        if (rightCount > 2) NormalizeWinding(right, rightCount);\n\n        List<ClipStep> steps =\n        [\n            new ClipStep(\n                \"Projected features\",\n                $\"Compacted to {leftCount} and {rightCount} points before clipping.\",\n                Copy(left, leftCount),\n                Copy(left, leftCount))\n        ];\n\n        ClipPoint[] clipped = new ClipPoint[MaxClipPoints];\n        int clippedCount = 0;\n        ClipDebugMode mode = ClipDebugMode.NoIntersection;\n\n        if (leftCount > 2 && rightCount > 2)\n        {\n            ClipPoint[] buffer = new ClipPoint[MaxClipPoints];\n            Array.Copy(left, clipped, leftCount);\n\n            clippedCount = ClipConvexPolygon(clipped, leftCount, right, rightCount, buffer,\n                sideEpsilon, distanceEpsilonSq, areaEpsilon, steps);\n\n            if (clippedCount > 0)\n            {\n                mode = ClipDebugMode.PolygonClip;\n            }\n        }\n\n        if (clippedCount == 0)\n        {\n            if (TryClipLinearIntersection(left, leftCount, right, rightCount,\n                    sideEpsilon, distanceEpsilonSq, areaEpsilon, clipped, out clippedCount))\n            {\n                mode = leftCount == 2 && rightCount == 2\n                    ? ClipDebugMode.SegmentAgainstSegment\n                    : ClipDebugMode.SegmentAgainstPolygon;\n\n                steps.Add(new ClipStep(\n                    \"Linear fallback\",\n                    $\"Polygon clipping produced no area overlap, so the 1D fallback returned {clippedCount} point(s).\",\n                    Copy(left, leftCount),\n                    Copy(clipped, clippedCount)));\n            }\n            else\n            {\n                steps.Add(new ClipStep(\n                    \"No overlap\",\n                    \"Neither the polygon clipper nor the linear fallback found an intersection.\",\n                    Copy(left, leftCount),\n                    []));\n            }\n        }\n\n        CompactPolygon(clipped, ref clippedCount, distanceEpsilonSq, areaEpsilon);\n        ReducePolygon(clipped, ref clippedCount);\n\n        ClipPoint[] result = Copy(clipped, clippedCount);\n        steps.Add(new ClipStep(\n            \"Final output\",\n            clippedCount == 0\n                ? \"The final clipped feature is empty.\"\n                : $\"The final clipped feature contains {clippedCount} point(s).\",\n            Copy(left, leftCount),\n            result));\n\n        string status = mode switch\n        {\n            ClipDebugMode.PolygonClip => $\"{clippedCount} point(s) from polygon-vs-polygon clipping.\",\n            ClipDebugMode.SegmentAgainstPolygon => $\"{clippedCount} point(s) from segment-against-polygon fallback.\",\n            ClipDebugMode.SegmentAgainstSegment => $\"{clippedCount} point(s) from segment-against-segment fallback.\",\n            _ when clippedCount == 0 => \"No overlap after both the polygon and linear clipping paths.\",\n            _ => $\"{clippedCount} point(s) returned.\"\n        };\n\n        return new ClipSnapshot(\n            presetName,\n            description,\n            mode,\n            status,\n            Copy(left, leftCount),\n            Copy(right, rightCount),\n            result,\n            steps.ToArray());\n    }\n\n    public static string GetModeLabel(ClipDebugMode mode)\n    {\n        return mode switch\n        {\n            ClipDebugMode.PolygonClip => \"Polygon clip\",\n            ClipDebugMode.SegmentAgainstPolygon => \"Segment vs polygon fallback\",\n            ClipDebugMode.SegmentAgainstSegment => \"Segment vs segment fallback\",\n            _ => \"No overlap\"\n        };\n    }\n\n    private static ClipFrame BuildPolygonClipFrame(float time)\n    {\n        Vector2 drift = new(\n            32.0f * MathF.Sin(time * 0.85f),\n            26.0f * MathF.Cos(time * 0.55f));\n\n        ClipPoint[] left = Transform(polygonA, drift, 0.45f + time * 0.55f, new Vector2(1.20f, 0.82f));\n        ClipPoint[] right = Transform(polygonB, new Vector2(12.0f, -10.0f), -0.42f, new Vector2(1.00f, 0.96f));\n\n        return new ClipFrame(left, right);\n    }\n\n    private static ClipFrame BuildSegmentVsPolygonFrame(float time)\n    {\n        Vector2 drift = new(\n            48.0f * MathF.Sin(time * 1.15f),\n            72.0f * MathF.Sin(time * 0.63f));\n\n        ClipPoint[] left = Transform(lineA, drift, -0.22f + 0.35f * MathF.Sin(time * 0.7f), Vector2.One);\n        ClipPoint[] right = Transform(polygonB, Vector2.Zero, -0.36f, new Vector2(0.95f, 0.78f));\n\n        return new ClipFrame(left, right);\n    }\n\n    private static ClipFrame BuildSegmentVsSegmentFrame(float time)\n    {\n        Vector2 leftOffset = new(\n            35.0f * MathF.Sin(time * 0.9f),\n            25.0f * MathF.Sin(time * 0.5f));\n\n        Vector2 rightOffset = new(\n            85.0f * MathF.Sin(time * 0.55f),\n            25.0f * MathF.Sin(time * 0.5f));\n\n        ClipPoint[] left = Transform(lineA, leftOffset, 0.0f, Vector2.One);\n        ClipPoint[] right = Transform(lineB, rightOffset, 0.0f, Vector2.One);\n\n        return new ClipFrame(left, right);\n    }\n\n    private static ClipPoint[] Transform(ClipPoint[] points, Vector2 translation, float rotation, Vector2 scale)\n    {\n        ClipPoint[] transformed = new ClipPoint[points.Length];\n        float cos = MathF.Cos(rotation);\n        float sin = MathF.Sin(rotation);\n\n        for (int i = 0; i < points.Length; i++)\n        {\n            float x = points[i].X * scale.X;\n            float y = points[i].Y * scale.Y;\n\n            transformed[i] = new ClipPoint(\n                x * cos - y * sin + translation.X,\n                x * sin + y * cos + translation.Y);\n        }\n\n        return transformed;\n    }\n\n    private static ClipPoint[] Copy(ClipPoint[] source, int count)\n    {\n        ClipPoint[] copy = new ClipPoint[count];\n        Array.Copy(source, copy, count);\n        return copy;\n    }\n\n    private static float Cross2D(in ClipPoint left, in ClipPoint right)\n    {\n        return left.X * right.Y - left.Y * right.X;\n    }\n\n    private static float SignedArea(ClipPoint[] polygon, int count)\n    {\n        if (count < 3) return 0.0f;\n\n        float area = 0.0f;\n\n        for (int i = 0; i < count; i++)\n        {\n            ClipPoint current = polygon[i];\n            ClipPoint next = polygon[(i + 1) % count];\n            area += Cross2D(current, next);\n        }\n\n        return area;\n    }\n\n    private static void ReversePolygon(ClipPoint[] polygon, int count)\n    {\n        for (int i = 0, j = count - 1; i < j; i++, j--)\n        {\n            (polygon[i], polygon[j]) = (polygon[j], polygon[i]);\n        }\n    }\n\n    private static void NormalizeWinding(ClipPoint[] polygon, int count)\n    {\n        if (SignedArea(polygon, count) < 0.0f)\n        {\n            ReversePolygon(polygon, count);\n        }\n    }\n\n    private static void CalculateClipTolerance(ClipPoint[] left, int leftCount,\n        ClipPoint[] right, int rightCount,\n        out float sideEpsilon, out float distanceEpsilonSq, out float areaEpsilon)\n    {\n        float scale = 1.0f;\n\n        for (int i = 0; i < leftCount; i++)\n        {\n            scale = MathF.Max(scale, MathF.Max(MathF.Abs(left[i].X), MathF.Abs(left[i].Y)));\n        }\n\n        for (int i = 0; i < rightCount; i++)\n        {\n            scale = MathF.Max(scale, MathF.Max(MathF.Abs(right[i].X), MathF.Abs(right[i].Y)));\n        }\n\n        float distanceEpsilon = 1e-5f * scale + 1e-7f;\n        distanceEpsilonSq = distanceEpsilon * distanceEpsilon;\n        areaEpsilon = distanceEpsilon * scale;\n        sideEpsilon = areaEpsilon;\n    }\n\n    private static void CompactPolygon(ClipPoint[] polygon, ref int count, float distanceEpsilonSq, float areaEpsilon)\n    {\n        if (count == 0) return;\n\n        int write = 0;\n\n        for (int i = 0; i < count; i++)\n        {\n            ClipPoint current = polygon[i];\n\n            if (write > 0 && (polygon[write - 1] - current).LengthSquared() <= distanceEpsilonSq)\n            {\n                continue;\n            }\n\n            polygon[write++] = current;\n        }\n\n        if (write > 1 && (polygon[0] - polygon[write - 1]).LengthSquared() <= distanceEpsilonSq)\n        {\n            write -= 1;\n        }\n\n        count = write;\n        if (count < 3) return;\n\n        bool removed;\n\n        do\n        {\n            removed = false;\n\n            for (int i = 0; i < count; i++)\n            {\n                ClipPoint previous = polygon[(i + count - 1) % count];\n                ClipPoint current = polygon[i];\n                ClipPoint next = polygon[(i + 1) % count];\n\n                ClipPoint edge0 = current - previous;\n                ClipPoint edge1 = next - current;\n\n                if (MathF.Abs(Cross2D(edge0, edge1)) > areaEpsilon) continue;\n\n                for (int j = i; j < count - 1; j++)\n                {\n                    polygon[j] = polygon[j + 1];\n                }\n\n                count -= 1;\n                removed = true;\n                break;\n            }\n        }\n        while (removed && count >= 3);\n    }\n\n    private static float SideOfEdge(in ClipPoint edgeStart, in ClipPoint edgeEnd, in ClipPoint point)\n    {\n        return Cross2D(edgeEnd - edgeStart, point - edgeStart);\n    }\n\n    private static ClipPoint IntersectSegmentsAgainstEdge(in ClipPoint edgeStart, in ClipPoint edgeEnd,\n        in ClipPoint start, in ClipPoint end, float startSide, float endSide, float distanceEpsilonSq)\n    {\n        float denominator = startSide - endSide;\n\n        if (MathF.Abs(denominator) <= distanceEpsilonSq)\n        {\n            return MathF.Abs(startSide) <= MathF.Abs(endSide) ? start : end;\n        }\n\n        float t = startSide / denominator;\n        t = Math.Clamp(t, 0.0f, 1.0f);\n\n        return start + t * (end - start);\n    }\n\n    private static int ClipConvexPolygon(ClipPoint[] subject, int subjectCount,\n        ClipPoint[] clip, int clipCount, ClipPoint[] buffer,\n        float sideEpsilon, float distanceEpsilonSq, float areaEpsilon,\n        List<ClipStep> steps)\n    {\n        ClipPoint[] input = subject;\n        ClipPoint[] output = buffer;\n        int inputCount = subjectCount;\n        bool resultInSubject = true;\n\n        for (int edge = 0; edge < clipCount; edge++)\n        {\n            if (inputCount == 0) return 0;\n\n            ClipPoint[] stepInput = Copy(input, inputCount);\n            ClipPoint edgeStart = clip[edge];\n            ClipPoint edgeEnd = clip[(edge + 1) % clipCount];\n            int outputCount = 0;\n\n            ClipPoint start = input[inputCount - 1];\n            float startSide = SideOfEdge(edgeStart, edgeEnd, start);\n            bool startInside = startSide >= -sideEpsilon;\n\n            for (int i = 0; i < inputCount; i++)\n            {\n                ClipPoint end = input[i];\n                float endSide = SideOfEdge(edgeStart, edgeEnd, end);\n                bool endInside = endSide >= -sideEpsilon;\n\n                if (startInside != endInside)\n                {\n                    output[outputCount++] = IntersectSegmentsAgainstEdge(\n                        edgeStart, edgeEnd, start, end, startSide, endSide, distanceEpsilonSq);\n                }\n\n                if (endInside)\n                {\n                    output[outputCount++] = end;\n                }\n\n                start = end;\n                startSide = endSide;\n                startInside = endInside;\n            }\n\n            CompactPolygon(output, ref outputCount, distanceEpsilonSq, areaEpsilon);\n\n            steps.Add(new ClipStep(\n                $\"Clip edge {edge + 1}/{clipCount}\",\n                outputCount == 0\n                    ? \"This edge rejected the current polygon completely.\"\n                    : $\"This pass produced {outputCount} output point(s).\",\n                stepInput,\n                Copy(output, outputCount),\n                edge,\n                edgeStart,\n                edgeEnd));\n\n            ClipPoint[] temporary = input;\n            input = output;\n            output = temporary;\n            inputCount = outputCount;\n            resultInSubject = !resultInSubject;\n        }\n\n        if (!resultInSubject)\n        {\n            Array.Copy(input, subject, inputCount);\n        }\n\n        return inputCount;\n    }\n\n    private static void StoreLinearIntersection(in ClipPoint start, in ClipPoint end,\n        float distanceEpsilonSq, ClipPoint[] clipped, out int clippedCount)\n    {\n        clipped[0] = start;\n        clippedCount = 1;\n\n        if ((end - start).LengthSquared() <= distanceEpsilonSq) return;\n\n        clipped[1] = end;\n        clippedCount = 2;\n    }\n\n    private static bool ClipSegmentAgainstPolygon(in ClipPoint segmentStart, in ClipPoint segmentEnd,\n        ClipPoint[] polygon, int polygonCount,\n        float sideEpsilon, float distanceEpsilonSq, ClipPoint[] clipped, out int clippedCount)\n    {\n        float enter = 0.0f;\n        float exit = 1.0f;\n        ClipPoint delta = segmentEnd - segmentStart;\n\n        for (int edge = 0; edge < polygonCount; edge++)\n        {\n            ClipPoint edgeStart = polygon[edge];\n            ClipPoint edgeEnd = polygon[(edge + 1) % polygonCount];\n\n            float startSide = SideOfEdge(edgeStart, edgeEnd, segmentStart) + sideEpsilon;\n            float endSide = SideOfEdge(edgeStart, edgeEnd, segmentEnd) + sideEpsilon;\n\n            bool startInside = startSide >= 0.0f;\n            bool endInside = endSide >= 0.0f;\n\n            if (!startInside && !endInside)\n            {\n                clippedCount = 0;\n                return false;\n            }\n\n            if (startInside && endInside) continue;\n\n            float denominator = startSide - endSide;\n\n            if (MathF.Abs(denominator) <= distanceEpsilonSq)\n            {\n                clippedCount = 0;\n                return false;\n            }\n\n            float t = startSide / denominator;\n            t = Math.Clamp(t, 0.0f, 1.0f);\n\n            if (!startInside)\n            {\n                enter = MathF.Max(enter, t);\n            }\n            else\n            {\n                exit = MathF.Min(exit, t);\n            }\n\n            if (exit < enter)\n            {\n                clippedCount = 0;\n                return false;\n            }\n        }\n\n        StoreLinearIntersection(segmentStart + enter * delta, segmentStart + exit * delta,\n            distanceEpsilonSq, clipped, out clippedCount);\n\n        return true;\n    }\n\n    private static bool IntersectSegments(in ClipPoint leftStart, in ClipPoint leftEnd,\n        in ClipPoint rightStart, in ClipPoint rightEnd,\n        float sideEpsilon, float distanceEpsilonSq, float areaEpsilon,\n        ClipPoint[] clipped, out int clippedCount)\n    {\n        ClipPoint leftDelta = leftEnd - leftStart;\n        ClipPoint rightDelta = rightEnd - rightStart;\n        ClipPoint offset = rightStart - leftStart;\n\n        float cross = Cross2D(leftDelta, rightDelta);\n        const float parameterEpsilon = 1e-5f;\n\n        if (MathF.Abs(cross) <= areaEpsilon)\n        {\n            if (MathF.Abs(Cross2D(offset, leftDelta)) > areaEpsilon)\n            {\n                clippedCount = 0;\n                return false;\n            }\n\n            bool useLeft = leftDelta.LengthSquared() >= rightDelta.LengthSquared();\n            ClipPoint baseStart = useLeft ? leftStart : rightStart;\n            ClipPoint baseDelta = useLeft ? leftDelta : rightDelta;\n\n            bool useXAxis = MathF.Abs(baseDelta.X) >= MathF.Abs(baseDelta.Y);\n            float baseOrigin = useXAxis ? baseStart.X : baseStart.Y;\n            float baseExtent = useXAxis ? baseDelta.X : baseDelta.Y;\n\n            if (MathF.Abs(baseExtent) <= sideEpsilon)\n            {\n                clippedCount = 0;\n                return false;\n            }\n\n            float leftMin = MathF.Min(useXAxis ? leftStart.X : leftStart.Y, useXAxis ? leftEnd.X : leftEnd.Y);\n            float leftMax = MathF.Max(useXAxis ? leftStart.X : leftStart.Y, useXAxis ? leftEnd.X : leftEnd.Y);\n            float rightMin = MathF.Min(useXAxis ? rightStart.X : rightStart.Y, useXAxis ? rightEnd.X : rightEnd.Y);\n            float rightMax = MathF.Max(useXAxis ? rightStart.X : rightStart.Y, useXAxis ? rightEnd.X : rightEnd.Y);\n\n            float overlapMin = MathF.Max(leftMin, rightMin);\n            float overlapMax = MathF.Min(leftMax, rightMax);\n\n            if (overlapMax + sideEpsilon < overlapMin)\n            {\n                clippedCount = 0;\n                return false;\n            }\n\n            float t0 = (overlapMin - baseOrigin) / baseExtent;\n            float t1 = (overlapMax - baseOrigin) / baseExtent;\n\n            StoreLinearIntersection(baseStart + t0 * baseDelta, baseStart + t1 * baseDelta,\n                distanceEpsilonSq, clipped, out clippedCount);\n\n            return true;\n        }\n\n        float t = Cross2D(offset, rightDelta) / cross;\n        float u = Cross2D(offset, leftDelta) / cross;\n\n        if (t < -parameterEpsilon || t > 1.0f + parameterEpsilon ||\n            u < -parameterEpsilon || u > 1.0f + parameterEpsilon)\n        {\n            clippedCount = 0;\n            return false;\n        }\n\n        t = Math.Clamp(t, 0.0f, 1.0f);\n        clipped[0] = leftStart + t * leftDelta;\n        clippedCount = 1;\n\n        return true;\n    }\n\n    private static bool TryClipLinearIntersection(ClipPoint[] left, int leftCount,\n        ClipPoint[] right, int rightCount,\n        float sideEpsilon, float distanceEpsilonSq, float areaEpsilon,\n        ClipPoint[] clipped, out int clippedCount)\n    {\n        if (leftCount < 2 || rightCount < 2)\n        {\n            clippedCount = 0;\n            return false;\n        }\n\n        if (leftCount == 2 && rightCount == 2)\n        {\n            return IntersectSegments(left[0], left[1], right[0], right[1],\n                sideEpsilon, distanceEpsilonSq, areaEpsilon, clipped, out clippedCount);\n        }\n\n        if (leftCount == 2)\n        {\n            return ClipSegmentAgainstPolygon(left[0], left[1], right, rightCount,\n                sideEpsilon, distanceEpsilonSq, clipped, out clippedCount);\n        }\n\n        if (rightCount == 2)\n        {\n            return ClipSegmentAgainstPolygon(right[0], right[1], left, leftCount,\n                sideEpsilon, distanceEpsilonSq, clipped, out clippedCount);\n        }\n\n        clippedCount = 0;\n        return false;\n    }\n\n    private static void ReducePolygon(ClipPoint[] polygon, ref int count)\n    {\n        if (count <= FinalVertexLimit) return;\n\n        ClipPoint[] reduced = new ClipPoint[FinalVertexLimit];\n\n        for (int i = 0; i < FinalVertexLimit; i++)\n        {\n            int index = ((2 * i + 1) * count) / (2 * FinalVertexLimit);\n            reduced[i] = polygon[index];\n        }\n\n        Array.Copy(reduced, polygon, FinalVertexLimit);\n        count = FinalVertexLimit;\n    }\n}\n"
  },
  {
    "path": "other/ContactClipping/JitterClipVisualizer.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <OutputType>Exe</OutputType>\n    <TargetFramework>net10.0</TargetFramework>\n    <ImplicitUsings>disable</ImplicitUsings>\n    <Nullable>enable</Nullable>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"Raylib-cs\" Version=\"7.0.2\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "other/ContactClipping/Program.cs",
    "content": "using System;\nusing System.Numerics;\nusing Raylib_cs;\n\nnamespace JitterClipVisualizer;\n\ninternal static class Program\n{\n    private static readonly Color Background = new(246, 241, 233, 255);\n    private static readonly Color PanelFill = new(255, 252, 246, 255);\n    private static readonly Color PanelBorder = new(205, 191, 170, 255);\n    private static readonly Color Ink = new(37, 45, 57, 255);\n    private static readonly Color Muted = new(110, 120, 132, 255);\n    private static readonly Color SubjectFill = new(35, 101, 176, 64);\n    private static readonly Color SubjectStroke = new(35, 101, 176, 255);\n    private static readonly Color ClipFill = new(230, 142, 33, 64);\n    private static readonly Color ClipStroke = new(230, 142, 33, 255);\n    private static readonly Color OutputFill = new(37, 151, 92, 88);\n    private static readonly Color OutputStroke = new(37, 151, 92, 255);\n    private static readonly Color InputStroke = new(118, 128, 140, 255);\n    private static readonly Color CurrentEdge = new(198, 61, 63, 255);\n\n    private static int presetIndex;\n    private static int stepIndex;\n    private static float sceneTime;\n    private static float stepTimer;\n    private static bool animateGeometry = true;\n    private static bool animateSteps = true;\n\n    private static void Main()\n    {\n        Raylib.SetConfigFlags(ConfigFlags.ResizableWindow | ConfigFlags.Msaa4xHint);\n        Raylib.InitWindow(1500, 940, \"Jitter2 ContactManifold Clipping Visualizer\");\n        Raylib.SetTargetFPS(60);\n\n        var presets = ContactManifoldClipDebugger.CreatePresets();\n\n        while (!Raylib.WindowShouldClose())\n        {\n            float deltaTime = Raylib.GetFrameTime();\n\n            HandleInput(presets.Count);\n\n            if (animateGeometry)\n            {\n                sceneTime += deltaTime;\n            }\n\n            ClipSnapshot snapshot = ContactManifoldClipDebugger.BuildSnapshot(presets[presetIndex], sceneTime);\n            UpdateCurrentStep(snapshot, deltaTime);\n\n            Raylib.BeginDrawing();\n            Raylib.ClearBackground(Background);\n\n            DrawScene(snapshot);\n\n            Raylib.EndDrawing();\n        }\n\n        Raylib.CloseWindow();\n    }\n\n    private static void HandleInput(int presetCount)\n    {\n        if (Raylib.IsKeyPressed(KeyboardKey.Space))\n        {\n            animateSteps = !animateSteps;\n        }\n\n        if (Raylib.IsKeyPressed(KeyboardKey.A))\n        {\n            animateGeometry = !animateGeometry;\n        }\n\n        if (Raylib.IsKeyPressed(KeyboardKey.R))\n        {\n            sceneTime = 0.0f;\n            stepIndex = 0;\n            stepTimer = 0.0f;\n        }\n\n        if (Raylib.IsKeyPressed(KeyboardKey.Tab))\n        {\n            presetIndex = (presetIndex + 1) % presetCount;\n            stepIndex = 0;\n            stepTimer = 0.0f;\n        }\n\n        if (Raylib.IsKeyPressed(KeyboardKey.One))\n        {\n            presetIndex = 0;\n            stepIndex = 0;\n            stepTimer = 0.0f;\n        }\n\n        if (Raylib.IsKeyPressed(KeyboardKey.Two) && presetCount > 1)\n        {\n            presetIndex = 1;\n            stepIndex = 0;\n            stepTimer = 0.0f;\n        }\n\n        if (Raylib.IsKeyPressed(KeyboardKey.Three) && presetCount > 2)\n        {\n            presetIndex = 2;\n            stepIndex = 0;\n            stepTimer = 0.0f;\n        }\n\n        if (Raylib.IsKeyPressed(KeyboardKey.Right))\n        {\n            animateSteps = false;\n            stepIndex += 1;\n        }\n\n        if (Raylib.IsKeyPressed(KeyboardKey.Left))\n        {\n            animateSteps = false;\n            stepIndex -= 1;\n        }\n    }\n\n    private static void UpdateCurrentStep(ClipSnapshot snapshot, float deltaTime)\n    {\n        int stepCount = Math.Max(snapshot.Steps.Length, 1);\n\n        if (animateSteps && stepCount > 1)\n        {\n            stepTimer += deltaTime;\n\n            if (stepTimer >= 0.95f)\n            {\n                stepTimer -= 0.95f;\n                stepIndex = (stepIndex + 1) % stepCount;\n            }\n        }\n\n        if (stepIndex < 0)\n        {\n            stepIndex = stepCount - 1;\n        }\n\n        if (stepIndex >= stepCount)\n        {\n            stepIndex = 0;\n        }\n    }\n\n    private static void DrawScene(ClipSnapshot snapshot)\n    {\n        int width = Raylib.GetScreenWidth();\n        int height = Raylib.GetScreenHeight();\n\n        const float outerMargin = 24.0f;\n        const float columnGap = 18.0f;\n        const float panelTop = 124.0f;\n        const float panelBottom = 88.0f;\n        float panelWidth = (width - outerMargin * 2.0f - columnGap * 2.0f) / 3.0f;\n        float panelHeight = height - panelTop - panelBottom;\n\n        Rectangle leftPanel = new(outerMargin, panelTop, panelWidth, panelHeight);\n        Rectangle centerPanel = new(outerMargin + panelWidth + columnGap, panelTop, panelWidth, panelHeight);\n        Rectangle rightPanel = new(outerMargin + (panelWidth + columnGap) * 2.0f, panelTop, panelWidth, panelHeight);\n\n        ClipStep step = snapshot.Steps[stepIndex];\n        WorldBounds bounds = CollectBounds(snapshot, step);\n\n        DrawHeader(snapshot);\n\n        DrawPanel(leftPanel, \"Projected Inputs\");\n        DrawPanel(centerPanel, \"Current Pass\");\n        DrawPanel(rightPanel, \"Final Output\");\n\n        DrawGeometryPanel(leftPanel, bounds, snapshot.Left, snapshot.Right, snapshot.Result);\n        DrawStepPanel(centerPanel, bounds, snapshot, step);\n        DrawResultPanel(rightPanel, bounds, snapshot.Left, snapshot.Right, snapshot.Result);\n\n        DrawFooter(snapshot);\n    }\n\n    private static void DrawHeader(ClipSnapshot snapshot)\n    {\n        Raylib.DrawText(snapshot.PresetName, 28, 18, 34, Ink);\n        Raylib.DrawText(snapshot.Description, 28, 57, 22, Muted);\n\n        string source = \"Mirrors the 2D clipping helpers in src/Jitter2/Collision/NarrowPhase/CollisionManifold.cs\";\n        Raylib.DrawText(source, 28, 85, 18, Muted);\n\n        string status = $\"{ContactManifoldClipDebugger.GetModeLabel(snapshot.Mode)} | {snapshot.Status}\";\n        Raylib.DrawText(status, 28, 106, 18, Ink);\n    }\n\n    private static void DrawFooter(ClipSnapshot snapshot)\n    {\n        int y = Raylib.GetScreenHeight() - 54;\n        string controls = \"Tab/1-3 preset   Left/Right step   Space autoplay steps   A animate geometry   R reset time   Esc quit\";\n        string step = $\"Step {stepIndex + 1}/{Math.Max(snapshot.Steps.Length, 1)}\";\n\n        Raylib.DrawText(controls, 28, y, 18, Muted);\n        Raylib.DrawText(step, Raylib.GetScreenWidth() - 170, y, 18, Ink);\n    }\n\n    private static void DrawPanel(Rectangle rect, string title)\n    {\n        Raylib.DrawRectangleRounded(rect, 0.03f, 8, PanelFill);\n        Raylib.DrawRectangleRoundedLinesEx(rect, 0.03f, 8, 1.4f, PanelBorder);\n        Raylib.DrawText(title, (int)rect.X + 16, (int)rect.Y + 12, 24, Ink);\n    }\n\n    private static void DrawGeometryPanel(Rectangle rect, WorldBounds bounds, ClipPoint[] left, ClipPoint[] right, ClipPoint[] result)\n    {\n        Rectangle plot = GetPlotRect(rect);\n\n        DrawGrid(plot, bounds);\n        DrawShape(plot, bounds, left, SubjectFill, SubjectStroke, 2.4f);\n        DrawShape(plot, bounds, right, ClipFill, ClipStroke, 2.4f);\n\n        if (result.Length > 0)\n        {\n            DrawShape(plot, bounds, result, Raylib.Fade(OutputFill, 0.70f), OutputStroke, 2.2f);\n        }\n\n        DrawLegend((int)rect.X + 16, (int)rect.Y + 46, SubjectStroke, \"subject\");\n        DrawLegend((int)rect.X + 124, (int)rect.Y + 46, ClipStroke, \"clip\");\n        DrawLegend((int)rect.X + 206, (int)rect.Y + 46, OutputStroke, \"result\");\n    }\n\n    private static void DrawStepPanel(Rectangle rect, WorldBounds bounds, ClipSnapshot snapshot, ClipStep step)\n    {\n        Rectangle plot = GetPlotRect(rect);\n        DrawGrid(plot, bounds);\n\n        DrawShape(plot, bounds, snapshot.Right, ClipFill, ClipStroke, 2.2f);\n        DrawShape(plot, bounds, step.InputPolygon, new Color(160, 166, 175, 34), InputStroke, 2.2f);\n        DrawShape(plot, bounds, step.OutputPolygon, OutputFill, OutputStroke, 2.6f);\n\n        if (step.EdgeIndex >= 0)\n        {\n            DrawEdge(plot, bounds, step.EdgeStart, step.EdgeEnd, CurrentEdge, 4.0f);\n        }\n\n        int textX = (int)rect.X + 16;\n        int textY = (int)(rect.Y + rect.Height) - 88;\n        Raylib.DrawText(step.Title, textX, textY, 22, Ink);\n        Raylib.DrawText(step.Summary, textX, textY + 28, 18, Muted);\n    }\n\n    private static void DrawResultPanel(Rectangle rect, WorldBounds bounds, ClipPoint[] left, ClipPoint[] right, ClipPoint[] result)\n    {\n        Rectangle plot = GetPlotRect(rect);\n        DrawGrid(plot, bounds);\n\n        DrawShape(plot, bounds, left, new Color(0, 0, 0, 0), SubjectStroke, 2.0f);\n        DrawShape(plot, bounds, right, new Color(0, 0, 0, 0), ClipStroke, 2.0f);\n        DrawShape(plot, bounds, result, OutputFill, OutputStroke, 3.0f);\n\n        string label = result.Length switch\n        {\n            0 => \"empty result\",\n            1 => \"point contact\",\n            2 => \"line overlap\",\n            _ => \"area overlap\"\n        };\n\n        Raylib.DrawText(label, (int)rect.X + 16, (int)(rect.Y + rect.Height) - 54, 20, Ink);\n    }\n\n    private static void DrawGrid(Rectangle plot, WorldBounds bounds)\n    {\n        Raylib.DrawRectangleRounded(plot, 0.02f, 6, new Color(250, 247, 241, 255));\n\n        Vector2 left = WorldToScreen(plot, bounds, new ClipPoint(bounds.MinX, 0.0f));\n        Vector2 right = WorldToScreen(plot, bounds, new ClipPoint(bounds.MaxX, 0.0f));\n        Vector2 top = WorldToScreen(plot, bounds, new ClipPoint(0.0f, bounds.MaxY));\n        Vector2 bottom = WorldToScreen(plot, bounds, new ClipPoint(0.0f, bounds.MinY));\n\n        Raylib.DrawLineEx(left, right, 1.0f, new Color(226, 219, 206, 255));\n        Raylib.DrawLineEx(top, bottom, 1.0f, new Color(226, 219, 206, 255));\n    }\n\n    private static void DrawLegend(int x, int y, Color color, string text)\n    {\n        Raylib.DrawRectangle(x, y + 3, 16, 10, color);\n        Raylib.DrawText(text, x + 22, y, 18, Muted);\n    }\n\n    private static Rectangle GetPlotRect(Rectangle panel)\n    {\n        return new Rectangle(panel.X + 14.0f, panel.Y + 78.0f, panel.Width - 28.0f, panel.Height - 166.0f);\n    }\n\n    private static void DrawShape(Rectangle plot, WorldBounds bounds, ClipPoint[] polygon, Color fill, Color stroke, float thickness)\n    {\n        if (polygon.Length == 0) return;\n\n        Vector2[] vertices = new Vector2[polygon.Length];\n\n        for (int i = 0; i < polygon.Length; i++)\n        {\n            vertices[i] = WorldToScreen(plot, bounds, polygon[i]);\n        }\n\n        if (polygon.Length >= 3 && fill.A > 0)\n        {\n            for (int i = 1; i < vertices.Length - 1; i++)\n            {\n                Raylib.DrawTriangle(vertices[0], vertices[i], vertices[i + 1], fill);\n            }\n        }\n\n        if (polygon.Length == 1)\n        {\n            Raylib.DrawCircleV(vertices[0], 6.0f, stroke);\n            return;\n        }\n\n        for (int i = 0; i < vertices.Length - 1; i++)\n        {\n            Raylib.DrawLineEx(vertices[i], vertices[i + 1], thickness, stroke);\n        }\n\n        if (polygon.Length >= 3)\n        {\n            Raylib.DrawLineEx(vertices[^1], vertices[0], thickness, stroke);\n        }\n\n        foreach (Vector2 vertex in vertices)\n        {\n            Raylib.DrawCircleV(vertex, 4.5f, stroke);\n            Raylib.DrawCircleV(vertex, 2.2f, PanelFill);\n        }\n    }\n\n    private static void DrawEdge(Rectangle plot, WorldBounds bounds, ClipPoint start, ClipPoint end, Color color, float thickness)\n    {\n        Vector2 a = WorldToScreen(plot, bounds, start);\n        Vector2 b = WorldToScreen(plot, bounds, end);\n        Raylib.DrawLineEx(a, b, thickness, color);\n        Raylib.DrawCircleV(a, 5.0f, color);\n        Raylib.DrawCircleV(b, 5.0f, color);\n    }\n\n    private static Vector2 WorldToScreen(Rectangle plot, WorldBounds bounds, ClipPoint point)\n    {\n        float rangeX = MathF.Max(bounds.MaxX - bounds.MinX, 1.0f);\n        float rangeY = MathF.Max(bounds.MaxY - bounds.MinY, 1.0f);\n        float scale = MathF.Min((plot.Width - 36.0f) / rangeX, (plot.Height - 36.0f) / rangeY);\n\n        float centerX = 0.5f * (bounds.MinX + bounds.MaxX);\n        float centerY = 0.5f * (bounds.MinY + bounds.MaxY);\n\n        return new Vector2(\n            plot.X + plot.Width * 0.5f + (point.X - centerX) * scale,\n            plot.Y + plot.Height * 0.5f - (point.Y - centerY) * scale);\n    }\n\n    private static WorldBounds CollectBounds(ClipSnapshot snapshot, ClipStep step)\n    {\n        WorldBounds bounds = new(float.MaxValue, float.MaxValue, float.MinValue, float.MinValue);\n\n        Expand(ref bounds, snapshot.Left);\n        Expand(ref bounds, snapshot.Right);\n        Expand(ref bounds, snapshot.Result);\n        Expand(ref bounds, step.InputPolygon);\n        Expand(ref bounds, step.OutputPolygon);\n\n        if (step.EdgeIndex >= 0)\n        {\n            Expand(ref bounds, step.EdgeStart);\n            Expand(ref bounds, step.EdgeEnd);\n        }\n\n        if (bounds.MinX == float.MaxValue)\n        {\n            bounds = new WorldBounds(-120.0f, -120.0f, 120.0f, 120.0f);\n        }\n\n        float sizeX = bounds.MaxX - bounds.MinX;\n        float sizeY = bounds.MaxY - bounds.MinY;\n        float pad = MathF.Max(MathF.Max(sizeX, sizeY) * 0.16f, 24.0f);\n\n        return new WorldBounds(bounds.MinX - pad, bounds.MinY - pad, bounds.MaxX + pad, bounds.MaxY + pad);\n    }\n\n    private static void Expand(ref WorldBounds bounds, ClipPoint point)\n    {\n        bounds.MinX = MathF.Min(bounds.MinX, point.X);\n        bounds.MinY = MathF.Min(bounds.MinY, point.Y);\n        bounds.MaxX = MathF.Max(bounds.MaxX, point.X);\n        bounds.MaxY = MathF.Max(bounds.MaxY, point.Y);\n    }\n\n    private static void Expand(ref WorldBounds bounds, ClipPoint[] points)\n    {\n        foreach (ClipPoint point in points)\n        {\n            Expand(ref bounds, point);\n        }\n    }\n\n    private struct WorldBounds(float minX, float minY, float maxX, float maxY)\n    {\n        public float MinX = minX;\n        public float MinY = minY;\n        public float MaxX = maxX;\n        public float MaxY = maxY;\n    }\n}\n"
  },
  {
    "path": "other/GodotDemo/.gitattributes",
    "content": "# Normalize EOL for all files that Git considers text files.\n* text=auto eol=lf\n"
  },
  {
    "path": "other/GodotDemo/.gitignore",
    "content": "# Godot 4+ specific ignores\n.godot/\n.idea\n"
  },
  {
    "path": "other/GodotDemo/JitterGodot.csproj",
    "content": "<Project Sdk=\"Godot.NET.Sdk/4.3.0\">\n  <PropertyGroup>\n    <TargetFramework>net8.0</TargetFramework>\n    <EnableDynamicLoading>true</EnableDynamicLoading>\n  </PropertyGroup>\n  <ItemGroup>\n    <PackageReference Include=\"Jitter2\" Version=\"2.8.3\" />\n  </ItemGroup>\n</Project>\n"
  },
  {
    "path": "other/GodotDemo/JitterGodot.sln",
    "content": "﻿Microsoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio 2012\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"JitterGodot\", \"JitterGodot.csproj\", \"{D95E4F8D-CDCA-48E7-95EC-3EBBD7A0431A}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\tDebug|Any CPU = Debug|Any CPU\n\tExportDebug|Any CPU = ExportDebug|Any CPU\n\tExportRelease|Any CPU = ExportRelease|Any CPU\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{D95E4F8D-CDCA-48E7-95EC-3EBBD7A0431A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{D95E4F8D-CDCA-48E7-95EC-3EBBD7A0431A}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{D95E4F8D-CDCA-48E7-95EC-3EBBD7A0431A}.ExportDebug|Any CPU.ActiveCfg = ExportDebug|Any CPU\n\t\t{D95E4F8D-CDCA-48E7-95EC-3EBBD7A0431A}.ExportDebug|Any CPU.Build.0 = ExportDebug|Any CPU\n\t\t{D95E4F8D-CDCA-48E7-95EC-3EBBD7A0431A}.ExportRelease|Any CPU.ActiveCfg = ExportRelease|Any CPU\n\t\t{D95E4F8D-CDCA-48E7-95EC-3EBBD7A0431A}.ExportRelease|Any CPU.Build.0 = ExportRelease|Any CPU\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "other/GodotDemo/Program.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing Godot;\nusing Jitter2;\nusing Jitter2.Collision.Shapes;\nusing Jitter2.Dynamics;\nusing Jitter2.Dynamics.Constraints;\nusing Jitter2.LinearMath;\nusing Jitter2.SoftBodies;\n\npublic static class Conversion\n{\n\tpublic static Vector3 FromJitter(in JVector vec) => new Vector3(vec.X, vec.Y, vec.Z);\n}\n\npublic partial class JitterCubes : MultiMeshInstance3D\n{\n\tprivate List<RigidBody> cubes = new();\n\n\tpublic void AddCube(RigidBody body)\n\t{\n\t\tcubes.Add(body);\n\t}\n\n\tpublic void Clear() => cubes.Clear();\n\t\n\tpublic override void _Ready()\n\t{\n\t\tMultimesh = new MultiMesh();\n\t\tMultimesh.TransformFormat = MultiMesh.TransformFormatEnum.Transform3D;\n\t\tMultimesh.Mesh = new BoxMesh();\n\t\tMultimesh.Mesh.SurfaceSetMaterial(0, ResourceLoader.Load<Material>(\"res://box.material\"));\n\t\tbase._Ready();\n\t}\n\n\tpublic override void _Process(double delta)\n\t{\n\t\tMultimesh.InstanceCount = cubes.Count;\n\n\t\tfor (int i = 0; i < cubes.Count; i++)\n\t\t{\n\t\t\tJMatrix mat = JMatrix.CreateFromQuaternion(cubes[i].Data.Orientation);\n\t\t\tJVector pos = cubes[i].Data.Position;\n\n\t\t\tTransform3D trans = Transform3D.Identity;\n\n\t\t\ttrans[0] = Conversion.FromJitter(mat.GetColumn(0));\n\t\t\ttrans[1] = Conversion.FromJitter(mat.GetColumn(1));\n\t\t\ttrans[2] = Conversion.FromJitter(mat.GetColumn(2));\n\t\t\ttrans[3] = Conversion.FromJitter(pos);\n\n\t\t\tMultimesh.SetInstanceTransform(i, trans);\n\t\t}\n\n\t\tbase._Process(delta);\n\t}\n}\n\npublic partial class Program : Node3D\n{\n\tprivate World world = null!;\n\tprivate JitterCubes jitterCubes = null!;\n\t\n\t// Called when the node enters the scene tree for the first time.\n\tpublic override void _Ready()\n\t{\n\t\tvar button = new Button();\n\t\tbutton.Pressed += ResetScene;\n\t\tbutton.Position = new Vector2(4, 4);\n\t\tbutton.Text = \"Reset scene\";\n\t\t\n\t\tjitterCubes = new JitterCubes();\n\t\t\n\t\tAddChild(jitterCubes);\n\t\tAddChild(button);\n\n\t\tworld = new World();\n\t\t\n\t\tResetScene();\n\t}\n\n\tprivate void ResetScene()\n\t{\n\t\tjitterCubes.Clear();\n\t\tworld.Clear();\n\t\t\n\t\t// floor shape\n\t\tRigidBody floor = world.CreateRigidBody();\n\t\tfloor.AddShape(new BoxShape(40));\n\t\tfloor.Position = new JVector(0, -20, 0);\n\t\tfloor.IsStatic = true;\n\t\t\n\t\tfor (int i = 0; i < 30; i++)\n\t\t{\n\t\t\tRigidBody body = world.CreateRigidBody();\n\t\t\tbody.AddShape(new BoxShape(1));\n\t\t\tbody.Position = new JVector(1, 0.5f + i * 4, 0);\n\t\t\tbody.Friction = 0.2f;\n\t\t\tjitterCubes.AddCube(body);\n\t\t}\n\t}\n\n\tfloat accumulatedTime = 0.0f;\n\n\tpublic override void _Process(double delta)\n\t{\n\t\tconst float fixedStep = 1.0f / 100.0f;\n\t\t\n\t\tint steps = 0;\n\t\taccumulatedTime += (float)delta;\n\n\t\twhile (accumulatedTime > fixedStep)\n\t\t{\n\t\t\tworld.Step(fixedStep, true);\n\t\t\taccumulatedTime -= fixedStep;\n\n\t\t\t// we can not keep up with the real time, i.e. the simulation\n\t\t\t// is running slower than the real time is passing.\n\t\t\tif (++steps >= 4) return;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "other/GodotDemo/README.md",
    "content": "## Jitter2 in Godot\n\nSmall demo to get started with Jitter2 in Godot.\n\nGet Godot (.NET, Version >= 4.3) from https://godotengine.org/. Open Godot and select \"project.godot\".\n\n<img src=\"./../../media/screenshots/jitter_screenshot5.png\" alt=\"screenshot\" width=\"800\"/>"
  },
  {
    "path": "other/GodotDemo/assets/box.png.import",
    "content": "[remap]\n\nimporter=\"texture\"\ntype=\"CompressedTexture2D\"\nuid=\"uid://bmwn361sv2cuo\"\npath.s3tc=\"res://.godot/imported/box.png-52cc4e41fddadef836f9ad4dbe7936fa.s3tc.ctex\"\nmetadata={\n\"imported_formats\": [\"s3tc_bptc\"],\n\"vram_texture\": true\n}\n\n[deps]\n\nsource_file=\"res://assets/box.png\"\ndest_files=[\"res://.godot/imported/box.png-52cc4e41fddadef836f9ad4dbe7936fa.s3tc.ctex\"]\n\n[params]\n\ncompress/mode=2\ncompress/high_quality=false\ncompress/lossy_quality=0.7\ncompress/hdr_compression=1\ncompress/normal_map=0\ncompress/channel_pack=0\nmipmaps/generate=true\nmipmaps/limit=-1\nroughness/mode=0\nroughness/src_normal=\"\"\nprocess/fix_alpha_border=true\nprocess/premult_alpha=false\nprocess/normal_map_invert_y=false\nprocess/hdr_as_srgb=false\nprocess/hdr_clamp_exposure=false\nprocess/size_limit=0\ndetect_3d/compress_to=0\n"
  },
  {
    "path": "other/GodotDemo/assets/floor.png.import",
    "content": "[remap]\n\nimporter=\"texture\"\ntype=\"CompressedTexture2D\"\nuid=\"uid://bmalqw2x4nhkw\"\npath.s3tc=\"res://.godot/imported/floor.png-38406586736af2fe805d7b886727ee47.s3tc.ctex\"\nmetadata={\n\"imported_formats\": [\"s3tc_bptc\"],\n\"vram_texture\": true\n}\n\n[deps]\n\nsource_file=\"res://assets/floor.png\"\ndest_files=[\"res://.godot/imported/floor.png-38406586736af2fe805d7b886727ee47.s3tc.ctex\"]\n\n[params]\n\ncompress/mode=2\ncompress/high_quality=false\ncompress/lossy_quality=0.7\ncompress/hdr_compression=1\ncompress/normal_map=0\ncompress/channel_pack=0\nmipmaps/generate=true\nmipmaps/limit=-1\nroughness/mode=0\nroughness/src_normal=\"\"\nprocess/fix_alpha_border=true\nprocess/premult_alpha=false\nprocess/normal_map_invert_y=false\nprocess/hdr_as_srgb=false\nprocess/hdr_clamp_exposure=false\nprocess/size_limit=0\ndetect_3d/compress_to=0\n"
  },
  {
    "path": "other/GodotDemo/icon.svg.import",
    "content": "[remap]\n\nimporter=\"texture\"\ntype=\"CompressedTexture2D\"\nuid=\"uid://bj3qla3sx2dm8\"\npath=\"res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex\"\nmetadata={\n\"vram_texture\": false\n}\n\n[deps]\n\nsource_file=\"res://icon.svg\"\ndest_files=[\"res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex\"]\n\n[params]\n\ncompress/mode=0\ncompress/high_quality=false\ncompress/lossy_quality=0.7\ncompress/hdr_compression=1\ncompress/normal_map=0\ncompress/channel_pack=0\nmipmaps/generate=false\nmipmaps/limit=-1\nroughness/mode=0\nroughness/src_normal=\"\"\nprocess/fix_alpha_border=true\nprocess/premult_alpha=false\nprocess/normal_map_invert_y=false\nprocess/hdr_as_srgb=false\nprocess/hdr_clamp_exposure=false\nprocess/size_limit=0\ndetect_3d/compress_to=1\nsvg/scale=1.0\neditor/scale_with_editor_scale=false\neditor/convert_colors_with_editor_theme=false\n"
  },
  {
    "path": "other/GodotDemo/main_scene.tscn",
    "content": "[gd_scene load_steps=10 format=3 uid=\"uid://coyqv4677vx2l\"]\n\n[ext_resource type=\"Texture2D\" uid=\"uid://bmalqw2x4nhkw\" path=\"res://assets/floor.png\" id=\"1_cx0yb\"]\n[ext_resource type=\"Script\" path=\"res://Program.cs\" id=\"1_q0tim\"]\n[ext_resource type=\"Material\" uid=\"uid://drmul300eph46\" path=\"res://box.material\" id=\"2_ht1to\"]\n\n[sub_resource type=\"PlaneMesh\" id=\"PlaneMesh_bdasd\"]\n\n[sub_resource type=\"StandardMaterial3D\" id=\"StandardMaterial3D_6v48f\"]\nalbedo_color = Color(0.34902, 0.505882, 0.717647, 1)\nalbedo_texture = ExtResource(\"1_cx0yb\")\nmetallic = 0.29\nmetallic_specular = 0.54\nroughness = 0.65\nuv1_scale = Vector3(10, 10, 10)\n\n[sub_resource type=\"PhysicalSkyMaterial\" id=\"PhysicalSkyMaterial_hoxee\"]\nground_color = Color(0.729412, 0.627451, 0.52549, 1)\nenergy_multiplier = 4.35\n\n[sub_resource type=\"Sky\" id=\"Sky_u73ht\"]\nsky_material = SubResource(\"PhysicalSkyMaterial_hoxee\")\n\n[sub_resource type=\"Environment\" id=\"Environment_ekotd\"]\nbackground_mode = 2\nsky = SubResource(\"Sky_u73ht\")\nambient_light_energy = 2.86\n\n[sub_resource type=\"BoxMesh\" id=\"BoxMesh_0u3bq\"]\n\n[node name=\"Node3D\" type=\"Node3D\"]\nscript = ExtResource(\"1_q0tim\")\n\n[node name=\"Floor\" type=\"MeshInstance3D\" parent=\".\"]\ntransform = Transform3D(20, 0, 0, 0, 20, 0, 0, 0, 20, 0, 0, 0)\nmesh = SubResource(\"PlaneMesh_bdasd\")\nsurface_material_override/0 = SubResource(\"StandardMaterial3D_6v48f\")\n\n[node name=\"Camera3D\" type=\"Camera3D\" parent=\".\"]\ntransform = Transform3D(0.966823, -0.0320158, 0.253432, 0, 0.992115, 0.125333, -0.255446, -0.121175, 0.9592, 2.65486, 4.6383, 9.92122)\n\n[node name=\"WorldEnvironment\" type=\"WorldEnvironment\" parent=\".\"]\nenvironment = SubResource(\"Environment_ekotd\")\n\n[node name=\"TestCube\" type=\"MeshInstance3D\" parent=\".\"]\ntransform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.49664, 0)\nvisible = false\nmesh = SubResource(\"BoxMesh_0u3bq\")\nsurface_material_override/0 = ExtResource(\"2_ht1to\")\n\n[node name=\"DirectionalLight3D\" type=\"DirectionalLight3D\" parent=\".\"]\ntransform = Transform3D(0.574853, -0.657468, 0.487113, 0.0171256, 0.604843, 0.796161, -0.818077, -0.449333, 0.358955, 7.26371, 4.83944, 0)\nlight_energy = 1.61\nshadow_enabled = true\n"
  },
  {
    "path": "other/GodotDemo/project.godot",
    "content": "; Engine configuration file.\n; It's best edited using the editor UI and not directly,\n; since the parameters that go here are not all obvious.\n;\n; Format:\n;   [section] ; section goes between []\n;   param=value ; assign values to parameters\n\nconfig_version=5\n\n[application]\n\nconfig/name=\"JitterGodot\"\nrun/main_scene=\"res://main_scene.tscn\"\nconfig/features=PackedStringArray(\"4.3\", \"C#\", \"Forward Plus\")\nconfig/icon=\"res://icon.svg\"\n\n[display]\n\nwindow/size/viewport_width=1200\nwindow/size/viewport_height=800\n\n[dotnet]\n\nproject/assembly_name=\"JitterGodot\"\n\n[rendering]\n\nanti_aliasing/quality/msaa_3d=2\nanti_aliasing/quality/use_taa=true\n"
  },
  {
    "path": "other/GodotSoftBodies/.gitattributes",
    "content": "# Normalize EOL for all files that Git considers text files.\n* text=auto eol=lf\n"
  },
  {
    "path": "other/GodotSoftBodies/.gitignore",
    "content": "# Godot 4+ specific ignores\n.godot/\n.idea\n"
  },
  {
    "path": "other/GodotSoftBodies/JitterGodot.csproj",
    "content": "<Project Sdk=\"Godot.NET.Sdk/4.3.0\">\n  <PropertyGroup>\n    <TargetFramework>net8.0</TargetFramework>\n    <EnableDynamicLoading>true</EnableDynamicLoading>\n  </PropertyGroup>\n  <ItemGroup>\n    <PackageReference Include=\"Jitter2\" Version=\"2.8.3\" />\n  </ItemGroup>\n</Project>\n"
  },
  {
    "path": "other/GodotSoftBodies/JitterGodot.sln",
    "content": "﻿Microsoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio 2012\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"JitterGodot\", \"JitterGodot.csproj\", \"{D95E4F8D-CDCA-48E7-95EC-3EBBD7A0431A}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\tDebug|Any CPU = Debug|Any CPU\n\tExportDebug|Any CPU = ExportDebug|Any CPU\n\tExportRelease|Any CPU = ExportRelease|Any CPU\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{D95E4F8D-CDCA-48E7-95EC-3EBBD7A0431A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{D95E4F8D-CDCA-48E7-95EC-3EBBD7A0431A}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{D95E4F8D-CDCA-48E7-95EC-3EBBD7A0431A}.ExportDebug|Any CPU.ActiveCfg = ExportDebug|Any CPU\n\t\t{D95E4F8D-CDCA-48E7-95EC-3EBBD7A0431A}.ExportDebug|Any CPU.Build.0 = ExportDebug|Any CPU\n\t\t{D95E4F8D-CDCA-48E7-95EC-3EBBD7A0431A}.ExportRelease|Any CPU.ActiveCfg = ExportRelease|Any CPU\n\t\t{D95E4F8D-CDCA-48E7-95EC-3EBBD7A0431A}.ExportRelease|Any CPU.Build.0 = ExportRelease|Any CPU\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "other/GodotSoftBodies/Program.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing Godot;\nusing Jitter2;\nusing Jitter2.Collision.Shapes;\nusing Jitter2.Dynamics;\nusing Jitter2.Dynamics.Constraints;\nusing Jitter2.LinearMath;\nusing Jitter2.SoftBodies;\n\npublic static class Conversion\n{\n\tpublic static Vector3 FromJitter(in JVector vec) => new Vector3(vec.X, vec.Y, vec.Z);\n}\n\npublic class CubedSoftBody(World world) : SoftBody(world)\n{\n\tpublic int MaterialIndex { get; set; } = 0;\n\n\tpublic struct BuildVertex(int x, int y, int z)\n\t{\n\t\tpublic int X = x, Y = y, Z = z;\n\n\t\tpublic static BuildVertex operator +(BuildVertex a, BuildVertex b)\n\t\t\t=> new BuildVertex(a.X + b.X, a.Y + b.Y, a.Z + b.Z);\n\t}\n\n\tpublic struct BuildTetrahedron(int a, int b, int c, int d)\n\t{\n\t\tpublic int A = a, B = b, C = c, D = d;\n\t}\n\n\tpublic class BuildQuad(int a, int b, int c, int d, bool diagLeft = false) : IEquatable<BuildQuad>\n\t{\n\t\tpublic int A = a, B = b, C = c, D = d;\n\t\tpublic bool DiagLeft = diagLeft;\n\n\t\tpublic Vector2 UvA;\n\t\tpublic Vector2 UvB;\n\t\tpublic Vector2 UvC;\n\t\tpublic Vector2 UvD;\n\n\t\tpublic void SetUvCoordinates(BuildVertex[] vertices)\n\t\t{\n\t\t\tint minX = Math.Min(Math.Min(Math.Min(vertices[A].X, vertices[B].X), vertices[C].X), vertices[D].X);\n\t\t\tint minY = Math.Min(Math.Min(Math.Min(vertices[A].Y, vertices[B].Y), vertices[C].Y), vertices[D].Y);\n\t\t\tint minZ = Math.Min(Math.Min(Math.Min(vertices[A].Z, vertices[B].Z), vertices[C].Z), vertices[D].Z);\n\n\t\t\tif (vertices[A].X == vertices[B].X && vertices[A].X == vertices[C].X && vertices[A].X == vertices[D].X)\n\t\t\t{\n\t\t\t\tUvA = new Vector2(vertices[A].Y - minY, vertices[A].Z - minZ) * 0.5f;\n\t\t\t\tUvB = new Vector2(vertices[B].Y - minY, vertices[B].Z - minZ) * 0.5f;\n\t\t\t\tUvC = new Vector2(vertices[C].Y - minY, vertices[C].Z - minZ) * 0.5f;\n\t\t\t\tUvD = new Vector2(vertices[D].Y - minY, vertices[D].Z - minZ) * 0.5f;\n\t\t\t}\n\t\t\telse if (vertices[A].Y == vertices[B].Y && vertices[A].Y == vertices[C].Y && vertices[A].Y == vertices[D].Y)\n\t\t\t{\n\t\t\t\tUvA = new Vector2(vertices[A].X - minX, vertices[A].Z - minZ) * 0.5f;\n\t\t\t\tUvB = new Vector2(vertices[B].X - minX, vertices[B].Z - minZ) * 0.5f;\n\t\t\t\tUvC = new Vector2(vertices[C].X - minX, vertices[C].Z - minZ) * 0.5f;\n\t\t\t\tUvD = new Vector2(vertices[D].X - minX, vertices[D].Z - minZ) * 0.5f;\n\t\t\t}\n\t\t\telse if (vertices[A].Z == vertices[B].Z && vertices[A].Z == vertices[C].Z && vertices[A].Z == vertices[D].Z)\n\t\t\t{\n\t\t\t\tUvA = new Vector2(vertices[A].X - minX, vertices[A].Y - minY) * 0.5f;\n\t\t\t\tUvB = new Vector2(vertices[B].X - minX, vertices[B].Y - minY) * 0.5f;\n\t\t\t\tUvC = new Vector2(vertices[C].X - minX, vertices[C].Y - minY) * 0.5f;\n\t\t\t\tUvD = new Vector2(vertices[D].X - minX, vertices[D].Y - minY) * 0.5f;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tthrow new InvalidOperationException();\n\t\t\t}\n\t\t}\n\n\t\tpublic override bool Equals(object obj)\n\t\t{\n\t\t\treturn obj is BuildQuad other && Equals(other);\n\t\t}\n\n\t\tpublic bool Equals(BuildQuad other)\n\t\t{\n\t\t\tbool bA = (A == other.A || A == other.B || A == other.C || A == other.D);\n\t\t\tbool bB = (B == other.A || B == other.B || B == other.C || B == other.D);\n\t\t\tbool bC = (C == other.A || C == other.B || C == other.C || C == other.D);\n\t\t\tbool bD = (D == other.A || D == other.B || D == other.C || D == other.D);\n\t\t\treturn bA && bB && bC && bD;\n\t\t}\n\n\t\tpublic override int GetHashCode()\n\t\t{\n\t\t\treturn (A * B * C * D) + (A + B + C + D);\n\t\t}\n\t}\n\n\tprivate bool isFinished = false;\n\n\tprivate readonly Dictionary<BuildVertex, int> vertexIndices = new();\n\n\tprivate List<BuildTetrahedron> tetrahedra = new();\n\tprivate List<BuildVertex> cubeCenters = new();\n\n\tpublic HashSet<BuildQuad> Quads { get; } = new();\n\n\tprivate BuildVertex[] cubeVertices = new[]\n\t{\n\t\tnew BuildVertex(+1, -1, +1),\n\t\tnew BuildVertex(+1, -1, -1),\n\t\tnew BuildVertex(-1, -1, -1),\n\t\tnew BuildVertex(-1, -1, +1),\n\t\tnew BuildVertex(+1, +1, +1),\n\t\tnew BuildVertex(+1, +1, -1),\n\t\tnew BuildVertex(-1, +1, -1),\n\t\tnew BuildVertex(-1, +1, +1)\n\t};\n\n\tprivate int PushVertex(BuildVertex vertex)\n\t{\n\t\tif (vertexIndices.TryGetValue(vertex, out int result))\n\t\t\treturn result;\n\t\tresult = vertexIndices.Count;\n\t\tvertexIndices.Add(vertex, result);\n\t\treturn result;\n\t}\n\n\tpublic void AddCube(int x, int y, int z)\n\t{\n\t\tif (isFinished) throw new InvalidOperationException();\n\n\t\tvar origin = new BuildVertex(x, y, z);\n\n\t\tcubeCenters.Add(origin);\n\n\t\tSpan<int> idx = stackalloc int[8];\n\n\t\tfor (int i = 0; i < 8; i++)\n\t\t{\n\t\t\tidx[i] = PushVertex(origin + cubeVertices[i]);\n\t\t}\n\n\t\ttetrahedra.Add(new BuildTetrahedron(idx[0], idx[1], idx[5], idx[2]));\n\t\ttetrahedra.Add(new BuildTetrahedron(idx[5], idx[2], idx[6], idx[7]));\n\t\ttetrahedra.Add(new BuildTetrahedron(idx[0], idx[3], idx[2], idx[7]));\n\t\ttetrahedra.Add(new BuildTetrahedron(idx[4], idx[0], idx[5], idx[7]));\n\t\ttetrahedra.Add(new BuildTetrahedron(idx[0], idx[2], idx[5], idx[7]));\n\n\t\tvoid PushQuad(BuildQuad bq)\n\t\t{\n\t\t\tif (!Quads.Add(bq)) Quads.Remove(bq);\n\t\t}\n\n\t\tPushQuad(new BuildQuad(idx[5], idx[4], idx[7], idx[6], true));  // top\n\t\tPushQuad(new BuildQuad(idx[2], idx[3], idx[0], idx[1], false)); // bottom\n\t\tPushQuad(new BuildQuad(idx[6], idx[7], idx[3], idx[2], true));  // left\n\t\tPushQuad(new BuildQuad(idx[1], idx[0], idx[4], idx[5], false)); // right\n\t\tPushQuad(new BuildQuad(idx[3], idx[7], idx[4], idx[0], true));  // front\n\t\tPushQuad(new BuildQuad(idx[1], idx[5], idx[6], idx[2], false)); // back\n\t}\n\n\tpublic void Finalize(float scale = 0.25f)\n\t{\n\t\tif (isFinished) throw new InvalidOperationException();\n\n\t\tBuildVertex[] vertices = vertexIndices.OrderBy(pair => pair.Value).Select(pair => pair.Key).ToArray();\n\n\t\tforeach (var quad in Quads)\n\t\t{\n\t\t\tquad.SetUvCoordinates(vertices);\n\t\t}\n\n\t\tforeach (var vertex in vertices)\n\t\t{\n\t\t\tvar rb = world.CreateRigidBody();\n\t\t\trb.SetMassInertia(JMatrix.Zero, 8f, true);\n\t\t\trb.Position = new JVector(vertex.X, vertex.Y, vertex.Z) * scale;\n\t\t\trb.Damping = (0.02f, 0.002f);\n\t\t\tthis.Vertices.Add(rb);\n\t\t}\n\n\t\tforeach (var trh in tetrahedra)\n\t\t{\n\t\t\tSoftBodyTetrahedron sbt = new(this,\n\t\t\t\tVertices[trh.A], Vertices[trh.B],\n\t\t\t\tVertices[trh.C], Vertices[trh.D]);\n\n\t\t\tworld.DynamicTree.AddProxy(sbt);\n\t\t\tthis.Shapes.Add(sbt);\n\t\t}\n\n\t\tfor (int i = 0; i < cubeCenters.Count; i++)\n\t\t{\n\t\t\tvar centerCube = world.CreateRigidBody();\n\n\t\t\tcenterCube.Position = new JVector(cubeCenters[i].X, cubeCenters[i].Y, cubeCenters[i].Z) * scale;\n\t\t\tcenterCube.SetMassInertia(JMatrix.Identity * 1f, 1f);\n\n\t\t\tList<BallSocket> ct = new(8);\n\n\t\t\tct.Add(world.CreateConstraint<BallSocket>(centerCube, Vertices[tetrahedra[5 * i + 0].A])); // 0\n\t\t\tct.Add(world.CreateConstraint<BallSocket>(centerCube, Vertices[tetrahedra[5 * i + 0].B])); // 1\n\t\t\tct.Add(world.CreateConstraint<BallSocket>(centerCube, Vertices[tetrahedra[5 * i + 0].C])); // 5\n\t\t\tct.Add(world.CreateConstraint<BallSocket>(centerCube, Vertices[tetrahedra[5 * i + 0].D])); // 2\n\t\t\tct.Add(world.CreateConstraint<BallSocket>(centerCube, Vertices[tetrahedra[5 * i + 1].C])); // 6\n\t\t\tct.Add(world.CreateConstraint<BallSocket>(centerCube, Vertices[tetrahedra[5 * i + 1].D])); // 7\n\t\t\tct.Add(world.CreateConstraint<BallSocket>(centerCube, Vertices[tetrahedra[5 * i + 2].B])); // 3\n\t\t\tct.Add(world.CreateConstraint<BallSocket>(centerCube, Vertices[tetrahedra[5 * i + 3].A])); // 4\n\n\t\t\tforeach (var c in ct)\n\t\t\t{\n\t\t\t\tc.Initialize(c.Body2.Position);\n\t\t\t\tc.Softness = 0.1f;\n\t\t\t\tc.Bias = 0.3f;\n\t\t\t}\n\t\t}\n\n\t\tisFinished = true;\n\t}\n}\n\npublic partial class JitterSoftBodyCubeDrawer : MeshInstance3D\n{\n\tprivate ImmediateMesh immediateMesh = new();\n\n\tprivate List<CubedSoftBody> cubes = new();\n\n\tprivate Material[] materials = new Material[5];\n\n\tpublic void Clear()\n\t{\n\t\tforeach (var cube in cubes)\n\t\t{\n\t\t\tcube.Destroy();\n\t\t}\n\n\t\tcubes.Clear();\n\t}\n\n\tpublic void AddCubedSoftBody(CubedSoftBody body)\n\t{\n\t\tcubes.Add(body);\n\t}\n\n\tpublic override void _Ready()\n\t{\n\t\tthis.Mesh = immediateMesh;\n\n\t\tvar mat = ResourceLoader.Load<Material>(\"res://box.material\");\n\n\t\tfor (int i = 0; i < 5; i++)\n\t\t{\n\t\t\tmaterials[i] = mat.Duplicate(false) as Material;\n\t\t}\n\n\t\t((StandardMaterial3D)materials[0]).AlbedoColor = new Color(0, 0.94f, 0.94f);  // I\n\t\t((StandardMaterial3D)materials[1]).AlbedoColor = new Color(0.94f, 0.94f, 0);  // O\n\t\t((StandardMaterial3D)materials[2]).AlbedoColor = new Color(0, 0, 0.94f);       // L\n\t\t((StandardMaterial3D)materials[3]).AlbedoColor = new Color(0.94f ,0, 0);      // Z\n\t\t((StandardMaterial3D)materials[4]).AlbedoColor = new Color(0.63f, 0, 0.94f);  // T\n\n\t\tbase._Ready();\n\t}\n\n\tpublic override void _Process(double delta)\n\t{\n\t\tint surfaces = 0;\n\n\t\timmediateMesh.ClearSurfaces();\n\n\t\tforeach (var cube in cubes)\n\t\t{\n\t\t\timmediateMesh.SurfaceBegin(Mesh.PrimitiveType.Triangles);\n\n\t\t\tforeach (var quad in cube.Quads)\n\t\t\t{\n\t\t\t\tif (quad.DiagLeft)\n\t\t\t\t{\n\t\t\t\t\timmediateMesh.SurfaceSetUV(quad.UvA);\n\t\t\t\t\timmediateMesh.SurfaceAddVertex(Conversion.FromJitter(cube.Vertices[quad.A].Position));\n\t\t\t\t\timmediateMesh.SurfaceSetUV(quad.UvB);\n\t\t\t\t\timmediateMesh.SurfaceAddVertex(Conversion.FromJitter(cube.Vertices[quad.B].Position));\n\t\t\t\t\timmediateMesh.SurfaceSetUV(quad.UvC);\n\t\t\t\t\timmediateMesh.SurfaceAddVertex(Conversion.FromJitter(cube.Vertices[quad.C].Position));\n\t\t\t\t\timmediateMesh.SurfaceSetUV(quad.UvA);\n\t\t\t\t\timmediateMesh.SurfaceAddVertex(Conversion.FromJitter(cube.Vertices[quad.A].Position));\n\t\t\t\t\timmediateMesh.SurfaceSetUV(quad.UvC);\n\t\t\t\t\timmediateMesh.SurfaceAddVertex(Conversion.FromJitter(cube.Vertices[quad.C].Position));\n\t\t\t\t\timmediateMesh.SurfaceSetUV(quad.UvD);\n\t\t\t\t\timmediateMesh.SurfaceAddVertex(Conversion.FromJitter(cube.Vertices[quad.D].Position));\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\timmediateMesh.SurfaceSetUV(quad.UvA);\n\t\t\t\t\timmediateMesh.SurfaceAddVertex(Conversion.FromJitter(cube.Vertices[quad.A].Position));\n\t\t\t\t\timmediateMesh.SurfaceSetUV(quad.UvB);\n\t\t\t\t\timmediateMesh.SurfaceAddVertex(Conversion.FromJitter(cube.Vertices[quad.B].Position));\n\t\t\t\t\timmediateMesh.SurfaceSetUV(quad.UvD);\n\t\t\t\t\timmediateMesh.SurfaceAddVertex(Conversion.FromJitter(cube.Vertices[quad.D].Position));\n\t\t\t\t\timmediateMesh.SurfaceSetUV(quad.UvB);\n\t\t\t\t\timmediateMesh.SurfaceAddVertex(Conversion.FromJitter(cube.Vertices[quad.B].Position));\n\t\t\t\t\timmediateMesh.SurfaceSetUV(quad.UvC);\n\t\t\t\t\timmediateMesh.SurfaceAddVertex(Conversion.FromJitter(cube.Vertices[quad.C].Position));\n\t\t\t\t\timmediateMesh.SurfaceSetUV(quad.UvD);\n\t\t\t\t\timmediateMesh.SurfaceAddVertex(Conversion.FromJitter(cube.Vertices[quad.D].Position));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\timmediateMesh.SurfaceEnd();\n\t\t\timmediateMesh.SurfaceSetMaterial(surfaces++, materials[cube.MaterialIndex]);\n\t\t}\n\n\t\tbase._Process(delta);\n\t}\n}\n\npublic partial class Program : Node3D\n{\n\tprivate World world = null!;\n\n\tprivate JitterSoftBodyCubeDrawer softBodyDrawer = new();\n\n\tprivate void Add2x2x2(CubedSoftBody csb, int x, int y, int z)\n\t{\n\t\tcsb.AddCube(x + 1, y + 1, z + 1);\n\t\tcsb.AddCube(x + 1, y + 1, z - 1);\n\t\tcsb.AddCube(x - 1, y + 1, z + 1);\n\t\tcsb.AddCube(x - 1, y + 1, z - 1);\n\t\tcsb.AddCube(x + 1, y - 1, z + 1);\n\t\tcsb.AddCube(x + 1, y - 1, z - 1);\n\t\tcsb.AddCube(x - 1, y - 1, z + 1);\n\t\tcsb.AddCube(x - 1, y - 1, z - 1);\n\t}\n\n\tprivate void AddI(int x, int y, int z)\n\t{\n\t\tCubedSoftBody csb = new CubedSoftBody(world);\n\n\t\tAdd2x2x2(csb, x, y + 0, z);\n\t\tAdd2x2x2(csb, x, y + 4, z);\n\t\tAdd2x2x2(csb, x, y + 8, z);\n\t\tAdd2x2x2(csb, x, y + 12, z);\n\n\t\tcsb.Finalize();\n\t\tcsb.MaterialIndex = 0;\n\n\t\tsoftBodyDrawer.AddCubedSoftBody(csb);\n\t}\n\n\tprivate void AddO(int x, int y, int z)\n\t{\n\t\tCubedSoftBody csb = new CubedSoftBody(world);\n\n\t\tAdd2x2x2(csb, x + 0, y + 0, z);\n\t\tAdd2x2x2(csb, x + 0, y + 4, z);\n\t\tAdd2x2x2(csb, x + 4, y + 0, z);\n\t\tAdd2x2x2(csb, x + 4, y + 4, z);\n\n\t\tcsb.Finalize();\n\t\tcsb.MaterialIndex = 1;\n\n\t\tsoftBodyDrawer.AddCubedSoftBody(csb);\n\t}\n\n\tprivate void AddL(int x, int y, int z)\n\t{\n\t\tCubedSoftBody csb = new CubedSoftBody(world);\n\n\t\tAdd2x2x2(csb, x + 0, y + 0, z);\n\t\tAdd2x2x2(csb, x + 0, y + 4, z);\n\t\tAdd2x2x2(csb, x + 4, y + 4, z);\n\t\tAdd2x2x2(csb, x + 8, y + 4, z);\n\n\t\tcsb.Finalize();\n\t\tcsb.MaterialIndex = 2;\n\n\t\tsoftBodyDrawer.AddCubedSoftBody(csb);\n\t}\n\n\tprivate void AddZ(int x, int y, int z)\n\t{\n\t\tCubedSoftBody csb = new CubedSoftBody(world);\n\n\t\tAdd2x2x2(csb, x + 0, y + 0, z);\n\t\tAdd2x2x2(csb, x + 4, y + 0, z);\n\t\tAdd2x2x2(csb, x + 4, y + 4, z);\n\t\tAdd2x2x2(csb, x + 8, y + 4, z);\n\n\t\tcsb.Finalize();\n\t\tcsb.MaterialIndex = 3;\n\n\t\tsoftBodyDrawer.AddCubedSoftBody(csb);\n\t}\n\n\tprivate void AddT(int x, int y, int z)\n\t{\n\t\tCubedSoftBody csb = new CubedSoftBody(world);\n\n\t\tAdd2x2x2(csb, x + 0, y + 0, z);\n\t\tAdd2x2x2(csb, x + 4, y + 0, z);\n\t\tAdd2x2x2(csb, x + 8, y + 0, z);\n\t\tAdd2x2x2(csb, x + 4, y + 4, z);\n\n\t\tcsb.Finalize();\n\t\tcsb.MaterialIndex = 4;\n\n\t\tsoftBodyDrawer.AddCubedSoftBody(csb);\n\t}\n\n\tpublic override void _Ready()\n\t{\n\t\tvar button = new Button();\n\t\tbutton.Pressed += ResetScene;\n\t\tbutton.Position = new Vector2(4, 4);\n\t\tbutton.Text = \"Reset scene\";\n\n\t\tAddChild(button);\n\t\tAddChild(softBodyDrawer);\n\n\t\tworld = new World();\n\t\tResetScene();\n\t}\n\n\tprivate void ResetScene()\n\t{\n\t\tsoftBodyDrawer.Clear();\n\n\t\tworld.Clear();\n\n\t\t// floor shape\n\t\tRigidBody floor = world.CreateRigidBody();\n\t\tfloor.AddShape(new BoxShape(40));\n\t\tfloor.Position = new JVector(0, -20, 0);\n\t\tfloor.IsStatic = true;\n\n\t\tworld.DynamicTree.Filter = DynamicTreeCollisionFilter.Filter;\n\t\tworld.BroadPhaseFilter = new BroadPhaseCollisionFilter(world);\n\n\t\tfor (int i = 0; i < 5; i++)\n\t\t{\n\t\t\tAddI(0, (5 * i + 0) * 30, 0);\n\t\t\tAddL(0, (5 * i + 1) * 30, 0);\n\t\t\tAddZ(0, (5 * i + 2) * 30, 0);\n\t\t\tAddT(0, (5 * i + 3) * 30, 0);\n\t\t\tAddO(0, (5 * i + 4) * 30, 0);\n\t\t}\n\n\t\tworld.SubstepCount = 4;\n\t\tworld.SolverIterations = (4, 1);\n\t}\n\n\tfloat accumulatedTime = 0.0f;\n\n\tpublic override void _Process(double delta)\n\t{\n\t\tconst float fixedStep = 1.0f / 100.0f;\n\t\t\n\t\tint steps = 0;\n\t\taccumulatedTime += (float)delta;\n\n\t\twhile (accumulatedTime > fixedStep)\n\t\t{\n\t\t\tworld.Step(fixedStep, true);\n\t\t\taccumulatedTime -= fixedStep;\n\n\t\t\t// we can not keep up with the real time, i.e. the simulation\n\t\t\t// is running slower than the real time is passing.\n\t\t\tif (++steps >= 4) return;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "other/GodotSoftBodies/README.md",
    "content": "## Jitter2 Soft Bodies in Godot\n\nSmall demo to showing Jitter2 soft bodies in Godot.\n\nGet Godot (.NET, Version >= 4.3) from https://godotengine.org/. Open Godot and select \"project.godot\".\n"
  },
  {
    "path": "other/GodotSoftBodies/assets/texture_08.png.import",
    "content": "[remap]\n\nimporter=\"texture\"\ntype=\"CompressedTexture2D\"\nuid=\"uid://couisnncdt24n\"\npath.s3tc=\"res://.godot/imported/texture_08.png-55422b6c9181f85f6ecd7904cb7603ac.s3tc.ctex\"\nmetadata={\n\"imported_formats\": [\"s3tc_bptc\"],\n\"vram_texture\": true\n}\n\n[deps]\n\nsource_file=\"res://assets/texture_08.png\"\ndest_files=[\"res://.godot/imported/texture_08.png-55422b6c9181f85f6ecd7904cb7603ac.s3tc.ctex\"]\n\n[params]\n\ncompress/mode=2\ncompress/high_quality=false\ncompress/lossy_quality=0.7\ncompress/hdr_compression=1\ncompress/normal_map=0\ncompress/channel_pack=0\nmipmaps/generate=true\nmipmaps/limit=-1\nroughness/mode=0\nroughness/src_normal=\"\"\nprocess/fix_alpha_border=true\nprocess/premult_alpha=false\nprocess/normal_map_invert_y=false\nprocess/hdr_as_srgb=false\nprocess/hdr_clamp_exposure=false\nprocess/size_limit=0\ndetect_3d/compress_to=0\n"
  },
  {
    "path": "other/GodotSoftBodies/icon.svg.import",
    "content": "[remap]\n\nimporter=\"texture\"\ntype=\"CompressedTexture2D\"\nuid=\"uid://bj3qla3sx2dm8\"\npath=\"res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex\"\nmetadata={\n\"vram_texture\": false\n}\n\n[deps]\n\nsource_file=\"res://icon.svg\"\ndest_files=[\"res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex\"]\n\n[params]\n\ncompress/mode=0\ncompress/high_quality=false\ncompress/lossy_quality=0.7\ncompress/hdr_compression=1\ncompress/normal_map=0\ncompress/channel_pack=0\nmipmaps/generate=false\nmipmaps/limit=-1\nroughness/mode=0\nroughness/src_normal=\"\"\nprocess/fix_alpha_border=true\nprocess/premult_alpha=false\nprocess/normal_map_invert_y=false\nprocess/hdr_as_srgb=false\nprocess/hdr_clamp_exposure=false\nprocess/size_limit=0\ndetect_3d/compress_to=1\nsvg/scale=1.0\neditor/scale_with_editor_scale=false\neditor/convert_colors_with_editor_theme=false\n"
  },
  {
    "path": "other/GodotSoftBodies/main_scene.tscn",
    "content": "[gd_scene load_steps=9 format=3 uid=\"uid://coyqv4677vx2l\"]\n\n[ext_resource type=\"Script\" path=\"res://Program.cs\" id=\"1_q0tim\"]\n[ext_resource type=\"Material\" uid=\"uid://bnmu1bn4m70pu\" path=\"res://box.material\" id=\"4_umvs4\"]\n\n[sub_resource type=\"PlaneMesh\" id=\"PlaneMesh_bdasd\"]\n\n[sub_resource type=\"StandardMaterial3D\" id=\"StandardMaterial3D_6v48f\"]\nalbedo_color = Color(0.694118, 0.756863, 0.976471, 1)\nuv1_scale = Vector3(10, 10, 10)\n\n[sub_resource type=\"PhysicalSkyMaterial\" id=\"PhysicalSkyMaterial_hoxee\"]\nground_color = Color(0.627451, 0.607843, 0.890196, 1)\nenergy_multiplier = 4.35\n\n[sub_resource type=\"Sky\" id=\"Sky_u73ht\"]\nsky_material = SubResource(\"PhysicalSkyMaterial_hoxee\")\n\n[sub_resource type=\"Environment\" id=\"Environment_ekotd\"]\nbackground_mode = 2\nsky = SubResource(\"Sky_u73ht\")\nambient_light_energy = 2.86\n\n[sub_resource type=\"BoxMesh\" id=\"BoxMesh_0u3bq\"]\n\n[node name=\"Node3D\" type=\"Node3D\"]\nscript = ExtResource(\"1_q0tim\")\n\n[node name=\"Floor\" type=\"MeshInstance3D\" parent=\".\"]\ntransform = Transform3D(20, 0, 0, 0, 20, 0, 0, 0, 20, 0, 0, 0)\nmesh = SubResource(\"PlaneMesh_bdasd\")\nsurface_material_override/0 = SubResource(\"StandardMaterial3D_6v48f\")\n\n[node name=\"Camera3D\" type=\"Camera3D\" parent=\".\"]\ntransform = Transform3D(0.956687, -0.036487, 0.288824, 0, 0.992115, 0.125333, -0.29112, -0.119904, 0.949143, 4.44888, 6.19976, 15.391)\nvisible = false\n\n[node name=\"WorldEnvironment\" type=\"WorldEnvironment\" parent=\".\"]\nenvironment = SubResource(\"Environment_ekotd\")\n\n[node name=\"TestCube\" type=\"MeshInstance3D\" parent=\".\"]\ntransform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.49664, 0)\nvisible = false\nmesh = SubResource(\"BoxMesh_0u3bq\")\nsurface_material_override/0 = ExtResource(\"4_umvs4\")\n\n[node name=\"DirectionalLight3D\" type=\"DirectionalLight3D\" parent=\".\"]\ntransform = Transform3D(0.574853, -0.657468, 0.487113, 0.0171256, 0.604843, 0.796161, -0.818077, -0.449333, 0.358955, 7.26371, 4.83944, 0)\nshadow_enabled = true\n"
  },
  {
    "path": "other/GodotSoftBodies/project.godot",
    "content": "; Engine configuration file.\n; It's best edited using the editor UI and not directly,\n; since the parameters that go here are not all obvious.\n;\n; Format:\n;   [section] ; section goes between []\n;   param=value ; assign values to parameters\n\nconfig_version=5\n\n[application]\n\nconfig/name=\"JitterGodot\"\nrun/main_scene=\"res://main_scene.tscn\"\nconfig/features=PackedStringArray(\"4.3\", \"C#\", \"Forward Plus\")\nconfig/icon=\"res://icon.svg\"\n\n[display]\n\nwindow/size/viewport_width=1920\nwindow/size/viewport_height=1200\n\n[dotnet]\n\nproject/assembly_name=\"JitterGodot\"\n\n[rendering]\n\nlights_and_shadows/directional_shadow/size=8192\nanti_aliasing/quality/msaa_3d=3\n"
  },
  {
    "path": "other/WebDemo/LICENSE",
    "content": "The WebDemo uses the outstanding code from\n\nhttps://github.com/disketteman/DotnetRaylibWasm\nand\nhttps://github.com/Kiriller12/RaylibWasm\n\nto setup a wasm demo in the browser. License below.\n\nMIT License\n\nCopyright (c) 2022 Stan\nCopyright (c) 2023 Kiriller12\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\nThe demo code itself is a modified demo (fog) from raylib\n\nhttps://github.com/raysan5/raylib\n\nLicense below.\n\nCopyright (c) 2013-2023 Ramon Santamaria (@raysan5)\n\nThis software is provided \"as-is\", without any express or implied warranty. In no event\nwill the authors be held liable for any damages arising from the use of this software.\n\nPermission is granted to anyone to use this software for any purpose, including commercial\napplications, and to alter it and redistribute it freely, subject to the following restrictions:\n\n  1. The origin of this software must not be misrepresented; you must not claim that you\n  wrote the original software. If you use this software in a product, an acknowledgment\n  in the product documentation would be appreciated but is not required.\n\n  2. Altered source versions must be plainly marked as such, and must not be misrepresented\n  as being the original software.\n\n  3. This notice may not be removed or altered from any source distribution."
  },
  {
    "path": "other/WebDemo/Program.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Numerics;\nusing Raylib_cs;\nusing Jitter2;\nusing Jitter2.Collision;\nusing Jitter2.Collision.Shapes;\nusing Jitter2.Dynamics;\nusing Jitter2.Dynamics.Constraints;\nusing Jitter2.LinearMath;\nusing Jitter2.SoftBodies;\nusing static Raylib_cs.Raylib;\nusing static Raylib_cs.Rlgl;\nusing System.Runtime.InteropServices.JavaScript;\n\nnamespace WebDemo;\n\n// ─── Render metadata stored in body.Tag ──────────────────────────────────────\n\npublic enum BodyShape { Box, Sphere }\n\npublic record struct RenderTag(BodyShape Shape, float Sx, float Sy, float Sz);\n\n// ─── Scene interface ──────────────────────────────────────────────────────────\n\npublic interface IScene\n{\n    string Name { get; }\n    string Hint { get; }\n    void Build(Playground pg);\n}\n\n// ─── Pressurized soft-body sphere ────────────────────────────────────────────\n\nsealed class PressurizedSphere : SoftBody\n{\n    const float Pressure = 280f;\n\n    private sealed class UnitSphere : ISupportMappable\n    {\n        public void SupportMap(in JVector direction, out JVector result)\n            => result = JVector.Normalize(direction);\n        public void GetCenter(out JVector point)\n            => throw new NotImplementedException();\n    }\n\n    public PressurizedSphere(World world, JVector center, float radius = 1f) : base(world)\n    {\n        var tris = ShapeHelper.Tessellate(new UnitSphere(), 3);\n\n        var vertMap = new Dictionary<JVector, int>();\n        var triIndices = new List<(int, int, int)>();\n        var edgeSet = new HashSet<(int, int)>();\n\n        foreach (var tri in tris)\n        {\n            JVector[] pts = [tri.V0, tri.V1, tri.V2];\n            int[] idx = new int[3];\n            for (int k = 0; k < 3; k++)\n            {\n                if (!vertMap.TryGetValue(pts[k], out idx[k]))\n                {\n                    idx[k] = vertMap.Count;\n                    vertMap[pts[k]] = idx[k];\n                    var body = world.CreateRigidBody();\n                    body.Position = center + pts[k] * radius;\n                    body.SetMassInertia(JMatrix.Zero, 15f, true);\n                    body.Damping = (0.0004f, 0f);\n                    Vertices.Add(body);\n                }\n            }\n            triIndices.Add((idx[0], idx[1], idx[2]));\n            for (int k = 0; k < 3; k++)\n            {\n                int a = idx[k], b = idx[(k + 1) % 3];\n                edgeSet.Add(a < b ? (a, b) : (b, a));\n            }\n        }\n\n        foreach (var (a, b) in edgeSet)\n        {\n            var spring = world.CreateConstraint<SpringConstraint>(Vertices[a], Vertices[b]);\n            spring.Initialize(Vertices[a].Position, Vertices[b].Position);\n            spring.Softness = 0.5f;\n            Springs.Add(spring);\n        }\n\n        foreach (var (i0, i1, i2) in triIndices)\n        {\n            var shape = new SoftBodyTriangle(this, Vertices[i0], Vertices[i1], Vertices[i2]);\n            World.DynamicTree.AddProxy(shape);\n            Shapes.Add(shape);\n        }\n    }\n\n    protected override void WorldOnPostStep(float dt)\n    {\n        base.WorldOnPostStep(dt);\n        if (!IsActive) return;\n\n        float volume = 0f;\n        foreach (SoftBodyTriangle tri in Shapes)\n        {\n            JVector v1 = tri.Vertex1.Position, v2 = tri.Vertex2.Position, v3 = tri.Vertex3.Position;\n            volume += ((v2.Y - v1.Y) * (v3.Z - v1.Z) - (v2.Z - v1.Z) * (v3.Y - v1.Y)) * (v1.X + v2.X + v3.X);\n        }\n\n        float invVol = 1f / MathF.Max(0.1f, volume);\n        foreach (SoftBodyTriangle tri in Shapes)\n        {\n            JVector p0 = tri.Vertex1.Position, p1 = tri.Vertex2.Position, p2 = tri.Vertex3.Position;\n            JVector normal = (p1 - p0) % (p2 - p0);\n            JVector force = normal * Pressure * invVol;\n            const float maxForce = 2f;\n            float fl2 = force.LengthSquared();\n            if (fl2 > maxForce * maxForce) force *= maxForce / MathF.Sqrt(fl2);\n            tri.Vertex1.AddForce(force, false);\n            tri.Vertex2.AddForce(force, false);\n            tri.Vertex3.AddForce(force, false);\n        }\n    }\n}\n\n// ─── Scenes ──────────────────────────────────────────────────────────────────\n\nsealed class SceneSoftBall : IScene\n{\n    public string Name => \"Soft Body\";\n    public string Hint => \"Pressurized sphere rolls down a ramp\";\n\n    public PressurizedSphere? Sphere { get; private set; }\n\n    public void Build(Playground pg)\n    {\n        pg.World.SubstepCount = 2;\n        pg.World.DynamicTree.Filter = DynamicTreeCollisionFilter.Filter;\n        pg.World.BroadPhaseFilter = new BroadPhaseCollisionFilter(pg.World);\n        pg.AddGround();\n\n        // Tilted ramp (~30°)\n        var ramp = pg.AddBox(new JVector(0f, 3f, 0f), 9f, 0.4f, 3.5f);\n        ramp.MotionType = MotionType.Static;\n        ramp.Orientation = JQuaternion.CreateRotationZ(-0.52f);\n        ramp.Friction = 0.6f;\n\n        // Small 2D pyramid\n        int[] layerN = [3, 2, 1];\n        for (int layer = 0; layer < layerN.Length; layer++)\n        {\n            int n = layerN[layer];\n            float zOff = layer * 0.5f;\n            for (int iz = 0; iz < n; iz++)\n                pg.AddBox(new JVector(6f, 0.5f + layer, -1f + zOff + iz));\n        }\n\n        Sphere = new PressurizedSphere(pg.World, new JVector(-3f, 10f, 0f));\n    }\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n\nsealed class SceneTower : IScene\n{\n    public string Name => \"Plank Tower\";\n    public string Hint => \"Stacked plank tower stress test\";\n\n    public void Build(Playground pg)\n    {\n        pg.World.SolverIterations = (8, 4);\n        pg.World.SubstepCount = 3;\n        pg.AddGround();\n\n        static void AddPlank(Playground pg, float x, float y, float z, float sx, float sy, float sz)\n        {\n            var body = pg.AddBox(new JVector(x, y, z), sx, sy, sz);\n            body.Friction = 0.4f;\n        }\n\n        static void BuildBlock(Playground pg, Vector3 halfExtents, Vector3 shift, int numx, int numy, int numz)\n        {\n            Vector3[] dimensions = [halfExtents, new Vector3(halfExtents.Z, halfExtents.Y, halfExtents.X)];\n            float blockWidth = 2.0f * halfExtents.Z * numx;\n            float blockHeight = 2.0f * halfExtents.Y * numy;\n            float spacing = (halfExtents.Z * numx - halfExtents.X) / (numz - 1.0f);\n            int nx = numx;\n            int nz = numz;\n\n            for (int i = 0; i < numy; i++)\n            {\n                (nx, nz) = (nz, nx);\n                Vector3 dim = dimensions[i % 2];\n                float y = dim.Y * i * 2.0f;\n\n                for (int j = 0; j < nx; j++)\n                {\n                    float x = (i % 2 == 0) ? spacing * j * 2.0f : dim.X * j * 2.0f;\n\n                    for (int k = 0; k < nz; k++)\n                    {\n                        float z = (i % 2 == 0) ? dim.Z * k * 2.0f : spacing * k * 2.0f;\n                        AddPlank(pg,\n                            x + dim.X + shift.X,\n                            y + dim.Y + shift.Y,\n                            z + dim.Z + shift.Z,\n                            dim.X * 2.0f,\n                            dim.Y * 2.0f,\n                            dim.Z * 2.0f);\n                    }\n                }\n            }\n\n            Vector3 topDim = new(halfExtents.Z, halfExtents.X, halfExtents.Y);\n            int topNx = (int)(blockWidth / (topDim.X * 2.0f));\n            int topNz = (int)(blockWidth / (topDim.Z * 2.0f));\n\n            for (int i = 0; i < topNx; i++)\n            for (int j = 0; j < topNz; j++)\n                AddPlank(pg,\n                    i * topDim.X * 2.0f + topDim.X + shift.X,\n                    topDim.Y + shift.Y + blockHeight,\n                    j * topDim.Z * 2.0f + topDim.Z + shift.Z,\n                    topDim.X * 2.0f,\n                    topDim.Y * 2.0f,\n                    topDim.Z * 2.0f);\n        }\n\n        Vector3 halfExtents = new(0.1f, 0.65f, 2.0f);\n        int[] layerCounts = [0, 3, 5, 7, 9, 0];\n        float stackBaseHeight = 0.0f;\n\n        for (int i = 3; i >= 1; i--)\n        {\n            int numx = i;\n            int numy = layerCounts[i];\n            int numz = numx * 3 + 1;\n            float blockWidth = numx * halfExtents.Z * 2.0f;\n            BuildBlock(\n                pg,\n                halfExtents,\n                new Vector3(-blockWidth / 2.0f, stackBaseHeight, -blockWidth / 2.0f),\n                numx,\n                numy,\n                numz);\n            stackBaseHeight += numy * halfExtents.Y * 2.0f + halfExtents.X * 2.0f;\n        }\n\n        var ball = pg.AddSphere(new JVector(0f, 5f, -18f), 1.2f);\n        ball.SetMassInertia(12f);\n        ball.Restitution = 0.15f;\n        ball.Friction = 0.7f;\n        ball.Velocity = new JVector(0f, 0f, 38f);\n    }\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n\nsealed class SceneDominoes : IScene\n{\n    public string Name => \"Dominoes\";\n    public string Hint => \"Toppling domino chain\";\n\n    // domino geometry\n    const float Sp = 0.72f;   // spacing\n    const float DH = 2.0f;    // height\n    const float DW = 0.9f;    // width\n    const float DT = 0.15f;   // thickness\n    const float DY = DH * 0.5f;\n\n    public void Build(Playground pg)\n    {\n        pg.AddGround();\n\n        void Add(float x, float z, float angle)\n        {\n            var d = pg.AddBox(new JVector(x, DY, z), DT, DH, DW);\n            d.Orientation = JQuaternion.CreateRotationY(angle);\n            d.Friction = 0.5f;\n        }\n\n        // ── Segment 1: straight along +X ─────────────────────────────\n        const int n1 = 9;\n        const float s1x = -7f, s1z = -7f;\n        for (int i = 0; i < n1; i++)\n            Add(s1x + i * Sp, s1z, 0f);\n\n        // ── Arc 1: 90° left turn (+X → +Z), R=3, CCW ─────────────────\n        float a1cx = s1x + n1 * Sp, a1cz = s1z + 3f;\n        const int na1 = 7;\n        for (int i = 1; i <= na1; i++)\n        {\n            float phi = -MathF.PI / 2f + i * (MathF.PI / 2f) / (na1 + 1);\n            Add(a1cx + 3f * MathF.Cos(phi), a1cz + 3f * MathF.Sin(phi), -(phi + MathF.PI / 2f));\n        }\n\n        // ── Segment 2: straight along +Z ─────────────────────────────\n        const int n2 = 9;\n        float s2x = a1cx + 3f, s2z = a1cz;\n        for (int i = 0; i < n2; i++)\n            Add(s2x, s2z + i * Sp, -MathF.PI / 2f);\n\n        // ── Arc 2: 90° right turn (+Z → +X), R=3, CW ─────────────────\n        float a2cx = s2x + 3f, a2cz = s2z + n2 * Sp;\n        const int na2 = 7;\n        for (int i = 1; i <= na2; i++)\n        {\n            float phi = MathF.PI - i * (MathF.PI / 2f) / (na2 + 1);\n            Add(a2cx + 3f * MathF.Cos(phi), a2cz + 3f * MathF.Sin(phi), MathF.PI / 2f - phi);\n        }\n\n        // ── Segment 3: straight along +X ─────────────────────────────\n        const int n3 = 9;\n        float s3x = a2cx, s3z = a2cz + 3f;\n        for (int i = 0; i < n3; i++)\n            Add(s3x + i * Sp, s3z, 0f);\n\n        // ── Trigger ball ──────────────────────────────────────────────\n        var ball = pg.AddSphere(new JVector(s1x - 3.5f, 0.9f, s1z), 0.9f);\n        ball.SetMassInertia(3f);\n        ball.Restitution = 0.1f;\n        ball.Friction = 0.8f;\n        ball.Velocity = new JVector(4f, 0f, 0f);\n        ball.AngularVelocity = new JVector(0f, 0f, -4.4f);\n    }\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n\nsealed class SceneJenga : IScene\n{\n    public string Name => \"Jenga\";\n    public string Hint => \"Projectile tests a classic stacked tower\";\n\n    public void Build(Playground pg)\n    {\n        pg.World.SolverIterations = (8, 4);\n        pg.World.SubstepCount = 3;\n        pg.AddGround();\n\n        const float bD = 0.8f, bH = 0.8f, bW = 3f * bD; // bW = 3*bD keeps both layer orientations identical\n        const int layers = 22;\n        for (int layer = 0; layer < layers; layer++)\n        {\n            float y = bH * 0.5f + layer * bH;\n            if (layer % 2 == 0)\n                for (int i = -1; i <= 1; i++)\n                    pg.AddBox(new JVector(i * bD, y, 0f), bD, bH, bW);\n            else\n                for (int i = -1; i <= 1; i++)\n                    pg.AddBox(new JVector(0f, y, i * bD), bW, bH, bD);\n        }\n\n        var projectile = pg.AddSphere(new JVector(-12f, 3.5f, 0f), 0.9f);\n        projectile.SetMassInertia(14f);\n        projectile.Restitution = 0.15f;\n        projectile.Velocity = new JVector(28f, 0f, 0f);\n    }\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n\nsealed class SceneWreckingBall : IScene\n{\n    public const float BallRadius = 1.2f;\n\n    public string Name => \"Wrecking Ball\";\n    public string Hint => \"Pendulum demolishes a tower\";\n\n    public JVector AnchorPos;\n    public RigidBody Ball = null!;\n\n    public void Build(Playground pg)\n    {\n        pg.AddGround();\n\n        // Box tower on the right\n        for (int ix = 0; ix < 3; ix++)\n        for (int iz = 0; iz < 3; iz++)\n        for (int iy = 0; iy < 8; iy++)\n            pg.AddBox(new JVector(5f + ix * 1.0f, 0.5f + iy, iz * 1.0f - 1.0f));\n\n        // Static anchor point above and left\n        AnchorPos = new JVector(-1f, 14f, 0f);\n        var anchor = pg.World.CreateRigidBody();\n        anchor.Position = AnchorPos;\n        anchor.MotionType = MotionType.Static;\n\n        // Heavy ball: rope attaches at sphere surface toward anchor\n        const float RopeLength = 10f;\n        const float PullAngle = MathF.PI * 0.25f; // 45° from vertical\n        var ropeDir = new JVector(-MathF.Sin(PullAngle), -MathF.Cos(PullAngle), 0f);\n        JVector constraintPt = AnchorPos + ropeDir * RopeLength;           // on ball surface\n        var ball = pg.AddSphere(AnchorPos + ropeDir * (RopeLength + BallRadius), BallRadius);\n        ball.SetMassInertia(40f);\n        ball.Restitution = 0.2f;\n        Ball = ball;\n\n        var rope = pg.World.CreateConstraint<DistanceLimit>(anchor, ball);\n        rope.Initialize(AnchorPos, constraintPt, LinearLimit.Fixed);\n    }\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n\n// ─── Playground ──────────────────────────────────────────────────────────────\n\npublic class Playground\n{\n    private const float FixedTimeStep = 1f / 100f;\n    private const int MaxSimulationStepsPerFrame = 4;\n    private const float GroundSize = 40f;\n    private static readonly (float angular, float linear) DemoDeactivationThreshold = (0.02f, 0.02f);\n    private const int UiTitleFontSize = 26;\n    private const int UiBodyFontSize = 16;\n    private const int UiSmallFontSize = 15;\n    private const float UiFontOversample = 2.0f;\n\n    private Camera3D _camera;\n    private Shader   _shader;\n    private Model    _modelBox, _modelSphere, _modelGround, _modelRope;\n    private Texture2D _texFull, _texQuad, _texBlue, _texYellow, _texGray;\n    private Font     _fontTitle, _fontBody, _fontSmall;\n    private bool     _disposed;\n    private float    _accumulatedTime;\n    private bool     _hasPendingPointerTap;\n    private Vector2  _pendingPointerTap;\n\n    public World World { get; private set; } = null!;\n\n    private readonly List<IScene> _scenes = new()\n    {\n        new SceneSoftBall(),\n        new SceneTower(),\n        new SceneDominoes(),\n        new SceneJenga(),\n        new SceneWreckingBall(),\n    };\n    private int _sceneIndex;\n    private IScene Current => _scenes[_sceneIndex];\n\n    private static readonly Color SceneBgDark = new(28, 30, 36, 255);\n    private static readonly Color SceneBgLight = new(238, 243, 248, 255);\n\n    private Color _sceneBackground = SceneBgDark;\n    private Color _panelBackground = new(18, 20, 26, 255);\n    private Color _tabActive = new(91, 168, 245, 255);\n    private Color _tabInactive = new(50, 50, 50, 255);\n    private Color _hintColor = new(180, 180, 180, 255);\n    private Color _ctrlColor = new(130, 130, 130, 255);\n\n    public Playground()\n    {\n        SetConfigFlags(ConfigFlags.Msaa4xHint);\n        InitWindow(800, 600, \"Jitter2 Physics Demo\");\n\n        _camera = new Camera3D\n        {\n            Position   = new Vector3(2f, 12f, -22f),\n            Target     = new Vector3(0f, 4f, 0f),\n            Up         = new Vector3(0f, 1f, 0f),\n            FovY       = 45f,\n            Projection = CameraProjection.Perspective\n        };\n\n        _modelBox    = LoadModelFromMesh(GenMeshCube(1f, 1f, 1f));\n        _modelSphere = LoadModelFromMesh(GenMeshSphere(0.5f, 24, 24));\n        _modelGround = LoadModelFromMesh(GenMeshPlane(GroundSize, GroundSize, 1, 1));\n        _modelRope   = LoadModelFromMesh(GenMeshCylinder(1f, 1f, 12));\n\n        var img      = LoadImage(\"assets/texel_checker.png\");\n        _texFull     = LoadTextureFromImage(img);\n        _texQuad     = LoadTextureFromImage(ImageFromImage(img, new Rectangle(0, 0, 512, 512)));\n        UnloadImage(img);\n\n        var imgBlue   = GenImageChecked(1024, 1024, 256, 256, new Color(30, 90, 165, 255), new Color(55, 130, 210, 255));\n        _texBlue      = LoadTextureFromImage(imgBlue);\n        UnloadImage(imgBlue);\n\n        var imgYellow = GenImageChecked(1024, 1024, 128, 128, new Color(180, 140, 20, 255), new Color(235, 195, 50, 255));\n        _texYellow    = LoadTextureFromImage(imgYellow);\n        UnloadImage(imgYellow);\n\n        var imgGray = GenImageColor(16, 16, new Color(90, 93, 100, 255));\n        _texGray    = LoadTextureFromImage(imgGray);\n        UnloadImage(imgGray);\n\n        SetMaterialTexture(ref _modelBox,    0, MaterialMapIndex.Albedo, ref _texBlue);\n        SetMaterialTexture(ref _modelSphere, 0, MaterialMapIndex.Albedo, ref _texYellow);\n        SetMaterialTexture(ref _modelGround, 0, MaterialMapIndex.Albedo, ref _texFull);\n        SetMaterialTexture(ref _modelRope,   0, MaterialMapIndex.Albedo, ref _texGray);\n\n        _shader = LoadShader(\"assets/lighting.vs\", \"assets/lighting.fs\");\n        unsafe\n        {\n            _shader.Locs[(int)ShaderLocationIndex.MatrixModel] = GetShaderLocation(_shader, \"matModel\");\n            _shader.Locs[(int)ShaderLocationIndex.VectorView]  = GetShaderLocation(_shader, \"viewPos\");\n        }\n        int ambLoc = GetShaderLocation(_shader, \"ambient\");\n        SetShaderValue(_shader, ambLoc, new float[] { 0.25f, 0.25f, 0.25f, 1f }, ShaderUniformDataType.Vec4);\n\n        SetMaterialShader(ref _modelBox,    0, ref _shader);\n        SetMaterialShader(ref _modelSphere, 0, ref _shader);\n        SetMaterialShader(ref _modelGround, 0, ref _shader);\n        SetMaterialShader(ref _modelRope,   0, ref _shader);\n\n        Rlights.CreateLight(0, LightType.Point, new Vector3(0f, 14f, -8f), Vector3.Zero, Color.White, _shader);\n\n        _fontTitle = LoadFontEx(\"assets/JetBrainsMono-Regular.ttf\", GetAtlasFontSize(UiTitleFontSize), null, 0);\n        _fontBody = LoadFontEx(\"assets/JetBrainsMono-Regular.ttf\", GetAtlasFontSize(UiBodyFontSize), null, 0);\n        _fontSmall = LoadFontEx(\"assets/JetBrainsMono-Regular.ttf\", GetAtlasFontSize(UiSmallFontSize), null, 0);\n        SetTextureFilter(_fontTitle.Texture, TextureFilter.Bilinear);\n        SetTextureFilter(_fontBody.Texture, TextureFilter.Bilinear);\n        SetTextureFilter(_fontSmall.Texture, TextureFilter.Bilinear);\n\n        SetTargetFPS(60);\n        LoadScene(0);\n    }\n\n    // ─── Scene management ────────────────────────────────────────────────────\n\n    private void LoadScene(int index)\n    {\n        _sceneIndex = index;\n        World?.Dispose();\n        World = new World();\n        World.Gravity = new JVector(0f, -9.81f, 0f);\n        Current.Build(this);\n    }\n\n    // ─── Scene helpers ───────────────────────────────────────────────────────\n\n    public RigidBody AddGround(float y = 0f)\n    {\n        var body = World.CreateRigidBody();\n        body.AddShape(new BoxShape(GroundSize, 2f, GroundSize));\n        body.Position = new JVector(0f, y - 1f, 0f);\n        body.MotionType = MotionType.Static;\n        // no Tag → not drawn by DrawBodies\n        return body;\n    }\n\n    public void Dispose()\n    {\n        if (_disposed) return;\n        _disposed = true;\n\n        World?.Dispose();\n        UnloadFont(_fontTitle);\n        UnloadFont(_fontBody);\n        UnloadFont(_fontSmall);\n        UnloadModel(_modelBox);\n        UnloadModel(_modelSphere);\n        UnloadModel(_modelGround);\n        UnloadModel(_modelRope);\n        UnloadTexture(_texQuad);\n        UnloadTexture(_texFull);\n        UnloadTexture(_texBlue);\n        UnloadTexture(_texYellow);\n        UnloadTexture(_texGray);\n        UnloadShader(_shader);\n    }\n\n    public RigidBody AddBox(JVector pos, float sx = 1f, float sy = 1f, float sz = 1f)\n    {\n        var body = World.CreateRigidBody();\n                body.Position = pos;\n        body.AddShape(new BoxShape(sx, sy, sz));\n        body.DeactivationThreshold = DemoDeactivationThreshold;\n        body.Tag = new RenderTag(BodyShape.Box, sx, sy, sz);\n        return body;\n    }\n\n    public RigidBody AddSphere(JVector pos, float radius = 0.5f)\n    {\n        var body = World.CreateRigidBody();\n        body.AddShape(new SphereShape(radius));\n        body.Position = pos;\n        body.DeactivationThreshold = DemoDeactivationThreshold;\n        float d = radius * 2f;\n        body.Tag = new RenderTag(BodyShape.Sphere, d, d, d);\n        return body;\n    }\n\n    public void SetTheme(bool lightTheme)\n    {\n        _sceneBackground = lightTheme ? SceneBgLight : SceneBgDark;\n        _panelBackground = lightTheme ? new Color(34, 48, 60, 255) : new Color(18, 20, 26, 255);\n        _tabActive = lightTheme ? new Color(91, 168, 245, 255) : new Color(91, 168, 245, 255);\n        _tabInactive = lightTheme ? new Color(78, 96, 114, 255) : new Color(50, 50, 50, 255);\n        _hintColor = lightTheme ? new Color(214, 224, 235, 255) : new Color(180, 180, 180, 255);\n        _ctrlColor = lightTheme ? new Color(176, 193, 209, 255) : new Color(130, 130, 130, 255);\n    }\n\n    // ─── Frame ───────────────────────────────────────────────────────────────\n\n    public void UpdateFrame()\n    {\n        HandleInput();\n\n        Viewport(0, 0, GetRenderWidth(), GetRenderHeight());\n\n        unsafe\n        {\n            SetShaderValue(_shader,\n                _shader.Locs[(int)ShaderLocationIndex.VectorView],\n                _camera.Position, ShaderUniformDataType.Vec3);\n        }\n\n        UpdateCamera(ref _camera, CameraMode.Orbital);\n\n        BeginDrawing();\n        ClearBackground(_sceneBackground);\n\n        BeginMode3D(_camera);\n        DrawGround();\n        DrawBodies();\n        DrawExtras();\n        EndMode3D();\n\n        DrawUI();\n        EndDrawing();\n\n        _accumulatedTime += GetFrameTime();\n        int steps = 0;\n\n        while (_accumulatedTime >= FixedTimeStep && steps < MaxSimulationStepsPerFrame)\n        {\n            World.Step(FixedTimeStep, false);\n            _accumulatedTime -= FixedTimeStep;\n            steps++;\n        }\n\n        if (steps == MaxSimulationStepsPerFrame && _accumulatedTime > FixedTimeStep)\n        {\n            _accumulatedTime = FixedTimeStep;\n        }\n    }\n\n    // ─── Input ───────────────────────────────────────────────────────────────\n\n    private void HandleInput()\n    {\n        if (IsKeyPressed(KeyboardKey.Right))\n            LoadScene((_sceneIndex + 1) % _scenes.Count);\n        else if (IsKeyPressed(KeyboardKey.Left))\n            LoadScene((_sceneIndex + _scenes.Count - 1) % _scenes.Count);\n        else if (IsKeyPressed(KeyboardKey.R))\n            LoadScene(_sceneIndex);\n\n        if (_hasPendingPointerTap)\n        {\n            _hasPendingPointerTap = false;\n            HandleTabPress(_pendingPointerTap);\n        }\n    }\n\n    private void HandleTabPress(Vector2 pointer)\n    {\n        const int tabH = 40;\n        int sw = GetScreenWidth();\n        int sh = GetScreenHeight();\n        int tabY = sh - tabH;\n\n        if (pointer.Y >= tabY && pointer.Y < sh)\n        {\n            int tabW = sw / _scenes.Count;\n            int index = Math.Clamp((int)(pointer.X / tabW), 0, _scenes.Count - 1);\n            if (index != _sceneIndex) LoadScene(index);\n        }\n    }\n\n    public void QueuePointerTap(float x, float y)\n    {\n        _pendingPointerTap = new Vector2(x, y);\n        _hasPendingPointerTap = true;\n    }\n\n    // ─── Drawing ─────────────────────────────────────────────────────────────\n\n    private void DrawGround()\n    {\n        _modelGround.Transform = Matrix4x4.Identity;\n        DrawModel(_modelGround, Vector3.Zero, 1f, new Color(200, 200, 200, 255));\n    }\n\n    private void DrawBodies()\n    {\n        foreach (var body in World.RigidBodies)\n        {\n            if (body.Tag is not RenderTag tag) continue;\n            var m = BuildTransform(body, tag.Sx, tag.Sy, tag.Sz);\n            switch (tag.Shape)\n            {\n                case BodyShape.Box:\n                    _modelBox.Transform = m;\n                    DrawModel(_modelBox, Vector3.Zero, 1f, Color.White);\n                    break;\n                case BodyShape.Sphere:\n                    _modelSphere.Transform = m;\n                    DrawModel(_modelSphere, Vector3.Zero, 1f, Color.White);\n                    break;\n            }\n        }\n    }\n\n    private void DrawExtras()\n    {\n        // Soft Body: draw triangles\n        if (Current is SceneSoftBall sb && sb.Sphere is { } sphere)\n        {\n            var col = new Color(60, 220, 80, 255);\n            foreach (SoftBodyTriangle tri in sphere.Shapes)\n            {\n                Vector3 p1 = new(tri.Vertex1.Position.X, tri.Vertex1.Position.Y, tri.Vertex1.Position.Z);\n                Vector3 p2 = new(tri.Vertex2.Position.X, tri.Vertex2.Position.Y, tri.Vertex2.Position.Z);\n                Vector3 p3 = new(tri.Vertex3.Position.X, tri.Vertex3.Position.Y, tri.Vertex3.Position.Z);\n                DrawLine3D(p1, p2, col);\n                DrawLine3D(p2, p3, col);\n                DrawLine3D(p3, p1, col);\n            }\n        }\n\n        // Wrecking Ball: draw rope\n        if (Current is SceneWreckingBall wb && wb.Ball is { } ball)\n        {\n            Vector3 a = new(wb.AnchorPos.X, wb.AnchorPos.Y, wb.AnchorPos.Z);\n            Vector3 center = new(ball.Position.X, ball.Position.Y, ball.Position.Z);\n            Vector3 toAnchor = Vector3.Normalize(a - center);\n            Vector3 b = center + toAnchor * SceneWreckingBall.BallRadius;\n            Vector3 delta = b - a;\n            float length = delta.Length();\n\n            if (length > 1e-4f)\n            {\n                Vector3 dir = delta / length;\n                Vector3 axis = Vector3.Cross(Vector3.UnitY, dir);\n                float dot = Math.Clamp(Vector3.Dot(Vector3.UnitY, dir), -1f, 1f);\n                float angle = MathF.Acos(dot) * 180f / MathF.PI;\n\n                if (axis.LengthSquared() < 1e-6f)\n                {\n                    axis = Vector3.UnitX;\n                    if (dot > 0f) angle = 0f;\n                }\n                else\n                {\n                    axis = Vector3.Normalize(axis);\n                }\n\n                DrawModelEx(\n                    _modelRope,\n                    a,\n                    axis,\n                    angle,\n                    new Vector3(0.05f, length, 0.05f),\n                    Color.Yellow);\n            }\n\n            DrawSphere(a, 0.15f, Color.Gray);\n        }\n\n    }\n\n    // ─── UI overlay ──────────────────────────────────────────────────────────\n\n    private Font SelectFont(float size)\n    {\n        if (size >= UiTitleFontSize - 1f) return _fontTitle;\n        if (size >= UiBodyFontSize - 1f) return _fontBody;\n        return _fontSmall;\n    }\n\n    private static int GetAtlasFontSize(int uiSize)\n    {\n        return (int)MathF.Ceiling(uiSize * UiFontOversample);\n    }\n\n    private void DrawTextF(string text, float x, float y, float size, Color color)\n    {\n        Font font = SelectFont(size);\n        float drawSize = MathF.Round(size);\n        float spacing = MathF.Round(drawSize / 20f);\n        Vector2 position = new(MathF.Round(x), MathF.Round(y));\n        DrawTextEx(font, text, position, drawSize, spacing, color);\n    }\n\n    private float MeasureTextF(string text, float size)\n    {\n        Font font = SelectFont(size);\n        float drawSize = MathF.Round(size);\n        float spacing = MathF.Round(drawSize / 20f);\n        return MeasureTextEx(font, text, drawSize, spacing).X;\n    }\n\n    private void DrawUI()\n    {\n        int sw = GetScreenWidth();\n        int sh = GetScreenHeight();\n        float titleSize = 26f;\n        float hintSize = 16f;\n        float ctrlSize = 15f;\n        float tabLabelSize = 15f;\n        int topBarHeight = 54;\n        int tabH = 40;\n\n        DrawRectangle(0, 0, sw, topBarHeight, _panelBackground);\n        DrawTextF(Current.Name, 12, 7, titleSize, Color.White);\n        DrawTextF(Current.Hint, 12, 34, hintSize, _hintColor);\n        string ctrl = $\"Arrow Keys to Switch Scene   R Reset   {GetFPS()} fps\";\n        DrawTextF(ctrl, sw - MeasureTextF(ctrl, ctrlSize) - 10, 10, ctrlSize, _ctrlColor);\n\n        DrawRectangle(0, sh - tabH, sw, tabH, _panelBackground);\n        int tabW = sw / _scenes.Count;\n        for (int i = 0; i < _scenes.Count; i++)\n        {\n            int tx = i * tabW;\n            DrawRectangle(tx + 1, sh - tabH + 2, tabW - 2, tabH - 4,\n                i == _sceneIndex ? _tabActive : _tabInactive);\n            string label = _scenes[i].Name;\n            float lw = MeasureTextF(label, tabLabelSize);\n            DrawTextF(label, tx + (tabW - lw) / 2f, sh - tabH + 13, tabLabelSize, Color.White);\n        }\n    }\n\n    // ─── Math ────────────────────────────────────────────────────────────────\n\n    static Matrix4x4 BuildTransform(RigidBody body, float sx, float sy, float sz)\n    {\n        JMatrix r = JMatrix.CreateFromQuaternion(body.Orientation);\n        JVector p = body.Position;\n        return new Matrix4x4(\n            r.M11 * sx, r.M12 * sy, r.M13 * sz, p.X,\n            r.M21 * sx, r.M22 * sy, r.M23 * sz, p.Y,\n            r.M31 * sx, r.M32 * sy, r.M33 * sz, p.Z,\n            0f, 0f, 0f, 1f);\n    }\n}\n\n// ─── Application entry point ──────────────────────────────────────────────────\n\npublic partial class Application\n{\n    private static Playground _playground = null!;\n\n    [JSExport] public static void UpdateFrame() => _playground.UpdateFrame();\n    [JSExport] public static void Resize(int w, int h) => SetWindowSize(w, h);\n    [JSExport] public static void SetTheme(bool lightTheme) => _playground.SetTheme(lightTheme);\n    [JSExport] public static void PointerTap(float x, float y) => _playground.QueuePointerTap(x, y);\n    [JSExport] public static void Shutdown() => _playground.Dispose();\n\n    public static void Main() => _playground = new Playground();\n}\n"
  },
  {
    "path": "other/WebDemo/Properties/AssemblyInfo.cs",
    "content": "// Licensed to the .NET Foundation under one or more agreements.\n// The .NET Foundation licenses this file to you under the MIT license.\n\n[assembly:System.Runtime.Versioning.SupportedOSPlatform(\"browser\")]\n"
  },
  {
    "path": "other/WebDemo/Properties/launchSettings.json",
    "content": "{\n    \"profiles\": {\n      \"WebDemo\": {\n        \"commandName\": \"Project\",\n        \"launchBrowser\": true,\n        \"environmentVariables\": {\n          \"ASPNETCORE_ENVIRONMENT\": \"Development\"\n        },\n        \"applicationUrl\": \"https://localhost:7022;http://localhost:5269\",\n        \"inspectUri\": \"{wsProtocol}://{url.hostname}:{url.port}/debug?browser={browserInspectUri}\"\n      }\n    }\n}\n"
  },
  {
    "path": "other/WebDemo/README.md",
    "content": "## Jitter2 in the browser\n\n**Credits for raylib-cs in the browser and this README go to: https://github.com/disketteman/DotnetRaylibWasm and https://github.com/Kiriller12/RaylibWasm**\n\n## Setup\n\nMake sure you have the latest version of .NET 9.\n\nInstall the official wasm tooling:\n\n```\ndotnet workload install wasm-tools\ndotnet workload install wasm-experimental\n```\n\nInstall a tool to create ad-hoc http server to serve `application/wasm`:\n\n```\ndotnet tool install --global dotnet-serve\n```\n\n## Run it\n\n`publish` the solution. Don't use `build`. Publishing may take a while.\n\n```\ndotnet publish -c Release\n```\n\nTo serve the files use this command:\n\n```\ndotnet serve --mime .wasm=application/wasm --mime .js=text/javascript --mime .json=application/json --directory ./bin/Release/net9.0/browser-wasm/AppBundle\n```\n"
  },
  {
    "path": "other/WebDemo/RLights.cs",
    "content": "using System.Numerics;\nusing Raylib_cs;\nusing static Raylib_cs.Raylib;\n\npublic struct Light\n{\n    public bool Enabled;\n    public LightType Type;\n    public Vector3 Position;\n    public Vector3 Target;\n    public Color Color;\n\n    public int EnabledLoc;\n    public int TypeLoc;\n    public int PosLoc;\n    public int TargetLoc;\n    public int ColorLoc;\n}\n\npublic enum LightType\n{\n    Directorional,\n    Point\n}\n\npublic static class Rlights\n{\n    public static Light CreateLight(\n        int lightsCount,\n        LightType type,\n        Vector3 pos,\n        Vector3 target,\n        Color color,\n        Shader shader\n    )\n    {\n        Light light = new();\n\n        light.Enabled = true;\n        light.Type = type;\n        light.Position = pos;\n        light.Target = target;\n        light.Color = color;\n\n        string enabledName = \"lights[\" + lightsCount + \"].enabled\";\n        string typeName = \"lights[\" + lightsCount + \"].type\";\n        string posName = \"lights[\" + lightsCount + \"].position\";\n        string targetName = \"lights[\" + lightsCount + \"].target\";\n        string colorName = \"lights[\" + lightsCount + \"].color\";\n\n        light.EnabledLoc = GetShaderLocation(shader, enabledName);\n        light.TypeLoc = GetShaderLocation(shader, typeName);\n        light.PosLoc = GetShaderLocation(shader, posName);\n        light.TargetLoc = GetShaderLocation(shader, targetName);\n        light.ColorLoc = GetShaderLocation(shader, colorName);\n\n        UpdateLightValues(shader, light);\n\n        return light;\n    }\n\n    private static float[] colors = new float[4];\n\n    public static void UpdateLightValues(Shader shader, Light light)\n    {\n        // Send to shader light enabled state and type\n        Raylib.SetShaderValue(\n            shader,\n            light.EnabledLoc,\n            light.Enabled ? 1 : 0,\n            ShaderUniformDataType.Int\n        );\n        Raylib.SetShaderValue(shader, light.TypeLoc, (int)light.Type, ShaderUniformDataType.Int);\n\n        // Send to shader light target position values\n        Raylib.SetShaderValue(shader, light.PosLoc, light.Position, ShaderUniformDataType.Vec3);\n\n        // Send to shader light target position values\n        Raylib.SetShaderValue(shader, light.TargetLoc, light.Target, ShaderUniformDataType.Vec3);\n\n        // Send to shader light color values\n        colors[0] = (float)light.Color.R / 255.0f;\n        colors[1] = (float)light.Color.G / 255.0f;\n        colors[2] = (float)light.Color.B / 255.0f;\n        colors[3] = (float)light.Color.A / 255.0f;\n\n        Raylib.SetShaderValue(shader, light.ColorLoc, colors, ShaderUniformDataType.Vec4);\n    }\n}\n"
  },
  {
    "path": "other/WebDemo/WebDemo.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n  <PropertyGroup>\n    <TargetFramework>net9.0</TargetFramework>\n    <RuntimeIdentifier>browser-wasm</RuntimeIdentifier>\n    <WasmMainJSPath>main.js</WasmMainJSPath>\n    <OutputType>Exe</OutputType>\n    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>\n    <RunAOTCompilation>true</RunAOTCompilation>\n    <WasmBuildNative>true</WasmBuildNative>\n    <WasmNativeStrip>true</WasmNativeStrip>\n    <EnableAggressiveTrimming>true</EnableAggressiveTrimming>\n    <PublishTrimmed>true</PublishTrimmed>\n    <TrimMode>full</TrimMode>\n    <!-- This is to basically disable globalization to exclude icudt.dat (1.5MB) and reduce size of dotnet.wasm -->\n    <InvariantGlobalization>true</InvariantGlobalization>\n    <!-- raylib.a predates Raylib 5.x; unused DllImports are harmless -->\n    <WasmAllowUndefinedSymbols>true</WasmAllowUndefinedSymbols>\n  </PropertyGroup>\n\n  <Choose>\n    <When Condition=\" $(Configuration) == 'Debug' \">\n      <PropertyGroup>\n        <WasmEmitSymbolMap>true</WasmEmitSymbolMap>\n        <EmccFlags>-sUSE_GLFW=3</EmccFlags>\n      </PropertyGroup>\n    </When>\n    <When Condition=\" $(Configuration) == 'Release' \">\n      <PropertyGroup>\n        <EmccFlags>-s USE_GLFW=3 -O3</EmccFlags>\n      </PropertyGroup>\n    </When>\n  </Choose>\n\n  <ItemGroup>\n    <WasmExtraFilesToDeploy Include=\"index.html\" />\n    <WasmExtraFilesToDeploy Include=\"main.js\" />\n    <NativeFileReference Include=\"./runtimes/raylib.a\" />\n    <WasmFilesToIncludeInFileSystem Include=\"./assets/**/*.*\" TargetPath=\"assets\\%(RecursiveDir)\\%(Filename)%(Extension)\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\src\\Jitter2\\Jitter2.csproj\" />\n    <PackageReference Include=\"Raylib-cs\" Version=\"6.1.1\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "other/WebDemo/assets/JetBrainsMono-LICENSE.txt",
    "content": "Copyright 2020 The JetBrains Mono Project Authors (https://github.com/JetBrains/JetBrainsMono)\n\nThis Font Software is licensed under the SIL Open Font License, Version 1.1.\nThis license is copied below, and is also available with a FAQ at:\nhttps://scripts.sil.org/OFL\n\n\n-----------------------------------------------------------\nSIL OPEN FONT LICENSE Version 1.1 - 26 February 2007\n-----------------------------------------------------------\n\nPREAMBLE\nThe goals of the Open Font License (OFL) are to stimulate worldwide\ndevelopment of collaborative font projects, to support the font creation\nefforts of academic and linguistic communities, and to provide a free and\nopen framework in which fonts may be shared and improved in partnership\nwith others.\n\nThe OFL allows the licensed fonts to be used, studied, modified and\nredistributed freely as long as they are not sold by themselves. The\nfonts, including any derivative works, can be bundled, embedded, \nredistributed and/or sold with any software provided that any reserved\nnames are not used by derivative works. The fonts and derivatives,\nhowever, cannot be released under any other type of license. The\nrequirement for fonts to remain under this license does not apply\nto any document created using the fonts or their derivatives.\n\nDEFINITIONS\n\"Font Software\" refers to the set of files released by the Copyright\nHolder(s) under this license and clearly marked as such. This may\ninclude source files, build scripts and documentation.\n\n\"Reserved Font Name\" refers to any names specified as such after the\ncopyright statement(s).\n\n\"Original Version\" refers to the collection of Font Software components as\ndistributed by the Copyright Holder(s).\n\n\"Modified Version\" refers to any derivative made by adding to, deleting,\nor substituting -- in part or in whole -- any of the components of the\nOriginal Version, by changing formats or by porting the Font Software to a\nnew environment.\n\n\"Author\" refers to any designer, engineer, programmer, technical\nwriter or other person who contributed to the Font Software.\n\nPERMISSION & CONDITIONS\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Font Software, to use, study, copy, merge, embed, modify,\nredistribute, and sell modified and unmodified copies of the Font\nSoftware, subject to the following conditions:\n\n1) Neither the Font Software nor any of its individual components,\nin Original or Modified Versions, may be sold by itself.\n\n2) Original or Modified Versions of the Font Software may be bundled,\nredistributed and/or sold with any software, provided that each copy\ncontains the above copyright notice and this license. These can be\nincluded either as stand-alone text files, human-readable headers or\nin the appropriate machine-readable metadata fields within text or\nbinary files as long as those fields can be easily viewed by the user.\n\n3) No Modified Version of the Font Software may use the Reserved Font\nName(s) unless explicit written permission is granted by the corresponding\nCopyright Holder. This restriction only applies to the primary font name as\npresented to the users.\n\n4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font\nSoftware shall not be used to promote, endorse or advertise any\nModified Version, except to acknowledge the contribution(s) of the\nCopyright Holder(s) and the Author(s) or with their explicit written\npermission.\n\n5) The Font Software, modified or unmodified, in part or in whole,\nmust be distributed entirely under this license, and must not be\ndistributed under any other license. The requirement for fonts to\nremain under this license does not apply to any document created\nusing the Font Software.\n\nTERMINATION\nThis license becomes null and void if any of the above conditions are\nnot met.\n\nDISCLAIMER\nTHE FONT SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT\nOF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE\nCOPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\nINCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL\nDAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\nFROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM\nOTHER DEALINGS IN THE FONT SOFTWARE.\n"
  },
  {
    "path": "other/WebDemo/assets/lighting.fs",
    "content": "#version 100\n\nprecision mediump float;\n\n// Input vertex attributes (from vertex shader)\nvarying vec3 fragPosition;\nvarying vec2 fragTexCoord;\nvarying vec4 fragColor;\nvarying vec3 fragNormal;\n\n// Input uniform values\nuniform sampler2D texture0;\nuniform vec4 colDiffuse;\n\n// NOTE: Add here your custom variables\n\n#define     MAX_LIGHTS              4\n#define     LIGHT_DIRECTIONAL       0\n#define     LIGHT_POINT             1\n\nstruct MaterialProperty {\n    vec3 color;\n    int useSampler;\n    sampler2D sampler;\n};\n\nstruct Light {\n    int enabled;\n    int type;\n    vec3 position;\n    vec3 target;\n    vec4 color;\n};\n\n// Input lighting values\nuniform Light lights[MAX_LIGHTS];\nuniform vec4 ambient;\nuniform vec3 viewPos;\n\nvoid main()\n{\n    // Texel color fetching from texture sampler\n    vec4 texelColor = texture2D(texture0, fragTexCoord);\n    vec3 lightDot = vec3(0.0);\n    vec3 normal = normalize(fragNormal);\n    vec3 viewD = normalize(viewPos - fragPosition);\n    vec3 specular = vec3(0.0);\n\n    // NOTE: Implement here your fragment shader code\n\n    for (int i = 0; i < MAX_LIGHTS; i++)\n    {\n        if (lights[i].enabled == 1)\n        {\n            vec3 light = vec3(0.0);\n\n            if (lights[i].type == LIGHT_DIRECTIONAL) light = -normalize(lights[i].target - lights[i].position);\n            if (lights[i].type == LIGHT_POINT) light = normalize(lights[i].position - fragPosition);\n\n            float NdotL = max(dot(normal, light), 0.0);\n            lightDot += lights[i].color.rgb*NdotL;\n\n            float specCo = 0.0;\n            if (NdotL > 0.0) specCo = pow(max(0.0, dot(viewD, reflect(-(light), normal))), 16.0); // Shine: 16.0\n            specular += specCo;\n        }\n    }\n\n    vec4 finalColor = (texelColor*((colDiffuse + vec4(specular,1))*vec4(lightDot, 1.0)));\n    finalColor += texelColor*(ambient/10.0);\n\n    // Gamma correction\n    gl_FragColor = pow(finalColor, vec4(1.0/2.2));\n}\n"
  },
  {
    "path": "other/WebDemo/assets/lighting.vs",
    "content": "#version 100\n\n// Input vertex attributes\nattribute vec3 vertexPosition;\nattribute vec2 vertexTexCoord;\nattribute vec3 vertexNormal;\nattribute vec4 vertexColor;\n\n// Input uniform values\nuniform mat4 mvp;\nuniform mat4 matModel;\n\n// Output vertex attributes (to fragment shader)\nvarying vec3 fragPosition;\nvarying vec2 fragTexCoord;\nvarying vec4 fragColor;\nvarying vec3 fragNormal;\n\n// NOTE: Add here your custom variables\n\n// https://github.com/glslify/glsl-inverse\nmat3 inverse(mat3 m)\n{\n  float a00 = m[0][0], a01 = m[0][1], a02 = m[0][2];\n  float a10 = m[1][0], a11 = m[1][1], a12 = m[1][2];\n  float a20 = m[2][0], a21 = m[2][1], a22 = m[2][2];\n\n  float b01 = a22*a11 - a12*a21;\n  float b11 = -a22*a10 + a12*a20;\n  float b21 = a21*a10 - a11*a20;\n\n  float det = a00*b01 + a01*b11 + a02*b21;\n\n  return mat3(b01, (-a22*a01 + a02*a21), (a12*a01 - a02*a11),\n              b11, (a22*a00 - a02*a20), (-a12*a00 + a02*a10),\n              b21, (-a21*a00 + a01*a20), (a11*a00 - a01*a10))/det;\n}\n\n// https://github.com/glslify/glsl-transpose\nmat3 transpose(mat3 m)\n{\n  return mat3(m[0][0], m[1][0], m[2][0],\n              m[0][1], m[1][1], m[2][1],\n              m[0][2], m[1][2], m[2][2]);\n}\n\nvoid main()\n{\n    // Send vertex attributes to fragment shader\n    fragPosition = vec3(matModel*vec4(vertexPosition, 1.0));\n    fragTexCoord = vertexTexCoord;\n    fragColor = vertexColor;\n\n    mat3 normalMatrix = transpose(inverse(mat3(matModel)));\n    fragNormal = normalize(normalMatrix*vertexNormal);\n\n    // Calculate final vertex position\n    gl_Position = mvp*vec4(vertexPosition, 1.0);\n}\n"
  },
  {
    "path": "other/WebDemo/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n\n<head>\n  <title>Jitter2 WebDemo</title>\n  <meta charset=\"UTF-8\">\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  <link rel=\"modulepreload\" href=\"./main.js\" />\n  <link rel=\"modulepreload\" href=\"./_framework/dotnet.js\" />\n\n<style>\n  html, body {\n    margin: 0;\n    min-height: 100%;\n    background: #222;\n    color: #ddd;\n    font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif;\n  }\n\n  #page {\n    max-width: 800px;\n    margin: 0 auto;\n    padding: 24px 16px;\n  }\n\ndiv#canvas_wrapper {\n  position: relative;\n  width: 100%;\n  aspect-ratio: 800 / 600;\n  padding: 0;\n  overflow: hidden;\n}\n\ncanvas.emscripten {\n  display: block;\n  width: 100%;\n  height: 100%;\n}\n\n  #github-link {\n    position: fixed;\n    top: 12px;\n    right: 16px;\n    color: #fff;\n    background: #333;\n    font-family: sans-serif;\n    font-size: 14px;\n    font-weight: bold;\n    text-decoration: none;\n    padding: 8px 14px;\n    border-radius: 6px;\n    border: 1px solid #555;\n    z-index: 1000;\n    transition: background 0.2s;\n  }\n\n  #github-link:hover {\n    background: #555;\n  }\n\n  html.embed-mode #github-link {\n    display: none;\n  }\n\n  html.light-theme,\n  html.light-theme body {\n    background: #eef3f8;\n    color: #22303c;\n  }\n\n  html.light-theme #github-link {\n    color: #22303c;\n    background: rgba(255, 255, 255, 0.92);\n    border-color: rgba(34, 48, 60, 0.18);\n  }\n\n  html.light-theme #github-link:hover {\n    background: #ffffff;\n  }\n\n  html.light-theme .hint {\n    color: #5f6f80;\n  }\n\n  h1 { color: #fff; font-size: 1.6em; margin: 24px 0 8px; }\n  h2 { color: #ccc; font-size: 1.2em; margin: 20px 0 8px; }\n  p, li { line-height: 1.6; color: #bbb; font-size: 0.95em; }\n  a { color: #5ba8f5; }\n  code { background: #333; padding: 2px 6px; border-radius: 3px; font-size: 0.9em; }\n  ol { padding-left: 20px; }\n  .hint { color: #888; font-size: 0.85em; margin-top: 8px; }\n\n  #spinner {\n    position: absolute;\n    top: 25%;\n    left: 50%;\n    transform: translate(-50%, -50%);\n  }\n\n  #spinner_animation {\n    height: 60px;\n    width: 60px;\n    animation: rotation .6s infinite linear;\n    border-left: 6px solid rgba(0,174,239,.15);\n    border-right: 6px solid rgba(0,174,239,.15);\n    border-bottom: 6px solid rgba(0,174,239,.15);\n    border-top: 6px solid rgba(0,174,239,.8);\n    border-radius: 100%;\n  }\n\n  @keyframes rotation {\n    from { transform: rotate(0deg); }\n    to { transform: rotate(359deg); }\n  }\n\n  @media (max-width: 700px) {\n    #github-link {\n      position: static;\n      display: inline-block;\n      margin-bottom: 12px;\n    }\n  }\n</style>\n<script>\n  const params = new URLSearchParams(window.location.search);\n\n  if (params.get('embed') === '1') {\n    document.documentElement.classList.add('embed-mode');\n  }\n\n  if (params.get('theme') === 'light') {\n    document.documentElement.classList.add('light-theme');\n  }\n</script>\n</head>\n\n<body>\n  <a id=\"github-link\" href=\"https://github.com/notgiven688/jitterphysics2\" target=\"_blank\">⭐ View on GitHub</a>\n  <div id=\"page\">\n    <div id=\"canvas_wrapper\">\n      <canvas class=\"emscripten\" id=\"canvas\" oncontextmenu=\"event.preventDefault()\" tabindex=-1></canvas>\n      <!-- Spinner is removed when .NET is loaded -->\n      <div id=\"spinner\"><div id=\"spinner_animation\"></div></div>\n    </div>\n    <p class=\"hint\">Use <strong>← →</strong> to switch scenes and press <strong>R</strong> to reset.</p>\n  </div>\n\n  <script type=\"module\" src=\"./main.js\"></script>\n</body>\n\n</html>\n"
  },
  {
    "path": "other/WebDemo/main.js",
    "content": "import { dotnet } from './_framework/dotnet.js';\n\nasync function initialize() {\n    const canvas = document.getElementById('canvas');\n    const params = new URLSearchParams(window.location.search);\n    const lightTheme = params.get('theme') === 'light';\n\n    // Force an opaque WebGL backbuffer so browser page colors cannot bleed\n    // through anti-aliased canvas content such as UI text.\n    const originalGetContext = canvas.getContext.bind(canvas);\n    canvas.getContext = function(type, attrs) {\n        if (type === 'webgl' || type === 'webgl2' || type === 'experimental-webgl') {\n            return originalGetContext(type, {\n                ...attrs,\n                alpha: false\n            });\n        }\n\n        return originalGetContext(type, attrs);\n    };\n\n    const { getAssemblyExports, getConfig, runMain } = await dotnet\n    .withDiagnosticTracing(false)\n    .create();\n\n    const config = getConfig();\n    const exports = await getAssemblyExports(config.mainAssemblyName);\n\n    dotnet.instance.Module['canvas'] = canvas;\n\n    function pointerToCanvasPixels(clientX, clientY) {\n        const rect = canvas.getBoundingClientRect();\n        const localX = clientX - rect.left;\n        const localY = clientY - rect.top;\n        const scaleX = rect.width > 0 ? canvas.width / rect.width : 1;\n        const scaleY = rect.height > 0 ? canvas.height / rect.height : 1;\n\n        return {\n            x: localX * scaleX,\n            y: localY * scaleY\n        };\n    }\n\n    function resizeCanvasToDisplaySize() {\n        const dpr = Math.min(window.devicePixelRatio || 1, 2);\n\n        const cssWidth = canvas.clientWidth;\n        const cssHeight = canvas.clientHeight;\n\n        const pixelWidth = Math.max(1, Math.round(cssWidth * dpr));\n        const pixelHeight = Math.max(1, Math.round(cssHeight * dpr));\n\n        if (canvas.width !== pixelWidth || canvas.height !== pixelHeight) {\n            canvas.width = pixelWidth;\n            canvas.height = pixelHeight;\n        }\n\n        exports.WebDemo.Application.Resize(pixelWidth, pixelHeight);\n    }\n\n    function mainLoop() {\n        resizeCanvasToDisplaySize();\n        exports.WebDemo.Application.UpdateFrame();\n        window.requestAnimationFrame(mainLoop);\n    }\n\n    function queuePointerTap(clientX, clientY) {\n        const point = pointerToCanvasPixels(clientX, clientY);\n        exports.WebDemo.Application.PointerTap(point.x, point.y);\n    }\n\n    window.addEventListener('resize', resizeCanvasToDisplaySize);\n    window.addEventListener('orientationchange', resizeCanvasToDisplaySize);\n    canvas.addEventListener('pointerdown', evt => {\n        queuePointerTap(evt.clientX, evt.clientY);\n        if (evt.pointerType === 'touch') {\n            evt.preventDefault();\n        }\n    }, { passive: false });\n\n    await runMain();\n\n    exports.WebDemo.Application.SetTheme(lightTheme);\n    resizeCanvasToDisplaySize();\n\n    document.getElementById('spinner')?.remove();\n    window.requestAnimationFrame(mainLoop);\n}\n\ninitialize().catch(err => {\n    console.error('An error occurred during initialization:', err);\n});\n"
  },
  {
    "path": "other/WebDemo/run",
    "content": "#!/bin/bash\n\ndotnet publish -c Release && dotnet serve --mime .wasm=application/wasm --mime .js=text/javascript --mime .json=application/json --directory ./bin/Release/net9.0/browser-wasm/AppBundle\n"
  },
  {
    "path": "other/WebDemo/runtimeconfig.template.json",
    "content": "{\n    \"wasmHostProperties\": {\n        \"perHostConfig\": [\n            {\n                \"name\": \"browser\",\n                \"html-path\": \"index.html\",\n                \"Host\": \"browser\"\n            }\n        ]\n    }\n}\n"
  },
  {
    "path": "src/.gitignore",
    "content": ".vscode\n.vs\nimgui.ini\n[Bb]in/\n[Oo]bj/\nBenchmarkDotNet.Artifacts\n"
  },
  {
    "path": "src/Jitter2/Attributes.cs",
    "content": "/*\n * Jitter2 Physics Library\n * (c) Thorben Linneweber and contributors\n * SPDX-License-Identifier: MIT\n */\n\nusing System;\n\nnamespace Jitter2;\n\n/// <summary>\n/// Enum representing reference frames.\n/// </summary>\npublic enum ReferenceFrame\n{\n    Local,\n    World\n}\n\n/// <summary>\n/// Attribute to specify the reference frame of a member.\n/// </summary>\n[AttributeUsage(AttributeTargets.All)]\npublic sealed class ReferenceFrameAttribute : Attribute\n{\n    /// <summary>\n    /// Gets or sets the reference frame.\n    /// </summary>\n    public ReferenceFrame Frame { get; set; }\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"ReferenceFrameAttribute\"/> class.\n    /// </summary>\n    /// <param name=\"frame\">The reference frame.</param>\n    public ReferenceFrameAttribute(ReferenceFrame frame)\n    {\n        Frame = frame;\n    }\n}\n\n/// <summary>\n/// Specifies the threading context in which code executes or a callback is invoked.\n/// </summary>\npublic enum ThreadContext\n{\n    /// <summary>\n    /// Called from the main thread (or the thread calling World.Step).\n    /// Safe to access global state.\n    /// </summary>\n    MainThread,\n\n    /// <summary>\n    /// Called from background worker threads.\n    /// Code must be thread-safe and lock-free.\n    /// </summary>\n    ParallelWorker,\n\n    /// <summary>\n    /// Could be called from either. Handle with care.\n    /// </summary>\n    Any\n}\n\n/// <summary>\n/// Indicates the thread context in which a callback or event is expected to be invoked.\n/// This attribute is primarily informational and used for documentation purposes.\n/// </summary>\n[AttributeUsage(AttributeTargets.Method | AttributeTargets.Event)]\npublic sealed class CallbackThreadAttribute(ThreadContext context) : Attribute\n{\n    /// <summary>\n    /// Gets the thread context in which the attributed member is expected to be invoked.\n    /// </summary>\n    public ThreadContext Context { get; } = context;\n}"
  },
  {
    "path": "src/Jitter2/Collision/CollisionFilter/IBroadPhaseFilter.cs",
    "content": "/*\n * Jitter2 Physics Library\n * (c) Thorben Linneweber and contributors\n * SPDX-License-Identifier: MIT\n */\n\nnamespace Jitter2.Collision;\n\n/// <summary>\n/// Provides a hook into the broadphase collision detection pipeline.\n/// </summary>\n/// <remarks>\n/// Implement this interface to intercept shape pairs before narrowphase detection.\n/// This can be used to filter out specific pairs, implement custom collision layers,\n/// or handle collisions for custom proxy types. See <see cref=\"World.BroadPhaseFilter\"/>.\n/// </remarks>\npublic interface IBroadPhaseFilter\n{\n    /// <summary>\n    /// Called for each pair of proxies whose bounding boxes overlap.\n    /// </summary>\n    /// <param name=\"proxyA\">The first proxy.</param>\n    /// <param name=\"proxyB\">The second proxy.</param>\n    /// <returns><c>true</c> to continue with narrowphase detection; <c>false</c> to skip this pair.</returns>\n    [CallbackThread(ThreadContext.Any)]\n    bool Filter(IDynamicTreeProxy proxyA, IDynamicTreeProxy proxyB);\n}"
  },
  {
    "path": "src/Jitter2/Collision/CollisionFilter/INarrowPhaseFilter.cs",
    "content": "/*\n * Jitter2 Physics Library\n * (c) Thorben Linneweber and contributors\n * SPDX-License-Identifier: MIT\n */\n\nusing Jitter2.Collision.Shapes;\nusing Jitter2.LinearMath;\n\nnamespace Jitter2.Collision;\n\n/// <summary>\n/// Provides a hook into the narrowphase collision detection pipeline.\n/// </summary>\n/// <remarks>\n/// Implement this interface to intercept collisions after contact generation.\n/// This can be used to modify contact data, implement custom collision responses,\n/// or filter out specific collisions.\n/// </remarks>\npublic interface INarrowPhaseFilter\n{\n    /// <summary>\n    /// Called for each detected collision with its contact data.\n    /// </summary>\n    /// <param name=\"shapeA\">The first shape in the collision.</param>\n    /// <param name=\"shapeB\">The second shape in the collision.</param>\n    /// <param name=\"pointA\">Contact point on shape A (modifiable).</param>\n    /// <param name=\"pointB\">Contact point on shape B (modifiable).</param>\n    /// <param name=\"normal\">Collision normal from B to A (modifiable).</param>\n    /// <param name=\"penetration\">Penetration depth (modifiable).</param>\n    /// <returns><c>true</c> to keep the collision; <c>false</c> to discard it.</returns>\n    [CallbackThread(ThreadContext.Any)]\n    bool Filter(RigidBodyShape shapeA, RigidBodyShape shapeB,\n        ref JVector pointA, ref JVector pointB,\n        ref JVector normal, ref Real penetration);\n}"
  },
  {
    "path": "src/Jitter2/Collision/CollisionFilter/TriangleEdgeCollisionFilter.cs",
    "content": "/*\n * Jitter2 Physics Library\n * (c) Thorben Linneweber and contributors\n * SPDX-License-Identifier: MIT\n */\n\n// #define DEBUG_EDGEFILTER\n\nusing System.Runtime.CompilerServices;\nusing Jitter2.Collision.Shapes;\nusing Jitter2.LinearMath;\n\nnamespace Jitter2.Collision;\n\n/// <summary>\n/// Filters internal edge collisions for <see cref=\"TriangleShape\"/> geometry. Adjusts collision\n/// normals at shared edges to match neighboring triangles, or discards the collision if the normal\n/// cannot be resolved. Requires triangle adjacency information; boundary edges (no neighbor)\n/// are left unmodified. Back-face collisions are discarded.\n/// </summary>\npublic class TriangleEdgeCollisionFilter : INarrowPhaseFilter\n{\n    /// <summary>\n    /// Gets or sets the distance threshold for edge collision detection, in world units.\n    /// </summary>\n    /// <remarks>\n    /// Larger values are more aggressive at filtering edges but may incorrectly affect\n    /// legitimate collisions near triangle boundaries.\n    /// </remarks>\n    /// <value>The default value is 0.01 world units.</value>\n    public Real EdgeThreshold { get; set; } = (Real)0.01;\n\n    private Real cosAngle = (Real)0.999;\n\n    /// <summary>\n    /// Gets or sets the minimum length of the projected collision normal required to keep the contact.\n    /// </summary>\n    /// <remarks>\n    /// When the collision normal is projected onto the plane formed by the triangle normal and its\n    /// neighbor's normal, a very short projection indicates the collision is occurring along the\n    /// edge crease itself and is discarded. Lower values allow more edge collisions through;\n    /// higher values are more aggressive at filtering.\n    /// </remarks>\n    /// <value>The default value is 0.5.</value>\n    public Real ProjectionThreshold { get; set; } = (Real)0.5;\n\n    /// <summary>\n    /// Gets or sets the angle threshold used for two purposes: determining when two triangle normals\n    /// are considered coplanar (using simpler snapping logic), and discarding back-face collisions\n    /// whose normal is anti-parallel to the triangle normal within this angle.\n    /// </summary>\n    /// <value>The default value is approximately 2.5 degrees.</value>\n    public JAngle AngleThreshold\n    {\n        get => JAngle.FromRadian(StableMath.Acos(cosAngle));\n        set => cosAngle = StableMath.Cos(value.Radian);\n    }\n\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    private static void ProjectPointOnPlane(ref JVector point, in JVector a, in JVector b, in JVector c)\n    {\n        var ab = b - a;\n        var ac = c - a;\n        var normal = JVector.Cross(ab, ac);\n        JVector.NormalizeInPlace(ref normal);\n\n        var ap = point - a;\n        var distance = JVector.Dot(ap, normal);\n        point -= distance * normal;\n    }\n\n    /// <inheritdoc />\n    public bool Filter(RigidBodyShape shapeA, RigidBodyShape shapeB,\n        ref JVector pointA, ref JVector pointB, ref JVector normal, ref Real penetration)\n    {\n        TriangleShape? ts1 = shapeA as TriangleShape;\n        TriangleShape? ts2 = shapeB as TriangleShape;\n\n        bool c1 = ts1 != null;\n        bool c2 = ts2 != null;\n\n        // both shapes are triangles or both of them are not -> return\n        if (c1 == c2) return true;\n\n        TriangleShape triangleShape;\n\n        JVector collP;\n\n        if (c1)\n        {\n            triangleShape = ts1!;\n            collP = pointA;\n        }\n        else\n        {\n            triangleShape = ts2!;\n            collP = pointB;\n        }\n\n        ref readonly var triangle = ref triangleShape.Mesh.Indices[triangleShape.Index];\n\n        JVector tnormal = triangle.Normal;\n        tnormal = JVector.Transform(tnormal, triangleShape.RigidBody.Data.Orientation);\n\n        if (c2) JVector.NegateInPlace(ref tnormal);\n\n        // Make triangles penetrable from one side\n        if (JVector.Dot(normal, tnormal) < -cosAngle) return false;\n\n        triangleShape.GetWorldVertices(out JVector a, out JVector b, out JVector c);\n\n        // project collP onto triangle plane\n        ProjectPointOnPlane(ref collP, a, b, c);\n\n        var n = b - a;\n        var pma = collP - a;\n        var d0 = (pma - JVector.Dot(pma, n) * n * ((Real)1.0 / n.LengthSquared())).LengthSquared();\n\n        n = c - a;\n        pma = collP - a;\n        var d1 = (pma - JVector.Dot(pma, n) * n * ((Real)1.0 / n.LengthSquared())).LengthSquared();\n\n        n = c - b;\n        pma = collP - b;\n        var d2 = (pma - JVector.Dot(pma, n) * n * ((Real)1.0 / n.LengthSquared())).LengthSquared();\n\n        if (MathR.Min(MathR.Min(d0, d1), d2) > EdgeThreshold * EdgeThreshold) return true;\n\n        JVector nnormal;\n\n        if (d0 < d1 && d0 < d2)\n        {\n            if (triangle.NeighborC == -1) return true;\n            nnormal = triangleShape.Mesh.Indices[triangle.NeighborC].Normal;\n        }\n        else if (d1 < d2)\n        {\n            if (triangle.NeighborB == -1) return true;\n            nnormal = triangleShape.Mesh.Indices[triangle.NeighborB].Normal;\n        }\n        else\n        {\n            if (triangle.NeighborA == -1) return true;\n            nnormal = triangleShape.Mesh.Indices[triangle.NeighborA].Normal;\n        }\n\n        nnormal = JVector.Transform(nnormal, triangleShape.RigidBody.Data.Orientation);\n\n        ref var b1Data = ref shapeA.RigidBody.Data;\n        ref var b2Data = ref shapeB.RigidBody.Data;\n\n        bool isSpeculative = penetration < (Real)0.0;\n\n        if (!isSpeculative)\n        {\n            // Check collision again (for non-speculative contacts),\n            // but with zero epa threshold parameter. This is necessary since\n            // MPR is not exact for flat shapes, like triangles.\n\n            bool result = NarrowPhase.MprEpa(shapeA, shapeB,\n                b1Data.Orientation, b2Data.Orientation,\n                b1Data.Position, b2Data.Position,\n                out pointA, out pointB, out normal, out penetration,\n                epaThreshold: (Real)0.0);\n\n            if (!result)\n            {\n                // this should not happen\n                return false;\n            }\n        }\n\n        if (c2) JVector.NegateInPlace(ref nnormal);\n\n        JVector midPoint = (Real)0.5 * (pointA + pointB);\n\n        // now the fun part\n        //\n        // we have a collision close to an edge, with\n        //\n        // tnormal -> the triangle normal where collision occurred\n        // nnormal -> the normal of neighboring triangle\n        // normal  -> the collision normal\n        if (JVector.Dot(tnormal, nnormal) > cosAngle)\n        {\n            // tnormal and nnormal are the same\n            // --------------------------------\n            Real f5 = JVector.Dot(normal, nnormal);\n            Real f6 = JVector.Dot(normal, tnormal);\n\n            if (f5 > f6)\n            {\n#if DEBUG_EDGEFILTER\n                Console.WriteLine($\"case #1: adjusting; normal {normal} -> {nnormal}\");\n#endif\n\n                if (!isSpeculative)\n                {\n                    penetration = 0;\n                    pointA = pointB = midPoint;\n                }\n\n                normal = nnormal;\n            }\n            else\n            {\n#if DEBUG_EDGEFILTER\n                Console.WriteLine($\"case #1: adjusting; normal {normal} -> {tnormal}\");\n#endif\n\n                if (!isSpeculative)\n                {\n                    penetration = 0;\n                    pointA = pointB = midPoint;\n                }\n\n                normal = tnormal;\n            }\n\n            return true;\n        }\n        // nnormal and tnormal are different\n        // ----------------------------------\n\n        // 1st step, project the normal onto the plane given by tnormal and nnormal\n        // by removing the component along the cross product axis\n        JVector cross = nnormal % tnormal;\n        Real crossLenSq = cross.LengthSquared();\n        JVector proj = normal - (cross * normal / crossLenSq) * cross;\n\n        if (proj.LengthSquared() < ProjectionThreshold * ProjectionThreshold)\n        {\n#if DEBUG_EDGEFILTER\n            Console.WriteLine($\"case #3: discarding\");\n\n#endif\n            // can not project onto the plane, discard\n            return false;\n        }\n\n        // 2nd step, determine if \"proj\" is between nnormal and tnormal\n        //\n        //    /    nnormal\n        //   /\n        //  /\n        //  -----  proj\n        // \\\n        //  \\\n        //   \\     tnormal\n        Real f1 = proj % nnormal * cross;\n        Real f2 = proj % tnormal * cross;\n\n        bool between = f1 <= (Real)0.0 && f2 >= (Real)0.0;\n\n        if (!between)\n        {\n            // not in-between, snap normal\n            Real f3 = JVector.Dot(normal, nnormal);\n            Real f4 = JVector.Dot(normal, tnormal);\n\n            if (f3 > f4)\n            {\n#if DEBUG_EDGEFILTER\n                Console.WriteLine($\"case #2: adjusting; normal {normal} -> {nnormal}\");\n\n#endif\n                if (!isSpeculative)\n                {\n                    penetration = 0;\n                    pointA = pointB = midPoint;\n                }\n\n                normal = nnormal;\n            }\n            else\n            {\n#if DEBUG_EDGEFILTER\n                Console.WriteLine($\"case #2: adjusting; normal {normal} -> {tnormal}\");\n#endif\n                if (!isSpeculative)\n                {\n                    penetration = 0;\n                    pointA = pointB = midPoint;\n                }\n\n                normal = tnormal;\n            }\n        }\n\n        return true;\n    }\n}\n"
  },
  {
    "path": "src/Jitter2/Collision/CollisionIsland.cs",
    "content": "/*\n * Jitter2 Physics Library\n * (c) Thorben Linneweber and contributors\n * SPDX-License-Identifier: MIT\n */\n\nusing System.Collections.Generic;\nusing Jitter2.DataStructures;\nusing Jitter2.Dynamics;\n\nnamespace Jitter2.Collision;\n\n/// <summary>\n/// Represents an island, which is a collection of bodies that are either directly or indirectly in contact with each other.\n/// </summary>\npublic sealed class Island : IPartitionedSetIndex\n{\n    internal readonly HashSet<RigidBody> InternalBodies = [];\n    internal bool MarkedAsActive;\n\n    /// <summary>\n    /// Has to be set if an island is active but might contain inactive bodies.\n    /// This happens, for example, if an inactive and an active island are merged.\n    /// </summary>\n    internal bool NeedsUpdate;\n\n    /// <summary>\n    /// Gets a collection of all the bodies present in this island.\n    /// </summary>\n    public ReadOnlyHashSet<RigidBody> Bodies => new(InternalBodies);\n\n    int IPartitionedSetIndex.SetIndex { get; set; } = -1;\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"Island\"/> class.\n    /// </summary>\n    public Island()\n    {\n    }\n\n    /// <summary>\n    /// Clears all the bodies from the lists within this island.\n    /// </summary>\n    internal void ClearLists()\n    {\n        InternalBodies.Clear();\n    }\n}"
  },
  {
    "path": "src/Jitter2/Collision/DynamicTree/DynamicTree.FindNearest.cs",
    "content": "/*\n * Jitter2 Physics Library\n * (c) Thorben Linneweber and contributors\n * SPDX-License-Identifier: MIT\n */\n\nusing System.Collections.Generic;\nusing System.Runtime.CompilerServices;\nusing Jitter2.Collision.Shapes;\nusing Jitter2.LinearMath;\n\nnamespace Jitter2.Collision;\n\npublic partial class DynamicTree\n{\n    /// <summary>\n    /// Represents the result of a distance query against the dynamic tree.\n    /// </summary>\n    public struct FindNearestResult\n    {\n        /// <summary>The closest proxy found.</summary>\n        public IDynamicTreeProxy? Entity;\n\n        /// <summary>Closest point on the query shape in world space. Undefined when the shapes overlap.</summary>\n        public JVector PointA;\n\n        /// <summary>Closest point on the found proxy in world space. Undefined when the shapes overlap.</summary>\n        public JVector PointB;\n\n        /// <summary>\n        /// Unit direction from the query shape toward the found proxy, or <see cref=\"JVector.Zero\"/>\n        /// when the shapes overlap. Do not use this to test whether a result was found.\n        /// </summary>\n        public JVector Normal;\n\n        /// <summary>The separation distance between the query shape and the found proxy. Zero when the shapes overlap.</summary>\n        public Real Distance;\n    }\n\n    /// <summary>\n    /// Delegate for filtering distance query results after the exact shape distance test.\n    /// </summary>\n    /// <param name=\"result\">The distance result to evaluate.</param>\n    /// <returns><c>false</c> to filter out this result; <c>true</c> to keep it.</returns>\n    public delegate bool FindNearestFilterPost(FindNearestResult result);\n\n    /// <summary>\n    /// Delegate for filtering distance query candidates before the exact shape distance test.\n    /// </summary>\n    /// <param name=\"proxy\">The proxy to evaluate.</param>\n    /// <returns><c>false</c> to skip this proxy; <c>true</c> to test it.</returns>\n    public delegate bool FindNearestFilterPre(IDynamicTreeProxy proxy);\n\n    /// <summary>\n    /// Convenience overload of <see cref=\"FindNearest{T}(in T, in JQuaternion, in JVector, FindNearestFilterPre?, FindNearestFilterPost?, out IDynamicTreeProxy?, out JVector, out JVector, out JVector, out Real)\"/>\n    /// that queries with a <see cref=\"SupportPrimitives.Point\"/>.\n    /// </summary>\n    public bool FindNearestPoint(in JVector position,\n        FindNearestFilterPre? pre, FindNearestFilterPost? post,\n        out IDynamicTreeProxy? proxy, out JVector pointA, out JVector pointB, out JVector normal, out Real distance) =>\n        FindNearest(SupportPrimitives.CreatePoint(), JQuaternion.Identity, position, pre, post,\n            out proxy, out pointA, out pointB, out normal, out distance);\n\n    /// <summary>\n    /// Convenience overload of <see cref=\"FindNearest{T}(in T, in JQuaternion, in JVector, Real, FindNearestFilterPre?, FindNearestFilterPost?, out IDynamicTreeProxy?, out JVector, out JVector, out JVector, out Real)\"/>\n    /// that queries with a <see cref=\"SupportPrimitives.Point\"/>.\n    /// </summary>\n    public bool FindNearestPoint(in JVector position, Real maxDistance,\n        FindNearestFilterPre? pre, FindNearestFilterPost? post,\n        out IDynamicTreeProxy? proxy, out JVector pointA, out JVector pointB, out JVector normal, out Real distance) =>\n        FindNearest(SupportPrimitives.CreatePoint(), JQuaternion.Identity, position, maxDistance, pre, post,\n            out proxy, out pointA, out pointB, out normal, out distance);\n\n    /// <summary>\n    /// Convenience overload of <see cref=\"FindNearest{T}(in T, in JQuaternion, in JVector, FindNearestFilterPre?, FindNearestFilterPost?, out IDynamicTreeProxy?, out JVector, out JVector, out JVector, out Real)\"/>\n    /// that queries with a <see cref=\"SupportPrimitives.Sphere\"/>.\n    /// </summary>\n    /// <param name=\"radius\">The sphere radius.</param>\n    public bool FindNearestSphere(Real radius, in JVector position,\n        FindNearestFilterPre? pre, FindNearestFilterPost? post,\n        out IDynamicTreeProxy? proxy, out JVector pointA, out JVector pointB, out JVector normal, out Real distance) =>\n        FindNearest(SupportPrimitives.CreateSphere(radius), JQuaternion.Identity, position, pre, post,\n            out proxy, out pointA, out pointB, out normal, out distance);\n\n    /// <summary>\n    /// Convenience overload of <see cref=\"FindNearest{T}(in T, in JQuaternion, in JVector, Real, FindNearestFilterPre?, FindNearestFilterPost?, out IDynamicTreeProxy?, out JVector, out JVector, out JVector, out Real)\"/>\n    /// that queries with a <see cref=\"SupportPrimitives.Sphere\"/>.\n    /// </summary>\n    /// <param name=\"radius\">The sphere radius.</param>\n    public bool FindNearestSphere(Real radius, in JVector position, Real maxDistance,\n        FindNearestFilterPre? pre, FindNearestFilterPost? post,\n        out IDynamicTreeProxy? proxy, out JVector pointA, out JVector pointB, out JVector normal, out Real distance) =>\n        FindNearest(SupportPrimitives.CreateSphere(radius), JQuaternion.Identity, position, maxDistance, pre, post,\n            out proxy, out pointA, out pointB, out normal, out distance);\n\n    private struct DistanceQuery(in JBoundingBox box, in JQuaternion orientation, in JVector position)\n    {\n        public readonly JBoundingBox Box = box;\n        public readonly JQuaternion Orientation = orientation;\n        public readonly JVector Position = position;\n\n        public FindNearestFilterPost? FilterPost;\n        public FindNearestFilterPre? FilterPre;\n\n        public Real Distance;\n    }\n\n    /// <summary>\n    /// Finds the closest <see cref=\"IDistanceTestable\"/> proxy in the tree to the query shape\n    /// and returns the exact closest points.\n    /// </summary>\n    /// <param name=\"support\">The query shape.</param>\n    /// <param name=\"orientation\">The query shape orientation in world space.</param>\n    /// <param name=\"position\">The query shape position in world space.</param>\n    /// <param name=\"pre\">Optional pre-filter that can skip candidate proxies before the exact distance test.</param>\n    /// <param name=\"post\">Optional post-filter that can reject exact results and continue the search.</param>\n    /// <param name=\"proxy\">The nearest accepted proxy, or <c>null</c> if no proxy is found.</param>\n    /// <param name=\"pointA\">Closest point on the query shape in world space. Undefined when the shapes overlap.</param>\n    /// <param name=\"pointB\">Closest point on the found proxy in world space. Undefined when the shapes overlap.</param>\n    /// <param name=\"normal\">Unit direction from the query shape toward the found proxy, or <see cref=\"JVector.Zero\"/> when the shapes overlap.</param>\n    /// <param name=\"distance\">Separation distance between the query shape and the found proxy. Zero when they overlap.</param>\n    /// <returns>\n    /// <c>true</c> if an accepted proxy is found. This includes the overlapping case, where <paramref name=\"distance\"/>\n    /// is zero. <c>false</c> if no accepted proxy is found, in which case <paramref name=\"proxy\"/> is <c>null</c>.\n    /// </returns>\n    /// <remarks>\n    /// To skip overlapping proxies and continue searching for separated ones, use a <paramref name=\"post\"/>\n    /// filter that returns <c>false</c> for results with <c>distance == 0</c>.\n    /// </remarks>\n    public bool FindNearest<T>(in T support, in JQuaternion orientation, in JVector position,\n        FindNearestFilterPre? pre, FindNearestFilterPost? post,\n        out IDynamicTreeProxy? proxy, out JVector pointA, out JVector pointB, out JVector normal, out Real distance)\n        where T : ISupportMappable\n    {\n        ShapeHelper.CalculateBoundingBox(support, orientation, position, out JBoundingBox box);\n\n        DistanceQuery query = new(box, orientation, position)\n        {\n            FilterPre = pre,\n            FilterPost = post,\n            Distance = Real.MaxValue\n        };\n\n        bool hit = QueryDistance(support, query, out var result);\n        proxy = result.Entity;\n        pointA = result.PointA;\n        pointB = result.PointB;\n        normal = result.Normal;\n        distance = result.Distance;\n        return hit;\n    }\n\n    /// <summary>\n    /// Bounded variant of <see cref=\"FindNearest{T}(in T, in JQuaternion, in JVector, FindNearestFilterPre?, FindNearestFilterPost?, out IDynamicTreeProxy?, out JVector, out JVector, out JVector, out Real)\"/>\n    /// that limits the search to <paramref name=\"maxDistance\"/>.\n    /// </summary>\n    /// <param name=\"maxDistance\">Maximum separation distance to consider. Proxies farther than this are ignored.</param>\n    public bool FindNearest<T>(in T support, in JQuaternion orientation, in JVector position, Real maxDistance,\n        FindNearestFilterPre? pre, FindNearestFilterPost? post,\n        out IDynamicTreeProxy? proxy, out JVector pointA, out JVector pointB, out JVector normal, out Real distance)\n        where T : ISupportMappable\n    {\n        ShapeHelper.CalculateBoundingBox(support, orientation, position, out JBoundingBox box);\n\n        DistanceQuery query = new(box, orientation, position)\n        {\n            FilterPre = pre,\n            FilterPost = post,\n            Distance = maxDistance\n        };\n\n        bool hit = QueryDistance(support, query, out var result);\n        proxy = result.Entity;\n        pointA = result.PointA;\n        pointB = result.PointB;\n        normal = result.Normal;\n        distance = result.Distance;\n        return hit;\n    }\n\n    // Returns the minimum distance between the query AABB and a tree node's expanded AABB.\n    // Uses the Minkowski sum: expand the target by the query half-extents, then measure\n    // point-to-AABB distance from the query center. Returns 0 if the AABBs overlap.\n    private static Real MinDistBox(in JBoundingBox queryBox, in TreeBox targetBox)\n    {\n        JVector extents = (queryBox.Max - queryBox.Min) * (Real)0.5;\n        JVector center = (queryBox.Max + queryBox.Min) * (Real)0.5;\n\n        Real dx = MathR.Max(MathR.Max(targetBox.Min.X - extents.X - center.X, center.X - targetBox.Max.X - extents.X), (Real)0.0);\n        Real dy = MathR.Max(MathR.Max(targetBox.Min.Y - extents.Y - center.Y, center.Y - targetBox.Max.Y - extents.Y), (Real)0.0);\n        Real dz = MathR.Max(MathR.Max(targetBox.Min.Z - extents.Z - center.Z, center.Z - targetBox.Max.Z - extents.Z), (Real)0.0);\n\n        return MathR.Sqrt(dx * dx + dy * dy + dz * dz);\n    }\n\n    private bool QueryDistance<T>(in T support, in DistanceQuery query, out FindNearestResult result)\n        where T : ISupportMappable\n    {\n        result = new FindNearestResult\n        {\n            Distance = query.Distance\n        };\n\n        if (root == NullNode)\n        {\n            return false;\n        }\n\n        _stack ??= new Stack<int>(256);\n        _stack.Push(root);\n\n        while (_stack.Count > 0)\n        {\n            int index = _stack.Pop();\n            ref Node node = ref nodes[index];\n\n            if (node.IsLeaf)\n            {\n                if (node.Proxy is not IDistanceTestable distCastable) continue;\n                if (query.FilterPre != null && !query.FilterPre(node.Proxy!)) continue;\n\n                Unsafe.SkipInit(out FindNearestResult res);\n                bool separated = distCastable.Distance(support,\n                    query.Orientation, query.Position,\n                    out res.PointA, out res.PointB, out res.Normal, out res.Distance);\n                res.Entity = node.Proxy;\n\n                if (!separated)\n                {\n                    res.Distance = (Real)0.0;\n                    res.Normal = JVector.Zero;\n                    if (query.FilterPost != null && !query.FilterPost(res)) continue;\n                    _stack.Clear();\n                    result = res;\n                    return true;\n                }\n\n                if (res.Distance > result.Distance) continue;\n                if (query.FilterPost != null && !query.FilterPost(res)) continue;\n\n                result = res;\n                continue;\n            }\n\n            ref Node leftNode = ref nodes[node.Left];\n            ref Node rightNode = ref nodes[node.Right];\n\n            Real leftDist = MinDistBox(query.Box, leftNode.ExpandedBox);\n            Real rightDist = MinDistBox(query.Box, rightNode.ExpandedBox);\n\n            bool leftHit = leftDist <= result.Distance;\n            bool rightHit = rightDist <= result.Distance;\n\n            if (leftHit && rightHit)\n            {\n                if (leftDist < rightDist)\n                {\n                    _stack.Push(node.Right);\n                    _stack.Push(node.Left);\n                }\n                else\n                {\n                    _stack.Push(node.Left);\n                    _stack.Push(node.Right);\n                }\n            }\n            else\n            {\n                if (leftHit) _stack.Push(node.Left);\n                if (rightHit) _stack.Push(node.Right);\n            }\n        }\n\n        _stack.Clear();\n        return result.Entity != null;\n    }\n}\n"
  },
  {
    "path": "src/Jitter2/Collision/DynamicTree/DynamicTree.RayCast.cs",
    "content": "/*\n * Jitter2 Physics Library\n * (c) Thorben Linneweber and contributors\n * SPDX-License-Identifier: MIT\n */\n\nusing System.Collections.Generic;\nusing System.Runtime.CompilerServices;\nusing Jitter2.LinearMath;\n\nnamespace Jitter2.Collision;\n\npublic partial class DynamicTree\n{\n    /// <summary>\n    /// Represents the result of a ray cast against the dynamic tree.\n    /// </summary>\n    public struct RayCastResult\n    {\n        /// <summary>The proxy that was hit.</summary>\n        public IDynamicTreeProxy? Entity;\n\n        /// <summary>The ray parameter at the hit: <c>hitPoint = origin + Lambda * direction</c>.</summary>\n        public Real Lambda;\n\n        /// <summary>\n        /// The surface normal at the hit point, or <see cref=\"JVector.Zero\"/> when the ray origin\n        /// is inside the hit shape. Do not use this to test whether a hit occurred.\n        /// </summary>\n        public JVector Normal;\n    }\n\n    /// <summary>\n    /// Delegate for filtering ray cast results after the shape intersection test.\n    /// </summary>\n    /// <param name=\"result\">The ray cast result to evaluate.</param>\n    /// <returns><c>false</c> to filter out this hit; <c>true</c> to keep it.</returns>\n    public delegate bool RayCastFilterPost(RayCastResult result);\n\n    /// <summary>\n    /// Delegate for filtering ray cast candidates before the shape intersection test.\n    /// </summary>\n    /// <param name=\"proxy\">The proxy to evaluate.</param>\n    /// <returns><c>false</c> to skip this proxy; <c>true</c> to test it.</returns>\n    public delegate bool RayCastFilterPre(IDynamicTreeProxy proxy);\n\n    private struct Ray(in JVector origin, in JVector direction)\n    {\n        public readonly JVector Origin = origin;\n        public readonly JVector Direction = direction;\n\n        public RayCastFilterPost? FilterPost = null;\n        public RayCastFilterPre? FilterPre = null;\n\n        public Real Lambda = Real.MaxValue;\n    }\n\n    /// <summary>\n    /// Ray cast against the world.\n    /// </summary>\n    /// <param name=\"origin\">Origin of the ray.</param>\n    /// <param name=\"direction\">Direction of the ray. Does not have to be normalized.</param>\n    /// <param name=\"pre\">Optional pre-filter which allows to skip shapes in the detection.</param>\n    /// <param name=\"post\">Optional post-filter which allows to skip detections.</param>\n    /// <param name=\"proxy\">The shape which was hit.</param>\n    /// <param name=\"normal\">\n    /// The surface normal at the hit point. <see cref=\"JVector.Zero\"/> if the ray does not hit,\n    /// or if the ray origin is inside the hit shape. Use the return value to determine whether\n    /// a hit occurred; do not rely on this being non-zero as a hit indicator.\n    /// </param>\n    /// <param name=\"lambda\">Distance from the origin to the hit point in units of the ray direction. Zero if the origin is inside the hit shape.</param>\n    /// <returns>True if the ray hits, false otherwise.</returns>\n    public bool RayCast(JVector origin, JVector direction, RayCastFilterPre? pre, RayCastFilterPost? post,\n        out IDynamicTreeProxy? proxy, out JVector normal, out Real lambda)\n    {\n        Ray ray = new(origin, direction)\n        {\n            FilterPre = pre,\n            FilterPost = post\n        };\n        bool hit = QueryRay(ray, out var result);\n        proxy = result.Entity;\n        normal = result.Normal;\n        lambda = result.Lambda;\n        return hit;\n    }\n\n    /// <inheritdoc cref=\"RayCast(JVector, JVector, RayCastFilterPre?, RayCastFilterPost?, out IDynamicTreeProxy?, out JVector, out Real)\"/>\n    /// <param name=\"maxLambda\">Maximum lambda of the ray's length to consider for intersections.</param>\n    public bool RayCast(JVector origin, JVector direction, Real maxLambda, RayCastFilterPre? pre, RayCastFilterPost? post,\n        out IDynamicTreeProxy? proxy, out JVector normal, out Real lambda)\n    {\n        Ray ray = new(origin, direction)\n        {\n            FilterPre = pre,\n            FilterPost = post,\n            Lambda = maxLambda\n        };\n        bool hit = QueryRay(ray, out var result);\n        proxy = result.Entity;\n        normal = result.Normal;\n        lambda = result.Lambda;\n        return hit;\n    }\n\n    private bool QueryRay(in Ray ray, out RayCastResult result)\n    {\n        result = new RayCastResult();\n\n        if (root == -1)\n        {\n            return false;\n        }\n\n        _stack ??= new Stack<int>(256);\n\n        _stack.Push(root);\n\n        bool globalHit = false;\n\n        result.Lambda = ray.Lambda;\n\n        while (_stack.Count > 0)\n        {\n            int pop = _stack.Pop();\n\n            ref Node node = ref nodes[pop];\n\n            if (node.IsLeaf)\n            {\n                if (node.Proxy is not IRayCastable irc) continue;\n\n                if (ray.FilterPre != null && !ray.FilterPre(node.Proxy)) continue;\n\n                Unsafe.SkipInit(out RayCastResult res);\n                bool hit = irc.RayCast(ray.Origin, ray.Direction, out res.Normal, out res.Lambda);\n                res.Entity = node.Proxy;\n\n                if (hit && res.Lambda < result.Lambda)\n                {\n                    if (ray.FilterPost != null && !ray.FilterPost(res)) continue;\n                    result = res;\n                    globalHit = true;\n                }\n\n                continue;\n            }\n\n            ref Node lNode = ref nodes[node.Left];\n            ref Node rNode = ref nodes[node.Right];\n\n            bool lRes = lNode.ExpandedBox.RayIntersect(ray.Origin, ray.Direction, out Real lEnter);\n            bool rRes = rNode.ExpandedBox.RayIntersect(ray.Origin, ray.Direction, out Real rEnter);\n\n            if (lEnter > result.Lambda) lRes = false;\n            if (rEnter > result.Lambda) rRes = false;\n\n            if (lRes && rRes)\n            {\n                if (lEnter < rEnter)\n                {\n                    _stack.Push(node.Right);\n                    _stack.Push(node.Left);\n                }\n                else\n                {\n                    _stack.Push(node.Left);\n                    _stack.Push(node.Right);\n                }\n            }\n            else\n            {\n                if (lRes) _stack.Push(node.Left);\n                if (rRes) _stack.Push(node.Right);\n            }\n        }\n\n        return globalHit;\n    }\n}"
  },
  {
    "path": "src/Jitter2/Collision/DynamicTree/DynamicTree.SweepCast.cs",
    "content": "/*\n * Jitter2 Physics Library\n * (c) Thorben Linneweber and contributors\n * SPDX-License-Identifier: MIT\n */\n\nusing System.Collections.Generic;\nusing System.Runtime.CompilerServices;\nusing Jitter2.LinearMath;\nusing Jitter2.Collision.Shapes;\n\nnamespace Jitter2.Collision;\n\npublic partial class DynamicTree\n{\n    /// <summary>\n    /// Represents the result of a sweep against the dynamic tree.\n    /// </summary>\n    public struct SweepCastResult\n    {\n        /// <summary>The proxy that was hit.</summary>\n        public IDynamicTreeProxy? Entity;\n\n        /// <summary>The collision point on the moving query shape in world space at the sweep origin. Undefined when the shapes already overlap.</summary>\n        public JVector PointA;\n\n        /// <summary>The collision point on the hit object in world space at the sweep origin. Undefined when the shapes already overlap.</summary>\n        public JVector PointB;\n\n        /// <summary>\n        /// The collision normal in world space, or <see cref=\"JVector.Zero\"/> if the shapes already overlap.\n        /// Do not use this to test whether a hit occurred.\n        /// </summary>\n        public JVector Normal;\n\n        /// <summary>The time of impact expressed in units of the sweep direction vector. Zero if the shapes already overlap.</summary>\n        public Real Lambda;\n    }\n\n    /// <summary>\n    /// Delegate for filtering sweep results after the exact shape sweep test.\n    /// </summary>\n    /// <param name=\"result\">The sweep result to evaluate.</param>\n    /// <returns><c>false</c> to filter out this hit; <c>true</c> to keep it.</returns>\n    public delegate bool SweepCastFilterPost(SweepCastResult result);\n\n    /// <summary>\n    /// Delegate for filtering sweep candidates before the exact shape sweep test.\n    /// </summary>\n    /// <param name=\"proxy\">The proxy to evaluate.</param>\n    /// <returns><c>false</c> to skip this proxy; <c>true</c> to test it.</returns>\n    public delegate bool SweepCastFilterPre(IDynamicTreeProxy proxy);\n\n    /// <summary>\n    /// Convenience overload of <see cref=\"SweepCast{T}(in T, in JQuaternion, in JVector, in JVector, SweepCastFilterPre?, SweepCastFilterPost?, out IDynamicTreeProxy?, out JVector, out JVector, out JVector, out Real)\"/>\n    /// that sweeps a <see cref=\"SupportPrimitives.Sphere\"/>.\n    /// </summary>\n    /// <param name=\"radius\">The sphere radius.</param>\n    public bool SweepCastSphere(Real radius, in JVector position, in JVector direction,\n        SweepCastFilterPre? pre, SweepCastFilterPost? post,\n        out IDynamicTreeProxy? proxy, out JVector pointA, out JVector pointB, out JVector normal, out Real lambda) =>\n        SweepCast(SupportPrimitives.CreateSphere(radius), JQuaternion.Identity, position, direction, pre,\n            post, out proxy, out pointA, out pointB, out normal, out lambda);\n\n    /// <summary>\n    /// Convenience overload of <see cref=\"SweepCast{T}(in T, in JQuaternion, in JVector, in JVector, Real, SweepCastFilterPre?, SweepCastFilterPost?, out IDynamicTreeProxy?, out JVector, out JVector, out JVector, out Real)\"/>\n    /// that sweeps a <see cref=\"SupportPrimitives.Sphere\"/>.\n    /// </summary>\n    /// <param name=\"radius\">The sphere radius.</param>\n    public bool SweepCastSphere(Real radius, in JVector position, in JVector direction, Real maxLambda,\n        SweepCastFilterPre? pre, SweepCastFilterPost? post,\n        out IDynamicTreeProxy? proxy, out JVector pointA, out JVector pointB, out JVector normal, out Real lambda) =>\n        SweepCast(SupportPrimitives.CreateSphere(radius), JQuaternion.Identity, position, direction, maxLambda, pre,\n            post, out proxy, out pointA, out pointB, out normal, out lambda);\n\n    /// <summary>\n    /// Convenience overload of <see cref=\"SweepCast{T}(in T, in JQuaternion, in JVector, in JVector, SweepCastFilterPre?, SweepCastFilterPost?, out IDynamicTreeProxy?, out JVector, out JVector, out JVector, out Real)\"/>\n    /// that sweeps a <see cref=\"SupportPrimitives.Box\"/>.\n    /// </summary>\n    /// <param name=\"halfExtents\">The half extents of the box.</param>\n    public bool SweepCastBox(in JVector halfExtents, in JQuaternion orientation, in JVector position, in JVector direction,\n        SweepCastFilterPre? pre, SweepCastFilterPost? post,\n        out IDynamicTreeProxy? proxy, out JVector pointA, out JVector pointB, out JVector normal, out Real lambda) =>\n        SweepCast(SupportPrimitives.CreateBox(halfExtents), orientation, position, direction, pre,\n            post, out proxy, out pointA, out pointB, out normal, out lambda);\n\n    /// <summary>\n    /// Convenience overload of <see cref=\"SweepCast{T}(in T, in JQuaternion, in JVector, in JVector, Real, SweepCastFilterPre?, SweepCastFilterPost?, out IDynamicTreeProxy?, out JVector, out JVector, out JVector, out Real)\"/>\n    /// that sweeps a <see cref=\"SupportPrimitives.Box\"/>.\n    /// </summary>\n    /// <param name=\"halfExtents\">The half extents of the box.</param>\n    public bool SweepCastBox(in JVector halfExtents, in JQuaternion orientation, in JVector position, in JVector direction, Real maxLambda,\n        SweepCastFilterPre? pre, SweepCastFilterPost? post,\n        out IDynamicTreeProxy? proxy, out JVector pointA, out JVector pointB, out JVector normal, out Real lambda) =>\n        SweepCast(SupportPrimitives.CreateBox(halfExtents), orientation, position, direction, maxLambda, pre,\n            post, out proxy, out pointA, out pointB, out normal, out lambda);\n\n    /// <summary>\n    /// Convenience overload of <see cref=\"SweepCast{T}(in T, in JQuaternion, in JVector, in JVector, SweepCastFilterPre?, SweepCastFilterPost?, out IDynamicTreeProxy?, out JVector, out JVector, out JVector, out Real)\"/>\n    /// that sweeps a <see cref=\"SupportPrimitives.Capsule\"/>.\n    /// </summary>\n    /// <param name=\"radius\">The capsule radius.</param>\n    /// <param name=\"halfLength\">Half the cylindrical section length of the capsule.</param>\n    public bool SweepCastCapsule(Real radius, Real halfLength, in JQuaternion orientation, in JVector position, in JVector direction,\n        SweepCastFilterPre? pre, SweepCastFilterPost? post,\n        out IDynamicTreeProxy? proxy, out JVector pointA, out JVector pointB, out JVector normal, out Real lambda) =>\n        SweepCast(SupportPrimitives.CreateCapsule(radius, halfLength), orientation, position, direction, pre,\n            post, out proxy, out pointA, out pointB, out normal, out lambda);\n\n    /// <summary>\n    /// Convenience overload of <see cref=\"SweepCast{T}(in T, in JQuaternion, in JVector, in JVector, Real, SweepCastFilterPre?, SweepCastFilterPost?, out IDynamicTreeProxy?, out JVector, out JVector, out JVector, out Real)\"/>\n    /// that sweeps a <see cref=\"SupportPrimitives.Capsule\"/>.\n    /// </summary>\n    /// <param name=\"radius\">The capsule radius.</param>\n    /// <param name=\"halfLength\">Half the cylindrical section length of the capsule.</param>\n    public bool SweepCastCapsule(Real radius, Real halfLength, in JQuaternion orientation, in JVector position, in JVector direction, Real maxLambda,\n        SweepCastFilterPre? pre, SweepCastFilterPost? post,\n        out IDynamicTreeProxy? proxy, out JVector pointA, out JVector pointB, out JVector normal, out Real lambda) =>\n        SweepCast(SupportPrimitives.CreateCapsule(radius, halfLength), orientation, position, direction, maxLambda, pre,\n            post, out proxy, out pointA, out pointB, out normal, out lambda);\n\n    /// <summary>\n    /// Convenience overload of <see cref=\"SweepCast{T}(in T, in JQuaternion, in JVector, in JVector, SweepCastFilterPre?, SweepCastFilterPost?, out IDynamicTreeProxy?, out JVector, out JVector, out JVector, out Real)\"/>\n    /// that sweeps a <see cref=\"SupportPrimitives.Cylinder\"/>.\n    /// </summary>\n    /// <param name=\"radius\">The cylinder radius.</param>\n    /// <param name=\"halfHeight\">Half the cylinder height.</param>\n    public bool SweepCastCylinder(Real radius, Real halfHeight, in JQuaternion orientation, in JVector position, in JVector direction,\n        SweepCastFilterPre? pre, SweepCastFilterPost? post,\n        out IDynamicTreeProxy? proxy, out JVector pointA, out JVector pointB, out JVector normal, out Real lambda) =>\n        SweepCast(SupportPrimitives.CreateCylinder(radius, halfHeight), orientation, position, direction, pre,\n            post, out proxy, out pointA, out pointB, out normal, out lambda);\n\n    /// <summary>\n    /// Convenience overload of <see cref=\"SweepCast{T}(in T, in JQuaternion, in JVector, in JVector, Real, SweepCastFilterPre?, SweepCastFilterPost?, out IDynamicTreeProxy?, out JVector, out JVector, out JVector, out Real)\"/>\n    /// that sweeps a <see cref=\"SupportPrimitives.Cylinder\"/>.\n    /// </summary>\n    /// <param name=\"radius\">The cylinder radius.</param>\n    /// <param name=\"halfHeight\">Half the cylinder height.</param>\n    public bool SweepCastCylinder(Real radius, Real halfHeight, in JQuaternion orientation, in JVector position, in JVector direction, Real maxLambda,\n        SweepCastFilterPre? pre, SweepCastFilterPost? post,\n        out IDynamicTreeProxy? proxy, out JVector pointA, out JVector pointB, out JVector normal, out Real lambda) =>\n        SweepCast(SupportPrimitives.CreateCylinder(radius, halfHeight), orientation, position, direction, maxLambda, pre,\n            post, out proxy, out pointA, out pointB, out normal, out lambda);\n    \n    private struct SweepQuery(in JBoundingBox box, in JQuaternion orientation, in JVector position, in JVector direction)\n    {\n        public readonly JBoundingBox Box = box;\n        public readonly JQuaternion Orientation = orientation;\n        public readonly JVector Position = position;\n        public readonly JVector Direction = direction;\n\n        public SweepCastFilterPost? FilterPost;\n        public SweepCastFilterPre? FilterPre;\n\n        public Real Lambda;\n    }\n\n    /// <summary>\n    /// Sweeps a support-mapped query shape against all <see cref=\"ISweepTestable\"/> proxies in the tree\n    /// and returns the closest exact hit.\n    /// </summary>\n    /// <param name=\"support\">The query shape.</param>\n    /// <param name=\"orientation\">The query shape orientation in world space.</param>\n    /// <param name=\"position\">The query shape position in world space at the start of the sweep.</param>\n    /// <param name=\"direction\">The sweep direction vector in world space.</param>\n    /// <param name=\"pre\">Optional pre-filter that can skip candidate proxies before the exact sweep test.</param>\n    /// <param name=\"post\">Optional post-filter that can reject exact results and continue the search.</param>\n    /// <param name=\"proxy\">The closest accepted hit proxy, or <c>null</c> if no hit is found.</param>\n    /// <param name=\"pointA\">Collision point on the query shape in world space at the sweep origin. Undefined when the shapes already overlap.</param>\n    /// <param name=\"pointB\">Collision point on the hit proxy in world space at the sweep origin. Undefined when the shapes already overlap.</param>\n    /// <param name=\"normal\">Collision normal in world space, or <see cref=\"JVector.Zero\"/> when the shapes already overlap.</param>\n    /// <param name=\"lambda\">Time of impact in units of <paramref name=\"direction\"/>. Zero when the shapes already overlap.</param>\n    /// <returns>\n    /// <c>true</c> if an accepted hit is found. This includes the overlapping case, where <paramref name=\"lambda\"/>\n    /// is zero. <c>false</c> if no accepted hit is found, in which case <paramref name=\"proxy\"/> is <c>null</c>.\n    /// </returns>\n    public bool SweepCast<T>(in T support, in JQuaternion orientation, in JVector position, in JVector direction,\n        SweepCastFilterPre? pre, SweepCastFilterPost? post,\n        out IDynamicTreeProxy? proxy, out JVector pointA, out JVector pointB, out JVector normal, out Real lambda)\n        where T : ISupportMappable\n    {\n        ShapeHelper.CalculateBoundingBox(support, orientation, position, out JBoundingBox box);\n\n        SweepQuery sweep = new(box, orientation, position, direction)\n        {\n            FilterPre = pre,\n            FilterPost = post,\n            Lambda = Real.MaxValue\n        };\n\n        bool hit = QuerySweep(support, sweep, out var result);\n        proxy = result.Entity;\n        pointA = result.PointA;\n        pointB = result.PointB;\n        normal = result.Normal;\n        lambda = result.Lambda;\n        return hit;\n    }\n\n    /// <summary>\n    /// Bounded variant of <see cref=\"SweepCast{T}(in T, in JQuaternion, in JVector, in JVector, SweepCastFilterPre?, SweepCastFilterPost?, out IDynamicTreeProxy?, out JVector, out JVector, out JVector, out Real)\"/>\n    /// that limits the sweep to <paramref name=\"maxLambda\"/>.\n    /// </summary>\n    /// <param name=\"maxLambda\">Maximum sweep parameter to consider along <paramref name=\"direction\"/>.</param>\n    public bool SweepCast<T>(in T support, in JQuaternion orientation, in JVector position, in JVector direction, Real maxLambda,\n        SweepCastFilterPre? pre, SweepCastFilterPost? post,\n        out IDynamicTreeProxy? proxy, out JVector pointA, out JVector pointB, out JVector normal, out Real lambda)\n        where T : ISupportMappable\n    {\n        ShapeHelper.CalculateBoundingBox(support, orientation, position, out JBoundingBox box);\n\n        SweepQuery sweep = new(box, orientation, position, direction)\n        {\n            FilterPre = pre,\n            FilterPost = post,\n            Lambda = maxLambda\n        };\n\n        bool hit = QuerySweep(support, sweep, out var result);\n        proxy = result.Entity;\n        pointA = result.PointA;\n        pointB = result.PointB;\n        normal = result.Normal;\n        lambda = result.Lambda;\n        return hit;\n    }\n\n    private static bool SweepBox(in JBoundingBox movingBox, in JVector translation, in TreeBox targetBox, out Real enter)\n    {\n        JVector extents = (movingBox.Max - movingBox.Min) * (Real)0.5;\n        JVector center = (movingBox.Max + movingBox.Min) * (Real)0.5;\n\n        JBoundingBox expanded = new(targetBox.Min - extents, targetBox.Max + extents);\n        return expanded.RayIntersect(center, translation, out enter);\n    }\n\n    private bool QuerySweep<T>(in T support, in SweepQuery sweep, out SweepCastResult result)\n        where T : ISupportMappable\n    {\n        result = new SweepCastResult\n        {\n            Lambda = sweep.Lambda\n        };\n\n        if (root == NullNode)\n        {\n            return false;\n        }\n\n        _stack ??= new Stack<int>(256);\n        _stack.Push(root);\n\n        while (_stack.Count > 0)\n        {\n            int index = _stack.Pop();\n            ref Node node = ref nodes[index];\n\n            if (node.IsLeaf)\n            {\n                if (node.Proxy is not ISweepTestable sweepCastable) continue;\n                if (sweep.FilterPre != null && !sweep.FilterPre(node.Proxy!)) continue;\n\n                Unsafe.SkipInit(out SweepCastResult res);\n                bool hit = sweepCastable.Sweep(support,\n                    sweep.Orientation, sweep.Position, sweep.Direction,\n                    out res.PointA, out res.PointB, out res.Normal, out res.Lambda);\n                res.Entity = node.Proxy;\n\n                if (!hit || res.Lambda > result.Lambda) continue;\n                if (sweep.FilterPost != null && !sweep.FilterPost(res)) continue;\n\n                result = res;\n                continue;\n            }\n\n            ref Node leftNode = ref nodes[node.Left];\n            ref Node rightNode = ref nodes[node.Right];\n\n            bool leftHit = SweepBox(sweep.Box, sweep.Direction, leftNode.ExpandedBox, out Real leftEnter);\n            bool rightHit = SweepBox(sweep.Box, sweep.Direction, rightNode.ExpandedBox, out Real rightEnter);\n\n            if (leftEnter > result.Lambda) leftHit = false;\n            if (rightEnter > result.Lambda) rightHit = false;\n\n            if (leftHit && rightHit)\n            {\n                if (leftEnter < rightEnter)\n                {\n                    _stack.Push(node.Right);\n                    _stack.Push(node.Left);\n                }\n                else\n                {\n                    _stack.Push(node.Left);\n                    _stack.Push(node.Right);\n                }\n            }\n            else\n            {\n                if (leftHit) _stack.Push(node.Left);\n                if (rightHit) _stack.Push(node.Right);\n            }\n        }\n\n        _stack.Clear();\n        return result.Entity != null;\n    }\n\n}\n"
  },
  {
    "path": "src/Jitter2/Collision/DynamicTree/DynamicTree.cs",
    "content": "/*\n * Jitter2 Physics Library\n * (c) Thorben Linneweber and contributors\n * SPDX-License-Identifier: MIT\n */\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Runtime.CompilerServices;\nusing Jitter2.DataStructures;\nusing Jitter2.LinearMath;\nusing Jitter2.Parallelization;\n\nnamespace Jitter2.Collision;\n\n/// <summary>\n/// Represents a dynamic AABB tree for broadphase collision detection.\n/// </summary>\n/// <remarks>\n/// Uses a bounding volume hierarchy with Surface Area Heuristic (SAH) for O(log n)\n/// insertion and removal. Supports incremental updates for moving objects.\n/// </remarks>\npublic partial class DynamicTree\n{\n    private struct OverlapEnumerationParam\n    {\n        public Action<IDynamicTreeProxy, IDynamicTreeProxy> Action;\n        public Parallel.Batch Batch;\n    }\n\n    private readonly PartitionedSet<IDynamicTreeProxy> proxies = [];\n\n    private readonly SlimBag<IDynamicTreeProxy> movedProxies = [];\n\n    /// <summary>\n    /// Gets a read-only view of all proxies registered with this tree.\n    /// </summary>\n    public ReadOnlyPartitionedSet<IDynamicTreeProxy> Proxies => new(proxies);\n\n    private readonly PairHashSet potentialPairs = [];\n\n    /// <summary>\n    /// Sentinel value indicating a null/invalid node index.\n    /// </summary>\n    public const int NullNode = -1;\n\n    /// <summary>\n    /// Initial capacity of the internal node array.\n    /// </summary>\n    public const int InitialSize = 1024;\n\n    /// <summary>\n    /// Fraction of the potential pairs hash set to scan per update for pruning invalid entries.\n    /// A value of 128 means 1/128th of the hash set is scanned each update.\n    /// </summary>\n    public const int PruningFraction = 128;\n\n    /// <summary>\n    /// Specifies the factor by which the bounding box in the dynamic tree structure is expanded. The expansion is calculated as\n    /// <see cref=\"IDynamicTreeProxy.Velocity\"/> * ExpandFactor * (1 + alpha), where alpha is a pseudo-random number in the range [0, 1).\n    /// </summary>\n    public const Real ExpandFactor = (Real)0.1;\n\n    /// <summary>\n    /// Specifies a small additional expansion of the bounding box which is constant.\n    /// </summary>\n    public const Real ExpandEps = (Real)0.1;\n\n    /// <summary>\n    /// Represents a node in the AABB tree.\n    /// </summary>\n    public struct Node\n    {\n        /// <summary>Index of the left child node, or <see cref=\"NullNode\"/> if this is a leaf.</summary>\n        public int Left;\n\n        /// <summary>Index of the right child node, or <see cref=\"NullNode\"/> if this is a leaf.</summary>\n        public int Right;\n\n        /// <summary>Index of the parent node, or <see cref=\"NullNode\"/> if this is the root.</summary>\n        public int Parent;\n\n        /// <summary>\n        /// The expanded bounding box of this node, used for broadphase culling.\n        /// For leaf nodes, this is the proxy's bounding box expanded by velocity and a margin.\n        /// For internal nodes, this is the union of its children's boxes.\n        /// </summary>\n        public TreeBox ExpandedBox;\n\n        /// <summary>\n        /// The proxy associated with this node, or <c>null</c> for internal nodes.\n        /// </summary>\n        public IDynamicTreeProxy? Proxy;\n\n        /// <summary>\n        /// When set, forces the node to be updated in the next <see cref=\"DynamicTree.Update\"/> call,\n        /// even if its bounding box hasn't changed.\n        /// </summary>\n        public bool ForceUpdate;\n\n        /// <summary>\n        /// Returns <c>true</c> if this is a leaf node (has an associated proxy).\n        /// </summary>\n        public readonly bool IsLeaf => Proxy != null;\n    }\n\n    private Node[] nodes = new Node[InitialSize];\n\n    /// <summary>\n    /// Read-only view of the internal tree nodes for debugging or visualization.\n    /// Do not cache the returned span across tree operations.\n    /// </summary>\n    public ReadOnlySpan<Node> Nodes => nodes.AsSpan(0, nodePointer + 1);\n\n    private readonly Stack<int> freeNodes = [];\n    private int nodePointer = -1;\n    private int root = NullNode;\n\n    /// <summary>\n    /// Gets the index of the root node, or <see cref=\"NullNode\"/> if the tree is empty.\n    /// </summary>\n    public int Root => root;\n\n    private Func<IDynamicTreeProxy, IDynamicTreeProxy, bool> filter = null!;\n\n    /// <summary>\n    /// Gets or sets the filter function used to exclude proxy pairs from collision detection.\n    /// </summary>\n    /// <remarks>\n    /// The filter is called during overlap enumeration. Return <c>false</c> to exclude a pair.\n    /// In Jitter, this is typically used to exclude shapes belonging to the same rigid body.\n    /// </remarks>\n    /// <exception cref=\"ArgumentNullException\">Thrown when the value is null.</exception>\n    public Func<IDynamicTreeProxy, IDynamicTreeProxy, bool> Filter\n    {\n        get => filter;\n        set => filter = value ?? throw new ArgumentNullException(nameof(value));\n    }\n\n    private readonly Action<OverlapEnumerationParam> enumerateOverlaps;\n    private readonly Action<Parallel.Batch> updateBoundingBoxes;\n    private readonly Action<Parallel.Batch> scanForMovedProxies;\n    private readonly Action<Parallel.Batch> scanForOverlaps;\n\n    private readonly Random random = new(1234);\n    private readonly Func<double> rndFunc;\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"DynamicTree\"/> class.\n    /// </summary>\n    /// <param name=\"filter\">\n    /// A function that returns <c>false</c> to exclude a proxy pair from collision detection.\n    /// See <see cref=\"Filter\"/>.\n    /// </param>\n    public DynamicTree(Func<IDynamicTreeProxy, IDynamicTreeProxy, bool> filter)\n    {\n        enumerateOverlaps = EnumerateOverlapsCallback;\n        updateBoundingBoxes = UpdateBoundingBoxesCallback;\n        scanForMovedProxies = ScanForMovedProxies;\n        scanForOverlaps = ScanForOverlapsCallback;\n\n        rndFunc = () => random.NextDouble();\n\n        Filter = filter;\n    }\n\n    /// <summary>\n    /// Profiling buckets for <see cref=\"DebugTimings\"/>, representing stages of <see cref=\"Update\"/>.\n    /// </summary>\n    public enum Timings\n    {\n        /// <summary>Time spent removing stale pairs from the potential pairs set.</summary>\n        PruneInvalidPairs,\n\n        /// <summary>Time spent updating proxy bounding boxes.</summary>\n        UpdateBoundingBoxes,\n\n        /// <summary>Time spent scanning for proxies that moved outside their expanded boxes.</summary>\n        ScanMoved,\n\n        /// <summary>Time spent reinserting moved proxies into the tree.</summary>\n        UpdateProxies,\n\n        /// <summary>Time spent scanning for new overlapping pairs.</summary>\n        ScanOverlaps,\n\n        /// <summary>Sentinel value for array sizing. Not a real timing bucket.</summary>\n        Last\n    }\n\n    private readonly double[] debugTimings = new double[(int)Timings.Last];\n\n    /// <summary>\n    /// Contains timings for the stages of the last call to <see cref=\"Update\"/>.\n    /// Values are in milliseconds. Index using <c>(int)Timings.XYZ</c>.\n    /// </summary>\n    public ReadOnlySpan<double> DebugTimings => debugTimings;\n\n    /// <summary>\n    /// Gets the number of updated proxies during the last call to <see cref=\"Update\"/>.\n    /// </summary>\n    public int UpdatedProxyCount => movedProxies.Count;\n\n    /// <summary>\n    /// Gets the total allocated slot count and the number of entries in the internal hash set\n    /// used to store potential overlaps.\n    /// </summary>\n    public (int TotalSize, int Count) HashSetInfo => (potentialPairs.Slots.Length, potentialPairs.Count);\n\n    private void EnumerateOverlapsCallback(OverlapEnumerationParam parameter)\n    {\n        var batch = parameter.Batch;\n\n        for (int e = batch.Start; e < batch.End; e++)\n        {\n            var node = potentialPairs.Slots[e];\n            if (node.ID == 0) continue;\n\n            var proxyA = nodes[node.ID1].Proxy;\n            var proxyB = nodes[node.ID2].Proxy;\n\n            if(proxyA == null || proxyB == null) continue;\n            if(!Filter(proxyA, proxyB)) continue;\n\n            if (!JBoundingBox.Disjoint(proxyA.WorldBoundingBox, proxyB.WorldBoundingBox))\n            {\n                parameter.Action(proxyA, proxyB);\n            }\n        }\n    }\n\n    /// <summary>\n    /// Enumerates all potential collision pairs and invokes the specified action for each.\n    /// </summary>\n    /// <param name=\"action\">The action to invoke for each overlapping pair.</param>\n    /// <param name=\"multiThread\">If <c>true</c>, uses multithreading for enumeration.</param>\n    public void EnumerateOverlaps(Action<IDynamicTreeProxy, IDynamicTreeProxy> action, bool multiThread = false)\n    {\n        OverlapEnumerationParam overlapEnumerationParam;\n        overlapEnumerationParam.Action = action;\n\n        int slotsLength = potentialPairs.Slots.Length;\n\n        if (multiThread)\n        {\n            var tpi = ThreadPool.Instance;\n\n            // Typically, this is the first multithreaded phase of a simulation step.\n            // Threads may still be asleep, so we use multiple tasks per thread\n            // to improve load distribution as they wake up.\n            const int taskMultiplier = 6;\n            int taskCount = tpi.ThreadCount * taskMultiplier;\n\n            for (int i = 0; i < taskCount; i++)\n            {\n                Parallel.GetBounds(slotsLength, taskCount, i, out int start, out int end);\n                overlapEnumerationParam.Batch = new Parallel.Batch(start, end);\n                ThreadPool.Instance.AddTask(enumerateOverlaps, overlapEnumerationParam);\n            }\n\n            tpi.Execute();\n        }\n        else\n        {\n            overlapEnumerationParam.Batch = new Parallel.Batch(0, slotsLength);\n            EnumerateOverlapsCallback(overlapEnumerationParam);\n        }\n    }\n\n    /// <summary>\n    /// Updates all active proxies in the tree.\n    /// </summary>\n    /// <param name=\"multiThread\">If <c>true</c>, uses multithreading for the update.</param>\n    /// <param name=\"dt\">The timestep in seconds, used for velocity-based bounding box expansion.</param>\n    public void Update(bool multiThread, Real dt)\n    {\n        long time = Stopwatch.GetTimestamp();\n        double invFrequency = 1.0d / Stopwatch.Frequency;\n\n        void SetTime(Timings type)\n        {\n            long ctime = Stopwatch.GetTimestamp();\n            double delta = (ctime - time) * 1000.0d;\n            debugTimings[(int)type] = delta * invFrequency;\n            time = ctime;\n        }\n\n        this.stepDt = dt;\n\n        Tracer.ProfileBegin(TraceName.PruneInvalidPairs);\n        PruneInvalidPairs();\n        Tracer.ProfileEnd(TraceName.PruneInvalidPairs);\n        SetTime(Timings.PruneInvalidPairs);\n\n        if (multiThread)\n        {\n            Tracer.ProfileBegin(TraceName.UpdateBoundingBoxes);\n            proxies.ParallelForBatch(256, updateBoundingBoxes);\n            Tracer.ProfileEnd(TraceName.UpdateBoundingBoxes);\n            SetTime(Timings.UpdateBoundingBoxes);\n\n            Tracer.ProfileBegin(TraceName.ScanMoved);\n            movedProxies.Clear();\n            proxies.ParallelForBatch(24, scanForMovedProxies);\n            Tracer.ProfileEnd(TraceName.ScanMoved);\n            SetTime(Timings.ScanMoved);\n\n            Tracer.ProfileBegin(TraceName.UpdateProxies);\n            for (int i = 0; i < movedProxies.Count; i++)\n            {\n                InternalAddRemoveProxy(movedProxies[i]);\n            }\n            Tracer.ProfileEnd(TraceName.UpdateProxies);\n            SetTime(Timings.UpdateProxies);\n\n            Tracer.ProfileBegin(TraceName.ScanOverlaps);\n            movedProxies.ParallelForBatch(24, scanForOverlaps);\n            Tracer.ProfileEnd(TraceName.ScanOverlaps);\n            SetTime(Timings.ScanOverlaps);\n        }\n        else\n        {\n            Tracer.ProfileBegin(TraceName.UpdateBoundingBoxes);\n            var batch = new Parallel.Batch(0, proxies.ActiveCount);\n            UpdateBoundingBoxesCallback(batch);\n            Tracer.ProfileEnd(TraceName.UpdateBoundingBoxes);\n            SetTime(Timings.UpdateBoundingBoxes);\n\n            Tracer.ProfileBegin(TraceName.ScanMoved);\n            movedProxies.Clear();\n            ScanForMovedProxies(batch);\n            Tracer.ProfileEnd(TraceName.ScanMoved);\n            SetTime(Timings.ScanMoved);\n\n            Tracer.ProfileBegin(TraceName.UpdateProxies);\n            for (int i = 0; i < movedProxies.Count; i++)\n            {\n                InternalAddRemoveProxy(movedProxies[i]);\n            }\n            Tracer.ProfileEnd(TraceName.UpdateProxies);\n            SetTime(Timings.UpdateProxies);\n\n            Tracer.ProfileBegin(TraceName.ScanOverlaps);\n            ScanForOverlapsCallback(new Parallel.Batch(0, movedProxies.Count));\n            Tracer.ProfileEnd(TraceName.ScanOverlaps);\n            SetTime(Timings.ScanOverlaps);\n        }\n\n        // Make sure we do not hold too many dangling references\n        // in the internal array of the SlimBag<T> data structure which might\n        // prevent GC. But do only free them one-by-one to prevent overhead.\n        movedProxies.TrackAndNullOutOne();\n    }\n\n    private Real stepDt;\n\n    private void UpdateBoundingBoxesCallback(Parallel.Batch batch)\n    {\n        for (int i = batch.Start; i < batch.End; i++)\n        {\n            var proxy = proxies[i];\n            if (proxy is IUpdatableBoundingBox sh) sh.UpdateWorldBoundingBox(stepDt);\n        }\n    }\n\n    /// <summary>\n    /// Forces an immediate update of a single proxy in the tree.\n    /// </summary>\n    /// <typeparam name=\"T\">The proxy type.</typeparam>\n    /// <param name=\"proxy\">The proxy to update.</param>\n    public void Update<T>(T proxy) where T : class, IDynamicTreeProxy\n    {\n        if (proxy is IUpdatableBoundingBox sh) sh.UpdateWorldBoundingBox();\n        OverlapCheckRemove(root, proxy.NodePtr);\n        InternalRemoveProxy(proxy);\n        InternalAddProxy(proxy);\n        OverlapCheckAdd(root, proxy.NodePtr);\n    }\n\n    /// <summary>\n    /// Adds a proxy to the tree.\n    /// </summary>\n    /// <typeparam name=\"T\">The proxy type.</typeparam>\n    /// <param name=\"proxy\">The proxy to add.</param>\n    /// <param name=\"active\">If <c>true</c>, the proxy is tracked for movement each update.</param>\n    /// <exception cref=\"InvalidOperationException\">Thrown if the proxy is already in this tree.</exception>\n    public void AddProxy<T>(T proxy, bool active = true) where T : class, IDynamicTreeProxy\n    {\n        if (proxies.Contains(proxy))\n        {\n            throw new InvalidOperationException(\n                $\"The proxy '{proxy}' has already been added to this tree instance.\");\n        }\n\n        // 2^53 (approx 9e15) is the limit where double-precision values lose integer precision\n        // (i.e., x + 1.0 == x). Beyond this surface area, the Surface Area Heuristic (SAH)\n        // cannot detect small changes, causing the tree balancing to degrade.\n        //\n        // Note: Since TreeBox calculates surface area using 'double', this assertion\n        // is valid and necessary for both Single (float) and Double (double) precision builds.\n        if (proxy.WorldBoundingBox.GetSurfaceArea() > 9.007e15)\n        {\n            throw new InvalidOperationException(\n                $\"Added extremely large proxy to dynamic tree. Surface Area exceeds double precision limits (2^53).\");\n        }\n\n        InternalAddProxy(proxy);\n        OverlapCheckAdd(root, proxy.NodePtr);\n        proxies.Add(proxy, active);\n    }\n\n    /// <summary>\n    /// Checks whether the specified proxy is currently active.\n    /// </summary>\n    /// <typeparam name=\"T\">The proxy type.</typeparam>\n    /// <param name=\"proxy\">The proxy to check.</param>\n    /// <returns><c>true</c> if the proxy is active; otherwise, <c>false</c>.</returns>\n    public bool IsActive<T>(T proxy) where T : class, IDynamicTreeProxy\n    {\n        return proxies.IsActive(proxy);\n    }\n\n    /// <summary>\n    /// Marks a proxy as active, causing it to be tracked for movement during updates.\n    /// </summary>\n    /// <typeparam name=\"T\">The proxy type.</typeparam>\n    /// <param name=\"proxy\">The proxy to activate.</param>\n    public void ActivateProxy<T>(T proxy) where T : class, IDynamicTreeProxy\n    {\n        if (proxies.MoveToActive(proxy))\n        {\n            nodes[proxy.NodePtr].ForceUpdate = true;\n        }\n    }\n\n    /// <summary>\n    /// Marks a proxy as inactive, assuming it will not move outside its expanded bounding box.\n    /// </summary>\n    /// <typeparam name=\"T\">The proxy type.</typeparam>\n    /// <param name=\"proxy\">The proxy to deactivate.</param>\n    public void DeactivateProxy<T>(T proxy) where T : class, IDynamicTreeProxy\n    {\n        proxies.MoveToInactive(proxy);\n    }\n\n    /// <summary>\n    /// Removes a proxy from the tree.\n    /// </summary>\n    /// <param name=\"proxy\">The proxy to remove.</param>\n    /// <exception cref=\"InvalidOperationException\">Thrown if the proxy is not in this tree.</exception>\n    public void RemoveProxy(IDynamicTreeProxy proxy)\n    {\n        if (!proxies.Contains(proxy))\n        {\n            throw new InvalidOperationException(\n                $\"The proxy '{proxy}' is not registered with this tree instance.\");\n        }\n\n        OverlapCheckRemove(root, proxy.NodePtr);\n        InternalRemoveProxy(proxy);\n        proxy.NodePtr = NullNode;\n        proxies.Remove(proxy);\n    }\n\n    /// <summary>\n    /// Calculates the SAH cost of the tree (sum of all node surface areas).\n    /// </summary>\n    /// <returns>The total cost. Lower values indicate a more balanced tree.</returns>\n    public double CalculateCost()\n    {\n        return Cost(ref nodes[root]);\n    }\n\n    /// <summary>\n    /// Enumerates all axis-aligned bounding boxes in the tree.\n    /// </summary>\n    /// <param name=\"action\">The action to perform on each bounding box and node height in the tree.</param>\n    public void EnumerateTreeBoxes(Action<TreeBox, int> action)\n    {\n        if (root == -1) return;\n        EnumerateTreeBoxes(ref nodes[root], action);\n    }\n\n    private void EnumerateTreeBoxes(ref Node node, Action<TreeBox, int> action, int depth = 1)\n    {\n        action(node.ExpandedBox, depth);\n        if (node.IsLeaf) return;\n\n        EnumerateTreeBoxes(ref nodes[node.Left], action, depth + 1);\n        EnumerateTreeBoxes(ref nodes[node.Right], action, depth + 1);\n    }\n\n    private uint stepper;\n\n    /// <summary>\n    /// Removes entries from the internal bookkeeping which are both marked as inactive or\n    /// whose expanded bounding box do not overlap any longer.\n    /// Only searches a small subset of all elements per call to reduce overhead.\n    /// </summary>\n    private void PruneInvalidPairs()\n    {\n        stepper += 1;\n\n        for (int i = 0; i < potentialPairs.Slots.Length / PruningFraction; i++)\n        {\n            int t = (int)((i * PruningFraction + stepper) % potentialPairs.Slots.Length);\n\n            var n = potentialPairs.Slots[t];\n            if (n.ID == 0) continue;\n\n            var proxyA = nodes[n.ID1].Proxy;\n            var proxyB = nodes[n.ID2].Proxy;\n\n            if (proxyA != null && proxyB != null &&\n                !TreeBox.Disjoint(nodes[proxyA.NodePtr].ExpandedBox, nodes[proxyB.NodePtr].ExpandedBox) &&\n                (IsActive(proxyA) || IsActive(proxyB)))\n            {\n                continue;\n            }\n\n            potentialPairs.Remove(t);\n            i -= 1;\n        }\n    }\n\n    [ThreadStatic] private static Stack<int>? _stack;\n\n    /// <summary>\n    /// Queries the tree for proxies intersecting a ray and appends all hits to the specified sink.\n    /// </summary>\n    /// <typeparam name=\"TSink\">The sink type receiving all intersected proxies.</typeparam>\n    /// <param name=\"hits\">The sink receiving all intersected proxies.</param>\n    /// <param name=\"rayOrigin\">The origin of the ray.</param>\n    /// <param name=\"rayDirection\">The direction of the ray.</param>\n    public void Query<TSink>(ref TSink hits, in JVector rayOrigin, in JVector rayDirection)\n        where TSink : ISink<IDynamicTreeProxy>\n    {\n        if (root == NullNode) return;\n\n        _stack ??= new Stack<int>(256);\n        _stack.Push(root);\n\n        while (_stack.Count > 0)\n        {\n            int index = _stack.Pop();\n            ref Node node = ref nodes[index];\n\n            if (node.IsLeaf)\n            {\n                if (node.Proxy!.WorldBoundingBox.RayIntersect(rayOrigin, rayDirection, out _))\n                {\n                    hits.Add(node.Proxy);\n                }\n\n                continue;\n            }\n\n            int left = node.Left;\n            int right = node.Right;\n\n            if (nodes[left].ExpandedBox.RayIntersect(rayOrigin, rayDirection, out _))\n            {\n                _stack.Push(left);\n            }\n\n            if (nodes[right].ExpandedBox.RayIntersect(rayOrigin, rayDirection, out _))\n            {\n                _stack.Push(right);\n            }\n        }\n\n        _stack.Clear();\n    }\n\n    /// <summary>\n    /// Queries the tree for proxies overlapping an axis-aligned bounding box and appends all hits to the specified sink.\n    /// </summary>\n    /// <typeparam name=\"TSink\">The sink type receiving all overlapping proxies.</typeparam>\n    /// <param name=\"hits\">The sink receiving all overlapping proxies.</param>\n    /// <param name=\"box\">The bounding box to query.</param>\n    public void Query<TSink>(ref TSink hits, in JBoundingBox box)\n        where TSink : ISink<IDynamicTreeProxy>\n    {\n        if (root == NullNode) return;\n\n        var sbox = new TreeBox(box);\n\n        _stack ??= new Stack<int>(256);\n        _stack.Push(root);\n\n        while (_stack.Count > 0)\n        {\n            int index = _stack.Pop();\n            ref Node node = ref nodes[index];\n\n            if (node.IsLeaf)\n            {\n                if (!JBoundingBox.Disjoint(node.Proxy!.WorldBoundingBox, box))\n                {\n                    hits.Add(node.Proxy);\n                }\n\n                continue;\n            }\n\n            int left = node.Left;\n            int right = node.Right;\n\n            if (!TreeBox.Disjoint(nodes[left].ExpandedBox, sbox))\n            {\n                _stack.Push(left);\n            }\n\n            if (!TreeBox.Disjoint(nodes[right].ExpandedBox, sbox))\n            {\n                _stack.Push(right);\n            }\n        }\n\n        _stack.Clear();\n    }\n\n    /// <summary>\n    /// Queries the tree for proxies intersecting a ray.\n    /// </summary>\n    /// <typeparam name=\"T\">The collection type.</typeparam>\n    /// <param name=\"hits\">Collection to store intersected proxies.</param>\n    /// <param name=\"rayOrigin\">The origin of the ray.</param>\n    /// <param name=\"rayDirection\">The direction of the ray.</param>\n    public void Query<T>(T hits, in JVector rayOrigin, in JVector rayDirection)\n        where T : class, ICollection<IDynamicTreeProxy>\n    {\n        var sink = new CollectionSink<IDynamicTreeProxy>(hits);\n        Query(ref sink, in rayOrigin, in rayDirection);\n    }\n\n    /// <summary>\n    /// Queries the tree for proxies overlapping an axis-aligned bounding box.\n    /// </summary>\n    /// <typeparam name=\"T\">The collection type.</typeparam>\n    /// <param name=\"hits\">Collection to store overlapping proxies.</param>\n    /// <param name=\"box\">The bounding box to query.</param>\n    public void Query<T>(T hits, in JBoundingBox box)\n        where T : class, ICollection<IDynamicTreeProxy>\n    {\n        var sink = new CollectionSink<IDynamicTreeProxy>(hits);\n        Query(ref sink, in box);\n    }\n\n    readonly List<IDynamicTreeProxy> tempList = new();\n\n    /// <summary>\n    /// Optimizes the tree structure by randomly reinserting proxies.\n    /// </summary>\n    /// <param name=\"sweeps\">Number of optimization passes. Must be greater than zero.</param>\n    /// <param name=\"chance\">Probability of reinserting each proxy per sweep. Range: [0, 1].</param>\n    /// <param name=\"incremental\">If <c>false</c>, all proxies are reinserted in random order on the first sweep.</param>\n    public void Optimize(int sweeps = 100, Real chance = (Real)0.01, bool incremental = false)\n    {\n        Optimize(rndFunc, sweeps, chance, incremental);\n    }\n\n    /// <inheritdoc cref=\"Optimize(int, Real, bool)\"/>\n    /// <param name=\"getNextRandom\">A function returning random values in [0, 1).</param>\n    public void Optimize(Func<double> getNextRandom, int sweeps, Real chance, bool incremental)\n    {\n        if (sweeps <= 0) throw new ArgumentOutOfRangeException(nameof(sweeps), \"Sweeps must be greater than zero.\");\n        if (chance is < 0 or > 1) throw new ArgumentOutOfRangeException(nameof(chance), \"Chance must be between 0 and 1.\");\n\n        for (int e = 0; e < sweeps; e++)\n        {\n            bool takeAll = (e == 0) && !incremental;\n\n            for (int i = 0; i < proxies.Count; i++)\n            {\n                if (!takeAll && getNextRandom() > chance) continue;\n\n                var proxy = proxies[i];\n                tempList.Add(proxy);\n                OverlapCheckRemove(root, proxy.NodePtr);\n                InternalRemoveProxy(proxy);\n            }\n\n            // Fisher-Yates shuffle\n            int n = tempList.Count;\n\n            for (int i = n - 1; i > 0; i--)\n            {\n                double scaledValue = getNextRandom() * (i + 1);\n                int j = (int)scaledValue;\n                (tempList[i], tempList[j]) = (tempList[j], tempList[i]);\n            }\n\n            foreach (var proxy in tempList)\n            {\n                InternalAddProxy(proxy);\n                OverlapCheckAdd(root, proxy.NodePtr);\n            }\n\n            tempList.Clear();\n        }\n\n        if (!incremental)\n        {\n            // In non-incremental mode, the first sweep processes all proxies and may\n            // cause tempList to grow significantly. Since we're unlikely to need that\n            // capacity again, we trim the excess to reduce memory usage.\n            tempList.TrimExcess();\n        }\n    }\n\n    private int AllocateNode()\n    {\n        if (freeNodes.Count > 0)\n        {\n            return freeNodes.Pop();\n        }\n\n        nodePointer += 1;\n        if (nodePointer == nodes.Length)\n        {\n            Array.Resize(ref nodes, nodes.Length * 2);\n            Logger.Information(\"{0}: Resized array of tree to {1} elements.\", nameof(DynamicTree), nodes.Length);\n        }\n\n        return nodePointer;\n    }\n\n    private void FreeNode(int node)\n    {\n        nodes[node].Proxy = null!;\n        freeNodes.Push(node);\n    }\n\n    private double Cost(ref Node node)\n    {\n        if (node.IsLeaf)\n        {\n            return node.ExpandedBox.GetSurfaceArea();\n        }\n\n        return node.ExpandedBox.GetSurfaceArea() + Cost(ref nodes[node.Left]) + Cost(ref nodes[node.Right]);\n    }\n\n    private void OverlapCheckAdd(int index, int node)\n    {\n        if (nodes[index].IsLeaf)\n        {\n            if (node == index) return;\n            if (!Filter(nodes[node].Proxy!, nodes[index].Proxy!)) return;\n            potentialPairs.ConcurrentAdd(new PairHashSet.Pair(index, node));\n        }\n        else\n        {\n            int child1 = nodes[index].Left;\n            int child2 = nodes[index].Right;\n\n            if (!TreeBox.Disjoint(nodes[child1].ExpandedBox, nodes[node].ExpandedBox))\n                OverlapCheckAdd(child1, node);\n\n            if (!TreeBox.Disjoint(nodes[child2].ExpandedBox, nodes[node].ExpandedBox))\n                OverlapCheckAdd(child2, node);\n        }\n    }\n\n    private void OverlapCheckRemove(int index, int node)\n    {\n        if (nodes[index].IsLeaf)\n        {\n            if (node == index) return;\n            if (!Filter(nodes[node].Proxy!, nodes[index].Proxy!)) return;\n            potentialPairs.Remove(new PairHashSet.Pair(index, node));\n        }\n        else\n        {\n            int child1 = nodes[index].Left;\n            int child2 = nodes[index].Right;\n\n            if (!TreeBox.Disjoint(nodes[child1].ExpandedBox, nodes[node].ExpandedBox))\n                OverlapCheckRemove(child1, node);\n\n            if (!TreeBox.Disjoint(nodes[child2].ExpandedBox, nodes[node].ExpandedBox))\n                OverlapCheckRemove(child2, node);\n        }\n    }\n\n    private void ScanForMovedProxies(Parallel.Batch batch)\n    {\n        for (int i = batch.Start; i < batch.End; i++)\n        {\n            var proxy = proxies[i];\n\n            ref var node = ref nodes[proxy.NodePtr];\n\n            if (node.ForceUpdate || !node.ExpandedBox.Contains(proxy.WorldBoundingBox))\n            {\n                node.ForceUpdate = false;\n                movedProxies.ConcurrentAdd(proxy);\n            }\n        }\n    }\n\n    private void ScanForOverlapsCallback(Parallel.Batch batch)\n    {\n        for (int i = batch.Start; i < batch.End; i++)\n        {\n            OverlapCheckAdd(root, movedProxies[i].NodePtr);\n        }\n    }\n\n    private static void ExpandBoundingBox(ref JBoundingBox box, in JVector direction)\n    {\n        if (direction.X < (Real)0.0) box.Min.X += direction.X;\n        else box.Max.X += direction.X;\n\n        if (direction.Y < (Real)0.0) box.Min.Y += direction.Y;\n        else box.Max.Y += direction.Y;\n\n        if (direction.Z < (Real)0.0) box.Min.Z += direction.Z;\n        else box.Max.Z += direction.Z;\n\n        box.Min -= new JVector(ExpandEps);\n        box.Max += new JVector(ExpandEps);\n    }\n\n    private void InternalAddRemoveProxy(IDynamicTreeProxy proxy)\n    {\n        JBoundingBox box = proxy.WorldBoundingBox;\n\n        // We store the parent of the node which gets removed. This\n        // information is later used to reinsert the node *keeping updates local*.\n        int parent = RemoveLeaf(proxy.NodePtr);\n\n        int index = proxy.NodePtr;\n\n        Real pseudoRandomExt = (Real)random.NextDouble();\n\n        ExpandBoundingBox(ref box, proxy.Velocity * ExpandFactor * ((Real)1.0 + pseudoRandomExt));\n\n        nodes[index].Proxy = proxy;\n        proxy.NodePtr = index;\n\n        nodes[index].ExpandedBox = new TreeBox(box);\n\n        // InsertLeaf takes 'where' as a hint, i.e. it still walks up the tree until\n        // the new node is fully contained. Note: The insertion node could also be found when searching\n        // from the root, since the search always descents into child nodes fully containing the new node.\n        InsertLeaf(index, parent);\n    }\n\n    private void InternalAddProxy(IDynamicTreeProxy proxy)\n    {\n        JBoundingBox box = proxy.WorldBoundingBox;\n\n        int index = AllocateNode();\n\n        nodes[index].Proxy = proxy;\n        proxy.NodePtr = index;\n\n        nodes[index].ExpandedBox = new TreeBox(box);\n\n        InsertLeaf(index, root);\n    }\n\n    private void InternalRemoveProxy(IDynamicTreeProxy proxy)\n    {\n        Debug.Assert(nodes[proxy.NodePtr].IsLeaf);\n        RemoveLeaf(proxy.NodePtr);\n        FreeNode(proxy.NodePtr);\n    }\n\n    private int RemoveLeaf(int node)\n    {\n        if (node == root)\n        {\n            root = NullNode;\n            return NullNode;\n        }\n\n        int parent = nodes[node].Parent;\n        int grandParent = nodes[parent].Parent;\n\n        int sibling = nodes[parent].Left == node ? nodes[parent].Right : nodes[parent].Left;\n\n        if (grandParent == NullNode)\n        {\n            root = sibling;\n            nodes[sibling].Parent = NullNode;\n            FreeNode(parent);\n            return root;\n        }\n\n        if (nodes[grandParent].Left == parent) nodes[grandParent].Left = sibling;\n        else nodes[grandParent].Right = sibling;\n\n        nodes[sibling].Parent = grandParent;\n        FreeNode(parent);\n\n        int index = grandParent;\n        while (index != NullNode)\n        {\n            int left = nodes[index].Left;\n            int rght = nodes[index].Right;\n\n            ref TreeBox indexNode = ref nodes[index].ExpandedBox;\n\n            TreeBox treeBoxBefore = indexNode;\n            TreeBox.CreateMerged(nodes[left].ExpandedBox, nodes[rght].ExpandedBox, out indexNode);\n            if(TreeBox.Equals(treeBoxBefore, indexNode)) goto early_out;\n\n            index = nodes[index].Parent;\n        }\n\n        early_out:\n        return grandParent;\n    }\n\n    private readonly PriorityQueue<int, double> priorityQueue = new();\n\n    /// <summary>\n    /// Finds the exact best insertion point for <paramref name=\"node\"/> in the BVH,\n    /// starting from <paramref name=\"where\"/>, using a priority-queue driven\n    /// Surface Area Heuristic (SAH) search. This method guarantees the same\n    /// result as a brute-force search, unlike the faster greedy version <see cref=\"FindBestGreedy\"/>.\n    /// </summary>\n    [MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)]\n    private int FindBest(int node, int where)\n    {\n        ref Node nb = ref nodes[node];\n\n        double rootMergedArea = TreeBox.MergedSurface(nodes[where].ExpandedBox, nb.ExpandedBox);\n\n        double bestCost = double.MaxValue;\n        int currentBest = where;\n\n        // value = node index, priority = full cost at that node\n        priorityQueue.Enqueue(where, rootMergedArea);\n\n        while (priorityQueue.TryDequeue(out int currentIndex, out double cost))\n        {\n            ref Node cn = ref nodes[currentIndex];\n\n            // Reconstruct inherited cost *before* this node:\n            // cost = inhCostBefore + SA(merge(node, nb))\n            double mergedHere = TreeBox.MergedSurface(cn.ExpandedBox, nb.ExpandedBox);\n            double inhCostBeforeNode = cost - mergedHere;\n\n            // Prune: even the lower bound is already worse than best\n            if (inhCostBeforeNode > bestCost)\n                continue;\n\n            // This node is a candidate insertion position\n            if (cost < bestCost)\n            {\n                bestCost = cost;\n                currentBest = currentIndex;\n            }\n\n            if (cn.IsLeaf) continue;\n\n            double oldSurface = cn.ExpandedBox.GetSurfaceArea();\n\n            // Inherited cost *after* this node\n            double inhCostAfterNode = cost - oldSurface;\n\n            // Expand to children\n            double leftMerged  = TreeBox.MergedSurface(nodes[cn.Left].ExpandedBox, nb.ExpandedBox);\n            double rightMerged = TreeBox.MergedSurface(nodes[cn.Right].ExpandedBox, nb.ExpandedBox);\n\n            double leftCost  = inhCostAfterNode + leftMerged;\n            double rightCost = inhCostAfterNode + rightMerged;\n\n            // Store only index + full cost; inhCost will be reconstructed on pop\n            priorityQueue.Enqueue(cn.Left,  leftCost);\n            priorityQueue.Enqueue(cn.Right, rightCost);\n        }\n\n        return currentBest;\n    }\n\n    [MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)]\n    private int FindBestGreedy(int node, int where)\n    {\n        /*\n        This method is adapted from Box2D.\n        https://github.com/erincatto/box2d/blob/3a4f0da8374af61293a03021c9a0b3ebcfe67948/src/dynamic_tree.c#L187\n        Modified from the original version.\n\n        Box2D is available under the MIT license:\n\n        MIT License\n\n        Copyright (c) 2022 Erin Catto\n\n        Permission is hereby granted, free of charge, to any person obtaining a copy\n        of this software and associated documentation files (the \"Software\"), to deal\n        in the Software without restriction, including without limitation the rights\n        to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n        copies of the Software, and to permit persons to whom the Software is\n        furnished to do so, subject to the following conditions:\n\n        The above copyright notice and this permission notice shall be included in all\n        copies or substantial portions of the Software.\n\n        THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n        IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n        FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n        AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n        LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n        OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n        SOFTWARE.\n        */\n\n        ref TreeBox nodeTreeBox = ref nodes[node].ExpandedBox;\n\n        double areaD = nodes[node].ExpandedBox.GetSurfaceArea();\n        double areaBase = nodes[where].ExpandedBox.GetSurfaceArea();\n        double directCost = TreeBox.MergedSurface(nodes[where].ExpandedBox, nodeTreeBox);\n        double inheritedCost = 0.0d;\n\n        int bestSibling = where;\n        double bestCost = directCost;\n\n        while (!nodes[where].IsLeaf)\n        {\n            int left = nodes[where].Left;\n            int right = nodes[where].Right;\n\n            double cost = directCost + inheritedCost;\n\n            if (cost < bestCost)\n            {\n                bestSibling = where;\n                bestCost = cost;\n            }\n\n            inheritedCost += directCost - areaBase;\n\n            //\n            // Cost of descending into left child\n            //\n            double lowerCostLeft = double.MaxValue;\n            double directCostLeft = TreeBox.MergedSurface(nodes[left].ExpandedBox, nodeTreeBox);\n            double areaLeft = 0.0d;\n\n            if (nodes[left].IsLeaf)\n            {\n                // Left child is a leaf\n                // Cost of creating new node and increasing area of node P\n                double costLeft = directCostLeft + inheritedCost;\n\n                // Need this here due to while condition above\n                if (costLeft < bestCost)\n                {\n                    bestSibling = left;\n                    bestCost = costLeft;\n                }\n            }\n            else\n            {\n                // Left child is an internal node\n                areaLeft = nodes[left].ExpandedBox.GetSurfaceArea();\n\n                // Lower bound cost of inserting under left child.\n                lowerCostLeft = inheritedCost + directCostLeft + double.Min(areaD - areaLeft, 0.0d);\n            }\n\n            //\n            // Cost of descending into right child\n            //\n            double lowerCostRight = double.MaxValue;\n            double directCostRight = TreeBox.MergedSurface(nodes[right].ExpandedBox, nodeTreeBox);\n            double areaRight = 0.0d;\n\n            if (nodes[right].IsLeaf)\n            {\n                // Right child is a leaf\n                double costRight = directCostRight + inheritedCost;\n\n                if (costRight < bestCost)\n                {\n                    bestSibling = right;\n                    bestCost = costRight;\n                }\n            }\n            else\n            {\n                // Right child is an internal node\n                areaRight = nodes[right].ExpandedBox.GetSurfaceArea();\n                lowerCostRight = inheritedCost + directCostRight + double.Min(areaD - areaRight, 0.0d);\n            }\n\n            // If neither subtree offers improvement, stop descending.\n            if (bestCost <= lowerCostLeft && bestCost <= lowerCostRight)\n                break;\n\n            // Tie-break by proximity to the new node's center\n            // ReSharper disable once CompareOfFloatsByEqualityOperator\n            if (lowerCostLeft == lowerCostRight)\n            {\n                var center = nodeTreeBox.Center;\n                lowerCostLeft = (nodes[left].ExpandedBox.Center - center).LengthSquared();\n                lowerCostRight = (nodes[right].ExpandedBox.Center - center).LengthSquared();\n            }\n\n            // Descend into whichever child is better\n            if (lowerCostLeft < lowerCostRight)\n            {\n                where = left;\n                areaBase = areaLeft;\n                directCost = directCostLeft;\n            }\n            else\n            {\n                where = right;\n                areaBase = areaRight;\n                directCost = directCostRight;\n            }\n        }\n\n        return bestSibling;\n    }\n\n\n    [MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)]\n    private int FindBestHeuristic(int node, int where)\n    {\n        ref TreeBox nodeTreeBox = ref nodes[node].ExpandedBox;\n\n        while (!nodes[where].IsLeaf)\n        {\n            int left = nodes[where].Left;\n            int rght = nodes[where].Right;\n\n            double cost = 2.0d * nodes[where].ExpandedBox.GetSurfaceArea();\n\n            double leftCost, rightCost;\n\n            if (nodes[left].IsLeaf)\n            {\n                // cost of additional node\n                leftCost = TreeBox.MergedSurface(nodes[left].ExpandedBox, nodeTreeBox);\n            }\n            else\n            {\n                // cost of descending\n                double oldArea = nodes[left].ExpandedBox.GetSurfaceArea();\n                double newArea = TreeBox.MergedSurface(nodes[left].ExpandedBox, nodeTreeBox);\n                leftCost = newArea - oldArea;\n            }\n\n            if (nodes[rght].IsLeaf)\n            {\n                rightCost = TreeBox.MergedSurface(nodes[rght].ExpandedBox, nodeTreeBox);\n            }\n            else\n            {\n                double oldArea = nodes[rght].ExpandedBox.GetSurfaceArea();\n                double newArea = TreeBox.MergedSurface(nodes[rght].ExpandedBox, nodeTreeBox);\n                rightCost = newArea - oldArea;\n            }\n\n            if (cost < leftCost && cost < rightCost) break;\n\n            where = leftCost < rightCost ? left : rght;\n        }\n\n        return where;\n    }\n\n    private void InsertLeaf(int node, int where)\n    {\n        if (root == NullNode)\n        {\n            root = node;\n            nodes[root].Parent = NullNode;\n            return;\n        }\n\n        ref TreeBox nodeTreeBox = ref nodes[node].ExpandedBox;\n\n        while (where != root)\n        {\n            if (TreeBox.Contains(nodes[where].ExpandedBox,nodeTreeBox))\n            {\n                break;\n            }\n\n            where = nodes[where].Parent;\n        }\n\n        int insertionParent = nodes[where].Parent;\n\n        // search for the best sibling\n        int sibling = FindBestGreedy(node, where);\n\n        // create a new parent\n        int oldParent = nodes[sibling].Parent;\n        int newParent = AllocateNode();\n\n        nodes[newParent].Parent = oldParent;\n\n        if (oldParent != NullNode)\n        {\n            if (nodes[oldParent].Left == sibling) nodes[oldParent].Left = newParent;\n            else nodes[oldParent].Right = newParent;\n\n            nodes[newParent].Left = sibling;\n            nodes[newParent].Right = node;\n            nodes[sibling].Parent = newParent;\n            nodes[node].Parent = newParent;\n        }\n        else\n        {\n            nodes[newParent].Left = sibling;\n            nodes[newParent].Right = node;\n            nodes[sibling].Parent = newParent;\n            nodes[node].Parent = newParent;\n            root = newParent;\n        }\n\n        int index = nodes[node].Parent;\n        while (index != insertionParent)\n        {\n            int lft = nodes[index].Left;\n            int rgt = nodes[index].Right;\n\n            TreeBox.CreateMerged(nodes[lft].ExpandedBox, nodes[rgt].ExpandedBox, out nodes[index].ExpandedBox);\n\n            index = nodes[index].Parent;\n        }\n    }\n}"
  },
  {
    "path": "src/Jitter2/Collision/DynamicTree/IDynamicTreeProxy.cs",
    "content": "/*\n * Jitter2 Physics Library\n * (c) Thorben Linneweber and contributors\n * SPDX-License-Identifier: MIT\n */\n\nusing Jitter2.DataStructures;\nusing Jitter2.LinearMath;\n\nnamespace Jitter2.Collision;\n\n/// <summary>\n/// Represents an entity that can be tracked by the <see cref=\"DynamicTree\"/> for broadphase collision detection.\n/// </summary>\npublic interface IDynamicTreeProxy : IPartitionedSetIndex\n{\n    /// <summary>\n    /// Gets or sets the internal node pointer used by the tree.\n    /// </summary>\n    /// <remarks>\n    /// This value is managed internally by <see cref=\"DynamicTree\"/>. Do not modify directly.\n    /// </remarks>\n    int NodePtr { get; set; }\n\n    /// <summary>\n    /// Gets the velocity of the entity, used for bounding box expansion.\n    /// </summary>\n    JVector Velocity { get; }\n\n    /// <summary>\n    /// Gets the axis-aligned bounding box of the entity in world space.\n    /// </summary>\n    JBoundingBox WorldBoundingBox { get; }\n}\n\n/// <summary>\n/// Represents an entity whose bounding box can be recomputed.\n/// </summary>\npublic interface IUpdatableBoundingBox\n{\n    /// <summary>\n    /// Recomputes the world-space bounding box.\n    /// </summary>\n    /// <param name=\"dt\">The timestep for velocity-based expansion. Default is zero.</param>\n    public void UpdateWorldBoundingBox(Real dt = (Real)0.0);\n}\n\n/// <summary>\n/// Represents an entity that can be intersected by a ray.\n/// </summary>\npublic interface IRayCastable\n{\n    /// <summary>\n    /// Performs a ray cast against this object.\n    /// </summary>\n    /// <param name=\"origin\">The starting point of the ray.</param>\n    /// <param name=\"direction\">The direction of the ray. Does not need to be normalized.</param>\n    /// <param name=\"normal\">\n    /// The surface normal at the intersection point, or <see cref=\"JVector.Zero\"/> if the ray origin\n    /// is inside the object. Use the return value, not this parameter, to test whether a hit occurred.\n    /// </param>\n    /// <param name=\"lambda\">\n    /// The distance along the ray to the intersection: <c>hitPoint = origin + lambda * direction</c>.\n    /// Zero when the ray origin is inside the object.\n    /// </param>\n    /// <returns>\n    /// <c>true</c> if the ray intersects with the object; otherwise, <c>false</c>.\n    /// Also returns <c>true</c> when the ray origin is inside the object, with <paramref name=\"lambda\"/>\n    /// set to zero and <paramref name=\"normal\"/> set to <see cref=\"JVector.Zero\"/>.\n    /// </returns>\n    public bool RayCast(in JVector origin, in JVector direction, out JVector normal, out Real lambda);\n}\n\n/// <summary>\n/// Represents an entity that supports closest-point distance queries against a support-mapped query shape.\n/// </summary>\npublic interface IDistanceTestable\n{\n    /// <summary>\n    /// Finds the closest points between this object and the query shape.\n    /// </summary>\n    /// <typeparam name=\"T\">The query support-map type.</typeparam>\n    /// <param name=\"support\">The query shape.</param>\n    /// <param name=\"orientation\">The query shape orientation in world space.</param>\n    /// <param name=\"position\">The query shape position in world space.</param>\n    /// <param name=\"pointA\">\n    /// Closest point on the query shape in world space. Undefined when the shapes overlap.\n    /// </param>\n    /// <param name=\"pointB\">\n    /// Closest point on this object in world space. Undefined when the shapes overlap.\n    /// </param>\n    /// <param name=\"normal\">\n    /// Unit direction from the query shape toward this object, or <see cref=\"JVector.Zero\"/> when\n    /// the shapes overlap. Do not use this to test whether a result was found.\n    /// </param>\n    /// <param name=\"distance\">The separation distance between the shapes. Zero when overlapping.</param>\n    /// <returns><c>true</c> if the shapes are separated; <c>false</c> if they overlap.</returns>\n    public bool Distance<T>(in T support, in JQuaternion orientation, in JVector position,\n        out JVector pointA, out JVector pointB, out JVector normal, out Real distance)\n        where T : ISupportMappable;\n}\n\n/// <summary>\n/// Represents an entity that can be sweep-tested against a moving support-mapped query shape.\n/// </summary>\npublic interface ISweepTestable\n{\n    /// <summary>\n    /// Performs a sweep test against this object.\n    /// </summary>\n    /// <typeparam name=\"T\">The query support-map type.</typeparam>\n    /// <param name=\"support\">The query shape.</param>\n    /// <param name=\"orientation\">The query shape orientation in world space.</param>\n    /// <param name=\"position\">The query shape position in world space.</param>\n    /// <param name=\"sweep\">The query shape translation in world space.</param>\n    /// <param name=\"pointA\">Collision point on the query shape in world space at the sweep origin. Undefined when the shapes already overlap.</param>\n    /// <param name=\"pointB\">Collision point on this object in world space at the sweep origin. Undefined when the shapes already overlap.</param>\n    /// <param name=\"normal\">\n    /// Collision normal in world space, or <see cref=\"JVector.Zero\"/> if the shapes already overlap.\n    /// Use the return value to determine whether a hit occurred; do not rely on this being non-zero.\n    /// </param>\n    /// <param name=\"lambda\">The time of impact expressed in units of <paramref name=\"sweep\"/>. Zero if the shapes already overlap.</param>\n    /// <returns><c>true</c> if the query shape hits or already overlaps this object; otherwise, <c>false</c>.</returns>\n    public bool Sweep<T>(in T support, in JQuaternion orientation, in JVector position, in JVector sweep,\n        out JVector pointA, out JVector pointB, out JVector normal, out Real lambda)\n        where T : ISupportMappable;\n}\n"
  },
  {
    "path": "src/Jitter2/Collision/DynamicTree/TreeBox.cs",
    "content": "/*\n * Jitter2 Physics Library\n * (c) Thorben Linneweber and contributors\n * SPDX-License-Identifier: MIT\n */\n\nusing System;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\nusing System.Runtime.Intrinsics;\nusing Jitter2.LinearMath;\n\nnamespace Jitter2.Collision;\n\n/// <summary>\n/// Represents an axis-aligned bounding box with SIMD-friendly memory layout, used for spatial partitioning in\n/// acceleration structures such as <see cref=\"DynamicTree\"/>.\n/// </summary>\n/// <remarks>\n/// The struct is explicitly laid out to occupy exactly 8 <see cref=\"Real\"/> fields, enabling efficient SIMD operations and\n/// binary comparisons. It contains both minimum and maximum corners of the box as <see cref=\"JVector\"/>, along with\n/// unused W components (<c>MinW</c>, <c>MaxW</c>) to match memory alignment.\n/// </remarks>\n/// <seealso cref=\"JBoundingBox\"/>\n/// <seealso cref=\"JVector\"/>\n[StructLayout(LayoutKind.Explicit, Size = 8 * sizeof(Real))]\npublic struct TreeBox : IEquatable<TreeBox>\n{\n    /// <summary>\n    /// Small epsilon value used for ray-box intersection tests.\n    /// </summary>\n    public const Real Epsilon = (Real)1e-12;\n\n    /// <summary>The minimum corner of the bounding box.</summary>\n    [FieldOffset(0 * sizeof(Real))] public JVector Min;\n\n    /// <summary>Padding for SIMD alignment. Not used directly.</summary>\n    [FieldOffset(3 * sizeof(Real))] public Real MinW;\n\n    /// <summary>The maximum corner of the bounding box.</summary>\n    [FieldOffset(4 * sizeof(Real))] public JVector Max;\n\n    /// <summary>Padding for SIMD alignment. Not used directly.</summary>\n    [FieldOffset(7 * sizeof(Real))] public Real MaxW;\n\n    /// <summary>\n    /// Returns a <see cref=\"VectorReal\"/> view of the <see cref=\"Min\"/> vector for SIMD operations.\n    /// </summary>\n    public readonly ref VectorReal VectorMin => ref Unsafe.As<JVector, VectorReal>(ref Unsafe.AsRef(in this.Min));\n\n    /// <summary>\n    /// Returns a <see cref=\"VectorReal\"/> view of the <see cref=\"Max\"/> vector for SIMD operations.\n    /// </summary>\n    public readonly ref VectorReal VectorMax => ref Unsafe.As<JVector, VectorReal>(ref Unsafe.AsRef(in this.Max));\n\n    /// <summary>\n    /// Creates a new <see cref=\"TreeBox\"/> from minimum and maximum corner vectors.\n    /// </summary>\n    public TreeBox(in JVector min, in JVector max)\n    {\n        this.Min = min;\n        this.Max = max;\n        this.MinW = 0;\n        this.MaxW = 0;\n    }\n\n    /// <summary>\n    /// Creates a new <see cref=\"TreeBox\"/> from an existing <see cref=\"JBoundingBox\"/>.\n    /// </summary>\n    public TreeBox(in JBoundingBox box)\n    {\n        this.Min = box.Min;\n        this.Max = box.Max;\n        this.MinW = 0;\n        this.MaxW = 0;\n    }\n\n    /// <summary>\n    /// Converts this <see cref=\"TreeBox\"/> to a <see cref=\"JBoundingBox\"/>.\n    /// </summary>\n    public readonly JBoundingBox AsJBoundingBox() => new(Min, Max);\n\n    // ─── Helper functions 1:1 like in JBox ───────────────────────────\n\n    /// <summary>\n    /// Determines whether this box contains the specified point.\n    /// </summary>\n    /// <param name=\"point\">The point to check.</param>\n    /// <returns><c>true</c> if the point is within the boundaries of this box; otherwise, <c>false</c>.</returns>\n    public readonly bool Contains(in JVector point)\n    {\n        return Min.X <= point.X && point.X <= Max.X &&\n               Min.Y <= point.Y && point.Y <= Max.Y &&\n               Min.Z <= point.Z && point.Z <= Max.Z;\n    }\n\n    /// <summary>\n    /// Gets the center point of the bounding box.\n    /// </summary>\n    public readonly JVector Center => (Min + Max) * ((Real)(1.0 / 2.0));\n\n    /// <summary>\n    /// Determines whether this box intersects with or overlaps the specified box.\n    /// </summary>\n    /// <param name=\"box\">The box to check against.</param>\n    /// <returns><c>true</c> if the boxes overlap; <c>false</c> if they are completely separated.</returns>\n    [Obsolete($\"Use !{nameof(Disjoint)} instead.\")]\n    public readonly bool NotDisjoint(in JBoundingBox box)\n    {\n        return Max.X >= box.Min.X && Min.X <= box.Max.X && Max.Y >= box.Min.Y && Min.Y <= box.Max.Y &&\n               Max.Z >= box.Min.Z && Min.Z <= box.Max.Z;\n    }\n\n    /// <summary>\n    /// Determines whether this box is completely separated from (does not overlap) the specified box.\n    /// </summary>\n    /// <param name=\"box\">The box to check against.</param>\n    /// <returns><c>true</c> if the boxes are separated by a gap on at least one axis; otherwise, <c>false</c>.</returns>\n    public readonly bool Disjoint(in JBoundingBox box)\n    {\n        return Max.X < box.Min.X || Min.X > box.Max.X || Max.Y < box.Min.Y || Min.Y > box.Max.Y ||\n               Max.Z < box.Min.Z || Min.Z > box.Max.Z;\n    }\n\n    /// <summary>\n    /// Determines whether this box completely encloses the specified box.\n    /// </summary>\n    /// <param name=\"box\">The box to check for containment.</param>\n    /// <returns><c>true</c> if the <paramref name=\"box\"/> is entirely inside this box; otherwise, <c>false</c>.</returns>\n    public readonly bool Contains(in JBoundingBox box)\n    {\n        return Min.X <= box.Min.X && Max.X >= box.Max.X && Min.Y <= box.Min.Y && Max.Y >= box.Max.Y &&\n               Min.Z <= box.Min.Z && Max.Z >= box.Max.Z;\n    }\n\n    /// <summary>\n    /// Determines whether this box completely encloses the specified box.\n    /// </summary>\n    /// <remarks>This is an alias for <see cref=\"Contains(in JBoundingBox)\"/>.</remarks>\n    [Obsolete($\"Use {nameof(Contains)} instead.\")]\n    public readonly bool Encompasses(in JBoundingBox box)\n    {\n        return Min.X <= box.Min.X && Max.X >= box.Max.X && Min.Y <= box.Min.Y && Max.Y >= box.Max.Y &&\n               Min.Z <= box.Min.Z && Max.Z >= box.Max.Z;\n    }\n\n    private static bool Intersect1D(Real start, Real dir, Real min, Real max,\n        ref Real enter, ref Real exit)\n    {\n        if (dir * dir < Epsilon * Epsilon) return start >= min && start <= max;\n\n        Real t0 = (min - start) / dir;\n        Real t1 = (max - start) / dir;\n\n        if (t0 > t1)\n        {\n            (t0, t1) = (t1, t0);\n        }\n\n        if (t0 > exit || t1 < enter) return false;\n\n        if (t0 > enter) enter = t0;\n        if (t1 < exit) exit = t1;\n        return true;\n    }\n\n    /// <summary>\n    /// Checks if a finite line segment intersects this bounding box.\n    /// </summary>\n    /// <param name=\"origin\">The start point of the segment.</param>\n    /// <param name=\"direction\">The vector defining the direction and length of the segment (End Point = Origin + Direction).</param>\n    /// <returns><c>true</c> if the segment passes through the box; otherwise, <c>false</c>.</returns>\n    public readonly bool SegmentIntersect(in JVector origin, in JVector direction)\n    {\n        Real enter = (Real)0.0, exit = (Real)1.0;\n\n        if (!Intersect1D(origin.X, direction.X, Min.X, Max.X, ref enter, ref exit))\n            return false;\n\n        if (!Intersect1D(origin.Y, direction.Y, Min.Y, Max.Y, ref enter, ref exit))\n            return false;\n\n        if (!Intersect1D(origin.Z, direction.Z, Min.Z, Max.Z, ref enter, ref exit))\n            return false;\n\n        return true;\n    }\n\n    /// <summary>\n    /// Checks if an infinite ray intersects this bounding box.\n    /// </summary>\n    /// <param name=\"origin\">The origin of the ray.</param>\n    /// <param name=\"direction\">The direction of the ray (not necessarily normalized).</param>\n    /// <returns><c>true</c> if the ray intersects the box; otherwise, <c>false</c>.</returns>\n    public readonly bool RayIntersect(in JVector origin, in JVector direction)\n    {\n        Real enter = (Real)0.0, exit = Real.MaxValue;\n\n        if (!Intersect1D(origin.X, direction.X, Min.X, Max.X, ref enter, ref exit))\n            return false;\n\n        if (!Intersect1D(origin.Y, direction.Y, Min.Y, Max.Y, ref enter, ref exit))\n            return false;\n\n        if (!Intersect1D(origin.Z, direction.Z, Min.Z, Max.Z, ref enter, ref exit))\n            return false;\n\n        return true;\n    }\n\n    /// <summary>\n    /// Checks if an infinite ray intersects this bounding box and calculates the entry distance.\n    /// </summary>\n    /// <param name=\"origin\">The origin of the ray.</param>\n    /// <param name=\"direction\">The direction of the ray (not necessarily normalized).</param>\n    /// <param name=\"enter\">Outputs the scalar distance along the direction vector where the ray enters the box. If inside, this is 0.</param>\n    /// <returns><c>true</c> if the ray intersects the box; otherwise, <c>false</c>.</returns>\n    public readonly bool RayIntersect(in JVector origin, in JVector direction, out Real enter)\n    {\n        enter = (Real)0.0;\n        Real exit = Real.MaxValue;\n\n        if (!Intersect1D(origin.X, direction.X, Min.X, Max.X, ref enter, ref exit))\n            return false;\n\n        if (!Intersect1D(origin.Y, direction.Y, Min.Y, Max.Y, ref enter, ref exit))\n            return false;\n\n        if (!Intersect1D(origin.Z, direction.Z, Min.Z, Max.Z, ref enter, ref exit))\n            return false;\n\n        return true;\n    }\n\n    public readonly override string ToString()\n    {\n        return $\"Min={{{Min}}}, Max={{{Max}}}\";\n    }\n\n    // ─── Helper functions with SIMD support ───────────────────────────\n\n    /// <summary>\n    /// Determines whether this box is completely separated from the specified <see cref=\"TreeBox\"/>.\n    /// </summary>\n    /// <param name=\"box\">The box to check against.</param>\n    /// <returns><c>true</c> if the boxes do not overlap; <c>false</c> if they touch or overlap.</returns>\n    public readonly bool Disjoint(in TreeBox box) => TreeBox.Disjoint(this, box);\n\n    /// <summary>\n    /// Determines whether this box completely encloses the specified <see cref=\"TreeBox\"/>.\n    /// </summary>\n    /// <param name=\"box\">The box to check for containment.</param>\n    /// <returns><c>true</c> if the <paramref name=\"box\"/> is entirely inside this box.</returns>\n    public readonly bool Contains(in TreeBox box) => TreeBox.Contains(this, box);\n\n    /// <summary>\n    /// Calculates the surface area of the bounding box.\n    /// </summary>\n    /// <returns>The total surface area: 2*(ex*ey + ey*ez + ez*ex).</returns>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public readonly double GetSurfaceArea()\n    {\n        var extent = Vector.Subtract(VectorMax, VectorMin);\n\n        double ex = extent.GetElement(0);\n        double ey = extent.GetElement(1);\n        double ez = extent.GetElement(2);\n\n        return 2.0 * (ex * ey + ey * ez + ez * ex);\n    }\n\n    /// <summary>\n    /// Calculates the surface area of a hypothetical box that would result from merging the two specified boxes.\n    /// </summary>\n    /// <param name=\"first\">The first box.</param>\n    /// <param name=\"second\">The second box.</param>\n    /// <returns>The surface area of the union box.</returns>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static double MergedSurface(in TreeBox first, in TreeBox second)\n    {\n        var vMin = Vector.Min(first.VectorMin, second.VectorMin);\n        var vMax = Vector.Max(first.VectorMax, second.VectorMax);\n        var extent = Vector.Subtract(vMax, vMin);\n\n        double ex = extent.GetElement(0);\n        double ey = extent.GetElement(1);\n        double ez = extent.GetElement(2);\n\n        return 2.0d * (ex * ey + ex * ez + ey * ez);\n    }\n\n    /// <summary>\n    /// Determines whether the outer box completely contains the inner box using SIMD instructions.\n    /// </summary>\n    /// <param name=\"outer\">The potential container box.</param>\n    /// <param name=\"inner\">The box to check for inclusion.</param>\n    /// <returns><c>true</c> if <paramref name=\"inner\"/> is fully inside <paramref name=\"outer\"/>.</returns>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static bool Contains(in TreeBox outer, in TreeBox inner)\n    {\n        var leMin = Vector.LessThanOrEqual(outer.VectorMin, inner.VectorMin);\n        var geMax = Vector.GreaterThanOrEqual(outer.VectorMax, inner.VectorMax);\n\n        var mask = Vector.BitwiseAnd(leMin, geMax);\n        return Vector.EqualsAll(mask.AsInt32(), Vector.Create(-1));\n    }\n\n    /// <summary>\n    /// Determines whether two boxes overlap using SIMD instructions.\n    /// </summary>\n    /// <param name=\"first\">The first box.</param>\n    /// <param name=\"second\">The second box.</param>\n    /// <returns><c>true</c> if the boxes intersect; <c>false</c> if they are disjoint.</returns>\n    [Obsolete($\"Use !{nameof(Disjoint)} instead.\")]\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static bool NotDisjoint(in TreeBox first, in TreeBox second)\n    {\n        var geMin = Vector.GreaterThanOrEqual(first.VectorMax, second.VectorMin);\n        var leMax = Vector.LessThanOrEqual(first.VectorMin, second.VectorMax);\n\n        var mask = Vector.BitwiseAnd(geMin, leMax);\n        return Vector.EqualsAll(mask.AsInt32(), Vector.Create(-1));\n    }\n\n    /// <summary>\n    /// Determines whether two boxes are completely separated (disjoint) using SIMD instructions.\n    /// </summary>\n    /// <param name=\"first\">The first box.</param>\n    /// <param name=\"second\">The second box.</param>\n    /// <returns><c>true</c> if the boxes do not overlap on any axis; <c>false</c> if they touch or intersect.</returns>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static bool Disjoint(in TreeBox first, in TreeBox second)\n    {\n        // If first.Max < second.Min OR first.Min > second.Max on any axis,\n        // the two boxes cannot overlap.\n        var ltMin = Vector.LessThan(first.VectorMax, second.VectorMin);\n        var gtMax = Vector.GreaterThan(first.VectorMin, second.VectorMax);\n\n        var mask = Vector.BitwiseOr(ltMin, gtMax);\n        return !Vector.EqualsAll(mask.AsInt32(), Vector.Create(0));\n    }\n\n    /// <summary>\n    /// Creates a new box that encompasses both input boxes.\n    /// </summary>\n    /// <param name=\"first\">The first box.</param>\n    /// <param name=\"second\">The second box.</param>\n    /// <param name=\"result\">The resulting union box.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static void CreateMerged(in TreeBox first, in TreeBox second, out TreeBox result)\n    {\n        Unsafe.SkipInit(out result);\n        result.VectorMin = Vector.Min(first.VectorMin, second.VectorMin);\n        result.VectorMax = Vector.Max(first.VectorMax, second.VectorMax);\n    }\n\n    /// <summary>\n    /// Determines whether two boxes are equal using binary comparison.\n    /// </summary>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static bool Equals(in TreeBox first, in TreeBox second)\n    {\n        var a = MemoryMarshal.AsBytes(MemoryMarshal.CreateReadOnlySpan(ref Unsafe.AsRef(in first), 1));\n        var b = MemoryMarshal.AsBytes(MemoryMarshal.CreateReadOnlySpan(ref Unsafe.AsRef(in second), 1));\n        return a.SequenceEqual(b); // SIMD-accelerated in .NET ≥ 5\n    }\n\n    /// <inheritdoc />\n    public readonly bool Equals(TreeBox other)\n    {\n        return Equals(this, other);\n    }\n\n    public readonly override bool Equals(object? obj)\n    {\n        return obj is TreeBox other && Equals(other);\n    }\n\n    public readonly override int GetHashCode()\n    {\n        return HashCode.Combine(Min, MinW, Max, MaxW);\n    }\n\n    public static bool operator ==(TreeBox left, TreeBox right)\n    {\n        return left.Equals(right);\n    }\n\n    public static bool operator !=(TreeBox left, TreeBox right)\n    {\n        return !(left == right);\n    }\n}\n"
  },
  {
    "path": "src/Jitter2/Collision/IslandHelper.cs",
    "content": "/*\n * Jitter2 Physics Library\n * (c) Thorben Linneweber and contributors\n * SPDX-License-Identifier: MIT\n */\n\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing Jitter2.Dynamics;\nusing Jitter2.Dynamics.Constraints;\nusing IslandSet = Jitter2.DataStructures.PartitionedSet<Jitter2.Collision.Island>;\n\nnamespace Jitter2.Collision;\n\n/// <summary>\n/// Helper class to update islands. The methods here are not thread-safe.\n/// </summary>\n/// <remarks>\n/// This class uses static shared data structures (queues, lists, and an object pool),\n/// so all calls must be serialized. Islands returned to the pool are reused and must not\n/// be referenced after removal.\n/// </remarks>\ninternal static class IslandHelper\n{\n    private static readonly Stack<Island> pool = new();\n\n    private static Island GetFromPool()\n    {\n        if (!pool.TryPop(out var island))\n        {\n            island = new Island();\n        }\n\n        island.MarkedAsActive = true;\n        island.NeedsUpdate = false;\n\n        return island;\n    }\n\n    private static void ReturnToPool(Island island)\n    {\n        pool.Push(island);\n    }\n\n    public static void ArbiterCreated(IslandSet islands, Arbiter arbiter)\n    {\n        RigidBody b1 = arbiter.Body1;\n        RigidBody b2 = arbiter.Body2;\n\n        b1.InternalContacts.Add(arbiter);\n        b2.InternalContacts.Add(arbiter);\n\n        AddConnection(islands, b1, b2);\n    }\n\n    public static void ArbiterRemoved(IslandSet islands, Arbiter arbiter)\n    {\n        arbiter.Body1.InternalContacts.Remove(arbiter);\n        arbiter.Body2.InternalContacts.Remove(arbiter);\n\n        RemoveConnection(islands, arbiter.Body1, arbiter.Body2);\n    }\n\n    public static void ConstraintCreated(IslandSet islands, Constraint constraint)\n    {\n        constraint.Body1.InternalConstraints.Add(constraint);\n        constraint.Body2.InternalConstraints.Add(constraint);\n\n        AddConnection(islands, constraint.Body1, constraint.Body2);\n    }\n\n    public static void ConstraintRemoved(IslandSet islands, Constraint constraint)\n    {\n        constraint.Body1.InternalConstraints.Remove(constraint);\n        constraint.Body2.InternalConstraints.Remove(constraint);\n\n        RemoveConnection(islands, constraint.Body1, constraint.Body2);\n    }\n\n    public static void BodyAdded(IslandSet islands, RigidBody body)\n    {\n        body.InternalIsland = GetFromPool();\n        islands.Add(body.InternalIsland, true);\n        body.InternalIsland.InternalBodies.Add(body);\n    }\n\n    public static void BodyRemoved(IslandSet islands, RigidBody body)\n    {\n        body.InternalIsland.ClearLists();\n        ReturnToPool(body.InternalIsland);\n        islands.Remove(body.InternalIsland);\n    }\n\n    public static void AddConnection(IslandSet islands, RigidBody body1, RigidBody body2)\n    {\n        bool needsUpdate = (!islands.IsActive(body1.Island) || !islands.IsActive(body2.Island));\n        bool bothNotStatic = body1.Data.MotionType != MotionType.Static && body2.Data.MotionType != MotionType.Static;\n\n        if (bothNotStatic)\n        {\n            MergeIslands(islands, body1, body2);\n            body1.InternalConnections.Add(body2);\n            body2.InternalConnections.Add(body1);\n        }\n\n        if (needsUpdate)\n        {\n            if(body1.Data.MotionType != MotionType.Static) body1.Island.NeedsUpdate = true;\n            if(body2.Data.MotionType != MotionType.Static) body2.Island.NeedsUpdate = true;\n        }\n    }\n\n    public static void RemoveConnection(IslandSet islands, RigidBody body1, RigidBody body2)\n    {\n        static void RemoveRef(List<RigidBody> list, RigidBody body)\n        {\n            int index = list.IndexOf(body);\n            if (index < 0) return;\n\n            int last = list.Count - 1;\n            list[index] = list[last];\n            list.RemoveAt(last);\n        }\n\n        RemoveRef(body1.InternalConnections, body2);\n        RemoveRef(body2.InternalConnections, body1);\n\n        if (body1.InternalIsland == body2.InternalIsland)\n        {\n            SplitIslands(islands, body1, body2);\n        }\n    }\n\n    private static readonly Queue<RigidBody> leftSearchQueue = [];\n    private static readonly Queue<RigidBody> rightSearchQueue = [];\n\n    private static readonly List<RigidBody> visitedBodiesLeft = [];\n    private static readonly List<RigidBody> visitedBodiesRight = [];\n\n    private static void SplitIslands(IslandSet islands, RigidBody body1, RigidBody body2)\n    {\n        Debug.Assert(body1.InternalIsland == body2.InternalIsland, \"Islands not the same or null.\");\n\n        bool sourceIslandActive = islands.IsActive(body1.InternalIsland);\n        bool sourceNeedsUpdate = body1.InternalIsland.NeedsUpdate;\n        bool sourceMarkedAsActive = body1.InternalIsland.MarkedAsActive;\n\n        leftSearchQueue.Enqueue(body1);\n        rightSearchQueue.Enqueue(body2);\n\n        visitedBodiesLeft.Add(body1);\n        visitedBodiesRight.Add(body2);\n\n        body1.InternalIslandMarker = 1;\n        body2.InternalIslandMarker = 2;\n\n        while (leftSearchQueue.Count > 0 && rightSearchQueue.Count > 0)\n        {\n            RigidBody currentNode = leftSearchQueue.Dequeue();\n            if (currentNode.Data.MotionType != MotionType.Static)\n            {\n                for (int i = 0; i < currentNode.InternalConnections.Count; i++)\n                {\n                    RigidBody connectedNode = currentNode.InternalConnections[i];\n\n                    if (connectedNode.InternalIslandMarker == 0)\n                    {\n                        leftSearchQueue.Enqueue(connectedNode);\n                        visitedBodiesLeft.Add(connectedNode);\n                        connectedNode.InternalIslandMarker = 1;\n                    }\n                    else if (connectedNode.InternalIslandMarker == 2)\n                    {\n                        leftSearchQueue.Clear();\n                        rightSearchQueue.Clear();\n                        goto ResetSearchStates;\n                    }\n                }\n            }\n\n            currentNode = rightSearchQueue.Dequeue();\n            if (currentNode.Data.MotionType != MotionType.Static)\n            {\n                for (int i = 0; i < currentNode.InternalConnections.Count; i++)\n                {\n                    RigidBody connectedNode = currentNode.InternalConnections[i];\n\n                    if (connectedNode.InternalIslandMarker == 0)\n                    {\n                        rightSearchQueue.Enqueue(connectedNode);\n                        visitedBodiesRight.Add(connectedNode);\n                        connectedNode.InternalIslandMarker = 2;\n                    }\n                    else if (connectedNode.InternalIslandMarker == 1)\n                    {\n                        leftSearchQueue.Clear();\n                        rightSearchQueue.Clear();\n                        goto ResetSearchStates;\n                    }\n                }\n            }\n        }\n\n        Island island = GetFromPool();\n        island.NeedsUpdate = sourceNeedsUpdate;\n        island.MarkedAsActive = sourceMarkedAsActive;\n        islands.Add(island, sourceIslandActive);\n\n        if (leftSearchQueue.Count == 0)\n        {\n            for (int i = 0; i < visitedBodiesLeft.Count; i++)\n            {\n                RigidBody body = visitedBodiesLeft[i];\n                body2.InternalIsland.InternalBodies.Remove(body);\n                island.InternalBodies.Add(body);\n                body.InternalIsland = island;\n            }\n\n            rightSearchQueue.Clear();\n        }\n        else if (rightSearchQueue.Count == 0)\n        {\n            for (int i = 0; i < visitedBodiesRight.Count; i++)\n            {\n                RigidBody body = visitedBodiesRight[i];\n                body1.InternalIsland.InternalBodies.Remove(body);\n                island.InternalBodies.Add(body);\n                body.InternalIsland = island;\n            }\n\n            leftSearchQueue.Clear();\n        }\n\n        ResetSearchStates:\n\n        for (int i = 0; i < visitedBodiesLeft.Count; i++)\n        {\n            visitedBodiesLeft[i].InternalIslandMarker = 0;\n        }\n\n        for (int i = 0; i < visitedBodiesRight.Count; i++)\n        {\n            visitedBodiesRight[i].InternalIslandMarker = 0;\n        }\n\n        visitedBodiesLeft.Clear();\n        visitedBodiesRight.Clear();\n    }\n\n    // Both bodies must be !static\n    private static void MergeIslands(IslandSet islands, RigidBody body1, RigidBody body2)\n    {\n        if (body1.InternalIsland == body2.InternalIsland) return;\n\n        bool needsUpdate = body1.InternalIsland.NeedsUpdate || body2.InternalIsland.NeedsUpdate;\n        bool markedAsActive = body1.InternalIsland.MarkedAsActive || body2.InternalIsland.MarkedAsActive;\n\n        // merge smaller into larger\n        RigidBody smallIslandOwner, largeIslandOwner;\n\n        if (body1.InternalIsland.InternalBodies.Count > body2.InternalIsland.InternalBodies.Count)\n        {\n            smallIslandOwner = body2;\n            largeIslandOwner = body1;\n        }\n        else\n        {\n            smallIslandOwner = body1;\n            largeIslandOwner = body2;\n        }\n\n        Island giveBackIsland = smallIslandOwner.InternalIsland;\n\n        ReturnToPool(giveBackIsland);\n        islands.Remove(giveBackIsland);\n\n        foreach (RigidBody b in giveBackIsland.InternalBodies)\n        {\n            b.InternalIsland = largeIslandOwner.InternalIsland;\n            largeIslandOwner.InternalIsland.InternalBodies.Add(b);\n        }\n\n        largeIslandOwner.InternalIsland.NeedsUpdate |= needsUpdate;\n        largeIslandOwner.InternalIsland.MarkedAsActive |= markedAsActive;\n\n        giveBackIsland.ClearLists();\n    }\n}"
  },
  {
    "path": "src/Jitter2/Collision/NarrowPhase/CollisionManifold.cs",
    "content": "/*\n * Jitter2 Physics Library\n * (c) Thorben Linneweber and contributors\n * SPDX-License-Identifier: MIT\n */\n\nusing System;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\nusing Jitter2.Collision.Shapes;\nusing Jitter2.LinearMath;\n\nnamespace Jitter2.Collision;\n\n/// <summary>\n/// Represents a contact manifold between two convex shapes, storing up to six contact points.\n/// </summary>\n/// <remarks>\n/// The manifold is constructed by projecting support points along perturbed normals\n/// in a hexagonal pattern around the collision normal, then clipping to find the contact region.\n/// </remarks>\npublic unsafe struct CollisionManifold\n{\n    private readonly struct ClipPoint\n    {\n        public readonly Real X;\n        public readonly Real Y;\n\n        public ClipPoint(Real x, Real y)\n        {\n            X = x;\n            Y = y;\n        }\n\n        public static ClipPoint operator +(ClipPoint left, ClipPoint right)\n        {\n            return new ClipPoint(left.X + right.X, left.Y + right.Y);\n        }\n\n        public static ClipPoint operator -(ClipPoint left, ClipPoint right)\n        {\n            return new ClipPoint(left.X - right.X, left.Y - right.Y);\n        }\n\n        public static ClipPoint operator *(Real scale, ClipPoint point)\n        {\n            return new ClipPoint(scale * point.X, scale * point.Y);\n        }\n\n        public readonly Real LengthSquared()\n        {\n            return X * X + Y * Y;\n        }\n    }\n\n    private fixed Real manifoldData[12*3];\n\n    private int leftCount;\n    private int rightCount;\n    private int manifoldCount;\n\n    private const int MaxManifoldPoints = 6;\n    private const int MaxClipPoints = 12;\n    private const int SolverContactLimit = 4;\n    private const Real Sqrt3Over2 = (Real)0.86602540378;\n    private const Real Perturbation = (Real)0.01;\n\n    private static readonly Real[] hexagonVertices = [(Real)1.0, (Real)0.0, (Real)0.5, Sqrt3Over2, -(Real)0.5, Sqrt3Over2,\n        -(Real)1.0, (Real)0.0, -(Real)0.5, -Sqrt3Over2, (Real)0.5, -Sqrt3Over2];\n\n    /// <summary>\n    /// Gets a span of contact points on shape A. Valid indices are <c>[0, Count)</c>.\n    /// </summary>\n    public Span<JVector> ManifoldA => MemoryMarshal.CreateSpan(ref Unsafe.As<Real, JVector>(ref manifoldData[0]), MaxManifoldPoints);\n\n    /// <summary>\n    /// Gets a span of contact points on shape B. Valid indices are <c>[0, Count)</c>.\n    /// </summary>\n    public Span<JVector> ManifoldB => MemoryMarshal.CreateSpan(ref Unsafe.As<Real, JVector>(ref manifoldData[18]), MaxManifoldPoints);\n\n    /// <summary>\n    /// Gets the number of contact points in the manifold.\n    /// </summary>\n    public readonly int Count => manifoldCount;\n\n    private void PushLeft(Span<JVector> left, in JVector v)\n    {\n        const Real epsilon = (Real)0.001;\n\n        if (leftCount > 0)\n        {\n            if ((left[0] - v).LengthSquared() < epsilon) return;\n        }\n\n        if (leftCount > 1)\n        {\n            if ((left[leftCount - 1] - v).LengthSquared() < epsilon) return;\n        }\n\n        left[leftCount++] = v;\n    }\n\n    private void PushRight(Span<JVector> right, in JVector v)\n    {\n        const Real epsilon = (Real)0.001;\n\n        if (rightCount > 0)\n        {\n            if ((right[0] - v).LengthSquared() < epsilon) return;\n        }\n\n        if (rightCount > 1)\n        {\n            if ((right[rightCount - 1] - v).LengthSquared() < epsilon) return;\n        }\n\n        right[rightCount++] = v;\n    }\n\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    private static Real Cross2D(in ClipPoint left, in ClipPoint right)\n    {\n        return left.X * right.Y - left.Y * right.X;\n    }\n\n    private static void StoreLinearIntersection(in ClipPoint start, in ClipPoint end,\n        Real distanceEpsilonSq, Span<ClipPoint> clipped, out int clippedCount)\n    {\n        clipped[0] = start;\n        clippedCount = 1;\n\n        if ((end - start).LengthSquared() <= distanceEpsilonSq) return;\n\n        clipped[1] = end;\n        clippedCount = 2;\n    }\n\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    private static ClipPoint ProjectToPlane(in JVector point, in JVector origin, in JVector tangent1, in JVector tangent2)\n    {\n        JVector delta = point - origin;\n        return new ClipPoint(JVector.Dot(delta, tangent1), JVector.Dot(delta, tangent2));\n    }\n\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    private static JVector LiftFromPlane(in ClipPoint point, in JVector origin, in JVector tangent1, in JVector tangent2)\n    {\n        return origin + point.X * tangent1 + point.Y * tangent2;\n    }\n\n    private static Real SignedArea(ReadOnlySpan<ClipPoint> polygon, int count)\n    {\n        if (count < 3) return (Real)0.0;\n\n        Real area = (Real)0.0;\n\n        ClipPoint previous = polygon[count - 1];\n\n        for (int i = 0; i < count; i++)\n        {\n            ClipPoint current = polygon[i];\n            area += Cross2D(previous, current);\n            previous = current;\n        }\n\n        return area;\n    }\n\n    private static void ReversePolygon(Span<ClipPoint> polygon, int count)\n    {\n        for (int i = 0, j = count - 1; i < j; i++, j--)\n        {\n            (polygon[i], polygon[j]) = (polygon[j], polygon[i]);\n        }\n    }\n\n    private static void NormalizeWinding(Span<ClipPoint> polygon, int count)\n    {\n        if (SignedArea(polygon, count) < (Real)0.0)\n        {\n            ReversePolygon(polygon, count);\n        }\n    }\n\n    private static void CalculateClipTolerance(ReadOnlySpan<ClipPoint> left, int leftCount,\n        ReadOnlySpan<ClipPoint> right, int rightCount,\n        out Real sideEpsilon, out Real distanceEpsilonSq, out Real areaEpsilon)\n    {\n        Real scale = (Real)1.0;\n\n        for (int i = 0; i < leftCount; i++)\n        {\n            scale = MathR.Max(scale, MathR.Max(MathR.Abs(left[i].X), MathR.Abs(left[i].Y)));\n        }\n\n        for (int i = 0; i < rightCount; i++)\n        {\n            scale = MathR.Max(scale, MathR.Max(MathR.Abs(right[i].X), MathR.Abs(right[i].Y)));\n        }\n\n        Real distanceEpsilon = (Real)1e-5 * scale + (Real)1e-7;\n        distanceEpsilonSq = distanceEpsilon * distanceEpsilon;\n        areaEpsilon = distanceEpsilon * scale;\n        sideEpsilon = areaEpsilon;\n    }\n\n    private static void CompactPolygon(Span<ClipPoint> polygon, ref int count,\n        Real distanceEpsilonSq, Real areaEpsilon)\n    {\n        if (count == 0) return;\n\n        int write = 0;\n\n        for (int i = 0; i < count; i++)\n        {\n            ClipPoint current = polygon[i];\n\n            if (write > 0 && (polygon[write - 1] - current).LengthSquared() <= distanceEpsilonSq)\n            {\n                continue;\n            }\n\n            polygon[write++] = current;\n        }\n\n        if (write > 1 && (polygon[0] - polygon[write - 1]).LengthSquared() <= distanceEpsilonSq)\n        {\n            write -= 1;\n        }\n\n        count = write;\n        if (count < 3) return;\n\n        bool removed;\n\n        do\n        {\n            removed = false;\n\n            for (int i = 0; i < count; i++)\n            {\n                ClipPoint previous = polygon[(i + count - 1) % count];\n                ClipPoint current = polygon[i];\n                ClipPoint next = polygon[(i + 1) % count];\n\n                ClipPoint edge0 = current - previous;\n                ClipPoint edge1 = next - current;\n\n                if (MathR.Abs(Cross2D(edge0, edge1)) > areaEpsilon) continue;\n\n                for (int j = i; j < count - 1; j++)\n                {\n                    polygon[j] = polygon[j + 1];\n                }\n\n                count -= 1;\n                removed = true;\n                break;\n            }\n        }\n        while (removed && count >= 3);\n    }\n\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    private static Real SideOfEdge(in ClipPoint edgeStart, in ClipPoint edgeEnd, in ClipPoint point)\n    {\n        return Cross2D(edgeEnd - edgeStart, point - edgeStart);\n    }\n\n    private static ClipPoint IntersectSegmentsAgainstEdge(in ClipPoint edgeStart, in ClipPoint edgeEnd,\n        in ClipPoint start, in ClipPoint end, Real startSide, Real endSide, Real distanceEpsilonSq)\n    {\n        Real denominator = startSide - endSide;\n\n        if (MathR.Abs(denominator) <= distanceEpsilonSq)\n        {\n            return MathR.Abs(startSide) <= MathR.Abs(endSide) ? start : end;\n        }\n\n        Real t = startSide / denominator;\n        t = Math.Clamp(t, (Real)0.0, (Real)1.0);\n\n        return start + t * (end - start);\n    }\n\n    private static int ClipConvexPolygon(Span<ClipPoint> subject, int subjectCount,\n        ReadOnlySpan<ClipPoint> clip, int clipCount, Span<ClipPoint> buffer,\n        Real sideEpsilon, Real distanceEpsilonSq, Real areaEpsilon)\n    {\n        Span<ClipPoint> input = subject;\n        Span<ClipPoint> output = buffer;\n        int inputCount = subjectCount;\n        bool resultInSubject = true;\n\n        for (int edge = 0; edge < clipCount; edge++)\n        {\n            if (inputCount == 0) return 0;\n\n            ClipPoint edgeStart = clip[edge];\n            ClipPoint edgeEnd = clip[(edge + 1) % clipCount];\n            int outputCount = 0;\n\n            ClipPoint start = input[inputCount - 1];\n            Real startSide = SideOfEdge(edgeStart, edgeEnd, start);\n            bool startInside = startSide >= -sideEpsilon;\n\n            for (int i = 0; i < inputCount; i++)\n            {\n                ClipPoint end = input[i];\n                Real endSide = SideOfEdge(edgeStart, edgeEnd, end);\n                bool endInside = endSide >= -sideEpsilon;\n\n                if (startInside != endInside)\n                {\n                    output[outputCount++] = IntersectSegmentsAgainstEdge(\n                        edgeStart, edgeEnd, start, end, startSide, endSide, distanceEpsilonSq);\n                }\n\n                if (endInside)\n                {\n                    output[outputCount++] = end;\n                }\n\n                start = end;\n                startSide = endSide;\n                startInside = endInside;\n            }\n\n            CompactPolygon(output, ref outputCount, distanceEpsilonSq, areaEpsilon);\n\n            Span<ClipPoint> temporary = input;\n            input = output;\n            output = temporary;\n            inputCount = outputCount;\n            resultInSubject = !resultInSubject;\n        }\n\n        if (!resultInSubject)\n        {\n            input[..inputCount].CopyTo(subject);\n        }\n\n        return inputCount;\n    }\n\n    // When the projected overlap degenerates from a 2D polygon to a 1D feature, the polygon clipper\n    // above returns nothing. These helpers recover the line overlap and emit one or two endpoints.\n    private static bool ClipSegmentAgainstPolygon(in ClipPoint segmentStart, in ClipPoint segmentEnd,\n        ReadOnlySpan<ClipPoint> polygon, int polygonCount,\n        Real sideEpsilon, Real distanceEpsilonSq, Span<ClipPoint> clipped, out int clippedCount)\n    {\n        Real enter = (Real)0.0;\n        Real exit = (Real)1.0;\n        ClipPoint delta = segmentEnd - segmentStart;\n\n        for (int edge = 0; edge < polygonCount; edge++)\n        {\n            ClipPoint edgeStart = polygon[edge];\n            ClipPoint edgeEnd = polygon[(edge + 1) % polygonCount];\n\n            Real startSide = SideOfEdge(edgeStart, edgeEnd, segmentStart) + sideEpsilon;\n            Real endSide = SideOfEdge(edgeStart, edgeEnd, segmentEnd) + sideEpsilon;\n\n            bool startInside = startSide >= (Real)0.0;\n            bool endInside = endSide >= (Real)0.0;\n\n            if (!startInside && !endInside)\n            {\n                clippedCount = 0;\n                return false;\n            }\n\n            if (startInside && endInside) continue;\n\n            Real denominator = startSide - endSide;\n\n            if (MathR.Abs(denominator) <= distanceEpsilonSq)\n            {\n                clippedCount = 0;\n                return false;\n            }\n\n            Real t = startSide / denominator;\n            t = Math.Clamp(t, (Real)0.0, (Real)1.0);\n\n            if (!startInside)\n            {\n                enter = MathR.Max(enter, t);\n            }\n            else\n            {\n                exit = MathR.Min(exit, t);\n            }\n\n            if (exit < enter)\n            {\n                clippedCount = 0;\n                return false;\n            }\n        }\n\n        StoreLinearIntersection(segmentStart + enter * delta, segmentStart + exit * delta,\n            distanceEpsilonSq, clipped, out clippedCount);\n\n        return true;\n    }\n\n    private static bool IntersectSegments(in ClipPoint leftStart, in ClipPoint leftEnd,\n        in ClipPoint rightStart, in ClipPoint rightEnd,\n        Real sideEpsilon, Real distanceEpsilonSq, Real areaEpsilon,\n        Span<ClipPoint> clipped, out int clippedCount)\n    {\n        ClipPoint leftDelta = leftEnd - leftStart;\n        ClipPoint rightDelta = rightEnd - rightStart;\n        ClipPoint offset = rightStart - leftStart;\n\n        Real cross = Cross2D(leftDelta, rightDelta);\n        const Real parameterEpsilon = (Real)1e-5;\n\n        if (MathR.Abs(cross) <= areaEpsilon)\n        {\n            if (MathR.Abs(Cross2D(offset, leftDelta)) > areaEpsilon)\n            {\n                clippedCount = 0;\n                return false;\n            }\n\n            bool useLeft = leftDelta.LengthSquared() >= rightDelta.LengthSquared();\n            ClipPoint baseStart = useLeft ? leftStart : rightStart;\n            ClipPoint baseDelta = useLeft ? leftDelta : rightDelta;\n\n            bool useXAxis = MathR.Abs(baseDelta.X) >= MathR.Abs(baseDelta.Y);\n            Real baseOrigin = useXAxis ? baseStart.X : baseStart.Y;\n            Real baseExtent = useXAxis ? baseDelta.X : baseDelta.Y;\n\n            if (MathR.Abs(baseExtent) <= sideEpsilon)\n            {\n                clippedCount = 0;\n                return false;\n            }\n\n            Real leftMin = MathR.Min(useXAxis ? leftStart.X : leftStart.Y, useXAxis ? leftEnd.X : leftEnd.Y);\n            Real leftMax = MathR.Max(useXAxis ? leftStart.X : leftStart.Y, useXAxis ? leftEnd.X : leftEnd.Y);\n            Real rightMin = MathR.Min(useXAxis ? rightStart.X : rightStart.Y, useXAxis ? rightEnd.X : rightEnd.Y);\n            Real rightMax = MathR.Max(useXAxis ? rightStart.X : rightStart.Y, useXAxis ? rightEnd.X : rightEnd.Y);\n\n            Real overlapMin = MathR.Max(leftMin, rightMin);\n            Real overlapMax = MathR.Min(leftMax, rightMax);\n\n            if (overlapMax + sideEpsilon < overlapMin)\n            {\n                clippedCount = 0;\n                return false;\n            }\n\n            Real t0 = (overlapMin - baseOrigin) / baseExtent;\n            Real t1 = (overlapMax - baseOrigin) / baseExtent;\n\n            StoreLinearIntersection(baseStart + t0 * baseDelta, baseStart + t1 * baseDelta,\n                distanceEpsilonSq, clipped, out clippedCount);\n\n            return true;\n        }\n\n        Real t = Cross2D(offset, rightDelta) / cross;\n        Real u = Cross2D(offset, leftDelta) / cross;\n\n        if (t < -parameterEpsilon || t > (Real)1.0 + parameterEpsilon ||\n            u < -parameterEpsilon || u > (Real)1.0 + parameterEpsilon)\n        {\n            clippedCount = 0;\n            return false;\n        }\n\n        t = Math.Clamp(t, (Real)0.0, (Real)1.0);\n        clipped[0] = leftStart + t * leftDelta;\n        clippedCount = 1;\n\n        return true;\n    }\n\n    private static bool TryClipLinearIntersection(ReadOnlySpan<ClipPoint> left, int leftCount,\n        ReadOnlySpan<ClipPoint> right, int rightCount,\n        Real sideEpsilon, Real distanceEpsilonSq, Real areaEpsilon,\n        Span<ClipPoint> clipped, out int clippedCount)\n    {\n        if (leftCount < 2 || rightCount < 2)\n        {\n            clippedCount = 0;\n            return false;\n        }\n\n        if (leftCount == 2 && rightCount == 2)\n        {\n            return IntersectSegments(left[0], left[1], right[0], right[1],\n                sideEpsilon, distanceEpsilonSq, areaEpsilon, clipped, out clippedCount);\n        }\n\n        if (leftCount == 2)\n        {\n            return ClipSegmentAgainstPolygon(left[0], left[1], right, rightCount,\n                sideEpsilon, distanceEpsilonSq, clipped, out clippedCount);\n        }\n\n        if (rightCount == 2)\n        {\n            return ClipSegmentAgainstPolygon(right[0], right[1], left, leftCount,\n                sideEpsilon, distanceEpsilonSq, clipped, out clippedCount);\n        }\n\n        clippedCount = 0;\n        return false;\n    }\n\n    private static int SelectEvenlySpacedIndices(int count, int targetCount, Span<int> selected)\n    {\n        if (selected.Length < targetCount)\n        {\n            throw new ArgumentException($\"Selected span must hold at least {targetCount} indices.\", nameof(selected));\n        }\n\n        int selectedCount = Math.Min(count, targetCount);\n\n        for (int i = 0; i < selectedCount; i++)\n        {\n            selected[i] = ((2 * i + 1) * count) / (2 * selectedCount);\n        }\n\n        return selectedCount;\n    }\n\n    /// <summary>\n    /// Builds the contact manifold between two shapes given their transforms and initial contact.\n    /// </summary>\n    /// <typeparam name=\"Ta\">The type of support shape A.</typeparam>\n    /// <typeparam name=\"Tb\">The type of support shape B.</typeparam>\n    /// <param name=\"shapeA\">The first shape.</param>\n    /// <param name=\"shapeB\">The second shape.</param>\n    /// <param name=\"quaternionA\">Orientation of shape A.</param>\n    /// <param name=\"quaternionB\">Orientation of shape B.</param>\n    /// <param name=\"positionA\">Position of shape A.</param>\n    /// <param name=\"positionB\">Position of shape B.</param>\n    /// <param name=\"pA\">Initial contact point on shape A.</param>\n    /// <param name=\"pB\">Initial contact point on shape B.</param>\n    /// <param name=\"normal\">The collision normal (from B to A).</param>\n    [SkipLocalsInit]\n    public void BuildManifold<Ta,Tb>(Ta shapeA, Tb shapeB, in JQuaternion quaternionA, in JQuaternion quaternionB,\n        in JVector positionA, in JVector positionB, in JVector pA, in JVector pB, in JVector normal)\n        where Ta : ISupportMappable where Tb : ISupportMappable\n    {\n        // Reset\n        leftCount = 0;\n        rightCount = 0;\n        manifoldCount = 0;\n\n        JVector crossVector1 = MathHelper.CreateOrthonormal(normal);\n        JVector crossVector2 = normal % crossVector1;\n\n        // Project clipping into a frame translated by -positionA: keeps support points near the\n        // origin and avoids inflating intermediates by |positionA| for bodies far from world origin.\n        JVector relPosB = positionB - positionA;\n        JVector pAloc = pA - positionA;\n\n        Span<JVector> left = stackalloc JVector[MaxManifoldPoints];\n        Span<JVector> right = stackalloc JVector[MaxManifoldPoints];\n\n        for (int e = 0; e < MaxManifoldPoints; e++)\n        {\n            JVector ptNormal = normal + hexagonVertices[2 * e + 0] * Perturbation * crossVector1 +\n                               hexagonVertices[2 * e + 1] * Perturbation * crossVector2;\n\n            JVector.ConjugatedTransform(ptNormal, quaternionA, out JVector tmp);\n            shapeA.SupportMap(tmp, out JVector np1);\n            JVector.Transform(np1, quaternionA, out np1);\n            PushLeft(left, np1);\n\n            JVector.NegateInPlace(ref ptNormal);\n\n            JVector.ConjugatedTransform(ptNormal, quaternionB, out tmp);\n            shapeB.SupportMap(tmp, out JVector np2);\n            JVector.Transform(np2, quaternionB, out np2);\n            JVector.Add(np2, relPosB, out np2);\n            PushRight(right, np2);\n        }\n\n        Span<JVector> mA = MemoryMarshal.CreateSpan(ref Unsafe.As<Real, JVector>(ref manifoldData[0]), MaxManifoldPoints);\n        Span<JVector> mB = MemoryMarshal.CreateSpan(ref Unsafe.As<Real, JVector>(ref manifoldData[18]), MaxManifoldPoints);\n\n        if (leftCount > 1 && rightCount > 1)\n        {\n            Span<ClipPoint> left2 = stackalloc ClipPoint[MaxManifoldPoints];\n            Span<ClipPoint> right2 = stackalloc ClipPoint[MaxManifoldPoints];\n\n            for (int i = 0; i < leftCount; i++)\n            {\n                left2[i] = ProjectToPlane(left[i], pAloc, crossVector1, crossVector2);\n            }\n\n            for (int i = 0; i < rightCount; i++)\n            {\n                right2[i] = ProjectToPlane(right[i], pAloc, crossVector1, crossVector2);\n            }\n\n            CalculateClipTolerance(left2, leftCount, right2, rightCount,\n                out Real sideEpsilon, out Real distanceEpsilonSq, out Real areaEpsilon);\n\n            CompactPolygon(left2, ref leftCount, distanceEpsilonSq, areaEpsilon);\n            CompactPolygon(right2, ref rightCount, distanceEpsilonSq, areaEpsilon);\n\n            if (leftCount > 2) NormalizeWinding(left2, leftCount);\n            if (rightCount > 2) NormalizeWinding(right2, rightCount);\n\n            Span<ClipPoint> clipped = stackalloc ClipPoint[MaxClipPoints];\n\n            int clippedCount = 0;\n\n            if (leftCount > 2 && rightCount > 2)\n            {\n                Span<ClipPoint> buffer = stackalloc ClipPoint[MaxClipPoints];\n\n                left2[..leftCount].CopyTo(clipped);\n\n                clippedCount = ClipConvexPolygon(clipped, leftCount, right2[..rightCount], rightCount, buffer,\n                    sideEpsilon, distanceEpsilonSq, areaEpsilon);\n            }\n\n            if (clippedCount == 0)\n            {\n                TryClipLinearIntersection(left2[..leftCount], leftCount, right2[..rightCount], rightCount,\n                    sideEpsilon, distanceEpsilonSq, areaEpsilon, clipped, out clippedCount);\n            }\n\n            Real depth = JVector.Dot(pB - pA, normal);\n            JVector depthNormal = depth * normal;\n\n            CompactPolygon(clipped, ref clippedCount, distanceEpsilonSq, areaEpsilon);\n\n            if (clippedCount > 0)\n            {\n                Span<int> selected = stackalloc int[SolverContactLimit];\n                int selectedCount = SelectEvenlySpacedIndices(clippedCount, SolverContactLimit, selected);\n\n                for (int i = 0; i < selectedCount; i++)\n                {\n                    JVector pointOnA = LiftFromPlane(clipped[selected[i]], pA, crossVector1, crossVector2);\n                    mA[manifoldCount] = pointOnA;\n                    mB[manifoldCount++] = pointOnA + depthNormal;\n                }\n            }\n        }\n\n        if (manifoldCount == 0)\n        {\n            mA[manifoldCount] = pA;\n            mB[manifoldCount++] = pB;\n        }\n    } // BuildManifold\n\n    /// <summary>\n    /// Builds the contact manifold between two rigid body shapes, reading position and orientation\n    /// directly from their attached rigid bodies.\n    /// </summary>\n    /// <typeparam name=\"Ta\">The type of shape A.</typeparam>\n    /// <typeparam name=\"Tb\">The type of shape B.</typeparam>\n    /// <param name=\"shapeA\">The first rigid body shape.</param>\n    /// <param name=\"shapeB\">The second rigid body shape.</param>\n    /// <param name=\"pA\">Initial contact point on shape A.</param>\n    /// <param name=\"pB\">Initial contact point on shape B.</param>\n    /// <param name=\"normal\">The collision normal (from B to A).</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public void BuildManifold<Ta,Tb>(Ta shapeA, Tb shapeB,\n        in JVector pA, in JVector pB, in JVector normal) where Ta : RigidBodyShape where Tb : RigidBodyShape\n    {\n        BuildManifold(shapeA, shapeB, shapeA.RigidBody.Orientation, shapeB.RigidBody.Orientation,\n            shapeA.RigidBody.Position, shapeB.RigidBody.Position, pA, pB, normal);\n    }\n}\n"
  },
  {
    "path": "src/Jitter2/Collision/NarrowPhase/ConvexPolytope.cs",
    "content": "/*\n * Jitter2 Physics Library\n * (c) Thorben Linneweber and contributors\n * SPDX-License-Identifier: MIT\n */\n\nusing System;\nusing System.Diagnostics;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\nusing Jitter2.LinearMath;\nusing Jitter2.Unmanaged;\nusing Vertex = Jitter2.Collision.MinkowskiDifference.Vertex;\n\nnamespace Jitter2.Collision;\n\n/// <summary>\n/// Represents a convex polytope builder used in the Expanding Polytope Algorithm (EPA)\n/// for computing penetration depth and contact information.\n/// </summary>\n/// <remarks>\n/// <para>\n/// The polytope is iteratively expanded by adding vertices from the Minkowski difference\n/// until convergence. Call <see cref=\"InitHeap\"/> at least once before use to allocate\n/// memory for vertices and triangles.\n/// </para>\n/// <para>\n/// Memory is allocated from the unmanaged heap and reused across EPA iterations.\n/// </para>\n/// </remarks>\npublic unsafe struct ConvexPolytope\n{\n    [StructLayout(LayoutKind.Sequential)]\n    public struct Triangle\n    {\n        public short A, B, C;\n        public bool FacingOrigin;\n\n        public short this[int i] => ((short*)Unsafe.AsPointer(ref this))[i];\n\n        public JVector Normal;\n        public JVector ClosestToOrigin;\n\n        public Real NormalSq;\n        public Real ClosestToOriginSq;\n    }\n\n    private readonly struct Edge(short a, short b)\n    {\n        public readonly short A = a;\n        public readonly short B = b;\n\n        public static bool Equals(in Edge a, in Edge b)\n        {\n            return (a.A == b.A && a.B == b.B) || (a.A == b.B && a.B == b.A);\n        }\n    }\n\n    private const Real NumericEpsilon = (Real)1e-16;\n\n    // (*) Euler-characteristic: V (vertices) - E (edges) + F (faces) = 2\n    // We have triangles T instead of faces: F = T\n    // and every edge shares two triangles -> T = 2*V - 4\n    private const int MaxVertices = 128;\n    private const int MaxTriangles = 2 * MaxVertices;\n\n    private Triangle* triangles;\n    private Vertex* vertices;\n\n    private short tPointer;\n    private short vPointer;\n\n    private bool originEnclosed;\n\n    private JVector center;\n\n    public readonly Span<Triangle> HullTriangles => new(triangles, tPointer);\n\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public ref Vertex GetVertex(int index)\n    {\n        Debug.Assert(index < MaxVertices, \"Out of bounds.\");\n        return ref vertices[index];\n    }\n\n    /// <summary>\n    /// Indicates whether the origin is enclosed within the polyhedron.\n    /// Only valid after <see cref=\"GetClosestTriangle\"/> has been called, which updates this flag.\n    /// </summary>\n    public readonly bool OriginEnclosed => originEnclosed;\n\n    /// <summary>\n    /// Computes the closest points on shapes A and B from a triangle on the polytope.\n    /// </summary>\n    /// <param name=\"ctri\">The triangle from <see cref=\"GetClosestTriangle\"/>.</param>\n    /// <param name=\"pA\">The closest point on shape A.</param>\n    /// <param name=\"pB\">The closest point on shape B.</param>\n    public void CalculatePoints(in Triangle ctri, out JVector pA, out JVector pB)\n    {\n        CalcBarycentric(ctri, out JVector bc);\n        pA = bc.X * vertices[ctri.A].A + bc.Y * vertices[ctri.B].A + bc.Z * vertices[ctri.C].A;\n        pB = bc.X * vertices[ctri.A].B + bc.Y * vertices[ctri.B].B + bc.Z * vertices[ctri.C].B;\n    }\n\n    private bool CalcBarycentric(in Triangle tri, out JVector result)\n    {\n        bool clamped = false;\n\n        JVector a = vertices[tri.A].V;\n        JVector b = vertices[tri.B].V;\n        JVector c = vertices[tri.C].V;\n\n        // Calculate the barycentric coordinates of the origin (0,0,0) projected\n        // onto the plane of the triangle.\n        //\n        // [W. Heidrich, Journal of Graphics, GPU, and Game Tools,Volume 10, Issue 3, 2005.]\n#pragma warning disable IDE0018\n        JVector u, v, w, tmp;\n#pragma warning restore IDE0018\n\n        JVector.Subtract(a, b, out u);\n        JVector.Subtract(a, c, out v);\n\n        Real t = (Real)1.0 / tri.NormalSq;\n\n        JVector.Cross(u, a, out tmp);\n        Real gamma = JVector.Dot(tmp, tri.Normal) * t;\n        JVector.Cross(a, v, out tmp);\n        Real beta = JVector.Dot(tmp, tri.Normal) * t;\n        Real alpha = (Real)1.0 - gamma - beta;\n\n        // Clamp the projected barycentric coordinates to lie within the triangle,\n        // such that the clamped coordinates are closest (Euclidean) to the original point.\n        //\n        // [https://math.stackexchange.com/questions/1092912/find-closest-point-in-triangle-given-barycentric-coordinates-outside]\n        if (alpha >= (Real)0.0 && beta < (Real)0.0)\n        {\n            t = JVector.Dot(a, u);\n            if (gamma < (Real)0.0 && t > (Real)0.0)\n            {\n                beta = MathR.Min((Real)1.0, t / u.LengthSquared());\n                alpha = (Real)1.0 - beta;\n                gamma = (Real)0.0;\n            }\n            else\n            {\n                gamma = MathR.Min((Real)1.0, MathR.Max((Real)0.0, JVector.Dot(a, v) / v.LengthSquared()));\n                alpha = (Real)1.0 - gamma;\n                beta = (Real)0.0;\n            }\n\n            clamped = true;\n        }\n        else if (beta >= (Real)0.0 && gamma < (Real)0.0)\n        {\n            JVector.Subtract(b, c, out w);\n            t = JVector.Dot(b, w);\n            if (alpha < (Real)0.0 && t > (Real)0.0)\n            {\n                gamma = MathR.Min((Real)1.0, t / w.LengthSquared());\n                beta = (Real)1.0 - gamma;\n                alpha = (Real)0.0;\n            }\n            else\n            {\n                alpha = MathR.Min((Real)1.0, MathR.Max((Real)0.0, -JVector.Dot(b, u) / u.LengthSquared()));\n                beta = (Real)1.0 - alpha;\n                gamma = (Real)0.0;\n            }\n\n            clamped = true;\n        }\n        else if (gamma >= (Real)0.0 && alpha < (Real)0.0)\n        {\n            JVector.Subtract(b, c, out w);\n            t = -JVector.Dot(c, v);\n            if (beta < (Real)0.0 && t > (Real)0.0)\n            {\n                alpha = MathR.Min((Real)1.0, t / v.LengthSquared());\n                gamma = (Real)1.0 - alpha;\n                beta = (Real)0.0;\n            }\n            else\n            {\n                beta = MathR.Min((Real)1.0, MathR.Max((Real)0.0, -JVector.Dot(c, w) / w.LengthSquared()));\n                gamma = (Real)1.0 - beta;\n                alpha = (Real)0.0;\n            }\n\n            clamped = true;\n        }\n\n        result.X = alpha;\n        result.Y = beta;\n        result.Z = gamma;\n        return clamped;\n    }\n\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    private readonly bool IsLit(int candidate, int w)\n    {\n        // Checks if the triangle normal points to the same side as\n        // the vertex w.\n        ref Triangle tr = ref triangles[candidate];\n        JVector deltaA = vertices[w].V - vertices[tr.A].V;\n        return JVector.Dot(deltaA, tr.Normal) > 0;\n    }\n\n    private bool CreateTriangle(short a, short b, short c)\n    {\n        ref Triangle triangle = ref triangles[tPointer];\n        triangle.A = a;\n        triangle.B = b;\n        triangle.C = c;\n\n        JVector.Subtract(vertices[a].V, vertices[b].V, out JVector u);\n        JVector.Subtract(vertices[a].V, vertices[c].V, out JVector v);\n        JVector.Cross(u, v, out triangle.Normal);\n        triangle.NormalSq = triangle.Normal.LengthSquared();\n\n        // return on degenerate triangles\n        if (triangle.NormalSq < NumericEpsilon)\n        {\n            return false;\n        }\n\n        // do we need to flip the triangle? (the origin of the md has to be enclosed)\n        Real delta = JVector.Dot(triangle.Normal, vertices[a].V - center);\n\n        if (delta < 0)\n        {\n            (triangle.A, triangle.B) = (triangle.B, triangle.A);\n            JVector.NegateInPlace(ref triangle.Normal);\n        }\n\n        delta = JVector.Dot(triangle.Normal, vertices[a].V);\n        triangle.FacingOrigin = delta >= (Real)0.0;\n\n        if (CalcBarycentric(triangle, out JVector bc))\n        {\n            triangle.ClosestToOrigin = bc.X * vertices[triangle.A].V + bc.Y * vertices[triangle.B].V +\n                                       bc.Z * vertices[triangle.C].V;\n            triangle.ClosestToOriginSq = triangle.ClosestToOrigin.LengthSquared();\n        }\n        else\n        {\n            // prefer direct point-plane distance calculations if possible\n            JVector.Multiply(triangle.Normal, delta / triangle.NormalSq, out triangle.ClosestToOrigin);\n            triangle.ClosestToOriginSq = triangle.ClosestToOrigin.LengthSquared();\n        }\n\n        tPointer++;\n        return true;\n    }\n\n    /// <summary>\n    /// Finds the triangle on the polytope closest to the origin.\n    /// </summary>\n    /// <returns>A reference to the closest triangle. Also updates <see cref=\"OriginEnclosed\"/>.</returns>\n    public ref Triangle GetClosestTriangle()\n    {\n        int closestIndex = -1;\n        Real currentMin = Real.MaxValue;\n\n        // We can skip the test for enclosed origin if the origin was\n        // already enclosed once.\n        bool skipTest = originEnclosed;\n\n        originEnclosed = true;\n\n        for (int i = 0; i < tPointer; i++)\n        {\n            if (triangles[i].ClosestToOriginSq < currentMin)\n            {\n                currentMin = triangles[i].ClosestToOriginSq;\n                closestIndex = i;\n            }\n\n            if (!triangles[i].FacingOrigin) originEnclosed = skipTest;\n        }\n\n        return ref triangles[closestIndex];\n    }\n\n    /// <summary>\n    /// Initializes the polytope with a tetrahedron formed from the first four vertices.\n    /// </summary>\n    /// <remarks>\n    /// The first four vertices must be set before calling this method.\n    /// </remarks>\n    public void InitTetrahedron()\n    {\n        originEnclosed = false;\n        vPointer = 4;\n        tPointer = 0;\n\n        center = (Real)0.25 * (vertices[0].V + vertices[1].V + vertices[2].V + vertices[3].V);\n\n        CreateTriangle(0, 2, 1);\n        CreateTriangle(0, 1, 3);\n        CreateTriangle(0, 3, 2);\n        CreateTriangle(1, 2, 3);\n    }\n\n    /// <summary>\n    /// Initializes the polytope with a small tetrahedron centered at the specified point.\n    /// </summary>\n    /// <param name=\"point\">The center point of the initial tetrahedron.</param>\n    public void InitTetrahedron(in JVector point)\n    {\n        originEnclosed = false;\n        vPointer = 4;\n        tPointer = 0;\n        center = point;\n\n        const Real scale = (Real)1e-2; // minkowski sums not allowed to be thinner\n        vertices[0] = new Vertex(center + scale * new JVector(MathR.Sqrt((Real)(8.0 / 9.0)), (Real)0.0, -(Real)(1.0 / 3.0)));\n        vertices[1] = new Vertex(center + scale * new JVector(-MathR.Sqrt((Real)(2.0 / 9.0)), MathR.Sqrt((Real)(2.0 / 3.0)), -(Real)(1.0 / 3.0)));\n        vertices[2] = new Vertex(center + scale * new JVector(-MathR.Sqrt((Real)(2.0 / 9.0)), -MathR.Sqrt((Real)(2.0 / 3.0)), -(Real)(1.0 / 3.0)));\n        vertices[3] = new Vertex(center + scale * new JVector((Real)0.0, (Real)0.0, (Real)1.0));\n\n        CreateTriangle(2, 0, 1);\n        CreateTriangle(1, 0, 3);\n        CreateTriangle(3, 0, 2);\n        CreateTriangle(2, 1, 3);\n    }\n\n    /// <summary>\n    /// Allocates unmanaged memory for vertices and triangles.\n    /// </summary>\n    /// <remarks>\n    /// Must be called before any other method. Safe to call multiple times; allocation occurs only once.\n    /// </remarks>\n    public void InitHeap()\n    {\n        if (vertices != (void*)0) return;\n        vertices = MemoryHelper.AllocateHeap<Vertex>(MaxVertices);\n        triangles = MemoryHelper.AllocateHeap<Triangle>(MaxTriangles);\n    }\n\n    /// <summary>\n    /// Adds a vertex to the polytope and rebuilds the convex hull.\n    /// </summary>\n    /// <param name=\"vertex\">The Minkowski difference vertex to add.</param>\n    /// <returns><c>true</c> if the vertex was incorporated; <c>false</c> if the polytope could not expand.</returns>\n    /// <remarks>\n    /// This operation invalidates references from previous <see cref=\"GetClosestTriangle\"/> calls.\n    /// </remarks>\n    [SkipLocalsInit]\n    [MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)]\n    public bool AddVertex(in Vertex vertex)\n    {\n        Debug.Assert(vPointer < MaxVertices, \"Maximum number of vertices exceeded.\");\n\n        // see (*) above\n        Edge* edges = stackalloc Edge[MaxVertices * 3 / 2];\n\n        vertices[vPointer] = vertex;\n\n        int ePointer = 0;\n        for (int index = tPointer; index-- > 0;)\n        {\n            if (!IsLit(index, vPointer)) continue;\n\n            for (int k = 0; k < 3; k++)\n            {\n                Edge edge = new Edge(triangles[index][(k + 0) % 3], triangles[index][(k + 1) % 3]);\n                bool added = true;\n                for (int e = ePointer; e-- > 0;)\n                {\n                    if (Edge.Equals(edges[e], edge))\n                    {\n                        edges[e] = edges[--ePointer];\n                        added = false;\n                    }\n                }\n\n                if (added) edges[ePointer++] = edge;\n            }\n\n            triangles[index] = triangles[--tPointer];\n        }\n\n        if (ePointer == 0) return false;\n\n        for (int i = 0; i < ePointer; i++)\n        {\n            if (!CreateTriangle(edges[i].A, edges[i].B, vPointer))\n                return false;\n        }\n\n        vPointer++;\n        return true;\n    }\n}"
  },
  {
    "path": "src/Jitter2/Collision/NarrowPhase/ISupportMappable.cs",
    "content": "/*\n * Jitter2 Physics Library\n * (c) Thorben Linneweber and contributors\n * SPDX-License-Identifier: MIT\n */\n\nusing Jitter2.LinearMath;\n\nnamespace Jitter2.Collision;\n\n/// <summary>\n/// Defines an interface for a generic convex shape characterized by its support function.\n/// </summary>\n/// <remarks>\n/// The support function is the fundamental operation for GJK-based collision detection algorithms.\n/// Any convex shape can be represented implicitly through its support mapping without requiring\n/// explicit vertex or face data.\n/// </remarks>\npublic interface ISupportMappable\n{\n    /// <summary>\n    /// Computes the point on the shape that is furthest in the specified direction.\n    /// </summary>\n    /// <param name=\"direction\">The search direction in local space. Does not need to be normalized.</param>\n    /// <param name=\"result\">The point on the shape's surface furthest along <paramref name=\"direction\"/>.</param>\n    void SupportMap(in JVector direction, out JVector result);\n\n    /// <summary>\n    /// Computes a point deep within the shape, used as an initial search point in GJK-based algorithms.\n    /// </summary>\n    /// <param name=\"point\">A point that must lie strictly inside the convex hull.</param>\n    void GetCenter(out JVector point);\n}"
  },
  {
    "path": "src/Jitter2/Collision/NarrowPhase/MinkowskiDifference.cs",
    "content": "/*\n * Jitter2 Physics Library\n * (c) Thorben Linneweber and contributors\n * SPDX-License-Identifier: MIT\n */\n\nusing System.Runtime.CompilerServices;\nusing Jitter2.LinearMath;\n\nnamespace Jitter2.Collision;\n\n/// <summary>\n/// Provides methods for computing points on the Minkowski difference of two convex shapes.\n/// </summary>\n/// <remarks>\n/// The Minkowski difference A - B is defined as the set of all points (a - b) where a is in A and b is in B.\n/// This is the fundamental construct used by GJK and EPA algorithms to detect collisions.\n/// </remarks>\npublic static class MinkowskiDifference\n{\n    /// <summary>\n    /// Represents a vertex on the Minkowski difference of two shapes.\n    /// </summary>\n    public struct Vertex\n    {\n        /// <summary>The point on the Minkowski difference: <c>V = A - B</c>.</summary>\n        public JVector V;\n\n        /// <summary>The support point on shape A in world space.</summary>\n        public JVector A;\n\n        /// <summary>The support point on shape B in world space.</summary>\n        public JVector B;\n\n        /// <summary>\n        /// Creates a vertex with only the difference point set.\n        /// </summary>\n        /// <param name=\"v\">The Minkowski difference point.</param>\n        public Vertex(JVector v)\n        {\n            V = v;\n        }\n    }\n\n    /// <summary>\n    /// Computes the support function S_{A-B}(d) = S_A(d) - S_B(-d) for the Minkowski difference.\n    /// </summary>\n    /// <typeparam name=\"Ta\">The type of support shape A.</typeparam>\n    /// <typeparam name=\"Tb\">The type of support shape B.</typeparam>\n    /// <param name=\"supportA\">The support function of shape A (at origin, not rotated).</param>\n    /// <param name=\"supportB\">The support function of shape B.</param>\n    /// <param name=\"orientationB\">The orientation of shape B.</param>\n    /// <param name=\"positionB\">The position of shape B.</param>\n    /// <param name=\"direction\">The search direction.</param>\n    /// <param name=\"v\">The resulting vertex containing support points from both shapes.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static void Support<Ta,Tb>(in Ta supportA, in Tb supportB, in JQuaternion orientationB,\n        in JVector positionB, in JVector direction, out Vertex v) where Ta : ISupportMappable where Tb : ISupportMappable\n    {\n        JVector.Negate(direction, out JVector tmp);\n        supportA.SupportMap(direction, out v.A);\n\n        JVector.ConjugatedTransform(tmp, orientationB, out JVector tmp2);\n        supportB.SupportMap(tmp2, out v.B);\n        JVector.Transform(v.B, orientationB, out v.B);\n        JVector.Add(v.B, positionB, out v.B);\n\n        JVector.Subtract(v.A, v.B, out v.V);\n    }\n\n    /// <summary>\n    /// Computes a point guaranteed to be inside the Minkowski difference.\n    /// </summary>\n    /// <typeparam name=\"Ta\">The type of support shape A.</typeparam>\n    /// <typeparam name=\"Tb\">The type of support shape B.</typeparam>\n    /// <param name=\"supportA\">The support function of shape A (at origin, not rotated).</param>\n    /// <param name=\"supportB\">The support function of shape B.</param>\n    /// <param name=\"orientationB\">The orientation of shape B.</param>\n    /// <param name=\"positionB\">The position of shape B.</param>\n    /// <param name=\"center\">The resulting vertex representing the center of the Minkowski difference.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static void GetCenter<Ta,Tb>(in Ta supportA, in Tb supportB, in JQuaternion orientationB, in JVector positionB,\n        out Vertex center) where Ta : ISupportMappable where Tb : ISupportMappable\n    {\n        supportA.GetCenter(out center.A);\n        supportB.GetCenter(out center.B);\n        JVector.Transform(center.B, orientationB, out center.B);\n        JVector.Add(positionB, center.B, out center.B);\n        JVector.Subtract(center.A, center.B, out center.V);\n    }\n}"
  },
  {
    "path": "src/Jitter2/Collision/NarrowPhase/NarrowPhase.cs",
    "content": "/*\n * Jitter2 Physics Library\n * (c) Thorben Linneweber and contributors\n * SPDX-License-Identifier: MIT\n */\n\nusing System;\nusing System.Diagnostics;\nusing System.Runtime.CompilerServices;\nusing Jitter2.LinearMath;\nusing Vertex = Jitter2.Collision.MinkowskiDifference.Vertex;\n\nnamespace Jitter2.Collision;\n\n/// <summary>\n/// Provides collision detection algorithms for convex shapes defined by support functions.\n/// </summary>\n/// <remarks>\n/// <para>\n/// Implements GJK (Gilbert-Johnson-Keerthi) for distance queries, MPR (Minkowski Portal Refinement)\n/// for fast overlap detection, and EPA (Expanding Polytope Algorithm) for penetration depth.\n/// </para>\n/// <para>\n/// All methods are thread-safe when used with thread-local solver state.\n/// </para>\n/// </remarks>\npublic static class NarrowPhase\n{\n    private const Real NumericEpsilon = (Real)1e-16;\n\n    private struct MprEpaSolver\n    {\n        private ConvexPolytope convexPolytope;\n\n        [MethodImpl(MethodImplOptions.AggressiveInlining)]\n        private bool SolveMprEpa<Ta,Tb>(in Ta supportA, in Tb supportB, in JQuaternion orientationB, in JVector positionB,\n            ref JVector point1, ref JVector point2, ref JVector normal, ref Real penetration)\n            where Ta : ISupportMappable where Tb : ISupportMappable\n        {\n            const Real collideEpsilon = (Real)1e-5;\n            const int maxIter = 85;\n\n            convexPolytope.InitTetrahedron();\n\n            int iter = 0;\n\n            Unsafe.SkipInit(out ConvexPolytope.Triangle ctri);\n\n            while (++iter < maxIter)\n            {\n                ctri = convexPolytope.GetClosestTriangle();\n\n                JVector searchDir = ctri.ClosestToOrigin;\n                Real searchDirSq = ctri.ClosestToOriginSq;\n\n                if (ctri.ClosestToOriginSq < NumericEpsilon)\n                {\n                    searchDir = ctri.Normal;\n                    searchDirSq = ctri.NormalSq;\n                }\n\n                MinkowskiDifference.Support(supportA, supportB, orientationB, positionB,\n                    searchDir, out Vertex vertex);\n\n                // compare with the corresponding code in Collision.\n                Real deltaDist = JVector.Dot(ctri.ClosestToOrigin - vertex.V, searchDir);\n\n                if (deltaDist * deltaDist <= collideEpsilon * collideEpsilon * searchDirSq)\n                {\n                    goto converged;\n                }\n\n                if (!convexPolytope.AddVertex(vertex))\n                {\n                    goto converged;\n                }\n            }\n\n            Logger.Warning(\"{0}: EPA, Could not converge within {1} iterations.\", nameof(NarrowPhase), maxIter);\n\n            return false;\n\n            converged:\n\n            convexPolytope.CalculatePoints(ctri, out point1, out point2);\n\n            normal = ctri.Normal * ((Real)1.0 / MathR.Sqrt(ctri.NormalSq));\n            penetration = MathR.Sqrt(ctri.ClosestToOriginSq);\n\n            return true;\n        }\n\n        [MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)]\n        public bool SolveMpr<Ta,Tb>(in Ta supportA, in Tb supportB, in JQuaternion orientationB,\n            in JVector positionB, Real epaThreshold,\n            out JVector pointA, out JVector pointB, out JVector normal, out Real penetration)\n            where Ta : ISupportMappable where Tb : ISupportMappable\n        {\n            /*\n            This method is adapted from XenoCollide.\n            Modified from the original version.\n\n            XenoCollide is available under the zlib license:\n\n            XenoCollide Collision Detection and Physics Library\n            Copyright (c) 2007-2014 Gary Snethen http://xenocollide.com\n\n            This software is provided 'as-is', without any express or implied warranty.\n            In no event will the authors be held liable for any damages arising\n            from the use of this software.\n            Permission is granted to anyone to use this software for any purpose,\n            including commercial applications, and to alter it and redistribute it freely,\n            subject to the following restrictions:\n\n            1. The origin of this software must not be misrepresented; you must\n            not claim that you wrote the original software. If you use this\n            software in a product, an acknowledgment in the product documentation\n            would be appreciated but is not required.\n            2. Altered source versions must be plainly marked as such, and must\n            not be misrepresented as being the original software.\n            3. This notice may not be removed or altered from any source distribution.\n            */\n            const Real collideEpsilon = (Real)1e-5;\n            const int maxIter = 34;\n\n            Unsafe.SkipInit(out Vertex v0);\n            Unsafe.SkipInit(out Vertex v1);\n            Unsafe.SkipInit(out Vertex v2);\n            Unsafe.SkipInit(out Vertex v3);\n            Unsafe.SkipInit(out Vertex v4);\n\n            Unsafe.SkipInit(out JVector temp1);\n            Unsafe.SkipInit(out JVector temp2);\n            Unsafe.SkipInit(out JVector temp3);\n\n            penetration = (Real)0.0;\n\n            MinkowskiDifference.GetCenter(supportA, supportB, orientationB, positionB, out v0);\n\n            if (Math.Abs(v0.V.X) < NumericEpsilon &&\n                Math.Abs(v0.V.Y) < NumericEpsilon &&\n                Math.Abs(v0.V.Z) < NumericEpsilon)\n            {\n                // any direction is fine\n                v0.V.X = (Real)1e-05;\n            }\n\n            JVector.Negate(v0.V, out normal);\n\n            MinkowskiDifference.Support(supportA, supportB, orientationB, positionB, normal, out v1);\n\n            pointA = v1.A;\n            pointB = v1.B;\n\n            if (JVector.Dot(v1.V, normal) <= (Real)0.0) return false;\n            JVector.Cross(v1.V, v0.V, out normal);\n\n            const Real sphericalEpsilon = (Real)1e-12;\n            if (normal.LengthSquared() < sphericalEpsilon)\n            {\n                // The origin, v0 and v1 form a line. Most probably\n                // two spheres colliding.\n                JVector.Subtract(v1.V, v0.V, out normal);\n                JVector.NormalizeInPlace(ref normal);\n\n                JVector.Subtract(v1.A, v1.B, out temp1);\n                penetration = JVector.Dot(temp1, normal);\n\n                return true;\n            }\n\n            MinkowskiDifference.Support(supportA, supportB, orientationB, positionB, normal, out v2);\n\n            if (JVector.Dot(v2.V, normal) <= (Real)0.0) return false;\n\n            // Determine whether the origin is on + or - side of plane (v1.V, v0.V, v2.V)\n            JVector.Subtract(v1.V, v0.V, out temp1);\n            JVector.Subtract(v2.V, v0.V, out temp2);\n            JVector.Cross(temp1, temp2, out normal);\n\n            Real dist = JVector.Dot(normal, v0.V);\n\n            // If the origin is on the - side of the plane, reverse the direction of the plane\n            if (dist > (Real)0.0)\n            {\n                JVector.Swap(ref v1.V, ref v2.V);\n                JVector.Swap(ref v1.A, ref v2.A);\n                JVector.Swap(ref v1.B, ref v2.B);\n                JVector.Negate(normal, out normal);\n            }\n\n            int phase2 = 0;\n            int phase1 = 0;\n            bool hit = false;\n\n            // Phase One: Identify a portal\n            while (true)\n            {\n                if (phase1 > maxIter) return false;\n\n                phase1++;\n\n                MinkowskiDifference.Support(supportA, supportB, orientationB, positionB, normal, out v3);\n\n                if (JVector.Dot(v3.V, normal) <= (Real)0.0)\n                {\n                    return false;\n                }\n\n                // If origin is outside (v1.V,v0.V,v3.V), then eliminate v2.V and loop\n                JVector.Cross(v1.V, v3.V, out temp1);\n                if (JVector.Dot(temp1, v0.V) < (Real)0.0)\n                {\n                    v2 = v3;\n                    JVector.Subtract(v1.V, v0.V, out temp1);\n                    JVector.Subtract(v3.V, v0.V, out temp2);\n                    JVector.Cross(temp1, temp2, out normal);\n                    continue;\n                }\n\n                // If origin is outside (v3.V,v0.V,v2.V), then eliminate v1.V and loop\n                JVector.Cross(v3.V, v2.V, out temp1);\n                if (JVector.Dot(temp1, v0.V) < (Real)0.0)\n                {\n                    v1 = v3;\n                    JVector.Subtract(v3.V, v0.V, out temp1);\n                    JVector.Subtract(v2.V, v0.V, out temp2);\n                    JVector.Cross(temp1, temp2, out normal);\n                    continue;\n                }\n\n                break;\n            }\n\n            // Phase Two: Refine the portal\n            // We are now inside a wedge...\n            while (true)\n            {\n                phase2++;\n\n                // Compute normal of the wedge face\n                JVector.Subtract(v2.V, v1.V, out temp1);\n                JVector.Subtract(v3.V, v1.V, out temp2);\n                JVector.Cross(temp1, temp2, out normal);\n\n                // normal.Normalize();\n                Real normalSq = normal.LengthSquared();\n\n                // Can this happen???  Can it be handled more cleanly?\n                if (normalSq < NumericEpsilon)\n                {\n                    // was: return true;\n                    // better not return a collision\n                    Debug.Assert(false, \"MPR: This should not happen.\");\n                    return false;\n                }\n\n                if (!hit)\n                {\n                    // Compute distance from origin to wedge face\n                    Real d = JVector.Dot(normal, v1.V);\n                    // If the origin is inside the wedge, we have a hit\n                    hit = d >= 0;\n                }\n\n                MinkowskiDifference.Support(supportA, supportB, orientationB, positionB, normal, out v4);\n\n                JVector.Subtract(v4.V, v3.V, out temp3);\n                Real delta = JVector.Dot(temp3, normal);\n                penetration = JVector.Dot(v4.V, normal);\n\n                // If the boundary is thin enough, the origin is outside the support plane for the newly discovered\n                // vertex, or the maximum number of iterations has been reached, then we can terminate\n                if (delta * delta <= collideEpsilon * collideEpsilon * normalSq || penetration <= (Real)0.0 ||\n                    phase2 > maxIter)\n                {\n                    if (hit)\n                    {\n                        Real invnormal = (Real)1.0 / MathR.Sqrt(normalSq);\n\n                        penetration *= invnormal;\n\n                        if (penetration > epaThreshold)\n                        {\n                            convexPolytope.InitHeap();\n                            convexPolytope.GetVertex(0) = v0;\n                            convexPolytope.GetVertex(1) = v1;\n                            convexPolytope.GetVertex(2) = v2;\n                            convexPolytope.GetVertex(3) = v3;\n\n                            // If epa fails it does not set any result data. We continue with the mpr data.\n                            if (SolveMprEpa(supportA, supportB, orientationB, positionB,\n                                    ref pointA, ref pointB, ref normal, ref penetration)) return true;\n                        }\n\n                        normal *= invnormal;\n\n                        // Compute the barycentric coordinates of the origin\n                        JVector.Cross(v1.V, temp1, out temp3);\n                        Real gamma = JVector.Dot(temp3, normal) * invnormal;\n                        JVector.Cross(temp2, v1.V, out temp3);\n                        Real beta = JVector.Dot(temp3, normal) * invnormal;\n                        Real alpha = (Real)1.0 - gamma - beta;\n\n                        pointA = alpha * v1.A + beta * v2.A + gamma * v3.A;\n                        pointB = alpha * v1.B + beta * v2.B + gamma * v3.B;\n                    }\n\n                    return hit;\n                }\n\n                // Compute the tetrahedron dividing face (v4.V, v0.V, v3.V)\n                JVector.Cross(v4.V, v0.V, out temp1);\n                Real dot = JVector.Dot(temp1, v1.V);\n\n                if (dot >= (Real)0.0)\n                {\n                    dot = JVector.Dot(temp1, v2.V);\n\n                    if (dot >= (Real)0.0)\n                    {\n                        v1 = v4; // Inside d1 & inside d2 -> eliminate v1.V\n                    }\n                    else\n                    {\n                        v3 = v4; // Inside d1 & outside d2 -> eliminate v3.V\n                    }\n                }\n                else\n                {\n                    dot = JVector.Dot(temp1, v3.V);\n\n                    if (dot >= (Real)0.0)\n                    {\n                        v2 = v4; // Outside d1 & inside d3 -> eliminate v2.V\n                    }\n                    else\n                    {\n                        v1 = v4; // Outside d1 & outside d3 -> eliminate v1.V\n                    }\n                }\n            }\n        }\n\n        [MethodImpl(MethodImplOptions.AggressiveInlining)]\n        public bool Collision<Ta,Tb>(in Ta supportA, in Tb supportB, in JQuaternion orientationB, in JVector positionB,\n            out JVector point1, out JVector point2, out JVector normal, out Real penetration)\n            where Ta : ISupportMappable where Tb : ISupportMappable\n        {\n            const Real collideEpsilon = (Real)1e-4;\n            const int maxIter = 85;\n\n            MinkowskiDifference.GetCenter(supportA, supportB,orientationB, positionB, out Vertex centerVertex);\n            JVector center = centerVertex.V;\n\n            convexPolytope.InitHeap();\n            convexPolytope.InitTetrahedron(center);\n\n            int iter = 0;\n\n            Unsafe.SkipInit(out ConvexPolytope.Triangle ctri);\n\n            while (++iter < maxIter)\n            {\n                ctri = convexPolytope.GetClosestTriangle();\n\n                JVector searchDir = ctri.ClosestToOrigin;\n                Real searchDirSq = ctri.ClosestToOriginSq;\n\n                if (!convexPolytope.OriginEnclosed) JVector.NegateInPlace(ref searchDir);\n\n                if (ctri.ClosestToOriginSq < NumericEpsilon)\n                {\n                    searchDir = ctri.Normal;\n                    searchDirSq = ctri.NormalSq;\n                }\n\n                MinkowskiDifference.Support(supportA, supportB, orientationB, positionB, searchDir, out Vertex vertex);\n\n                // Can we further \"extend\" the convex hull by adding the new vertex?\n                //\n                // v = Vertices[vPointer] (support point)\n                // c = Triangles[Head].ClosestToOrigin\n                // s = searchDir\n                //\n                // abs(dot(c - v, s)) / len(s) < e <=> [dot(c - v, s)]^2 = e*e*s^2\n                Real deltaDist = JVector.Dot(ctri.ClosestToOrigin - vertex.V, searchDir);\n\n                if (deltaDist * deltaDist <= collideEpsilon * collideEpsilon * searchDirSq)\n                {\n                    goto converged;\n                }\n\n                if (!convexPolytope.AddVertex(vertex))\n                {\n                    goto converged;\n                }\n            }\n\n            point1 = point2 = normal = JVector.Zero;\n            penetration = (Real)0.0;\n\n            Logger.Warning(\"{0}: EPA, Could not converge within {1} iterations.\\\"\", nameof(NarrowPhase), maxIter);\n\n            return false;\n\n            converged:\n\n            convexPolytope.CalculatePoints(ctri, out point1, out point2);\n\n            penetration = MathR.Sqrt(ctri.ClosestToOriginSq);\n            if (!convexPolytope.OriginEnclosed) penetration *= -(Real)1.0;\n\n            if (MathR.Abs(penetration) > NumericEpsilon) normal = ctri.ClosestToOrigin * ((Real)1.0 / penetration);\n            else normal = ctri.Normal * ((Real)1.0 / MathR.Sqrt(ctri.NormalSq));\n\n            return true;\n        }\n    }\n\n    // ------------------------------------------------------------------------------------------------------------\n    [ThreadStatic] private static MprEpaSolver _solver;\n\n    /// <summary>\n    /// Check if a point is inside a shape.\n    /// </summary>\n    /// <param name=\"support\">Support map representing the shape.</param>\n    /// <param name=\"point\">Point to check.</param>\n    /// <returns>Returns true if the point is contained within the shape, false otherwise.</returns>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static bool PointTest<Ta>(in Ta support, in JVector point) where Ta : ISupportMappable\n    {\n        const Real collideEpsilon = (Real)1e-4;\n        const int maxIter = 34;\n\n        JVector x = point;\n\n        support.GetCenter(out var center);\n        JVector v = x - center;\n\n        Unsafe.SkipInit(out SimplexSolver simplexSolver);\n        simplexSolver.Reset();\n\n        int iter = maxIter;\n\n        Real distSq = v.LengthSquared();\n\n        while (distSq > collideEpsilon * collideEpsilon && iter-- != 0)\n        {\n            support.SupportMap(v, out JVector p);\n            JVector.Subtract(x, p, out JVector w);\n\n            Real vw = JVector.Dot(v, w);\n\n            if (vw >= (Real)0.0)\n            {\n                return false;\n            }\n\n            if (!simplexSolver.AddVertex(w, out v))\n            {\n                goto converged;\n            }\n\n            distSq = v.LengthSquared();\n        }\n\n        converged:\n\n        return true;\n    }\n\n    /// <summary>\n    /// Check if a point is inside a shape.\n    /// </summary>\n    /// <param name=\"support\">Support map representing the shape.</param>\n    /// <param name=\"orientation\">Orientation of the shape.</param>\n    /// <param name=\"position\">Position of the shape.</param>\n    /// <param name=\"point\">Point to check.</param>\n    /// <returns>Returns true if the point is contained within the shape, false otherwise.</returns>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static bool PointTest<Ta>(in Ta support, in JMatrix orientation,\n        in JVector position, in JVector point) where Ta : ISupportMappable\n    {\n        JVector transformedOrigin = JVector.TransposedTransform(point - position, orientation);\n        return PointTest(support, transformedOrigin);\n    }\n\n    /// <summary>\n    /// Performs a ray cast against a shape.\n    /// </summary>\n    /// <param name=\"support\">The support function of the shape.</param>\n    /// <param name=\"orientation\">The orientation of the shape in world space.</param>\n    /// <param name=\"position\">The position of the shape in world space.</param>\n    /// <param name=\"origin\">The origin of the ray.</param>\n    /// <param name=\"direction\">The direction of the ray; normalization is not necessary.</param>\n    /// <param name=\"lambda\">Specifies the hit point of the ray, calculated as 'origin + lambda * direction'.\n    /// Zero if the origin is inside the shape, <see cref=\"Real.PositiveInfinity\"/> if the ray does not hit.</param>\n    /// <param name=\"normal\">\n    /// The normalized normal vector perpendicular to the surface, pointing outwards. Zero if the ray does not hit or\n    /// the ray origin is inside the shape.\n    /// </param>\n    /// <returns>Returns true if the ray intersects with the shape; otherwise, false.</returns>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static bool RayCast<Ta>(in Ta support, in JQuaternion orientation,\n        in JVector position, in JVector origin, in JVector direction, out Real lambda, out JVector normal)\n        where Ta : ISupportMappable\n    {\n        // rotate the ray into the reference frame of bodyA...\n        JVector transformedDir = JVector.ConjugatedTransform(direction, orientation);\n        JVector transformedOrigin = JVector.ConjugatedTransform(origin - position, orientation);\n\n        bool result = RayCast(support, transformedOrigin, transformedDir, out lambda, out normal);\n\n        // ...rotate back.\n        JVector.Transform(normal, orientation, out normal);\n\n        return result;\n    }\n\n    /// <summary>\n    /// Performs a ray cast against a shape.\n    /// </summary>\n    /// <param name=\"support\">The support function of the shape.</param>\n    /// <param name=\"origin\">The origin of the ray.</param>\n    /// <param name=\"direction\">The direction of the ray; normalization is not necessary.</param>\n    /// <param name=\"lambda\">Specifies the hit point of the ray, calculated as 'origin + lambda * direction'.\n    /// Zero if the origin is inside the shape, <see cref=\"Real.PositiveInfinity\"/> if the ray does not hit.</param>\n    /// <param name=\"normal\">\n    /// The normalized normal vector perpendicular to the surface, pointing outwards. Zero if the ray does not hit or\n    /// the ray origin is inside the shape.\n    /// </param>\n    /// <returns>Returns true if the ray intersects with the shape; otherwise, false.</returns>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static bool RayCast<Ta>(in Ta support, in JVector origin, in JVector direction,\n        out Real lambda, out JVector normal) where Ta : ISupportMappable\n    {\n        const Real collideEpsilon = (Real)1e-4;\n        const int maxIter = 34;\n\n        normal = JVector.Zero;\n        lambda = (Real)0.0;\n\n        JVector r = direction;\n        JVector x = origin;\n\n        support.GetCenter(out var center);\n        JVector v = x - center;\n\n        Unsafe.SkipInit(out SimplexSolver simplexSolver);\n        simplexSolver.Reset();\n\n        int iter = maxIter;\n\n        Real distSq = v.LengthSquared();\n\n        while (distSq > collideEpsilon * collideEpsilon && iter-- != 0)\n        {\n            support.SupportMap(v, out JVector p);\n\n            JVector.Subtract(x, p, out JVector w);\n\n            Real vdotW = JVector.Dot(v, w);\n\n            if (vdotW > (Real)0.0)\n            {\n                Real vdotR = JVector.Dot(v, r);\n\n                if (vdotR >= -NumericEpsilon)\n                {\n                    lambda = Real.PositiveInfinity;\n                    return false;\n                }\n\n                lambda -= vdotW / vdotR;\n\n                JVector.Multiply(r, lambda, out x);\n                JVector.Add(origin, x, out x);\n                JVector.Subtract(x, p, out w);\n                normal = v;\n            }\n\n            if (!simplexSolver.AddVertex(w, out v))\n            {\n                goto converged;\n            }\n\n            distSq = v.LengthSquared();\n        }\n\n        converged:\n\n        normal = JVector.NormalizeSafe(in normal, NumericEpsilon);\n        return true;\n    }\n\n    /// <summary>\n    /// Determines whether two convex shapes overlap, providing detailed information for both overlapping and separated\n    /// cases. It assumes that support shape A is at position zero and not rotated.\n    /// Internally, the method employs the Expanding Polytope Algorithm (EPA) to gather collision information.\n    /// </summary>\n    /// <param name=\"supportA\">The support function of shape A.</param>\n    /// <param name=\"supportB\">The support function of shape B.</param>\n    /// <param name=\"orientationB\">The orientation of shape B.</param>\n    /// <param name=\"positionB\">The position of shape B.</param>\n    /// <param name=\"pointA\">\n    /// For the overlapping case: the deepest point on shape A inside shape B; for the separated case: the\n    /// closest point on shape A to shape B.\n    /// </param>\n    /// <param name=\"pointB\">\n    /// For the overlapping case: the deepest point on shape B inside shape A; for the separated case: the\n    /// closest point on shape B to shape A.\n    /// </param>\n    /// <param name=\"normal\">\n    /// The normalized collision normal pointing from pointB to pointA. This normal remains defined even\n    /// if pointA and pointB coincide. It denotes the direction in which the shapes should be moved by the minimum distance\n    /// (defined by the penetration depth) to either separate them in the overlapping case or bring them into contact in\n    /// the separated case.\n    /// </param>\n    /// <param name=\"penetration\">The penetration depth.</param>\n    /// <returns>\n    /// Returns true if the algorithm completes successfully, false otherwise. In case of algorithm convergence\n    /// failure, collision information reverts to the type's default values.\n    /// </returns>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static bool Collision<Ta,Tb>(in Ta supportA, in Tb supportB,\n        in JQuaternion orientationB, in JVector positionB,\n        out JVector pointA, out JVector pointB, out JVector normal, out Real penetration)\n        where Ta : ISupportMappable where Tb : ISupportMappable\n    {\n        // ..perform collision detection..\n        bool success = _solver.Collision(supportA, supportB, orientationB, positionB,\n            out pointA, out pointB, out normal, out penetration);\n\n        return success;\n    }\n\n    /// <summary>\n    /// Determines whether two convex shapes overlap, providing detailed information for both overlapping and separated\n    /// cases. Internally, the method employs the Expanding Polytope Algorithm (EPA) to gather collision information.\n    /// </summary>\n    /// <param name=\"supportA\">The support function of shape A.</param>\n    /// <param name=\"supportB\">The support function of shape B.</param>\n    /// <param name=\"orientationA\">The orientation of shape A in world space.</param>\n    /// <param name=\"orientationB\">The orientation of shape B in world space.</param>\n    /// <param name=\"positionA\">The position of shape A in world space.</param>\n    /// <param name=\"positionB\">The position of shape B in world space.</param>\n    /// <param name=\"pointA\">\n    /// For the overlapping case: the deepest point on shape A inside shape B; for the separated case: the\n    /// closest point on shape A to shape B.\n    /// </param>\n    /// <param name=\"pointB\">\n    /// For the overlapping case: the deepest point on shape B inside shape A; for the separated case: the\n    /// closest point on shape B to shape A.\n    /// </param>\n    /// <param name=\"normal\">\n    /// The normalized collision normal pointing from pointB to pointA. This normal remains defined even\n    /// if pointA and pointB coincide. It denotes the direction in which the shapes should be moved by the minimum distance\n    /// (defined by the penetration depth) to either separate them in the overlapping case or bring them into contact in\n    /// the separated case.\n    /// </param>\n    /// <param name=\"penetration\">The penetration depth.</param>\n    /// <returns>\n    /// Returns true if the algorithm completes successfully, false otherwise. In case of algorithm convergence\n    /// failure, collision information reverts to the type's default values.\n    /// </returns>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static bool Collision<Ta,Tb>(in Ta supportA, in Tb supportB,\n        in JQuaternion orientationA, in JQuaternion orientationB,\n        in JVector positionA, in JVector positionB,\n        out JVector pointA, out JVector pointB, out JVector normal, out Real penetration)\n        where Ta : ISupportMappable where Tb : ISupportMappable\n    {\n        // rotate into the reference frame of bodyA...\n        JQuaternion.ConjugateMultiply(orientationA, orientationB, out JQuaternion orientation);\n        JVector.Subtract(positionB, positionA, out JVector position);\n        JVector.ConjugatedTransform(position, orientationA, out position);\n\n        // ...perform collision detection...\n        bool success = _solver.Collision(supportA, supportB, orientation, position,\n            out pointA, out pointB, out normal, out penetration);\n\n        // ...rotate back. this hopefully saves some matrix vector multiplication\n        // when calling the support function multiple times.\n        JVector.Transform(pointA, orientationA, out pointA);\n        JVector.Add(pointA, positionA, out pointA);\n        JVector.Transform(pointB, orientationA, out pointB);\n        JVector.Add(pointB, positionA, out pointB);\n        JVector.Transform(normal, orientationA, out normal);\n\n        return success;\n    }\n\n    /// <summary>\n    /// Provides the distance and closest points for non-overlapping shapes. It\n    /// assumes that support shape A is located at position zero and not rotated.\n    /// </summary>\n    /// <param name=\"supportA\">The support function of shape A.</param>\n    /// <param name=\"supportB\">The support function of shape B.</param>\n    /// <param name=\"orientationB\">The orientation of shape B in world space.</param>\n    /// <param name=\"positionB\">The position of shape B in world space.</param>\n    /// <param name=\"pointA\">Closest point on shape A. Undefined for the overlapping case.</param>\n    /// <param name=\"pointB\">Closest point on shape B. Undefined for the overlapping case.</param>\n    /// <param name=\"normal\">Unit direction from shape A toward shape B. Undefined for the overlapping case.</param>\n    /// <param name=\"distance\">The distance between the separating shapes. Zero if shapes overlap.</param>\n    /// <returns>Returns true if the shapes do not overlap and distance information\n    /// can be provided.</returns>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static bool Distance<Ta,Tb>(in Ta supportA, in Tb supportB,\n        in JQuaternion orientationB, in JVector positionB,\n        out JVector pointA, out JVector pointB, out JVector normal, out Real distance)\n        where Ta : ISupportMappable where Tb : ISupportMappable\n    {\n        // ..perform overlap test..\n        const Real collideEpsilon = (Real)1e-4;\n        const int maxIter = 34;\n\n        Unsafe.SkipInit(out SimplexSolverAB simplexSolver);\n        simplexSolver.Reset();\n\n        int iter = maxIter;\n\n        MinkowskiDifference.GetCenter(supportA, supportB, orientationB, positionB, out Vertex center);\n\n        JVector v = center.V;\n        Real distSq = v.LengthSquared();\n\n        while (iter-- != 0)\n        {\n            if (distSq < collideEpsilon * collideEpsilon) goto ret_false;\n\n            MinkowskiDifference.Support(supportA, supportB, orientationB, positionB, -v, out var w);\n\n            Real deltaDist = JVector.Dot(v - w.V, v);\n            if (deltaDist * deltaDist < collideEpsilon * collideEpsilon * distSq)\n            {\n                break;\n            }\n\n            if (!simplexSolver.AddVertex(w, out v)) goto ret_false;\n\n            distSq = v.LengthSquared();\n        }\n\n        distance = MathR.Sqrt(distSq);\n        normal = v * (-(Real)1.0 / distance);\n        simplexSolver.GetClosest(out pointA, out pointB);\n        return true;\n\n        ret_false:\n\n        distance = (Real)0.0;\n        normal = JVector.Zero;\n        simplexSolver.GetClosest(out pointA, out pointB);\n        return false;\n    }\n\n    /// <summary>\n    /// Provides the distance and closest points for non-overlapping shapes.\n    /// </summary>\n    /// <param name=\"supportA\">The support function of shape A.</param>\n    /// <param name=\"supportB\">The support function of shape B.</param>\n    /// <param name=\"orientationA\">The orientation of shape A in world space.</param>\n    /// <param name=\"orientationB\">The orientation of shape B in world space.</param>\n    /// <param name=\"positionA\">The position of shape A in world space.</param>\n    /// <param name=\"positionB\">The position of shape B in world space.</param>\n    /// <param name=\"pointA\">Closest point on shape A. Undefined for the overlapping case.</param>\n    /// <param name=\"pointB\">Closest point on shape B. Undefined for the overlapping case.</param>\n    /// <param name=\"normal\">Unit direction from shape A toward shape B. Undefined for the overlapping case.</param>\n    /// <param name=\"distance\">The distance between the separating shapes. Zero if shapes overlap.</param>\n    /// <returns>Returns true if the shapes do not overlap and distance information\n    /// can be provided.</returns>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static bool Distance<Ta,Tb>(in Ta supportA, in Tb supportB,\n        in JQuaternion orientationA, in JQuaternion orientationB,\n        in JVector positionA, in JVector positionB,\n        out JVector pointA, out JVector pointB, out JVector normal, out Real distance)\n        where Ta : ISupportMappable where Tb : ISupportMappable\n    {\n        // rotate into the reference frame of bodyA...\n        JQuaternion.ConjugateMultiply(orientationA, orientationB, out JQuaternion orientation);\n        JVector.Subtract(positionB, positionA, out JVector position);\n        JVector.ConjugatedTransform(position, orientationA, out position);\n\n        // ...perform distance test...\n        bool result = Distance(supportA, supportB, orientation, position, out pointA, out pointB, out normal, out distance);\n\n        // ...rotate back. This approach potentially saves some matrix-vector multiplication when\n        // the support function is called multiple times.\n        JVector.Transform(pointA, orientationA, out pointA);\n        JVector.Add(pointA, positionA, out pointA);\n        JVector.Transform(pointB, orientationA, out pointB);\n        JVector.Add(pointB, positionA, out pointB);\n        JVector.Transform(normal, orientationA, out normal);\n\n        return result;\n    }\n\n    /// <summary>\n    /// Performs an overlap test. It assumes that support shape A is located\n    /// at position zero and not rotated.\n    /// </summary>\n    /// <param name=\"supportA\">The support function of shape A.</param>\n    /// <param name=\"supportB\">The support function of shape B.</param>\n    /// <param name=\"orientationB\">The orientation of shape B in world space.</param>\n    /// <param name=\"positionB\">The position of shape B in world space.</param>\n    /// <returns>Returns true of the shapes overlap, and false otherwise.</returns>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static bool Overlap<Ta,Tb>(in Ta supportA, in Tb supportB,\n        in JQuaternion orientationB, in JVector positionB) where Ta : ISupportMappable where Tb : ISupportMappable\n    {\n        // ..perform overlap test..\n        const Real collideEpsilon = (Real)1e-4;\n        const int maxIter = 34;\n\n        Unsafe.SkipInit(out SimplexSolverAB simplexSolver);\n        simplexSolver.Reset();\n\n        int iter = maxIter;\n\n        MinkowskiDifference.GetCenter(supportA, supportB, orientationB, positionB, out Vertex center);\n\n        JVector v = center.V;\n        Real distSq = v.LengthSquared();\n\n        while (distSq > collideEpsilon * collideEpsilon && iter-- != 0)\n        {\n            MinkowskiDifference.Support(supportA, supportB, orientationB, positionB, -v, out var w);\n            Real vw = JVector.Dot(v, w.V);\n            if (vw >= (Real)0.0)\n                return false;\n            if (!simplexSolver.AddVertex(w, out v)) return true;\n            distSq = v.LengthSquared();\n        }\n\n        return true;\n    }\n\n    /// <summary>\n    /// Performs an overlap test.\n    /// </summary>\n    /// <param name=\"supportA\">The support function of shape A.</param>\n    /// <param name=\"supportB\">The support function of shape B.</param>\n    /// <param name=\"orientationA\">The orientation of shape A in world space.</param>\n    /// <param name=\"orientationB\">The orientation of shape B in world space.</param>\n    /// <param name=\"positionA\">The position of shape A in world space.</param>\n    /// <param name=\"positionB\">The position of shape B in world space.</param>\n    /// <returns>Returns true of the shapes overlap, and false otherwise.</returns>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static bool Overlap<Ta,Tb>(in Ta supportA, in Tb supportB,\n        in JQuaternion orientationA, in JQuaternion orientationB,\n        in JVector positionA, in JVector positionB)\n        where Ta : ISupportMappable where Tb : ISupportMappable\n    {\n        // rotate into the reference frame of bodyA...\n        JQuaternion.ConjugateMultiply(orientationA, orientationB, out JQuaternion orientation);\n        JVector.Subtract(positionB, positionA, out JVector position);\n        JVector.ConjugatedTransform(position, orientationA, out position);\n\n        // ...perform overlap test...\n        return Overlap(supportA, supportB, orientation, position);\n    }\n\n    /// <summary>\n    /// If MPR reports a penetration deeper than this value, we do not trust MPR to have found the global minimum\n    /// and perform an EPA run.\n    /// </summary>\n    private const Real EpaPenetrationThreshold = (Real)0.02;\n\n    /// <summary>\n    /// Detects whether two convex shapes overlap and provides detailed collision information for overlapping shapes.\n    /// Internally, this method utilizes the Minkowski Portal Refinement (MPR) to obtain the collision information.\n    /// Although MPR is not exact, it delivers a strict upper bound for the penetration depth. If the upper bound exceeds\n    /// a predefined threshold, the results are further refined using the Expanding Polytope Algorithm (EPA).\n    /// </summary>\n    /// <param name=\"supportA\">The support function of shape A.</param>\n    /// <param name=\"supportB\">The support function of shape B.</param>\n    /// <param name=\"orientationA\">The orientation of shape A in world space.</param>\n    /// <param name=\"orientationB\">The orientation of shape B in world space.</param>\n    /// <param name=\"positionA\">The position of shape A in world space.</param>\n    /// <param name=\"positionB\">The position of shape B in world space.</param>\n    /// <param name=\"pointA\">The deepest point on shape A that is inside shape B.</param>\n    /// <param name=\"pointB\">The deepest point on shape B that is inside shape A.</param>\n    /// <param name=\"normal\">\n    /// The normalized collision normal pointing from pointB to pointA. This normal remains defined even\n    /// if pointA and pointB coincide, representing the direction in which the shapes must be separated by the minimal\n    /// distance (determined by the penetration depth) to avoid overlap.\n    /// </param>\n    /// <param name=\"penetration\">The penetration depth.</param>\n    /// <param name=\"epaThreshold\">Penetration depth threshold above which MPR results are refined with EPA.</param>\n    /// <returns>Returns true if the shapes overlap (collide), and false otherwise.</returns>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static bool MprEpa<Ta,Tb>(in Ta supportA, in Tb supportB,\n        in JQuaternion orientationA, in JQuaternion orientationB,\n        in JVector positionA, in JVector positionB,\n        out JVector pointA, out JVector pointB, out JVector normal, out Real penetration,\n        Real epaThreshold = EpaPenetrationThreshold)\n        where Ta : ISupportMappable where Tb : ISupportMappable\n    {\n        // rotate into the reference frame of bodyA..\n        JQuaternion.ConjugateMultiply(orientationA, orientationB, out JQuaternion orientation);\n        JVector.Subtract(positionB, positionA, out JVector position);\n        JVector.ConjugatedTransform(position, orientationA, out position);\n\n        // ..perform collision detection..\n        bool res = _solver.SolveMpr(supportA, supportB, orientation, position,\n            epaThreshold, out pointA, out pointB, out normal, out penetration);\n\n        // ..rotate back. This approach potentially saves some matrix-vector multiplication when the support\n        // function is called multiple times.\n        JVector.Transform(pointA, orientationA, out pointA);\n        JVector.Add(pointA, positionA, out pointA);\n        JVector.Transform(pointB, orientationA, out pointB);\n        JVector.Add(pointB, positionA, out pointB);\n        JVector.Transform(normal, orientationA, out normal);\n\n        return res;\n    }\n\n    /// <summary>\n    /// Detects whether two convex shapes overlap and provides detailed collision information for overlapping shapes.\n    /// It assumes that support shape A is at position zero and not rotated.\n    /// Internally, this method utilizes the Minkowski Portal Refinement (MPR) to obtain the collision information.\n    /// Although MPR is not exact, it delivers a strict upper bound for the penetration depth. If the upper bound\n    /// exceeds a predefined threshold, the results are further refined using the Expanding Polytope Algorithm (EPA).\n    /// </summary>\n    /// <param name=\"supportA\">The support function of shape A.</param>\n    /// <param name=\"supportB\">The support function of shape B.</param>\n    /// <param name=\"orientationB\">The orientation of shape B.</param>\n    /// <param name=\"positionB\">The position of shape B.</param>\n    /// <param name=\"pointA\">The deepest point on shape A that is inside shape B.</param>\n    /// <param name=\"pointB\">The deepest point on shape B that is inside shape A.</param>\n    /// <param name=\"normal\">\n    /// The normalized collision normal pointing from pointB to pointA. This normal remains defined even\n    /// if pointA and pointB coincide, representing the direction in which the shapes must be separated by the minimal\n    /// distance (determined by the penetration depth) to avoid overlap.\n    /// </param>\n    /// <param name=\"penetration\">The penetration depth.</param>\n    /// <param name=\"epaThreshold\">Penetration depth threshold above which MPR results are refined with EPA.</param>\n    /// <returns>Returns true if the shapes overlap (collide), and false otherwise.</returns>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static bool MprEpa<Ta,Tb>(in Ta supportA, in Tb supportB,\n        in JQuaternion orientationB, in JVector positionB,\n        out JVector pointA, out JVector pointB, out JVector normal, out Real penetration,\n        Real epaThreshold = EpaPenetrationThreshold)\n        where Ta : ISupportMappable where Tb : ISupportMappable\n    {\n        // ..perform collision detection..\n        return _solver.SolveMpr(supportA, supportB, orientationB, positionB , epaThreshold, out pointA, out pointB, out normal, out penetration);\n    }\n\n    /// <summary>\n    /// Calculates the time of impact (TOI) and the collision points in world space for two shapes with linear\n    /// velocities <paramref name=\"sweepA\"/> and <paramref name=\"sweepB\"/> and angular velocities\n    /// <paramref name=\"sweepAngularA\"/> and <paramref name=\"sweepAngularB\"/>.\n    /// </summary>\n    /// <param name=\"supportA\">Shape A.</param>\n    /// <param name=\"supportB\">Shape B.</param>\n    /// <param name=\"orientationA\">Orientation of shape A in world space.</param>\n    /// <param name=\"orientationB\">Orientation of shape B in world space.</param>\n    /// <param name=\"positionA\">Position of shape A in world space.</param>\n    /// <param name=\"positionB\">Position of shape B in world space.</param>\n    /// <param name=\"sweepA\">Linear velocity of shape A.</param>\n    /// <param name=\"sweepB\">Linear velocity of shape B.</param>\n    /// <param name=\"sweepAngularA\">Angular velocity of shape A.</param>\n    /// <param name=\"sweepAngularB\">Angular velocity of shape B.</param>\n    /// <param name=\"extentA\">Bounding sphere radius of shape A. Used to bound the angular displacement contribution.</param>\n    /// <param name=\"extentB\">Bounding sphere radius of shape B. Used to bound the angular displacement contribution.</param>\n    /// <param name=\"pointA\">Collision point on shape A in world space at the sweep origin.</param>\n    /// <param name=\"pointB\">Collision point on shape B in world space at the sweep origin.</param>\n    /// <param name=\"normal\">\n    /// Normalized collision normal in world space at time of impact (points from A to B). Zero if the shapes already\n    /// overlap or do not hit.\n    /// </param>\n    /// <param name=\"lambda\">Time of impact. <see cref=\"Real.PositiveInfinity\"/> if no hit is detected. Zero if shapes overlap.</param>\n    /// <returns>True if the shapes hit or already overlap, false otherwise.</returns>\n    /// <remarks>\n    /// Uses conservative advancement for continuous collision detection. May fail to converge to the correct TOI\n    /// and collision points in certain edge cases due to limitations in linear motion approximation and\n    /// distance gradient estimation.\n    /// </remarks>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static bool Sweep<Ta, Tb>(in Ta supportA, in Tb supportB,\n        in JQuaternion orientationA, in JQuaternion orientationB,\n        in JVector positionA, in JVector positionB,\n        in JVector sweepA, in JVector sweepB,\n        in JVector sweepAngularA, in JVector sweepAngularB,\n        in Real extentA, in Real extentB,\n        out JVector pointA, out JVector pointB, out JVector normal, out Real lambda)\n        where Ta : ISupportMappable where Tb : ISupportMappable\n    {\n        const Real collideEpsilon = (Real)1e-4;\n        const int maxIter = 64;\n\n        Real maxAngularSpeed = extentA * sweepAngularA.Length() + extentB * sweepAngularB.Length();\n        Real combinedRadius = extentA + extentB;\n\n        JVector posA = positionA;\n        JVector posB = positionB;\n\n        JQuaternion oriA = orientationA;\n        JQuaternion oriB = orientationB;\n\n        lambda = 0;\n\n        int iter = 0;\n\n        JQuaternion sweepAngularDeltaA;\n        JQuaternion sweepAngularDeltaB;\n\n        Distance(supportA, supportB, oriA, oriB, posA, posB, out pointA, out pointB, out normal, out var distance);\n\n        if (distance < collideEpsilon)\n        {\n            // We already overlap (or nearly overlap) at time 0.\n            // In this case the Sweep function should return true; normal and lambda are set to zero.\n            return true;\n        }\n\n        while (true)\n        {\n            Real sweepLinearProj = JVector.Dot(normal, sweepA - sweepB);\n            Real sweepLen = sweepLinearProj + maxAngularSpeed;\n\n            if(sweepLen < NumericEpsilon || (sweepLinearProj < 0 && distance > combinedRadius))\n            {\n                normal = JVector.Zero;\n                lambda = Real.PositiveInfinity;\n                return false;\n            }\n\n            Real tmpLambda = distance / sweepLen;\n\n            lambda += tmpLambda;\n\n            Debug.Assert(!Real.IsNaN(lambda));\n\n            sweepAngularDeltaA = MathHelper.RotationQuaternion(sweepAngularA, lambda);\n            sweepAngularDeltaB = MathHelper.RotationQuaternion(sweepAngularB, lambda);\n\n            oriA = sweepAngularDeltaA * orientationA;\n            oriB = sweepAngularDeltaB * orientationB;\n\n            posA = positionA + sweepA * lambda;\n            posB = positionB + sweepB * lambda;\n\n            if (iter++ > maxIter) break;\n\n            bool res = Distance(supportA, supportB, oriA, oriB, posA, posB, out pointA, out pointB, out JVector nn, out distance);\n\n            // We are a bit in a pickle here.\n            // If the advanced shapes are slightly overlapping (Distance returns false; this can either happen if the\n            // simplex solver encompasses the origin or the closest point on the simplex is close enough to the origin),\n            // we have valid posA and posB information, but the normal is not well-defined. So we keep the old normal.\n            if(res) normal = nn;\n\n            if (distance < collideEpsilon)\n                break;\n        }\n\n        // Hit point found at in world space at time lambda. Transform back to time 0.\n        var linearTransformationA = sweepA * lambda;\n        var linearTransformationB = sweepB * lambda;\n\n        var deltaA = pointA - posA;\n        var deltaB = pointB - posB;\n\n        pointA -= linearTransformationA + (deltaA - JVector.ConjugatedTransform(deltaA, sweepAngularDeltaA));\n        pointB -= linearTransformationB + (deltaB - JVector.ConjugatedTransform(deltaB, sweepAngularDeltaB));\n\n        return true;\n    }\n\n    /// <summary>\n    /// Calculates the time of impact and the collision points in world space for two shapes with linear velocities\n    /// <paramref name=\"sweepA\"/> and <paramref name=\"sweepB\"/>.\n    /// </summary>\n    /// <param name=\"supportA\">Shape A.</param>\n    /// <param name=\"supportB\">Shape B.</param>\n    /// <param name=\"orientationA\">Orientation of shape A in world space.</param>\n    /// <param name=\"orientationB\">Orientation of shape B in world space.</param>\n    /// <param name=\"positionA\">Position of shape A in world space.</param>\n    /// <param name=\"positionB\">Position of shape B in world space.</param>\n    /// <param name=\"sweepA\">Linear velocity of shape A.</param>\n    /// <param name=\"sweepB\">Linear velocity of shape B.</param>\n    /// <param name=\"pointA\">Collision point on shape A in world space at the sweep origin.</param>\n    /// <param name=\"pointB\">Collision point on shape B in world space at the sweep origin.</param>\n    /// <param name=\"normal\">Normalized collision normal in world space (points from A to B). Zero if the shapes already overlap or do not hit.</param>\n    /// <param name=\"lambda\">Time of impact. <see cref=\"Real.PositiveInfinity\"/> if no hit is detected, zero if shapes overlap.</param>\n    /// <returns>True if the shapes will hit or already overlap, false otherwise.</returns>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static bool Sweep<Ta,Tb>(in Ta supportA, in Tb supportB,\n        in JQuaternion orientationA, in JQuaternion orientationB,\n        in JVector positionA, in JVector positionB,\n        in JVector sweepA, in JVector sweepB,\n        out JVector pointA, out JVector pointB, out JVector normal, out Real lambda)\n        where Ta : ISupportMappable where Tb : ISupportMappable\n    {\n        // rotate into the reference frame of bodyA...\n        JQuaternion.ConjugateMultiply(orientationA, orientationB, out JQuaternion orientation);\n        JVector.Subtract(positionB, positionA, out JVector position);\n        JVector.ConjugatedTransform(position, orientationA, out position);\n\n        // we also transform the relative velocities\n        JVector sweep = sweepB - sweepA;\n        JVector.ConjugatedTransform(sweep, orientationA, out sweep);\n\n        // ...perform toi calculation\n        bool res = Sweep(supportA, supportB, orientation, position, sweep,\n            out pointA, out pointB, out normal, out lambda);\n\n        if (!res) return false;\n\n        // ...rotate back. This approach potentially saves some matrix-vector multiplication when the support function is\n        // called multiple times.\n        JVector.Transform(pointA, orientationA, out pointA);\n        JVector.Add(pointA, positionA, out pointA);\n        JVector.Transform(pointB, orientationA, out pointB);\n        JVector.Add(pointB, positionA, out pointB);\n        JVector.Transform(normal, orientationA, out normal);\n\n        // transform back from the relative velocities\n\n        // This is where the collision will occur in world space:\n        //      pointA += lambda * sweepA;\n        //      pointB += lambda * sweepA; // sweepA is not a typo\n\n        pointB += lambda * (sweepA - sweepB);\n\n        return true;\n    }\n\n    /// <summary>\n    /// Performs a sweep test where shape A is fixed at the origin with identity orientation and zero velocity.\n    /// </summary>\n    /// <param name=\"supportA\">Shape A (fixed at the origin, identity orientation).</param>\n    /// <param name=\"supportB\">Shape B.</param>\n    /// <param name=\"orientationB\">Orientation of shape B in world space.</param>\n    /// <param name=\"positionB\">Position of shape B in world space.</param>\n    /// <param name=\"sweepB\">Linear velocity of shape B.</param>\n    /// <param name=\"pointA\">Collision point on shape A in world space at the sweep origin.</param>\n    /// <param name=\"pointB\">Collision point on shape B in world space at the sweep origin.</param>\n    /// <param name=\"normal\">Normalized collision normal in world space (points from A to B). Zero if the shapes already overlap or do not hit.</param>\n    /// <param name=\"lambda\">Time of impact. <see cref=\"Real.PositiveInfinity\"/> if no hit is detected, zero if shapes overlap.</param>\n    /// <returns>True if the shapes hit or already overlap, false otherwise.</returns>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static bool Sweep<Ta,Tb>(in Ta supportA, in Tb supportB,\n        in JQuaternion orientationB, in JVector positionB, in JVector sweepB,\n        out JVector pointA, out JVector pointB, out JVector normal, out Real lambda)\n        where Ta : ISupportMappable where Tb : ISupportMappable\n    {\n        // ..perform toi calculation\n        const Real collideEpsilon = (Real)1e-4;\n        const int maxIter = 34;\n\n        Unsafe.SkipInit(out SimplexSolverAB simplexSolver);\n        simplexSolver.Reset();\n\n        MinkowskiDifference.GetCenter(supportA, supportB, orientationB, positionB, out var center);\n\n        JVector posB = positionB;\n\n        lambda = (Real)0.0;\n\n        pointA = pointB = JVector.Zero;\n\n        JVector r = sweepB;\n        JVector v = -center.V;\n\n        normal = JVector.Zero;\n\n        int iter = maxIter;\n\n        Real distSq = v.LengthSquared();\n\n        while ((distSq > collideEpsilon * collideEpsilon) && (iter-- != 0))\n        {\n            MinkowskiDifference.Support(supportA, supportB, orientationB, posB, v, out Vertex vertex);\n            var w = vertex.V;\n\n            Real vDotW = -JVector.Dot(v, w);\n\n            if (vDotW > (Real)0.0)\n            {\n                Real vDotR = JVector.Dot(v, r);\n\n                if (vDotR >= -(Real)1e-12)\n                {\n                    lambda = Real.PositiveInfinity;\n                    return false;\n                }\n\n                lambda -= vDotW / vDotR;\n\n                posB = positionB + lambda * r;\n                normal = v;\n            }\n\n            if (!simplexSolver.AddVertex(vertex, out v))\n            {\n                goto converged;\n            }\n\n            JVector.NegateInPlace(ref v);\n\n            distSq = v.LengthSquared();\n        }\n\n        converged:\n\n        simplexSolver.GetClosest(out pointA, out pointB);\n        normal = JVector.NormalizeSafe(in normal, NumericEpsilon);\n\n        return true;\n    }\n}"
  },
  {
    "path": "src/Jitter2/Collision/NarrowPhase/SimplexSolver.cs",
    "content": "/*\n * Jitter2 Physics Library\n * (c) Thorben Linneweber and contributors\n * SPDX-License-Identifier: MIT\n */\n\nusing System.Diagnostics;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\nusing Jitter2.LinearMath;\n\n#pragma warning disable CS0649 // Field is never assigned to, and will always have its default value\n\nnamespace Jitter2.Collision;\n\n/// <summary>\n/// Implements the Gilbert-Johnson-Keerthi (GJK) simplex solver for finding the closest point\n/// to the origin on a simplex (point, line segment, triangle, or tetrahedron).\n/// </summary>\n/// <remarks>\n/// This solver iteratively reduces the simplex to the feature closest to the origin.\n/// It handles degeneracy by falling back to lower-dimensional features when the current\n/// simplex is near-degenerate.\n/// </remarks>\n[StructLayout(LayoutKind.Sequential)]\npublic unsafe struct SimplexSolver\n{\n    private const Real Epsilon = (Real)1e-8;\n\n    private JVector v0;\n    private JVector v1;\n    private JVector v2;\n    private JVector v3;\n\n    private uint usageMask;\n\n    /// <summary>\n    /// Resets the solver to an empty simplex.\n    /// </summary>\n    public void Reset()\n    {\n        usageMask = 0;\n    }\n\n    private JVector ClosestSegment(int i0, int i1, out uint mask)\n    {\n        var ptr = (JVector*)Unsafe.AsPointer(ref this.v0);\n        JVector a = ptr[i0];\n        JVector b = ptr[i1];\n\n        JVector v = b - a;\n        Real vsq = v.LengthSquared();\n\n        bool degenerate = vsq < Epsilon;\n\n        Real t = -JVector.Dot(a, v) / vsq;\n        Real lambda0 = 1 - t;\n        Real lambda1 = t;\n\n        mask = (1u << i0 | 1u << i1);\n\n        if (lambda0 < 0 || degenerate)\n        {\n            mask = 1u << i1;\n            lambda0 = 0;\n            lambda1 = 1;\n        }\n        else if (lambda1 < 0)\n        {\n            mask = 1u << i0;\n            lambda0 = 1;\n            lambda1 = 0;\n        }\n\n        return lambda0 * a + lambda1 * b;\n    }\n\n    private JVector ClosestTriangle(int i0, int i1, int i2, out uint mask)\n    {\n        mask = 0;\n\n        var ptr = (JVector*)Unsafe.AsPointer(ref this.v0);\n        JVector a = ptr[i0];\n        JVector b = ptr[i1];\n        JVector c = ptr[i2];\n\n        JVector.Subtract(a, b, out var u);\n        JVector.Subtract(a, c, out var v);\n\n        JVector normal = u % v;\n\n        Real t = normal.LengthSquared();\n        Real it = (Real)1.0 / t;\n\n        bool degenerate = t < Epsilon;\n\n        JVector.Cross(u, a, out var c1);\n        JVector.Cross(a, v, out var c2);\n\n        Real lambda2 = JVector.Dot(c1, normal) * it;\n        Real lambda1 = JVector.Dot(c2, normal) * it;\n        Real lambda0 = (Real)1.0 - lambda2 - lambda1;\n\n        Real bestDistance = Real.MaxValue;\n        Unsafe.SkipInit(out JVector closestPt);\n\n        if (lambda0 < (Real)0.0 || degenerate)\n        {\n            var closest = ClosestSegment(i1, i2, out uint m);\n            Real dist = closest.LengthSquared();\n            if (dist < bestDistance)\n            {\n                mask = m;\n                bestDistance = dist;\n                closestPt = closest;\n            }\n        }\n\n        if (lambda1 < (Real)0.0 || degenerate)\n        {\n            var closest = ClosestSegment(i0, i2, out uint m);\n            Real dist = closest.LengthSquared();\n            if (dist < bestDistance)\n            {\n                mask = m;\n                bestDistance = dist;\n                closestPt = closest;\n            }\n        }\n\n        if (lambda2 < (Real)0.0 || degenerate)\n        {\n            var closest = ClosestSegment(i0, i1, out uint m);\n            Real dist = closest.LengthSquared();\n            if (dist < bestDistance)\n            {\n                mask = m;\n                closestPt = closest;\n            }\n        }\n\n        if (mask != 0) return closestPt;\n\n        mask = (1u << i0) | (1u << i1) | (1u << i2);\n        return lambda0 * a + lambda1 * b + lambda2 * c;\n    }\n\n    private JVector ClosestTetrahedron(out uint mask)\n    {\n        [MethodImpl(MethodImplOptions.AggressiveInlining)]\n        static Real Determinant(in JVector a, in JVector b, in JVector c, in JVector d)\n        {\n            return JVector.Dot(b - a, JVector.Cross(c - a, d - a));\n        }\n\n        Real detT = Determinant(v0, v1, v2, v3);\n        Real inverseDetT = (Real)1.0 / detT;\n\n        bool degenerate = detT * detT < Epsilon;\n\n        Real lambda0 = Determinant(JVector.Zero, v1, v2, v3) * inverseDetT;\n        Real lambda1 = Determinant(v0, JVector.Zero, v2, v3) * inverseDetT;\n        Real lambda2 = Determinant(v0, v1, JVector.Zero, v3) * inverseDetT;\n        Real lambda3 = (Real)1.0 - lambda0 - lambda1 - lambda2;\n\n        Real bestDistance = Real.MaxValue;\n\n        Unsafe.SkipInit(out JVector closestPt);\n\n        mask = 0;\n\n        if (lambda0 < (Real)0.0 || degenerate)\n        {\n            var closest = ClosestTriangle(1, 2, 3, out uint m);\n            Real dist = closest.LengthSquared();\n            if (dist < bestDistance)\n            {\n                mask = m;\n                bestDistance = dist;\n                closestPt = closest;\n            }\n        }\n\n        if (lambda1 < (Real)0.0 || degenerate)\n        {\n            var closest = ClosestTriangle(0, 2, 3, out uint m);\n            Real dist = closest.LengthSquared();\n            if (dist < bestDistance)\n            {\n                mask = m;\n                bestDistance = dist;\n                closestPt = closest;\n            }\n        }\n\n        if (lambda2 < (Real)0.0 || degenerate)\n        {\n            var closest = ClosestTriangle(0, 1, 3, out uint m);\n            Real dist = closest.LengthSquared();\n            if (dist < bestDistance)\n            {\n                mask = m;\n                bestDistance = dist;\n                closestPt = closest;\n            }\n        }\n\n        if (lambda3 < (Real)0.0 || degenerate)\n        {\n            var closest = ClosestTriangle(0, 1, 2, out uint m);\n            Real dist = closest.LengthSquared();\n            if (dist < bestDistance)\n            {\n                mask = m;\n                // bestDistance = dist;\n                closestPt = closest;\n            }\n        }\n\n        if (mask != 0) return closestPt;\n\n        mask = 0b1111;\n        return JVector.Zero;\n    }\n\n    /// <summary>\n    /// Adds a vertex to the simplex and computes the new closest point to the origin.\n    /// </summary>\n    /// <param name=\"vertex\">The vertex to add (a point on the Minkowski difference).</param>\n    /// <param name=\"closest\">\n    /// When this method returns, contains the point on the reduced simplex closest to the origin.\n    /// </param>\n    /// <returns>\n    /// <c>true</c> if the origin is not contained within the simplex;\n    /// <c>false</c> if the origin is enclosed by the tetrahedron.\n    /// </returns>\n    [SkipLocalsInit]\n    public bool AddVertex(in JVector vertex, out JVector closest)\n    {\n        Unsafe.SkipInit(out closest);\n\n        var ptr = (JVector*)Unsafe.AsPointer(ref this.v0);\n        int* ix = stackalloc int[4];\n\n        int useCount = 0;\n        int freeSlot = 0;\n\n        for (int i = 0; i < 4; i++)\n        {\n            if ((usageMask & (1u << i)) != 0) ix[useCount++] = i;\n            else freeSlot = i;\n        }\n\n        ix[useCount++] = freeSlot;\n        ptr[freeSlot] = vertex;\n\n        switch (useCount)\n        {\n            case 1:\n            {\n                int i0 = ix[0];\n                closest = ptr[i0];\n                usageMask = 1u << i0;\n                return true;\n            }\n            case 2:\n            {\n                int i0 = ix[0], i1 = ix[1];\n                closest = ClosestSegment(i0, i1, out usageMask);\n                return true;\n            }\n            case 3:\n            {\n                int i0 = ix[0], i1 = ix[1], i2 = ix[2];\n                closest = ClosestTriangle(i0, i1, i2, out usageMask);\n                return true;\n            }\n            case 4:\n            {\n                closest = ClosestTetrahedron(out usageMask);\n                return usageMask != 0b1111;\n            }\n        }\n\n        Debug.Assert(false, \"Unreachable.\");\n        return false;\n    }\n}"
  },
  {
    "path": "src/Jitter2/Collision/NarrowPhase/SimplexSolverAB.cs",
    "content": "/*\n * Jitter2 Physics Library\n * (c) Thorben Linneweber and contributors\n * SPDX-License-Identifier: MIT\n */\n\nusing System.Diagnostics;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\nusing Jitter2.LinearMath;\n\nusing Vertex = Jitter2.Collision.MinkowskiDifference.Vertex;\n\n#pragma warning disable CS0649 // Field is never assigned to, and will always have its default value\n\nnamespace Jitter2.Collision;\n\n/// <summary>\n/// Implements the Gilbert-Johnson-Keerthi (GJK) simplex solver with support for retrieving\n/// the closest points on the original shapes (A and B spaces).\n/// </summary>\n/// <remarks>\n/// Unlike <see cref=\"SimplexSolver\"/>, this solver tracks barycentric coordinates and\n/// the original support points, enabling extraction of the closest points on each shape\n/// via <see cref=\"GetClosest\"/>.\n/// </remarks>\n[StructLayout(LayoutKind.Sequential)]\npublic unsafe struct SimplexSolverAB\n{\n    private const Real Epsilon = (Real)1e-8;\n\n    private struct Barycentric\n    {\n        public Real Lambda0;\n        public Real Lambda1;\n        public Real Lambda2;\n        public Real Lambda3;\n\n        public Real this[int i]\n        {\n            get => ((Real*)Unsafe.AsPointer(ref this.Lambda0))[i];\n            set => ((Real*)Unsafe.AsPointer(ref this.Lambda0))[i] = value;\n        }\n    }\n\n    private Vertex v0;\n    private Vertex v1;\n    private Vertex v2;\n    private Vertex v3;\n\n    private Barycentric barycentric;\n    private uint usageMask;\n\n    /// <summary>\n    /// Resets the solver to an empty simplex.\n    /// </summary>\n    public void Reset()\n    {\n        usageMask = 0;\n    }\n\n    private JVector ClosestSegment(int i0, int i1, ref Barycentric bc, out uint mask)\n    {\n        var ptr = (Vertex*)Unsafe.AsPointer(ref this.v0);\n        JVector a = ptr[i0].V;\n        JVector b = ptr[i1].V;\n\n        JVector v = b - a;\n        Real vsq = v.LengthSquared();\n\n        bool degenerate = vsq < Epsilon;\n\n        Real t = -JVector.Dot(a, v) / vsq;\n        Real lambda0 = 1 - t;\n        Real lambda1 = t;\n\n        mask = (1u << i0 | 1u << i1);\n\n        if (lambda0 < 0 || degenerate)\n        {\n            mask = 1u << i1;\n            lambda0 = 0;\n            lambda1 = 1;\n        }\n        else if (lambda1 < 0)\n        {\n            mask = 1u << i0;\n            lambda0 = 1;\n            lambda1 = 0;\n        }\n\n        bc[i0] = lambda0;\n        bc[i1] = lambda1;\n\n        return lambda0 * a + lambda1 * b;\n    }\n\n    private JVector ClosestTriangle(int i0, int i1, int i2, ref Barycentric bc, out uint mask)\n    {\n        mask = 0;\n\n        var ptr = (Vertex*)Unsafe.AsPointer(ref this.v0);\n        JVector a = ptr[i0].V;\n        JVector b = ptr[i1].V;\n        JVector c = ptr[i2].V;\n\n        JVector.Subtract(a, b, out var u);\n        JVector.Subtract(a, c, out var v);\n\n        JVector normal = u % v;\n\n        Real t = normal.LengthSquared();\n        Real it = (Real)1.0 / t;\n\n        bool degenerate = t < Epsilon;\n\n        JVector.Cross(u, a, out var c1);\n        JVector.Cross(a, v, out var c2);\n\n        Real lambda2 = JVector.Dot(c1, normal) * it;\n        Real lambda1 = JVector.Dot(c2, normal) * it;\n        Real lambda0 = (Real)1.0 - lambda2 - lambda1;\n\n        Real bestDistance = Real.MaxValue;\n        Unsafe.SkipInit(out JVector closestPt);\n        Unsafe.SkipInit(out Barycentric b0);\n\n        if (lambda0 < (Real)0.0 || degenerate)\n        {\n            var closest = ClosestSegment(i1, i2, ref b0, out uint m);\n            Real dist = closest.LengthSquared();\n            if (dist < bestDistance)\n            {\n                bc = b0;\n                mask = m;\n                bestDistance = dist;\n                closestPt = closest;\n            }\n        }\n\n        if (lambda1 < (Real)0.0 || degenerate)\n        {\n            var closest = ClosestSegment(i0, i2, ref b0, out uint m);\n            Real dist = closest.LengthSquared();\n            if (dist < bestDistance)\n            {\n                bc = b0;\n                mask = m;\n                bestDistance = dist;\n                closestPt = closest;\n            }\n        }\n\n        if (lambda2 < (Real)0.0 || degenerate)\n        {\n            var closest = ClosestSegment(i0, i1, ref b0, out uint m);\n            Real dist = closest.LengthSquared();\n            if (dist < bestDistance)\n            {\n                bc = b0;\n                mask = m;\n                closestPt = closest;\n            }\n        }\n\n        if (mask != 0) return closestPt;\n\n        bc[i0] = lambda0;\n        bc[i1] = lambda1;\n        bc[i2] = lambda2;\n\n        mask = (1u << i0) | (1u << i1) | (1u << i2);\n        return lambda0 * a + lambda1 * b + lambda2 * c;\n    }\n\n    private JVector ClosestTetrahedron(ref Barycentric bc, out uint mask)\n    {\n        [MethodImpl(MethodImplOptions.AggressiveInlining)]\n        static Real Determinant(in JVector a, in JVector b, in JVector c, in JVector d)\n        {\n            return JVector.Dot(b - a, JVector.Cross(c - a, d - a));\n        }\n\n        Real detT = Determinant(v0.V, v1.V, v2.V, v3.V);\n        Real inverseDetT = (Real)1.0 / detT;\n\n        bool degenerate = detT * detT < Epsilon;\n\n        Real lambda0 = Determinant(JVector.Zero, v1.V, v2.V, v3.V) * inverseDetT;\n        Real lambda1 = Determinant(v0.V, JVector.Zero, v2.V, v3.V) * inverseDetT;\n        Real lambda2 = Determinant(v0.V, v1.V, JVector.Zero, v3.V) * inverseDetT;\n        Real lambda3 = (Real)1.0 - lambda0 - lambda1 - lambda2;\n\n        Real bestDistance = Real.MaxValue;\n\n        Unsafe.SkipInit(out JVector closestPt);\n        Unsafe.SkipInit(out Barycentric b0);\n\n        mask = 0;\n\n        if (lambda0 < (Real)0.0 || degenerate)\n        {\n            var closest = ClosestTriangle(1, 2, 3, ref b0, out uint m);\n            Real dist = closest.LengthSquared();\n            if (dist < bestDistance)\n            {\n                bc = b0;\n                mask = m;\n                bestDistance = dist;\n                closestPt = closest;\n            }\n        }\n\n        if (lambda1 < (Real)0.0 || degenerate)\n        {\n            var closest = ClosestTriangle(0, 2, 3, ref b0, out uint m);\n            Real dist = closest.LengthSquared();\n            if (dist < bestDistance)\n            {\n                bc = b0;\n                mask = m;\n                bestDistance = dist;\n                closestPt = closest;\n            }\n        }\n\n        if (lambda2 < (Real)0.0 || degenerate)\n        {\n            var closest = ClosestTriangle(0, 1, 3, ref b0, out uint m);\n            Real dist = closest.LengthSquared();\n            if (dist < bestDistance)\n            {\n                bc = b0;\n                mask = m;\n                bestDistance = dist;\n                closestPt = closest;\n            }\n        }\n\n        if (lambda3 < (Real)0.0 || degenerate)\n        {\n            var closest = ClosestTriangle(0, 1, 2, ref b0, out uint m);\n            Real dist = closest.LengthSquared();\n            if (dist < bestDistance)\n            {\n                bc = b0;\n                mask = m;\n                // bestDistance = dist;\n                closestPt = closest;\n            }\n        }\n\n        if (mask != 0) return closestPt;\n\n        barycentric[0] = lambda0;\n        barycentric[1] = lambda1;\n        barycentric[2] = lambda2;\n        barycentric[3] = lambda3;\n\n        mask = 0b1111;\n        return JVector.Zero;\n    }\n\n    /// <summary>\n    /// Computes the closest points on the original shapes A and B using the current simplex\n    /// and barycentric coordinates.\n    /// </summary>\n    /// <param name=\"pointA\">The closest point on shape A.</param>\n    /// <param name=\"pointB\">The closest point on shape B.</param>\n    public void GetClosest(out JVector pointA, out JVector pointB)\n    {\n        pointA = JVector.Zero;\n        pointB = JVector.Zero;\n\n        var ptr = (Vertex*)Unsafe.AsPointer(ref this.v0);\n\n        for (int i = 0; i < 4; i++)\n        {\n            if ((usageMask & (1u << i)) == 0) continue;\n            pointA += barycentric[i] * ptr[i].A;\n            pointB += barycentric[i] * ptr[i].B;\n        }\n    }\n\n    /// <summary>\n    /// Adds a vertex (with full A/B support point data) to the simplex and computes\n    /// the new closest point to the origin.\n    /// </summary>\n    /// <param name=\"vertex\">The Minkowski difference vertex including support points from both shapes.</param>\n    /// <param name=\"closest\">\n    /// When this method returns, contains the point on the reduced simplex closest to the origin.\n    /// </param>\n    /// <returns>\n    /// <c>true</c> if the origin is not contained within the simplex;\n    /// <c>false</c> if the origin is enclosed by the tetrahedron.\n    /// </returns>\n    [SkipLocalsInit]\n    public bool AddVertex(in Vertex vertex, out JVector closest)\n    {\n        Unsafe.SkipInit(out closest);\n\n        var ptr = (Vertex*)Unsafe.AsPointer(ref this.v0);\n        int* ix = stackalloc int[4];\n\n        int useCount = 0;\n        int freeSlot = 0;\n\n        for (int i = 0; i < 4; i++)\n        {\n            if ((usageMask & (1u << i)) != 0) ix[useCount++] = i;\n            else freeSlot = i;\n        }\n\n        ix[useCount++] = freeSlot;\n        ptr[freeSlot] = vertex;\n\n        switch (useCount)\n        {\n            case 1:\n            {\n                int i0 = ix[0];\n                closest = ptr[i0].V;\n                usageMask = 1u << i0;\n                barycentric[i0] = (Real)1.0;\n                return true;\n            }\n            case 2:\n            {\n                int i0 = ix[0], i1 = ix[1];\n                closest = ClosestSegment(i0, i1, ref barycentric, out usageMask);\n                return true;\n            }\n            case 3:\n            {\n                int i0 = ix[0], i1 = ix[1], i2 = ix[2];\n                closest = ClosestTriangle(i0, i1, i2, ref barycentric, out usageMask);\n                return true;\n            }\n            case 4:\n            {\n                closest = ClosestTetrahedron(ref barycentric, out usageMask);\n                return usageMask != 0b1111;\n            }\n        }\n\n        Debug.Assert(false, \"Unreachable.\");\n        return false;\n    }\n}"
  },
  {
    "path": "src/Jitter2/Collision/NarrowPhase/SupportPrimitives.cs",
    "content": "/*\n * Jitter2 Physics Library\n * (c) Thorben Linneweber and contributors\n * SPDX-License-Identifier: MIT\n */\n\nusing System;\nusing Jitter2.LinearMath;\n\nnamespace Jitter2.Collision;\n\n/// <summary>\n/// Provides built-in primitive support-mapped query types and helper methods for constructing them.\n/// </summary>\npublic static class SupportPrimitives\n{\n    public static Point CreatePoint() => default;\n\n    public static Sphere CreateSphere(Real radius) => new(radius);\n\n    public static Box CreateBox(JVector halfExtents) => new(halfExtents);\n\n    public static Capsule CreateCapsule(Real radius, Real halfLength) => new(radius, halfLength);\n\n    public static Cylinder CreateCylinder(Real radius, Real halfHeight) => new(radius, halfHeight);\n\n    public static Cone CreateCone(Real radius, Real height) => new(radius, height);\n\n    /// <summary>\n    /// Represents a point as a lightweight support-mapped query primitive.\n    /// </summary>\n    public readonly struct Point : ISupportMappable\n    {\n        public readonly void SupportMap(in JVector direction, out JVector result) => result = JVector.Zero;\n\n        public readonly void GetCenter(out JVector point) => point = JVector.Zero;\n    }\n\n    /// <summary>\n    /// Represents a sphere as a lightweight support-mapped query primitive.\n    /// </summary>\n    public readonly struct Sphere(Real radius) : ISupportMappable\n    {\n        private readonly Real radius = radius > (Real)0.0 ? radius : throw new ArgumentOutOfRangeException(nameof(radius));\n\n        public readonly void SupportMap(in JVector direction, out JVector result) => result = JVector.Normalize(direction) * radius;\n\n        public readonly void GetCenter(out JVector point) => point = JVector.Zero;\n    }\n\n    /// <summary>\n    /// Represents a box as a lightweight support-mapped query primitive.\n    /// </summary>\n    public readonly struct Box(JVector halfExtents) : ISupportMappable\n    {\n        private readonly JVector halfExtents = halfExtents.X > (Real)0.0 &&\n                                               halfExtents.Y > (Real)0.0 &&\n                                               halfExtents.Z > (Real)0.0\n            ? halfExtents\n            : throw new ArgumentOutOfRangeException(nameof(halfExtents));\n\n        public readonly void SupportMap(in JVector direction, out JVector result)\n        {\n            result.X = MathHelper.SignBit(direction.X) * halfExtents.X;\n            result.Y = MathHelper.SignBit(direction.Y) * halfExtents.Y;\n            result.Z = MathHelper.SignBit(direction.Z) * halfExtents.Z;\n        }\n\n        public readonly void GetCenter(out JVector point) => point = JVector.Zero;\n    }\n\n    /// <summary>\n    /// Represents a capsule as a lightweight support-mapped query primitive. The symmetry axis is the Y-axis.\n    /// </summary>\n    public readonly struct Capsule(Real radius, Real halfLength) : ISupportMappable\n    {\n        private readonly Real radius = radius > (Real)0.0 ? radius : throw new ArgumentOutOfRangeException(nameof(radius));\n        private readonly Real halfLength = halfLength >= (Real)0.0 ? halfLength : throw new ArgumentOutOfRangeException(nameof(halfLength));\n\n        public readonly void SupportMap(in JVector direction, out JVector result)\n        {\n            result = JVector.Normalize(direction) * radius;\n            result.Y += MathR.Sign(direction.Y) * halfLength;\n        }\n\n        public readonly void GetCenter(out JVector point) => point = JVector.Zero;\n    }\n\n    /// <summary>\n    /// Represents a cylinder as a lightweight support-mapped query primitive. The symmetry axis is the Y-axis.\n    /// </summary>\n    public readonly struct Cylinder(Real radius, Real halfHeight) : ISupportMappable\n    {\n        private readonly Real radius = radius > (Real)0.0 ? radius : throw new ArgumentOutOfRangeException(nameof(radius));\n        private readonly Real halfHeight = halfHeight > (Real)0.0 ? halfHeight : throw new ArgumentOutOfRangeException(nameof(halfHeight));\n\n        public readonly void SupportMap(in JVector direction, out JVector result)\n        {\n            Real sigma = MathR.Sqrt(direction.X * direction.X + direction.Z * direction.Z);\n\n            if (sigma > (Real)0.0)\n            {\n                result.X = direction.X / sigma * radius;\n                result.Y = MathR.Sign(direction.Y) * halfHeight;\n                result.Z = direction.Z / sigma * radius;\n            }\n            else\n            {\n                result.X = (Real)0.0;\n                result.Y = MathR.Sign(direction.Y) * halfHeight;\n                result.Z = (Real)0.0;\n            }\n        }\n\n        public readonly void GetCenter(out JVector point) => point = JVector.Zero;\n    }\n\n    /// <summary>\n    /// Represents a cone as a lightweight support-mapped query primitive. The symmetry axis is the Y-axis.\n    /// The cone is centered at its centroid: the base sits at Y = -height/4 and the apex at Y = 3*height/4.\n    /// </summary>\n    public readonly struct Cone(Real radius, Real height) : ISupportMappable\n    {\n        private readonly Real radius = radius > (Real)0.0 ? radius : throw new ArgumentOutOfRangeException(nameof(radius));\n        private readonly Real height = height > (Real)0.0 ? height : throw new ArgumentOutOfRangeException(nameof(height));\n\n        public readonly void SupportMap(in JVector direction, out JVector result)\n        {\n            const Real zeroEpsilon = (Real)1e-12;\n\n            JVector baseDir = new(direction.X, (Real)0.0, direction.Z);\n            baseDir = JVector.NormalizeSafe(baseDir, zeroEpsilon) * radius;\n            baseDir.Y = -(Real)0.25 * height;\n\n            if (JVector.Dot(direction, baseDir) >= direction.Y * (Real)0.75 * height)\n            {\n                result = baseDir;\n            }\n            else\n            {\n                result = new JVector((Real)0.0, (Real)0.75 * height, (Real)0.0);\n            }\n        }\n\n        public readonly void GetCenter(out JVector point) => point = JVector.Zero;\n    }\n}\n"
  },
  {
    "path": "src/Jitter2/Collision/PairHashSet.cs",
    "content": "/*\n * Jitter2 Physics Library\n * (c) Thorben Linneweber and contributors\n * SPDX-License-Identifier: MIT\n */\n\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Runtime.InteropServices;\nusing System.Threading;\n\nnamespace Jitter2.Collision;\n\n/// <summary>\n/// A hash set implementation which stores unordered pairs of (int, int) values.\n/// The implementation is based on open addressing with power-of-two sizing.\n/// </summary>\n/// <remarks>\n/// <para>\n/// Pairs are stored in a canonical form where the smaller ID comes first.\n/// A pair with <see cref=\"Pair.ID\"/> equal to zero is treated as an empty slot.\n/// </para>\n/// <para>\n/// This class is not generally thread-safe. Only <see cref=\"ConcurrentAdd\"/> may be called\n/// concurrently from multiple threads. All other methods require external synchronization.\n/// </para>\n/// </remarks>\ninternal unsafe class PairHashSet : IEnumerable<PairHashSet.Pair>\n{\n    /// <summary>\n    /// Represents an unordered pair of integer IDs stored in canonical form.\n    /// </summary>\n    [StructLayout(LayoutKind.Explicit, Size = 8)]\n    public readonly struct Pair\n    {\n        /// <summary>Combined 64-bit identifier for the pair.</summary>\n        [FieldOffset(0)] public readonly long ID;\n\n        /// <summary>The smaller of the two IDs.</summary>\n        [FieldOffset(0)] public readonly int ID1;\n\n        /// <summary>The larger of the two IDs.</summary>\n        [FieldOffset(4)] public readonly int ID2;\n\n        /// <summary>A zero pair representing an empty slot.</summary>\n        public static readonly Pair Zero = new();\n\n        /// <summary>\n        /// Creates a pair from two IDs, storing them in canonical order.\n        /// </summary>\n        /// <param name=\"id1\">First ID.</param>\n        /// <param name=\"id2\">Second ID.</param>\n        public Pair(int id1, int id2)\n        {\n            if (id1 < id2)\n            {\n                (ID1, ID2) = (id1, id2);\n            }\n            else\n            {\n                (ID1, ID2) = (id2, id1);\n            }\n        }\n\n        /// <summary>\n        /// Computes a hash code for the pair.\n        /// </summary>\n        /// <returns>The hash code.</returns>\n        public int GetHash()\n        {\n            return HashCode.Combine(ID1, ID2);\n        }\n    }\n\n    /// <summary>\n    /// Enumerates non-empty pairs in the hash set.\n    /// </summary>\n    public struct Enumerator(PairHashSet hashSet) : IEnumerator<Pair>\n    {\n        private int index = -1;\n\n        /// <inheritdoc/>\n        public readonly Pair Current => hashSet.Slots[index];\n\n        readonly object IEnumerator.Current => Current;\n\n        /// <inheritdoc/>\n        public readonly void Dispose()\n        {\n        }\n\n        /// <inheritdoc/>\n        public bool MoveNext()\n        {\n            var slots = hashSet.Slots;\n\n            while (index < slots.Length - 1)\n            {\n                if (slots[++index].ID != 0) return true;\n            }\n\n            return false;\n        }\n\n        /// <inheritdoc/>\n        public void Reset()\n        {\n            index = -1;\n        }\n    }\n\n    /// <summary>\n    /// The internal storage array for pairs. Empty slots have <see cref=\"Pair.ID\"/> equal to zero.\n    /// </summary>\n    public Pair[] Slots = [];\n    private int count;\n\n    /// <summary>\n    /// Minimum number of slots in the hash set (128 KB at 8 bytes per slot).\n    /// </summary>\n    public const int MinimumSize = 16384;\n\n    /// <summary>\n    /// Factor used to determine when to shrink the hash set.\n    /// </summary>\n    public const int TrimFactor = 8;\n\n    /// <summary>\n    /// Gets the number of pairs in the hash set.\n    /// </summary>\n    public int Count => count;\n\n    private static int PickSize(int size = -1)\n    {\n        int p2 = MinimumSize;\n        while (p2 < size)\n        {\n            p2 *= 2;\n        }\n\n        return p2;\n    }\n\n    /// <summary>\n    /// Removes all pairs from the hash set.\n    /// </summary>\n    /// <remarks>\n    /// This method is not thread-safe. Do not call concurrently with any other method.\n    /// </remarks>\n    public void Clear()\n    {\n        Array.Clear(Slots, 0, Slots.Length);\n        count = 0;\n    }\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"PairHashSet\"/> class.\n    /// </summary>\n    public PairHashSet()\n    {\n        Resize(PickSize());\n    }\n\n    private void Resize(int size)\n    {\n        if (Slots.Length == size) return;\n\n        Logger.Information(\"{0}: Resizing from {1} to {2} elements.\", nameof(PairHashSet), Slots.Length, size);\n\n        var newSlots = new Pair[size];\n\n        foreach (var pair in Slots)\n        {\n            if (pair.ID != 0)\n            {\n                int hash = pair.GetHash();\n                int hashIndex = FindSlot(newSlots, hash, pair.ID);\n                newSlots[hashIndex] = pair;\n            }\n        }\n\n        Slots = newSlots;\n    }\n\n    private static int FindSlot(Pair[] slots, int hash, long id)\n    {\n        int modder = slots.Length - 1;\n\n        hash &= modder;\n\n        while (true)\n        {\n            if (slots[hash].ID == 0 || slots[hash].ID == id) return hash;\n            hash = (hash + 1) & modder;\n        }\n    }\n\n    /// <summary>\n    /// Checks whether the hash set contains the specified pair.\n    /// </summary>\n    /// <param name=\"pair\">The pair to check.</param>\n    /// <returns><c>true</c> if the pair exists; otherwise, <c>false</c>.</returns>\n    public bool Contains(Pair pair)\n    {\n        int hash = pair.GetHash();\n        int hashIndex = FindSlot(Slots, hash, pair.ID);\n        return Slots[hashIndex].ID != 0;\n    }\n\n    /// <summary>\n    /// Adds a pair to the hash set.\n    /// </summary>\n    /// <param name=\"pair\">The pair to add.</param>\n    /// <returns><c>true</c> if the pair was added; <c>false</c> if it already exists.</returns>\n    /// <remarks>\n    /// This method is not thread-safe.\n    /// </remarks>\n    public bool Add(Pair pair)\n    {\n        int hash = pair.GetHash();\n        int hashIndex = FindSlot(Slots, hash, pair.ID);\n\n        if (Slots[hashIndex].ID == 0)\n        {\n            Slots[hashIndex] = pair;\n            Interlocked.Increment(ref count);\n\n            if (Slots.Length < 2 * count)\n            {\n                Resize(PickSize(Slots.Length * 2));\n            }\n\n            return true;\n        }\n\n        return false;\n    }\n\n    private Jitter2.Parallelization.ReaderWriterLock rwLock;\n\n    /// <summary>\n    /// Attempts to add a pair to the hash set in a thread-safe manner.\n    /// </summary>\n    /// <remarks>\n    /// Multiple threads may call <see cref=\"ConcurrentAdd\"/> concurrently.\n    /// However, no other methods (including <see cref=\"Add\"/>, <see cref=\"Remove(Pair)\"/>,\n    /// <see cref=\"Clear\"/>, or enumeration) may be called concurrently with this method.\n    /// </remarks>\n    /// <param name=\"pair\">The pair to add.</param>\n    /// <returns><c>true</c> if the pair was added; <c>false</c> if it already exists.</returns>\n    public bool ConcurrentAdd(Pair pair)\n    {\n        int hash = pair.GetHash();\n\n        // Fast path: This is a *huge* optimization in case of frequent additions\n        // of already existing entries. Entirely bypassing any locks or synchronization.\n        int fpHashIndex = FindSlot(Slots, hash, pair.ID);\n        if (Slots[fpHashIndex].ID != 0) return false;\n\n        rwLock.EnterReadLock();\n\n        fixed (Pair* slotsPtr = Slots)\n        {\n            while (true)\n            {\n                var hashIndex = FindSlot(Slots, hash, pair.ID);\n                var slotPtr = &slotsPtr[hashIndex];\n\n                if (slotPtr->ID == pair.ID)\n                {\n                    rwLock.ExitReadLock();\n                    return false;\n                }\n\n                if (Interlocked.CompareExchange(ref *(long*)slotPtr, pair.ID, 0) != 0)\n                {\n                    continue;\n                }\n\n                Interlocked.Increment(ref count);\n                rwLock.ExitReadLock();\n\n                if (Slots.Length < 2 * count)\n                {\n                    rwLock.EnterWriteLock();\n\n                    // check if another thread already performed a resize.\n                    if (Slots.Length < 2 * count)\n                    {\n                        Resize(PickSize(Slots.Length * 2));\n                    }\n\n                    rwLock.ExitWriteLock();\n                }\n\n                return true;\n            } // while\n        } // fixed\n    }\n\n    /// <summary>\n    /// Removes the pair at the specified slot index.\n    /// </summary>\n    /// <param name=\"slot\">The slot index.</param>\n    /// <returns><c>true</c> if a pair was removed; <c>false</c> if the slot was empty.</returns>\n    public bool Remove(int slot)\n    {\n        int modder = Slots.Length - 1;\n\n        if (Slots[slot].ID == 0)\n        {\n            return false;\n        }\n\n        int hashJ = slot;\n\n        while (true)\n        {\n            hashJ = (hashJ + 1) & modder;\n\n            if (Slots[hashJ].ID == 0)\n            {\n                break;\n            }\n\n            int hashK = Slots[hashJ].GetHash() & modder;\n\n            // https://en.wikipedia.org/wiki/Open_addressing\n            if ((hashJ > slot && (hashK <= slot || hashK > hashJ)) ||\n                (hashJ < slot && hashK <= slot && hashK > hashJ))\n            {\n                Slots[slot] = Slots[hashJ];\n                slot = hashJ;\n            }\n        }\n\n        Slots[slot] = Pair.Zero;\n        Interlocked.Decrement(ref count);\n\n        if (Slots.Length > MinimumSize && count * TrimFactor < Slots.Length)\n        {\n            Resize(PickSize(count * 2));\n        }\n\n        return true;\n    }\n\n    /// <summary>\n    /// Removes the specified pair from the hash set.\n    /// </summary>\n    /// <param name=\"pair\">The pair to remove.</param>\n    /// <returns><c>true</c> if the pair was removed; <c>false</c> if it was not found.</returns>\n    public bool Remove(Pair pair)\n    {\n        int hash = pair.GetHash();\n        int hashIndex = FindSlot(Slots, hash, pair.ID);\n        return Remove(hashIndex);\n    }\n\n    /// <inheritdoc/>\n    public IEnumerator<Pair> GetEnumerator()\n    {\n        return new Enumerator(this);\n    }\n\n    IEnumerator IEnumerable.GetEnumerator()\n    {\n        return GetEnumerator();\n    }\n}"
  },
  {
    "path": "src/Jitter2/Collision/Shapes/BoxShape.cs",
    "content": "﻿/*\n * Jitter2 Physics Library\n * (c) Thorben Linneweber and contributors\n * SPDX-License-Identifier: MIT\n */\n\nusing System;\nusing Jitter2.LinearMath;\n\nnamespace Jitter2.Collision.Shapes;\n\n/// <summary>\n/// Represents a three-dimensional box shape.\n/// </summary>\npublic class BoxShape : RigidBodyShape\n{\n    private JVector halfSize;\n\n    /// <summary>\n    /// Creates a box shape with specified dimensions.\n    /// </summary>\n    /// <param name=\"size\">The dimensions of the box.</param>\n    /// <exception cref=\"ArgumentOutOfRangeException\">\n    /// Thrown when any component of <paramref name=\"size\"/> is less than or equal to zero.\n    /// </exception>\n    public BoxShape(JVector size)\n    {\n        ArgumentOutOfRangeException.ThrowIfNegativeOrZero(size.X, nameof(size));\n        ArgumentOutOfRangeException.ThrowIfNegativeOrZero(size.Y, nameof(size));\n        ArgumentOutOfRangeException.ThrowIfNegativeOrZero(size.Z, nameof(size));\n\n        halfSize = (Real)0.5 * size;\n        UpdateWorldBoundingBox();\n    }\n\n    /// <summary>\n    /// Gets or sets the dimensions of the box.\n    /// </summary>\n    /// <exception cref=\"ArgumentOutOfRangeException\">\n    /// Thrown when any component of <paramref name=\"value\"/> is less than or equal to zero.\n    /// </exception>\n    public JVector Size\n    {\n        get => (Real)2.0 * halfSize;\n        set\n        {\n            ArgumentOutOfRangeException.ThrowIfNegativeOrZero(value.X, nameof(Size));\n            ArgumentOutOfRangeException.ThrowIfNegativeOrZero(value.Y, nameof(Size));\n            ArgumentOutOfRangeException.ThrowIfNegativeOrZero(value.Z, nameof(Size));\n\n            halfSize = value * (Real)0.5;\n            UpdateWorldBoundingBox();\n        }\n    }\n\n    /// <summary>\n    /// Creates a cube shape with sides of equal length.\n    /// </summary>\n    /// <param name=\"size\">The length of each side.</param>\n    /// <exception cref=\"ArgumentOutOfRangeException\">\n    /// Thrown when <paramref name=\"size\"/> is less than or equal to zero.\n    /// </exception>\n    public BoxShape(Real size)\n    {\n        ArgumentOutOfRangeException.ThrowIfNegativeOrZero(size);\n\n        halfSize = new JVector(size * (Real)0.5);\n        UpdateWorldBoundingBox();\n    }\n\n    /// <summary>\n    /// Creates a box shape with the specified length, height, and width.\n    /// </summary>\n    /// <param name=\"length\">The length of the box.</param>\n    /// <param name=\"height\">The height of the box.</param>\n    /// <param name=\"width\">The width of the box.</param>\n    /// <exception cref=\"ArgumentOutOfRangeException\">\n    /// Thrown when <paramref name=\"length\"/>, <paramref name=\"height\"/>, or <paramref name=\"width\"/> is less than\n    /// or equal to zero.\n    /// </exception>\n    public BoxShape(Real width, Real height, Real length)\n    {\n        ArgumentOutOfRangeException.ThrowIfNegativeOrZero(length);\n        ArgumentOutOfRangeException.ThrowIfNegativeOrZero(height);\n        ArgumentOutOfRangeException.ThrowIfNegativeOrZero(width);\n\n        halfSize = (Real)0.5 * new JVector(width, height, length);\n        UpdateWorldBoundingBox();\n    }\n\n    public override void SupportMap(in JVector direction, out JVector result)\n    {\n        result.X = MathHelper.SignBit(direction.X) * halfSize.X;\n        result.Y = MathHelper.SignBit(direction.Y) * halfSize.Y;\n        result.Z = MathHelper.SignBit(direction.Z) * halfSize.Z;\n    }\n\n    public override bool LocalRayCast(in JVector origin, in JVector direction, out JVector normal, out Real lambda)\n    {\n        Real epsilon = (Real)1e-22;\n\n        JVector min = -halfSize;\n        JVector max = halfSize;\n\n        normal = JVector.Zero;\n        lambda = (Real)0.0;\n\n        Real exit = Real.PositiveInfinity;\n\n        if (MathR.Abs(direction.X) > epsilon)\n        {\n            Real ix = (Real)1.0 / direction.X;\n            Real t0 = (min.X - origin.X) * ix;\n            Real t1 = (max.X - origin.X) * ix;\n\n            if (t0 > t1) (t0, t1) = (t1, t0);\n\n            if (t0 > exit || t1 < lambda) return false;\n\n            if (t0 > lambda)\n            {\n                lambda = t0;\n                normal = direction.X < (Real)0.0 ? JVector.UnitX : -JVector.UnitX;\n            }\n\n            if (t1 < exit) exit = t1;\n        }\n        else if (origin.X < min.X || origin.X > max.X)\n        {\n            return false;\n        }\n\n        if (MathR.Abs(direction.Y) > epsilon)\n        {\n            Real iy = (Real)1.0 / direction.Y;\n            Real t0 = (min.Y - origin.Y) * iy;\n            Real t1 = (max.Y - origin.Y) * iy;\n\n            if (t0 > t1) (t0, t1) = (t1, t0);\n\n            if (t0 > exit || t1 < lambda) return false;\n\n            if (t0 > lambda)\n            {\n                lambda = t0;\n                normal = direction.Y < (Real)0.0 ? JVector.UnitY : -JVector.UnitY;\n            }\n\n            if (t1 < exit) exit = t1;\n        }\n        else if (origin.Y < min.Y || origin.Y > max.Y)\n        {\n            return false;\n        }\n\n        if (MathR.Abs(direction.Z) > epsilon)\n        {\n            Real iz = (Real)1.0 / direction.Z;\n            Real t0 = (min.Z - origin.Z) * iz;\n            Real t1 = (max.Z - origin.Z) * iz;\n\n            if (t0 > t1) (t0, t1) = (t1, t0);\n\n            if (t0 > exit || t1 < lambda) return false;\n\n            if (t0 > lambda)\n            {\n                lambda = t0;\n                normal = direction.Z < (Real)0.0 ? JVector.UnitZ : -JVector.UnitZ;\n            }\n            //if (t1 < exit) exit = t1;\n        }\n        else if (origin.Z < min.Z || origin.Z > max.Z)\n        {\n            return false;\n        }\n\n        return true;\n    }\n\n    public override void GetCenter(out JVector point)\n    {\n        point = JVector.Zero;\n    }\n\n    public override void CalculateBoundingBox(in JQuaternion orientation, in JVector position, out JBoundingBox box)\n    {\n        JMatrix.Absolute(JMatrix.CreateFromQuaternion(orientation), out JMatrix absm);\n        var ths = JVector.Transform(halfSize, absm);\n        box.Min = position - ths;\n        box.Max = position + ths;\n    }\n\n    public override void CalculateMassInertia(out JMatrix inertia, out JVector com, out Real mass)\n    {\n        JVector size = halfSize * (Real)2.0;\n        mass = size.X * size.Y * size.Z;\n\n        inertia = JMatrix.Identity;\n        inertia.M11 = (Real)(1.0 / 12.0) * mass * (size.Y * size.Y + size.Z * size.Z);\n        inertia.M22 = (Real)(1.0 / 12.0) * mass * (size.X * size.X + size.Z * size.Z);\n        inertia.M33 = (Real)(1.0 / 12.0) * mass * (size.X * size.X + size.Y * size.Y);\n\n        com = JVector.Zero;\n    }\n}"
  },
  {
    "path": "src/Jitter2/Collision/Shapes/CapsuleShape.cs",
    "content": "/*\n * Jitter2 Physics Library\n * (c) Thorben Linneweber and contributors\n * SPDX-License-Identifier: MIT\n */\n\nusing System;\nusing Jitter2.LinearMath;\n\nnamespace Jitter2.Collision.Shapes;\n\n/// <summary>\n/// Represents a capsule shape defined by a radius and the length of its cylindrical section.\n/// </summary>\npublic class CapsuleShape : RigidBodyShape\n{\n    private Real radius;\n    private Real halfLength;\n\n    /// <summary>\n    /// Gets or sets the radius of the capsule.\n    /// </summary>\n    /// <exception cref=\"ArgumentOutOfRangeException\">\n    /// Thrown when <paramref name=\"value\"/> is less than or equal to zero.\n    /// </exception>\n    public Real Radius\n    {\n        get => radius;\n        set\n        {\n            ArgumentOutOfRangeException.ThrowIfNegativeOrZero(value, nameof(Radius));\n            radius = value;\n            UpdateWorldBoundingBox();\n        }\n    }\n\n    /// <summary>\n    /// Gets or sets the length of the cylindrical part of the capsule, excluding the half-spheres on both ends.\n    /// </summary>\n    /// <exception cref=\"ArgumentOutOfRangeException\">\n    /// Thrown when <paramref name=\"value\"/> is negative.\n    /// </exception>\n    public Real Length\n    {\n        get => (Real)2.0 * halfLength;\n        set\n        {\n            ArgumentOutOfRangeException.ThrowIfNegative(value, nameof(Length));\n            halfLength = value / (Real)2.0;\n            UpdateWorldBoundingBox();\n        }\n    }\n\n    /// <summary>\n    /// Initializes a new instance of the CapsuleShape class with the specified radius and length. The symmetry axis of the capsule is aligned along the Y-axis.\n    /// </summary>\n    /// <param name=\"radius\">The radius of the capsule.</param>\n    /// <param name=\"length\">The length of the cylindrical part of the capsule, excluding the half-spheres at both ends.</param>\n    /// <exception cref=\"ArgumentOutOfRangeException\">\n    /// Thrown when <paramref name=\"radius\"/> is less than or equal to zero or when <paramref name=\"length\"/> is negative.\n    /// </exception>\n    public CapsuleShape(Real radius = (Real)0.5, Real length = (Real)1.0)\n    {\n        ArgumentOutOfRangeException.ThrowIfNegativeOrZero(radius);\n        ArgumentOutOfRangeException.ThrowIfNegative(length);\n\n        this.radius = radius;\n        halfLength = (Real)0.5 * length;\n        UpdateWorldBoundingBox();\n    }\n\n    /// <inheritdoc/>\n    public override void SupportMap(in JVector direction, out JVector result)\n    {\n        // capsule = segment + sphere\n\n        // sphere\n        result = JVector.Normalize(direction) * radius;\n\n        // two endpoints of the segment are\n        // p_1 = (0, +length/2, 0)\n        // p_2 = (0, -length/2, 0)\n\n        // we have to calculate the dot-product with the direction\n        // vector to decide whether p_1 or p_2 is the correct support point\n        result.Y += MathR.Sign(direction.Y) * halfLength;\n    }\n\n    /// <inheritdoc/>\n    public override void GetCenter(out JVector point)\n    {\n        point = JVector.Zero;\n    }\n\n    /// <inheritdoc/>\n    public override void CalculateBoundingBox(in JQuaternion orientation, in JVector position, out JBoundingBox box)\n    {\n        JVector delta = halfLength * orientation.GetBasisY();\n\n        box.Max.X = +radius + MathR.Abs(delta.X);\n        box.Max.Y = +radius + MathR.Abs(delta.Y);\n        box.Max.Z = +radius + MathR.Abs(delta.Z);\n\n        box.Min = -box.Max;\n\n        box.Min += position;\n        box.Max += position;\n    }\n\n    /// <inheritdoc/>\n    public override void CalculateMassInertia(out JMatrix inertia, out JVector com, out Real mass)\n    {\n        Real length = (Real)2.0 * halfLength;\n\n        Real massSphere = (Real)(4.0 / 3.0) * MathR.PI * radius * radius * radius;\n        Real massCylinder = MathR.PI * radius * radius * length;\n\n        inertia = JMatrix.Identity;\n\n        inertia.M11 = massCylinder * ((Real)(1.0 / 12.0) * length * length + (Real)(1.0 / 4.0) * radius * radius) + massSphere *\n            ((Real)(2.0 / 5.0) * radius * radius + (Real)(1.0 / 4.0) * length * length + (Real)(3.0 / 8.0) * length * radius);\n        inertia.M22 = (Real)(1.0 / 2.0) * massCylinder * radius * radius + (Real)(2.0 / 5.0) * massSphere * radius * radius;\n        inertia.M33 = massCylinder * ((Real)(1.0 / 12.0) * length * length + (Real)(1.0 / 4.0) * radius * radius) + massSphere *\n            ((Real)(2.0 / 5.0) * radius * radius + (Real)(1.0 / 4.0) * length * length + (Real)(3.0 / 8.0) * length * radius);\n\n        mass = massCylinder + massSphere;\n        com = JVector.Zero;\n    }\n}"
  },
  {
    "path": "src/Jitter2/Collision/Shapes/ConeShape.cs",
    "content": "/*\n * Jitter2 Physics Library\n * (c) Thorben Linneweber and contributors\n * SPDX-License-Identifier: MIT\n */\n\nusing System;\nusing Jitter2.LinearMath;\n\nnamespace Jitter2.Collision.Shapes;\n\n/// <summary>\n/// Represents a cone shape defined by a base radius and height.\n/// </summary>\npublic class ConeShape : RigidBodyShape\n{\n    private Real radius;\n    private Real height;\n\n    /// <summary>\n    /// Gets or sets the radius of the cone at its base.\n    /// </summary>\n    /// <exception cref=\"ArgumentOutOfRangeException\">\n    /// Thrown when radius is less than or equal to zero.\n    /// </exception>\n    public Real Radius\n    {\n        get => radius;\n        set\n        {\n            ArgumentOutOfRangeException.ThrowIfNegativeOrZero(value, nameof(Radius));\n            radius = value;\n            UpdateWorldBoundingBox();\n        }\n    }\n\n    /// <summary>\n    /// Gets or sets the height of the cone.\n    /// </summary>\n    /// <exception cref=\"ArgumentOutOfRangeException\">\n    /// Thrown when <paramref name=\"value\"/> is less than or equal to zero.\n    /// </exception>\n    public Real Height\n    {\n        get => height;\n        set\n        {\n            ArgumentOutOfRangeException.ThrowIfNegativeOrZero(value, nameof(Height));\n            height = value;\n            UpdateWorldBoundingBox();\n        }\n    }\n\n    /// <summary>\n    /// Initializes a new instance of the ConeShape class with specified radius and height. The symmetry axis of the cone is aligned along the Y-axis.\n    /// </summary>\n    /// <param name=\"radius\">The radius of the cone at its base.</param>\n    /// <param name=\"height\">The height of the cone.</param>\n    /// <exception cref=\"ArgumentOutOfRangeException\">\n    /// Thrown when <paramref name=\"radius\"/> or <paramref name=\"height\"/> is less than or equal to zero.\n    /// </exception>\n    public ConeShape(Real radius = (Real)0.5, Real height = (Real)1.0)\n    {\n        ArgumentOutOfRangeException.ThrowIfNegativeOrZero(radius);\n        ArgumentOutOfRangeException.ThrowIfNegativeOrZero(height);\n\n        this.radius = radius;\n        this.height = height;\n        UpdateWorldBoundingBox();\n    }\n\n    /// <inheritdoc/>\n    public override void SupportMap(in JVector direction, out JVector result)\n    {\n        const Real zeroEpsilon = (Real)1e-12;\n        // cone = convex hull of disk and point\n\n        // The center of mass is at 0.25 height.\n        JVector baseDir = new JVector(direction.X, (Real)0.0, direction.Z);\n        baseDir = JVector.NormalizeSafe(baseDir, zeroEpsilon) * radius;\n\n        baseDir.Y = -(Real)0.25 * height;\n\n        // disk support point vs. (0, 0.75 * height, 0)\n        if (JVector.Dot(direction, baseDir) >= direction.Y * (Real)0.75 * height)\n        {\n            result = baseDir;\n        }\n        else\n        {\n            result = new JVector(0, (Real)0.75 * height, 0);\n        }\n    }\n\n    /// <inheritdoc/>\n    public override void GetCenter(out JVector point)\n    {\n        point = JVector.Zero;\n    }\n\n    /// <inheritdoc/>\n    public override void CalculateBoundingBox(in JQuaternion orientation, in JVector position, out JBoundingBox box)\n    {\n        JVector upa = orientation.GetBasisY();\n\n        Real xx = upa.X * upa.X;\n        Real yy = upa.Y * upa.Y;\n        Real zz = upa.Z * upa.Z;\n\n        Real xext = MathR.Sqrt(yy + zz) * radius;\n        Real yext = MathR.Sqrt(xx + zz) * radius;\n        Real zext = MathR.Sqrt(xx + yy) * radius;\n\n        JVector p1 = -(Real)0.25 * height * upa;\n        JVector p2 = +(Real)0.75 * height * upa;\n\n        box.Min = p1 - new JVector(xext, yext, zext);\n        box.Max = p1 + new JVector(xext, yext, zext);\n\n        JBoundingBox.AddPointInPlace(ref box, p2);\n\n        box.Min += position;\n        box.Max += position;\n    }\n\n    /// <inheritdoc/>\n    public override void CalculateMassInertia(out JMatrix inertia, out JVector com, out Real mass)\n    {\n        mass = (Real)(1.0 / 3.0) * MathR.PI * radius * radius * height;\n\n        inertia = JMatrix.Identity;\n        inertia.M11 = mass * ((Real)(3.0 / 20.0) * radius * radius + (Real)(3.0 / 80.0) * height * height);\n        inertia.M22 = (Real)(3.0 / 10.0) * mass * radius * radius;\n        inertia.M33 = mass * ((Real)(3.0 / 20.0) * radius * radius + (Real)(3.0 / 80.0) * height * height);\n\n        com = JVector.Zero;\n    }\n}"
  },
  {
    "path": "src/Jitter2/Collision/Shapes/ConvexHullShape.cs",
    "content": "/*\n * Jitter2 Physics Library\n * (c) Thorben Linneweber and contributors\n * SPDX-License-Identifier: MIT\n */\n\nusing System;\nusing System.Collections.Generic;\nusing System.Runtime.InteropServices;\nusing Jitter2.DataStructures;\nusing Jitter2.LinearMath;\n\nnamespace Jitter2.Collision.Shapes;\n\n/// <summary>\n/// Represents a convex hull shape defined by a set of triangles.\n/// </summary>\npublic class ConvexHullShape : RigidBodyShape, ICloneableShape<ConvexHullShape>\n{\n    private struct CHullVector(in JVector vertex) : IEquatable<CHullVector>\n    {\n        public readonly JVector Vertex = vertex;\n        public ushort NeighborMinIndex = 0;\n        public ushort NeighborMaxIndex = 0;\n\n        public readonly override bool Equals(object? obj)\n        {\n            return obj is CHullVector other && Equals(other);\n        }\n\n        public readonly override int GetHashCode()\n        {\n            return Vertex.GetHashCode();\n        }\n\n        public readonly bool Equals(CHullVector other)\n        {\n            return Vertex.Equals(other.Vertex);\n        }\n    }\n\n    private readonly struct CHullTriangle(ushort a, ushort b, ushort c)\n    {\n        public readonly ushort IndexA = a;\n        public readonly ushort IndexB = b;\n        public readonly ushort IndexC = c;\n    }\n\n    private JBoundingBox cachedBoundingBox;\n    private JMatrix cachedInertia;\n    private Real cachedMass;\n    private JVector cachedCenter;\n\n    private CHullVector[] vertices = null!;\n    private CHullTriangle[] indices = null!;\n    private ushort[] neighborList = null!;\n\n    private JVector shifted;\n\n    /// <summary>\n    /// Initializes a new instance of the ConvexHullShape class, creating a convex hull.\n    /// </summary>\n    /// <param name=\"triangles\">All vertices defining the convex hull. The vertices must strictly lie\n    /// on the surface of the convex hull to avoid incorrect results or indefinite hangs in the collision algorithm.</param>\n    /// <exception cref=\"ArgumentException\">\n    /// Thrown when <paramref name=\"triangles\"/> is empty.\n    /// </exception>\n    /// <exception cref=\"InvalidOperationException\">\n    /// Thrown when the convex hull consists of more than <see cref=\"ushort.MaxValue\"/> vertices.\n    /// </exception>\n    public ConvexHullShape(ReadOnlySpan<JTriangle> triangles)\n    {\n        if (triangles.Length == 0)\n        {\n            throw new ArgumentException(\"Triangle set must contain at least one triangle.\", nameof(triangles));\n        }\n\n        Dictionary<CHullVector, ushort> tmpIndices = new();\n        List<CHullVector> tmpVertices = [];\n\n        ushort PushVector(CHullVector v)\n        {\n            if (tmpIndices.TryGetValue(v, out ushort result)) return result;\n\n            if (tmpVertices.Count >= ushort.MaxValue)\n            {\n                throw new InvalidOperationException(\n                    $\"The convex hull consists of too many vertices (>{ushort.MaxValue})\");\n            }\n\n            result = (ushort)tmpVertices.Count;\n            tmpIndices.Add(v, result);\n            tmpVertices.Add(v);\n\n            return result;\n        }\n\n        foreach (var tti in triangles)\n        {\n            PushVector(new CHullVector(tti.V0));\n            PushVector(new CHullVector(tti.V1));\n            PushVector(new CHullVector(tti.V2));\n        }\n\n        var tmpNeighbors = new List<ushort>[tmpVertices.Count];\n        indices = new CHullTriangle[triangles.Length];\n\n        for (int i = 0; i < triangles.Length; i++)\n        {\n            JTriangle tti = triangles[i];\n\n            ushort a = PushVector(new CHullVector(tti.V0));\n            ushort b = PushVector(new CHullVector(tti.V1));\n            ushort c = PushVector(new CHullVector(tti.V2));\n\n            indices[i] = new CHullTriangle(a, b, c);\n\n            (tmpNeighbors[a] ??= []).Add(b);\n            tmpNeighbors[a].Add(c);\n\n            (tmpNeighbors[b] ??= []).Add(a);\n            tmpNeighbors[b].Add(c);\n\n            (tmpNeighbors[c] ??= []).Add(a);\n            tmpNeighbors[c].Add(b);\n        }\n\n        // Estimate capacity to avoid resizing (Euler characteristic ~ 6 neighbors per vertex)\n        var finalNeighbors = new List<ushort>(tmpVertices.Count * 6);\n\n        var tmpVerticesSpan = CollectionsMarshal.AsSpan(tmpVertices);\n\n        for (int i = 0; i < tmpVerticesSpan.Length; i++)\n        {\n            ref var element = ref tmpVerticesSpan[i];\n            element.NeighborMinIndex = (ushort)finalNeighbors.Count;\n            AddDistinct(tmpNeighbors[i], finalNeighbors);\n            element.NeighborMaxIndex = (ushort)finalNeighbors.Count;\n\n            // Help GC\n            tmpNeighbors[i] = null!;\n        }\n\n        vertices = tmpVertices.ToArray();\n        neighborList = finalNeighbors.ToArray();\n\n        tmpIndices.Clear();\n        tmpVertices.Clear();\n\n        UpdateShape();\n    }\n\n    /// <inheritdoc cref=\"ConvexHullShape(ReadOnlySpan{JTriangle})\"/>\n    public ConvexHullShape(IEnumerable<JTriangle> triangles) :\n        this(SpanHelper.AsReadOnlySpan(triangles, out _))\n    {\n    }\n\n    private ConvexHullShape()\n    {\n    }\n\n    /// <summary>\n    /// Helper to sort and add unique elements from source to destination.\n    /// Replaces LINQ Distinct() for better performance and zero allocations.\n    /// </summary>\n    private static void AddDistinct(List<ushort> source, List<ushort> destination)\n    {\n        if (source == null || source.Count == 0) return;\n\n        source.Sort();\n\n        ushort previous = source[0];\n        destination.Add(previous);\n\n        for (int i = 1; i < source.Count; i++)\n        {\n            ushort current = source[i];\n            if (current != previous)\n            {\n                destination.Add(current);\n                previous = current;\n            }\n        }\n    }\n\n    /// <summary>\n    /// Creates a clone of the convex hull shape. Note that the underlying data structure is shared among instances.\n    /// </summary>\n    /// <returns>A new instance of the ConvexHullShape class that shares the same underlying data structure as the\n    /// original instance.\n    /// </returns>\n    public ConvexHullShape Clone()\n    {\n        ConvexHullShape result = new()\n        {\n            neighborList = neighborList,\n            vertices = vertices,\n            indices = indices,\n            cachedBoundingBox = cachedBoundingBox,\n            cachedCenter = cachedCenter,\n            cachedInertia = cachedInertia,\n            cachedMass = cachedMass,\n            shifted = shifted\n        };\n        return result;\n    }\n\n    /// <summary>\n    /// Gets or sets the shift applied to the convex hull vertices.\n    /// </summary>\n    public JVector Shift\n    {\n        get => shifted;\n        set\n        {\n            shifted = value;\n            UpdateShape();\n        }\n    }\n\n    /// <summary>\n    /// Updates the shape's cached mass, inertia, and bounding box.\n    /// </summary>\n    public void UpdateShape()\n    {\n        CalculateMassInertia();\n        CalcInitBox();\n    }\n\n    /// <inheritdoc/>\n    public override void CalculateMassInertia(out JMatrix inertia, out JVector com, out Real mass)\n    {\n        inertia = cachedInertia;\n        com = cachedCenter;\n        mass = cachedMass;\n    }\n\n    /// <summary>\n    /// Recalculates the mass, center of mass, and inertia tensor from the convex hull triangles.\n    /// </summary>\n    public void CalculateMassInertia()\n    {\n        cachedCenter = JVector.Zero;\n        cachedInertia = JMatrix.Zero;\n        cachedMass = 0;\n\n        const Real a = (Real)(1.0 / 60.0);\n        const Real b = (Real)(1.0 / 120.0);\n        JMatrix canonicalInertia = new(a, b, b, b, a, b, b, b, a);\n\n        JVector pointWithin = JVector.Zero;\n\n        for (int i = 0; i < vertices.Length; i++)\n        {\n            pointWithin += vertices[i].Vertex;\n        }\n\n        pointWithin = pointWithin * ((Real)1.0 / vertices.Length) + shifted;\n\n        foreach (CHullTriangle tri in indices)\n        {\n            JVector column0 = vertices[tri.IndexA].Vertex + shifted;\n            JVector column1 = vertices[tri.IndexB].Vertex + shifted;\n            JVector column2 = vertices[tri.IndexC].Vertex + shifted;\n\n            // check winding\n            {\n                JVector normal = (column1 - column0) % (column2 - column0);\n                Real dot = JVector.Dot(normal, column0 - pointWithin);\n                if (dot < (Real)0.0)\n                {\n                    (column0, column1) = (column1, column0);\n                }\n            }\n\n            JMatrix transformation = new(\n                column0.X, column1.X, column2.X,\n                column0.Y, column1.Y, column2.Y,\n                column0.Z, column1.Z, column2.Z);\n\n            Real detA = transformation.Determinant();\n\n            JMatrix tetrahedronInertia = JMatrix.Multiply(transformation * canonicalInertia * JMatrix.Transpose(transformation), detA);\n\n            JVector tetrahedronCom = (Real)(1.0 / 4.0) * (column0 + column1 + column2);\n            Real tetrahedronMass = (Real)(1.0 / 6.0) * detA;\n\n            cachedInertia += tetrahedronInertia;\n            cachedCenter += tetrahedronMass * tetrahedronCom;\n            cachedMass += tetrahedronMass;\n        }\n\n        cachedInertia = JMatrix.Multiply(JMatrix.Identity, cachedInertia.Trace()) - cachedInertia;\n        cachedCenter *= (Real)1.0 / cachedMass;\n    }\n\n    /// <inheritdoc/>\n    public override void CalculateBoundingBox(in JQuaternion orientation, in JVector position, out JBoundingBox box)\n    {\n        JVector halfSize = (Real)0.5 * (cachedBoundingBox.Max - cachedBoundingBox.Min);\n        JVector center = (Real)0.5 * (cachedBoundingBox.Max + cachedBoundingBox.Min);\n\n        JMatrix ori = JMatrix.CreateFromQuaternion(orientation);\n        JMatrix.Absolute(in ori, out JMatrix abs);\n        JVector.Transform(halfSize, abs, out JVector temp);\n        JVector.Transform(center, orientation, out JVector temp2);\n\n        box.Max = temp;\n        JVector.Negate(temp, out box.Min);\n\n        JVector.Add(box.Min, position + temp2, out box.Min);\n        JVector.Add(box.Max, position + temp2, out box.Max);\n    }\n\n    private void CalcInitBox()\n    {\n        JVector vec = JVector.UnitX;\n        InternalSupportMap(vec, out JVector res);\n        cachedBoundingBox.Max.X = res.X;\n\n        vec = JVector.UnitY;\n        InternalSupportMap(vec, out res);\n        cachedBoundingBox.Max.Y = res.Y;\n\n        vec = JVector.UnitZ;\n        InternalSupportMap(vec, out res);\n        cachedBoundingBox.Max.Z = res.Z;\n\n        vec = -JVector.UnitX;\n        InternalSupportMap(vec, out res);\n        cachedBoundingBox.Min.X = res.X;\n\n        vec = -JVector.UnitY;\n        InternalSupportMap(vec, out res);\n        cachedBoundingBox.Min.Y = res.Y;\n\n        vec = -JVector.UnitZ;\n        InternalSupportMap(vec, out res);\n        cachedBoundingBox.Min.Z = res.Z;\n    }\n\n    private ushort InternalSupportMap(in JVector direction, out JVector result)\n    {\n        ushort current = 0;\n        Real dotProduct = JVector.Dot(vertices[current].Vertex, direction);\n\n        main:\n        bool needsVerify = false;\n        JVector verifyDir = JVector.Arbitrary;\n\n        var min = vertices[current].NeighborMinIndex;\n        var max = vertices[current].NeighborMaxIndex;\n\n        const Real epsilonIncrement = (Real)1e-12;\n\n        for (int i = min; i < max; i++)\n        {\n            ushort nb = neighborList[i];\n            Real nbProduct = JVector.Dot(vertices[nb].Vertex, direction);\n\n            if (MathR.Abs(nbProduct - dotProduct) < epsilonIncrement)\n            {\n                verifyDir = vertices[nb].Vertex - vertices[current].Vertex;\n                needsVerify = true;\n            }\n\n            if (nbProduct > dotProduct + epsilonIncrement)\n            {\n                // no need to find the \"best\" neighbor - as soon as we found a better\n                // candidate we move there.\n                dotProduct = nbProduct;\n                current = nb;\n                goto main;\n            }\n        }\n\n        // A secondary hill climbing algorithm in case of a plateau.\n        if (needsVerify)\n        {\n            Real d0 = JVector.Dot(verifyDir, vertices[current].Vertex);\n\n            secondary:\n            min = vertices[current].NeighborMinIndex;\n            max = vertices[current].NeighborMaxIndex;\n\n            for (int i = min; i < max; i++)\n            {\n                ushort nb = neighborList[i];\n                Real nbProduct = JVector.Dot(vertices[nb].Vertex, direction);\n\n                if (nbProduct > dotProduct + epsilonIncrement)\n                {\n                    dotProduct = nbProduct;\n                    current = nb;\n                    goto main;\n                }\n\n                if (MathR.Abs(nbProduct - dotProduct) < epsilonIncrement)\n                {\n                    Real d1 = JVector.Dot(verifyDir, vertices[nb].Vertex);\n\n                    if (d1 > d0 + epsilonIncrement)\n                    {\n                        d0 = d1;\n                        current = nb;\n                        goto secondary;\n                    }\n                }\n            }\n        }\n\n        result = vertices[current].Vertex + shifted;\n        return current;\n    }\n\n    /// <inheritdoc/>\n    public override void SupportMap(in JVector direction, out JVector result)\n    {\n        InternalSupportMap(direction, out result);\n    }\n\n    /// <inheritdoc/>\n    public override void GetCenter(out JVector point)\n    {\n        point = cachedCenter;\n    }\n}"
  },
  {
    "path": "src/Jitter2/Collision/Shapes/CylinderShape.cs",
    "content": "/*\n * Jitter2 Physics Library\n * (c) Thorben Linneweber and contributors\n * SPDX-License-Identifier: MIT\n */\n\nusing System;\nusing Jitter2.LinearMath;\n\nnamespace Jitter2.Collision.Shapes;\n\n/// <summary>\n/// Represents a cylinder shape defined by a height and radius.\n/// </summary>\npublic class CylinderShape : RigidBodyShape\n{\n    private Real radius;\n    private Real height;\n\n    /// <summary>\n    /// Gets or sets the radius of the cylinder.\n    /// </summary>\n    /// <exception cref=\"ArgumentOutOfRangeException\">\n    /// Thrown when <paramref name=\"value\"/> is less than or equal to zero.\n    /// </exception>\n    public Real Radius\n    {\n        get => radius;\n        set\n        {\n            ArgumentOutOfRangeException.ThrowIfNegativeOrZero(value, nameof(Radius));\n            radius = value;\n            UpdateWorldBoundingBox();\n        }\n    }\n\n    /// <summary>\n    /// Gets or sets the height of the cylinder.\n    /// </summary>\n    /// <exception cref=\"ArgumentOutOfRangeException\">\n    /// Thrown when <paramref name=\"value\"/> is less than or equal to zero.\n    /// </exception>\n    public Real Height\n    {\n        get => height;\n        set\n        {\n            ArgumentOutOfRangeException.ThrowIfNegativeOrZero(value, nameof(Height));\n            height = value;\n            UpdateWorldBoundingBox();\n        }\n    }\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"CylinderShape\"/> class, creating a cylinder shape with the specified\n    /// height and radius. The symmetry axis of the cylinder is aligned along the y-axis.\n    /// </summary>\n    /// <param name=\"height\">The height of the cylinder.</param>\n    /// <param name=\"radius\">The radius of the cylinder at its base.</param>\n    /// <exception cref=\"ArgumentOutOfRangeException\">\n    /// Thrown when <paramref name=\"height\"/> or <paramref name=\"radius\"/> is less than or equal to zero.\n    /// </exception>\n    public CylinderShape(Real height, Real radius)\n    {\n        ArgumentOutOfRangeException.ThrowIfNegativeOrZero(height);\n        ArgumentOutOfRangeException.ThrowIfNegativeOrZero(radius);\n\n        this.radius = radius;\n        this.height = height;\n        UpdateWorldBoundingBox();\n    }\n\n    /// <inheritdoc/>\n    public override void GetCenter(out JVector point)\n    {\n        point = JVector.Zero;\n    }\n\n    /// <inheritdoc/>\n    public override void SupportMap(in JVector direction, out JVector result)\n    {\n        Real sigma = (Real)Math.Sqrt(direction.X * direction.X + direction.Z * direction.Z);\n\n        if (sigma > (Real)0.0)\n        {\n            result.X = direction.X / sigma * radius;\n            result.Y = Math.Sign(direction.Y) * height * (Real)0.5;\n            result.Z = direction.Z / sigma * radius;\n        }\n        else\n        {\n            result.X = (Real)0.0;\n            result.Y = Math.Sign(direction.Y) * height * (Real)0.5;\n            result.Z = (Real)0.0;\n        }\n    }\n\n    /// <inheritdoc/>\n    public override void CalculateBoundingBox(in JQuaternion orientation, in JVector position, out JBoundingBox box)\n    {\n        JVector upa = orientation.GetBasisY();\n\n        Real xx = upa.X * upa.X;\n        Real yy = upa.Y * upa.Y;\n        Real zz = upa.Z * upa.Z;\n\n        Real xExt = MathR.Sqrt(yy + zz) * radius;\n        Real yExt = MathR.Sqrt(xx + zz) * radius;\n        Real zExt = MathR.Sqrt(xx + yy) * radius;\n\n        JVector p1 = -(Real)0.5 * height * upa;\n        JVector p2 = +(Real)0.5 * height * upa;\n\n        JVector delta = JVector.Max(p1, p2) + new JVector(xExt, yExt, zExt);\n\n        box.Min = position - delta;\n        box.Max = position + delta;\n    }\n\n    /// <inheritdoc/>\n    public override void CalculateMassInertia(out JMatrix inertia, out JVector com, out Real mass)\n    {\n        mass = MathR.PI * radius * radius * height;\n\n        inertia = JMatrix.Identity;\n\n        inertia.M11 = (Real)(1.0 / 4.0) * mass * radius * radius + (Real)(1.0 / 12.0) * mass * height * height;\n        inertia.M22 = (Real)(1.0 / 2.0) * mass * radius * radius;\n        inertia.M33 = (Real)(1.0 / 4.0) * mass * radius * radius + (Real)(1.0 / 12.0) * mass * height * height;\n\n        com = JVector.Zero;\n    }\n}"
  },
  {
    "path": "src/Jitter2/Collision/Shapes/ICloneableShape.cs",
    "content": "/*\n * Jitter2 Physics Library\n * (c) Thorben Linneweber and contributors\n * SPDX-License-Identifier: MIT\n */\n\nnamespace Jitter2.Collision.Shapes;\n\n/// <summary>\n/// Defines a method to create a new instance of a shape for use with another rigid body.\n/// </summary>\n/// <typeparam name=\"T\">\n/// The concrete shape type implementing this interface.\n/// </typeparam>\npublic interface ICloneableShape<out T> where T : Shape\n{\n    /// <summary>\n    /// Creates a copy of the current shape instance that shares underlying geometry data.\n    /// </summary>\n    /// <returns>\n    /// A new shape instance of type <typeparamref name=\"T\"/> that shares immutable data\n    /// with the original but has its own instance state.\n    /// </returns>\n    T Clone();\n}"
  },
  {
    "path": "src/Jitter2/Collision/Shapes/PointCloudShape.cs",
    "content": "/*\n * Jitter2 Physics Library\n * (c) Thorben Linneweber and contributors\n * SPDX-License-Identifier: MIT\n */\n\nusing System;\nusing System.Collections.Generic;\nusing Jitter2.DataStructures;\nusing Jitter2.LinearMath;\n\nnamespace Jitter2.Collision.Shapes;\n\n/// <summary>\n/// Represents a convex hull shape defined by a point cloud. Unlike <see cref=\"ConvexHullShape\"/>,\n/// it is not necessary for the points to lie on the convex hull. For performance optimization,\n/// this shape should ideally be used for a small number of points (~300).\n/// </summary>\npublic class PointCloudShape : RigidBodyShape, ICloneableShape<PointCloudShape>\n{\n    private JBoundingBox cachedBoundingBox;\n    private JMatrix cachedInertia;\n    private Real cachedMass;\n    private JVector cachedCenter;\n\n    private VertexSupportMap supportMap;\n    private JVector shifted;\n\n    /// <inheritdoc cref=\"PointCloudShape(ReadOnlySpan{JVector})\"/>\n    public PointCloudShape(IEnumerable<JVector> vertices) :\n        this(SpanHelper.AsReadOnlySpan(vertices, out _))\n    {\n    }\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"PointCloudShape\"/> class.\n    /// </summary>\n    /// <param name=\"vertices\">All vertices that define the convex hull.</param>\n    /// <exception cref=\"ArgumentException\">\n    /// Thrown when <paramref name=\"vertices\"/> is empty.\n    /// </exception>\n    public PointCloudShape(ReadOnlySpan<JVector> vertices)\n    {\n        supportMap = new VertexSupportMap(vertices);\n        UpdateShape();\n    }\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"PointCloudShape\"/> class.\n    /// </summary>\n    public PointCloudShape(VertexSupportMap supportMap)\n    {\n        this.supportMap = supportMap;\n        UpdateShape();\n    }\n\n    private PointCloudShape()\n    {\n    }\n\n    /// <summary>\n    /// Creates a copy of this shape. The underlying data structure is shared\n    /// among the instances.\n    /// </summary>\n    public PointCloudShape Clone()\n    {\n        PointCloudShape result = new()\n        {\n            supportMap = supportMap,\n            cachedBoundingBox = cachedBoundingBox,\n            cachedCenter = cachedCenter,\n            cachedInertia = cachedInertia,\n            cachedMass = cachedMass,\n            shifted = shifted\n        };\n        return result;\n    }\n\n    /// <summary>\n    /// Gets or sets the shift value for the shape. This property can be used when constructing a rigid\n    /// body that contains one or more shapes.\n    /// </summary>\n    public JVector Shift\n    {\n        get => shifted;\n        set\n        {\n            shifted = value;\n            UpdateShape();\n        }\n    }\n\n    /// <summary>\n    /// Updates the shape's cached mass, inertia, and bounding box.\n    /// </summary>\n    public void UpdateShape()\n    {\n        CalculateMassInertia();\n        CalcInitBox();\n    }\n\n    /// <summary>\n    /// Recalculates the mass, center of mass, and inertia tensor.\n    /// </summary>\n    public void CalculateMassInertia()\n    {\n        ShapeHelper.CalculateMassInertia(this, out cachedInertia, out cachedCenter, out cachedMass);\n    }\n\n    /// <inheritdoc/>\n    public override void CalculateMassInertia(out JMatrix inertia, out JVector com, out Real mass)\n    {\n        inertia = cachedInertia;\n        com = cachedCenter;\n        mass = cachedMass;\n    }\n\n    /// <inheritdoc/>\n    public override void CalculateBoundingBox(in JQuaternion orientation, in JVector position, out JBoundingBox box)\n    {\n        JVector halfSize = (Real)0.5 * (cachedBoundingBox.Max - cachedBoundingBox.Min);\n        JVector center = (Real)0.5 * (cachedBoundingBox.Max + cachedBoundingBox.Min);\n\n        JMatrix ori = JMatrix.CreateFromQuaternion(orientation);\n        JMatrix.Absolute(in ori, out JMatrix abs);\n        JVector.Transform(halfSize, abs, out JVector temp);\n        JVector.Transform(center, orientation, out JVector temp2);\n\n        box.Max = temp;\n        JVector.Negate(temp, out box.Min);\n\n        JVector.Add(box.Min, position + temp2, out box.Min);\n        JVector.Add(box.Max, position + temp2, out box.Max);\n    }\n\n    private void CalcInitBox()\n    {\n        JVector vec = JVector.UnitX;\n        SupportMap(vec, out JVector res);\n        cachedBoundingBox.Max.X = res.X;\n\n        vec = JVector.UnitY;\n        SupportMap(vec, out res);\n        cachedBoundingBox.Max.Y = res.Y;\n\n        vec = JVector.UnitZ;\n        SupportMap(vec, out res);\n        cachedBoundingBox.Max.Z = res.Z;\n\n        vec = -JVector.UnitX;\n        SupportMap(vec, out res);\n        cachedBoundingBox.Min.X = res.X;\n\n        vec = -JVector.UnitY;\n        SupportMap(vec, out res);\n        cachedBoundingBox.Min.Y = res.Y;\n\n        vec = -JVector.UnitZ;\n        SupportMap(vec, out res);\n        cachedBoundingBox.Min.Z = res.Z;\n    }\n\n    /// <inheritdoc/>\n    public override void SupportMap(in JVector direction, out JVector result)\n    {\n        supportMap.SupportMap(direction, out result);\n        result += shifted;\n    }\n\n    /// <inheritdoc/>\n    public override void GetCenter(out JVector point)\n    {\n        point = cachedCenter;\n    }\n}"
  },
  {
    "path": "src/Jitter2/Collision/Shapes/RigidBodyShape.cs",
    "content": "/*\n * Jitter2 Physics Library\n * (c) Thorben Linneweber and contributors\n * SPDX-License-Identifier: MIT\n */\n\nusing Jitter2.Dynamics;\nusing Jitter2.LinearMath;\n\nnamespace Jitter2.Collision.Shapes;\n\n/// <summary>\n/// Represents the abstract base class for shapes that can be attached to a rigid body.\n/// </summary>\npublic abstract class RigidBodyShape : Shape\n{\n    /// <summary>\n    /// The instance of <see cref=\"RigidBody\"/> to which this shape is attached.\n    /// </summary>\n    public RigidBody RigidBody { get; internal set; } = null!;\n\n    public sealed override JVector Velocity => RigidBody?.Velocity ?? JVector.Zero;\n\n    public sealed override void UpdateWorldBoundingBox(Real dt = (Real)0.0)\n    {\n        JBoundingBox box;\n\n        if (RigidBody == null)\n        {\n            CalculateBoundingBox(JQuaternion.Identity, JVector.Zero, out box);\n            WorldBoundingBox = box;\n            return;\n        }\n\n        ref var data = ref RigidBody.Data;\n        CalculateBoundingBox(data.Orientation, data.Position, out box);\n        WorldBoundingBox = box;\n        if (RigidBody.EnableSpeculativeContacts) SweptExpandBoundingBox(dt);\n    }\n\n    public virtual void CalculateBoundingBox(in JQuaternion orientation, in JVector position, out JBoundingBox box)\n    {\n        ShapeHelper.CalculateBoundingBox(this, orientation, position, out box);\n    }\n\n    /// <summary>\n    /// Calculates the mass and inertia of the shape. Can be overridden by child classes to improve\n    /// performance or accuracy. The default implementation relies on an approximation of the shape\n    /// constructed using the support map function.\n    /// </summary>\n    /// <remarks>\n    /// The inertia tensor is computed relative to the coordinate system origin (0,0,0),\n    /// not the center of mass.\n    /// </remarks>\n    [ReferenceFrame(ReferenceFrame.Local)]\n    public virtual void CalculateMassInertia(out JMatrix inertia, out JVector com, out Real mass)\n    {\n        ShapeHelper.CalculateMassInertia(this, out inertia, out com, out mass);\n    }\n\n    /// <summary>\n    /// Performs a local ray cast against the shape, checking if a ray originating from a specified point\n    /// and traveling in a specified direction intersects with the object. It does not take into account the\n    /// transformation of the associated rigid body.\n    /// </summary>\n    /// <param name=\"origin\">The starting point of the ray.</param>\n    /// <param name=\"direction\">\n    /// The direction of the ray. This vector does not need to be normalized.\n    /// </param>\n    /// <param name=\"normal\">\n    /// The surface normal at the point of intersection, if an intersection occurs.\n    /// </param>\n    /// <param name=\"lambda\">\n    /// The scalar value representing the distance along the ray's direction vector\n    /// from the <paramref name=\"origin\"/> to the intersection point. The hit point can be calculated as:\n    /// <c>origin + lambda * direction</c>.\n    /// </param>\n    /// <returns>\n    /// <c>true</c> if the ray intersects with the object; otherwise, <c>false</c>.\n    /// </returns>\n    [ReferenceFrame(ReferenceFrame.Local)]\n    public virtual bool LocalRayCast(in JVector origin, in JVector direction, out JVector normal, out Real lambda)\n    {\n        return NarrowPhase.RayCast(this, origin, direction, out lambda, out normal);\n    }\n\n    [ReferenceFrame(ReferenceFrame.World)]\n    public sealed override bool RayCast(in JVector origin, in JVector direction, out JVector normal, out Real lambda)\n    {\n        if (RigidBody == null)\n        {\n            return LocalRayCast(origin, direction, out normal, out lambda);\n        }\n\n        ref var data = ref RigidBody.Data;\n\n        // rotate the ray into the reference frame of the body...\n        JVector transformedDir = JVector.ConjugatedTransform(direction, data.Orientation);\n        JVector transformedOrigin = JVector.ConjugatedTransform(origin - data.Position, data.Orientation);\n\n        bool result = LocalRayCast(transformedOrigin, transformedDir, out normal, out lambda);\n\n        // ...rotate back.\n        JVector.Transform(normal, data.Orientation, out normal);\n\n        return result;\n    }\n\n    [ReferenceFrame(ReferenceFrame.World)]\n    public sealed override bool Sweep<T>(in T support, in JQuaternion orientation, in JVector position, in JVector sweep,\n        out JVector pointA, out JVector pointB, out JVector normal, out Real lambda)\n    {\n        if (RigidBody == null)\n        {\n            bool hit = NarrowPhase.Sweep(this, support,\n                orientation, position, sweep,\n                out pointB, out pointA, out normal, out lambda);\n\n            JVector.NegateInPlace(ref normal);\n            return hit;\n        }\n\n        ref var data = ref RigidBody.Data;\n\n        return NarrowPhase.Sweep(support, this,\n            orientation, data.Orientation,\n            position, data.Position,\n            sweep, JVector.Zero,\n            out pointA, out pointB, out normal, out lambda);\n    }\n\n    [ReferenceFrame(ReferenceFrame.World)]\n    public sealed override bool Distance<T>(in T support, in JQuaternion orientation, in JVector position,\n        out JVector pointA, out JVector pointB, out JVector normal, out Real distance)\n    {\n        if (RigidBody == null)\n        {\n            return NarrowPhase.Distance(support, this,\n                orientation, JQuaternion.Identity,\n                position, JVector.Zero,\n                out pointA, out pointB, out normal, out distance);\n        }\n\n        ref var data = ref RigidBody.Data;\n\n        return NarrowPhase.Distance(support, this,\n            orientation, data.Orientation,\n            position, data.Position,\n            out pointA, out pointB, out normal, out distance);\n    }\n}\n"
  },
  {
    "path": "src/Jitter2/Collision/Shapes/Shape.cs",
    "content": "﻿/*\n * Jitter2 Physics Library\n * (c) Thorben Linneweber and contributors\n * SPDX-License-Identifier: MIT\n */\n\nusing Jitter2.DataStructures;\nusing Jitter2.Dynamics;\nusing Jitter2.LinearMath;\n\nnamespace Jitter2.Collision.Shapes;\n\n/// <summary>\n/// The main entity of the collision system. Implements <see cref=\"ISupportMappable\"/> for\n/// narrow-phase and <see cref=\"IDynamicTreeProxy\"/> for broad-phase collision detection.\n/// The shape itself does not have a position or orientation. Shapes can be associated with\n/// instances of <see cref=\"RigidBody\"/>.\n/// </summary>\npublic abstract class Shape : IDynamicTreeProxy, IUpdatableBoundingBox, ISupportMappable, IRayCastable, ISweepTestable, IDistanceTestable\n{\n    int IPartitionedSetIndex.SetIndex { get; set; } = -1;\n\n    /// <summary>\n    /// A 64-bit integer representing the shape ID. This is used by algorithms that require\n    /// arranging shapes in a well-defined order.\n    /// </summary>\n    public readonly ulong ShapeId = World.RequestId();\n\n    /// <summary>\n    /// The bounding box of the shape in world space. It is automatically updated when the position or\n    /// orientation of the corresponding instance of <see cref=\"RigidBody\"/> changes.\n    /// </summary>\n    public JBoundingBox WorldBoundingBox { get; protected set; }\n\n    int IDynamicTreeProxy.NodePtr { get; set; }\n\n    protected void SweptExpandBoundingBox(Real dt)\n    {\n        Real swept = dt * Velocity.Length();\n        JBoundingBox box = WorldBoundingBox;\n        box.Min -= new JVector(swept);\n        box.Max += new JVector(swept);\n        WorldBoundingBox = box;\n    }\n\n    internal bool IsRegistered => (this as IPartitionedSetIndex).SetIndex != -1;\n\n    [ReferenceFrame(ReferenceFrame.World)]\n    public abstract JVector Velocity { get; }\n\n    [ReferenceFrame(ReferenceFrame.World)]\n    public abstract void UpdateWorldBoundingBox(Real dt = (Real)0.0);\n\n    [ReferenceFrame(ReferenceFrame.World)]\n    public abstract bool RayCast(in JVector origin, in JVector direction, out JVector normal, out Real lambda);\n\n    [ReferenceFrame(ReferenceFrame.World)]\n    public abstract bool Sweep<T>(in T support, in JQuaternion orientation, in JVector position, in JVector sweep,\n        out JVector pointA, out JVector pointB, out JVector normal, out Real lambda)\n        where T : ISupportMappable;\n\n    [ReferenceFrame(ReferenceFrame.World)]\n    public abstract bool Distance<T>(in T support, in JQuaternion orientation, in JVector position,\n        out JVector pointA, out JVector pointB, out JVector normal, out Real distance)\n        where T : ISupportMappable;\n\n    /// <inheritdoc/>\n    [ReferenceFrame(ReferenceFrame.Local)]\n    public abstract void SupportMap(in JVector direction, out JVector result);\n\n    /// <inheritdoc/>\n    [ReferenceFrame(ReferenceFrame.Local)]\n    public abstract void GetCenter(out JVector point);\n}"
  },
  {
    "path": "src/Jitter2/Collision/Shapes/ShapeHelper.cs",
    "content": "/*\n * Jitter2 Physics Library\n * (c) Thorben Linneweber and contributors\n * SPDX-License-Identifier: MIT\n */\n\nusing System;\nusing System.Collections.Generic;\nusing Jitter2.DataStructures;\nusing Jitter2.LinearMath;\n\nnamespace Jitter2.Collision.Shapes;\n\n/// <summary>\n/// Provides helper methods for calculating the properties of implicitly defined shapes.\n/// </summary>\npublic static class ShapeHelper\n{\n    private const Real GoldenRatio = (Real)1.6180339887498948482045;\n    private static readonly JVector[] icosahedronVertices =\n    [\n        new(0, +1, +GoldenRatio), new(0, -1, +GoldenRatio), new(0, +1, -GoldenRatio), new(0, -1, -GoldenRatio),\n        new(+1, +GoldenRatio, 0), new(+1, -GoldenRatio, 0), new(-1, +GoldenRatio, 0), new(-1, -GoldenRatio, 0),\n        new(+GoldenRatio, 0, +1), new(+GoldenRatio, 0, -1), new(-GoldenRatio, 0, +1), new(-GoldenRatio, 0, -1)\n    ];\n\n    private static readonly int[,] icosahedronIndices = new int[20, 3]\n    {\n        { 1, 0, 10 }, { 0, 1, 8 }, { 0, 4, 6 }, { 4, 0, 8 }, { 0, 6, 10 }, { 5, 1, 7 }, { 1, 5, 8 }, { 7, 1, 10 },\n        { 2, 3, 11 }, { 3, 2, 9 }, { 4, 2, 6 }, { 2, 4, 9 }, { 6, 2, 11 }, { 3, 5, 7 }, { 5, 3, 9 }, { 3, 7, 11 },\n        { 4, 8, 9 }, { 8, 5, 9 }, { 10, 6, 11 }, { 7, 10, 11 }\n    };\n\n    /// <inheritdoc cref=\"Tessellate{TSupport}(in TSupport, int)\"/>\n    /// <param name=\"hullCollection\">A collection to which the triangles are added.</param>\n    public static void Tessellate<TSupport, TCollection>(in TSupport support, TCollection hullCollection, int subdivisions = 3)\n        where TSupport : ISupportMappable\n        where TCollection : class, ICollection<JTriangle>\n    {\n        var sink = new CollectionSink<JTriangle>(hullCollection);\n        Tessellate(in support, ref sink, subdivisions);\n    }\n\n    /// <summary>\n    /// Creates a tessellation of a shape defined by its support map and appends all generated triangles to the specified sink.\n    /// </summary>\n    /// <typeparam name=\"TSupport\">The support shape type.</typeparam>\n    /// <typeparam name=\"TSink\">The sink type receiving the generated triangles.</typeparam>\n    /// <param name=\"support\">The support map interface implemented by the shape.</param>\n    /// <param name=\"hullSink\">The sink receiving the generated triangles.</param>\n    /// <param name=\"subdivisions\">The number of subdivisions used for hull generation.</param>\n    /// <remarks>\n    /// The tessellated hull may not be perfectly convex. It is therefore not suited to be used with\n    /// <see cref=\"ConvexHullShape\"/>. The time complexity is O(4^n), where n is the number of subdivisions.\n    /// </remarks>\n    public static void Tessellate<TSupport, TSink>(in TSupport support, ref TSink hullSink, int subdivisions = 3)\n        where TSupport : ISupportMappable\n        where TSink : ISink<JTriangle>\n    {\n        for (int i = 0; i < 20; i++)\n        {\n            JVector v1 = icosahedronVertices[icosahedronIndices[i, 0]];\n            JVector v2 = icosahedronVertices[icosahedronIndices[i, 1]];\n            JVector v3 = icosahedronVertices[icosahedronIndices[i, 2]];\n\n            support.SupportMap(v1, out JVector sv1);\n            support.SupportMap(v2, out JVector sv2);\n            support.SupportMap(v3, out JVector sv3);\n\n            Subdivide(in support, ref hullSink, v1, v2, v3, sv1, sv2, sv3, subdivisions);\n        }\n    }\n\n    private static void Subdivide<TSupport, TSink>(in TSupport support, ref TSink hullSink,\n        JVector v1, JVector v2, JVector v3, JVector p1, JVector p2, JVector p3,\n        int subdivisions) where TSupport : ISupportMappable where TSink : ISink<JTriangle>\n    {\n        if (subdivisions <= 1)\n        {\n            JVector n = (p3 - p1) % (p2 - p1);\n\n            if (n.LengthSquared() > (Real)1e-16)\n            {\n                hullSink.Add(new JTriangle(p1, p2, p3));\n            }\n\n            return;\n        }\n\n        // There is a re-project onto the sphere missing here and here.\n        // The quality of the points does not suffer that badly from it, and\n        // we get rid of many, many normalize-calls. So we keep it like this.\n        JVector h1 = (v1 + v2) * (Real)0.5;\n        JVector h2 = (v2 + v3) * (Real)0.5;\n        JVector h3 = (v3 + v1) * (Real)0.5;\n\n        support.SupportMap(h1, out JVector sp1);\n        support.SupportMap(h2, out JVector sp2);\n        support.SupportMap(h3, out JVector sp3);\n\n        subdivisions -= 1;\n\n        Subdivide(in support, ref hullSink, v1, h1, h3, p1, sp1, sp3, subdivisions);\n        Subdivide(in support, ref hullSink, h1, v2, h2, sp1, p2, sp2, subdivisions);\n        Subdivide(in support, ref hullSink, h3, h2, v3, sp3, sp2, p3, subdivisions);\n        Subdivide(in support, ref hullSink, h2, h3, h1, sp2, sp3, sp1, subdivisions);\n    }\n\n    /// <summary>\n    /// Creates a tessellation of a shape defined by its support map.\n    /// </summary>\n    /// <param name=\"support\">The support map interface implemented by the shape.</param>\n    /// <param name=\"subdivisions\">The number of subdivisions used for hull generation.</param>\n    /// <remarks>\n    /// The tessellated hull may not be perfectly convex. It is therefore not suited to be used with\n    /// <see cref=\"ConvexHullShape\"/>. The time complexity is O(4^n), where n is the number of subdivisions.\n    /// </remarks>\n    public static List<JTriangle> Tessellate<TSupport>(in TSupport support, int subdivisions = 3)\n        where TSupport : ISupportMappable\n    {\n        List<JTriangle> triangles = new();\n        Tessellate(in support, triangles, subdivisions);\n        return triangles;\n    }\n\n    /// <summary>\n    /// Creates a tessellation of the convex hull of a given set of 3D vertices.\n    /// </summary>\n    /// <param name=\"vertices\">The vertices used to approximate the hull.</param>\n    /// <param name=\"subdivisions\">The number of subdivisions used for hull generation.</param>\n    /// <returns>A list of triangles representing the convex hull.</returns>\n    /// <remarks>\n    /// The tessellated hull may not be perfectly convex. It is therefore not suited to be used with\n    /// <see cref=\"ConvexHullShape\"/>. The time complexity is O(4^n), where n is the number of subdivisions.\n    /// </remarks>\n    public static List<JTriangle> Tessellate(ReadOnlySpan<JVector> vertices, int subdivisions = 3)\n    {\n        return Tessellate(new VertexSupportMap(vertices), subdivisions);\n    }\n\n    /// <inheritdoc cref=\"Tessellate(System.ReadOnlySpan{Jitter2.LinearMath.JVector}, int)\"/>\n    public static List<JTriangle> Tessellate(IEnumerable<JVector> vertices, int subdivisions = 3)\n    {\n        return Tessellate(new VertexSupportMap(SpanHelper.AsReadOnlySpan(vertices, out _)), subdivisions);\n    }\n\n    #region Obsolete MakeHull - Use Tessellate instead\n\n    [Obsolete(\"Use Tessellate instead.\")]\n    public static List<JTriangle> MakeHull(IEnumerable<JVector> vertices, int subdivisions = 3) =>\n        Tessellate(vertices, subdivisions);\n\n    [Obsolete(\"Use Tessellate instead.\")]\n    public static List<JTriangle> MakeHull(ReadOnlySpan<JVector> vertices, int subdivisions = 3) =>\n        Tessellate(vertices, subdivisions);\n\n    [Obsolete(\"Use Tessellate instead.\")]\n    public static List<JTriangle> MakeHull<TSupport>(in TSupport support, int subdivisions = 3)\n        where TSupport : ISupportMappable =>\n        Tessellate(in support, subdivisions);\n\n    [Obsolete(\"Use Tessellate instead.\")]\n    public static void MakeHull<TSupport, TCollection>(in TSupport support, TCollection hullCollection, int subdivisions = 3)\n        where TSupport : ISupportMappable\n        where TCollection : class, ICollection<JTriangle> =>\n        Tessellate(in support, hullCollection, subdivisions);\n\n    #endregion\n\n    /// <summary>\n    /// Calculates the axis-aligned bounding box of a shape given its orientation and position.\n    /// </summary>\n    /// <param name=\"support\">The support map interface implemented by the shape.</param>\n    /// <param name=\"orientation\">The orientation of the shape.</param>\n    /// <param name=\"position\">The position of the shape.</param>\n    /// <param name=\"box\">The resulting bounding box.</param>\n    public static void CalculateBoundingBox<TSupport>(in TSupport support,\n        in JQuaternion orientation, in JVector position, out JBoundingBox box)\n        where TSupport : ISupportMappable\n    {\n        JMatrix oriT = JMatrix.Transpose(JMatrix.CreateFromQuaternion(orientation));\n\n        support.SupportMap(oriT.GetColumn(0), out JVector res);\n        box.Max.X = JVector.Dot(oriT.GetColumn(0), res);\n\n        support.SupportMap(oriT.GetColumn(1), out res);\n        box.Max.Y = JVector.Dot(oriT.GetColumn(1), res);\n\n        support.SupportMap(oriT.GetColumn(2), out res);\n        box.Max.Z = JVector.Dot(oriT.GetColumn(2), res);\n\n        support.SupportMap(-oriT.GetColumn(0), out res);\n        box.Min.X = JVector.Dot(oriT.GetColumn(0), res);\n\n        support.SupportMap(-oriT.GetColumn(1), out res);\n        box.Min.Y = JVector.Dot(oriT.GetColumn(1), res);\n\n        support.SupportMap(-oriT.GetColumn(2), out res);\n        box.Min.Z = JVector.Dot(oriT.GetColumn(2), res);\n\n        JVector.Add(box.Min, position, out box.Min);\n        JVector.Add(box.Max, position, out box.Max);\n    }\n\n    /// <summary>\n    /// Approximates the convex hull of a given set of 3D vertices by sampling support points\n    /// generated through recursive subdivision of an icosahedron.\n    /// </summary>\n    /// <param name=\"vertices\">The vertices used to approximate the hull.</param>\n    /// <param name=\"subdivisions\">\n    /// The number of recursive subdivisions applied to each icosahedron triangle.\n    /// Higher values produce more sampling directions and better coverage,\n    /// but increase computation. Default is 3.\n    /// </param>\n    /// <returns>\n    /// A list of <see cref=\"JVector\"/> points on the convex hull, sampled using directional support mapping from a\n    /// refined spherical distribution.\n    /// </returns>\n    /// <remarks>\n    /// This method begins with a regular icosahedron and recursively subdivides each triangular face into smaller\n    /// triangles, projecting new vertices onto the unit sphere. Each final vertex direction is passed to the support\n    /// mapper to generate a hull point. The time complexity is O(4^n), where n is the number of subdivisions.\n    /// </remarks>\n    public static List<JVector> SampleHull(ReadOnlySpan<JVector> vertices, int subdivisions = 3)\n    {\n        return SampleHull(new VertexSupportMap(vertices), subdivisions);\n    }\n\n    /// <inheritdoc cref=\"SampleHull(ReadOnlySpan{JVector}, int)\"/>\n    public static List<JVector> SampleHull(IEnumerable<JVector> vertices, int subdivisions = 3)\n    {\n        return SampleHull(new VertexSupportMap(vertices), subdivisions);\n    }\n\n    /// <summary>\n    /// Samples a convex shape's hull by evaluating support directions generated through recursive subdivision of\n    /// an icosahedron.\n    /// </summary>\n    /// <param name=\"support\">\n    /// An object implementing <see cref=\"ISupportMappable\"/>, representing a convex shape that can be queried\n    /// with directional support mapping.\n    /// </param>\n    /// <param name=\"subdivisions\">\n    /// The number of recursive subdivisions applied to each icosahedron triangle. Higher values produce more sampling\n    /// directions and better coverage, but increase computation. Default is 3.\n    /// </param>\n    /// <returns>\n    /// A list of <see cref=\"JVector\"/> points on the convex hull, sampled using directional support mapping from a\n    /// refined spherical distribution.\n    /// </returns>\n    /// <remarks>\n    /// This method begins with a regular icosahedron and recursively subdivides each triangular face into smaller\n    /// triangles, projecting new vertices onto the unit sphere. Each final vertex direction is passed to the support\n    /// mapper to generate a hull point. The time complexity is O(4^n), where n is the number of subdivisions.\n    /// </remarks>\n    public static List<JVector> SampleHull<TSupport>(in TSupport support, int subdivisions = 3)\n        where TSupport : ISupportMappable\n    {\n        Stack<(JTriangle triangle, int depth)> stack = new();\n\n        for (int i = 0; i < 20; i++)\n        {\n            JVector v1 = icosahedronVertices[icosahedronIndices[i, 0]];\n            JVector v2 = icosahedronVertices[icosahedronIndices[i, 1]];\n            JVector v3 = icosahedronVertices[icosahedronIndices[i, 2]];\n            stack.Push((new JTriangle(v1, v2, v3), subdivisions));\n        }\n\n        HashSet<JVector> hull = new();\n\n        while (stack.Count > 0)\n        {\n            var (tri, depth) = stack.Pop();\n\n            if (depth <= 1)\n            {\n                support.SupportMap(tri.V0, out JVector sv0);\n                support.SupportMap(tri.V1, out JVector sv1);\n                support.SupportMap(tri.V2, out JVector sv2);\n                hull.Add(sv0); hull.Add(sv1); hull.Add(sv2);\n                continue;\n            }\n\n            JVector ab = JVector.Normalize((tri.V0 + tri.V1) * (Real)0.5);\n            JVector bc = JVector.Normalize((tri.V1 + tri.V2) * (Real)0.5);\n            JVector ca = JVector.Normalize((tri.V2 + tri.V0) * (Real)0.5);\n\n            stack.Push((new JTriangle(tri.V0, ab, ca), depth - 1));\n            stack.Push((new JTriangle(ab, tri.V1, bc), depth - 1));\n            stack.Push((new JTriangle(ca, bc, tri.V2), depth - 1));\n            stack.Push((new JTriangle(ab, bc, ca), depth - 1));\n        }\n\n        return new List<JVector>(hull);\n    }\n\n    /// <summary>\n    /// Calculates the mass properties of an implicitly defined shape, assuming unit mass density.\n    /// </summary>\n    /// <remarks>\n    /// <para>\n    /// The shape is approximated via surface tessellation using the specified number of <paramref name=\"subdivisions\"/>.\n    /// </para>\n    /// <para>\n    /// <b>Note on Reference Frame:</b>\n    /// The calculated <paramref name=\"inertia\"/> tensor is expressed relative to the <b>coordinate system origin (0,0,0)</b>,\n    /// <em>not</em> the calculated <paramref name=\"centerOfMass\"/>.\n    /// </para>\n    /// </remarks>\n    /// <param name=\"support\">The support map interface implemented by the shape.</param>\n    /// <param name=\"inertia\">\n    /// Output parameter for the inertia tensor calculated relative to the <b>Origin (0,0,0)</b>.\n    /// </param>\n    /// <param name=\"centerOfMass\">Output parameter for the calculated center of mass vector (relative to the Origin).</param>\n    /// <param name=\"mass\">Output parameter for the calculated mass (Volume * density 1.0).</param>\n    /// <param name=\"subdivisions\">The recursion depth for the surface tessellation (default 4).</param>\n    public static void CalculateMassInertia<TSupport>(in TSupport support, out JMatrix inertia, out JVector centerOfMass,\n        out Real mass, int subdivisions = 4)\n        where TSupport : ISupportMappable\n    {\n        centerOfMass = JVector.Zero;\n        inertia = JMatrix.Zero;\n        mass = 0;\n\n        const Real a = (Real)(1.0 / 60.0), b = (Real)(1.0 / 120.0);\n        JMatrix canonicalInertia = new(a, b, b, b, a, b, b, b, a);\n\n        foreach (JTriangle triangle in Tessellate(in support, subdivisions))\n        {\n            JMatrix transformation = JMatrix.FromColumns(triangle.V0, triangle.V1, triangle.V2);\n            Real detA = transformation.Determinant();\n\n            // now transform this canonical tetrahedron to the target tetrahedron\n            // inertia by a linear transformation A\n            JMatrix tetrahedronInertia = JMatrix.Multiply(transformation * canonicalInertia * JMatrix.Transpose(transformation), detA);\n\n            JVector tetrahedronCom = (Real)(1.0 / 4.0) * (triangle.V0 + triangle.V1 + triangle.V2);\n            Real tetrahedronMass = (Real)(1.0 / 6.0) * detA;\n\n            inertia += tetrahedronInertia;\n            centerOfMass += tetrahedronMass * tetrahedronCom;\n            mass += tetrahedronMass;\n        }\n\n        inertia = JMatrix.Multiply(JMatrix.Identity, inertia.Trace()) - inertia;\n        centerOfMass *= (Real)1.0 / mass;\n    }\n}"
  },
  {
    "path": "src/Jitter2/Collision/Shapes/SphereShape.cs",
    "content": "/*\n * Jitter2 Physics Library\n * (c) Thorben Linneweber and contributors\n * SPDX-License-Identifier: MIT\n */\n\nusing System;\nusing Jitter2.LinearMath;\n\nnamespace Jitter2.Collision.Shapes;\n\n/// <summary>\n/// Represents a sphere.\n/// </summary>\npublic class SphereShape : RigidBodyShape\n{\n    private Real radius;\n\n    /// <summary>\n    /// Gets or sets the radius of the sphere.\n    /// </summary>\n    /// <exception cref=\"ArgumentOutOfRangeException\">\n    /// Thrown when <paramref name=\"value\"/> is less than or equal to zero.\n    /// </exception>\n    public Real Radius\n    {\n        get => radius;\n        set\n        {\n            ArgumentOutOfRangeException.ThrowIfNegativeOrZero(value, nameof(Radius));\n            radius = value;\n            UpdateWorldBoundingBox();\n        }\n    }\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"SphereShape\"/> class.\n    /// </summary>\n    /// <param name=\"radius\">The radius of the sphere. Defaults to 1.0.</param>\n    /// <exception cref=\"ArgumentOutOfRangeException\">\n    /// Thrown when <paramref name=\"radius\"/> is less than or equal to zero.\n    /// </exception>\n    public SphereShape(Real radius = (Real)1.0)\n    {\n        ArgumentOutOfRangeException.ThrowIfNegativeOrZero(radius);\n\n        this.radius = radius;\n        UpdateWorldBoundingBox();\n    }\n\n    public override void SupportMap(in JVector direction, out JVector result)\n    {\n        result = JVector.Normalize(direction);\n        JVector.Multiply(result, radius, out result);\n    }\n\n    public override void GetCenter(out JVector point)\n    {\n        point = JVector.Zero;\n    }\n\n    public override void CalculateBoundingBox(in JQuaternion orientation, in JVector position, out JBoundingBox box)\n    {\n        box.Min = new JVector(-radius);\n        box.Max = new JVector(+radius);\n\n        JVector.Add(box.Min, position, out box.Min);\n        JVector.Add(box.Max, position, out box.Max);\n    }\n\n    public override bool LocalRayCast(in JVector origin, in JVector direction, out JVector normal, out Real lambda)\n    {\n        normal = JVector.Zero;\n        lambda = (Real)0.0;\n\n        Real disq = (Real)1.0 / direction.LengthSquared();\n        Real p = JVector.Dot(direction, origin) * disq;\n        Real d = p * p - (origin.LengthSquared() - radius * radius) * disq;\n\n        if (d < (Real)0.0) return false;\n\n        Real sqrtd = MathR.Sqrt(d);\n\n        Real t0 = -p - sqrtd;\n        Real t1 = -p + sqrtd;\n\n        if (t0 >= (Real)0.0)\n        {\n            lambda = t0;\n            JVector.Normalize(origin + t0 * direction, out normal);\n            return true;\n        }\n\n        return t1 > (Real)0.0;\n    }\n\n    public override void CalculateMassInertia(out JMatrix inertia, out JVector com, out Real mass)\n    {\n        mass = (Real)(4.0 / 3.0) * MathR.PI * radius * radius * radius;\n\n        // (0,0,0) is the center of mass\n        inertia = JMatrix.Identity;\n        inertia.M11 = (Real)(2.0 / 5.0) * mass * radius * radius;\n        inertia.M22 = (Real)(2.0 / 5.0) * mass * radius * radius;\n        inertia.M33 = (Real)(2.0 / 5.0) * mass * radius * radius;\n\n        com = JVector.Zero;\n    }\n}"
  },
  {
    "path": "src/Jitter2/Collision/Shapes/TransformedShape.cs",
    "content": "/*\n * Jitter2 Physics Library\n * (c) Thorben Linneweber and contributors\n * SPDX-License-Identifier: MIT\n */\n\nusing Jitter2.LinearMath;\n\nnamespace Jitter2.Collision.Shapes;\n\n/// <summary>\n/// Represents a shape wrapper defined by an original shape and an affine transformation (translation and linear map).\n/// </summary>\npublic class TransformedShape : RigidBodyShape\n{\n    private enum TransformationType\n    {\n        Identity,\n        Rotation,\n        General\n    }\n\n    private JVector translation;\n    private JMatrix transformation;\n    private TransformationType type;\n\n    /// <summary>\n    /// Constructs a transformed shape through an affine transformation defined by\n    /// a linear map and a translation.\n    /// </summary>\n    public TransformedShape(RigidBodyShape shape, in JVector translation, in JMatrix transform)\n    {\n        OriginalShape = shape;\n        this.translation = translation;\n        this.transformation = transform;\n\n        AnalyzeTransformation();\n        UpdateWorldBoundingBox();\n    }\n\n    /// <summary>\n    /// Constructs a transformed shape with a translation (offset), assuming identity rotation/scale.\n    /// </summary>\n    public TransformedShape(RigidBodyShape shape, JVector translation) :\n        this(shape, translation, JMatrix.Identity)\n    {\n    }\n\n    /// <summary>\n    /// Constructs a transformed shape with a linear transformation (rotation, scale, or shear),\n    /// assuming zero translation.\n    /// </summary>\n    public TransformedShape(RigidBodyShape shape, JMatrix transform) :\n        this(shape, JVector.Zero, transform)\n    {\n    }\n\n    /// <summary>\n    /// Gets the original shape that is being transformed.\n    /// </summary>\n    public RigidBodyShape OriginalShape { get; }\n\n    /// <summary>\n    /// Gets or sets the translation applied to the shape.\n    /// </summary>\n    public JVector Translation\n    {\n        get => translation;\n        set\n        {\n            translation = value;\n            UpdateWorldBoundingBox();\n        }\n    }\n\n    private void AnalyzeTransformation()\n    {\n        if (MathHelper.IsRotationMatrix(transformation))\n        {\n            JMatrix delta = transformation - JMatrix.Identity;\n            type = MathHelper.UnsafeIsZero(ref delta) ? TransformationType.Identity : TransformationType.Rotation;\n        }\n        else\n        {\n            type = TransformationType.General;\n        }\n    }\n\n    /// <summary>\n    /// Gets or sets the linear transformation (rotation, scale, or shear) applied to the shape.\n    /// </summary>\n    public JMatrix Transformation\n    {\n        get => transformation;\n        set\n        {\n            transformation = value;\n            AnalyzeTransformation();\n            UpdateWorldBoundingBox();\n        }\n    }\n\n    /// <inheritdoc/>\n    public override void SupportMap(in JVector direction, out JVector result)\n    {\n        if (type == TransformationType.Identity)\n        {\n            OriginalShape.SupportMap(direction, out result);\n            result += translation;\n        }\n        else\n        {\n            JVector.TransposedTransform(direction, transformation, out JVector dir);\n            OriginalShape.SupportMap(dir, out JVector sm);\n            JVector.Transform(sm, transformation, out result);\n            result += translation;\n        }\n    }\n\n    /// <inheritdoc/>\n    public override void CalculateBoundingBox(in JQuaternion orientation, in JVector position, out JBoundingBox box)\n    {\n        if (type == TransformationType.General)\n        {\n            // just get the bounding box from the support map\n            base.CalculateBoundingBox(orientation, position, out box);\n        }\n        else\n        {\n            JQuaternion quat = JQuaternion.CreateFromMatrix(transformation);\n            OriginalShape.CalculateBoundingBox(orientation * quat,\n                JVector.Transform(translation, orientation) + position, out box);\n        }\n    }\n\n    /// <inheritdoc/>\n    public override void GetCenter(out JVector point)\n    {\n        OriginalShape.GetCenter(out point);\n        point = JVector.Transform(point, transformation) + translation;\n    }\n\n    /// <inheritdoc/>\n    public override void CalculateMassInertia(out JMatrix inertia, out JVector com, out Real mass)\n    {\n        OriginalShape.CalculateMassInertia(out JMatrix originalInertia, out JVector originalCom, out mass);\n\n        com = JVector.Transform(originalCom, transformation) + translation;\n\n        Real det = MathR.Abs(transformation.Determinant());\n        mass *= det;\n\n        // The inertia tensor I is related to the second moment matrix C by: I = trace(C)·E - C\n        // Under transformation T, the second moment transforms as: C' = |det(T)| · T · C · Tᵀ\n        // We recover C from I: C = (trace(I)/2)·E - I\n        Real halfTrace = originalInertia.Trace() * (Real)0.5;\n        JMatrix secondMoment = halfTrace * JMatrix.Identity - originalInertia;\n\n        // Transform second moment matrix\n        JMatrix transformedSecondMoment = det * transformation * secondMoment * JMatrix.Transpose(transformation);\n\n        // Convert back to inertia tensor\n        inertia = transformedSecondMoment.Trace() * JMatrix.Identity - transformedSecondMoment;\n\n        // Apply parallel axis theorem for translation\n        JMatrix pat = mass * (JMatrix.Identity * com.LengthSquared() - JVector.Outer(com, com));\n        inertia += pat;\n    }\n}"
  },
  {
    "path": "src/Jitter2/Collision/Shapes/TriangleMesh.cs",
    "content": "/*\n * Jitter2 Physics Library\n * (c) Thorben Linneweber and contributors\n * SPDX-License-Identifier: MIT\n */\n\nusing System;\nusing System.Collections.Generic;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\nusing Jitter2.DataStructures;\nusing Jitter2.LinearMath;\n\nnamespace Jitter2.Collision.Shapes;\n\n/// <summary>\n/// Represents a triangle mesh defined by a collection of vertices and triangle indices.\n/// </summary>\npublic class TriangleMesh\n{\n    public sealed class DegenerateTriangleException(JTriangle triangle) :\n        Exception($\"Degenerate triangle found: {triangle}.\");\n\n    private readonly struct Edge(int indexA, int indexB) : IEquatable<Edge>\n    {\n        public readonly int IndexA = indexA;\n        public readonly int IndexB = indexB;\n        public bool Equals(Edge other) => IndexA == other.IndexA && IndexB == other.IndexB;\n        public override bool Equals(object? obj) => obj is Edge other && Equals(other);\n        public override int GetHashCode() => HashCode.Combine(IndexA, IndexB);\n    }\n\n    public struct Triangle(int a, int b, int c)\n    {\n        public readonly int IndexA = a, IndexB = b, IndexC = c;\n        public int NeighborA = -1, NeighborB = -1, NeighborC = -1;\n        public JVector Normal = default;\n    }\n\n    private readonly JVector[] vertices = null!;\n    private readonly Triangle[] indices = null!;\n\n    /// <summary>\n    /// Gets the vertices of the mesh.\n    /// </summary>\n    public ReadOnlySpan<JVector> Vertices => vertices;\n\n    /// <summary>\n    /// Gets the triangle indices of the mesh.\n    /// </summary>\n    public ReadOnlySpan<Triangle> Indices => indices;\n\n    /// <summary>\n    /// Creates a mesh from a \"soup\" of triangles. Vertices are automatically identified and deduplicated.\n    /// </summary>\n    public TriangleMesh(ReadOnlySpan<JTriangle> soup, bool ignoreDegenerated = false)\n    {\n        BuildFromSoup(soup, ignoreDegenerated);\n    }\n\n    /// <inheritdoc cref=\"TriangleMesh(ReadOnlySpan{JTriangle}, bool)\"/>\n    public TriangleMesh(IEnumerable<JTriangle> soup, bool ignoreDegenerated = false) :\n        this(SpanHelper.AsReadOnlySpan(soup, out _), ignoreDegenerated)\n    {\n    }\n\n    /// <summary>\n    /// Creates a mesh from existing vertices and indices.\n    /// </summary>\n    /// <param name=\"vertices\">The vertex buffer.</param>\n    /// <param name=\"indices\">The index buffer (must be a multiple of 3).</param>\n    /// <remarks>\n    /// Vertices with exactly identical positions are canonicalized so adjacency detection also works\n    /// across duplicated seam vertices in indexed meshes.\n    /// </remarks>\n    public TriangleMesh(ReadOnlySpan<JVector> vertices, ReadOnlySpan<int> indices, bool ignoreDegenerated = false)\n    {\n        BuildFromIndexed(vertices, indices, ignoreDegenerated);\n    }\n\n    /// <inheritdoc cref=\"TriangleMesh(ReadOnlySpan{JVector}, ReadOnlySpan{int}, bool)\"/>\n    public TriangleMesh(ReadOnlySpan<JVector> vertices, ReadOnlySpan<ushort> indices, bool ignoreDegenerated = false)\n    {\n        // Convert ushort indices to int on the fly\n        int[] intIndices = new int[indices.Length];\n        for (int i = 0; i < indices.Length; i++) intIndices[i] = indices[i];\n\n        BuildFromIndexed(vertices, intIndices, ignoreDegenerated);\n    }\n\n    /// <inheritdoc cref=\"TriangleMesh(ReadOnlySpan{JVector}, ReadOnlySpan{int}, bool)\"/>\n    public TriangleMesh(ReadOnlySpan<JVector> vertices, ReadOnlySpan<uint> indices, bool ignoreDegenerated = false)\n    {\n        int[] intIndices = new int[indices.Length];\n        for (int i = 0; i < indices.Length; i++) intIndices[i] = (int)indices[i];\n\n        BuildFromIndexed(vertices, intIndices, ignoreDegenerated);\n    }\n\n    /// <summary>\n    /// Creates a mesh from custom vertices (e.g. System.Numerics.Vector3) and indices.\n    /// </summary>\n    public static TriangleMesh Create<TVertex>(ReadOnlySpan<TVertex> vertices, ReadOnlySpan<int> indices,\n        bool ignoreDegenerated = false) where TVertex : unmanaged\n    {\n        return new TriangleMesh(CastVertices(vertices), indices, ignoreDegenerated);\n    }\n\n    /// <inheritdoc cref=\"Create{TVertex}(ReadOnlySpan{TVertex}, ReadOnlySpan{int}, bool)\"/>\n    public static TriangleMesh Create<TVertex>(ReadOnlySpan<TVertex> vertices, ReadOnlySpan<uint> indices,\n        bool ignoreDegenerated = false) where TVertex : unmanaged\n    {\n        return new TriangleMesh(CastVertices(vertices), indices, ignoreDegenerated);\n    }\n\n    /// <inheritdoc cref=\"Create{TVertex}(ReadOnlySpan{TVertex}, ReadOnlySpan{int}, bool)\"/>\n    public static TriangleMesh Create<TVertex>(ReadOnlySpan<TVertex> vertices, ReadOnlySpan<ushort> indices,\n        bool ignoreDegenerated = false) where TVertex : unmanaged\n    {\n        return new TriangleMesh(CastVertices(vertices), indices, ignoreDegenerated);\n    }\n\n    // Helper to keep the casting logic in one place\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    private static ReadOnlySpan<JVector> CastVertices<TVertex>(ReadOnlySpan<TVertex> vertices)\n        where TVertex : unmanaged\n    {\n        if (Unsafe.SizeOf<TVertex>() != Unsafe.SizeOf<JVector>())\n        {\n            throw new ArgumentException($\"Size mismatch: {typeof(TVertex).Name} ({Unsafe.SizeOf<TVertex>()} bytes) \" +\n                                        $\"does not match JVector ({Unsafe.SizeOf<JVector>()} bytes).\");\n        }\n\n        return MemoryMarshal.Cast<TVertex, JVector>(vertices);\n    }\n\n    private void BuildFromSoup(ReadOnlySpan<JTriangle> triangles, bool ignoreDegenerated)\n    {\n        var vertexMap = new Dictionary<JVector, int>();\n        var vertexList = new List<JVector>();\n        var triangleList = new List<Triangle>(triangles.Length);\n\n        // Helper to deduplicate vertices\n        int GetOrAddVertex(JVector v)\n        {\n            if (!vertexMap.TryGetValue(v, out int index))\n            {\n                index = vertexList.Count;\n                vertexMap[v] = index;\n                vertexList.Add(v);\n            }\n            return index;\n        }\n\n        foreach (ref readonly var tri in triangles)\n        {\n            JVector normal = (tri.V1 - tri.V0) % (tri.V2 - tri.V0);\n\n            if (MathHelper.CloseToZero(normal, (Real)1e-12))\n            {\n                if (ignoreDegenerated) continue;\n                throw new DegenerateTriangleException(tri);\n            }\n\n            // Deduplicate\n            int a = GetOrAddVertex(tri.V0);\n            int b = GetOrAddVertex(tri.V1);\n            int c = GetOrAddVertex(tri.V2);\n\n            var internalTri = new Triangle(a, b, c);\n            JVector.Normalize(normal, out internalTri.Normal);\n            triangleList.Add(internalTri);\n        }\n\n        Unsafe.AsRef(in vertices) = vertexList.ToArray();\n        Unsafe.AsRef(in indices) = triangleList.ToArray();\n\n        AssignNeighbors();\n    }\n\n    private void BuildFromIndexed(ReadOnlySpan<JVector> vertices, ReadOnlySpan<int> indices, bool ignoreDegenerated)\n    {\n        if (indices.Length % 3 != 0) throw new ArgumentException(\"Indices must be a multiple of 3.\");\n\n        var deduplicatedVertices = new List<JVector>(vertices.Length);\n        var vertexMap = new Dictionary<JVector, int>(vertices.Length);\n        int[] remap = new int[vertices.Length];\n\n        for (int i = 0; i < vertices.Length; i++)\n        {\n            JVector vertex = vertices[i];\n\n            if (!vertexMap.TryGetValue(vertex, out int canonicalIndex))\n            {\n                canonicalIndex = deduplicatedVertices.Count;\n                vertexMap[vertex] = canonicalIndex;\n                deduplicatedVertices.Add(vertex);\n            }\n\n            remap[i] = canonicalIndex;\n        }\n\n        Unsafe.AsRef(in this.vertices) = deduplicatedVertices.ToArray();\n\n        var triangleList = new List<Triangle>(indices.Length / 3);\n\n        for (int i = 0; i < indices.Length; i += 3)\n        {\n            int inputI0 = indices[i];\n            int inputI1 = indices[i + 1];\n            int inputI2 = indices[i + 2];\n\n            // Safety check for bounds\n            if ((uint)inputI0 >= vertices.Length || (uint)inputI1 >= vertices.Length || (uint)inputI2 >= vertices.Length)\n                throw new IndexOutOfRangeException($\"Indices {inputI0},{inputI1},{inputI2} out of bounds.\");\n\n            int i0 = remap[inputI0];\n            int i1 = remap[inputI1];\n            int i2 = remap[inputI2];\n\n            JVector v0 = this.vertices[i0];\n            JVector v1 = this.vertices[i1];\n            JVector v2 = this.vertices[i2];\n\n            JVector normal = (v1 - v0) % (v2 - v0);\n\n            if (MathHelper.CloseToZero(normal, (Real)1e-12))\n            {\n                if (ignoreDegenerated) continue;\n                throw new DegenerateTriangleException(new JTriangle(v0, v1, v2));\n            }\n\n            var tri = new Triangle(i0, i1, i2);\n            JVector.Normalize(normal, out tri.Normal);\n            triangleList.Add(tri);\n        }\n\n        Unsafe.AsRef(in this.indices) = triangleList.ToArray();\n        AssignNeighbors();\n    }\n\n    private void AssignNeighbors()\n    {\n        var edgeToTriangle = new Dictionary<Edge, int>();\n\n        for (int i = 0; i < indices.Length; i++)\n        {\n            var tri = indices[i];\n            edgeToTriangle.TryAdd(new Edge(tri.IndexA, tri.IndexB), i);\n            edgeToTriangle.TryAdd(new Edge(tri.IndexB, tri.IndexC), i);\n            edgeToTriangle.TryAdd(new Edge(tri.IndexC, tri.IndexA), i);\n        }\n\n        for (int i = 0; i < indices.Length; i++)\n        {\n            ref var tri = ref indices[i];\n            tri.NeighborA = edgeToTriangle.GetValueOrDefault(new Edge(tri.IndexC, tri.IndexB), -1);\n            tri.NeighborB = edgeToTriangle.GetValueOrDefault(new Edge(tri.IndexA, tri.IndexC), -1);\n            tri.NeighborC = edgeToTriangle.GetValueOrDefault(new Edge(tri.IndexB, tri.IndexA), -1);\n        }\n    }\n}"
  },
  {
    "path": "src/Jitter2/Collision/Shapes/TriangleShape.cs",
    "content": "/*\n * Jitter2 Physics Library\n * (c) Thorben Linneweber and contributors\n * SPDX-License-Identifier: MIT\n */\n\nusing System;\nusing System.Collections.Generic;\nusing Jitter2.LinearMath;\n\nnamespace Jitter2.Collision.Shapes;\n\n/// <summary>\n/// Represents a triangle shape defined by a reference to a <see cref=\"TriangleMesh\"/> and an index.\n/// </summary>\npublic class TriangleShape : RigidBodyShape\n{\n    /// <summary>\n    /// The triangle mesh to which this triangle belongs.\n    /// </summary>\n    public readonly TriangleMesh Mesh;\n\n    /// <summary>\n    /// The index representing the position of the triangle within the mesh.\n    /// </summary>\n    public readonly int Index;\n\n    /// <summary>\n    /// Initializes a new instance of the TriangleShape class.\n    /// </summary>\n    /// <param name=\"mesh\">The triangle mesh to which this triangle belongs.</param>\n    /// <param name=\"index\">The index representing the position of the triangle within the mesh.</param>\n    /// <exception cref=\"ArgumentNullException\">\n    /// Thrown when <paramref name=\"mesh\"/> is <c>null</c>.\n    /// </exception>\n    /// <exception cref=\"ArgumentOutOfRangeException\">\n    /// Thrown when <paramref name=\"index\"/> is negative or greater than or equal to the number of triangles in the mesh.\n    /// </exception>\n    public TriangleShape(TriangleMesh mesh, int index)\n    {\n        ArgumentNullException.ThrowIfNull(mesh);\n        ArgumentOutOfRangeException.ThrowIfNegative(index);\n        ArgumentOutOfRangeException.ThrowIfGreaterThanOrEqual(index, mesh.Indices.Length);\n\n        Mesh = mesh;\n        Index = index;\n\n        UpdateWorldBoundingBox();\n    }\n\n    /// <summary>\n    /// Creates and returns all instances of type <see cref=\"TriangleShape\"/>\n    /// for as given <see cref=\"TriangleMesh\"/>.\n    /// </summary>\n    public static IEnumerable<TriangleShape> CreateAllShapes(TriangleMesh mesh)\n    {\n        for (int index = 0; index < mesh.Indices.Length; index++)\n        {\n            yield return new TriangleShape(mesh, index);\n        }\n    }\n\n    /// <exception cref=\"NotSupportedException\">\n    /// Always thrown because a triangle has no volume and therefore no mass properties.\n    /// </exception>\n    public override void CalculateMassInertia(out JMatrix inertia, out JVector com, out Real mass)\n    {\n        throw new NotSupportedException($\"{nameof(TriangleShape)} has no mass properties. \" +\n                                        $\"If you encounter this while calling RigidBody.AddShape, \" +\n                                        $\"call AddShape with setMassInertia set to false.\");\n    }\n\n    /// <summary>\n    /// Gets the vertices transformed to world space coordinates, as affected by the rigid body's transformation.\n    /// </summary>\n    /// <param name=\"a\">The transformed coordinate of the first vertex.</param>\n    /// <param name=\"b\">The transformed coordinate of the second vertex.</param>\n    /// <param name=\"c\">The transformed coordinate of the third vertex.</param>\n    public void GetWorldVertices(out JVector a, out JVector b, out JVector c)\n    {\n        ref readonly var triangle = ref Mesh.Indices[Index];\n        a = Mesh.Vertices[triangle.IndexA];\n        b = Mesh.Vertices[triangle.IndexB];\n        c = Mesh.Vertices[triangle.IndexC];\n\n        if (RigidBody == null) return;\n\n        ref JQuaternion orientation = ref RigidBody.Data.Orientation;\n        ref JVector position = ref RigidBody.Data.Position;\n\n        JVector.Transform(a, orientation, out a);\n        JVector.Transform(b, orientation, out b);\n        JVector.Transform(c, orientation, out c);\n\n        a += position;\n        b += position;\n        c += position;\n    }\n\n    /// <inheritdoc/>\n    public override void CalculateBoundingBox(in JQuaternion orientation, in JVector position, out JBoundingBox box)\n    {\n        const Real extraMargin = (Real)0.01;\n\n        ref readonly var triangle = ref Mesh.Indices[Index];\n        var a = Mesh.Vertices[triangle.IndexA];\n        var b = Mesh.Vertices[triangle.IndexB];\n        var c = Mesh.Vertices[triangle.IndexC];\n\n        JVector.Transform(a, orientation, out a);\n        JVector.Transform(b, orientation, out b);\n        JVector.Transform(c, orientation, out c);\n\n        box = JBoundingBox.SmallBox;\n\n        JBoundingBox.AddPointInPlace(ref box, a);\n        JBoundingBox.AddPointInPlace(ref box, b);\n        JBoundingBox.AddPointInPlace(ref box, c);\n\n        // prevent a degenerate bounding box\n        JVector extra = new JVector(extraMargin);\n        box.Min += position - extra;\n        box.Max += position + extra;\n    }\n\n    /// <inheritdoc/>\n    public override bool LocalRayCast(in JVector origin, in JVector direction, out JVector normal, out Real lambda)\n    {\n        ref readonly var meshTriangle = ref Mesh.Indices[Index];\n\n        var triangle = new JTriangle(Mesh.Vertices[meshTriangle.IndexA],\n            Mesh.Vertices[meshTriangle.IndexB], Mesh.Vertices[meshTriangle.IndexC]);\n\n        return triangle.RayIntersect(origin, direction, JTriangle.CullMode.BackFacing, out normal, out lambda);\n    }\n\n    /// <inheritdoc/>\n    public override void GetCenter(out JVector point)\n    {\n        ref readonly var triangle = ref Mesh.Indices[Index];\n\n        JVector a = Mesh.Vertices[triangle.IndexA];\n        JVector b = Mesh.Vertices[triangle.IndexB];\n        JVector c = Mesh.Vertices[triangle.IndexC];\n\n        point = (Real)(1.0 / 3.0) * (a + b + c);\n    }\n\n    /// <inheritdoc/>\n    public override void SupportMap(in JVector direction, out JVector result)\n    {\n        ref readonly var triangle = ref Mesh.Indices[Index];\n\n        JVector a = Mesh.Vertices[triangle.IndexA];\n        JVector b = Mesh.Vertices[triangle.IndexB];\n        JVector c = Mesh.Vertices[triangle.IndexC];\n\n        Real min = JVector.Dot(a, direction);\n        Real dot = JVector.Dot(b, direction);\n\n        result = a;\n\n        if (dot > min)\n        {\n            min = dot;\n            result = b;\n        }\n\n        dot = JVector.Dot(c, direction);\n\n        if (dot > min)\n        {\n            result = c;\n        }\n    }\n}"
  },
  {
    "path": "src/Jitter2/Collision/Shapes/VertexSupportMap.cs",
    "content": "/*\n * Jitter2 Physics Library\n * (c) Thorben Linneweber and contributors\n * SPDX-License-Identifier: MIT\n */\n\nusing System;\nusing System.Collections.Generic;\nusing System.Runtime.Intrinsics;\nusing Jitter2.DataStructures;\nusing Jitter2.LinearMath;\n\nnamespace Jitter2.Collision.Shapes;\n\n/// <summary>\n/// Implements a SIMD accelerated support map for a set of vertices.\n/// </summary>\npublic struct VertexSupportMap : ISupportMappable, IEquatable<VertexSupportMap>\n{\n    private readonly Real[] xvalues, yvalues, zvalues;\n    private JVector center;\n\n    public VertexSupportMap(ReadOnlySpan<JVector> vertices)\n    {\n        if (vertices.Length == 0)\n        {\n            throw new ArgumentException(\"Vertex set must contain at least one vertex.\", nameof(vertices));\n        }\n\n        int length = vertices.Length;\n\n        xvalues = new Real[length];\n        yvalues = new Real[length];\n        zvalues = new Real[length];\n\n        for (int i = 0; i < length; i++)\n        {\n            xvalues[i] = vertices[i].X;\n            yvalues[i] = vertices[i].Y;\n            zvalues[i] = vertices[i].Z;\n\n            center.X += vertices[i].X;\n            center.Y += vertices[i].Y;\n            center.Z += vertices[i].Z;\n        }\n\n        center *= (Real)1.0 / length;\n    }\n\n    public VertexSupportMap(IEnumerable<JVector> vertices) :\n        this(SpanHelper.AsReadOnlySpan(vertices, out _))\n    {\n\n    }\n\n    public readonly void SupportMap(in JVector direction, out JVector result)\n    {\n        if (Vector.IsHardwareAccelerated) SupportMapAccelerated(direction, out result);\n        else SupportMapScalar(direction, out result);\n    }\n\n    internal readonly void SupportMapAcceleratedForTests(in JVector direction, out JVector result)\n        => SupportMapAccelerated(direction, out result);\n\n    internal readonly void SupportMapScalarForTests(in JVector direction, out JVector result)\n        => SupportMapScalar(direction, out result);\n\n    private readonly void SupportMapAccelerated(in JVector direction, out JVector result)\n    {\n        Real maxDotProduct = Real.MinValue;\n        int length = xvalues.Length;\n        int index = 0;\n\n        var dirX = Vector.Create(direction.X);\n        var dirY = Vector.Create(direction.Y);\n        var dirZ = Vector.Create(direction.Z);\n\n        int i = 0;\n        for (; i <= length - 4; i += 4)\n        {\n            var vx = Vector.LoadUnsafe(ref xvalues[i]);\n            var vy = Vector.LoadUnsafe(ref yvalues[i]);\n            var vz = Vector.LoadUnsafe(ref zvalues[i]);\n\n            var dx = Vector.Multiply(vx, dirX);\n            var dy = Vector.Multiply(vy, dirY);\n            var dz = Vector.Multiply(vz, dirZ);\n\n            var sum = Vector.Add(dx, Vector.Add(dy, dz));\n\n            Real d0 = sum.GetElement(0);\n            Real d1 = sum.GetElement(1);\n            Real d2 = sum.GetElement(2);\n            Real d3 = sum.GetElement(3);\n\n            // Use the same \"last maximum wins\" tie-break as the scalar path.\n            if (d0 >= maxDotProduct) { maxDotProduct = d0; index = i + 0; }\n            if (d1 >= maxDotProduct) { maxDotProduct = d1; index = i + 1; }\n            if (d2 >= maxDotProduct) { maxDotProduct = d2; index = i + 2; }\n            if (d3 >= maxDotProduct) { maxDotProduct = d3; index = i + 3; }\n        }\n\n        for (; i < length; i++)\n        {\n            Real dx = xvalues[i] * direction.X;\n            Real dy = yvalues[i] * direction.Y;\n            Real dz = zvalues[i] * direction.Z;\n\n            Real dotProduct = dx + (dy + dz);\n\n            if (dotProduct < maxDotProduct) continue;\n            maxDotProduct = dotProduct;\n            index = i;\n        }\n\n        result = new JVector(xvalues[index], yvalues[index], zvalues[index]);\n    }\n\n    private readonly void SupportMapScalar(in JVector direction, out JVector result)\n    {\n        Real maxDotProduct = Real.MinValue;\n        int length = xvalues.Length;\n        int index = 0;\n\n        for (int i = 0; i < length; i++)\n        {\n            Real dx = xvalues[i] * direction.X;\n            Real dy = yvalues[i] * direction.Y;\n            Real dz = zvalues[i] * direction.Z;\n\n            Real dotProduct = dx + (dy + dz);\n\n            if (dotProduct < maxDotProduct) continue;\n            maxDotProduct = dotProduct;\n            index = i;\n        }\n\n        result = new JVector(xvalues[index], yvalues[index], zvalues[index]);\n    }\n\n    public readonly void GetCenter(out JVector point) => point = center;\n\n    public readonly bool Equals(VertexSupportMap other) => xvalues.Equals(other.xvalues) &&\n                                                  yvalues.Equals(other.yvalues) &&\n                                                  zvalues.Equals(other.zvalues);\n\n    public readonly override bool Equals(object? obj) => obj is VertexSupportMap other && Equals(other);\n\n    public readonly override int GetHashCode() => HashCode.Combine(xvalues, yvalues, zvalues);\n\n    public static bool operator ==(VertexSupportMap left, VertexSupportMap right)\n    {\n        return left.Equals(right);\n    }\n\n    public static bool operator !=(VertexSupportMap left, VertexSupportMap right)\n    {\n        return !(left == right);\n    }\n}"
  },
  {
    "path": "src/Jitter2/DataStructures/ISink.cs",
    "content": "/*\n * Jitter2 Physics Library\n * (c) Thorben Linneweber and contributors\n * SPDX-License-Identifier: MIT\n */\n\nnamespace Jitter2.DataStructures;\n\nusing System;\nusing System.Collections.Generic;\n\n/// <summary>\n/// Append-only target for values produced by an algorithm. Designed as a minimal,\n/// struct-friendly alternative to <see cref=\"ICollection{T}\"/> for hot paths.\n/// </summary>\n/// <typeparam name=\"T\">The type of value accepted by the sink.</typeparam>\npublic interface ISink<T>\n{\n    /// <summary>Appends a value to the sink.</summary>\n    void Add(in T item);\n}\n\n/// <summary>\n/// Adapts an <see cref=\"ICollection{T}\"/> to the <see cref=\"ISink{T}\"/> interface.\n/// </summary>\n/// <typeparam name=\"T\">The element type.</typeparam>\npublic readonly struct CollectionSink<T> : ISink<T>\n{\n    private readonly ICollection<T> collection;\n\n    /// <summary>Creates a sink that forwards to the specified collection.</summary>\n    /// <exception cref=\"ArgumentNullException\">Thrown when <paramref name=\"collection\"/> is null.</exception>\n    public CollectionSink(ICollection<T> collection)\n    {\n        this.collection = collection ?? throw new ArgumentNullException(nameof(collection));\n    }\n\n    /// <summary>Appends a value to the wrapped collection.</summary>\n    public void Add(in T item)\n    {\n        collection.Add(item);\n    }\n}\n"
  },
  {
    "path": "src/Jitter2/DataStructures/PartitionedSet.cs",
    "content": "/*\n * Jitter2 Physics Library\n * (c) Thorben Linneweber and contributors\n * SPDX-License-Identifier: MIT\n */\n\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Runtime.CompilerServices;\n\nnamespace Jitter2.DataStructures;\n\n/// <summary>\n/// Defines an index property used by <see cref=\"PartitionedSet{T}\"/> to track element positions.\n/// </summary>\npublic interface IPartitionedSetIndex\n{\n    /// <summary>\n    /// Gets or sets the index of the element within the <see cref=\"PartitionedSet{T}\"/>.\n    /// A value of -1 indicates the element is not part of any set.\n    /// </summary>\n    int SetIndex { get; set; }\n}\n\n/// <summary>\n/// A read-only wrapper around <see cref=\"PartitionedSet{T}\"/>.\n/// </summary>\n/// <typeparam name=\"T\">The type of elements in the set.</typeparam>\npublic readonly struct ReadOnlyPartitionedSet<T>(PartitionedSet<T> partitionedSet) : IEnumerable<T>\n    where T : class, IPartitionedSetIndex\n{\n    /// <summary>Gets the number of active elements.</summary>\n    public int ActiveCount => partitionedSet.ActiveCount;\n\n    /// <summary>Gets the total number of elements.</summary>\n    public int Count => partitionedSet.Count;\n\n    /// <summary>\n    /// Returns a read-only span of all elements in the set.\n    /// </summary>\n    public ReadOnlySpan<T> Elements => partitionedSet.Elements;\n\n    /// <summary>\n    /// Returns a read-only span of the active elements in the set.\n    /// </summary>\n    public ReadOnlySpan<T> Active => partitionedSet.Active;\n\n    /// <summary>\n    /// Returns a read-only span of the inactive elements in the set.\n    /// </summary>\n    public ReadOnlySpan<T> Inactive => partitionedSet.Inactive;\n\n    /// <summary>Gets the element at the specified index.</summary>\n    public T this[int i] => partitionedSet[i];\n\n    /// <summary>Determines whether the set contains the specified element.</summary>\n    public bool Contains(T element) => partitionedSet.Contains(element);\n\n    /// <summary>Determines whether the specified element is in the active partition.</summary>\n    public bool IsActive(T element) => partitionedSet.IsActive(element);\n\n    public PartitionedSet<T>.Enumerator GetEnumerator()\n    {\n        return new PartitionedSet<T>.Enumerator(partitionedSet);\n    }\n\n    IEnumerator<T> IEnumerable<T>.GetEnumerator()\n    {\n        return GetEnumerator();\n    }\n\n    IEnumerator IEnumerable.GetEnumerator()\n    {\n        return GetEnumerator();\n    }\n}\n\n/// <summary>\n/// Represents a collection of objects that can be partitioned into active and inactive subsets.\n/// </summary>\n/// <typeparam name=\"T\">The type of elements in the set, which must implement <see cref=\"IPartitionedSetIndex\"/>.</typeparam>\n/// <remarks>\n/// The methods <see cref=\"Add(T, bool)\"/>, <see cref=\"Remove(T)\"/>, <see cref=\"Contains(T)\"/>, <see cref=\"IsActive(T)\"/>,\n/// <see cref=\"MoveToActive(T)\"/>, and <see cref=\"MoveToInactive(T)\"/> all operate in O(1) time complexity.\n/// </remarks>\npublic class PartitionedSet<T> : IEnumerable<T> where T : class, IPartitionedSetIndex\n{\n    public struct Enumerator(PartitionedSet<T> partitionedSet) : IEnumerator<T>\n    {\n        private int index = -1;\n\n        public readonly T Current => (index >= 0 ? partitionedSet[index] : null)!;\n\n        readonly object IEnumerator.Current => Current;\n\n        public readonly void Dispose()\n        {\n        }\n\n        public bool MoveNext()\n        {\n            if (index < partitionedSet.Count - 1)\n            {\n                index++;\n                return true;\n            }\n\n            return false;\n        }\n\n        public void Reset()\n        {\n            index = -1;\n        }\n    }\n\n    private T[] elements;\n\n    /// <summary>Gets the number of active elements in the set.</summary>\n    public int ActiveCount { get; private set; }\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"PartitionedSet{T}\"/> class.\n    /// </summary>\n    /// <param name=\"initialSize\">The initial capacity of the internal array.</param>\n    public PartitionedSet(int initialSize = 1024)\n    {\n        elements = new T[initialSize];\n    }\n\n    /// <summary>Gets the element at the specified index.</summary>\n    public T this[int i] => elements[i];\n\n    /// <summary>Returns a span of all elements in the set.</summary>\n    public ReadOnlySpan<T> Elements => elements.AsSpan()[..Count];\n\n    /// <summary>Returns a span of active elements in the set.</summary>\n    public ReadOnlySpan<T> Active => elements.AsSpan()[..ActiveCount];\n\n    /// <summary>Returns a span of inactive elements in the set.</summary>\n    public ReadOnlySpan<T> Inactive => elements.AsSpan()[ActiveCount..Count];\n\n    /// <summary>Removes all elements from the set.</summary>\n    public void Clear()\n    {\n        for (int i = 0; i < Count; i++)\n        {\n            elements[i].SetIndex = -1;\n            elements[i] = null!;\n        }\n\n        Count = 0;\n        ActiveCount = 0;\n    }\n\n    /// <summary>Gets the total number of elements in the set.</summary>\n    public int Count { get; private set; }\n\n    /// <summary>Returns a span of all elements in the set.</summary>\n    public Span<T> AsSpan() => this.elements.AsSpan(0, Count);\n\n    /// <summary>\n    /// Adds an element to the set.\n    /// </summary>\n    /// <param name=\"element\">The element to add.</param>\n    /// <param name=\"active\">If <see langword=\"true\"/>, the element is added to the active partition.</param>\n    public void Add(T element, bool active = false)\n    {\n        Debug.Assert(element.SetIndex == -1);\n\n        if (Count == elements.Length)\n        {\n            Array.Resize(ref elements, elements.Length * 2);\n        }\n\n        element.SetIndex = Count;\n        elements[Count++] = element;\n\n        if (active) MoveToActive(element);\n    }\n\n    private void Swap(int index0, int index1)\n    {\n        (elements[index0], elements[index1]) =\n            (elements[index1], elements[index0]);\n\n        elements[index0].SetIndex = index0;\n        elements[index1].SetIndex = index1;\n    }\n\n    /// <summary>\n    /// Determines whether the specified element is in the active partition.\n    /// </summary>\n    /// <param name=\"element\">The element to check.</param>\n    /// <returns><see langword=\"true\"/> if the element is active; otherwise, <see langword=\"false\"/>.</returns>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public bool IsActive(T element)\n    {\n        Debug.Assert(element.SetIndex != -1);\n        Debug.Assert(elements[element.SetIndex] == element);\n\n        return (element.SetIndex < ActiveCount);\n    }\n\n    /// <summary>\n    /// Moves an element to the active partition.\n    /// </summary>\n    /// <param name=\"element\">The element to move.</param>\n    /// <returns><see langword=\"true\"/> if the element was moved; <see langword=\"false\"/> if it was already active.</returns>\n    public bool MoveToActive(T element)\n    {\n        Debug.Assert(element.SetIndex != -1);\n        Debug.Assert(elements[element.SetIndex] == element);\n\n        if (element.SetIndex < ActiveCount) return false;\n        Swap(ActiveCount, element.SetIndex);\n        ActiveCount += 1;\n        return true;\n    }\n\n    /// <summary>\n    /// Moves an element to the inactive partition.\n    /// </summary>\n    /// <param name=\"element\">The element to move.</param>\n    /// <returns><see langword=\"true\"/> if the element was moved; <see langword=\"false\"/> if it was already inactive.</returns>\n    public bool MoveToInactive(T element)\n    {\n        Debug.Assert(element.SetIndex != -1);\n        Debug.Assert(elements[element.SetIndex] == element);\n\n        if (element.SetIndex >= ActiveCount) return false;\n        ActiveCount -= 1;\n        Swap(ActiveCount, element.SetIndex);\n        return true;\n    }\n\n    /// <summary>\n    /// Determines whether the set contains the specified element.\n    /// </summary>\n    /// <param name=\"element\">The element to locate.</param>\n    /// <returns><see langword=\"true\"/> if the element is found; otherwise, <see langword=\"false\"/>.</returns>\n    public bool Contains(T element)\n    {\n        if(element.SetIndex >= Count || element.SetIndex < 0) return false;\n        return (elements[element.SetIndex] == element);\n    }\n\n    /// <summary>\n    /// Removes the specified element from the set.\n    /// </summary>\n    /// <param name=\"element\">The element to remove.</param>\n    public void Remove(T element)\n    {\n        Debug.Assert(element.SetIndex != -1);\n        Debug.Assert(elements[element.SetIndex] == element);\n\n        MoveToInactive(element);\n\n        int li = element.SetIndex;\n\n        Count -= 1;\n\n        elements[li] = elements[Count];\n        elements[li].SetIndex = li;\n        elements[Count] = null!;\n\n        element.SetIndex = -1;\n    }\n\n    public Enumerator GetEnumerator()\n    {\n        return new Enumerator(this);\n    }\n\n    IEnumerator<T> IEnumerable<T>.GetEnumerator()\n    {\n        return GetEnumerator();\n    }\n\n    IEnumerator IEnumerable.GetEnumerator()\n    {\n        return GetEnumerator();\n    }\n}"
  },
  {
    "path": "src/Jitter2/DataStructures/ReadOnlyHashset.cs",
    "content": "/*\n * Jitter2 Physics Library\n * (c) Thorben Linneweber and contributors\n * SPDX-License-Identifier: MIT\n */\n\nusing System.Collections;\nusing System.Collections.Generic;\n\nnamespace Jitter2.DataStructures;\n\n/// <summary>\n/// A read-only wrapper around <see cref=\"HashSet{T}\"/> that prevents modification while allowing enumeration and lookup.\n/// </summary>\n/// <typeparam name=\"T\">The type of elements in the set.</typeparam>\npublic readonly struct ReadOnlyHashSet<T>(HashSet<T> hashset) : IReadOnlyCollection<T>\n{\n    public HashSet<T>.Enumerator GetEnumerator()\n    {\n        return hashset.GetEnumerator();\n    }\n\n    IEnumerator<T> IEnumerable<T>.GetEnumerator()\n    {\n        return hashset.GetEnumerator();\n    }\n\n    IEnumerator IEnumerable.GetEnumerator()\n    {\n        return hashset.GetEnumerator();\n    }\n\n    /// <summary>Determines whether the set contains the specified element.</summary>\n    public bool Contains(T item) => hashset.Contains(item);\n\n    /// <summary>Copies the elements of the set to an array.</summary>\n    public void CopyTo(T[] array) => hashset.CopyTo(array);\n\n    /// <summary>Copies the elements of the set to an array, starting at a particular index.</summary>\n    public void CopyTo(T[] array, int arrayIndex) => hashset.CopyTo(array, arrayIndex);\n\n    /// <summary>Gets the number of elements in the set.</summary>\n    public int Count => hashset.Count;\n}"
  },
  {
    "path": "src/Jitter2/DataStructures/ReadOnlyList.cs",
    "content": "/*\n * Jitter2 Physics Library\n * (c) Thorben Linneweber and contributors\n * SPDX-License-Identifier: MIT\n */\n\nusing System.Collections;\nusing System.Collections.Generic;\n\nnamespace Jitter2.DataStructures;\n\n/// <summary>\n/// A read-only wrapper around <see cref=\"List{T}\"/> that prevents modification while allowing indexed access and enumeration.\n/// </summary>\n/// <typeparam name=\"T\">The type of elements in the list.</typeparam>\npublic readonly struct ReadOnlyList<T>(List<T> list) : IReadOnlyList<T>\n{\n    /// <summary>Gets the element at the specified index.</summary>\n    public T this[int i] => list[i];\n\n    public List<T>.Enumerator GetEnumerator()\n    {\n        return list.GetEnumerator();\n    }\n\n    IEnumerator<T> IEnumerable<T>.GetEnumerator()\n    {\n        return list.GetEnumerator();\n    }\n\n    IEnumerator IEnumerable.GetEnumerator()\n    {\n        return list.GetEnumerator();\n    }\n\n    /// <summary>Gets the number of elements in the list.</summary>\n    public int Count => list.Count;\n}"
  },
  {
    "path": "src/Jitter2/DataStructures/ShardedDictionary.cs",
    "content": "/*\n * Jitter2 Physics Library\n * (c) Thorben Linneweber and contributors\n * SPDX-License-Identifier: MIT\n */\n\nusing System.Collections.Generic;\nusing System.Diagnostics.CodeAnalysis;\nusing System.Runtime.CompilerServices;\n\n#if NET9_0_OR_GREATER\nusing Lock = System.Threading.Lock;\n#else\nusing Lock = System.Object;\n#endif\n\nnamespace Jitter2.DataStructures;\n\n/// <summary>\n/// A thread-safe dictionary that partitions entries across multiple shards to reduce lock contention.\n/// Each shard has its own lock, allowing concurrent access to different shards.\n/// </summary>\n/// <typeparam name=\"TKey\">The type of keys in the dictionary.</typeparam>\n/// <typeparam name=\"TValue\">The type of values in the dictionary.</typeparam>\n/// <remarks>\n/// <para>\n/// This implementation avoids the GC overhead of <see cref=\"System.Collections.Concurrent.ConcurrentDictionary{TKey,TValue}\"/>.\n/// </para>\n/// <para>\n/// <b>Threading:</b> Individual operations are not thread-safe. Callers must acquire the shard lock\n/// via <see cref=\"GetLock\"/> before calling <see cref=\"Add\"/>, <see cref=\"Remove\"/>, or the indexer.\n/// </para>\n/// </remarks>\ninternal class ShardedDictionary<TKey, TValue> where TKey : notnull\n{\n    private readonly Lock[] locks;\n    private readonly Dictionary<TKey, TValue>[] dictionaries;\n\n    private static int ShardSuggestion(int threads)\n    {\n        int[] primes = [3, 5, 7, 11, 17, 23, 29, 37, 47, 59, 71];\n\n        foreach (int prime in primes)\n        {\n            if (prime >= threads)\n                return prime;\n        }\n\n        return primes[^1];\n    }\n\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    private int GetShardIndex(TKey key)\n    {\n        return (key.GetHashCode() & 0x7FFFFFFF) % locks.Length;\n    }\n\n    /// <summary>Gets the value associated with the specified key.</summary>\n    public TValue this[TKey key]\n    {\n        get\n        {\n            int index = GetShardIndex(key);\n            return dictionaries[index][key];\n        }\n    }\n\n    /// <summary>\n    /// Gets the lock object for the shard containing the specified key.\n    /// </summary>\n    /// <param name=\"key\">The key to locate the shard for.</param>\n    /// <returns>The lock object for the shard.</returns>\n    public Lock GetLock(TKey key)\n    {\n        return locks[GetShardIndex(key)];\n    }\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"ShardedDictionary{TKey, TValue}\"/> class.\n    /// </summary>\n    /// <param name=\"threads\">The expected number of concurrent threads, used to determine shard count.</param>\n    public ShardedDictionary(int threads)\n    {\n        int count = ShardSuggestion(threads);\n\n        locks = new Lock[count];\n        dictionaries = new Dictionary<TKey, TValue>[count];\n\n        for (int i = 0; i < count; i++)\n        {\n            locks[i] = new Lock();\n            dictionaries[i] = new Dictionary<TKey, TValue>();\n        }\n    }\n\n    /// <summary>\n    /// Attempts to get the value associated with the specified key.\n    /// </summary>\n    /// <param name=\"key\">The key to locate.</param>\n    /// <param name=\"value\">The value associated with the key, if found; otherwise, the default value.</param>\n    /// <returns><see langword=\"true\"/> if the key was found; otherwise, <see langword=\"false\"/>.</returns>\n    public bool TryGetValue(TKey key, [MaybeNullWhen(false)] out TValue value)\n    {\n        return dictionaries[GetShardIndex(key)].TryGetValue(key, out value);\n    }\n\n    /// <summary>\n    /// Adds a key-value pair to the dictionary.\n    /// </summary>\n    /// <param name=\"key\">The key to add.</param>\n    /// <param name=\"value\">The value to associate with the key.</param>\n    public void Add(TKey key, TValue value)\n    {\n        dictionaries[GetShardIndex(key)].Add(key, value);\n    }\n\n    /// <summary>\n    /// Removes the entry with the specified key from the dictionary.\n    /// </summary>\n    /// <param name=\"key\">The key to remove.</param>\n    public void Remove(TKey key)\n    {\n        dictionaries[GetShardIndex(key)].Remove(key);\n    }\n}"
  },
  {
    "path": "src/Jitter2/DataStructures/SlimBag.cs",
    "content": "/*\n * Jitter2 Physics Library\n * (c) Thorben Linneweber and contributors\n * SPDX-License-Identifier: MIT\n */\n\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Threading;\n\nnamespace Jitter2.DataStructures;\n\n/// <summary>\n/// A lightweight unordered collection backed by an array. Removing an element at position n\n/// moves the last element to position n and decrements <see cref=\"Count\"/>, providing O(1) removal.\n/// </summary>\n/// <typeparam name=\"T\">The type of elements in the bag.</typeparam>\n/// <remarks>\n/// Key operations:\n/// <list type=\"bullet\">\n///   <item><description><see cref=\"Add\"/>: O(1) amortized, may resize the internal array.</description></item>\n///   <item><description><see cref=\"RemoveAt\"/>: O(1), swaps with the last element.</description></item>\n///   <item><description><see cref=\"Remove\"/>: O(n), requires linear search.</description></item>\n///   <item><description><see cref=\"ConcurrentAdd\"/>: Thread-safe addition with reader-writer locking.</description></item>\n/// </list>\n/// </remarks>\ninternal class SlimBag<T> : IEnumerable<T>\n{\n    /// <summary>\n    /// A lightweight struct enumerator for <see cref=\"SlimBag{T}\"/>.\n    /// </summary>\n    /// <remarks>\n    /// <b>Warning:</b> Not safe if the bag is mutated during enumeration.\n    /// </remarks>\n    public struct Enumerator : IEnumerator<T>\n    {\n        private readonly SlimBag<T> owner;\n        private int index;\n\n        internal Enumerator(SlimBag<T> owner)\n        {\n            this.owner = owner;\n            index = -1;\n        }\n\n        public T Current => owner.array[index];\n        object? IEnumerator.Current => Current;\n\n        public bool MoveNext()\n        {\n            // advance and check against the number of valid items, not array.Length\n            return ++index < owner.counter;\n        }\n\n        // No resources to release\n        public void Dispose() { }\n\n        public void Reset() => index = -1;\n    }\n\n    private T[] array;\n    private int counter;\n    private int nullOut;\n    private readonly EqualityComparer<T> comparer = EqualityComparer<T>.Default;\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"SlimBag{T}\"/> class with a specified initial size.\n    /// </summary>\n    /// <param name=\"initialSize\">The initial size of the internal array. Defaults to 4 if not specified.</param>\n    public SlimBag(int initialSize = 4)\n    {\n        array = new T[initialSize];\n        nullOut = 0;\n    }\n\n    /// <summary>\n    /// Gets the length of the internal array.\n    /// </summary>\n    public int InternalSize => array.Length;\n\n    /// <summary>\n    /// Returns a span over the valid elements of the internal array.\n    /// </summary>\n    public Span<T> AsSpan()\n    {\n        return new Span<T>(array, 0, counter);\n    }\n\n    /// <summary>\n    /// Adds a range of elements to the <see cref=\"SlimBag{T}\"/>.\n    /// </summary>\n    /// <param name=\"list\">The collection of elements to add.</param>\n    public void AddRange(IEnumerable<T> list)\n    {\n        foreach (T elem in list) Add(elem);\n    }\n\n    /// <summary>\n    /// Adds an element to the <see cref=\"SlimBag{T}\"/>.\n    /// </summary>\n    /// <param name=\"item\">The element to add.</param>\n    public void Add(T item)\n    {\n        if (counter == array.Length)\n        {\n            Array.Resize(ref array, array.Length * 2);\n        }\n\n        array[counter++] = item;\n    }\n\n    private Jitter2.Parallelization.ReaderWriterLock rwLock;\n\n    /// <summary>\n    /// Adds an element to the <see cref=\"SlimBag{T}\"/> in a thread-safe manner.\n    /// </summary>\n    /// <param name=\"item\">The element to add.</param>\n    public void ConcurrentAdd(T item)\n    {\n        int lc = Interlocked.Increment(ref counter) - 1;\n\n        again:\n\n        rwLock.EnterReadLock();\n\n        if (lc < array.Length)\n        {\n            array[lc] = item;\n            rwLock.ExitReadLock();\n        }\n        else\n        {\n            rwLock.ExitReadLock();\n\n            rwLock.EnterWriteLock();\n            if (lc >= array.Length)\n            {\n                Array.Resize(ref array, array.Length * 2);\n            }\n            rwLock.ExitWriteLock();\n\n            goto again;\n        }\n    }\n\n    /// <summary>\n    /// Removes the first occurrence of a specific element from the <see cref=\"SlimBag{T}\"/>.\n    /// </summary>\n    /// <param name=\"item\">The element to remove.</param>\n    public void Remove(T item)\n    {\n        int index = -1;\n        for (int i = 0; i < counter; i++)\n        {\n            if (comparer.Equals(item, array[i]))\n            {\n                index = i;\n                break;\n            }\n        }\n\n        if (index != -1) RemoveAt(index);\n    }\n\n    /// <summary>\n    /// Removes the element at the specified index from the <see cref=\"SlimBag{T}\"/>.\n    /// </summary>\n    /// <param name=\"index\">The zero-based index of the element to remove.</param>\n    public void RemoveAt(int index)\n    {\n        array[index] = array[--counter];\n    }\n\n    /// <summary>\n    /// Gets or sets the number of elements contained in the <see cref=\"SlimBag{T}\"/>.\n    /// </summary>\n    public int Count\n    {\n        get => counter;\n        set\n        {\n            Debug.Assert(value <= counter);\n            counter = value;\n        }\n    }\n\n    /// <summary>\n    /// Gets the element at the specified index. Note that index should be smaller\n    /// than <see cref=\"Count\"/>, however this is not enforced.\n    /// </summary>\n    /// <param name=\"i\">The zero-based index of the element to get.</param>\n    /// <returns>The element at the specified index.</returns>\n    public T this[int i] => array[i];\n\n    /// <summary>\n    /// Removes all elements from the <see cref=\"SlimBag{T}\"/>.\n    /// </summary>\n    public void Clear()\n    {\n        counter = 0;\n    }\n\n    /// <summary>\n    /// Nulls out one stale array slot per call to allow garbage collection of removed elements.\n    /// </summary>\n    /// <remarks>\n    /// Tracks the high-water mark of <see cref=\"Count\"/>. When elements are removed and\n    /// <see cref=\"Count\"/> drops below that mark, each call clears one slot from the end\n    /// of the previously used range. Call this method repeatedly (e.g., once per step) to\n    /// amortize cleanup cost.\n    /// </remarks>\n    public void TrackAndNullOutOne()\n    {\n        nullOut = Math.Max(nullOut, counter);\n        if (nullOut <= counter) return;\n        array[--nullOut] = default!;\n    }\n\n    public Enumerator GetEnumerator() => new Enumerator(this);\n\n    IEnumerator<T> IEnumerable<T>.GetEnumerator() => GetEnumerator();\n    IEnumerator IEnumerable.GetEnumerator() => GetEnumerator();\n}"
  },
  {
    "path": "src/Jitter2/DataStructures/SpanHelper.cs",
    "content": "/*\n * Jitter2 Physics Library\n * (c) Thorben Linneweber and contributors\n * SPDX-License-Identifier: MIT\n */\n\nusing System;\nusing System.Collections.Generic;\nusing System.Runtime.InteropServices;\n\nnamespace Jitter2.DataStructures;\n\n/// <summary>\n/// Provides utility methods for converting collections to spans.\n/// </summary>\ninternal static class SpanHelper\n{\n    /// <summary>\n    /// Converts an enumerable to a <see cref=\"ReadOnlySpan{T}\"/>, using zero-copy when possible.\n    /// </summary>\n    /// <typeparam name=\"T\">The unmanaged element type.</typeparam>\n    /// <param name=\"elements\">The collection to convert.</param>\n    /// <param name=\"backingArray\">\n    /// When a copy is required, contains the allocated backing array; otherwise, <see langword=\"null\"/>.\n    /// </param>\n    /// <returns>A read-only span over the elements.</returns>\n    /// <remarks>\n    /// Zero-copy paths are used for <see cref=\"Array\"/> and <see cref=\"List{T}\"/>.\n    /// Other collection types require allocation.\n    /// </remarks>\n    public static ReadOnlySpan<T> AsReadOnlySpan<T>(IEnumerable<T> elements, out T[]? backingArray) where T : struct\n    {\n        backingArray = null;\n\n        switch (elements)\n        {\n            // 1. Array: Zero-copy, just return it.\n            case T[] array:\n                return array;\n\n            // 2. List<T>: Zero-copy via Marshal.\n            case List<T> list:\n                return CollectionsMarshal.AsSpan(list);\n\n            // 3. ICollection<T>: Fast copy (Count is known).\n            // Covers HashSet, LinkedList, Queue, Stack, etc.\n            case ICollection<T> collection:\n                backingArray = new T[collection.Count];\n                collection.CopyTo(backingArray, 0);\n                return backingArray;\n\n            // 4. IReadOnlyCollection<T>: Optimized allocation (Count is known).\n            // Covers custom collections that only expose read-only interfaces.\n            case IReadOnlyCollection<T> readOnlyCol:\n                backingArray = new T[readOnlyCol.Count];\n                int i = 0;\n                foreach (var item in readOnlyCol)\n                {\n                    backingArray[i++] = item;\n                }\n\n                return backingArray;\n\n            // 5. General Fallback: Iteration required (Size unknown).\n            default:\n                var buffer = new List<T>();\n\n                foreach (var item in elements)\n                {\n                    buffer.Add(item);\n                }\n\n                backingArray = buffer.ToArray();\n                return backingArray;\n        }\n    }\n\n}"
  },
  {
    "path": "src/Jitter2/Dynamics/Arbiter.cs",
    "content": "/*\n * Jitter2 Physics Library\n * (c) Thorben Linneweber and contributors\n * SPDX-License-Identifier: MIT\n */\n\nusing System;\nusing System.Collections.Generic;\nusing Jitter2.Unmanaged;\n\nnamespace Jitter2.Dynamics;\n\n/// <summary>\n/// Manages contact information between two different rigid bodies.\n/// </summary>\n/// <remarks>\n/// <para>\n/// An arbiter is created when two shapes begin overlapping and is removed when they separate\n/// or when one of the involved bodies is removed from the world. Each arbiter can hold up to\n/// four cached contact points (see <see cref=\"ContactData\"/>).\n/// </para>\n/// <para>\n/// In most cases arbiters are keyed by shape identifiers. For arbiters created by the engine, the ordering\n/// is canonical: the shape with the smaller ID is always first.\n/// </para>\n/// <para>\n/// The <see cref=\"Handle\"/> property provides access to the underlying <see cref=\"ContactData\"/>\n/// stored in unmanaged memory. This data is only valid while the arbiter exists and must not\n/// be accessed concurrently with <see cref=\"World.Step(Real, bool)\"/>.\n/// </para>\n/// </remarks>\npublic sealed class Arbiter\n{\n    internal static readonly Stack<Arbiter> Pool = new();\n\n    /// <summary>\n    /// Gets the first rigid body involved in this contact.\n    /// </summary>\n    public RigidBody Body1 { get; internal set; } = null!;\n\n    /// <summary>\n    /// Gets the second rigid body involved in this contact.\n    /// </summary>\n    public RigidBody Body2 { get; internal set; } = null!;\n\n    /// <summary>\n    /// Gets the handle to the <see cref=\"ContactData\"/> stored in unmanaged memory.\n    /// </summary>\n    /// <remarks>\n    /// The underlying data is valid only while this arbiter is registered with the world.\n    /// After removal, accessing <see cref=\"JHandle{T}.Data\"/> results in undefined behavior.\n    /// </remarks>\n    public JHandle<ContactData> Handle { get; internal set; }\n}\n\n/// <summary>\n/// Represents an ordered pair of identifiers used to look up an <see cref=\"Arbiter\"/>.\n/// </summary>\n/// <remarks>\n/// The order of <paramref name=\"key1\"/> and <paramref name=\"key2\"/> matters for equality comparison.\n/// For arbiters created by the physics engine, <paramref name=\"key1\"/> is always less than <paramref name=\"key2\"/>.\n/// </remarks>\n/// <param name=\"key1\">The first identifier (typically the smaller shape ID).</param>\n/// <param name=\"key2\">The second identifier (typically the larger shape ID).</param>\npublic readonly struct ArbiterKey(ulong key1, ulong key2) : IEquatable<ArbiterKey>\n{\n    /// <summary>\n    /// The first identifier in the pair.\n    /// </summary>\n    public readonly ulong Key1 = key1;\n\n    /// <summary>\n    /// The second identifier in the pair.\n    /// </summary>\n    public readonly ulong Key2 = key2;\n\n    public bool Equals(ArbiterKey other)\n    {\n        return Key1 == other.Key1 && Key2 == other.Key2;\n    }\n\n    public override bool Equals(object? obj)\n    {\n        return obj is ArbiterKey other && Equals(other);\n    }\n\n    public override int GetHashCode()\n    {\n        return HashCode.Combine(Key1, Key2);\n    }\n\n    public static bool operator ==(ArbiterKey left, ArbiterKey right)\n    {\n        return left.Equals(right);\n    }\n\n    public static bool operator !=(ArbiterKey left, ArbiterKey right)\n    {\n        return !(left == right);\n    }\n}"
  },
  {
    "path": "src/Jitter2/Dynamics/Constraints/AngularMotor.cs",
    "content": "/*\n * Jitter2 Physics Library\n * (c) Thorben Linneweber and contributors\n * SPDX-License-Identifier: MIT\n */\n\nusing System;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\nusing Jitter2.LinearMath;\nusing Jitter2.Unmanaged;\n\nnamespace Jitter2.Dynamics.Constraints;\n\n/// <summary>\n/// Represents a motor that drives relative angular velocity between two axes fixed\n/// in the reference frames of their respective bodies.\n/// </summary>\npublic unsafe class AngularMotor : Constraint<AngularMotor.AngularMotorData>\n{\n    [StructLayout(LayoutKind.Sequential)]\n    public struct AngularMotorData\n    {\n        internal int _internal;\n        internal uint DispatchId;\n        internal ulong ConstraintId;\n\n        public JHandle<RigidBodyData> Body1;\n        public JHandle<RigidBodyData> Body2;\n\n        public JVector LocalAxis1;\n        public JVector LocalAxis2;\n\n        public Real Velocity;\n        public Real MaxForce;\n        public Real MaxLambda;\n\n        public Real EffectiveMass;\n\n        public Real AccumulatedImpulse;\n    }\n\n    private static readonly uint RegisteredDispatchId =\n        RegisterFullConstraint(&PrepareForIterationAngularMotor, &IterateAngularMotor);\n\n    protected override void Create()\n    {\n        DispatchId = RegisteredDispatchId;\n        base.Create();\n    }\n    \n    /// <inheritdoc />\n    public override void ResetWarmStart() => Data.AccumulatedImpulse = (Real)0.0;\n\n    /// <summary>\n    /// Initializes the motor with separate axes for each body.\n    /// </summary>\n    /// <param name=\"axis1\">The motor axis on the first body in world space.</param>\n    /// <param name=\"axis2\">The motor axis on the second body in world space.</param>\n    /// <remarks>\n    /// Stores the axes in local frames. Both axes are normalized internally.\n    /// Default values: <see cref=\"TargetVelocity\"/> = 0, <see cref=\"MaximumForce\"/> = 0.\n    /// </remarks>\n    public void Initialize(JVector axis1, JVector axis2)\n    {\n        VerifyNotZero();\n        ref AngularMotorData data = ref Data;\n        ref RigidBodyData body1 = ref data.Body1.Data;\n        ref RigidBodyData body2 = ref data.Body2.Data;\n\n        JVector.NormalizeInPlace(ref axis1);\n        JVector.NormalizeInPlace(ref axis2);\n\n        JVector.ConjugatedTransform(axis1, body1.Orientation, out data.LocalAxis1);\n        JVector.ConjugatedTransform(axis2, body2.Orientation, out data.LocalAxis2);\n\n        data.MaxForce = 0;\n        data.Velocity = 0;\n    }\n\n    /// <summary>\n    /// Initializes the motor with the same axis for both bodies.\n    /// </summary>\n    /// <param name=\"axis\">The motor axis in world space, used for both bodies.</param>\n    public void Initialize(JVector axis)\n    {\n        Initialize(axis, axis);\n    }\n\n    /// <summary>\n    /// Gets or sets the target angular velocity in radians per second.\n    /// </summary>\n    /// <value>Default is 0.</value>\n    public Real TargetVelocity\n    {\n        get => Data.Velocity;\n        set => Data.Velocity = value;\n    }\n\n    /// <summary>\n    /// Gets the motor axis on the first body in local space.\n    /// </summary>\n    public JVector LocalAxis1 => Data.LocalAxis1;\n\n    /// <summary>\n    /// Gets the motor axis on the second body in local space.\n    /// </summary>\n    public JVector LocalAxis2 => Data.LocalAxis2;\n\n    /// <summary>\n    /// Gets or sets the maximum force the motor can apply.\n    /// </summary>\n    /// <value>Default is 0. Must be non-negative.</value>\n    /// <exception cref=\"ArgumentOutOfRangeException\">\n    /// Thrown when <paramref name=\"value\"/> is negative.\n    /// </exception>\n    public Real MaximumForce\n    {\n        get => Data.MaxForce;\n        set\n        {\n            ArgumentOutOfRangeException.ThrowIfNegative(value);\n            Data.MaxForce = value;\n        }\n    }\n\n    public static void PrepareForIterationAngularMotor(ref ConstraintData constraint, Real idt)\n    {\n        ref var data = ref Unsafe.As<ConstraintData, AngularMotorData>(ref constraint);\n\n        ref RigidBodyData body1 = ref data.Body1.Data;\n        ref RigidBodyData body2 = ref data.Body2.Data;\n\n        JVector.Transform(data.LocalAxis1, body1.Orientation, out JVector j1);\n        JVector.Transform(data.LocalAxis2, body2.Orientation, out JVector j2);\n\n        data.EffectiveMass = JVector.Transform(j1, body1.InverseInertiaWorld) * j1 +\n                             JVector.Transform(j2, body2.InverseInertiaWorld) * j2;\n        data.EffectiveMass = (Real)1.0 / data.EffectiveMass;\n\n        data.MaxLambda = (Real)1.0 / idt * data.MaxForce;\n\n        body1.AngularVelocity -= JVector.Transform(j1 * data.AccumulatedImpulse, body1.InverseInertiaWorld);\n        body2.AngularVelocity += JVector.Transform(j2 * data.AccumulatedImpulse, body2.InverseInertiaWorld);\n    }\n\n    public static void IterateAngularMotor(ref ConstraintData constraint, Real idt)\n    {\n        ref var data = ref Unsafe.As<ConstraintData, AngularMotorData>(ref constraint);\n\n        ref RigidBodyData body1 = ref constraint.Body1.Data;\n        ref RigidBodyData body2 = ref constraint.Body2.Data;\n\n        JVector.Transform(data.LocalAxis1, body1.Orientation, out JVector j1);\n        JVector.Transform(data.LocalAxis2, body2.Orientation, out JVector j2);\n\n        Real jv = -j1 * body1.AngularVelocity + j2 * body2.AngularVelocity;\n\n        Real lambda = -(jv - data.Velocity) * data.EffectiveMass;\n\n        Real oldAccumulated = data.AccumulatedImpulse;\n\n        data.AccumulatedImpulse += lambda;\n\n        data.AccumulatedImpulse = Math.Clamp(data.AccumulatedImpulse, -data.MaxLambda, data.MaxLambda);\n\n        lambda = data.AccumulatedImpulse - oldAccumulated;\n\n        body1.AngularVelocity -= JVector.Transform(j1 * lambda, body1.InverseInertiaWorld);\n        body2.AngularVelocity += JVector.Transform(j2 * lambda, body2.InverseInertiaWorld);\n    }\n\n    public override void DebugDraw(IDebugDrawer drawer)\n    {\n        ref AngularMotorData data = ref Data;\n        ref RigidBodyData body1 = ref data.Body1.Data;\n        ref RigidBodyData body2 = ref data.Body2.Data;\n\n        JVector.Transform(data.LocalAxis1, body1.Orientation, out JVector axis1);\n        JVector.Transform(data.LocalAxis2, body2.Orientation, out JVector axis2);\n\n        const Real axisLength = (Real)0.5;\n        drawer.DrawSegment(body1.Position, body1.Position + axis1 * axisLength);\n        drawer.DrawSegment(body2.Position, body2.Position + axis2 * axisLength);\n    }\n}\n"
  },
  {
    "path": "src/Jitter2/Dynamics/Constraints/BallSocket.cs",
    "content": "/*\n * Jitter2 Physics Library\n * (c) Thorben Linneweber and contributors\n * SPDX-License-Identifier: MIT\n */\n\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\nusing Jitter2.LinearMath;\nusing Jitter2.Unmanaged;\n\nnamespace Jitter2.Dynamics.Constraints;\n\n/// <summary>\n/// Implements a ball-and-socket joint that anchors a point on each body together,\n/// removing three translational degrees of freedom.\n/// </summary>\npublic unsafe class BallSocket : Constraint<BallSocket.BallSocketData>\n{\n    [StructLayout(LayoutKind.Sequential)]\n    public struct BallSocketData\n    {\n        internal int _internal;\n        internal uint DispatchId;\n        internal ulong ConstraintId;\n\n        public JHandle<RigidBodyData> Body1;\n        public JHandle<RigidBodyData> Body2;\n\n        public JVector LocalAnchor1;\n        public JVector LocalAnchor2;\n\n        public JVector U;\n        public JVector R1;\n        public JVector R2;\n\n        public Real BiasFactor;\n        public Real Softness;\n\n        public JMatrix EffectiveMass;\n        public JVector AccumulatedImpulse;\n        public JVector Bias;\n    }\n\n    private static readonly uint RegisteredDispatchId =\n        RegisterFullConstraint(&PrepareForIterationBallSocket, &IterateBallSocket);\n\n    protected override void Create()\n    {\n        DispatchId = RegisteredDispatchId;\n        base.Create();\n    }\n\n    /// <inheritdoc />\n    public override void ResetWarmStart() => Data.AccumulatedImpulse = JVector.Zero;\n\n    /// <summary>\n    /// Initializes the constraint from a world-space anchor point.\n    /// </summary>\n    /// <param name=\"anchor\">The anchor point in world space, shared by both bodies.</param>\n    /// <remarks>\n    /// Computes local anchor points for each body from their current poses.\n    /// Default values: <see cref=\"Bias\"/> = <see cref=\"Constraint.DefaultLinearBias\"/>, <see cref=\"Softness\"/> = <see cref=\"Constraint.DefaultLinearSoftness\"/>.\n    /// </remarks>\n    public void Initialize(JVector anchor)\n    {\n        VerifyNotZero();\n        ref BallSocketData data = ref Data;\n        ref RigidBodyData body1 = ref data.Body1.Data;\n        ref RigidBodyData body2 = ref data.Body2.Data;\n\n        JVector.Subtract(anchor, body1.Position, out data.LocalAnchor1);\n        JVector.Subtract(anchor, body2.Position, out data.LocalAnchor2);\n\n        JVector.ConjugatedTransform(data.LocalAnchor1, body1.Orientation, out data.LocalAnchor1);\n        JVector.ConjugatedTransform(data.LocalAnchor2, body2.Orientation, out data.LocalAnchor2);\n\n        data.BiasFactor = Constraint.DefaultLinearBias;\n        data.Softness = Constraint.DefaultLinearSoftness;\n    }\n\n    /// <summary>\n    /// Gets or sets the anchor point on the first rigid body in world space. The anchor point is\n    /// fixed in the local reference frame of the first body.\n    /// </summary>\n    [ReferenceFrame(ReferenceFrame.World)]\n    public JVector Anchor1\n    {\n        set\n        {\n            ref BallSocketData data = ref Data;\n            ref RigidBodyData body1 = ref data.Body1.Data;\n            JVector.Subtract(value, body1.Position, out data.LocalAnchor1);\n            JVector.ConjugatedTransform(data.LocalAnchor1, body1.Orientation, out data.LocalAnchor1);\n        }\n        get\n        {\n            ref BallSocketData data = ref Data;\n            ref RigidBodyData body1 = ref data.Body1.Data;\n            JVector.Transform(data.LocalAnchor1, body1.Orientation, out JVector result);\n            JVector.Add(result, body1.Position, out result);\n            return result;\n        }\n    }\n\n    /// <summary>\n    /// Gets or sets the anchor point on the second rigid body in world space. The anchor point is\n    /// fixed in the local reference frame of the second body.\n    /// </summary>\n    [ReferenceFrame(ReferenceFrame.World)]\n    public JVector Anchor2\n    {\n        set\n        {\n            ref BallSocketData data = ref Data;\n            ref RigidBodyData body2 = ref data.Body2.Data;\n            JVector.Subtract(value, body2.Position, out data.LocalAnchor2);\n            JVector.ConjugatedTransform(data.LocalAnchor2, body2.Orientation, out data.LocalAnchor2);\n        }\n        get\n        {\n            ref BallSocketData data = ref Data;\n            ref RigidBodyData body2 = ref data.Body2.Data;\n            JVector.Transform(data.LocalAnchor2, body2.Orientation, out JVector result);\n            JVector.Add(result, body2.Position, out result);\n            return result;\n        }\n    }\n\n    public static void PrepareForIterationBallSocket(ref ConstraintData constraint, Real idt)\n    {\n        ref var data = ref Unsafe.As<ConstraintData, BallSocketData>(ref constraint);\n        ref RigidBodyData body1 = ref data.Body1.Data;\n        ref RigidBodyData body2 = ref data.Body2.Data;\n\n        JVector.Transform(data.LocalAnchor1, body1.Orientation, out data.R1);\n        JVector.Transform(data.LocalAnchor2, body2.Orientation, out data.R2);\n\n        JVector.Add(body1.Position, data.R1, out JVector p1);\n        JVector.Add(body2.Position, data.R2, out JVector p2);\n\n        JMatrix cr1 = JMatrix.CreateCrossProduct(data.R1);\n        JMatrix cr2 = JMatrix.CreateCrossProduct(data.R2);\n\n        data.EffectiveMass = body1.InverseMass * JMatrix.Identity +\n                             JMatrix.Multiply(cr1, JMatrix.MultiplyTransposed(body1.InverseInertiaWorld, cr1)) +\n                             body2.InverseMass * JMatrix.Identity +\n                             JMatrix.Multiply(cr2, JMatrix.MultiplyTransposed(body2.InverseInertiaWorld, cr2));\n\n        Real softness = data.Softness * idt;\n\n        data.EffectiveMass.M11 += softness;\n        data.EffectiveMass.M22 += softness;\n        data.EffectiveMass.M33 += softness;\n\n        JMatrix.Inverse(data.EffectiveMass, out data.EffectiveMass);\n\n        data.Bias = (p2 - p1) * data.BiasFactor * idt;\n\n        JVector acc = data.AccumulatedImpulse;\n\n        body1.Velocity -= body1.InverseMass * acc;\n        body1.AngularVelocity -= JVector.Transform(JVector.Transform(acc, cr1), body1.InverseInertiaWorld);\n\n        body2.Velocity += body2.InverseMass * acc;\n        body2.AngularVelocity += JVector.Transform(JVector.Transform(acc, cr2), body2.InverseInertiaWorld);\n    }\n\n    /// <summary>\n    /// Gets or sets the softness (compliance) of the constraint.\n    /// </summary>\n    /// <value>\n    /// Default is 0. Higher values allow more positional error but improve stability.\n    /// Scaled by inverse timestep during solving.\n    /// </value>\n    public Real Softness\n    {\n        get => Data.Softness;\n        set => Data.Softness = value;\n    }\n\n    /// <summary>\n    /// Gets or sets the bias factor controlling how aggressively positional error is corrected.\n    /// </summary>\n    /// <value>\n    /// Default is 0.2. Range [0, 1]. Higher values correct errors faster but may cause instability.\n    /// </value>\n    public Real Bias\n    {\n        get => Data.BiasFactor;\n        set => Data.BiasFactor = value;\n    }\n\n    /// <summary>\n    /// Gets the accumulated impulse applied by this constraint during the last step.\n    /// </summary>\n    public JVector Impulse => Data.AccumulatedImpulse;\n\n    public static void IterateBallSocket(ref ConstraintData constraint, Real idt)\n    {\n        ref var data = ref Unsafe.As<ConstraintData, BallSocketData>(ref constraint);\n        ref RigidBodyData body1 = ref constraint.Body1.Data;\n        ref RigidBodyData body2 = ref constraint.Body2.Data;\n\n        JMatrix cr1 = JMatrix.CreateCrossProduct(data.R1);\n        JMatrix cr2 = JMatrix.CreateCrossProduct(data.R2);\n\n        JVector softnessVector = data.AccumulatedImpulse * data.Softness * idt;\n\n        JVector jv = -body1.Velocity + JVector.Transform(body1.AngularVelocity, cr1) + body2.Velocity -\n                     JVector.Transform(body2.AngularVelocity, cr2);\n\n        JVector lambda = -(Real)1.0 * JVector.Transform(jv + data.Bias + softnessVector, data.EffectiveMass);\n\n        data.AccumulatedImpulse += lambda;\n\n        body1.Velocity -= body1.InverseMass * lambda;\n        body1.AngularVelocity -= JVector.Transform(JVector.Transform(lambda, cr1), body1.InverseInertiaWorld);\n\n        body2.Velocity += body2.InverseMass * lambda;\n        body2.AngularVelocity += JVector.Transform(JVector.Transform(lambda, cr2), body2.InverseInertiaWorld);\n    }\n\n    public override void DebugDraw(IDebugDrawer drawer)\n    {\n        ref BallSocketData data = ref Data;\n        ref RigidBodyData body1 = ref data.Body1.Data;\n        ref RigidBodyData body2 = ref data.Body2.Data;\n\n        JVector.Transform(data.LocalAnchor1, body1.Orientation, out JVector r1);\n        JVector.Transform(data.LocalAnchor2, body2.Orientation, out JVector r2);\n\n        JVector p1 = body1.Position + r1;\n        JVector p2 = body2.Position + r2;\n\n        drawer.DrawSegment(body1.Position, p1);\n        drawer.DrawSegment(body2.Position, p2);\n        drawer.DrawPoint(p1);\n        drawer.DrawPoint(p2);\n    }\n}\n"
  },
  {
    "path": "src/Jitter2/Dynamics/Constraints/ConeLimit.cs",
    "content": "/*\n * Jitter2 Physics Library\n * (c) Thorben Linneweber and contributors\n * SPDX-License-Identifier: MIT\n */\n\nusing System;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\nusing Jitter2.LinearMath;\nusing Jitter2.Unmanaged;\n\nnamespace Jitter2.Dynamics.Constraints;\n\n/// <summary>\n/// Limits the relative tilt between two bodies, removing one angular degree of freedom when active.\n/// </summary>\npublic unsafe class ConeLimit : Constraint<ConeLimit.ConeLimitData>\n{\n    [StructLayout(LayoutKind.Sequential)]\n    public struct ConeLimitData\n    {\n        internal int _internal;\n        internal uint DispatchId;\n        internal ulong ConstraintId;\n\n        public JHandle<RigidBodyData> Body1;\n        public JHandle<RigidBodyData> Body2;\n\n        public JVector LocalAxis1, LocalAxis2;\n\n        public Real BiasFactor;\n        public Real Softness;\n\n        public Real EffectiveMass;\n        public Real AccumulatedImpulse;\n        public Real Bias;\n\n        public Real LimitLow;\n        public Real LimitHigh;\n\n        public short Clamp;\n\n        public MemoryHelper.MemBlock6Real J0;\n    }\n\n    private static readonly uint RegisteredDispatchId =\n        RegisterFullConstraint(&PrepareForIterationConeLimit, &IterateConeLimit);\n\n\n    protected override void Create()\n    {\n        DispatchId = RegisteredDispatchId;\n        base.Create();\n    }\n\n    /// <inheritdoc />\n    public override void ResetWarmStart() => Data.AccumulatedImpulse = (Real)0.0;\n\n    /// <summary>\n    /// Initializes the cone limit using two world-space axes and an angular range.\n    /// </summary>\n    /// <param name=\"axisBody1\">The reference axis for body 1 in world space.</param>\n    /// <param name=\"axisBody2\">The reference axis for body 2 in world space.</param>\n    /// <param name=\"limit\">The minimum and maximum allowed tilt angles.</param>\n    /// <remarks>\n    /// Each axis is stored as a local axis on the corresponding body. The constraint measures\n    /// the angle between these axes and restricts it to the given range.\n    /// Default values: <see cref=\"Softness\"/> = <see cref=\"Constraint.DefaultAngularSoftness\"/>, <see cref=\"Bias\"/> = <see cref=\"Constraint.DefaultAngularBias\"/>.\n    /// </remarks>\n    public void Initialize(JVector axisBody1, JVector axisBody2, AngularLimit limit)\n    {\n        VerifyNotZero();\n        ArgumentOutOfRangeException.ThrowIfNegative((Real)limit.From);\n        ArgumentOutOfRangeException.ThrowIfGreaterThan((Real)limit.To, MathR.PI);\n        ArgumentOutOfRangeException.ThrowIfLessThan((Real)limit.To, (Real)limit.From);\n\n        ref ConeLimitData data = ref Data;\n        ref RigidBodyData body1 = ref data.Body1.Data;\n        ref RigidBodyData body2 = ref data.Body2.Data;\n\n        JVector.NormalizeInPlace(ref axisBody1);\n        JVector.NormalizeInPlace(ref axisBody2);\n\n        JVector.ConjugatedTransform(axisBody1, body1.Orientation, out data.LocalAxis1);\n        JVector.ConjugatedTransform(axisBody2, body2.Orientation, out data.LocalAxis2);\n\n        data.Softness = Constraint.DefaultAngularSoftness;\n        data.BiasFactor = Constraint.DefaultAngularBias;\n\n        Real lower = (Real)limit.From;\n        Real upper = (Real)limit.To;\n\n        data.LimitLow = StableMath.Cos(lower);\n        data.LimitHigh = StableMath.Cos(upper);\n    }\n\n    /// <summary>\n    /// Initializes the cone limit using a world-space axis and an angular range.\n    /// </summary>\n    /// <param name=\"axis\">The reference axis in world space for the initial pose.</param>\n    /// <param name=\"limit\">The minimum and maximum allowed tilt angles.</param>\n    /// <remarks>\n    /// Stores the axis as a local axis on each body. The constraint measures the angle between\n    /// these axes and restricts it to the given range.\n    /// Default values: <see cref=\"Softness\"/> = <see cref=\"Constraint.DefaultAngularSoftness\"/>, <see cref=\"Bias\"/> = <see cref=\"Constraint.DefaultAngularBias\"/>.\n    /// </remarks>\n    public void Initialize(JVector axis, AngularLimit limit)\n    {\n        if (limit.From > (JAngle)0.0)\n        {\n            Logger.Warning(\n                \"{0}.{1}(): The lower limit is larger 0 but this overload initializes both body axes \" +\n                \"from the same world-space axis (rest angle = 0). Use the two-axis overload \" +\n                \"if you need a non-zero minimum angle.\",\n                nameof(ConeLimit),\n                nameof(Initialize));\n        }\n\n        // Same axis for both bodies → rest angle is zero.\n        Initialize(axis, axis, limit);\n    }\n\n    /// <summary>\n    /// Gets the current angle between the two body axes.\n    /// </summary>\n    public JAngle Angle\n    {\n        get\n        {\n            ref ConeLimitData data = ref Data;\n\n            ref RigidBodyData body1 = ref data.Body1.Data;\n            ref RigidBodyData body2 = ref data.Body2.Data;\n\n            JVector.Transform(data.LocalAxis1, body1.Orientation, out JVector a1);\n            JVector.Transform(data.LocalAxis2, body2.Orientation, out JVector a2);\n\n            return (JAngle)StableMath.Acos(JVector.Dot(a1, a2));\n        }\n    }\n\n    /// <summary>\n    /// Gets or sets the reference axis of body 1 in world space.\n    /// </summary>\n    public JVector AxisBody1\n    {\n        get\n        {\n            ref ConeLimitData data = ref Data;\n            ref RigidBodyData body1 = ref data.Body1.Data;\n\n            JVector.Transform(data.LocalAxis1, body1.Orientation, out JVector axis);\n            return axis;\n        }\n        set\n        {\n            ref ConeLimitData data = ref Data;\n            ref RigidBodyData body1 = ref data.Body1.Data;\n\n            JVector normalized = value;\n            JVector.NormalizeInPlace(ref normalized);\n\n            JVector.ConjugatedTransform(normalized, body1.Orientation, out data.LocalAxis1);\n        }\n    }\n\n    /// <summary>\n    /// Gets or sets the reference axis of body 2 in world space.\n    /// </summary>\n    public JVector AxisBody2\n    {\n        get\n        {\n            ref ConeLimitData data = ref Data;\n            ref RigidBodyData body2 = ref data.Body2.Data;\n\n            JVector.Transform(data.LocalAxis2, body2.Orientation, out JVector axis);\n            return axis;\n        }\n        set\n        {\n            ref ConeLimitData data = ref Data;\n            ref RigidBodyData body2 = ref data.Body2.Data;\n\n            JVector normalized = value;\n            JVector.NormalizeInPlace(ref normalized);\n\n            JVector.ConjugatedTransform(normalized, body2.Orientation, out data.LocalAxis2);\n        }\n    }\n\n    /// <summary>\n    /// Gets or sets the angular limit of the cone.\n    /// </summary>\n    public AngularLimit Limit\n    {\n        get\n        {\n            ref ConeLimitData data = ref Data;\n            return new AngularLimit((JAngle)StableMath.Acos(data.LimitLow),\n                (JAngle)StableMath.Acos(data.LimitHigh));\n        }\n        set\n        {\n            ArgumentOutOfRangeException.ThrowIfNegative((Real)value.From);\n            ArgumentOutOfRangeException.ThrowIfGreaterThan((Real)value.To, MathR.PI);\n            ArgumentOutOfRangeException.ThrowIfLessThan((Real)value.To, (Real)value.From);\n\n            ref ConeLimitData data = ref Data;\n            data.LimitLow = StableMath.Cos((Real)value.From);\n            data.LimitHigh = StableMath.Cos((Real)value.To);\n        }\n    }\n\n    public static void PrepareForIterationConeLimit(ref ConstraintData constraint, Real idt)\n    {\n        ref var data = ref Unsafe.As<ConstraintData, ConeLimitData>(ref constraint);\n\n        ref RigidBodyData body1 = ref data.Body1.Data;\n        ref RigidBodyData body2 = ref data.Body2.Data;\n\n        JVector.Transform(data.LocalAxis1, body1.Orientation, out JVector a1);\n        JVector.Transform(data.LocalAxis2, body2.Orientation, out JVector a2);\n\n        var jacobian = new Span<JVector>(Unsafe.AsPointer(ref data.J0), 2);\n\n        jacobian[0] = JVector.Cross(a2, a1);\n        jacobian[1] = JVector.Cross(a1, a2);\n\n        data.Clamp = 0;\n\n        Real error = JVector.Dot(a1, a2);\n\n        if (error < data.LimitHigh)\n        {\n            data.Clamp = 1;\n            error -= data.LimitHigh;\n        }\n        else if (error > data.LimitLow)\n        {\n            data.Clamp = 2;\n            error -= data.LimitLow;\n        }\n        else\n        {\n            data.AccumulatedImpulse = (Real)0.0;\n            return;\n        }\n\n        data.EffectiveMass = JVector.Transform(jacobian[0], body1.InverseInertiaWorld) * jacobian[0] +\n                             JVector.Transform(jacobian[1], body2.InverseInertiaWorld) * jacobian[1];\n\n        data.EffectiveMass += data.Softness * idt;\n\n        data.EffectiveMass = (Real)1.0 / data.EffectiveMass;\n\n        data.Bias = -error * data.BiasFactor * idt;\n\n        body1.AngularVelocity +=\n            JVector.Transform(data.AccumulatedImpulse * jacobian[0], body1.InverseInertiaWorld);\n\n        body2.AngularVelocity +=\n            JVector.Transform(data.AccumulatedImpulse * jacobian[1], body2.InverseInertiaWorld);\n    }\n\n    /// <summary>\n    /// Gets or sets the softness (compliance) of the constraint.\n    /// </summary>\n    /// <value>\n    /// Default is 0.001. Higher values allow more angular error but improve stability.\n    /// </value>\n    public Real Softness\n    {\n        get => Data.Softness;\n        set => Data.Softness = value;\n    }\n\n    /// <summary>\n    /// Gets or sets the bias factor controlling how aggressively angular error is corrected.\n    /// </summary>\n    /// <value>\n    /// Default is 0.2. Range [0, 1]. Higher values correct errors faster but may cause instability.\n    /// </value>\n    public Real Bias\n    {\n        get => Data.BiasFactor;\n        set => Data.BiasFactor = value;\n    }\n\n    /// <summary>\n    /// Gets the accumulated impulse applied by this constraint during the last step.\n    /// </summary>\n    public Real Impulse => Data.AccumulatedImpulse;\n\n    public static void IterateConeLimit(ref ConstraintData constraint, Real idt)\n    {\n        ref var data = ref Unsafe.As<ConstraintData, ConeLimitData>(ref constraint);\n        ref RigidBodyData body1 = ref constraint.Body1.Data;\n        ref RigidBodyData body2 = ref constraint.Body2.Data;\n\n        if (data.Clamp == 0) return;\n\n        var jacobian = new Span<JVector>(Unsafe.AsPointer(ref data.J0), 2);\n\n        Real jv =\n            body1.AngularVelocity * jacobian[0] +\n            body2.AngularVelocity * jacobian[1];\n\n        Real softnessScalar = data.AccumulatedImpulse * data.Softness * idt;\n\n        Real lambda = -data.EffectiveMass * (jv + data.Bias + softnessScalar);\n\n        Real oldAccumulated = data.AccumulatedImpulse;\n\n        data.AccumulatedImpulse += lambda;\n\n        if (data.Clamp == 1)\n        {\n            data.AccumulatedImpulse = MathR.Min(data.AccumulatedImpulse, (Real)0.0);\n        }\n        else\n        {\n            data.AccumulatedImpulse = MathR.Max(data.AccumulatedImpulse, (Real)0.0);\n        }\n\n        lambda = data.AccumulatedImpulse - oldAccumulated;\n\n        body1.AngularVelocity += JVector.Transform(lambda * jacobian[0], body1.InverseInertiaWorld);\n        body2.AngularVelocity += JVector.Transform(lambda * jacobian[1], body2.InverseInertiaWorld);\n    }\n\n    public override void DebugDraw(IDebugDrawer drawer)\n    {\n        ref ConeLimitData data = ref Data;\n        ref RigidBodyData body1 = ref data.Body1.Data;\n        ref RigidBodyData body2 = ref data.Body2.Data;\n\n        JVector.Transform(data.LocalAxis1, body1.Orientation, out JVector axis1);\n        JVector.Transform(data.LocalAxis2, body2.Orientation, out JVector axis2);\n\n        const Real axisLength = (Real)0.5;\n        drawer.DrawSegment(body1.Position, body1.Position + axis1 * axisLength);\n        drawer.DrawSegment(body2.Position, body2.Position + axis2 * axisLength);\n    }\n}\n"
  },
  {
    "path": "src/Jitter2/Dynamics/Constraints/Constraint.cs",
    "content": "/*\n * Jitter2 Physics Library\n * (c) Thorben Linneweber and contributors\n * SPDX-License-Identifier: MIT\n */\n\nusing System;\nusing System.Collections.Generic;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\nusing Jitter2.Unmanaged;\n\nnamespace Jitter2.Dynamics.Constraints;\n\n/// <summary>\n/// Low-level data for constraints that fit within <see cref=\"Precision.ConstraintSizeSmall\"/> bytes.\n/// </summary>\n/// <remarks>\n/// <para>\n/// This structure is stored in unmanaged memory and accessed via <see cref=\"Constraint.SmallHandle\"/>.\n/// It contains a solver dispatch id, a stable constraint identifier, and handles to the connected bodies.\n/// </para>\n/// <para>\n/// The data is valid only while the constraint is registered with the world. Do not cache references\n/// across simulation steps. Not safe to access concurrently with <see cref=\"World.Step(Real, bool)\"/>.\n/// </para>\n/// </remarks>\n[StructLayout(LayoutKind.Sequential, Size = Precision.ConstraintSizeSmall)]\npublic unsafe struct SmallConstraintData\n{\n    internal int _internal;\n    /// <summary>Identifier of the registered solver dispatch pair for this constraint.</summary>\n    public uint DispatchId;\n    /// <summary>Stable creation-order identifier used for deterministic sorting.</summary>\n    public ulong ConstraintId;\n\n    /// <summary>Handle to the first body's simulation data.</summary>\n    public JHandle<RigidBodyData> Body1;\n    /// <summary>Handle to the second body's simulation data.</summary>\n    public JHandle<RigidBodyData> Body2;\n\n    /// <summary>Gets whether this constraint is enabled.</summary>\n    public readonly bool IsEnabled => DispatchId != 0;\n\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public readonly void PrepareForIteration(ref SmallConstraintData constraint, Real idt)\n    {\n        ref readonly var dispatch = ref ConstraintDispatchTable.Get(DispatchId);\n        ((delegate*<ref SmallConstraintData, Real, void>)dispatch.Prepare)(ref constraint, idt);\n    }\n\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public readonly void Iterate(ref SmallConstraintData constraint, Real idt)\n    {\n        ref readonly var dispatch = ref ConstraintDispatchTable.Get(DispatchId);\n        ((delegate*<ref SmallConstraintData, Real, void>)dispatch.Iterate)(ref constraint, idt);\n    }\n}\n\n/// <summary>\n/// Low-level data for constraints, stored in unmanaged memory.\n/// </summary>\n/// <remarks>\n/// <para>\n/// This structure is stored in unmanaged memory and accessed via <see cref=\"Constraint.Handle\"/>.\n/// It contains a solver dispatch id, a stable constraint identifier, and handles to the connected bodies.\n/// </para>\n/// <para>\n/// The data is valid only while the constraint is registered with the world. Do not cache references\n/// across simulation steps. Not safe to access concurrently with <see cref=\"World.Step(Real, bool)\"/>.\n/// </para>\n/// </remarks>\n[StructLayout(LayoutKind.Sequential, Size = Precision.ConstraintSizeFull)]\npublic unsafe struct ConstraintData\n{\n    internal int _internal;\n    /// <summary>Identifier of the registered solver dispatch pair for this constraint.</summary>\n    public uint DispatchId;\n    /// <summary>Stable creation-order identifier used for deterministic sorting.</summary>\n    public ulong ConstraintId;\n\n    /// <summary>Handle to the first body's simulation data.</summary>\n    public JHandle<RigidBodyData> Body1;\n    /// <summary>Handle to the second body's simulation data.</summary>\n    public JHandle<RigidBodyData> Body2;\n\n    /// <summary>Gets whether this constraint is enabled.</summary>\n    public readonly bool IsEnabled => DispatchId != 0;\n\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public readonly void PrepareForIteration(ref ConstraintData constraint, Real idt)\n    {\n        ref readonly var dispatch = ref ConstraintDispatchTable.Get(DispatchId);\n        ((delegate*<ref ConstraintData, Real, void>)dispatch.Prepare)(ref constraint, idt);\n    }\n\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public readonly void Iterate(ref ConstraintData constraint, Real idt)\n    {\n        ref readonly var dispatch = ref ConstraintDispatchTable.Get(DispatchId);\n        ((delegate*<ref ConstraintData, Real, void>)dispatch.Iterate)(ref constraint, idt);\n    }\n}\n\ninternal static unsafe class ConstraintDispatchTable\n{\n    internal readonly struct Entry(nint prepare, nint iterate)\n    {\n        public readonly nint Prepare = prepare;\n        public readonly nint Iterate = iterate;\n    }\n\n    private static readonly object Sync = new();\n    private static readonly List<Entry> Entries = [default];\n\n    public static uint Register(\n        delegate*<ref ConstraintData, Real, void> prepare,\n        delegate*<ref ConstraintData, Real, void> iterate)\n    {\n        if (prepare == null) throw new ArgumentNullException(nameof(prepare));\n        if (iterate == null) throw new ArgumentNullException(nameof(iterate));\n\n        lock (Sync)\n        {\n            if (Entries.Count == int.MaxValue)\n            {\n                throw new InvalidOperationException(\"Too many registered constraint dispatch entries.\");\n            }\n\n            Entries.Add(new Entry((nint)prepare, (nint)iterate));\n            return (uint)(Entries.Count - 1);\n        }\n    }\n\n    public static uint Register(\n        delegate*<ref SmallConstraintData, Real, void> prepare,\n        delegate*<ref SmallConstraintData, Real, void> iterate)\n    {\n        if (prepare == null) throw new ArgumentNullException(nameof(prepare));\n        if (iterate == null) throw new ArgumentNullException(nameof(iterate));\n\n        lock (Sync)\n        {\n            if (Entries.Count == int.MaxValue)\n            {\n                throw new InvalidOperationException(\"Too many registered constraint dispatch entries.\");\n            }\n\n            Entries.Add(new Entry((nint)prepare, (nint)iterate));\n            return (uint)(Entries.Count - 1);\n        }\n    }\n\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static ref readonly Entry Get(uint dispatchId)\n    {\n        return ref CollectionsMarshal.AsSpan(Entries)[(int)dispatchId];\n    }\n}\n\n/// <summary>\n/// Generic base class for constraints that store custom data of type <typeparamref name=\"T\"/>.\n/// </summary>\n/// <typeparam name=\"T\">\n/// The unmanaged data structure containing constraint-specific state. Must fit within\n/// <see cref=\"ConstraintData\"/> (i.e., <see cref=\"Precision.ConstraintSizeFull\"/> bytes).\n/// </typeparam>\n/// <remarks>\n/// Derive from this class to create constraints with custom data layouts. The <see cref=\"Data\"/>\n/// property provides typed access to the constraint's unmanaged memory.\n/// </remarks>\npublic abstract class Constraint<T> : Constraint where T : unmanaged\n{\n    /// <summary>\n    /// Gets a reference to the constraint's typed data stored in unmanaged memory.\n    /// </summary>\n    public ref T Data => ref JHandle<ConstraintData>.AsHandle<T>(Handle).Data;\n\n    /// <inheritdoc />\n    public override unsafe bool IsSmallConstraint => sizeof(T) <= sizeof(SmallConstraintData);\n\n    /// <inheritdoc />\n    protected override void Create() => Constraint.CheckDataSize<T>();\n}\n\n/// <summary>\n/// Base class for constraints that connect two rigid bodies and restrict their relative motion.\n/// </summary>\npublic abstract class Constraint : IDebugDrawable\n{\n    /// <summary>Default softness (compliance) for angular constraints.</summary>\n    public const Real DefaultAngularSoftness = (Real)0.001;\n\n    /// <summary>Default bias factor for angular error correction.</summary>\n    public const Real DefaultAngularBias = (Real)0.2;\n\n    /// <summary>Default softness for angular limit enforcement.</summary>\n    public const Real DefaultAngularLimitSoftness = (Real)0.001;\n\n    /// <summary>Default bias factor for angular limit correction.</summary>\n    public const Real DefaultAngularLimitBias = (Real)0.1;\n\n    /// <summary>Default softness (compliance) for linear constraints.</summary>\n    public const Real DefaultLinearSoftness = (Real)0.00001;\n\n    /// <summary>Default bias factor for linear error correction.</summary>\n    public const Real DefaultLinearBias = (Real)0.2;\n\n    /// <summary>Default softness for linear limit enforcement.</summary>\n    public const Real DefaultLinearLimitSoftness = (Real)0.0001;\n\n    /// <summary>Default bias factor for linear limit correction.</summary>\n    public const Real DefaultLinearLimitBias = (Real)0.2;\n\n\n    /// <summary>Gets the first rigid body connected by this constraint.</summary>\n    public RigidBody Body1 { private set; get; } = null!;\n\n    /// <summary>Gets the second rigid body connected by this constraint.</summary>\n    public RigidBody Body2 { private set; get; } = null!;\n\n    /// <summary>Gets whether this constraint uses the smaller data layout.</summary>\n    public virtual bool IsSmallConstraint { get; } = false;\n\n    /// <summary>\n    /// A handle for accessing the raw constraint data.\n    /// </summary>\n    public JHandle<ConstraintData> Handle { internal set; get; }\n\n    /// <summary>\n    /// Gets a handle to the constraint data reinterpreted as <see cref=\"SmallConstraintData\"/>.\n    /// </summary>\n    public JHandle<SmallConstraintData> SmallHandle => JHandle<ConstraintData>.AsHandle<SmallConstraintData>(Handle);\n\n    /// <summary>\n    /// Checks that the constraint data type fits within <see cref=\"ConstraintData\"/>.\n    /// </summary>\n    /// <typeparam name=\"T\">The constraint-specific data type.</typeparam>\n    /// <exception cref=\"InvalidOperationException\">Thrown if the data type is too large.</exception>\n    protected static unsafe void CheckDataSize<T>() where T : unmanaged\n    {\n        if (sizeof(T) > sizeof(ConstraintData))\n        {\n            throw new InvalidOperationException(\"The size of the constraint data is too large.\");\n        }\n    }\n\n    /// <summary>\n    /// Verifies that this constraint has been properly created via the World class.\n    /// </summary>\n    /// <exception cref=\"InvalidOperationException\">\n    /// Thrown if the constraint was instantiated directly instead of through\n    /// <see cref=\"World.CreateConstraint{T}(RigidBody, RigidBody)\"/>.\n    /// </exception>\n    protected void VerifyNotZero()\n    {\n        if (Handle.IsZero)\n        {\n            throw new InvalidOperationException(\n                $\"The constraint has not been created by the world. \" +\n                $\"Use World.CreateConstraint<{GetType().Name}>() to create constraints.\");\n        }\n    }\n\n    /// <summary>\n    /// Sets the solver dispatch id used by this instance. Override this in derived classes\n    /// to assign the correct registered solver pair. The id is later written into the\n    /// unmanaged header when the constraint is enabled.\n    /// </summary>\n    protected virtual void Create()\n    {\n    }\n\n    /// <summary>\n    /// Resets the cached warm-start state used by the solver for this constraint.\n    /// </summary>\n    /// <remarks>\n    /// This clears only persistent solver impulses. Constraint configuration remains unchanged.\n    /// Useful after restoring snapshots or other discontinuous state changes where preserving\n    /// warm-starting is undesirable.\n    /// </remarks>\n    public virtual void ResetWarmStart()\n    {\n    }\n\n    protected uint DispatchId { get; set; }\n\n    protected static unsafe uint RegisterFullConstraint(\n        delegate*<ref ConstraintData, Real, void> prepare,\n        delegate*<ref ConstraintData, Real, void> iterate)\n    {\n        return ConstraintDispatchTable.Register(prepare, iterate);\n    }\n\n    protected static unsafe uint RegisterSmallConstraint(\n        delegate*<ref SmallConstraintData, Real, void> prepare,\n        delegate*<ref SmallConstraintData, Real, void> iterate)\n    {\n        return ConstraintDispatchTable.Register(prepare, iterate);\n    }\n\n    /// <summary>\n    /// Gets or sets whether this constraint is enabled.\n    /// </summary>\n    /// <remarks>\n    /// Use <see cref=\"World.Remove(Constraint)\"/> for permanent removal.\n    /// </remarks>\n    public unsafe bool IsEnabled\n    {\n        get => Handle.Data.DispatchId != 0;\n        set\n        {\n            if (value && DispatchId == 0)\n            {\n                throw new InvalidOperationException(\n                    $\"The constraint has no registered solver dispatch. \" +\n                    $\"Set {nameof(DispatchId)} in {nameof(Create)}().\");\n            }\n\n            Handle.Data.DispatchId = value ? DispatchId : 0u;\n        }\n    }\n\n    internal void Create(JHandle<SmallConstraintData> handle, RigidBody body1, RigidBody body2)\n    {\n        var cd = JHandle<SmallConstraintData>.AsHandle<ConstraintData>(handle);\n        Create(cd, body1, body2);\n    }\n\n    internal void Create(JHandle<ConstraintData> handle, RigidBody body1, RigidBody body2)\n    {\n        Body1 = body1;\n        Body2 = body2;\n        Handle = handle;\n\n        handle.Data.Body1 = body1.Handle;\n        handle.Data.Body2 = body2.Handle;\n\n        Create();\n\n        IsEnabled = true;\n    }\n\n    /// <summary>\n    /// Draws a debug visualization of this constraint.\n    /// </summary>\n    /// <param name=\"drawer\">The debug drawer to receive visualization primitives.</param>\n    /// <exception cref=\"NotImplementedException\">Thrown if the derived class does not override this method.</exception>\n    public virtual void DebugDraw(IDebugDrawer drawer)\n    {\n        throw new NotImplementedException();\n    }\n}\n"
  },
  {
    "path": "src/Jitter2/Dynamics/Constraints/DistanceLimit.cs",
    "content": "/*\n * Jitter2 Physics Library\n * (c) Thorben Linneweber and contributors\n * SPDX-License-Identifier: MIT\n */\n\nusing System;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\nusing Jitter2.LinearMath;\nusing Jitter2.Unmanaged;\n\nnamespace Jitter2.Dynamics.Constraints;\n\n/// <summary>\n/// Constrains the distance between a fixed point in the reference frame of one body and a fixed\n/// point in the reference frame of another body. This constraint removes one translational degree\n/// of freedom. For a distance of zero, use the <see cref=\"BallSocket\"/> constraint.\n/// </summary>\npublic unsafe class DistanceLimit : Constraint<DistanceLimit.DistanceLimitData>\n{\n    [StructLayout(LayoutKind.Sequential)]\n    public struct DistanceLimitData\n    {\n        internal int _internal;\n        internal uint DispatchId;\n        internal ulong ConstraintId;\n\n        public JHandle<RigidBodyData> Body1;\n        public JHandle<RigidBodyData> Body2;\n\n        public JVector LocalAnchor1;\n        public JVector LocalAnchor2;\n\n        public Real BiasFactor;\n        public Real Softness;\n        public Real Distance;\n\n        public Real LimitMin;\n        public Real LimitMax;\n\n        public Real EffectiveMass;\n        public Real AccumulatedImpulse;\n        public Real Bias;\n\n        public MemoryHelper.MemBlock12Real J0;\n\n        public short Clamp;\n    }\n\n    private static readonly uint RegisteredDispatchId =\n        RegisterFullConstraint(&PrepareForIterationFixedAngle, &IterateFixedAngle);\n\n\n    protected override void Create()\n    {\n        DispatchId = RegisteredDispatchId;\n        base.Create();\n    }\n\n    /// <inheritdoc />\n    public override void ResetWarmStart() => Data.AccumulatedImpulse = (Real)0.0;\n\n    /// <summary>\n    /// Initializes the constraint with a fixed distance between anchor points.\n    /// </summary>\n    /// <param name=\"anchor1\">Anchor point on the first body in world space.</param>\n    /// <param name=\"anchor2\">Anchor point on the second body in world space.</param>\n    public void Initialize(JVector anchor1, JVector anchor2)\n    {\n        Initialize(anchor1, anchor2, LinearLimit.Fixed);\n    }\n\n    /// <summary>\n    /// Initializes the constraint with distance limits between anchor points.\n    /// </summary>\n    /// <param name=\"anchor1\">Anchor point on the first body in world space.</param>\n    /// <param name=\"anchor2\">Anchor point on the second body in world space.</param>\n    /// <param name=\"limit\">The allowed distance range between anchor points.</param>\n    /// <remarks>\n    /// Computes local anchor points and the initial distance from current poses.\n    /// Default values: <see cref=\"Softness\"/> = <see cref=\"Constraint.DefaultLinearSoftness\"/>, <see cref=\"Bias\"/> = <see cref=\"Constraint.DefaultLinearBias\"/>.\n    /// </remarks>\n    public void Initialize(JVector anchor1, JVector anchor2, LinearLimit limit)\n    {\n        VerifyNotZero();\n        ref DistanceLimitData data = ref Data;\n        ref RigidBodyData body1 = ref data.Body1.Data;\n        ref RigidBodyData body2 = ref data.Body2.Data;\n\n        JVector.Subtract(anchor1, body1.Position, out data.LocalAnchor1);\n        JVector.Subtract(anchor2, body2.Position, out data.LocalAnchor2);\n\n        JVector.ConjugatedTransform(data.LocalAnchor1, body1.Orientation, out data.LocalAnchor1);\n        JVector.ConjugatedTransform(data.LocalAnchor2, body2.Orientation, out data.LocalAnchor2);\n\n        data.Softness = Constraint.DefaultLinearSoftness;\n        data.BiasFactor = Constraint.DefaultLinearBias;\n        data.Distance = (anchor2 - anchor1).Length();\n\n        (data.LimitMin, data.LimitMax) = limit;\n    }\n\n    /// <summary>\n    /// Gets or sets the anchor point on the first rigid body in world space. The anchor point is\n    /// fixed in the local reference frame of the first body.\n    /// </summary>\n    [ReferenceFrame(ReferenceFrame.World)]\n    public JVector Anchor1\n    {\n        set\n        {\n            ref DistanceLimitData data = ref Data;\n            ref RigidBodyData body1 = ref data.Body1.Data;\n            JVector.Subtract(value, body1.Position, out data.LocalAnchor1);\n            JVector.ConjugatedTransform(data.LocalAnchor1, body1.Orientation, out data.LocalAnchor1);\n        }\n        get\n        {\n            ref DistanceLimitData data = ref Data;\n            ref RigidBodyData body1 = ref data.Body1.Data;\n            JVector.Transform(data.LocalAnchor1, body1.Orientation, out JVector result);\n            JVector.Add(result, body1.Position, out result);\n            return result;\n        }\n    }\n\n    /// <summary>\n    /// Gets or sets the anchor point on the second rigid body in world space. The anchor point is\n    /// fixed in the local reference frame of the second body.\n    /// </summary>\n    [ReferenceFrame(ReferenceFrame.World)]\n    public JVector Anchor2\n    {\n        set\n        {\n            ref DistanceLimitData data = ref Data;\n            ref RigidBodyData body2 = ref data.Body2.Data;\n            JVector.Subtract(value, body2.Position, out data.LocalAnchor2);\n            JVector.ConjugatedTransform(data.LocalAnchor2, body2.Orientation, out data.LocalAnchor2);\n        }\n        get\n        {\n            ref DistanceLimitData data = ref Data;\n            ref RigidBodyData body2 = ref data.Body2.Data;\n            JVector.Transform(data.LocalAnchor2, body2.Orientation, out JVector result);\n            JVector.Add(result, body2.Position, out result);\n            return result;\n        }\n    }\n\n    /// <summary>\n    /// Gets or sets the target distance between anchor points.\n    /// </summary>\n    /// <value>Set during initialization from the initial anchor separation.</value>\n    public Real TargetDistance\n    {\n        set\n        {\n            ref DistanceLimitData data = ref Data;\n            data.Distance = value;\n        }\n        get => Data.Distance;\n    }\n\n    /// <summary>\n    /// Gets the current distance between anchor points in world space.\n    /// </summary>\n    public Real Distance\n    {\n        get\n        {\n            ref DistanceLimitData data = ref Data;\n            ref RigidBodyData body1 = ref data.Body1.Data;\n            ref RigidBodyData body2 = ref data.Body2.Data;\n\n            JVector.Transform(data.LocalAnchor1, body1.Orientation, out JVector r1);\n            JVector.Transform(data.LocalAnchor2, body2.Orientation, out JVector r2);\n\n            JVector.Add(body1.Position, r1, out JVector p1);\n            JVector.Add(body2.Position, r2, out JVector p2);\n\n            JVector.Subtract(p2, p1, out JVector dp);\n\n            return dp.Length();\n        }\n    }\n\n    public static void PrepareForIterationFixedAngle(ref ConstraintData constraint, Real idt)\n    {\n        ref var data = ref Unsafe.As<ConstraintData, DistanceLimitData>(ref constraint);\n        ref RigidBodyData body1 = ref data.Body1.Data;\n        ref RigidBodyData body2 = ref data.Body2.Data;\n\n        JVector.Transform(data.LocalAnchor1, body1.Orientation, out JVector r1);\n        JVector.Transform(data.LocalAnchor2, body2.Orientation, out JVector r2);\n\n        JVector.Add(body1.Position, r1, out JVector p1);\n        JVector.Add(body2.Position, r2, out JVector p2);\n\n        JVector.Subtract(p2, p1, out JVector dp);\n\n        Real error = dp.Length() - data.Distance;\n\n        data.Clamp = 0;\n\n        if (error >= data.LimitMax)\n        {\n            data.Clamp = 1;\n            error -= data.LimitMax;\n        }\n        else if (error < data.LimitMin)\n        {\n            data.Clamp = 2;\n            error -= data.LimitMin;\n        }\n        else\n        {\n            data.AccumulatedImpulse = (Real)0.0;\n            return;\n        }\n\n        JVector n = p2 - p1;\n        if (n.LengthSquared() > (Real)1e-12) JVector.NormalizeInPlace(ref n);\n\n        var jacobian = new Span<JVector>(Unsafe.AsPointer(ref data.J0), 4);\n\n        jacobian[0] = -(Real)1.0 * n;\n        jacobian[1] = -(Real)1.0 * (r1 % n);\n        jacobian[2] = (Real)1.0 * n;\n        jacobian[3] = r2 % n;\n\n        data.EffectiveMass = body1.InverseMass +\n                             body2.InverseMass +\n                             JVector.Transform(jacobian[1], body1.InverseInertiaWorld) * jacobian[1] +\n                             JVector.Transform(jacobian[3], body2.InverseInertiaWorld) * jacobian[3];\n\n        data.EffectiveMass += data.Softness * idt;\n\n        data.EffectiveMass = (Real)1.0 / data.EffectiveMass;\n\n        data.Bias = error * data.BiasFactor * idt;\n\n        body1.Velocity += body1.InverseMass * data.AccumulatedImpulse * jacobian[0];\n        body1.AngularVelocity += JVector.Transform(data.AccumulatedImpulse * jacobian[1], body1.InverseInertiaWorld);\n\n        body2.Velocity += body2.InverseMass * data.AccumulatedImpulse * jacobian[2];\n        body2.AngularVelocity += JVector.Transform(data.AccumulatedImpulse * jacobian[3], body2.InverseInertiaWorld);\n    }\n\n    /// <summary>\n    /// Gets or sets the softness (compliance) of the constraint.\n    /// </summary>\n    /// <value>\n    /// Default is 0.001. Higher values allow more distance error but improve stability.\n    /// </value>\n    public Real Softness\n    {\n        get => Data.Softness;\n        set => Data.Softness = value;\n    }\n\n    /// <summary>\n    /// Gets or sets the bias factor controlling how aggressively distance error is corrected.\n    /// </summary>\n    /// <value>\n    /// Default is 0.2. Range [0, 1]. Higher values correct errors faster but may cause instability.\n    /// </value>\n    public Real Bias\n    {\n        get => Data.BiasFactor;\n        set => Data.BiasFactor = value;\n    }\n\n    /// <summary>\n    /// Gets the accumulated impulse applied by this constraint during the last step.\n    /// </summary>\n    public Real Impulse => Data.AccumulatedImpulse;\n\n    public static void IterateFixedAngle(ref ConstraintData constraint, Real idt)\n    {\n        ref var data = ref Unsafe.As<ConstraintData, DistanceLimitData>(ref constraint);\n        ref RigidBodyData body1 = ref constraint.Body1.Data;\n        ref RigidBodyData body2 = ref constraint.Body2.Data;\n\n        if (data.Clamp == 0) return;\n\n        var jacobian = new Span<JVector>(Unsafe.AsPointer(ref data.J0), 4);\n\n        Real jv =\n            body1.Velocity * jacobian[0] +\n            body1.AngularVelocity * jacobian[1] +\n            body2.Velocity * jacobian[2] +\n            body2.AngularVelocity * jacobian[3];\n\n        Real softnessScalar = data.AccumulatedImpulse * data.Softness * idt;\n\n        Real lambda = -data.EffectiveMass * (jv + data.Bias + softnessScalar);\n\n        Real oldAccumulated = data.AccumulatedImpulse;\n\n        data.AccumulatedImpulse += lambda;\n\n        if (data.Clamp == 1)\n        {\n            data.AccumulatedImpulse = MathR.Min(data.AccumulatedImpulse, (Real)0.0);\n        }\n        else\n        {\n            data.AccumulatedImpulse = MathR.Max(data.AccumulatedImpulse, (Real)0.0);\n        }\n\n        lambda = data.AccumulatedImpulse - oldAccumulated;\n\n        body1.Velocity += body1.InverseMass * lambda * jacobian[0];\n        body1.AngularVelocity += JVector.Transform(lambda * jacobian[1], body1.InverseInertiaWorld);\n\n        body2.Velocity += body2.InverseMass * lambda * jacobian[2];\n        body2.AngularVelocity += JVector.Transform(lambda * jacobian[3], body2.InverseInertiaWorld);\n    }\n\n    public override void DebugDraw(IDebugDrawer drawer)\n    {\n        ref DistanceLimitData data = ref Data;\n        ref RigidBodyData body1 = ref data.Body1.Data;\n        ref RigidBodyData body2 = ref data.Body2.Data;\n\n        JVector.Transform(data.LocalAnchor1, body1.Orientation, out JVector r1);\n        JVector.Transform(data.LocalAnchor2, body2.Orientation, out JVector r2);\n\n        JVector p1 = body1.Position + r1;\n        JVector p2 = body2.Position + r2;\n\n        drawer.DrawSegment(body1.Position, p1);\n        drawer.DrawSegment(body2.Position, p2);\n        drawer.DrawSegment(p1, p2);\n        drawer.DrawPoint(p1);\n        drawer.DrawPoint(p2);\n    }\n}\n"
  },
  {
    "path": "src/Jitter2/Dynamics/Constraints/FixedAngle.cs",
    "content": "/*\n * Jitter2 Physics Library\n * (c) Thorben Linneweber and contributors\n * SPDX-License-Identifier: MIT\n */\n\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\nusing Jitter2.LinearMath;\nusing Jitter2.Unmanaged;\n\nnamespace Jitter2.Dynamics.Constraints;\n\n/// <summary>\n/// Constrains the relative orientation between two bodies, eliminating three degrees of rotational freedom.\n/// </summary>\npublic unsafe class FixedAngle : Constraint<FixedAngle.FixedAngleData>\n{\n    [StructLayout(LayoutKind.Sequential)]\n    public struct FixedAngleData\n    {\n        internal int _internal;\n        internal uint DispatchId;\n        internal ulong ConstraintId;\n\n        public JHandle<RigidBodyData> Body1;\n        public JHandle<RigidBodyData> Body2;\n\n        public Real MinAngle;\n        public Real MaxAngle;\n\n        public Real BiasFactor;\n        public Real Softness;\n\n        public JQuaternion Q0;\n\n        public JVector AccumulatedImpulse;\n        public JVector Bias;\n\n        public JMatrix EffectiveMass;\n        public JMatrix Jacobian;\n\n        public ushort Clamp;\n    }\n\n    private static readonly uint RegisteredDispatchId =\n        RegisterFullConstraint(&PrepareForIterationFixedAngle, &IterateFixedAngle);\n\n    protected override void Create()\n    {\n        DispatchId = RegisteredDispatchId;\n        base.Create();\n    }\n\n    /// <inheritdoc />\n    public override void ResetWarmStart() => Data.AccumulatedImpulse = JVector.Zero;\n\n    /// <summary>\n    /// Initializes the constraint using the current relative orientation of the bodies.\n    /// </summary>\n    /// <remarks>\n    /// Records the current relative orientation as the target.\n    /// Default values: <see cref=\"Softness\"/> = <see cref=\"Constraint.DefaultAngularSoftness\"/>, <see cref=\"Bias\"/> = <see cref=\"Constraint.DefaultAngularBias\"/>.\n    /// </remarks>\n    public void Initialize()\n    {\n        VerifyNotZero();\n        ref FixedAngleData data = ref Data;\n        ref RigidBodyData body1 = ref data.Body1.Data;\n        ref RigidBodyData body2 = ref data.Body2.Data;\n\n        data.Softness = Constraint.DefaultAngularSoftness;\n        data.BiasFactor = Constraint.DefaultAngularBias;\n\n        JQuaternion q1 = body1.Orientation;\n        JQuaternion q2 = body2.Orientation;\n\n        data.Q0 = q2.Conjugate() * q1;\n    }\n\n    public static void PrepareForIterationFixedAngle(ref ConstraintData constraint, Real idt)\n    {\n        ref var data = ref Unsafe.As<ConstraintData, FixedAngleData>(ref constraint);\n\n        ref RigidBodyData body1 = ref data.Body1.Data;\n        ref RigidBodyData body2 = ref data.Body2.Data;\n\n        JQuaternion q1 = body1.Orientation;\n        JQuaternion q2 = body2.Orientation;\n\n        JQuaternion quat0 = data.Q0 * q1.Conjugate() * q2;\n\n        JVector error = new(quat0.X, quat0.Y, quat0.Z);\n\n        data.Clamp = 1024;\n\n        data.Jacobian = QMatrix.ProjectMultiplyLeftRight(data.Q0 * q1.Conjugate(), q2);\n\n        if (quat0.W < (Real)0.0)\n        {\n            error *= -(Real)1.0;\n            data.Jacobian *= -(Real)1.0;\n        }\n\n        data.EffectiveMass = JMatrix.Multiply(data.Jacobian, JMatrix.MultiplyTransposed(body1.InverseInertiaWorld + body2.InverseInertiaWorld, data.Jacobian));\n\n        data.EffectiveMass.M11 += data.Softness * idt;\n        data.EffectiveMass.M22 += data.Softness * idt;\n        data.EffectiveMass.M33 += data.Softness * idt;\n\n        JMatrix.Inverse(data.EffectiveMass, out data.EffectiveMass);\n\n        data.Bias = -error * data.BiasFactor * idt;\n\n        body1.AngularVelocity += JVector.Transform(JVector.TransposedTransform(data.AccumulatedImpulse, data.Jacobian), body1.InverseInertiaWorld);\n        body2.AngularVelocity -= JVector.Transform(JVector.TransposedTransform(data.AccumulatedImpulse, data.Jacobian), body2.InverseInertiaWorld);\n    }\n\n    /// <summary>\n    /// Gets or sets the softness (compliance) of the constraint.\n    /// </summary>\n    /// <value>\n    /// Default is 0.001. Higher values allow more angular error but improve stability.\n    /// </value>\n    public Real Softness\n    {\n        get => Data.Softness;\n        set => Data.Softness = value;\n    }\n\n    /// <summary>\n    /// Gets or sets the bias factor controlling how aggressively angular error is corrected.\n    /// </summary>\n    /// <value>\n    /// Default is 0.2. Range [0, 1]. Higher values correct errors faster but may cause instability.\n    /// </value>\n    public Real Bias\n    {\n        get => Data.BiasFactor;\n        set => Data.BiasFactor = value;\n    }\n\n    /// <summary>\n    /// Gets the accumulated impulse applied by this constraint during the last step.\n    /// </summary>\n    public JVector Impulse => Data.AccumulatedImpulse;\n\n    public static void IterateFixedAngle(ref ConstraintData constraint, Real idt)\n    {\n        ref var data = ref Unsafe.As<ConstraintData, FixedAngleData>(ref constraint);\n        ref RigidBodyData body1 = ref constraint.Body1.Data;\n        ref RigidBodyData body2 = ref constraint.Body2.Data;\n\n        JVector jv = JVector.Transform(body1.AngularVelocity - body2.AngularVelocity, data.Jacobian);\n        JVector softness = data.AccumulatedImpulse * (data.Softness * idt);\n        JVector lambda = -(Real)1.0 * JVector.Transform(jv + data.Bias + softness, data.EffectiveMass);\n\n        data.AccumulatedImpulse += lambda;\n\n        body1.AngularVelocity += JVector.Transform(JVector.TransposedTransform(lambda, data.Jacobian), body1.InverseInertiaWorld);\n        body2.AngularVelocity -= JVector.Transform(JVector.TransposedTransform(lambda, data.Jacobian), body2.InverseInertiaWorld);\n    }\n\n    public override void DebugDraw(IDebugDrawer drawer)\n    {\n        ref FixedAngleData data = ref Data;\n        ref RigidBodyData body1 = ref data.Body1.Data;\n        ref RigidBodyData body2 = ref data.Body2.Data;\n\n        const Real axisLength = (Real)0.5;\n\n        JVector x1 = body1.Orientation.GetBasisX() * axisLength;\n        JVector y1 = body1.Orientation.GetBasisY() * axisLength;\n        JVector z1 = body1.Orientation.GetBasisZ() * axisLength;\n\n        JVector x2 = body2.Orientation.GetBasisX() * axisLength;\n        JVector y2 = body2.Orientation.GetBasisY() * axisLength;\n        JVector z2 = body2.Orientation.GetBasisZ() * axisLength;\n\n        drawer.DrawSegment(body1.Position, body1.Position + x1);\n        drawer.DrawSegment(body1.Position, body1.Position + y1);\n        drawer.DrawSegment(body1.Position, body1.Position + z1);\n\n        drawer.DrawSegment(body2.Position, body2.Position + x2);\n        drawer.DrawSegment(body2.Position, body2.Position + y2);\n        drawer.DrawSegment(body2.Position, body2.Position + z2);\n    }\n}\n"
  },
  {
    "path": "src/Jitter2/Dynamics/Constraints/HingeAngle.cs",
    "content": "/*\n * Jitter2 Physics Library\n * (c) Thorben Linneweber and contributors\n * SPDX-License-Identifier: MIT\n */\n\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\nusing Jitter2.LinearMath;\nusing Jitter2.Unmanaged;\n\nnamespace Jitter2.Dynamics.Constraints;\n\n/// <summary>\n/// Constrains two bodies to rotate relative to each other around a single axis,\n/// removing two angular degrees of freedom. Optionally enforces angular limits.\n/// </summary>\npublic unsafe class HingeAngle : Constraint<HingeAngle.HingeAngleData>\n{\n    [StructLayout(LayoutKind.Sequential)]\n    public struct HingeAngleData\n    {\n        internal int _internal;\n        internal uint DispatchId;\n        internal ulong ConstraintId;\n\n        public JHandle<RigidBodyData> Body1;\n        public JHandle<RigidBodyData> Body2;\n\n        public Real MinAngle;\n        public Real MaxAngle;\n\n        public Real BiasFactor;\n        public Real LimitBias;\n\n        public Real LimitSoftness;\n        public Real Softness;\n\n        public JVector Axis;\n        public JQuaternion Q0;\n\n        public JVector AccumulatedImpulse;\n        public JVector Bias;\n\n        public JMatrix EffectiveMass;\n        public JMatrix Jacobian;\n\n        public ushort Clamp;\n    }\n\n    private static readonly uint RegisteredDispatchId =\n        RegisterFullConstraint(&PrepareForIterationHingeAngle, &IterateHingeAngle);\n\n    protected override void Create()\n    {\n        DispatchId = RegisteredDispatchId;\n        base.Create();\n    }\n\n    /// <inheritdoc />\n    public override void ResetWarmStart() => Data.AccumulatedImpulse = JVector.Zero;\n\n    /// <summary>\n    /// Initializes the constraint with a rotation axis and angular limits.\n    /// </summary>\n    /// <param name=\"axis\">The hinge axis in world space around which rotation is allowed.</param>\n    /// <param name=\"limit\">The angular limits defining the allowed rotation range.</param>\n    /// <remarks>\n    /// Stores the axis in the local frame of body 2 and records the initial relative orientation.\n    /// Default values: <see cref=\"Softness\"/> = <see cref=\"Constraint.DefaultAngularSoftness\"/>, <see cref=\"LimitSoftness\"/> = <see cref=\"Constraint.DefaultAngularLimitSoftness\"/>,\n    /// <see cref=\"Bias\"/> = <see cref=\"Constraint.DefaultAngularBias\"/>, <see cref=\"LimitBias\"/> = <see cref=\"Constraint.DefaultAngularLimitBias\"/>.\n    /// </remarks>\n    public void Initialize(JVector axis, AngularLimit limit)\n    {\n        VerifyNotZero();\n        ref HingeAngleData data = ref Data;\n        ref RigidBodyData body1 = ref data.Body1.Data;\n        ref RigidBodyData body2 = ref data.Body2.Data;\n\n        data.Softness = Constraint.DefaultAngularSoftness;\n        data.LimitSoftness = Constraint.DefaultAngularLimitSoftness;\n        data.BiasFactor = Constraint.DefaultAngularBias;\n        data.LimitBias = Constraint.DefaultAngularLimitBias;\n\n        data.MinAngle = StableMath.Sin((Real)limit.From / (Real)2.0);\n        data.MaxAngle = StableMath.Sin((Real)limit.To / (Real)2.0);\n\n        data.Axis = JVector.ConjugatedTransform(axis, body2.Orientation);\n\n        JQuaternion q1 = body1.Orientation;\n        JQuaternion q2 = body2.Orientation;\n\n        data.Q0 = q2.Conjugate() * q1;\n    }\n\n    /// <summary>\n    /// Sets the angular limits for the hinge rotation.\n    /// </summary>\n    public AngularLimit Limit\n    {\n        set\n        {\n            ref HingeAngleData data = ref Data;\n            data.MinAngle = StableMath.Sin((Real)value.From / (Real)2.0);\n            data.MaxAngle = StableMath.Sin((Real)value.To / (Real)2.0);\n        }\n    }\n\n    public static void PrepareForIterationHingeAngle(ref ConstraintData constraint, Real idt)\n    {\n        ref var data = ref Unsafe.As<ConstraintData, HingeAngleData>(ref constraint);\n\n        ref RigidBodyData body1 = ref data.Body1.Data;\n        ref RigidBodyData body2 = ref data.Body2.Data;\n\n        JQuaternion q1 = body1.Orientation;\n        JQuaternion q2 = body2.Orientation;\n\n        JVector p0 = MathHelper.CreateOrthonormal(data.Axis);\n        JVector p1 = data.Axis % p0;\n\n        JQuaternion quat0 = data.Q0 * q1.Conjugate() * q2;\n\n        JVector error;\n        error.X = JVector.Dot(p0, new JVector(quat0.X, quat0.Y, quat0.Z));\n        error.Y = JVector.Dot(p1, new JVector(quat0.X, quat0.Y, quat0.Z));\n        error.Z = JVector.Dot(data.Axis, new JVector(quat0.X, quat0.Y, quat0.Z));\n\n        data.Clamp = 0;\n\n        JMatrix m0 = (-(Real)(1.0 / 2.0)) * QMatrix.ProjectMultiplyLeftRight(data.Q0 * q1.Conjugate(), q2);\n\n        if (quat0.W < (Real)0.0)\n        {\n            error *= -(Real)1.0;\n            m0 *= -(Real)1.0;\n        }\n\n        data.Jacobian.UnsafeGet(0) = JVector.TransposedTransform(p0, m0);\n        data.Jacobian.UnsafeGet(1) = JVector.TransposedTransform(p1, m0);\n        data.Jacobian.UnsafeGet(2) = JVector.TransposedTransform(data.Axis, m0);\n\n        data.EffectiveMass = JMatrix.TransposedMultiply(data.Jacobian, JMatrix.Multiply(body1.InverseInertiaWorld + body2.InverseInertiaWorld, data.Jacobian));\n\n        data.EffectiveMass.M11 += data.Softness * idt;\n        data.EffectiveMass.M22 += data.Softness * idt;\n        data.EffectiveMass.M33 += data.LimitSoftness * idt;\n\n        Real maxA = data.MaxAngle;\n        Real minA = data.MinAngle;\n\n        if (error.Z > maxA)\n        {\n            data.Clamp = 1;\n            error.Z -= maxA;\n        }\n        else if (error.Z < minA)\n        {\n            data.Clamp = 2;\n            error.Z -= minA;\n        }\n        else\n        {\n            data.AccumulatedImpulse.Z = 0;\n            data.EffectiveMass.M33 = 1;\n            data.EffectiveMass.M31 = data.EffectiveMass.M13 = 0;\n            data.EffectiveMass.M32 = data.EffectiveMass.M23 = 0;\n\n            // TODO: do he have to set them to zero here, explicitly?\n            //       does this also has to be done in PointOnLine?\n            data.Jacobian.M13 = data.Jacobian.M23 = data.Jacobian.M33 = 0;\n        }\n\n        JMatrix.Inverse(data.EffectiveMass, out data.EffectiveMass);\n\n        data.Bias = error * idt;\n        data.Bias.X *= data.BiasFactor;\n        data.Bias.Y *= data.BiasFactor;\n        data.Bias.Z *= data.LimitBias;\n\n        body1.AngularVelocity += JVector.Transform(JVector.Transform(data.AccumulatedImpulse, data.Jacobian), body1.InverseInertiaWorld);\n        body2.AngularVelocity -= JVector.Transform(JVector.Transform(data.AccumulatedImpulse, data.Jacobian), body2.InverseInertiaWorld);\n    }\n\n    /// <summary>\n    /// Gets the current angle of rotation around the hinge axis relative to the initial pose.\n    /// </summary>\n    public JAngle Angle\n    {\n        get\n        {\n            ref HingeAngleData data = ref Data;\n            JQuaternion q1 = data.Body1.Data.Orientation;\n            JQuaternion q2 = data.Body2.Data.Orientation;\n\n            JQuaternion quat0 = data.Q0 * q1.Conjugate() * q2;\n\n            if (quat0.W < (Real)0.0)\n            {\n                quat0 *= -(Real)1.0;\n            }\n\n            Real error = JVector.Dot(data.Axis, new JVector(quat0.X, quat0.Y, quat0.Z));\n            return (JAngle)((Real)2.0 * StableMath.Asin(error));\n        }\n    }\n\n    /// <summary>\n    /// Gets or sets the softness (compliance) of the angular constraint.\n    /// </summary>\n    /// <value>\n    /// Default is 0.001. Higher values allow more angular error but improve stability.\n    /// </value>\n    public Real Softness\n    {\n        get => Data.Softness;\n        set => Data.Softness = value;\n    }\n\n    /// <summary>\n    /// Gets or sets the softness (compliance) applied when angular limits are active.\n    /// </summary>\n    /// <value>\n    /// Default is 0.001. Higher values allow more limit violation but improve stability.\n    /// </value>\n    public Real LimitSoftness\n    {\n        get => Data.LimitSoftness;\n        set => Data.LimitSoftness = value;\n    }\n\n    /// <summary>\n    /// Gets or sets the bias factor controlling how aggressively angular error is corrected.\n    /// </summary>\n    /// <value>\n    /// Default is 0.2. Range [0, 1]. Higher values correct errors faster but may cause instability.\n    /// </value>\n    public Real Bias\n    {\n        get => Data.BiasFactor;\n        set => Data.BiasFactor = value;\n    }\n\n    /// <summary>\n    /// Gets or sets the bias factor for angular limit correction.\n    /// </summary>\n    /// <value>\n    /// Default is 0.1. Range [0, 1]. Higher values correct limit violations faster.\n    /// </value>\n    public Real LimitBias\n    {\n        get => Data.LimitBias;\n        set => Data.LimitBias = value;\n    }\n\n    /// <summary>\n    /// Gets the accumulated impulse applied by this constraint during the last step.\n    /// </summary>\n    public JVector Impulse => Data.AccumulatedImpulse;\n\n    public static void IterateHingeAngle(ref ConstraintData constraint, Real idt)\n    {\n        ref var data = ref Unsafe.As<ConstraintData, HingeAngleData>(ref constraint);\n        ref RigidBodyData body1 = ref constraint.Body1.Data;\n        ref RigidBodyData body2 = ref constraint.Body2.Data;\n\n        JVector jv = JVector.TransposedTransform(body1.AngularVelocity - body2.AngularVelocity, data.Jacobian);\n\n        JVector softness = data.AccumulatedImpulse * idt;\n        softness.X *= data.Softness;\n        softness.Y *= data.Softness;\n        softness.Z *= data.LimitSoftness;\n\n        JVector lambda = -(Real)1.0 * JVector.Transform(jv + data.Bias + softness, data.EffectiveMass);\n\n        JVector origAcc = data.AccumulatedImpulse;\n\n        data.AccumulatedImpulse += lambda;\n\n        if (data.Clamp == 1)\n        {\n            data.AccumulatedImpulse.Z = MathR.Min(0, data.AccumulatedImpulse.Z);\n        }\n        else if (data.Clamp == 2)\n        {\n            data.AccumulatedImpulse.Z = MathR.Max(0, data.AccumulatedImpulse.Z);\n        }\n        else\n        {\n            origAcc.Z = 0;\n            data.AccumulatedImpulse.Z = 0;\n        }\n\n        lambda = data.AccumulatedImpulse - origAcc;\n\n        body1.AngularVelocity += JVector.Transform(JVector.Transform(lambda, data.Jacobian), body1.InverseInertiaWorld);\n        body2.AngularVelocity -= JVector.Transform(JVector.Transform(lambda, data.Jacobian), body2.InverseInertiaWorld);\n    }\n\n    public override void DebugDraw(IDebugDrawer drawer)\n    {\n        ref HingeAngleData data = ref Data;\n        ref RigidBodyData body1 = ref data.Body1.Data;\n        ref RigidBodyData body2 = ref data.Body2.Data;\n\n        JVector.Transform(data.Axis, body2.Orientation, out JVector axis);\n\n        const Real axisLength = (Real)0.5;\n        drawer.DrawSegment(body1.Position, body1.Position + axis * axisLength);\n        drawer.DrawSegment(body2.Position, body2.Position + axis * axisLength);\n    }\n}\n"
  },
  {
    "path": "src/Jitter2/Dynamics/Constraints/Internal/QMatrix.cs",
    "content": "/*\n * Jitter2 Physics Library\n * (c) Thorben Linneweber and contributors\n * SPDX-License-Identifier: MIT\n */\n\nusing System.Runtime.CompilerServices;\nusing Jitter2.LinearMath;\nusing Jitter2.Unmanaged;\n\n[assembly: InternalsVisibleTo(\"JitterTests\")]\n\nnamespace Jitter2.Dynamics.Constraints;\n\ninternal unsafe struct QMatrix\n{\n    private MemoryHelper.MemBlock16Real mem;\n\n    public Real* Pointer => (Real*)Unsafe.AsPointer(ref mem);\n\n    private static QMatrix Multiply(Real* left, Real* right)\n    {\n        Unsafe.SkipInit(out QMatrix res);\n        Real* result = res.Pointer;\n\n        for (int c = 0; c < 4; c++)\n        {\n            for (int r = 0; r < 4; r++)\n            {\n                Real* tt = &result[4 * c + r];\n                *tt = 0;\n                for (int k = 0; k < 4; k++)\n                {\n                    *tt += left[4 * k + r] * right[4 * c + k];\n                }\n            }\n        }\n\n        return res;\n    }\n\n    public JMatrix Projection()\n    {\n        Real* m = Pointer;\n\n        return new JMatrix(m[0x5], m[0x9], m[0xD],\n            m[0x6], m[0xA], m[0xE],\n            m[0x7], m[0xB], m[0xF]);\n    }\n\n    public static QMatrix CreateLeftMatrix(in JQuaternion quat)\n    {\n        Unsafe.SkipInit(out QMatrix result);\n        Real* q = result.Pointer;\n\n        q[0x0] = +quat.W;\n        q[0x4] = -quat.X;\n        q[0x8] = -quat.Y;\n        q[0xC] = -quat.Z;\n        q[0x1] = +quat.X;\n        q[0x5] = +quat.W;\n        q[0x9] = -quat.Z;\n        q[0xD] = +quat.Y;\n        q[0x2] = +quat.Y;\n        q[0x6] = +quat.Z;\n        q[0xA] = +quat.W;\n        q[0xE] = -quat.X;\n        q[0x3] = +quat.Z;\n        q[0x7] = -quat.Y;\n        q[0xB] = +quat.X;\n        q[0xF] = +quat.W;\n\n        return result;\n    }\n\n    public static QMatrix CreateRightMatrix(in JQuaternion quat)\n    {\n        Unsafe.SkipInit(out QMatrix result);\n        Real* q = result.Pointer;\n\n        q[0x0] = +quat.W;\n        q[0x4] = -quat.X;\n        q[0x8] = -quat.Y;\n        q[0xC] = -quat.Z;\n        q[0x1] = +quat.X;\n        q[0x5] = +quat.W;\n        q[0x9] = +quat.Z;\n        q[0xD] = -quat.Y;\n        q[0x2] = +quat.Y;\n        q[0x6] = -quat.Z;\n        q[0xA] = +quat.W;\n        q[0xE] = +quat.X;\n        q[0x3] = +quat.Z;\n        q[0x7] = +quat.Y;\n        q[0xB] = -quat.X;\n        q[0xF] = +quat.W;\n\n        return result;\n    }\n\n    public static QMatrix Multiply(ref QMatrix left, ref QMatrix right)\n    {\n        fixed (QMatrix* lptr = &left)\n        {\n            fixed (QMatrix* rptr = &right)\n            {\n                return Multiply((Real*)lptr, (Real*)rptr);\n            }\n        }\n    }\n\n    public static JMatrix ProjectMultiplyLeftRight(in JQuaternion left, in JQuaternion right)\n    {\n        Unsafe.SkipInit(out JMatrix res);\n\n        res.M11 = -left.X * right.X + left.W * right.W + left.Z * right.Z + left.Y * right.Y;\n        res.M12 = -left.X * right.Y + left.W * right.Z - left.Z * right.W - left.Y * right.X;\n        res.M13 = -left.X * right.Z - left.W * right.Y - left.Z * right.X + left.Y * right.W;\n        res.M21 = -left.Y * right.X + left.Z * right.W - left.W * right.Z - left.X * right.Y;\n        res.M22 = -left.Y * right.Y + left.Z * right.Z + left.W * right.W + left.X * right.X;\n        res.M23 = -left.Y * right.Z - left.Z * right.Y + left.W * right.X - left.X * right.W;\n        res.M31 = -left.Z * right.X - left.Y * right.W - left.X * right.Z + left.W * right.Y;\n        res.M32 = -left.Z * right.Y - left.Y * right.Z + left.X * right.W - left.W * right.X;\n        res.M33 = -left.Z * right.Z + left.Y * right.Y + left.X * right.X + left.W * right.W;\n\n        return res;\n    }\n}"
  },
  {
    "path": "src/Jitter2/Dynamics/Constraints/Limit.cs",
    "content": "/*\n * Jitter2 Physics Library\n * (c) Thorben Linneweber and contributors\n * SPDX-License-Identifier: MIT\n */\n\nusing Jitter2.LinearMath;\n\nnamespace Jitter2.Dynamics.Constraints;\n\n/// <summary>\n/// Represents an angular limit defined by a minimum and maximum angle.\n/// Used by constraints to restrict rotational motion within a specified range.\n/// </summary>\n/// <param name=\"from\">The minimum angle of the limit.</param>\n/// <param name=\"to\">The maximum angle of the limit.</param>\npublic struct AngularLimit(JAngle from, JAngle to)\n{\n    /// <summary>\n    /// Gets or sets the minimum angle of the limit.\n    /// </summary>\n    public JAngle From { get; set; } = from;\n\n    /// <summary>\n    /// Gets or sets the maximum angle of the limit.\n    /// </summary>\n    public JAngle To { get; set; } = to;\n\n    /// <summary>\n    /// A limit that allows full rotation (-π to +π radians).\n    /// </summary>\n    public static readonly AngularLimit Full =\n        new(JAngle.FromRadian(-MathR.PI), JAngle.FromRadian(MathR.PI));\n\n    /// <summary>\n    /// A limit that locks the angle in place (no rotation allowed).\n    /// </summary>\n    public static readonly AngularLimit Fixed =\n        new(JAngle.FromRadian(+(Real)1e-6), JAngle.FromRadian(-(Real)1e-6));\n\n    /// <summary>\n    /// Creates an angular limit from degree values.\n    /// </summary>\n    /// <param name=\"min\">The minimum angle in degrees.</param>\n    /// <param name=\"max\">The maximum angle in degrees.</param>\n    /// <returns>A new <see cref=\"AngularLimit\"/> instance.</returns>\n    public static AngularLimit FromDegree(Real min, Real max)\n    {\n        return new AngularLimit(JAngle.FromDegree(min), JAngle.FromDegree(max));\n    }\n\n    /// <summary>\n    /// Deconstructs the limit into its minimum and maximum angles.\n    /// </summary>\n    /// <param name=\"limitMin\">The minimum angle.</param>\n    /// <param name=\"limitMax\">The maximum angle.</param>\n    public readonly void Deconstruct(out JAngle limitMin, out JAngle limitMax)\n    {\n        limitMin = From;\n        limitMax = To;\n    }\n}\n\n/// <summary>\n/// Represents a linear limit defined by a minimum and maximum distance.\n/// Used by constraints to restrict translational motion within a specified range.\n/// </summary>\n/// <param name=\"from\">The minimum distance of the limit.</param>\n/// <param name=\"to\">The maximum distance of the limit.</param>\npublic struct LinearLimit(Real from, Real to)\n{\n    /// <summary>\n    /// Gets or sets the minimum distance of the limit.\n    /// </summary>\n    public Real From { get; set; } = from;\n\n    /// <summary>\n    /// Gets or sets the maximum distance of the limit.\n    /// </summary>\n    public Real To { get; set; } = to;\n\n    /// <summary>\n    /// A limit that allows unrestricted movement (negative to positive infinity).\n    /// </summary>\n    public static readonly LinearLimit Full =\n        new(Real.NegativeInfinity, Real.PositiveInfinity);\n\n    /// <summary>\n    /// A limit that locks the position in place (no translation allowed).\n    /// </summary>\n    public static readonly LinearLimit Fixed =\n        new((Real)1e-6, -(Real)1e-6);\n\n    /// <summary>\n    /// Creates a linear limit from minimum and maximum values.\n    /// </summary>\n    /// <param name=\"min\">The minimum distance.</param>\n    /// <param name=\"max\">The maximum distance.</param>\n    /// <returns>A new <see cref=\"LinearLimit\"/> instance.</returns>\n    public static LinearLimit FromMinMax(Real min, Real max)\n    {\n        return new LinearLimit(min, max);\n    }\n\n    /// <summary>\n    /// Deconstructs the limit into its minimum and maximum distances.\n    /// </summary>\n    /// <param name=\"limitMin\">The minimum distance.</param>\n    /// <param name=\"limitMax\">The maximum distance.</param>\n    public readonly void Deconstruct(out Real limitMin, out Real limitMax)\n    {\n        limitMin = From;\n        limitMax = To;\n    }\n}\n"
  },
  {
    "path": "src/Jitter2/Dynamics/Constraints/LinearMotor.cs",
    "content": "/*\n * Jitter2 Physics Library\n * (c) Thorben Linneweber and contributors\n * SPDX-License-Identifier: MIT\n */\n\nusing System;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\nusing Jitter2.LinearMath;\nusing Jitter2.Unmanaged;\n\nnamespace Jitter2.Dynamics.Constraints;\n\n/// <summary>\n/// A motor constraint that drives relative translational velocity along an axis fixed\n/// in the reference frame of each body.\n/// </summary>\npublic unsafe class LinearMotor : Constraint<LinearMotor.LinearMotorData>\n{\n    [StructLayout(LayoutKind.Sequential)]\n    public struct LinearMotorData\n    {\n        internal int _internal;\n        internal uint DispatchId;\n        internal ulong ConstraintId;\n\n        public JHandle<RigidBodyData> Body1;\n        public JHandle<RigidBodyData> Body2;\n\n        public JVector LocalAxis1;\n        public JVector LocalAxis2;\n\n        public Real Velocity;\n        public Real MaxForce;\n        public Real MaxLambda;\n\n        public Real EffectiveMass;\n\n        public Real AccumulatedImpulse;\n    }\n\n    private static readonly uint RegisteredDispatchId =\n        RegisterFullConstraint(&PrepareForIterationLinearMotor, &IterateLinearMotor);\n\n    protected override void Create()\n    {\n        DispatchId = RegisteredDispatchId;\n        base.Create();\n    }\n\n    /// <inheritdoc />\n    public override void ResetWarmStart() => Data.AccumulatedImpulse = (Real)0.0;\n\n    /// <summary>\n    /// Gets or sets the motor axis on the first body in local space.\n    /// </summary>\n    public JVector LocalAxis1\n    {\n        get => Data.LocalAxis1;\n        set => Data.LocalAxis1 = value;\n    }\n\n    /// <summary>\n    /// Gets or sets the motor axis on the second body in local space.\n    /// </summary>\n    public JVector LocalAxis2\n    {\n        get => Data.LocalAxis2;\n        set => Data.LocalAxis2 = value;\n    }\n\n    /// <summary>\n    /// Initializes the motor with axes for each body.\n    /// </summary>\n    /// <param name=\"axis1\">Motor axis on the first body in world space.</param>\n    /// <param name=\"axis2\">Motor axis on the second body in world space.</param>\n    /// <remarks>\n    /// Stores the axes in local frames. Both axes are normalized internally.\n    /// Default values: <see cref=\"TargetVelocity\"/> = 0, <see cref=\"MaximumForce\"/> = 0.\n    /// </remarks>\n    public void Initialize(JVector axis1, JVector axis2)\n    {\n        VerifyNotZero();\n        ref LinearMotorData data = ref Data;\n        ref RigidBodyData body1 = ref data.Body1.Data;\n        ref RigidBodyData body2 = ref data.Body2.Data;\n\n        JVector.NormalizeInPlace(ref axis1);\n        JVector.NormalizeInPlace(ref axis2);\n\n        JVector.ConjugatedTransform(axis1, body1.Orientation, out data.LocalAxis1);\n        JVector.ConjugatedTransform(axis2, body2.Orientation, out data.LocalAxis2);\n\n        data.MaxForce = 0;\n        data.Velocity = 0;\n    }\n\n    /// <summary>\n    /// Gets or sets the target linear velocity in units per second.\n    /// </summary>\n    /// <value>Default is 0.</value>\n    public Real TargetVelocity\n    {\n        get => Data.Velocity;\n        set => Data.Velocity = value;\n    }\n\n    /// <summary>\n    /// Gets or sets the maximum force the motor can apply.\n    /// </summary>\n    /// <value>Default is 0. Must be non-negative.</value>\n    /// <exception cref=\"ArgumentOutOfRangeException\">\n    /// Thrown when <paramref name=\"value\"/> is negative.\n    /// </exception>\n    public Real MaximumForce\n    {\n        get => Data.MaxForce;\n        set\n        {\n            ArgumentOutOfRangeException.ThrowIfNegative(value);\n            Data.MaxForce = value;\n        }\n    }\n\n    /// <summary>\n    /// Gets the accumulated impulse applied by this motor during the last step.\n    /// </summary>\n    public Real Impulse => Data.AccumulatedImpulse;\n\n    public static void PrepareForIterationLinearMotor(ref ConstraintData constraint, Real idt)\n    {\n        ref var data = ref Unsafe.As<ConstraintData, LinearMotorData>(ref constraint);\n\n        ref RigidBodyData body1 = ref data.Body1.Data;\n        ref RigidBodyData body2 = ref data.Body2.Data;\n\n        JVector.Transform(data.LocalAxis1, body1.Orientation, out JVector j1);\n        JVector.Transform(data.LocalAxis2, body2.Orientation, out JVector j2);\n\n        data.EffectiveMass = body1.InverseMass + body2.InverseMass;\n        data.EffectiveMass = (Real)1.0 / data.EffectiveMass;\n        data.MaxLambda = ((Real)1.0 / idt) * data.MaxForce;\n\n        body1.Velocity -= j1 * data.AccumulatedImpulse * body1.InverseMass;\n        body2.Velocity += j2 * data.AccumulatedImpulse * body2.InverseMass;\n    }\n\n    public override void DebugDraw(IDebugDrawer drawer)\n    {\n        ref LinearMotorData data = ref Data;\n        ref RigidBodyData body1 = ref data.Body1.Data;\n        ref RigidBodyData body2 = ref data.Body2.Data;\n\n        JVector.Transform(data.LocalAxis1, body1.Orientation, out JVector axis1);\n        JVector.Transform(data.LocalAxis2, body2.Orientation, out JVector axis2);\n\n        const Real axisLength = (Real)0.5;\n        drawer.DrawSegment(body1.Position, body1.Position + axis1 * axisLength);\n        drawer.DrawSegment(body2.Position, body2.Position + axis2 * axisLength);\n    }\n\n    public static void IterateLinearMotor(ref ConstraintData constraint, Real idt)\n    {\n        ref var data = ref Unsafe.As<ConstraintData, LinearMotorData>(ref constraint);\n        ref RigidBodyData body1 = ref constraint.Body1.Data;\n        ref RigidBodyData body2 = ref constraint.Body2.Data;\n\n        JVector.Transform(data.LocalAxis1, body1.Orientation, out JVector j1);\n        JVector.Transform(data.LocalAxis2, body2.Orientation, out JVector j2);\n\n        Real jv = -j1 * body1.Velocity + j2 * body2.Velocity;\n\n        Real lambda = -(jv - data.Velocity) * data.EffectiveMass;\n\n        Real oldAccumulated = data.AccumulatedImpulse;\n\n        data.AccumulatedImpulse += lambda;\n\n        data.AccumulatedImpulse = Math.Clamp(data.AccumulatedImpulse, -data.MaxLambda, data.MaxLambda);\n\n        lambda = data.AccumulatedImpulse - oldAccumulated;\n\n        body1.Velocity -= j1 * lambda * body1.InverseMass;\n        body2.Velocity += j2 * lambda * body2.InverseMass;\n    }\n}\n"
  },
  {
    "path": "src/Jitter2/Dynamics/Constraints/PointOnLine.cs",
    "content": "/*\n * Jitter2 Physics Library\n * (c) Thorben Linneweber and contributors\n * SPDX-License-Identifier: MIT\n */\n\nusing System;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\nusing Jitter2.LinearMath;\nusing Jitter2.Unmanaged;\n\nnamespace Jitter2.Dynamics.Constraints;\n\n/// <summary>\n/// Constrains a fixed point in the reference frame of one body to a line that is fixed in\n/// the reference frame of another body. This constraint removes two degrees of translational\n/// freedom; three if the limit is enforced.\n/// </summary>\npublic unsafe class PointOnLine : Constraint<PointOnLine.PointOnLineData>\n{\n    [StructLayout(LayoutKind.Sequential)]\n    public struct PointOnLineData\n    {\n        internal int _internal;\n        internal uint DispatchId;\n        internal ulong ConstraintId;\n\n        public JHandle<RigidBodyData> Body1;\n        public JHandle<RigidBodyData> Body2;\n\n        public JVector LocalAxis;\n\n        public JVector LocalAnchor1;\n        public JVector LocalAnchor2;\n\n        public Real BiasFactor;\n        public Real LimitBias;\n        public Real Softness;\n        public Real LimitSoftness;\n\n        public JMatrix EffectiveMass;\n        public JVector AccumulatedImpulse;\n        public JVector Bias;\n\n        public Real Min;\n        public Real Max;\n\n        public ushort Clamp;\n\n        // public MemBlock96 J0;\n    }\n\n    private static readonly uint RegisteredDispatchId =\n        RegisterFullConstraint(&PrepareForIterationPointOnLine, &IteratePointOnLine);\n\n    protected override void Create()\n    {\n        DispatchId = RegisteredDispatchId;\n        base.Create();\n    }\n\n    /// <inheritdoc />\n    public override void ResetWarmStart() => Data.AccumulatedImpulse = JVector.Zero;\n\n    /// <inheritdoc cref=\"Initialize(JVector, JVector, JVector, LinearLimit)\"/>\n    public void Initialize(JVector axis, JVector anchor1, JVector anchor2)\n    {\n        Initialize(axis, anchor1, anchor2, LinearLimit.Fixed);\n    }\n\n    /// <summary>\n    /// Initializes the constraint from world-space parameters.\n    /// </summary>\n    /// <param name=\"axis\">The line axis in world space, fixed in the reference frame of body 1.</param>\n    /// <param name=\"anchor1\">Anchor point on body 1 defining the line origin in world space.</param>\n    /// <param name=\"anchor2\">Anchor point on body 2 constrained to the line in world space.</param>\n    /// <param name=\"limit\">Distance limit along the axis.</param>\n    /// <remarks>\n    /// Computes local anchor points and axis from the current body poses.\n    /// Default values: <see cref=\"Bias\"/> = <see cref=\"Constraint.DefaultLinearBias\"/>, <see cref=\"Softness\"/> = <see cref=\"Constraint.DefaultLinearSoftness\"/>,\n    /// <see cref=\"LimitSoftness\"/> = <see cref=\"Constraint.DefaultLinearLimitSoftness\"/>, <see cref=\"LimitBias\"/> = <see cref=\"Constraint.DefaultLinearLimitBias\"/>.\n    /// </remarks>\n    public void Initialize(JVector axis, JVector anchor1, JVector anchor2, LinearLimit limit)\n    {\n        VerifyNotZero();\n        ref PointOnLineData data = ref Data;\n        ref RigidBodyData body1 = ref data.Body1.Data;\n        ref RigidBodyData body2 = ref data.Body2.Data;\n\n        JVector.NormalizeInPlace(ref axis);\n\n        JVector.Subtract(anchor1, body1.Position, out data.LocalAnchor1);\n        JVector.Subtract(anchor2, body2.Position, out data.LocalAnchor2);\n\n        JVector.ConjugatedTransform(data.LocalAnchor1, body1.Orientation, out data.LocalAnchor1);\n        JVector.ConjugatedTransform(data.LocalAnchor2, body2.Orientation, out data.LocalAnchor2);\n\n        JVector.ConjugatedTransform(axis, body1.Orientation, out data.LocalAxis);\n\n        data.BiasFactor = Constraint.DefaultLinearBias;\n        data.Softness = Constraint.DefaultLinearSoftness;\n        data.LimitSoftness = Constraint.DefaultLinearLimitSoftness;\n        data.LimitBias = Constraint.DefaultLinearLimitBias;\n\n        (data.Min, data.Max) = limit;\n    }\n\n    /// <summary>\n    /// Gets the current distance of the anchor point from the line origin along the axis.\n    /// </summary>\n    public Real Distance\n    {\n        get\n        {\n            ref PointOnLineData data = ref Data;\n            ref RigidBodyData body1 = ref data.Body1.Data;\n            ref RigidBodyData body2 = ref data.Body2.Data;\n\n            JVector.Transform(data.LocalAnchor1, body1.Orientation, out JVector r1);\n            JVector.Transform(data.LocalAnchor2, body2.Orientation, out JVector r2);\n\n            JVector.Add(body1.Position, r1, out JVector p1);\n            JVector.Add(body2.Position, r2, out JVector p2);\n\n            JVector u = p2 - p1;\n\n            JVector.Transform(data.LocalAxis, body1.Orientation, out JVector aw);\n\n            return JVector.Dot(u, aw);\n        }\n    }\n\n    [SkipLocalsInit]\n    public static void PrepareForIterationPointOnLine(ref ConstraintData constraint, Real idt)\n    {\n        ref var data = ref Unsafe.As<ConstraintData, PointOnLineData>(ref constraint);\n        ref RigidBodyData body1 = ref data.Body1.Data;\n        ref RigidBodyData body2 = ref data.Body2.Data;\n\n        JVector.Transform(data.LocalAxis, body1.Orientation, out JVector aw);\n\n        JVector n1 = MathHelper.CreateOrthonormal(data.LocalAxis);\n        JVector.Transform(n1, body1.Orientation, out n1);\n\n        JVector n2 = aw % n1;\n\n        JVector.Transform(data.LocalAnchor1, body1.Orientation, out JVector r1);\n        JVector.Transform(data.LocalAnchor2, body2.Orientation, out JVector r2);\n\n        JVector.Add(body1.Position, r1, out JVector p1);\n        JVector.Add(body2.Position, r2, out JVector p2);\n\n        data.Clamp = 0;\n\n        JVector u = p2 - p1;\n\n        Span<JVector> jacobian = stackalloc JVector[12];\n\n        jacobian[0] = -n1;\n        jacobian[1] = -((r1 + u) % n1);\n        jacobian[2] = n1;\n        jacobian[3] = r2 % n1;\n\n        jacobian[4] = -n2;\n        jacobian[5] = -((r1 + u) % n2);\n        jacobian[6] = n2;\n        jacobian[7] = r2 % n2;\n\n        jacobian[8] = -aw;\n        jacobian[9] = -((r1 + u) % aw);\n        jacobian[10] = aw;\n        jacobian[11] = r2 % aw;\n\n        var error = new JVector(JVector.Dot(u, n1), JVector.Dot(u, n2), JVector.Dot(u, aw));\n\n        data.EffectiveMass = JMatrix.Identity;\n\n        data.EffectiveMass.M11 = body1.InverseMass + body2.InverseMass +\n                                 JVector.Transform(jacobian[1], body1.InverseInertiaWorld) * jacobian[1] +\n                                 JVector.Transform(jacobian[3], body2.InverseInertiaWorld) * jacobian[3];\n\n        data.EffectiveMass.M22 = body1.InverseMass + body2.InverseMass +\n                                 JVector.Transform(jacobian[5], body1.InverseInertiaWorld) * jacobian[5] +\n                                 JVector.Transform(jacobian[7], body2.InverseInertiaWorld) * jacobian[7];\n\n        data.EffectiveMass.M12 = JVector.Transform(jacobian[1], body1.InverseInertiaWorld) * jacobian[5] +\n                                 JVector.Transform(jacobian[3], body2.InverseInertiaWorld) * jacobian[7];\n\n        data.EffectiveMass.M21 = JVector.Transform(jacobian[5], body1.InverseInertiaWorld) * jacobian[1] +\n                                 JVector.Transform(jacobian[7], body2.InverseInertiaWorld) * jacobian[3];\n\n        if (error.Z > data.Max)\n        {\n            error.Z -= data.Max;\n            data.Clamp = 1;\n        }\n        else if (error.Z < data.Min)\n        {\n            error.Z -= data.Min;\n            data.Clamp = 2;\n        }\n        else\n        {\n            data.AccumulatedImpulse.Z = 0;\n        }\n\n        if (data.Clamp != 0)\n        {\n            data.EffectiveMass.M33 = body1.InverseMass + body2.InverseMass +\n                                     JVector.Transform(jacobian[9], body1.InverseInertiaWorld) * jacobian[9] +\n                                     JVector.Transform(jacobian[11], body2.InverseInertiaWorld) * jacobian[11];\n\n            data.EffectiveMass.M13 = JVector.Transform(jacobian[1], body1.InverseInertiaWorld) * jacobian[9] +\n                                     JVector.Transform(jacobian[3], body2.InverseInertiaWorld) * jacobian[11];\n\n            data.EffectiveMass.M31 = JVector.Transform(jacobian[9], body1.InverseInertiaWorld) * jacobian[1] +\n                                     JVector.Transform(jacobian[11], body2.InverseInertiaWorld) * jacobian[3];\n\n            data.EffectiveMass.M23 = JVector.Transform(jacobian[5], body1.InverseInertiaWorld) * jacobian[9] +\n                                     JVector.Transform(jacobian[7], body2.InverseInertiaWorld) * jacobian[11];\n\n            data.EffectiveMass.M32 = JVector.Transform(jacobian[9], body1.InverseInertiaWorld) * jacobian[5] +\n                                     JVector.Transform(jacobian[11], body2.InverseInertiaWorld) * jacobian[7];\n        }\n\n        data.EffectiveMass.M11 += data.Softness * idt;\n        data.EffectiveMass.M22 += data.Softness * idt;\n        data.EffectiveMass.M33 += data.LimitSoftness * idt;\n\n        JMatrix.Inverse(data.EffectiveMass, out data.EffectiveMass);\n\n        data.Bias = error * idt;\n        data.Bias.X *= data.BiasFactor;\n        data.Bias.Y *= data.BiasFactor;\n        data.Bias.Z *= data.LimitBias;\n\n        JVector acc = data.AccumulatedImpulse;\n\n        body1.Velocity += body1.InverseMass * (jacobian[0] * acc.X + jacobian[4] * acc.Y + jacobian[8] * acc.Z);\n        body1.AngularVelocity += JVector.Transform(jacobian[1] * acc.X + jacobian[5] * acc.Y + jacobian[9] * acc.Z, body1.InverseInertiaWorld);\n\n        body2.Velocity += body2.InverseMass * (jacobian[2] * acc.X + jacobian[6] * acc.Y + jacobian[10] * acc.Z);\n        body2.AngularVelocity += JVector.Transform(jacobian[3] * acc.X + jacobian[7] * acc.Y + jacobian[11] * acc.Z, body2.InverseInertiaWorld);\n    }\n\n    /// <summary>\n    /// Gets or sets the softness (compliance) of the constraint.\n    /// </summary>\n    /// <value>\n    /// Default is 0.00001. Higher values allow more positional error but improve stability.\n    /// </value>\n    public Real Softness\n    {\n        get => Data.Softness;\n        set => Data.Softness = value;\n    }\n\n    /// <summary>\n    /// Gets or sets the bias factor controlling how aggressively positional error is corrected.\n    /// </summary>\n    /// <value>\n    /// Default is 0.01. Range [0, 1]. Higher values correct errors faster but may cause instability.\n    /// </value>\n    public Real Bias\n    {\n        get => Data.BiasFactor;\n        set => Data.BiasFactor = value;\n    }\n\n    /// <summary>\n    /// Gets the accumulated impulse applied by this constraint during the last step.\n    /// </summary>\n    public JVector Impulse => Data.AccumulatedImpulse;\n\n    /// <summary>\n    /// Gets or sets the softness (compliance) applied when distance limits are active.\n    /// </summary>\n    /// <value>\n    /// Default is 0.0001. Higher values allow more limit violation but improve stability.\n    /// </value>\n    public Real LimitSoftness\n    {\n        get => Data.LimitSoftness;\n        set => Data.LimitSoftness = value;\n    }\n\n    /// <summary>\n    /// Gets or sets the bias factor for distance limit correction.\n    /// </summary>\n    /// <value>\n    /// Default is 0.2. Range [0, 1]. Higher values correct limit violations faster.\n    /// </value>\n    public Real LimitBias\n    {\n        get => Data.LimitBias;\n        set => Data.LimitBias = value;\n    }\n\n    [SkipLocalsInit]\n    public static void IteratePointOnLine(ref ConstraintData constraint, Real idt)\n    {\n        ref var data = ref Unsafe.As<ConstraintData, PointOnLineData>(ref constraint);\n        ref RigidBodyData body1 = ref constraint.Body1.Data;\n        ref RigidBodyData body2 = ref constraint.Body2.Data;\n\n        JVector.Transform(data.LocalAxis, body1.Orientation, out JVector aw);\n\n        JVector n1 = MathHelper.CreateOrthonormal(data.LocalAxis);\n        JVector.Transform(n1, body1.Orientation, out n1);\n\n        JVector n2 = aw % n1;\n\n        JVector.Transform(data.LocalAnchor1, body1.Orientation, out JVector r1);\n        JVector.Transform(data.LocalAnchor2, body2.Orientation, out JVector r2);\n\n        JVector.Add(body1.Position, r1, out JVector p1);\n        JVector.Add(body2.Position, r2, out JVector p2);\n\n        JVector u = p2 - p1;\n\n        Span<JVector> jacobian = stackalloc JVector[12];\n\n        jacobian[0] = -n1;\n        jacobian[1] = -((r1 + u) % n1);\n        jacobian[2] = n1;\n        jacobian[3] = r2 % n1;\n\n        jacobian[4] = -n2;\n        jacobian[5] = -((r1 + u) % n2);\n        jacobian[6] = n2;\n        jacobian[7] = r2 % n2;\n\n        jacobian[8] = -aw;\n        jacobian[9] = -((r1 + u) % aw);\n        jacobian[10] = aw;\n        jacobian[11] = r2 % aw;\n\n        JVector jv;\n        jv.X = jacobian[0] * body1.Velocity + jacobian[1] * body1.AngularVelocity + jacobian[2] * body2.Velocity +\n               jacobian[3] * body2.AngularVelocity;\n\n        jv.Y = jacobian[4] * body1.Velocity + jacobian[5] * body1.AngularVelocity + jacobian[6] * body2.Velocity +\n               jacobian[7] * body2.AngularVelocity;\n\n        jv.Z = jacobian[8] * body1.Velocity + jacobian[9] * body1.AngularVelocity + jacobian[10] * body2.Velocity +\n               jacobian[11] * body2.AngularVelocity;\n\n        JVector softnessVector = data.AccumulatedImpulse * idt;\n        softnessVector.X *= data.Softness;\n        softnessVector.Y *= data.Softness;\n        softnessVector.Z *= data.LimitSoftness;\n\n        JVector lambda = -(Real)1.0 * JVector.Transform(jv + data.Bias + softnessVector, data.EffectiveMass);\n\n        JVector origAcc = data.AccumulatedImpulse;\n\n        data.AccumulatedImpulse += lambda;\n\n        if ((data.Clamp & 1) != 0)\n            data.AccumulatedImpulse.Z = MathR.Min(data.AccumulatedImpulse.Z, (Real)0.0);\n        else if ((data.Clamp & 2) != 0)\n            data.AccumulatedImpulse.Z = MathR.Max(data.AccumulatedImpulse.Z, (Real)0.0);\n        else\n        {\n            data.AccumulatedImpulse.Z = (Real)0.0;\n            origAcc.Z = (Real)0.0;\n        }\n\n        lambda = data.AccumulatedImpulse - origAcc;\n\n        body1.Velocity += body1.InverseMass * (jacobian[0] * lambda.X + jacobian[4] * lambda.Y + jacobian[8] * lambda.Z);\n        body1.AngularVelocity += JVector.Transform(jacobian[1] * lambda.X + jacobian[5] * lambda.Y + jacobian[9] * lambda.Z, body1.InverseInertiaWorld);\n\n        body2.Velocity += body2.InverseMass * (jacobian[2] * lambda.X + jacobian[6] * lambda.Y + jacobian[10] * lambda.Z);\n        body2.AngularVelocity += JVector.Transform(jacobian[3] * lambda.X + jacobian[7] * lambda.Y + jacobian[11] * lambda.Z, body2.InverseInertiaWorld);\n    }\n\n    public override void DebugDraw(IDebugDrawer drawer)\n    {\n        ref PointOnLineData data = ref Data;\n        ref RigidBodyData body1 = ref data.Body1.Data;\n        ref RigidBodyData body2 = ref data.Body2.Data;\n\n        JVector.Transform(data.LocalAnchor1, body1.Orientation, out JVector r1);\n        JVector.Transform(data.LocalAnchor2, body2.Orientation, out JVector r2);\n        JVector.Transform(data.LocalAxis, body1.Orientation, out JVector axis);\n\n        JVector p1 = body1.Position + r1;\n        JVector p2 = body2.Position + r2;\n\n        Real lineLength = (Real)1.0;\n        drawer.DrawSegment(p1 - axis * lineLength, p1 + axis * lineLength);\n        drawer.DrawSegment(body2.Position, p2);\n        drawer.DrawPoint(p1);\n        drawer.DrawPoint(p2);\n    }\n}\n"
  },
  {
    "path": "src/Jitter2/Dynamics/Constraints/PointOnPlane.cs",
    "content": "/*\n * Jitter2 Physics Library\n * (c) Thorben Linneweber and contributors\n * SPDX-License-Identifier: MIT\n */\n\nusing System;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\nusing Jitter2.LinearMath;\nusing Jitter2.Unmanaged;\n\nnamespace Jitter2.Dynamics.Constraints;\n\n/// <summary>\n/// Constrains a fixed point in the reference frame of one body to a plane that is fixed in\n/// the reference frame of another body. This constraint removes one degree of translational\n/// freedom if the limit is enforced.\n/// </summary>\npublic unsafe class PointOnPlane : Constraint<PointOnPlane.SliderData>\n{\n    [StructLayout(LayoutKind.Sequential)]\n    public struct SliderData\n    {\n        internal int _internal;\n        internal uint DispatchId;\n        internal ulong ConstraintId;\n\n        public JHandle<RigidBodyData> Body1;\n        public JHandle<RigidBodyData> Body2;\n\n        public JVector LocalAxis;\n\n        public JVector LocalAnchor1;\n        public JVector LocalAnchor2;\n\n        public Real BiasFactor;\n        public Real Softness;\n\n        public Real EffectiveMass;\n        public Real AccumulatedImpulse;\n        public Real Bias;\n\n        public Real Min;\n        public Real Max;\n\n        public ushort Clamp;\n\n        public MemoryHelper.MemBlock12Real J0;\n    }\n\n    private static readonly uint RegisteredDispatchId =\n        RegisterFullConstraint(&PrepareForIterationPointOnPlane, &IteratePointOnPlane);\n\n    protected override void Create()\n    {\n        DispatchId = RegisteredDispatchId;\n        base.Create();\n    }\n\n    /// <inheritdoc />\n    public override void ResetWarmStart() => Data.AccumulatedImpulse = (Real)0.0;\n\n    /// <inheritdoc cref=\"Initialize(JVector, JVector, JVector, LinearLimit)\"/>\n    public void Initialize(JVector axis, JVector anchor1, JVector anchor2)\n    {\n        Initialize(axis, anchor1, anchor2, LinearLimit.Fixed);\n    }\n\n    /// <summary>\n    /// Initializes the constraint from world-space parameters.\n    /// </summary>\n    /// <param name=\"axis\">The plane normal in world space, fixed in the reference frame of body 1.</param>\n    /// <param name=\"anchor1\">Anchor point on body 1 defining the plane origin in world space.</param>\n    /// <param name=\"anchor2\">Anchor point on body 2 constrained to the plane in world space.</param>\n    /// <param name=\"limit\">Distance limit from the plane.</param>\n    /// <remarks>\n    /// Computes local anchor points and axis from the current body poses.\n    /// Default values: <see cref=\"Bias\"/> = <see cref=\"Constraint.DefaultLinearBias\"/>, <see cref=\"Softness\"/> = <see cref=\"Constraint.DefaultLinearSoftness\"/>.\n    /// </remarks>\n    public void Initialize(JVector axis, JVector anchor1, JVector anchor2, LinearLimit limit)\n    {\n        VerifyNotZero();\n        ref SliderData data = ref Data;\n        ref RigidBodyData body1 = ref data.Body1.Data;\n        ref RigidBodyData body2 = ref data.Body2.Data;\n\n        JVector.NormalizeInPlace(ref axis);\n\n        JVector.Subtract(anchor1, body1.Position, out data.LocalAnchor1);\n        JVector.Subtract(anchor2, body2.Position, out data.LocalAnchor2);\n\n        JVector.ConjugatedTransform(data.LocalAnchor1, body1.Orientation, out data.LocalAnchor1);\n        JVector.ConjugatedTransform(data.LocalAnchor2, body2.Orientation, out data.LocalAnchor2);\n\n        JVector.ConjugatedTransform(axis, body1.Orientation, out data.LocalAxis);\n\n        data.BiasFactor = Constraint.DefaultLinearBias;\n        data.Softness = Constraint.DefaultLinearSoftness;\n\n        (data.Min, data.Max) = limit;\n    }\n\n    public static void PrepareForIterationPointOnPlane(ref ConstraintData constraint, Real idt)\n    {\n        ref var data = ref Unsafe.As<ConstraintData, SliderData>(ref constraint);\n        ref RigidBodyData body1 = ref data.Body1.Data;\n        ref RigidBodyData body2 = ref data.Body2.Data;\n\n        JVector.Transform(data.LocalAxis, body1.Orientation, out JVector axis);\n\n        JVector.Transform(data.LocalAnchor1, body1.Orientation, out JVector r1);\n        JVector.Transform(data.LocalAnchor2, body2.Orientation, out JVector r2);\n\n        JVector.Add(body1.Position, r1, out JVector p1);\n        JVector.Add(body2.Position, r2, out JVector p2);\n\n        data.Clamp = 0;\n\n        JVector u = p2 - p1;\n\n        var jacobian = new Span<JVector>(Unsafe.AsPointer(ref data.J0), 4);\n\n        jacobian[0] = -axis;\n        jacobian[1] = -((r1 + u) % axis);\n        jacobian[2] = axis;\n        jacobian[3] = r2 % axis;\n\n        Real error = JVector.Dot(u, axis);\n\n        data.EffectiveMass = (Real)1.0;\n\n        if (error > data.Max)\n        {\n            error -= data.Max;\n            data.Clamp = 1;\n        }\n        else if (error < data.Min)\n        {\n            error -= data.Min;\n            data.Clamp = 2;\n        }\n        else\n        {\n            data.AccumulatedImpulse = 0;\n            return;\n        }\n\n        data.EffectiveMass = body1.InverseMass + body2.InverseMass +\n                             JVector.Transform(jacobian[1], body1.InverseInertiaWorld) * jacobian[1] +\n                             JVector.Transform(jacobian[3], body2.InverseInertiaWorld) * jacobian[3];\n\n        data.EffectiveMass += (data.Softness * idt);\n        data.EffectiveMass = (Real)1.0 / data.EffectiveMass;\n\n        data.Bias = error * data.BiasFactor * idt;\n\n        Real acc = data.AccumulatedImpulse;\n\n        body1.Velocity += body1.InverseMass * (jacobian[0] * acc);\n        body1.AngularVelocity += JVector.Transform(jacobian[1] * acc, body1.InverseInertiaWorld);\n\n        body2.Velocity += body2.InverseMass * (jacobian[2] * acc);\n        body2.AngularVelocity += JVector.Transform(jacobian[3] * acc, body2.InverseInertiaWorld);\n    }\n\n    /// <summary>\n    /// Gets or sets the softness (compliance) of the constraint.\n    /// </summary>\n    /// <value>\n    /// Default is 0.00001. Higher values allow more positional error but improve stability.\n    /// </value>\n    public Real Softness\n    {\n        get => Data.Softness;\n        set => Data.Softness = value;\n    }\n\n    /// <summary>\n    /// Gets or sets the bias factor controlling how aggressively positional error is corrected.\n    /// </summary>\n    /// <value>\n    /// Default is 0.01. Range [0, 1]. Higher values correct errors faster but may cause instability.\n    /// </value>\n    public Real Bias\n    {\n        get => Data.BiasFactor;\n        set => Data.BiasFactor = value;\n    }\n\n    /// <summary>\n    /// Gets the accumulated impulse applied by this constraint during the last step.\n    /// </summary>\n    public Real Impulse => Data.AccumulatedImpulse;\n\n    public static void IteratePointOnPlane(ref ConstraintData constraint, Real idt)\n    {\n        ref var data = ref Unsafe.As<ConstraintData, SliderData>(ref constraint);\n        ref RigidBodyData body1 = ref constraint.Body1.Data;\n        ref RigidBodyData body2 = ref constraint.Body2.Data;\n\n        if (data.Clamp == 0) return;\n\n        var jacobian = new Span<JVector>(Unsafe.AsPointer(ref data.J0), 4);\n\n        Real jv = jacobian[0] * body1.Velocity + jacobian[1] * body1.AngularVelocity + jacobian[2] * body2.Velocity +\n                   jacobian[3] * body2.AngularVelocity;\n\n        Real softness = data.AccumulatedImpulse * data.Softness * idt;\n\n        Real lambda = -(Real)1.0 * (jv + data.Bias + softness) * data.EffectiveMass;\n\n        Real origAcc = data.AccumulatedImpulse;\n\n        data.AccumulatedImpulse += lambda;\n\n        if (data.Clamp == 1)\n        {\n            data.AccumulatedImpulse = MathR.Min(data.AccumulatedImpulse, (Real)0.0);\n        }\n        else\n        {\n            data.AccumulatedImpulse = MathR.Max(data.AccumulatedImpulse, (Real)0.0);\n        }\n\n        lambda = data.AccumulatedImpulse - origAcc;\n\n        body1.Velocity += body1.InverseMass * (jacobian[0] * lambda);\n        body1.AngularVelocity += JVector.Transform(jacobian[1] * lambda, body1.InverseInertiaWorld);\n\n        body2.Velocity += body2.InverseMass * (jacobian[2] * lambda);\n        body2.AngularVelocity += JVector.Transform(jacobian[3] * lambda, body2.InverseInertiaWorld);\n    }\n\n    public override void DebugDraw(IDebugDrawer drawer)\n    {\n        ref SliderData data = ref Data;\n        ref RigidBodyData body1 = ref data.Body1.Data;\n        ref RigidBodyData body2 = ref data.Body2.Data;\n\n        JVector.Transform(data.LocalAnchor1, body1.Orientation, out JVector r1);\n        JVector.Transform(data.LocalAnchor2, body2.Orientation, out JVector r2);\n        JVector.Transform(data.LocalAxis, body1.Orientation, out JVector axis);\n\n        JVector p1 = body1.Position + r1;\n        JVector p2 = body2.Position + r2;\n\n        Real normalLength = (Real)0.5;\n        drawer.DrawSegment(p1, p1 + axis * normalLength);\n        drawer.DrawSegment(body2.Position, p2);\n        drawer.DrawPoint(p1);\n        drawer.DrawPoint(p2);\n    }\n}\n"
  },
  {
    "path": "src/Jitter2/Dynamics/Constraints/TwistAngle.cs",
    "content": "/*\n * Jitter2 Physics Library\n * (c) Thorben Linneweber and contributors\n * SPDX-License-Identifier: MIT\n */\n\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\nusing Jitter2.LinearMath;\nusing Jitter2.Unmanaged;\n\nnamespace Jitter2.Dynamics.Constraints;\n\n/// <summary>\n/// Constrains the relative twist of two bodies. This constraint removes one angular\n/// degree of freedom when the limit is enforced.\n/// </summary>\npublic unsafe class TwistAngle : Constraint<TwistAngle.TwistLimitData>\n{\n    [StructLayout(LayoutKind.Sequential)]\n    public struct TwistLimitData\n    {\n        internal int _internal;\n        internal uint DispatchId;\n        internal ulong ConstraintId;\n\n        public JHandle<RigidBodyData> Body1;\n        public JHandle<RigidBodyData> Body2;\n\n        public JVector B;\n\n        public JQuaternion Q0;\n\n        public Real Angle1, Angle2;\n        public ushort Clamp;\n\n        public Real BiasFactor;\n        public Real Softness;\n\n        public Real EffectiveMass;\n        public Real AccumulatedImpulse;\n        public Real Bias;\n\n        public JVector Jacobian;\n    }\n\n    private static readonly uint RegisteredDispatchId =\n        RegisterFullConstraint(&PrepareForIterationTwistAngle, &IterateTwistAngle);\n\n    protected override void Create()\n    {\n        DispatchId = RegisteredDispatchId;\n        base.Create();\n    }\n\n    /// <inheritdoc />\n    public override void ResetWarmStart() => Data.AccumulatedImpulse = (Real)0.0;\n\n    /// <summary>\n    /// Initializes the constraint from world-space axes and angular limits.\n    /// </summary>\n    /// <param name=\"axis1\">The twist axis for body 1 in world space.</param>\n    /// <param name=\"axis2\">The twist axis for body 2 in world space.</param>\n    /// <param name=\"limit\">The allowed relative twist angle range.</param>\n    /// <remarks>\n    /// Stores each axis in the local frame of its body and records the initial relative orientation.\n    /// Default values: <see cref=\"Softness\"/> = <see cref=\"Constraint.DefaultAngularSoftness\"/>, <see cref=\"Bias\"/> = <see cref=\"Constraint.DefaultAngularBias\"/>.\n    /// </remarks>\n    public void Initialize(JVector axis1, JVector axis2, AngularLimit limit)\n    {\n        VerifyNotZero();\n        ref TwistLimitData data = ref Data;\n        ref RigidBodyData body1 = ref data.Body1.Data;\n        ref RigidBodyData body2 = ref data.Body2.Data;\n\n        data.Softness = Constraint.DefaultAngularSoftness;\n        data.BiasFactor = Constraint.DefaultAngularBias;\n\n        JVector.NormalizeInPlace(ref axis1);\n        JVector.NormalizeInPlace(ref axis2);\n\n        data.Angle1 = StableMath.Sin((Real)limit.From / (Real)2.0);\n        data.Angle2 = StableMath.Sin((Real)limit.To / (Real)2.0);\n\n        // Calculate local axes\n        JVector u1 = JVector.ConjugatedTransform(axis1, body1.Orientation);\n        data.B = JVector.ConjugatedTransform(axis2, body2.Orientation);\n\n        // 1. Calculate the initial relative orientation (Body1 -> Body2)\n        JQuaternion q1 = body1.Orientation;\n        JQuaternion q2 = body2.Orientation;\n        JQuaternion qRel = q2.Conjugate() * q1;\n\n        // 2. Map u1 into Body2 space using the initial orientation\n        JVector u1InB2 = JVector.Transform(u1, qRel);\n\n        // 3. Calculate the correction rotation to align u1_in_B2 to data.B (u2)\n        // This calculates the 'swing' offset between the two axes\n        JQuaternion qCorrection = JQuaternion.CreateFromToRotation(u1InB2, data.B);\n\n        // 4. Apply correction to Q0.\n        // Q0 now represents a reference orientation where the axes are perfectly aligned.\n        data.Q0 = qCorrection * qRel;\n    }\n\n    /// <summary>\n    /// Sets the angular limits for the twist rotation.\n    /// </summary>\n    public AngularLimit Limit\n    {\n        set\n        {\n            ref TwistLimitData data = ref Data;\n            data.Angle1 = StableMath.Sin((Real)value.From / (Real)2.0);\n            data.Angle2 = StableMath.Sin((Real)value.To / (Real)2.0);\n        }\n    }\n\n    /// <summary>\n    /// Initializes the constraint with a fixed twist angle (no rotation allowed).\n    /// </summary>\n    /// <param name=\"axis1\">The twist axis for body 1 in world space.</param>\n    /// <param name=\"axis2\">The twist axis for body 2 in world space.</param>\n    public void Initialize(JVector axis1, JVector axis2)\n    {\n        Initialize(axis1, axis2, AngularLimit.Fixed);\n    }\n\n    public static void PrepareForIterationTwistAngle(ref ConstraintData constraint, Real idt)\n    {\n        ref var data = ref Unsafe.As<ConstraintData, TwistLimitData>(ref constraint);\n\n        ref RigidBodyData body1 = ref data.Body1.Data;\n        ref RigidBodyData body2 = ref data.Body2.Data;\n\n        JQuaternion q1 = body1.Orientation;\n        JQuaternion q2 = body2.Orientation;\n\n        JMatrix m = (-(Real)(1.0 / 2.0)) * QMatrix.ProjectMultiplyLeftRight(data.Q0 * q1.Conjugate(), q2);\n\n        JQuaternion q = data.Q0 * q1.Conjugate() * q2;\n\n        data.Jacobian = JVector.TransposedTransform(data.B, m);\n\n        data.EffectiveMass = JVector.Transform(data.Jacobian, body1.InverseInertiaWorld + body2.InverseInertiaWorld) * data.Jacobian;\n\n        data.EffectiveMass += (data.Softness * idt);\n\n        data.EffectiveMass = (Real)1.0 / data.EffectiveMass;\n\n        Real error = JVector.Dot(data.B, new JVector(q.X, q.Y, q.Z));\n\n        if (q.W < (Real)0.0)\n        {\n            error *= -(Real)1.0;\n            data.Jacobian *= -1;\n        }\n\n        data.Clamp = 0;\n\n        if (error >= data.Angle2)\n        {\n            data.Clamp = 1;\n            error -= data.Angle2;\n        }\n        else if (error < data.Angle1)\n        {\n            data.Clamp = 2;\n            error -= data.Angle1;\n        }\n        else\n        {\n            data.AccumulatedImpulse = (Real)0.0;\n            return;\n        }\n\n        data.Bias = error * data.BiasFactor * idt;\n\n        body1.AngularVelocity += JVector.Transform(data.AccumulatedImpulse * data.Jacobian, body1.InverseInertiaWorld);\n        body2.AngularVelocity -= JVector.Transform(data.AccumulatedImpulse * data.Jacobian, body2.InverseInertiaWorld);\n    }\n\n    /// <summary>\n    /// Gets the current twist angle relative to the initial pose.\n    /// </summary>\n    public JAngle Angle\n    {\n        get\n        {\n            ref var data = ref Data;\n            JQuaternion q1 = data.Body1.Data.Orientation;\n            JQuaternion q2 = data.Body2.Data.Orientation;\n\n            JQuaternion quat0 = data.Q0 * q1.Conjugate() * q2;\n\n            if (quat0.W < (Real)0.0)\n            {\n                quat0 *= -(Real)1.0;\n            }\n\n            Real error = JVector.Dot(data.B, new JVector(quat0.X, quat0.Y, quat0.Z));\n            return (JAngle)((Real)2.0 * StableMath.Asin(error));\n        }\n    }\n\n    /// <summary>\n    /// Gets or sets the softness (compliance) of the constraint.\n    /// </summary>\n    /// <value>\n    /// Default is 0.0001. Higher values allow more angular error but improve stability.\n    /// </value>\n    public Real Softness\n    {\n        get => Data.Softness;\n        set => Data.Softness = value;\n    }\n\n    /// <summary>\n    /// Gets or sets the bias factor controlling how aggressively angular error is corrected.\n    /// </summary>\n    /// <value>\n    /// Default is 0.2. Range [0, 1]. Higher values correct errors faster but may cause instability.\n    /// </value>\n    public Real Bias\n    {\n        get => Data.BiasFactor;\n        set => Data.BiasFactor = value;\n    }\n\n    /// <summary>\n    /// Gets the accumulated impulse applied by this constraint during the last step.\n    /// </summary>\n    public Real Impulse => Data.AccumulatedImpulse;\n\n    public override void DebugDraw(IDebugDrawer drawer)\n    {\n        ref TwistLimitData data = ref Data;\n        ref RigidBodyData body1 = ref data.Body1.Data;\n        ref RigidBodyData body2 = ref data.Body2.Data;\n\n        JVector.Transform(data.B, body2.Orientation, out JVector axis);\n\n        const Real axisLength = (Real)0.5;\n        drawer.DrawSegment(body1.Position, body1.Position + axis * axisLength);\n        drawer.DrawSegment(body2.Position, body2.Position + axis * axisLength);\n    }\n\n    public static void IterateTwistAngle(ref ConstraintData constraint, Real idt)\n    {\n        ref var data = ref Unsafe.As<ConstraintData, TwistLimitData>(ref constraint);\n        ref RigidBodyData body1 = ref constraint.Body1.Data;\n        ref RigidBodyData body2 = ref constraint.Body2.Data;\n\n        if (data.Clamp == 0) return;\n\n        Real jv = (body1.AngularVelocity - body2.AngularVelocity) * data.Jacobian;\n\n        Real softnessScalar = data.AccumulatedImpulse * (data.Softness * idt);\n\n        Real lambda = -data.EffectiveMass * (jv + data.Bias + softnessScalar);\n\n        Real origAcc = data.AccumulatedImpulse;\n        data.AccumulatedImpulse += lambda;\n\n        if (data.Clamp == 1)\n        {\n            data.AccumulatedImpulse = MathR.Min(data.AccumulatedImpulse, (Real)0.0);\n        }\n        else\n        {\n            data.AccumulatedImpulse = MathR.Max(data.AccumulatedImpulse, (Real)0.0);\n        }\n\n        lambda = data.AccumulatedImpulse - origAcc;\n\n        body1.AngularVelocity += JVector.Transform(lambda * data.Jacobian, body1.InverseInertiaWorld);\n        body2.AngularVelocity -= JVector.Transform(lambda * data.Jacobian, body2.InverseInertiaWorld);\n    }\n}\n"
  },
  {
    "path": "src/Jitter2/Dynamics/Contact.cs",
    "content": "/*\n * Jitter2 Physics Library\n * (c) Thorben Linneweber and contributors\n * SPDX-License-Identifier: MIT\n */\n\n\nusing System;\nusing System.Diagnostics;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\nusing System.Runtime.Intrinsics;\nusing Jitter2.LinearMath;\nusing Jitter2.Unmanaged;\n\nnamespace Jitter2.Dynamics;\n\n/// <summary>\n/// Holds up to four <see cref=\"Contact\"/> structs for a single shape-to-shape collision.\n/// </summary>\n/// <remarks>\n/// <para>\n/// This structure is stored in unmanaged memory and accessed via <see cref=\"Arbiter.Handle\"/>.\n/// The <see cref=\"UsageMask\"/> bitfield indicates which of the four contact slots are active.\n/// </para>\n/// <para>\n/// The returned data is valid only while the associated arbiter exists and must not be accessed\n/// concurrently with <see cref=\"World.Step(Real, bool)\"/>. Do not cache references to this structure.\n/// </para>\n/// </remarks>\n[StructLayout(LayoutKind.Sequential)]\npublic struct ContactData\n{\n    /// <summary>\n    /// Specifies which velocity components the solver should update for each body.\n    /// </summary>\n    [Flags]\n    public enum SolveMode\n    {\n        /// <summary>No velocity updates.</summary>\n        None = 0,\n        /// <summary>Update linear velocity of body 1.</summary>\n        LinearBody1 = 1 << 0,\n        /// <summary>Update angular velocity of body 1.</summary>\n        AngularBody1 = 1 << 1,\n        /// <summary>Update linear velocity of body 2.</summary>\n        LinearBody2 = 1 << 2,\n        /// <summary>Update angular velocity of body 2.</summary>\n        AngularBody2 = 1 << 3,\n        /// <summary>Update both linear and angular velocity of body 1.</summary>\n        FullBody1 = LinearBody1 | AngularBody1,\n        /// <summary>Update both linear and angular velocity of body 2.</summary>\n        FullBody2 = LinearBody2 | AngularBody2,\n        /// <summary>Update linear velocities of both bodies.</summary>\n        Linear = LinearBody1 | LinearBody2,\n        /// <summary>Update angular velocities of both bodies.</summary>\n        Angular = AngularBody1 | AngularBody2,\n        /// <summary>Update all velocity components of both bodies.</summary>\n        Full = Linear | Angular,\n    }\n\n    /// <summary>Bit mask for contact slot 0.</summary>\n    public const uint MaskContact0 = 0b0001;\n    /// <summary>Bit mask for contact slot 1.</summary>\n    public const uint MaskContact1 = 0b0010;\n    /// <summary>Bit mask for contact slot 2.</summary>\n    public const uint MaskContact2 = 0b0100;\n    /// <summary>Bit mask for contact slot 3.</summary>\n    public const uint MaskContact3 = 0b1000;\n\n    /// <summary>Bit mask indicating all four contact slots are in use.</summary>\n    public const uint MaskContactAll = MaskContact0 | MaskContact1 | MaskContact2 | MaskContact3;\n\n    // Accessed in unsafe code.\n#pragma warning disable CS0649\n    internal int _internal;\n#pragma warning restore CS0649\n\n    /// <summary>\n    /// The least four significant bits indicate which contacts are considered intact (bit set), broken (bit unset).\n    /// Bits 5-8 indicate which contacts were intact/broken during the solving-phase.\n    /// </summary>\n    /// <example>\n    /// A sphere may slide down a ramp. Within one timestep Jitter may detect the collision, create the contact,\n    /// solve the contact, integrate velocities and positions and then consider the contact as broken, since the\n    /// movement orthogonal to the contact normal exceeds a threshold. This results in no intact contact before calling\n    /// <see cref=\"World.Step(Real, bool)\"/> and no intact contact after the call. However, the corresponding bit for the\n    /// solver-phase will be set in this scenario.\n    /// </example>\n    public uint UsageMask;\n\n    /// <summary>Handle to the first body's simulation data.</summary>\n    public JHandle<RigidBodyData> Body1;\n    /// <summary>Handle to the second body's simulation data.</summary>\n    public JHandle<RigidBodyData> Body2;\n\n    /// <summary>Unique key identifying this arbiter's shape pair.</summary>\n    public ArbiterKey Key;\n\n    /// <summary>Combined restitution coefficient for this contact pair.</summary>\n    public Real Restitution;\n    /// <summary>Combined friction coefficient for this contact pair.</summary>\n    public Real Friction;\n    /// <summary>Relaxation factor for speculative contacts.</summary>\n    public Real SpeculativeRelaxationFactor;\n\n    /// <summary>Determines which velocity components are updated by the solver.</summary>\n    public SolveMode Mode;\n\n    /// <summary>First contact point.</summary>\n    public Contact Contact0;\n    /// <summary>Second contact point.</summary>\n    public Contact Contact1;\n    /// <summary>Third contact point.</summary>\n    public Contact Contact2;\n    /// <summary>Fourth contact point.</summary>\n    public Contact Contact3;\n\n    /// <summary>\n    /// Prepares all active contacts for solver iterations by computing effective masses and warm-starting impulses.\n    /// </summary>\n    /// <param name=\"idt\">Inverse of the timestep (1/dt).</param>\n    public unsafe void PrepareForIteration(Real idt)\n    {\n        var ptr = (ContactData*)Unsafe.AsPointer(ref this);\n\n        if (Vector.IsHardwareAccelerated)\n        {\n            if ((UsageMask & MaskContact0) != 0) Contact0.PrepareForIterationAccelerated(ptr, idt);\n            if ((UsageMask & MaskContact1) != 0) Contact1.PrepareForIterationAccelerated(ptr, idt);\n            if ((UsageMask & MaskContact2) != 0) Contact2.PrepareForIterationAccelerated(ptr, idt);\n            if ((UsageMask & MaskContact3) != 0) Contact3.PrepareForIterationAccelerated(ptr, idt);\n        }\n        else\n        {\n            if ((UsageMask & MaskContact0) != 0) Contact0.PrepareForIteration(ptr, idt);\n            if ((UsageMask & MaskContact1) != 0) Contact1.PrepareForIteration(ptr, idt);\n            if ((UsageMask & MaskContact2) != 0) Contact2.PrepareForIteration(ptr, idt);\n            if ((UsageMask & MaskContact3) != 0) Contact3.PrepareForIteration(ptr, idt);\n        }\n    }\n\n    /// <summary>\n    /// Performs one solver iteration over all active contacts, applying corrective impulses.\n    /// </summary>\n    /// <param name=\"applyBias\">If <see langword=\"true\"/>, applies position-correction bias.</param>\n    public unsafe void Iterate(bool applyBias)\n    {\n        var ptr = (ContactData*)Unsafe.AsPointer(ref this);\n\n        if (Vector.IsHardwareAccelerated)\n        {\n            if ((UsageMask & MaskContact0) != 0) Contact0.IterateAccelerated(ptr, applyBias);\n            if ((UsageMask & MaskContact1) != 0) Contact1.IterateAccelerated(ptr, applyBias);\n            if ((UsageMask & MaskContact2) != 0) Contact2.IterateAccelerated(ptr, applyBias);\n            if ((UsageMask & MaskContact3) != 0) Contact3.IterateAccelerated(ptr, applyBias);\n        }\n        else\n        {\n            if ((UsageMask & MaskContact0) != 0) Contact0.Iterate(ptr, applyBias);\n            if ((UsageMask & MaskContact1) != 0) Contact1.Iterate(ptr, applyBias);\n            if ((UsageMask & MaskContact2) != 0) Contact2.Iterate(ptr, applyBias);\n            if ((UsageMask & MaskContact3) != 0) Contact3.Iterate(ptr, applyBias);\n        }\n    }\n\n    internal unsafe void PrepareForIterationAccelerated(Real idt)\n    {\n        var ptr = (ContactData*)Unsafe.AsPointer(ref this);\n\n        if ((UsageMask & MaskContact0) != 0) Contact0.PrepareForIterationAccelerated(ptr, idt);\n        if ((UsageMask & MaskContact1) != 0) Contact1.PrepareForIterationAccelerated(ptr, idt);\n        if ((UsageMask & MaskContact2) != 0) Contact2.PrepareForIterationAccelerated(ptr, idt);\n        if ((UsageMask & MaskContact3) != 0) Contact3.PrepareForIterationAccelerated(ptr, idt);\n    }\n\n    internal unsafe void PrepareForIterationScalar(Real idt)\n    {\n        var ptr = (ContactData*)Unsafe.AsPointer(ref this);\n\n        if ((UsageMask & MaskContact0) != 0) Contact0.PrepareForIteration(ptr, idt);\n        if ((UsageMask & MaskContact1) != 0) Contact1.PrepareForIteration(ptr, idt);\n        if ((UsageMask & MaskContact2) != 0) Contact2.PrepareForIteration(ptr, idt);\n        if ((UsageMask & MaskContact3) != 0) Contact3.PrepareForIteration(ptr, idt);\n    }\n\n    internal unsafe void IterateAccelerated(bool applyBias)\n    {\n        var ptr = (ContactData*)Unsafe.AsPointer(ref this);\n\n        if ((UsageMask & MaskContact0) != 0) Contact0.IterateAccelerated(ptr, applyBias);\n        if ((UsageMask & MaskContact1) != 0) Contact1.IterateAccelerated(ptr, applyBias);\n        if ((UsageMask & MaskContact2) != 0) Contact2.IterateAccelerated(ptr, applyBias);\n        if ((UsageMask & MaskContact3) != 0) Contact3.IterateAccelerated(ptr, applyBias);\n    }\n\n    internal unsafe void IterateScalar(bool applyBias)\n    {\n        var ptr = (ContactData*)Unsafe.AsPointer(ref this);\n\n        if ((UsageMask & MaskContact0) != 0) Contact0.Iterate(ptr, applyBias);\n        if ((UsageMask & MaskContact1) != 0) Contact1.Iterate(ptr, applyBias);\n        if ((UsageMask & MaskContact2) != 0) Contact2.Iterate(ptr, applyBias);\n        if ((UsageMask & MaskContact3) != 0) Contact3.Iterate(ptr, applyBias);\n    }\n\n    /// <summary>\n    /// Gets a value indicating whether the current system supports hardware acceleration\n    /// for SIMD (Single Instruction, Multiple Data) operations.\n    /// </summary>\n    public static bool IsHardwareAccelerated => Vector.IsHardwareAccelerated;\n\n    /// <summary>\n    /// Updates contact positions after integration and removes contacts that have separated beyond the break threshold.\n    /// </summary>\n    public unsafe void UpdatePosition()\n    {\n        UsageMask &= MaskContactAll;\n        UsageMask |= UsageMask << 4;\n\n        var ptr = (ContactData*)Unsafe.AsPointer(ref this);\n\n        if ((UsageMask & MaskContact0) != 0)\n        {\n            if (!Contact0.UpdatePosition(ptr)) UsageMask &= ~MaskContact0;\n        }\n\n        if ((UsageMask & MaskContact1) != 0)\n        {\n            if (!Contact1.UpdatePosition(ptr)) UsageMask &= ~MaskContact1;\n        }\n\n        if ((UsageMask & MaskContact2) != 0)\n        {\n            if (!Contact2.UpdatePosition(ptr)) UsageMask &= ~MaskContact2;\n        }\n\n        if ((UsageMask & MaskContact3) != 0)\n        {\n            if (!Contact3.UpdatePosition(ptr)) UsageMask &= ~MaskContact3;\n        }\n    }\n\n    /// <summary>\n    /// Initializes this contact data for a pair of rigid bodies.\n    /// </summary>\n    /// <param name=\"body1\">The first rigid body.</param>\n    /// <param name=\"body2\">The second rigid body.</param>\n    public void Init(RigidBody body1, RigidBody body2)\n    {\n        Body1 = body1.Handle;\n        Body2 = body2.Handle;\n\n        Friction = MathR.Max(body1.Friction, body2.Friction);\n        Restitution = MathR.Max(body1.Restitution, body2.Restitution);\n        SpeculativeRelaxationFactor = body1.World.SpeculativeRelaxationFactor;\n\n        Debug.Assert(body1.World == body2.World);\n\n        Mode = SolveMode.None;\n        UsageMask = 0;\n    }\n\n    /// <summary>\n    /// Resets the solve mode based on the current motion types of the bodies, then removes the specified flags.\n    /// </summary>\n    /// <param name=\"removeFlags\">Flags to remove from the full solve mode.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public void ResetMode(SolveMode removeFlags = SolveMode.None)\n    {\n        Mode = (Body1.Data.MotionType == MotionType.Dynamic) ? SolveMode.FullBody1 : 0;\n        Mode |= (Body2.Data.MotionType == MotionType.Dynamic) ? SolveMode.FullBody2 : 0;\n        Mode &= ~removeFlags;\n    }\n\n    // ---------------------------------------------------------------------------------------------------------\n    //\n    // The following contact caching code is heavily influenced / a direct copy of the great\n    // Bullet Physics Engine:\n\n    //\n    // Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2006 Erwin\n    // Coumans  https://bulletphysics.org\n\n    // This software is provided 'as-is', without any express or implied warranty. In no event will\n    // the authors be held liable for any damages arising from the use of this software. Permission\n    // is granted to anyone to use this software for any purpose, including commercial applications,\n    // and to alter it and redistribute it freely, subject to the following restrictions:\n\n    // 1. The origin of this software must not be misrepresented; you must not claim that you wrote\n    //    the original software. If you use this software in a product, an acknowledgment in the\n    //    product documentation would be appreciated but is not required.\n    // 2. Altered source versions must be plainly marked as such, and must not be misrepresented as\n    //    being the original software.\n    // 3. This notice may not be removed or altered from any source distribution.\n    //\n    // https://github.com/bulletphysics/bullet3/blob/39b8de74df93721add193e5b3d9ebee579faebf8/\n    // src/Bullet3OpenCL/NarrowphaseCollision/b3ContactCache.cpp\n\n    /// <summary>\n    /// Adds a new collision result to the contact manifold. Keeps at most four points.\n    /// </summary>\n    /// <param name=\"point1\">Contact point on the first body in world space.</param>\n    /// <param name=\"point2\">Contact point on the second body in world space.</param>\n    /// <param name=\"normal\">Contact normal pointing from body 2 to body 1.</param>\n    public unsafe void AddContact(in JVector point1, in JVector point2, in JVector normal)\n    {\n        if ((UsageMask & MaskContactAll) == MaskContactAll)\n        {\n            // All four contacts are in use. Find one candidate to be replaced by the new one.\n            SortCachedPoints(point1, point2, normal);\n            return;\n        }\n\n        // Not all contacts are in use, but the new contact point is close enough\n        // to an already existing point. Replace this point by the new one.\n\n        Contact* closest = (Contact*)IntPtr.Zero;\n        Real distanceSq = Real.MaxValue;\n\n        JVector relP1 = point1 - Body1.Data.Position;\n\n        if ((UsageMask & MaskContact0) != 0)\n        {\n            Real distSq = (Contact0.RelativePosition1 - relP1).LengthSquared();\n            if (distSq < distanceSq)\n            {\n                distanceSq = distSq;\n                closest = (Contact*)Unsafe.AsPointer(ref Contact0);\n            }\n        }\n\n        if ((UsageMask & MaskContact1) != 0)\n        {\n            Real distSq = (Contact1.RelativePosition1 - relP1).LengthSquared();\n            if (distSq < distanceSq)\n            {\n                distanceSq = distSq;\n                closest = (Contact*)Unsafe.AsPointer(ref Contact1);\n            }\n        }\n\n        if ((UsageMask & MaskContact2) != 0)\n        {\n            Real distSq = (Contact2.RelativePosition1 - relP1).LengthSquared();\n            if (distSq < distanceSq)\n            {\n                distanceSq = distSq;\n                closest = (Contact*)Unsafe.AsPointer(ref Contact2);\n            }\n        }\n\n        if ((UsageMask & MaskContact3) != 0)\n        {\n            Real distSq = (Contact3.RelativePosition1 - relP1).LengthSquared();\n            if (distSq < distanceSq)\n            {\n                distanceSq = distSq;\n                closest = (Contact*)Unsafe.AsPointer(ref Contact3);\n            }\n        }\n\n        if (distanceSq < Contact.BreakThreshold * Contact.BreakThreshold)\n        {\n            closest->Initialize(ref Body1.Data, ref Body2.Data, point1, point2, normal, false, Restitution);\n            return;\n        }\n\n        // It is a completely new contact.\n\n        if ((UsageMask & MaskContact0) == 0)\n        {\n            Contact0.Initialize(ref Body1.Data, ref Body2.Data, point1, point2, normal, true, Restitution);\n            UsageMask |= MaskContact0;\n        }\n        else if ((UsageMask & MaskContact1) == 0)\n        {\n            Contact1.Initialize(ref Body1.Data, ref Body2.Data, point1, point2, normal, true, Restitution);\n            UsageMask |= MaskContact1;\n        }\n        else if ((UsageMask & MaskContact2) == 0)\n        {\n            Contact2.Initialize(ref Body1.Data, ref Body2.Data, point1, point2, normal, true, Restitution);\n            UsageMask |= MaskContact2;\n        }\n        else if ((UsageMask & MaskContact3) == 0)\n        {\n            Contact3.Initialize(ref Body1.Data, ref Body2.Data, point1, point2, normal, true, Restitution);\n            UsageMask |= MaskContact3;\n        }\n    }\n\n    private static Real CalcArea4Points(in JVector p0, in JVector p1, in JVector p2, in JVector p3)\n    {\n        JVector a0 = p0 - p1;\n        JVector a1 = p0 - p2;\n        JVector a2 = p0 - p3;\n        JVector b0 = p2 - p3;\n        JVector b1 = p1 - p3;\n        JVector b2 = p1 - p2;\n\n        JVector tmp0 = a0 % b0;\n        JVector tmp1 = a1 % b1;\n        JVector tmp2 = a2 % b2;\n\n        return MathR.Max(MathR.Max(tmp0.LengthSquared(), tmp1.LengthSquared()), tmp2.LengthSquared());\n    }\n\n    private void SortCachedPoints(in JVector point1, in JVector point2, in JVector normal)\n    {\n        JVector.Subtract(point1, Body1.Data.Position, out JVector rp1);\n\n        // calculate 4 possible cases areas, and take the biggest area\n        // int maxPenetrationIndex = -1;\n        // Real maxPenetration = penetration;\n\n        // always prefer the new point\n        const Real epsilon = -(Real)0.0001;\n\n        Real biggestArea = 0;\n\n        ref Contact cref = ref Contact0;\n        uint index = 0;\n\n        Real area = CalcArea4Points(rp1, Contact1.RelativePosition1, Contact2.RelativePosition1, Contact3.RelativePosition1);\n\n        if (area > biggestArea + epsilon)\n        {\n            biggestArea = area;\n            cref = ref Contact0;\n            index = MaskContact0;\n        }\n\n        area = CalcArea4Points(rp1, Contact0.RelativePosition1, Contact2.RelativePosition1, Contact3.RelativePosition1);\n\n        if (area > biggestArea + epsilon)\n        {\n            biggestArea = area;\n            cref = ref Contact1;\n            index = MaskContact1;\n        }\n\n        area = CalcArea4Points(rp1, Contact0.RelativePosition1, Contact1.RelativePosition1, Contact3.RelativePosition1);\n\n        if (area > biggestArea + epsilon)\n        {\n            biggestArea = area;\n            cref = ref Contact2;\n            index = MaskContact2;\n        }\n\n        area = CalcArea4Points(rp1, Contact0.RelativePosition1, Contact1.RelativePosition1, Contact2.RelativePosition1);\n\n        if (area > biggestArea + epsilon)\n        {\n            cref = ref Contact3;\n            index = MaskContact3;\n        }\n\n        cref.Initialize(ref Body1.Data, ref Body2.Data, point1, point2, normal, false, Restitution);\n        UsageMask |= index;\n    }\n\n    // ---------------------------------------------------------------------------------------------------------\n\n    /// <summary>\n    /// Represents a single contact point between two rigid bodies.\n    /// </summary>\n    /// <remarks>\n    /// <para>\n    /// This structure is layout-sensitive and stored in unmanaged memory as part of a <see cref=\"ContactData\"/>.\n    /// It contains geometric information (normal, tangents, positions) and solver state (accumulated impulses, bias).\n    /// </para>\n    /// <para>\n    /// Do not cache or store references to this structure across simulation steps.\n    /// </para>\n    /// </remarks>\n    [StructLayout(LayoutKind.Explicit)]\n    public struct Contact\n    {\n        /// <summary>Maximum position-correction bias applied per iteration.</summary>\n        public const Real MaximumBias = (Real)100.0;\n        /// <summary>Fraction of penetration corrected per step (Baumgarte stabilization).</summary>\n        public const Real BiasFactor = (Real)0.2;\n        /// <summary>Penetration depth below which no position correction is applied.</summary>\n        public const Real AllowedPenetration = (Real)0.01;\n        /// <summary>Separation distance beyond which a contact is considered broken.</summary>\n        public const Real BreakThreshold = (Real)0.02;\n\n        /// <summary>\n        /// Flags indicating contact state.\n        /// </summary>\n        [Flags]\n        public enum Flags\n        {\n            /// <summary>Indicates this contact was created in the current step.</summary>\n            NewContact = 1 << 1,\n        }\n\n        /// <summary>Current contact state flags.</summary>\n        [FieldOffset(0)] public Flags Flag;\n\n        /// <summary>Velocity bias for restitution (bounce).</summary>\n        [FieldOffset(4)] public Real Bias;\n\n        /// <summary>Position-correction bias computed from penetration depth.</summary>\n        [FieldOffset(4 + 1 * sizeof(Real))] public Real PenaltyBias;\n\n        // ―――――― The following 4-component vectors overlap ――――――――――――――――――――――――――――――\n\n        [FieldOffset(4 + 2 * sizeof(Real))] internal VectorReal NormalTangentX;\n\n        [FieldOffset(4 + 5 * sizeof(Real))] internal VectorReal NormalTangentY;\n\n        [FieldOffset(4 + 8 * sizeof(Real))] internal VectorReal NormalTangentZ;\n\n        [FieldOffset(4 + 11 * sizeof(Real))] internal VectorReal MassNormalTangent;\n\n        [FieldOffset(4 + 14 * sizeof(Real))] internal VectorReal Accumulated;\n\n        [FieldOffset(4 + 18 * sizeof(Real))] [ReferenceFrame(ReferenceFrame.Local)]\n        internal JVector Position1;\n\n        [FieldOffset(4 + 21 * sizeof(Real))] [ReferenceFrame(ReferenceFrame.Local)]\n        internal JVector Position2;\n\n        /// <summary>\n        /// Position of the contact relative to the center of mass on the first body.\n        /// </summary>\n        [FieldOffset(4+25*sizeof(Real))]\n        [ReferenceFrame(ReferenceFrame.World)] public JVector RelativePosition1;\n\n        /// <summary>\n        /// Position of the contact relative to the center of mass on the second body.\n        /// </summary>\n        [FieldOffset(4+28*sizeof(Real))]\n        [ReferenceFrame(ReferenceFrame.World)] public JVector RelativePosition2;\n\n        /// <summary>\n        /// Normal direction (normalized) of the contact.\n        /// Pointing from the collision point on the surface of <see cref=\"ContactData.Body2\"/> to the collision point\n        /// on the surface of <see cref=\"ContactData.Body1\"/>.\n        /// </summary>\n        [ReferenceFrame(ReferenceFrame.World)] public readonly JVector Normal => new (NormalTangentX.GetElement(0),\n            NormalTangentY.GetElement(0), NormalTangentZ.GetElement(0));\n\n        /// <summary>\n        /// Tangent (normalized) to the contact <see cref=\"Normal\"/> in the direction of the relative movement of\n        /// both bodies, at the time when the contact is created.\n        /// </summary>\n        [ReferenceFrame(ReferenceFrame.World)] public readonly JVector Tangent1 => new (NormalTangentX.GetElement(1),\n            NormalTangentY.GetElement(1), NormalTangentZ.GetElement(1));\n\n        /// <summary>\n        /// A second tangent forming an orthonormal basis with <see cref=\"Normal\"/> and <see cref=\"Tangent1\"/>.\n        /// </summary>\n        [ReferenceFrame(ReferenceFrame.World)] public readonly JVector Tangent2 => new JVector(NormalTangentX.GetElement(2),\n            NormalTangentY.GetElement(2), NormalTangentZ.GetElement(2));\n\n        /// <summary>\n        /// The impulse applied in the normal direction which has been used to solve the contact.\n        /// </summary>\n        public readonly Real Impulse => Accumulated.GetElement(0);\n\n        /// <summary>\n        /// The impulse applied in the first tangent direction which has been used to solve the contact.\n        /// </summary>\n        public readonly Real TangentImpulse1 => Accumulated.GetElement(1);\n\n        /// <summary>\n        /// The impulse applied in the second tangent direction which has been used to solve the contact.\n        /// </summary>\n        public readonly Real TangentImpulse2 => Accumulated.GetElement(2);\n\n        [MethodImpl(MethodImplOptions.AggressiveOptimization)]\n        public void Initialize(ref RigidBodyData b1, ref RigidBodyData b2, in JVector point1, in JVector point2,\n            in JVector n, bool newContact, Real restitution)\n        {\n            Debug.Assert(Math.Abs(n.LengthSquared() - (Real)1.0) < 1e-3);\n\n            JVector.Subtract(point1, b1.Position, out RelativePosition1);\n            JVector.Subtract(point2, b2.Position, out RelativePosition2);\n            JVector.ConjugatedTransform(RelativePosition1, b1.Orientation, out Position1);\n            JVector.ConjugatedTransform(RelativePosition2, b2.Orientation, out Position2);\n\n            // Material Properties\n            if (!newContact) return;\n\n            Flag = Flags.NewContact;\n            Accumulated = Vector.Create((Real)0.0);\n\n            JVector dv = b2.Velocity + b2.AngularVelocity % RelativePosition2;\n            dv -= b1.Velocity + b1.AngularVelocity % RelativePosition1;\n\n            Real relNormalVel = JVector.Dot(dv, n);\n\n            Bias = 0;\n\n            // Fake restitution\n            if (relNormalVel < (Real)(-1.0))\n            {\n                Bias = -restitution * relNormalVel;\n            }\n\n            var tangent1 = dv - n * relNormalVel;\n\n            Real num = tangent1.LengthSquared();\n\n            if (num > (Real)1e-12)\n            {\n                num = (Real)1.0 / MathR.Sqrt(num);\n                tangent1 *= num;\n            }\n            else\n            {\n                tangent1 = MathHelper.CreateOrthonormal(n);\n            }\n\n            var tangent2 = tangent1 % n;\n\n            NormalTangentX = Vector.Create(n.X, tangent1.X, tangent2.X, 0);\n            NormalTangentY = Vector.Create(n.Y, tangent1.Y, tangent2.Y, 0);\n            NormalTangentZ = Vector.Create(n.Z, tangent1.Z, tangent2.Z, 0);\n        }\n\n        [MethodImpl(MethodImplOptions.AggressiveOptimization)]\n        public readonly unsafe bool UpdatePosition(ContactData* cd)\n        {\n            ref var b1 = ref cd->Body1.Data;\n            ref var b2 = ref cd->Body2.Data;\n\n            JVector.Transform(Position1, b1.Orientation, out var relativePos1);\n            JVector.Add(relativePos1, b1.Position, out JVector p1);\n\n            JVector.Transform(Position2, b2.Orientation, out var relativePos2);\n            JVector.Add(relativePos2, b2.Position, out JVector p2);\n\n            JVector.Subtract(p1, p2, out JVector dist);\n\n            JVector n = new JVector(NormalTangentX.GetElement(0),\n                NormalTangentY.GetElement(0),\n                NormalTangentZ.GetElement(0));\n\n            Real penetration = JVector.Dot(dist, n);\n\n            // use a tenth of the actual threshold value here.\n            if (penetration < -BreakThreshold * (Real)0.1)\n            {\n                return false;\n            }\n\n            dist -= penetration * n;\n            Real tangentialOffsetSq = dist.LengthSquared();\n\n            if (tangentialOffsetSq > BreakThreshold * BreakThreshold)\n            {\n                return false;\n            }\n\n            return true;\n        }\n\n        // Fallback for missing hardware acceleration\n        #region public unsafe void PrepareForIteration(ContactData* cd, Real idt)\n\n        public unsafe void PrepareForIteration(ContactData* cd, Real idt)\n        {\n            // Begin read from VectorReal\n            Real accumulatedNormalImpulse = Accumulated.GetElement(0);\n            Real accumulatedTangentImpulse1 = Accumulated.GetElement(1);\n            Real accumulatedTangentImpulse2 = Accumulated.GetElement(2);\n\n            ref var b1 = ref cd->Body1.Data;\n            ref var b2 = ref cd->Body2.Data;\n            JVector normal = Normal;\n            JVector tangent1 = Tangent1;\n            JVector tangent2 = Tangent2;\n\n            JVector.Transform(Position1, b1.Orientation, out RelativePosition1);\n            JVector.Transform(Position2, b2.Orientation, out RelativePosition2);\n\n            Real inverseMass = b1.InverseMass + b2.InverseMass;\n\n            if ((Flag & Flags.NewContact) == 0)\n            {\n                Bias = 0;\n            }\n\n            JVector.Add(RelativePosition1, b1.Position, out JVector p1);\n            JVector.Add(RelativePosition2, b2.Position, out JVector p2);\n            JVector.Subtract(p1, p2, out JVector dist);\n            Real penetration = JVector.Dot(dist, normal);\n\n            if (penetration < -BreakThreshold)\n            {\n                // Speculative contact\n                Bias = penetration * idt * cd->SpeculativeRelaxationFactor;\n            }\n\n            Flag &= ~Flags.NewContact;\n\n            Real kTangent1 = inverseMass;\n            Real kTangent2 = inverseMass;\n            Real kNormal = inverseMass;\n            JVector angularNormalContribution = JVector.Zero;\n            JVector angularTangent1Contribution = JVector.Zero;\n            JVector angularTangent2Contribution = JVector.Zero;\n\n            JVector impulse = accumulatedNormalImpulse * normal;\n            impulse += accumulatedTangentImpulse1 * tangent1;\n            impulse += accumulatedTangentImpulse2 * tangent2;\n\n            if ((cd->Mode & SolveMode.LinearBody1) != 0)\n            {\n                b1.Velocity -= impulse * b1.InverseMass;\n            }\n\n            if ((cd->Mode & SolveMode.AngularBody1) != 0)\n            {\n                JVector angularNormal = TransformSymmetricInertia(RelativePosition1 % normal, b1.InverseInertiaWorld);\n                JVector angularTangent1 = TransformSymmetricInertia(RelativePosition1 % tangent1, b1.InverseInertiaWorld);\n                JVector angularTangent2 = TransformSymmetricInertia(RelativePosition1 % tangent2, b1.InverseInertiaWorld);\n\n                angularNormalContribution += angularNormal % RelativePosition1;\n                angularTangent1Contribution += angularTangent1 % RelativePosition1;\n                angularTangent2Contribution += angularTangent2 % RelativePosition1;\n\n                JVector angularImpulse = accumulatedNormalImpulse * angularNormal;\n                angularImpulse += accumulatedTangentImpulse1 * angularTangent1;\n                angularImpulse += accumulatedTangentImpulse2 * angularTangent2;\n                b1.AngularVelocity -= angularImpulse;\n            }\n\n\n            if ((cd->Mode & SolveMode.LinearBody2) != 0)\n            {\n                b2.Velocity += impulse * b2.InverseMass;\n            }\n\n            if ((cd->Mode & SolveMode.AngularBody2) != 0)\n            {\n                JVector angularNormal = TransformSymmetricInertia(RelativePosition2 % normal, b2.InverseInertiaWorld);\n                JVector angularTangent1 = TransformSymmetricInertia(RelativePosition2 % tangent1, b2.InverseInertiaWorld);\n                JVector angularTangent2 = TransformSymmetricInertia(RelativePosition2 % tangent2, b2.InverseInertiaWorld);\n\n                angularNormalContribution += angularNormal % RelativePosition2;\n                angularTangent1Contribution += angularTangent1 % RelativePosition2;\n                angularTangent2Contribution += angularTangent2 % RelativePosition2;\n\n                JVector angularImpulse = accumulatedNormalImpulse * angularNormal;\n                angularImpulse += accumulatedTangentImpulse1 * angularTangent1;\n                angularImpulse += accumulatedTangentImpulse2 * angularTangent2;\n                b2.AngularVelocity += angularImpulse;\n            }\n\n            kNormal += JVector.Dot(normal, angularNormalContribution);\n            kTangent1 += JVector.Dot(tangent1, angularTangent1Contribution);\n            kTangent2 += JVector.Dot(tangent2, angularTangent2Contribution);\n\n            Real massTangent1 = (Real)1.0 / kTangent1;\n            Real massTangent2 = (Real)1.0 / kTangent2;\n            Real massNormal = (Real)1.0 / kNormal;\n\n            JVector mass = new (massNormal, massTangent1, massTangent2);\n            Unsafe.CopyBlock(Unsafe.AsPointer(ref MassNormalTangent), Unsafe.AsPointer(ref mass), 3 * sizeof(Real));\n\n            PenaltyBias = BiasFactor * idt * Math.Max((Real)0.0, penetration - AllowedPenetration);\n            PenaltyBias = Math.Min(PenaltyBias, MaximumBias);\n        }\n\n        #endregion\n\n        // Fallback for missing hardware acceleration\n        #region public unsafe void Iterate(ContactData* cd, bool applyBias)\n\n        public unsafe void Iterate(ContactData* cd, bool applyBias)\n        {\n            // Begin read from VectorReal\n            Real massNormal = MassNormalTangent.GetElement(0);\n            Real massTangent1 = MassNormalTangent.GetElement(1);\n            Real massTangent2 = MassNormalTangent.GetElement(2);\n            Real accumulatedNormalImpulse = Accumulated.GetElement(0);\n            Real accumulatedTangentImpulse1 = Accumulated.GetElement(1);\n            Real accumulatedTangentImpulse2 = Accumulated.GetElement(2);\n\n            ref var b1 = ref cd->Body1.Data;\n            ref var b2 = ref cd->Body2.Data;\n            JVector normal = Normal;\n            JVector tangent1 = Tangent1;\n            JVector tangent2 = Tangent2;\n\n            JVector dv = b2.Velocity + b2.AngularVelocity % RelativePosition2;\n            dv -= b1.Velocity + b1.AngularVelocity % RelativePosition1;\n\n            Real bias = (applyBias) ? MathR.Max(PenaltyBias, Bias) : Bias;\n\n            Real vn = JVector.Dot(normal, dv);\n            Real vt1 = JVector.Dot(tangent1, dv);\n            Real vt2 = JVector.Dot(tangent2, dv);\n\n            Real normalImpulse = -vn + bias;\n\n            normalImpulse *= massNormal;\n\n            Real oldNormalImpulse = accumulatedNormalImpulse;\n            accumulatedNormalImpulse = MathR.Max(oldNormalImpulse + normalImpulse, (Real)0.0);\n            normalImpulse = accumulatedNormalImpulse - oldNormalImpulse;\n\n            // Use the pre-update normal impulse for the friction cone to stay consistent\n            // with the SIMD path, where this avoids breaking the vectorized clamp.\n            Real maxTangentImpulse = cd->Friction * oldNormalImpulse;\n            Real tangentImpulse1 = massTangent1 * -vt1;\n            Real tangentImpulse2 = massTangent2 * -vt2;\n\n            Real oldTangentImpulse1 = accumulatedTangentImpulse1;\n            accumulatedTangentImpulse1 = oldTangentImpulse1 + tangentImpulse1;\n            accumulatedTangentImpulse1 = Math.Clamp(accumulatedTangentImpulse1, -maxTangentImpulse, maxTangentImpulse);\n            tangentImpulse1 = accumulatedTangentImpulse1 - oldTangentImpulse1;\n\n            Real oldTangentImpulse2 = accumulatedTangentImpulse2;\n            accumulatedTangentImpulse2 = oldTangentImpulse2 + tangentImpulse2;\n            accumulatedTangentImpulse2 = Math.Clamp(accumulatedTangentImpulse2, -maxTangentImpulse, maxTangentImpulse);\n            tangentImpulse2 = accumulatedTangentImpulse2 - oldTangentImpulse2;\n\n            Accumulated = Vector.Create(accumulatedNormalImpulse, accumulatedTangentImpulse1, accumulatedTangentImpulse2, 0);\n\n            JVector impulse = normalImpulse * normal;\n            impulse += tangentImpulse1 * tangent1;\n            impulse += tangentImpulse2 * tangent2;\n\n            if ((cd->Mode & SolveMode.LinearBody1) != 0)\n            {\n                b1.Velocity -= b1.InverseMass * impulse;\n            }\n\n            if ((cd->Mode & SolveMode.AngularBody1) != 0)\n            {\n                JVector angularImpulse = normalImpulse *\n                    TransformSymmetricInertia(RelativePosition1 % normal, b1.InverseInertiaWorld);\n                angularImpulse += tangentImpulse1 *\n                    TransformSymmetricInertia(RelativePosition1 % tangent1, b1.InverseInertiaWorld);\n                angularImpulse += tangentImpulse2 *\n                    TransformSymmetricInertia(RelativePosition1 % tangent2, b1.InverseInertiaWorld);\n\n                b1.AngularVelocity -= angularImpulse;\n            }\n\n            if ((cd->Mode & SolveMode.LinearBody2) != 0)\n            {\n                b2.Velocity += b2.InverseMass * impulse;\n            }\n\n            if ((cd->Mode & SolveMode.AngularBody2) != 0)\n            {\n                JVector angularImpulse = normalImpulse *\n                    TransformSymmetricInertia(RelativePosition2 % normal, b2.InverseInertiaWorld);\n                angularImpulse += tangentImpulse1 *\n                    TransformSymmetricInertia(RelativePosition2 % tangent1, b2.InverseInertiaWorld);\n                angularImpulse += tangentImpulse2 *\n                    TransformSymmetricInertia(RelativePosition2 % tangent2, b2.InverseInertiaWorld);\n\n                b2.AngularVelocity += angularImpulse;\n            }\n\n        }\n\n        #endregion\n\n        [MethodImpl(MethodImplOptions.AggressiveInlining)]\n        private static Real GetSum3(VectorReal vector)\n        {\n            return vector.GetElement(0) + vector.GetElement(1) + vector.GetElement(2);\n        }\n\n        [MethodImpl(MethodImplOptions.AggressiveInlining)]\n        private static JVector TransformSymmetricInertia(in JVector vector, in JMatrix matrix)\n        {\n            Unsafe.SkipInit(out JVector result);\n            result.X = vector.X * matrix.M11 + vector.Y * matrix.M21 + vector.Z * matrix.M31;\n            result.Y = vector.X * matrix.M21 + vector.Y * matrix.M22 + vector.Z * matrix.M23;\n            result.Z = vector.X * matrix.M31 + vector.Y * matrix.M23 + vector.Z * matrix.M33;\n            return result;\n        }\n\n        [MethodImpl(MethodImplOptions.AggressiveOptimization)]\n        public unsafe void PrepareForIterationAccelerated(ContactData* cd, Real idt)\n        {\n            ref var b1 = ref cd->Body1.Data;\n            ref var b2 = ref cd->Body2.Data;\n\n            JVector.Transform(Position1, b1.Orientation, out RelativePosition1);\n            JVector.Transform(Position2, b2.Orientation, out RelativePosition2);\n\n            VectorReal kNormalTangent = Vector.Create(b1.InverseMass + b2.InverseMass);\n\n            if ((Flag & Flags.NewContact) == 0)\n            {\n                Bias = 0;\n            }\n\n            JVector.Add(RelativePosition1, b1.Position, out JVector r1);\n            JVector.Add(RelativePosition2, b2.Position, out JVector r2);\n            JVector.Subtract(r1, r2, out JVector dist);\n\n            JVector n = new JVector(NormalTangentX.GetElement(0), NormalTangentY.GetElement(0), NormalTangentZ.GetElement(0));\n            Real penetration = JVector.Dot(dist, n);\n\n            if (penetration < -BreakThreshold)\n            {\n                // Speculative contact\n                Bias = penetration * idt * cd->SpeculativeRelaxationFactor;\n            }\n\n            Flag &= ~Flags.NewContact;\n\n            var ktnx = Vector.Create((Real)0.0);\n            var ktny = Vector.Create((Real)0.0);\n            var ktnz = Vector.Create((Real)0.0);\n\n            // warm-starting, linear\n            Unsafe.SkipInit(out JVector linearImpulse);\n            linearImpulse.X = GetSum3(Vector.Multiply(Accumulated, NormalTangentX));\n            linearImpulse.Y = GetSum3(Vector.Multiply(Accumulated, NormalTangentY));\n            linearImpulse.Z = GetSum3(Vector.Multiply(Accumulated, NormalTangentZ));\n\n            if ((cd->Mode & SolveMode.LinearBody1) != 0)\n            {\n                b1.Velocity -= b1.InverseMass * linearImpulse;\n            }\n\n            if ((cd->Mode & SolveMode.AngularBody1) != 0)\n            {\n                var rp1X = Vector.Create(RelativePosition1.X);\n                var rp1Y = Vector.Create(RelativePosition1.Y);\n                var rp1Z = Vector.Create(RelativePosition1.Z);\n\n                var rrx = Vector.Subtract(Vector.Multiply(rp1Y, NormalTangentZ), Vector.Multiply(rp1Z, NormalTangentY));\n                var rry = Vector.Subtract(Vector.Multiply(rp1Z, NormalTangentX), Vector.Multiply(rp1X, NormalTangentZ));\n                var rrz = Vector.Subtract(Vector.Multiply(rp1X, NormalTangentY), Vector.Multiply(rp1Y, NormalTangentX));\n\n                var ixx = Vector.Create(b1.InverseInertiaWorld.M11);\n                var ixy = Vector.Create(b1.InverseInertiaWorld.M21);\n                var ixz = Vector.Create(b1.InverseInertiaWorld.M31);\n                var iyy = Vector.Create(b1.InverseInertiaWorld.M22);\n                var iyz = Vector.Create(b1.InverseInertiaWorld.M23);\n                var izz = Vector.Create(b1.InverseInertiaWorld.M33);\n\n                var e1 = Vector.Add(Vector.Add(Vector.Multiply(ixx, rrx), Vector.Multiply(ixy, rry)), Vector.Multiply(ixz, rrz));\n                var e2 = Vector.Add(Vector.Add(Vector.Multiply(ixy, rrx), Vector.Multiply(iyy, rry)), Vector.Multiply(iyz, rrz));\n                var e3 = Vector.Add(Vector.Add(Vector.Multiply(ixz, rrx), Vector.Multiply(iyz, rry)), Vector.Multiply(izz, rrz));\n\n                Unsafe.SkipInit(out JVector angularImpulse1);\n                angularImpulse1.X = GetSum3(Vector.Multiply(Accumulated, e1));\n                angularImpulse1.Y = GetSum3(Vector.Multiply(Accumulated, e2));\n                angularImpulse1.Z = GetSum3(Vector.Multiply(Accumulated, e3));\n\n                b1.AngularVelocity -= angularImpulse1;\n\n                ktnx = Vector.Subtract(Vector.Multiply(e2, rp1Z), Vector.Multiply(e3, rp1Y));\n                ktny = Vector.Subtract(Vector.Multiply(e3, rp1X), Vector.Multiply(e1, rp1Z));\n                ktnz = Vector.Subtract(Vector.Multiply(e1, rp1Y), Vector.Multiply(e2, rp1X));\n            }\n\n            if ((cd->Mode & SolveMode.LinearBody2) != 0)\n            {\n                b2.Velocity += b2.InverseMass * linearImpulse;\n            }\n\n            if ((cd->Mode & SolveMode.AngularBody2) != 0)\n            {\n                var rp2X = Vector.Create(RelativePosition2.X);\n                var rp2Y = Vector.Create(RelativePosition2.Y);\n                var rp2Z = Vector.Create(RelativePosition2.Z);\n\n                var rrx = Vector.Subtract(Vector.Multiply(rp2Y, NormalTangentZ), Vector.Multiply(rp2Z, NormalTangentY));\n                var rry = Vector.Subtract(Vector.Multiply(rp2Z, NormalTangentX), Vector.Multiply(rp2X, NormalTangentZ));\n                var rrz = Vector.Subtract(Vector.Multiply(rp2X, NormalTangentY), Vector.Multiply(rp2Y, NormalTangentX));\n\n                var ixx = Vector.Create(b2.InverseInertiaWorld.M11);\n                var ixy = Vector.Create(b2.InverseInertiaWorld.M21);\n                var ixz = Vector.Create(b2.InverseInertiaWorld.M31);\n                var iyy = Vector.Create(b2.InverseInertiaWorld.M22);\n                var iyz = Vector.Create(b2.InverseInertiaWorld.M23);\n                var izz = Vector.Create(b2.InverseInertiaWorld.M33);\n\n                var f1 = Vector.Add(Vector.Add(Vector.Multiply(ixx, rrx), Vector.Multiply(ixy, rry)), Vector.Multiply(ixz, rrz));\n                var f2 = Vector.Add(Vector.Add(Vector.Multiply(ixy, rrx), Vector.Multiply(iyy, rry)), Vector.Multiply(iyz, rrz));\n                var f3 = Vector.Add(Vector.Add(Vector.Multiply(ixz, rrx), Vector.Multiply(iyz, rry)), Vector.Multiply(izz, rrz));\n\n                Unsafe.SkipInit(out JVector angularImpulse2);\n                angularImpulse2.X = GetSum3(Vector.Multiply(Accumulated, f1));\n                angularImpulse2.Y = GetSum3(Vector.Multiply(Accumulated, f2));\n                angularImpulse2.Z = GetSum3(Vector.Multiply(Accumulated, f3));\n\n                b2.AngularVelocity += angularImpulse2;\n\n                ktnx = Vector.Add(ktnx, Vector.Subtract(Vector.Multiply(f2, rp2Z), Vector.Multiply(f3, rp2Y)));\n                ktny = Vector.Add(ktny, Vector.Subtract(Vector.Multiply(f3, rp2X), Vector.Multiply(f1, rp2Z)));\n                ktnz = Vector.Add(ktnz, Vector.Subtract(Vector.Multiply(f1, rp2Y), Vector.Multiply(f2, rp2X)));\n            }\n\n            var kres = Vector.Add(Vector.Add(Vector.Multiply(NormalTangentX, ktnx),\n                Vector.Multiply(NormalTangentY, ktny)), Vector.Multiply(NormalTangentZ, ktnz));\n\n            kNormalTangent = Vector.Add(kNormalTangent, kres);\n\n            var mnt = Vector.Divide(Vector.Create((Real)1.0), kNormalTangent);\n            Unsafe.CopyBlock(Unsafe.AsPointer(ref MassNormalTangent), Unsafe.AsPointer(ref mnt), 3 * sizeof(Real));\n\n            PenaltyBias = BiasFactor * idt * Math.Max((Real)0.0, penetration - AllowedPenetration);\n            PenaltyBias = Math.Min(PenaltyBias, MaximumBias);\n        }\n\n        [MethodImpl(MethodImplOptions.AggressiveOptimization)]\n        public unsafe void IterateAccelerated(ContactData* cd, bool applyBias)\n        {\n            ref var b1 = ref cd->Body1.Data;\n            ref var b2 = ref cd->Body2.Data;\n\n            JVector dv = b2.Velocity + b2.AngularVelocity % RelativePosition2;\n            dv -= b1.Velocity + b1.AngularVelocity % RelativePosition1;\n\n            Real bias = applyBias ? MathR.Max(PenaltyBias, Bias) : Bias;\n\n            var vdots = Vector.Add(Vector.Add(Vector.Multiply(NormalTangentX, Vector.Create(dv.X)),\n                Vector.Multiply(NormalTangentY, Vector.Create(dv.Y))), Vector.Multiply(NormalTangentZ, Vector.Create(dv.Z)));\n\n            var impulse = Vector.Multiply(MassNormalTangent, (Vector.Subtract(Vector.Create(bias, 0, 0, 0), vdots)));\n            var oldImpulse = Accumulated;\n\n            // Use the pre-update normal impulse for the friction cone; this keeps the\n            // vectorized clamp simple and matches the scalar path.\n            Real maxTangentImpulse = cd->Friction * Accumulated.GetElement(0);\n\n            Accumulated = Vector.Add(oldImpulse, impulse);\n\n            var minImpulse = Vector.Create(0, -maxTangentImpulse, -maxTangentImpulse, 0);\n            var maxImpulse = Vector.Create(Real.MaxValue, maxTangentImpulse, maxTangentImpulse, 0);\n\n            Accumulated = Vector.Min(Vector.Max(Accumulated, minImpulse), maxImpulse);\n            impulse = Vector.Subtract(Accumulated, oldImpulse);\n\n            Unsafe.SkipInit(out JVector linearImpulse);\n            linearImpulse.X = GetSum3(Vector.Multiply(impulse, NormalTangentX));\n            linearImpulse.Y = GetSum3(Vector.Multiply(impulse, NormalTangentY));\n            linearImpulse.Z = GetSum3(Vector.Multiply(impulse, NormalTangentZ));\n\n            if ((cd->Mode & SolveMode.LinearBody1) != 0)\n            {\n                b1.Velocity -= b1.InverseMass * linearImpulse;\n            }\n\n            if ((cd->Mode & SolveMode.AngularBody1) != 0)\n            {\n                var rp1X = Vector.Create(RelativePosition1.X);\n                var rp1Y = Vector.Create(RelativePosition1.Y);\n                var rp1Z = Vector.Create(RelativePosition1.Z);\n\n                var rrx = Vector.Subtract(Vector.Multiply(rp1Y, NormalTangentZ), Vector.Multiply(rp1Z, NormalTangentY));\n                var rry = Vector.Subtract(Vector.Multiply(rp1Z, NormalTangentX), Vector.Multiply(rp1X, NormalTangentZ));\n                var rrz = Vector.Subtract(Vector.Multiply(rp1X, NormalTangentY), Vector.Multiply(rp1Y, NormalTangentX));\n\n                var ixx = Vector.Create(b1.InverseInertiaWorld.M11);\n                var ixy = Vector.Create(b1.InverseInertiaWorld.M21);\n                var ixz = Vector.Create(b1.InverseInertiaWorld.M31);\n                var iyy = Vector.Create(b1.InverseInertiaWorld.M22);\n                var iyz = Vector.Create(b1.InverseInertiaWorld.M23);\n                var izz = Vector.Create(b1.InverseInertiaWorld.M33);\n\n                var e1 = Vector.Add(Vector.Add(Vector.Multiply(ixx, rrx), Vector.Multiply(ixy, rry)), Vector.Multiply(ixz, rrz));\n                var e2 = Vector.Add(Vector.Add(Vector.Multiply(ixy, rrx), Vector.Multiply(iyy, rry)), Vector.Multiply(iyz, rrz));\n                var e3 = Vector.Add(Vector.Add(Vector.Multiply(ixz, rrx), Vector.Multiply(iyz, rry)), Vector.Multiply(izz, rrz));\n\n                Unsafe.SkipInit(out JVector angularImpulse1);\n                angularImpulse1.X = GetSum3(Vector.Multiply(impulse, e1));\n                angularImpulse1.Y = GetSum3(Vector.Multiply(impulse, e2));\n                angularImpulse1.Z = GetSum3(Vector.Multiply(impulse, e3));\n\n                b1.AngularVelocity -= angularImpulse1;\n            }\n\n            if ((cd->Mode & SolveMode.LinearBody2) != 0)\n            {\n                b2.Velocity += b2.InverseMass * linearImpulse;\n            }\n\n            if ((cd->Mode & SolveMode.AngularBody2) != 0)\n            {\n                var rp2X = Vector.Create(RelativePosition2.X);\n                var rp2Y = Vector.Create(RelativePosition2.Y);\n                var rp2Z = Vector.Create(RelativePosition2.Z);\n\n                var rrx = Vector.Subtract(Vector.Multiply(rp2Y, NormalTangentZ), Vector.Multiply(rp2Z, NormalTangentY));\n                var rry = Vector.Subtract(Vector.Multiply(rp2Z, NormalTangentX), Vector.Multiply(rp2X, NormalTangentZ));\n                var rrz = Vector.Subtract(Vector.Multiply(rp2X, NormalTangentY), Vector.Multiply(rp2Y, NormalTangentX));\n\n                var ixx = Vector.Create(b2.InverseInertiaWorld.M11);\n                var ixy = Vector.Create(b2.InverseInertiaWorld.M21);\n                var ixz = Vector.Create(b2.InverseInertiaWorld.M31);\n                var iyy = Vector.Create(b2.InverseInertiaWorld.M22);\n                var iyz = Vector.Create(b2.InverseInertiaWorld.M23);\n                var izz = Vector.Create(b2.InverseInertiaWorld.M33);\n\n                var f1 = Vector.Add(Vector.Add(Vector.Multiply(ixx, rrx), Vector.Multiply(ixy, rry)), Vector.Multiply(ixz, rrz));\n                var f2 = Vector.Add(Vector.Add(Vector.Multiply(ixy, rrx), Vector.Multiply(iyy, rry)), Vector.Multiply(iyz, rrz));\n                var f3 = Vector.Add(Vector.Add(Vector.Multiply(ixz, rrx), Vector.Multiply(iyz, rry)), Vector.Multiply(izz, rrz));\n\n                Unsafe.SkipInit(out JVector angularImpulse2);\n                angularImpulse2.X = GetSum3(Vector.Multiply(impulse, f1));\n                angularImpulse2.Y = GetSum3(Vector.Multiply(impulse, f2));\n                angularImpulse2.Z = GetSum3(Vector.Multiply(impulse, f3));\n\n                b2.AngularVelocity += angularImpulse2;\n            }\n\n        }\n    }\n}"
  },
  {
    "path": "src/Jitter2/Dynamics/Joints/HingeJoint.cs",
    "content": "/*\n * Jitter2 Physics Library\n * (c) Thorben Linneweber and contributors\n * SPDX-License-Identifier: MIT\n */\n\nusing System;\nusing Jitter2.LinearMath;\n\nnamespace Jitter2.Dynamics.Constraints;\n\n/// <summary>\n/// Constructs a hinge joint utilizing a <see cref=\"HingeAngle\"/>, a <see cref=\"BallSocket\"/>, and an optional <see cref=\"AngularMotor\"/>.\n/// </summary>\npublic class HingeJoint : Joint\n{\n    public RigidBody Body1 { get; private set; }\n    public RigidBody Body2 { get; private set; }\n\n    public HingeAngle HingeAngle { get; }\n    public BallSocket BallSocket { get; }\n    public AngularMotor? Motor { get; }\n\n    public HingeJoint(World world, RigidBody body1, RigidBody body2, JVector hingeCenter, JVector hingeAxis,\n        AngularLimit angle, bool hasMotor = false)\n    {\n        Body1 = body1;\n        Body2 = body2;\n\n        JVector.NormalizeInPlace(ref hingeAxis);\n\n        HingeAngle = world.CreateConstraint<HingeAngle>(body1, body2);\n        HingeAngle.Initialize(hingeAxis, angle);\n        Register(HingeAngle);\n\n        BallSocket = world.CreateConstraint<BallSocket>(body1, body2);\n        BallSocket.Initialize(hingeCenter);\n        Register(BallSocket);\n\n        if (hasMotor)\n        {\n            Motor = world.CreateConstraint<AngularMotor>(body1, body2);\n            Motor.Initialize(hingeAxis);\n            Register(Motor);\n        }\n    }\n\n    public HingeJoint(World world, RigidBody body1, RigidBody body2, JVector hingeCenter, JVector hingeAxis,\n        bool hasMotor = false) :\n        this(world, body1, body2, hingeCenter, hingeAxis, AngularLimit.Full, hasMotor)\n    {\n    }\n}"
  },
  {
    "path": "src/Jitter2/Dynamics/Joints/Joint.cs",
    "content": "/*\n * Jitter2 Physics Library\n * (c) Thorben Linneweber and contributors\n * SPDX-License-Identifier: MIT\n */\n\nusing System.Collections.Generic;\nusing Jitter2.DataStructures;\n\nnamespace Jitter2.Dynamics.Constraints;\n\n/// <summary>\n/// Base class for joints, which are composite constraints built from multiple <see cref=\"Constraint\"/> instances.\n/// </summary>\npublic class Joint : IDebugDrawable\n{\n    private readonly List<Constraint> constraints = new(2);\n    public ReadOnlyList<Constraint> Constraints => new (constraints);\n\n    /// <summary>\n    /// Add a constraint to the internal bookkeeping\n    /// </summary>\n    protected void Register(Constraint constraint) => constraints.Add(constraint);\n\n    /// <summary>\n    /// Remove a constraint from the internal bookkeeping\n    /// </summary>\n    protected void Deregister(Constraint constraint) => constraints.Remove(constraint);\n\n    /// <summary>\n    /// Enables all constraints that this joint is composed of.\n    /// </summary>\n    public void Enable()\n    {\n        foreach (var constraint in constraints)\n        {\n            if (constraint.Handle.IsZero) continue;\n            constraint.IsEnabled = true;\n        }\n    }\n\n    /// <summary>\n    /// Disables all constraints that this joint is composed of temporarily.\n    /// For a complete removal use <see cref=\"Joint.Remove()\"/>.\n    /// </summary>\n    public void Disable()\n    {\n        foreach (var constraint in constraints)\n        {\n            if (constraint.Handle.IsZero) continue;\n            constraint.IsEnabled = false;\n        }\n    }\n\n    /// <summary>\n    /// Removes all constraints that this joint is composed of from the physics world.\n    /// </summary>\n    public void Remove()\n    {\n        foreach (var constraint in constraints)\n        {\n            if (constraint.Handle.IsZero) continue;\n            constraint.Body1.World.Remove(constraint);\n        }\n\n        constraints.Clear();\n    }\n\n    public virtual void DebugDraw(IDebugDrawer drawer)\n    {\n        foreach (var constraint in constraints)\n        {\n            constraint.DebugDraw(drawer);\n        }\n    }\n}"
  },
  {
    "path": "src/Jitter2/Dynamics/Joints/PrismaticJoint.cs",
    "content": "/*\n * Jitter2 Physics Library\n * (c) Thorben Linneweber and contributors\n * SPDX-License-Identifier: MIT\n */\n\nusing Jitter2.LinearMath;\n\nnamespace Jitter2.Dynamics.Constraints;\n\n/// <summary>\n/// Constructs a prismatic joint utilizing a <see cref=\"PointOnLine\"/> constraint in conjunction with\n/// <see cref=\"FixedAngle\"/>, <see cref=\"HingeAngle\"/>, and <see cref=\"LinearMotor\"/> constraints.\n/// </summary>\npublic class PrismaticJoint : Joint\n{\n    public RigidBody Body1 { get; private set; }\n    public RigidBody Body2 { get; private set; }\n\n    public PointOnLine Slider { get; }\n\n    public FixedAngle? FixedAngle { get; }\n    public HingeAngle? HingeAngle { get; }\n    public LinearMotor? Motor { get; }\n\n    public PrismaticJoint(World world, RigidBody body1, RigidBody body2, JVector center, JVector axis,\n        bool pinned = true, bool hasMotor = false) :\n        this(world, body1, body2, center, axis, LinearLimit.Full, pinned, hasMotor)\n    {\n    }\n\n    public PrismaticJoint(World world, RigidBody body1, RigidBody body2, JVector center, JVector axis, LinearLimit limit,\n        bool pinned = true, bool hasMotor = false)\n    {\n        Body1 = body1;\n        Body2 = body2;\n\n        JVector.NormalizeInPlace(ref axis);\n\n        Slider = world.CreateConstraint<PointOnLine>(body1, body2);\n        Slider.Initialize(axis, center, center, limit);\n        Register(Slider);\n\n        if (pinned)\n        {\n            FixedAngle = world.CreateConstraint<FixedAngle>(body1, body2);\n            FixedAngle.Initialize();\n            Register(FixedAngle);\n        }\n        else\n        {\n            HingeAngle = world.CreateConstraint<HingeAngle>(body1, body2);\n            HingeAngle.Initialize(axis, AngularLimit.Full);\n            Register(HingeAngle);\n        }\n\n        if (hasMotor)\n        {\n            Motor = world.CreateConstraint<LinearMotor>(body1, body2);\n            Motor.Initialize(axis, axis);\n            Register(Motor);\n        }\n    }\n}"
  },
  {
    "path": "src/Jitter2/Dynamics/Joints/UniversalJoint.cs",
    "content": "/*\n * Jitter2 Physics Library\n * (c) Thorben Linneweber and contributors\n * SPDX-License-Identifier: MIT\n */\n\nusing Jitter2.LinearMath;\n\nnamespace Jitter2.Dynamics.Constraints;\n\n/// <summary>\n/// Creates a universal joint utilizing a <see cref=\"TwistAngle\"/>, <see cref=\"BallSocket\"/>, and an optional <see cref=\"AngularMotor\"/>\n/// constraint.\n/// </summary>\npublic class UniversalJoint : Joint\n{\n    public RigidBody Body1 { get; private set; }\n    public RigidBody Body2 { get; private set; }\n\n    public TwistAngle TwistAngle { get; }\n    public BallSocket BallSocket { get; }\n    public AngularMotor? Motor { get; }\n\n    public UniversalJoint(World world, RigidBody body1, RigidBody body2, JVector center, JVector rotateAxis1, JVector rotateAxis2, bool hasMotor = false)\n    {\n        Body1 = body1;\n        Body2 = body2;\n\n        JVector.NormalizeInPlace(ref rotateAxis1);\n        JVector.NormalizeInPlace(ref rotateAxis2);\n\n        TwistAngle = world.CreateConstraint<TwistAngle>(body1, body2);\n        TwistAngle.Initialize(rotateAxis1, rotateAxis2);\n        Register(TwistAngle);\n\n        BallSocket = world.CreateConstraint<BallSocket>(body1, body2);\n        BallSocket.Initialize(center);\n        Register(BallSocket);\n\n        if (hasMotor)\n        {\n            Motor = world.CreateConstraint<AngularMotor>(body1, body2);\n            Motor.Initialize(rotateAxis1, rotateAxis2);\n            Register(Motor);\n        }\n    }\n}"
  },
  {
    "path": "src/Jitter2/Dynamics/Joints/WeldJoint.cs",
    "content": "/*\n * Jitter2 Physics Library\n * (c) Thorben Linneweber and contributors\n * SPDX-License-Identifier: MIT\n */\n\nusing Jitter2.LinearMath;\n\nnamespace Jitter2.Dynamics.Constraints;\n\n/// <summary>\n/// Creates a rigid weld joint between two bodies using a <see cref=\"Constraints.FixedAngle\"/> \n/// constraint for orientation locking and a <see cref=\"BallSocket\"/> constraint\n/// for positional locking. This effectively removes all relative motion between\n/// the connected bodies.\n/// </summary>\npublic class WeldJoint : Joint\n{\n    public RigidBody Body1 { get; private set; }\n    public RigidBody Body2 { get; private set; }\n\n    public FixedAngle FixedAngle { get; }\n    public BallSocket BallSocket { get; }\n\n    public WeldJoint(World world, RigidBody body1, RigidBody body2, JVector center)\n    {\n        Body1 = body1;\n        Body2 = body2;\n        \n        FixedAngle = world.CreateConstraint<FixedAngle>(body1, body2);\n        FixedAngle.Initialize();\n        Register(FixedAngle);\n\n        BallSocket = world.CreateConstraint<BallSocket>(body1, body2);\n        BallSocket.Initialize(center);\n        Register(BallSocket);\n    }\n}"
  },
  {
    "path": "src/Jitter2/Dynamics/RigidBody.cs",
    "content": "/*\n * Jitter2 Physics Library\n * (c) Thorben Linneweber and contributors\n * SPDX-License-Identifier: MIT\n */\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\nusing Jitter2.Collision;\nusing Jitter2.Collision.Shapes;\nusing Jitter2.DataStructures;\nusing Jitter2.Dynamics.Constraints;\nusing Jitter2.LinearMath;\nusing Jitter2.Unmanaged;\n\nnamespace Jitter2.Dynamics;\n\n/// <summary>\n/// Specifies whether a shape add/remove operation recomputes the body's mass and inertia.\n/// </summary>\npublic enum MassInertiaUpdateMode\n{\n    /// <summary>\n    /// Recompute mass and inertia from the currently attached shapes.\n    /// </summary>\n    Update = 0,\n\n    /// <summary>\n    /// Keep the current mass and inertia unchanged.\n    /// </summary>\n    Preserve = 1\n}\n\n/// <summary>\n/// Specifies how a rigid body participates in the simulation.\n/// </summary>\npublic enum MotionType\n{\n    /// <summary>\n    /// Fully simulated; responds to forces, impulses, contacts and constraints.\n    /// </summary>\n    Dynamic = 0,\n\n    /// <summary>\n    /// User-controlled body that is not affected by forces or collisions, but can affect dynamic bodies.\n    /// Treated as having infinite mass in the solver. May have a non-zero velocity set by user code.\n    /// Takes part in collision island building.\n    /// </summary>\n    Kinematic = 1,\n\n    /// <summary>\n    /// Immovable body (zero velocity) treated as having infinite mass by the solver.\n    /// The position and orientation may be changed directly by user code, which will update the\n    /// broadphase and may affect contacts on the next step.\n    /// </summary>\n    Static = 2\n}\n\n/// <summary>\n/// Low-level simulation state for a <see cref=\"RigidBody\"/>, stored in unmanaged memory.\n/// </summary>\n/// <remarks>\n/// This structure is layout-sensitive and intended for internal engine use. Prefer using\n/// <see cref=\"RigidBody\"/> properties instead of accessing fields directly.\n/// All spatial values (position, velocity, orientation, inertia) are in world space.\n/// The <see cref=\"Flags\"/> field is a bitfield: bits 0–1 encode <see cref=\"MotionType\"/>,\n/// bit 2 indicates active state, and bit 3 enables gyroscopic forces.\n/// </remarks>\n[StructLayout(LayoutKind.Explicit, Size = Precision.RigidBodyDataSize)]\npublic struct RigidBodyData\n{\n    /// <summary>\n    /// Internal index used by the engine for handle management. Not stable across frames.\n    /// </summary>\n    [FieldOffset(0)]\n    public int _index;\n\n    /// <summary>\n    /// Internal synchronization flag used by the engine. Do not modify.\n    /// </summary>\n    [FieldOffset(4)]\n    public int _lockFlag;\n\n    /// <summary>\n    /// World-space position of the rigid body (center of mass).\n    /// </summary>\n    [FieldOffset(8 + 0*sizeof(Real))]\n    public JVector Position;\n\n    /// <summary>\n    /// Linear velocity in world space, measured in units per second.\n    /// </summary>\n    [FieldOffset(8 + 3*sizeof(Real))]\n    public JVector Velocity;\n\n    /// <summary>\n    /// Angular velocity in world space, measured in radians per second. The vector direction\n    /// is the rotation axis, and its magnitude is the rotation speed.\n    /// </summary>\n    [FieldOffset(8 + 6*sizeof(Real))]\n    public JVector AngularVelocity;\n\n    /// <summary>\n    /// Accumulated linear velocity change for the current substep (from forces and gravity).\n    /// Internal use only.\n    /// </summary>\n    [FieldOffset(8 + 9*sizeof(Real))]\n    public JVector DeltaVelocity;\n\n    /// <summary>\n    /// Accumulated angular velocity change for the current substep (from torques).\n    /// Internal use only.\n    /// </summary>\n    [FieldOffset(8 + 12*sizeof(Real))]\n    public JVector DeltaAngularVelocity;\n\n    /// <summary>\n    /// World-space orientation of the rigid body.\n    /// </summary>\n    [FieldOffset(8 + 15*sizeof(Real))]\n    public JQuaternion Orientation;\n\n    /// <summary>\n    /// Inverse inertia tensor in world space. For dynamic bodies, this is recomputed each step\n    /// from the body-space inverse inertia and current orientation. For static and kinematic\n    /// bodies, this is zero (representing infinite inertia).\n    /// </summary>\n    [FieldOffset(8 + 19*sizeof(Real))]\n    public JMatrix InverseInertiaWorld;\n\n    /// <summary>\n    /// Inverse mass of the body. A value of zero represents infinite mass (used for static\n    /// and kinematic bodies in the solver).\n    /// </summary>\n    [FieldOffset(8 + 28*sizeof(Real))]\n    public Real InverseMass;\n\n    /// <summary>\n    /// Bitfield encoding motion type (bits 0–1), active state (bit 2), and gyroscopic forces (bit 3).\n    /// Use the corresponding properties instead of manipulating this directly.\n    /// </summary>\n    [FieldOffset(8 + 29*sizeof(Real))]\n    public int Flags;\n\n    /// <summary>\n    /// Gets or sets whether the body is active (awake) and participating in simulation.\n    /// Inactive bodies are considered sleeping and skip integration until reactivated.\n    /// </summary>\n    public bool IsActive\n    {\n        [MethodImpl(MethodImplOptions.AggressiveInlining)]\n        readonly get => (Flags & 4) != 0;\n        set\n        {\n            if (value) Flags |= 4;\n            else Flags &= ~4;\n        }\n    }\n\n    /// <summary>\n    /// Gets or sets whether the implicit gyroscopic torque solver is enabled.\n    /// See <see cref=\"RigidBody.EnableGyroscopicForces\"/> for details.\n    /// </summary>\n    public bool EnableGyroscopicForces\n    {\n        [MethodImpl(MethodImplOptions.AggressiveInlining)]\n        readonly get => (Flags & 8) != 0;\n        set\n        {\n            if (value) Flags |= 8;\n            else Flags &= ~8;\n        }\n    }\n\n    /// <summary>\n    /// Returns true if the body is static or currently inactive (sleeping).\n    /// </summary>\n    [Obsolete($\"Use {nameof(MotionType)} directly.\")]\n    public bool IsStaticOrInactive => MotionType != MotionType.Dynamic || !IsActive;\n\n    /// <summary>\n    /// Gets or sets how this body participates in the simulation.\n    /// Encoded in bits 0–1 of <see cref=\"Flags\"/>.\n    /// </summary>\n    public MotionType MotionType\n    {\n        [MethodImpl(MethodImplOptions.AggressiveInlining)]\n        get => (MotionType)(Flags & 0b11);\n        [MethodImpl(MethodImplOptions.AggressiveInlining)]\n        set => Flags = (Flags & ~0b11) | (int)value;\n    }\n}\n\n/// <summary>\n/// Represents the primary entity in the Jitter physics world.\n/// </summary>\npublic sealed class RigidBody : IPartitionedSetIndex, IDebugDrawable\n{\n    private JHandle<RigidBodyData> handle;\n\n    /// <summary>\n    /// Unique identifier for this rigid body, assigned by the <see cref=\"World\"/> upon creation.\n    /// This ID remains stable for the lifetime of the body.\n    /// </summary>\n    public readonly ulong RigidBodyId;\n\n    private Real restitution = (Real)0.0;\n    private Real friction = (Real)0.2;\n\n    /// <summary>\n    /// Returns a by-ref view of the unmanaged simulation state for this body.\n    /// </summary>\n    /// <remarks>\n    /// Due to performance considerations, simulation data (position, velocity, etc.) is stored\n    /// in a contiguous block of unmanaged memory. This property provides direct access to that data.\n    /// <para>\n    /// <strong>Usage notes:</strong>\n    /// <list type=\"bullet\">\n    /// <item><description>Prefer using <see cref=\"RigidBody\"/> properties instead of accessing fields directly.</description></item>\n    /// <item><description>Do not cache the returned reference across simulation steps.</description></item>\n    /// <item><description>Modifying fields directly can break invariants (e.g., world-space inertia) unless you know what you're doing.</description></item>\n    /// </list>\n    /// </para>\n    /// </remarks>\n    public ref RigidBodyData Data => ref handle.Data;\n\n    /// <summary>\n    /// Gets the handle to the rigid body data, see <see cref=\"Data\"/>.\n    /// </summary>\n    public JHandle<RigidBodyData> Handle\n    {\n        get => handle; internal set => handle = value;\n    }\n\n    // There is only one way to create a body: world.CreateRigidBody. There, we add an island\n    // to the new body. This should never be null.\n    internal Island InternalIsland = null!;\n\n    internal readonly List<RigidBodyShape> InternalShapes = new(capacity: 1);\n    internal readonly List<RigidBody> InternalConnections = new(capacity: 0);\n    internal readonly HashSet<Arbiter> InternalContacts = new(capacity: 0);\n    internal readonly HashSet<Constraint> InternalConstraints = new(capacity: 0);\n\n    internal int InternalIslandMarker;\n    internal Real InternalSleepTime = (Real)0.0;\n\n    /// <summary>\n    /// Gets the collision island associated with this rigid body.\n    /// </summary>\n    public Island Island => InternalIsland;\n\n    /// <summary>\n    /// Event triggered when a new arbiter is created, indicating that two bodies have begun colliding.\n    /// </summary>\n    /// <remarks>\n    /// This event provides an <see cref=\"Arbiter\"/> object which contains details about the collision.\n    /// Use this event to handle logic that should occur at the start of a collision between two bodies.\n    /// </remarks>\n    [CallbackThread(ThreadContext.MainThread)]\n    public event Action<Arbiter>? BeginCollide;\n\n    /// <summary>\n    /// Event triggered when an arbiter is destroyed, indicating that two bodies have stopped colliding.\n    /// The reference to this arbiter becomes invalid after this call.\n    /// </summary>\n    /// <remarks>\n    /// This event provides an <see cref=\"Arbiter\"/> object which contains details about the collision that has ended.\n    /// Use this event to handle logic that should occur when the collision between two bodies ends.\n    /// </remarks>\n    [CallbackThread(ThreadContext.MainThread)]\n    public event Action<Arbiter>? EndCollide;\n\n    internal void RaiseBeginCollide(Arbiter arbiter)\n    {\n        BeginCollide?.Invoke(arbiter);\n    }\n\n    internal void RaiseEndCollide(Arbiter arbiter)\n    {\n        EndCollide?.Invoke(arbiter);\n    }\n\n    /// <summary>\n    /// Contains all bodies this body is in contact with or shares a constraint with.\n    /// </summary>\n    public ReadOnlyList<RigidBody> Connections => new(InternalConnections);\n\n    /// <summary>\n    /// Contains all contacts in which this body is involved.\n    /// </summary>\n    public ReadOnlyHashSet<Arbiter> Contacts => new(InternalContacts);\n\n    /// <summary>\n    /// Clears the cached contact manifold state for all current contacts of this body.\n    /// </summary>\n    /// <remarks>\n    /// This discards cached contact points and accumulated impulses, forcing contact\n    /// manifolds to be rebuilt on the next simulation step. This is useful after\n    /// discontinuous user-driven transform changes such as teleports.\n    /// Do not call this concurrently with <see cref=\"World.Step(Real, bool)\"/>.\n    /// </remarks>\n    public void ClearContactCache()\n    {\n        foreach (var arbiter in InternalContacts)\n        {\n            arbiter.Handle.Data.UsageMask = 0;\n        }\n    }\n\n    /// <summary>\n    /// Contains all constraints connected to this body.\n    /// </summary>\n    public ReadOnlyHashSet<Constraint> Constraints => new(InternalConstraints);\n\n    /// <summary>\n    /// Gets the list of shapes added to this rigid body.\n    /// </summary>\n    public ReadOnlyList<RigidBodyShape> Shapes => new(InternalShapes);\n\n    private Real inactiveThresholdLinearSq = (Real)0.1;\n    private Real inactiveThresholdAngularSq = (Real)0.1;\n    private Real deactivationTimeThreshold = (Real)1.0;\n\n    private Real linearDampingMultiplier = (Real)0.998;\n    private Real angularDampingMultiplier = (Real)0.995;\n\n    private JMatrix inverseInertia = JMatrix.Identity;\n    private Real inverseMass = (Real)1.0;\n\n    /// <summary>\n    /// Gets or sets the coefficient of friction used for contact resolution.\n    /// </summary>\n    /// <remarks>\n    /// The friction coefficient determines the resistance to sliding motion.\n    /// Values typically range from 0 (no friction) upwards.\n    /// Higher values represent strong friction or adhesion effects.\n    /// Default value: 0.2.\n    /// </remarks>\n    /// <exception cref=\"ArgumentOutOfRangeException\">Thrown if the value is negative.</exception>\n    public Real Friction\n    {\n        get => friction;\n        set\n        {\n            ArgumentOutOfRangeException.ThrowIfNegative(value);\n            friction = value;\n        }\n    }\n\n    /// <summary>\n    /// Gets or sets the restitution (bounciness) of this object.\n    /// </summary>\n    /// <remarks>\n    /// The restitution value determines how much energy is retained after a collision,\n    /// with 0 representing an inelastic collision (no bounce) and 1 representing a perfectly elastic collision (full bounce).\n    /// Values between 0 and 1 create a partially elastic collision effect.\n    /// Default value: 0.0.\n    /// </remarks>\n    /// <exception cref=\"ArgumentOutOfRangeException\">Thrown if the value is not between 0 and 1.</exception>\n    public Real Restitution\n    {\n        get => restitution;\n        set\n        {\n            ArgumentOutOfRangeException.ThrowIfNegative(value);\n            ArgumentOutOfRangeException.ThrowIfGreaterThan(value, (Real)1.0);\n            restitution = value;\n        }\n    }\n\n    /// <summary>\n    /// Gets or sets the world assigned to this body.\n    /// </summary>\n    public World World { get; }\n\n    internal RigidBody(JHandle<RigidBodyData> handle, World world)\n    {\n        this.handle = handle;\n        World = world;\n\n        Data.Orientation = JQuaternion.Identity;\n        SetDefaultMassInertia();\n\n        RigidBodyId = World.RequestId();\n\n        Data._lockFlag = 0;\n    }\n\n    /// <summary>\n    /// Gets or sets the deactivation time. If the magnitudes of both the angular and linear velocity of the rigid body\n    /// remain below the <see cref=\"DeactivationThreshold\"/> for the specified time, the body is deactivated.\n    /// Default value: 1 second.\n    /// </summary>\n    public TimeSpan DeactivationTime\n    {\n        get => TimeSpan.FromSeconds(deactivationTimeThreshold);\n        set => deactivationTimeThreshold = (Real)value.TotalSeconds;\n    }\n\n    /// <summary>\n    /// Gets or sets the deactivation threshold. If the magnitudes of both the angular and linear velocity\n    /// remain below the specified values for the duration of <see cref=\"DeactivationTime\"/>, the body is deactivated.\n    /// The threshold values are given in rad/s and length units/s, respectively.\n    /// </summary>\n    /// <remarks>\n    /// Values must be non-negative.\n    /// Default values: angular = 0.1, linear = 0.1.\n    /// </remarks>\n    /// <exception cref=\"ArgumentOutOfRangeException\">\n    /// Thrown if either the linear or angular threshold is negative.\n    /// </exception>\n    public (Real angular, Real linear) DeactivationThreshold\n    {\n        get => (MathR.Sqrt(inactiveThresholdAngularSq), MathR.Sqrt(inactiveThresholdLinearSq));\n        set\n        {\n            ArgumentOutOfRangeException.ThrowIfNegative(value.linear, nameof(value.linear));\n            ArgumentOutOfRangeException.ThrowIfNegative(value.angular, nameof(value.angular));\n\n            inactiveThresholdLinearSq = value.linear * value.linear;\n            inactiveThresholdAngularSq = value.angular * value.angular;\n        }\n    }\n\n    /// <summary>\n    /// Gets or sets the damping factors for linear and angular motion. A damping factor of 0 means the body is not\n    /// damped, while 1 brings the body to a halt immediately. Damping is applied when calling\n    /// <see cref=\"World.Step(Real, bool)\"/>. Jitter multiplies the respective velocity each step by 1 minus the damping\n    /// factor. Note that the values are not scaled by time; a smaller time-step in <see cref=\"World.Step(Real, bool)\"/>\n    /// results in increased damping.\n    /// </summary>\n    /// <remarks>The damping factors must be within the range [0, 1].\n    /// Default values: linear = 0.002, angular = 0.005.</remarks>\n    /// <exception cref=\"ArgumentOutOfRangeException\">\n    /// Thrown if either the linear or angular damping value is less than 0 or greater than 1.\n    /// </exception>\n    public (Real linear, Real angular) Damping\n    {\n        get => ((Real)1.0 - linearDampingMultiplier, (Real)1.0 - angularDampingMultiplier);\n        set\n        {\n            ArgumentOutOfRangeException.ThrowIfNegative(value.linear, nameof(value.linear));\n            ArgumentOutOfRangeException.ThrowIfGreaterThan(value.linear, (Real)1.0, nameof(value.linear));\n\n            ArgumentOutOfRangeException.ThrowIfNegative(value.angular, nameof(value.angular));\n            ArgumentOutOfRangeException.ThrowIfGreaterThan(value.angular, (Real)1.0, nameof(value.angular));\n\n            linearDampingMultiplier = (Real)1.0 - value.linear;\n            angularDampingMultiplier = (Real)1.0 - value.angular;\n        }\n    }\n\n    private void SetDefaultMassInertia()\n    {\n        inverseInertia = JMatrix.Identity;\n        inverseMass = (Real)1.0;\n        UpdateWorldInertia();\n    }\n\n    /// <summary>\n    /// Gets the inverse inertia tensor in body (local) space.\n    /// </summary>\n    /// <remarks>\n    /// For world-space inverse inertia, see <see cref=\"RigidBodyData.InverseInertiaWorld\"/>.\n    /// For non-dynamic bodies, the solver treats inertia as infinite regardless of this value.\n    /// </remarks>\n    public JMatrix InverseInertia => inverseInertia;\n\n    /// <summary>\n    /// Gets or sets the world-space position of the rigid body.\n    /// </summary>\n    /// <remarks>\n    /// Setting this property updates the broadphase proxies for all attached shapes\n    /// and schedules the body for activation on the next step. Any currently active\n    /// cached contacts involving this body are invalidated.\n    /// </remarks>\n    public JVector Position\n    {\n        get => handle.Data.Position;\n        set\n        {\n            handle.Data.Position = value;\n            Move();\n        }\n    }\n\n    /// <summary>\n    /// Gets or sets the world-space orientation of the rigid body.\n    /// </summary>\n    /// <remarks>\n    /// Setting this property updates the broadphase proxies for all attached shapes\n    /// and schedules the body for activation on the next step. Any currently active\n    /// cached contacts involving this body are invalidated.\n    /// </remarks>\n    public JQuaternion Orientation\n    {\n        get => Data.Orientation;\n        set\n        {\n            Data.Orientation = value;\n            Move();\n        }\n    }\n\n    private void Move()\n    {\n        UpdateWorldInertia();\n        ClearContactCache();\n\n        foreach (var shape in InternalShapes)\n        {\n            World.DynamicTree.Update(shape);\n        }\n\n        World.ActivateBodyNextStep(this, true);\n    }\n\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    internal void Update(Real stepDt, Real substepDt)\n    {\n        ref RigidBodyData rigidBody = ref Data;\n\n        if (rigidBody.AngularVelocity.LengthSquared() < inactiveThresholdAngularSq &&\n            rigidBody.Velocity.LengthSquared() < inactiveThresholdLinearSq)\n        {\n            InternalSleepTime += stepDt;\n        }\n        else\n        {\n            InternalSleepTime = 0;\n        }\n\n        if (InternalSleepTime < deactivationTimeThreshold)\n        {\n            InternalIsland.MarkedAsActive = true;\n        }\n\n        if (rigidBody.MotionType == MotionType.Dynamic)\n        {\n            rigidBody.AngularVelocity *= angularDampingMultiplier;\n            rigidBody.Velocity *= linearDampingMultiplier;\n\n            rigidBody.DeltaVelocity = Force * rigidBody.InverseMass * substepDt;\n            rigidBody.DeltaAngularVelocity = JVector.Transform(Torque, rigidBody.InverseInertiaWorld) * substepDt;\n\n            if (AffectedByGravity)\n            {\n                rigidBody.DeltaVelocity += World.Gravity * substepDt;\n            }\n\n            Force = JVector.Zero;\n            Torque = JVector.Zero;\n\n            var bodyOrientation = JMatrix.CreateFromQuaternion(rigidBody.Orientation);\n\n            JMatrix.Multiply(bodyOrientation, inverseInertia, out rigidBody.InverseInertiaWorld);\n            JMatrix.MultiplyTransposed(rigidBody.InverseInertiaWorld, bodyOrientation, out rigidBody.InverseInertiaWorld);\n\n            rigidBody.InverseMass = inverseMass;\n        }\n    }\n\n    /// <summary>\n    /// Gets or sets the linear velocity of the rigid body in world space.\n    /// </summary>\n    /// <remarks>\n    /// Measured in units per second. Setting a non-zero velocity schedules the body\n    /// for activation on the next step.\n    /// </remarks>\n    /// <exception cref=\"InvalidOperationException\">\n    /// Thrown if the body's <see cref=\"MotionType\"/> is <see cref=\"MotionType.Static\"/>.\n    /// </exception>\n    public JVector Velocity\n    {\n        get => handle.Data.Velocity;\n        set\n        {\n            if (handle.Data.MotionType == MotionType.Static)\n            {\n                throw new InvalidOperationException(\n                    $\"Can not set velocity for static objects, objects must be kinematic or dynamic. See {nameof(MotionType)}.\");\n            }\n\n            handle.Data.Velocity = value;\n\n            if (!MathHelper.CloseToZero(value))\n            {\n                World.ActivateBodyNextStep(this);\n            }\n        }\n    }\n\n    /// <summary>\n    /// Gets or sets the angular velocity of the rigid body in world space.\n    /// </summary>\n    /// <remarks>\n    /// Measured in radians per second. The vector direction is the rotation axis,\n    /// and its magnitude is the rotation speed. Setting a non-zero velocity schedules\n    /// the body for activation on the next step.\n    /// </remarks>\n    /// <exception cref=\"InvalidOperationException\">\n    /// Thrown if the body's <see cref=\"MotionType\"/> is <see cref=\"MotionType.Static\"/>.\n    /// </exception>\n    public JVector AngularVelocity\n    {\n        get => handle.Data.AngularVelocity;\n        set\n        {\n            if (handle.Data.MotionType == MotionType.Static)\n            {\n                throw new InvalidOperationException(\n                    $\"Can not set angular velocity for static objects, objects must be kinematic or dynamic. See {nameof(MotionType)}.\");\n            }\n\n            handle.Data.AngularVelocity = value;\n\n            if (!MathHelper.CloseToZero(value))\n            {\n                World.ActivateBodyNextStep(this);\n            }\n        }\n    }\n\n    /// <summary>\n    /// Gets or sets whether the body is affected by the world's gravity during integration.\n    /// </summary>\n    /// <remarks>\n    /// Only applies when <see cref=\"MotionType\"/> is <see cref=\"MotionType.Dynamic\"/>.\n    /// Default is <see langword=\"true\"/>.\n    /// </remarks>\n    public bool AffectedByGravity { get; set; } = true;\n\n    /// <summary>\n    /// A managed pointer to custom user data. This is not utilized by the engine.\n    /// </summary>\n    public object? Tag { get; set; }\n\n    /// <summary>\n    /// Gets or sets whether speculative contacts are enabled for this body.\n    /// </summary>\n    /// <remarks>\n    /// Speculative contacts help prevent tunneling for fast-moving bodies by generating\n    /// contacts before actual penetration occurs. This may increase contact count and\n    /// solver cost. Default is <see langword=\"false\"/>.\n    /// </remarks>\n    public bool EnableSpeculativeContacts { get; set; } = false;\n\n    private void UpdateWorldInertia()\n    {\n        if (Data.MotionType == MotionType.Dynamic)\n        {\n            var bodyOrientation = JMatrix.CreateFromQuaternion(Data.Orientation);\n            JMatrix.Multiply(bodyOrientation, inverseInertia, out Data.InverseInertiaWorld);\n            JMatrix.MultiplyTransposed(Data.InverseInertiaWorld, bodyOrientation, out Data.InverseInertiaWorld);\n            Data.InverseMass = inverseMass;\n        }\n        else\n        {\n            Data.InverseInertiaWorld = JMatrix.Zero;\n            Data.InverseMass = (Real)0.0;\n        }\n    }\n\n    /// <summary>\n    /// Gets or sets how the rigid body participates in the simulation.\n    /// </summary>\n    /// <remarks>\n    /// Changing this property has immediate side effects:\n    /// <list type=\"bullet\">\n    /// <item><description>Switching to <see cref=\"MotionType.Static\"/> zeroes velocities, removes connections, and deactivates the body.</description></item>\n    /// <item><description>Switching from <see cref=\"MotionType.Static\"/> rebuilds connections from existing contacts.</description></item>\n    /// <item><description>Dynamic bodies use their mass and inertia; static and kinematic bodies are treated as having infinite mass by the solver.</description></item>\n    /// </list>\n    /// </remarks>\n    /// <exception cref=\"ArgumentOutOfRangeException\">Thrown if the value is not a valid <see cref=\"MotionType\"/>.</exception>\n    public MotionType MotionType\n    {\n        get => Data.MotionType;\n        set\n        {\n            if (Data.MotionType == value) return;\n\n            switch (value)\n            {\n                case MotionType.Static:\n                    // Switch to static\n                    World.RemoveConnections(this);\n                    Data.MotionType = MotionType.Static;\n                    World.RemoveStaticStaticConstraints(this);\n                    World.DeactivateBodyNextStep(this);\n                    Data.Velocity = JVector.Zero;\n                    Data.AngularVelocity = JVector.Zero;\n                    UpdateWorldInertia();\n                    break;\n                case MotionType.Kinematic:\n                {\n                    // Switch to kinematic\n                    if (Data.MotionType == MotionType.Static)\n                    {\n                        Data.MotionType = MotionType.Kinematic;\n                        World.BuildConnectionsFromExistingContacts(this);\n                    }\n\n                    Data.MotionType = MotionType.Kinematic;\n                    World.RemoveStaticStaticConstraints(this);\n                    World.ActivateBodyNextStep(this, true);\n                    UpdateWorldInertia();\n                    break;\n                }\n                case MotionType.Dynamic:\n                {\n                    // Switch to dynamic\n                    if (Data.MotionType == MotionType.Static)\n                    {\n                        Data.MotionType = MotionType.Dynamic;\n                        World.BuildConnectionsFromExistingContacts(this);\n                    }\n\n                    Data.MotionType = MotionType.Dynamic;\n                    World.ActivateBodyNextStep(this, true);\n                    UpdateWorldInertia();\n                    break;\n                }\n                default:\n                    throw new ArgumentOutOfRangeException(nameof(value), value, null);\n            }\n        }\n    }\n\n    [Obsolete($\"Use the {nameof(MotionType)} property instead.\")]\n    public bool IsStatic\n    {\n        set => MotionType = value ? MotionType.Static : MotionType.Dynamic;\n        get => MotionType == MotionType.Static;\n    }\n\n    /// <summary>\n    /// Indicates whether the rigid body is active or considered to be in a sleeping state.\n    /// Use <see cref=\"SetActivationState\"/> to alter the activation state.\n    /// </summary>\n    public bool IsActive => Data.IsActive;\n\n    /// <summary>\n    /// Instructs the engine to activate or deactivate the body at the beginning of\n    /// the next time step. The current state does not change immediately.\n    /// </summary>\n    /// <param name=\"active\">\n    /// If <see langword=\"true\"/>, the body will be activated; if <see langword=\"false\"/>, deactivated.\n    /// </param>\n    public void SetActivationState(bool active)\n    {\n        if (active) World.ActivateBodyNextStep(this);\n        else World.DeactivateBodyNextStep(this);\n    }\n\n    private void AttachToShape(RigidBodyShape shape)\n    {\n        if (shape.RigidBody != null)\n        {\n            throw new ArgumentException(\"Shape has already been added to a body.\", nameof(shape));\n        }\n\n        shape.RigidBody = this;\n        shape.UpdateWorldBoundingBox();\n        World.DynamicTree.AddProxy(shape, IsActive);\n    }\n\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    private static bool ShouldUpdateMassInertia(MassInertiaUpdateMode massInertiaMode)\n    {\n        return massInertiaMode switch\n        {\n            MassInertiaUpdateMode.Update => true,\n            MassInertiaUpdateMode.Preserve => false,\n            _ => throw new ArgumentOutOfRangeException(nameof(massInertiaMode), massInertiaMode, null)\n        };\n    }\n\n    /// <summary>\n    /// Adds several shapes to the rigid body at once. Mass properties are\n    /// recalculated only once, if requested.\n    /// </summary>\n    /// <param name=\"shapes\">The shapes to add.</param>\n    /// <exception cref=\"ArgumentException\">Thrown if any shape is already attached to a body.</exception>\n    public void AddShapes(IEnumerable<RigidBodyShape> shapes)\n        => AddShapes(shapes, MassInertiaUpdateMode.Update);\n\n    /// <summary>\n    /// Adds several shapes to the rigid body at once. Mass properties are\n    /// recalculated only once, if requested.\n    /// </summary>\n    /// <remarks>\n    /// Shapes are added sequentially. If an exception is thrown, shapes processed before the\n    /// failure remain attached to the body.\n    /// </remarks>\n    /// <param name=\"shapes\">The shapes to add.</param>\n    /// <param name=\"massInertiaMode\">\n    /// Controls whether the body's mass and inertia are recomputed after the shapes are added.\n    /// </param>\n    /// <exception cref=\"ArgumentException\">Thrown if any shape is already attached to a body.</exception>\n    public void AddShapes(IEnumerable<RigidBodyShape> shapes, MassInertiaUpdateMode massInertiaMode)\n    {\n        ArgumentNullException.ThrowIfNull(shapes);\n\n        foreach (RigidBodyShape shape in shapes)\n        {\n            ArgumentNullException.ThrowIfNull(shape);\n\n            if (shape.IsRegistered)\n            {\n                throw new ArgumentException(\"Shape can not be added. Shape already registered elsewhere.\", nameof(shapes));\n            }\n\n            AttachToShape(shape);\n            InternalShapes.Add(shape);\n        }\n\n        if (ShouldUpdateMassInertia(massInertiaMode)) SetMassInertia();\n    }\n\n    /// <summary>\n    /// Enables the implicit gyroscopic–torque solver for this <see cref=\"RigidBody\"/>.\n    /// </summary>\n    /// <remarks>\n    /// When <see langword=\"true\"/>, every sub-step performs an extra Newton iteration to solve\n    /// <c>ω × (I ω)</c> implicitly.\n    ///\n    /// The benefit becomes noticeable for bodies with a high inertia anisotropy or very fast\n    /// spin-rates. Typical examples are long, thin rods, spinning tops, propellers, and other objects\n    /// whose principal inertia values differ by an order of magnitude. In those cases the flag eliminates artificial\n    /// precession.\n    /// </remarks>\n    /// <value>\n    /// <see langword=\"true\"/> to integrate gyroscopic torque each step; otherwise\n    /// <see langword=\"false\"/> (default).\n    /// </value>\n    public bool EnableGyroscopicForces\n    {\n        get => Data.EnableGyroscopicForces;\n        set => Data.EnableGyroscopicForces = value;\n    }\n\n    /// <summary>\n    /// Adds a shape to the body.\n    /// </summary>\n    /// <param name=\"shape\">The shape to be added.</param>\n    /// <exception cref=\"ArgumentException\">\n    /// Thrown if the shape is already registered elsewhere.\n    /// </exception>\n    public void AddShape(RigidBodyShape shape)\n        => AddShape(shape, MassInertiaUpdateMode.Update);\n\n    /// <summary>\n    /// Adds a shape to the body.\n    /// </summary>\n    /// <param name=\"shape\">The shape to be added.</param>\n    /// <param name=\"massInertiaMode\">\n    /// Controls whether the body's mass and inertia are recomputed after the shape is added.\n    /// </param>\n    /// <exception cref=\"ArgumentException\">\n    /// Thrown if the shape is already registered elsewhere.\n    /// </exception>\n    public void AddShape(RigidBodyShape shape, MassInertiaUpdateMode massInertiaMode)\n    {\n        ArgumentNullException.ThrowIfNull(shape);\n\n        if (shape.IsRegistered)\n        {\n            throw new ArgumentException(\"Shape can not be added. Shape already registered elsewhere.\", nameof(shape));\n        }\n\n        AttachToShape(shape);\n        InternalShapes.Add(shape);\n\n        if (ShouldUpdateMassInertia(massInertiaMode)) SetMassInertia();\n    }\n    \n    [Obsolete($\"Use {nameof(AddShapes)} with {nameof(MassInertiaUpdateMode)} instead.\")]\n    public void AddShape(IEnumerable<RigidBodyShape> shapes, bool setMassInertia = true)\n        => AddShapes(shapes, setMassInertia ? MassInertiaUpdateMode.Update : MassInertiaUpdateMode.Preserve);\n    \n    [Obsolete($\"Use {nameof(AddShape)} with {nameof(MassInertiaUpdateMode)} instead.\")]\n    public void AddShape(RigidBodyShape shape, bool setMassInertia = true)\n        => AddShape(shape, setMassInertia ? MassInertiaUpdateMode.Update : MassInertiaUpdateMode.Preserve);\n\n    /// <summary>\n    /// Represents the force to be applied to the body during the next call to <see cref=\"World.Step(Real, bool)\"/>.\n    /// This value is automatically reset to zero after the call.\n    /// </summary>\n    public JVector Force { get; set; }\n\n    /// <summary>\n    /// Represents the torque to be applied to the body during the next call to <see cref=\"World.Step(Real, bool)\"/>.\n    /// This value is automatically reset to zero after the call.\n    /// </summary>\n    public JVector Torque { get; set; }\n\n    /// <summary>\n    /// Applies a force to the rigid body, thereby altering its velocity.\n    /// </summary>\n    /// <param name=\"force\">\n    /// The force to be applied. This force is effective for a single frame only and is reset\n    /// to zero during the next call to <see cref=\"World.Step(Real, bool)\"/>.\n    /// </param>\n    /// <param name=\"wakeup\">\n    /// If <c>true</c> (default), the body will be activated if it is currently sleeping.\n    /// If <c>false</c>, the force is only applied if the body is already active; sleeping\n    /// bodies will remain asleep and ignore the force.\n    /// </param>\n    public void AddForce(in JVector force, bool wakeup = true)\n    {\n        if ((Data.MotionType != MotionType.Dynamic) || MathHelper.CloseToZero(force)) return;\n\n        if (wakeup) SetActivationState(true);\n        else if (!IsActive) return;\n\n        Force += force;\n    }\n\n    /// <summary>\n    /// Applies a force to the rigid body, altering its velocity. This force is applied for a single frame only and is\n    /// reset to zero with the following call to <see cref=\"World.Step(Real, bool)\"/>.\n    /// </summary>\n    /// <param name=\"force\">The force to be applied.</param>\n    /// <param name=\"position\">The position where the force will be applied.</param>\n    /// <param name=\"wakeup\">\n    /// If <c>true</c> (default), the body will be activated if it is currently sleeping.\n    /// If <c>false</c>, the force is only applied if the body is already active; sleeping\n    /// bodies will remain asleep and ignore the force.\n    /// </param>\n    [ReferenceFrame(ReferenceFrame.World)]\n    public void AddForce(in JVector force, in JVector position, bool wakeup = true)\n    {\n        if ((Data.MotionType != MotionType.Dynamic) || MathHelper.CloseToZero(force)) return;\n\n        if (wakeup) SetActivationState(true);\n        else if (!IsActive) return;\n\n        ref RigidBodyData data = ref Data;\n        JVector.Subtract(position, data.Position, out JVector torque);\n        JVector.Cross(torque, force, out torque);\n\n        Force += force;\n        Torque += torque;\n    }\n\n    /// <summary>\n    /// Applies an instantaneous impulse to the rigid body, directly changing its velocity.\n    /// </summary>\n    /// <param name=\"impulse\">The impulse to be applied.</param>\n    /// <param name=\"wakeup\">\n    /// If <c>true</c> (default), the body will be activated if it is currently sleeping.\n    /// If <c>false</c>, the impulse is only applied if the body is already active; sleeping\n    /// bodies will remain asleep and ignore the impulse.\n    /// </param>\n    public void ApplyImpulse(in JVector impulse, bool wakeup = true)\n    {\n        if ((Data.MotionType != MotionType.Dynamic) || MathHelper.CloseToZero(impulse)) return;\n        if (!wakeup && !IsActive) return;\n\n        World.ActivateBodyNextStep(this);\n        handle.Data.Velocity += inverseMass * impulse;\n    }\n\n    /// <summary>\n    /// Applies an instantaneous impulse at a world-space position, directly changing both\n    /// linear and angular velocity.\n    /// </summary>\n    /// <param name=\"impulse\">The impulse to be applied.</param>\n    /// <param name=\"position\">The position where the impulse will be applied.</param>\n    /// <param name=\"wakeup\">\n    /// If <c>true</c> (default), the body will be activated if it is currently sleeping.\n    /// If <c>false</c>, the impulse is only applied if the body is already active; sleeping\n    /// bodies will remain asleep and ignore the impulse.\n    /// </param>\n    [ReferenceFrame(ReferenceFrame.World)]\n    public void ApplyImpulse(in JVector impulse, in JVector position, bool wakeup = true)\n    {\n        if ((Data.MotionType != MotionType.Dynamic) || MathHelper.CloseToZero(impulse)) return;\n        if (!wakeup && !IsActive) return;\n\n        World.ActivateBodyNextStep(this);\n\n        ref RigidBodyData data = ref Data;\n        JVector.Subtract(position, data.Position, out JVector angularImpulse);\n        JVector.Cross(angularImpulse, impulse, out angularImpulse);\n\n        data.Velocity += impulse * inverseMass;\n        data.AngularVelocity += JVector.Transform(angularImpulse, data.InverseInertiaWorld);\n    }\n    \n    [Obsolete(\"Use ApplyImpulse instead.\")]\n    public void AddImpulse(in JVector impulse, bool wakeup = true) => ApplyImpulse(impulse, wakeup);\n    \n    [Obsolete(\"Use ApplyImpulse instead.\")]\n    public void AddImpulse(in JVector impulse, in JVector position, bool wakeup = true) => ApplyImpulse(impulse, position, wakeup);\n\n    /// <summary>\n    /// Predicts the position of the body after a given time step using linear extrapolation.\n    /// This does not simulate forces or collisions — it assumes constant velocity.\n    /// </summary>\n    /// <param name=\"dt\">The time step to extrapolate forward.</param>\n    /// <returns>The predicted position after <paramref name=\"dt\"/>.</returns>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public JVector PredictPosition(Real dt) => Data.Position + Data.Velocity * dt;\n\n    /// <summary>\n    /// Predicts the orientation of the body after a given time step using angular velocity.\n    /// This does not simulate forces or collisions — it assumes constant angular velocity.\n    /// </summary>\n    /// <param name=\"dt\">The time step to extrapolate forward.</param>\n    /// <returns>The predicted orientation after <paramref name=\"dt\"/>.</returns>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public JQuaternion PredictOrientation(Real dt) =>\n        JQuaternion.Normalize(MathHelper.RotationQuaternion(Data.AngularVelocity, dt) * Data.Orientation);\n\n    /// <summary>\n    /// Predicts the pose (position and orientation) of the body after a given time step using simple extrapolation.\n    /// This method is intended for rendering purposes and does not modify the simulation state.\n    /// </summary>\n    /// <param name=\"dt\">The time step to extrapolate forward.</param>\n    /// <param name=\"position\">The predicted position after <paramref name=\"dt\"/>.</param>\n    /// <param name=\"orientation\">The predicted orientation after <paramref name=\"dt\"/>.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public void PredictPose(Real dt, out JVector position, out JQuaternion orientation)\n    {\n        position = PredictPosition(dt);\n        orientation = PredictOrientation(dt);\n    }\n\n    /// <summary>\n    /// Removes a specified shape from the rigid body.\n    /// </summary>\n    /// <param name=\"shape\">The shape to remove from the rigid body.</param>\n    /// <exception cref=\"ArgumentException\">\n    /// Thrown if the specified shape is not part of this rigid body.\n    /// </exception>\n    public void RemoveShape(RigidBodyShape shape)\n        => RemoveShape(shape, MassInertiaUpdateMode.Update);\n\n    /// <summary>\n    /// Removes a specified shape from the rigid body.\n    /// </summary>\n    /// <param name=\"shape\">The shape to remove from the rigid body.</param>\n    /// <param name=\"massInertiaMode\">\n    /// Controls whether the body's mass and inertia are recomputed after the shape is removed.\n    /// </param>\n    /// <exception cref=\"ArgumentException\">\n    /// Thrown if the specified shape is not part of this rigid body.\n    /// </exception>\n    public void RemoveShape(RigidBodyShape shape, MassInertiaUpdateMode massInertiaMode)\n    {\n        ArgumentNullException.ThrowIfNull(shape);\n\n        if (!InternalShapes.Remove(shape))\n        {\n            throw new ArgumentException(\"Shape is not part of this body.\", nameof(shape));\n        }\n\n        foreach (var arbiter in InternalContacts)\n        {\n            if (arbiter.Handle.Data.Key.Key1 == shape.ShapeId || arbiter.Handle.Data.Key.Key2 == shape.ShapeId)\n            {\n                // Removes the current element we are iterating over from Contacts, i.e. the HashSet\n                // we are iterating over is altered. This is allowed.\n                World.Remove(arbiter);\n            }\n        }\n\n        World.DynamicTree.RemoveProxy(shape);\n        shape.RigidBody = null!;\n\n        if (ShouldUpdateMassInertia(massInertiaMode)) SetMassInertia();\n    }\n\n    /// <summary>\n    /// Removes several shapes from the body.\n    /// </summary>\n    /// <param name=\"shapes\">The shapes to remove from the rigid body.</param>\n    /// <exception cref=\"ArgumentException\">Thrown if at least one shape is not part of this rigid body.</exception>\n    public void RemoveShapes(IEnumerable<RigidBodyShape> shapes)\n        => RemoveShapes(shapes, MassInertiaUpdateMode.Update);\n\n    /// <summary>\n    /// Removes several shapes from the body.\n    /// </summary>\n    /// <param name=\"shapes\">The shapes to remove from the rigid body.</param>\n    /// <param name=\"massInertiaMode\">\n    /// Controls whether the body's mass and inertia are recomputed after the shapes are removed.\n    /// </param>\n    /// <exception cref=\"ArgumentException\">Thrown if at least one shape is not part of this rigid body.</exception>\n    public void RemoveShapes(IEnumerable<RigidBodyShape> shapes, MassInertiaUpdateMode massInertiaMode)\n    {\n        ArgumentNullException.ThrowIfNull(shapes);\n\n        HashSet<ulong> sids = new();\n\n        foreach (var shape in shapes)\n        {\n            ArgumentNullException.ThrowIfNull(shape);\n\n            if (shape.RigidBody != this)\n            {\n                throw new ArgumentException($\"Shape {shape} is not attached to this body.\", nameof(shapes));\n            }\n\n            sids.Add(shape.ShapeId);\n        }\n\n        foreach (var arbiter in InternalContacts)\n        {\n            if (sids.Contains(arbiter.Handle.Data.Key.Key1) || sids.Contains(arbiter.Handle.Data.Key.Key2))\n            {\n                // Removes the current element we are iterating over from Contacts, i.e. the HashSet\n                // we are iterating over is altered. This is allowed.\n                World.Remove(arbiter);\n            }\n        }\n\n        for (int i = InternalShapes.Count; i-- > 0;)\n        {\n            var shape = InternalShapes[i];\n\n            if (sids.Contains(shape.ShapeId))\n            {\n                World.DynamicTree.RemoveProxy(shape);\n                shape.RigidBody = null!;\n                InternalShapes.RemoveAt(i);\n            }\n        }\n\n        if (ShouldUpdateMassInertia(massInertiaMode)) SetMassInertia();\n\n        sids.Clear();\n    }\n    \n    [Obsolete($\"Use {nameof(RemoveShape)} with {nameof(MassInertiaUpdateMode)} instead.\")]\n    public void RemoveShape(RigidBodyShape shape, bool setMassInertia = true)\n        => RemoveShape(shape, setMassInertia ? MassInertiaUpdateMode.Update : MassInertiaUpdateMode.Preserve);\n    \n    [Obsolete($\"Use {nameof(RemoveShapes)} with {nameof(MassInertiaUpdateMode)} instead.\")]\n    public void RemoveShape(IEnumerable<RigidBodyShape> shapes, bool setMassInertia = true)\n        => RemoveShapes(shapes, setMassInertia ? MassInertiaUpdateMode.Update : MassInertiaUpdateMode.Preserve);\n\n    /// <summary>\n    /// Removes all shapes associated with the rigid body.\n    /// </summary>\n    public void ClearShapes()\n        => ClearShapes(MassInertiaUpdateMode.Update);\n\n    /// <summary>\n    /// Removes all shapes associated with the rigid body.\n    /// </summary>\n    /// <param name=\"massInertiaMode\">\n    /// Controls whether the body's mass and inertia are recomputed after the shapes are removed.\n    /// </param>\n    public void ClearShapes(MassInertiaUpdateMode massInertiaMode)\n    {\n        RemoveShapes(InternalShapes, massInertiaMode);\n    }\n    \n    [Obsolete($\"Use {nameof(ClearShapes)} with {nameof(MassInertiaUpdateMode)} instead.\")]\n    public void ClearShapes(bool setMassInertia = true)\n    {\n        ClearShapes(setMassInertia ? MassInertiaUpdateMode.Update : MassInertiaUpdateMode.Preserve);\n    }\n\n    /// <summary>\n    /// Computes the mass and inertia of this body from all attached shapes, assuming unit density.\n    /// </summary>\n    /// <remarks>\n    /// The mass contributions of all shapes are summed. If no shapes are attached, the body\n    /// is assigned a mass of 1 and an identity inertia tensor.\n    /// </remarks>\n    /// <exception cref=\"InvalidOperationException\">\n    /// Thrown if the computed inertia matrix is not invertible. This may occur if a shape has invalid mass properties.\n    /// </exception>\n    public void SetMassInertia()\n    {\n        if (InternalShapes.Count == 0)\n        {\n            inverseInertia = JMatrix.Identity;\n            inverseMass = (Real)1.0;\n            UpdateWorldInertia();\n            return;\n        }\n\n        JMatrix inertia = JMatrix.Zero;\n        Real mass = (Real)0.0;\n\n        foreach (var rbs in InternalShapes)\n        {\n            rbs.CalculateMassInertia(out var shapeInertia, out _, out var shapeMass);\n\n            inertia += shapeInertia;\n            mass += shapeMass;\n        }\n\n        if (!JMatrix.Inverse(inertia, out inverseInertia))\n        {\n            throw new InvalidOperationException(\"Inertia matrix is not invertible. This might happen if a shape has \" +\n                                                \"invalid mass properties. If you encounter this while calling \" +\n                                                \"AddShape or AddShapes, call the method with massInertiaMode set to \" +\n                                                nameof(MassInertiaUpdateMode.Preserve) + \".\");\n        }\n\n        inverseMass = (Real)1.0 / mass;\n\n        UpdateWorldInertia();\n    }\n\n    /// <summary>\n    /// Computes the inertia from all attached shapes, then uniformly scales it to match the specified mass.\n    /// </summary>\n    /// <remarks>\n    /// This is equivalent to calling <see cref=\"SetMassInertia()\"/> and then scaling the resulting\n    /// inertia tensor so the body has the desired total mass. Use this when you want shape-derived\n    /// inertia proportions but a specific total mass (e.g., for gameplay tuning).\n    /// </remarks>\n    /// <param name=\"mass\">The desired total mass of the body. Must be positive.</param>\n    /// <exception cref=\"ArgumentException\">Thrown if the specified mass is zero or negative.</exception>\n    public void SetMassInertia(Real mass)\n    {\n        if (mass <= (Real)0.0)\n        {\n            // we do not protect against NaN here, since it is the users responsibility\n            // to not feed NaNs to the engine.\n            throw new ArgumentException(\"Mass can not be zero or negative.\", nameof(mass));\n        }\n\n        SetMassInertia();\n        inverseInertia = JMatrix.Multiply(inverseInertia, (Real)1.0 / (inverseMass * mass));\n        inverseMass = (Real)1.0 / mass;\n        UpdateWorldInertia();\n    }\n\n    /// <summary>\n    /// Sets the new mass properties of this body by specifying both inertia and mass directly.\n    /// </summary>\n    /// <param name=\"inertia\">\n    /// The inertia tensor (or inverse inertia tensor if <paramref name=\"setAsInverse\"/> is true)\n    /// in body (local) space, about the center of mass.\n    /// </param>\n    /// <param name=\"mass\">\n    /// The mass (or inverse mass if <paramref name=\"setAsInverse\"/> is true). When setting inverse\n    /// mass, a value of zero represents infinite mass.\n    /// </param>\n    /// <param name=\"setAsInverse\">\n    /// If <see langword=\"true\"/>, <paramref name=\"inertia\"/> and <paramref name=\"mass\"/> are\n    /// interpreted as inverse values.\n    /// </param>\n    /// <exception cref=\"ArgumentException\">\n    /// Thrown if:\n    /// <list type=\"bullet\">\n    /// <item><description><paramref name=\"mass\"/> is zero or negative when <paramref name=\"setAsInverse\"/> is false.</description></item>\n    /// <item><description><paramref name=\"mass\"/> is negative or infinite when <paramref name=\"setAsInverse\"/> is true.</description></item>\n    /// <item><description><paramref name=\"inertia\"/> is not invertible when <paramref name=\"setAsInverse\"/> is false.</description></item>\n    /// </list>\n    /// </exception>\n    public void SetMassInertia(in JMatrix inertia, Real mass, bool setAsInverse = false)\n    {\n        if (setAsInverse)\n        {\n            if (Real.IsInfinity(mass) || mass < (Real)0.0)\n            {\n                throw new ArgumentException(\"Inverse mass must be finite and not negative.\", nameof(mass));\n            }\n\n            inverseInertia = inertia;\n            inverseMass = mass;\n        }\n        else\n        {\n            if (mass <= (Real)0.0)\n            {\n                throw new ArgumentException(\"Mass can not be zero or negative.\", nameof(mass));\n            }\n\n            if (!JMatrix.Inverse(inertia, out inverseInertia))\n            {\n                throw new ArgumentException(\"Inertia matrix is not invertible.\", nameof(inertia));\n            }\n\n            inverseMass = (Real)1.0 / mass;\n        }\n\n        UpdateWorldInertia();\n    }\n\n    private static List<JTriangle>? _debugTriangles;\n\n    /// <summary>\n    /// Generates a rough triangle approximation of the shapes of the body.\n    /// Since the generation is slow this should only be used for debugging\n    /// purposes.\n    /// </summary>\n    /// <remarks>\n    /// This method tessellates all attached shapes and is not suitable for real-time use.\n    /// It uses a shared static list internally and is not thread-safe.\n    /// </remarks>\n    /// <param name=\"drawer\">The debug drawer to receive the generated triangles.</param>\n    public void DebugDraw(IDebugDrawer drawer)\n    {\n        _debugTriangles ??= [];\n\n        foreach (var shape in InternalShapes)\n        {\n            ShapeHelper.Tessellate(shape, _debugTriangles);\n\n            foreach (var tri in _debugTriangles)\n            {\n                drawer.DrawTriangle(\n                    JVector.Transform(tri.V0, Data.Orientation) + Data.Position,\n                    JVector.Transform(tri.V1, Data.Orientation) + Data.Position,\n                    JVector.Transform(tri.V2, Data.Orientation) + Data.Position);\n            }\n\n            _debugTriangles.Clear();\n        }\n    }\n\n    /// <summary>\n    /// Gets the mass of the rigid body. To modify the mass, use\n    /// <see cref=\"RigidBody.SetMassInertia(Real)\"/> or\n    /// <see cref=\"RigidBody.SetMassInertia(in JMatrix, Real, bool)\"/>.\n    /// </summary>\n    /// <remarks>\n    /// This value is only meaningful for <see cref=\"MotionType.Dynamic\"/> bodies.\n    /// Static and kinematic bodies are treated as having infinite mass by the solver\n    /// regardless of this value.\n    /// </remarks>\n    public Real Mass => (Real)1.0 / inverseMass;\n\n    int IPartitionedSetIndex.SetIndex { get; set; } = -1;\n}"
  },
  {
    "path": "src/Jitter2/IDebugDrawer.cs",
    "content": "/*\n * Jitter2 Physics Library\n * (c) Thorben Linneweber and contributors\n * SPDX-License-Identifier: MIT\n */\n\nusing Jitter2.LinearMath;\n\nnamespace Jitter2;\n\n/// <summary>\n/// Defines an interface for objects that can be debug-drawn.\n/// </summary>\npublic interface IDebugDrawable\n{\n    /// <summary>\n    /// Passes an <see cref=\"IDebugDrawer\"/> to draw basic debug information for the object.\n    /// </summary>\n    /// <param name=\"drawer\">The debug drawer used for rendering debug information.</param>\n    public void DebugDraw(IDebugDrawer drawer);\n}\n\n/// <summary>\n/// Defines an interface for drawing debug visualization elements.\n/// </summary>\npublic interface IDebugDrawer\n{\n    /// <summary>\n    /// Draws a line segment between two points.\n    /// </summary>\n    /// <param name=\"pA\">The start point of the segment.</param>\n    /// <param name=\"pB\">The end point of the segment.</param>\n    public void DrawSegment(in JVector pA, in JVector pB);\n\n    /// <summary>\n    /// Draws a triangle defined by three vertices.\n    /// </summary>\n    /// <param name=\"pA\">The first vertex of the triangle.</param>\n    /// <param name=\"pB\">The second vertex of the triangle.</param>\n    /// <param name=\"pC\">The third vertex of the triangle.</param>\n    public void DrawTriangle(in JVector pA, in JVector pB, in JVector pC);\n\n    /// <summary>\n    /// Draws a point at the specified position.\n    /// </summary>\n    /// <param name=\"p\">The position of the point.</param>\n    public void DrawPoint(in JVector p);\n}"
  },
  {
    "path": "src/Jitter2/Jitter2.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFrameworks>net8.0;net9.0;net10.0</TargetFrameworks>\n    <ImplicitUsings>disable</ImplicitUsings>\n    <Nullable>enable</Nullable>\n    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>\n  </PropertyGroup>\n\n  <PropertyGroup>\n    <NoWarn>CS1591;CS1573</NoWarn>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <None Include=\"_package\\README.md\" Pack=\"true\" PackagePath=\"\" />\n    <None Include=\"_package\\icon.png\"  Pack=\"true\" PackagePath=\"\" />\n    <None Include=\"_package\\LICENSE\"   Pack=\"true\" PackagePath=\"\" />\n    <None Include=\"_package\\THIRD-PARTY-NOTICES.txt\" Pack=\"true\" PackagePath=\"\" />\n  </ItemGroup>\n\n  <PropertyGroup>\n    <Description>Jitter Physics 2, the evolution of Jitter Physics, is an impulse-based dynamics engine with a semi-implicit Euler integrator. It is a fast, simple, and dependency-free engine written in C# with a clear and user-friendly API.\n    </Description>\n    <GenerateDocumentationFile>true</GenerateDocumentationFile>\n    <PackageProjectUrl>https://jitterphysics.com</PackageProjectUrl>\n    <PackageTags>physics engine;collision;csharp;dotnet</PackageTags>\n    <Authors>notgiven688</Authors>\n    <RepositoryUrl>https://github.com/notgiven688/jitterphysics2.git</RepositoryUrl>\n    <RepositoryType>git</RepositoryType>\n    <DebugType>Embedded</DebugType>\n    <EmbedAllSources>true</EmbedAllSources>\n    <IncludeSymbols>true</IncludeSymbols>\n    <SymbolPackageFormat>snupkg</SymbolPackageFormat>\n    <PackageReadmeFile>README.md</PackageReadmeFile>\n    <PackageIcon>icon.png</PackageIcon>\n    <PackageLicenseFile>LICENSE</PackageLicenseFile>\n  </PropertyGroup>\n\n  <!-- Default settings for Release build -->\n  <PropertyGroup Condition=\"'$(Configuration)' == 'Release'\">\n    <DefineConstants>$(DefineConstants);RELEASE;TRACE</DefineConstants>\n    <DebugSymbols>false</DebugSymbols>\n    <DebugType>portable</DebugType>\n    <Optimize>true</Optimize>\n  </PropertyGroup>\n\n  <!-- Separate configuration for Double Precision -->\n  <PropertyGroup Condition=\"'$(DoublePrecision)' == 'true'\">\n    <DefineConstants>$(DefineConstants);USE_DOUBLE_PRECISION</DefineConstants>\n    <PackageId>Jitter2.Double</PackageId> <!-- Custom package name for double precision -->\n    <Description>\n      Jitter Physics 2 with double precision enabled. This is an impulse-based dynamics engine with a semi-implicit Euler integrator.\n    </Description>\n    <AssemblyName>Jitter2.Double</AssemblyName> <!-- Custom assembly name -->\n    <PackageTags>physics engine;collision;csharp;dotnet;double precision</PackageTags>\n  </PropertyGroup>\n\n</Project>\n"
  },
  {
    "path": "src/Jitter2/LinearMath/Interop.cs",
    "content": "/*\n * Jitter2 Physics Library\n * (c) Thorben Linneweber and contributors\n * SPDX-License-Identifier: MIT\n */\n\nusing System;\nusing System.Numerics;\nusing System.Runtime.CompilerServices;\n\nnamespace Jitter2.LinearMath;\n\n/// <summary>\n/// Interop helpers for JVector and JQuaternion.\n/// Includes safe implicit conversions to System.Numerics types, and opt-in unsafe\n/// bit reinterpretation for high-performance interop with layout-compatible structs.\n/// </summary>\ninternal static class UnsafeInterop\n{\n    [MethodImpl(MethodImplOptions.NoInlining)]\n    public static void ThrowSizeMismatch<TTo, TFrom>()\n        => throw new InvalidOperationException(\n            $\"UnsafeAs size mismatch: sizeof({typeof(TFrom).Name})={Unsafe.SizeOf<TFrom>()}, \" +\n            $\"sizeof({typeof(TTo).Name})={Unsafe.SizeOf<TTo>()}.\");\n\n    [MethodImpl(MethodImplOptions.NoInlining)]\n    public static void ThrowSizeMismatch(string from, int fromSize, string to, int toSize)\n        => throw new InvalidOperationException(\n            $\"UnsafeAs size mismatch: sizeof({from})={fromSize}, sizeof({to})={toSize}.\");\n}\n\npublic partial struct JVector\n{\n    /// <summary>\n    /// Reinterprets the bits of this <see cref=\"JVector\"/> as <typeparamref name=\"T\"/>.\n    /// </summary>\n    /// <remarks>\n    /// Valid only if <typeparamref name=\"T\"/> has identical size and compatible layout.\n    /// </remarks>\n    /// <typeparam name=\"T\">The target unmanaged type.</typeparam>\n    /// <returns>The reinterpreted value.</returns>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public T UnsafeAs<T>() where T : unmanaged\n    {\n        if (Unsafe.SizeOf<T>() != Unsafe.SizeOf<JVector>())\n        {\n            UnsafeInterop.ThrowSizeMismatch<T, JVector>();\n        }\n\n        return Unsafe.As<JVector, T>(ref this);\n    }\n\n    /// <summary>\n    /// Reinterprets the bits of <paramref name=\"value\"/> as a <see cref=\"JVector\"/>.\n    /// </summary>\n    /// <remarks>\n    /// Valid only if <typeparamref name=\"T\"/> has identical size and compatible layout.\n    /// </remarks>\n    /// <typeparam name=\"T\">The source unmanaged type.</typeparam>\n    /// <param name=\"value\">The value to reinterpret.</param>\n    /// <returns>The reinterpreted vector.</returns>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static JVector UnsafeFrom<T>(in T value) where T : unmanaged\n    {\n        if (Unsafe.SizeOf<T>() != Unsafe.SizeOf<JVector>())\n        {\n            UnsafeInterop.ThrowSizeMismatch<JVector, T>();\n        }\n\n        return Unsafe.As<T, JVector>(ref Unsafe.AsRef(in value));\n    }\n\n    public static implicit operator JVector((Real x, Real y, Real z) tuple) => new(tuple.x, tuple.y, tuple.z);\n\n    public static implicit operator Vector3(in JVector v) => new((float)v.X, (float)v.Y, (float)v.Z);\n\n    public static implicit operator JVector(in Vector3 v) => new(v.X, v.Y, v.Z);\n}\n\npublic partial struct JQuaternion\n{\n    /// <summary>\n    /// Reinterprets the bits of this <see cref=\"JQuaternion\"/> as <typeparamref name=\"T\"/>.\n    /// </summary>\n    /// <remarks>\n    /// Valid only if <typeparamref name=\"T\"/> has identical size and compatible layout.\n    /// Memory order is X, Y, Z, W (W is last).\n    /// </remarks>\n    /// <typeparam name=\"T\">The target unmanaged type.</typeparam>\n    /// <returns>The reinterpreted value.</returns>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public T UnsafeAs<T>() where T : unmanaged\n    {\n        if (Unsafe.SizeOf<T>() != Unsafe.SizeOf<JQuaternion>())\n        {\n            UnsafeInterop.ThrowSizeMismatch<T, JQuaternion>();\n        }\n\n        return Unsafe.As<JQuaternion, T>(ref this);\n    }\n\n    /// <summary>\n    /// Reinterprets the bits of <paramref name=\"value\"/> as a <see cref=\"JQuaternion\"/>.\n    /// </summary>\n    /// <remarks>\n    /// Valid only if <typeparamref name=\"T\"/> has identical size and compatible layout.\n    /// Expects memory order X, Y, Z, W (W is last).\n    /// </remarks>\n    /// <typeparam name=\"T\">The source unmanaged type.</typeparam>\n    /// <param name=\"value\">The value to reinterpret.</param>\n    /// <returns>The reinterpreted quaternion.</returns>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static JQuaternion UnsafeFrom<T>(in T value) where T : unmanaged\n    {\n        if (Unsafe.SizeOf<T>() != Unsafe.SizeOf<JQuaternion>())\n        {\n            UnsafeInterop.ThrowSizeMismatch<JQuaternion, T>();\n        }\n\n        return Unsafe.As<T, JQuaternion>(ref Unsafe.AsRef(in value));\n    }\n\n    public static implicit operator JQuaternion((Real x, Real y, Real z, Real w) tuple) => new(tuple.x, tuple.y, tuple.z, tuple.w);\n\n    public static implicit operator Quaternion(in JQuaternion q) => new((float)q.X, (float)q.Y, (float)q.Z, (float)q.W);\n\n    public static implicit operator JQuaternion(in Quaternion q) => new(q.X, q.Y, q.Z, q.W);\n}\n\n#if DEBUG\n\npublic static class UnsafeBase64Serializer<T> where T : unmanaged\n{\n    public static string Serialize(in T value)\n    {\n        int size = Unsafe.SizeOf<T>();\n        byte[] buffer = new byte[size];\n\n        unsafe\n        {\n            fixed (byte* ptr = buffer)\n            {\n                *(T*)ptr = value;\n            }\n        }\n\n        return Convert.ToBase64String(buffer);\n    }\n\n    public static T Deserialize(string base64)\n    {\n        byte[] buffer = Convert.FromBase64String(base64);\n\n        if (buffer.Length != Unsafe.SizeOf<T>())\n        {\n            UnsafeInterop.ThrowSizeMismatch(\"Base64Data\", buffer.Length, typeof(T).Name, Unsafe.SizeOf<T>());\n        }\n\n        unsafe\n        {\n            fixed (byte* ptr = buffer)\n            {\n                return *(T*)ptr;\n            }\n        }\n    }\n}\n\n#endif"
  },
  {
    "path": "src/Jitter2/LinearMath/JAngle.cs",
    "content": "/*\n * Jitter2 Physics Library\n * (c) Thorben Linneweber and contributors\n * SPDX-License-Identifier: MIT\n */\n\nusing System;\nusing System.Runtime.InteropServices;\n\nnamespace Jitter2.LinearMath;\n\n/// <summary>\n/// A floating point variable of type <see cref=\"Real\"/> representing an angle. This structure exists to eliminate\n/// ambiguity between radians and degrees in the Jitter API.\n/// </summary>\n[StructLayout(LayoutKind.Explicit, Size = 1*sizeof(Real))]\npublic struct JAngle : IEquatable<JAngle>\n{\n    /// <summary>\n    /// Gets or sets the angle value in radians.\n    /// </summary>\n    [field: FieldOffset(0*sizeof(Real))]\n    public Real Radian { get; set; }\n\n    /// <summary>\n    /// Returns a string representation of the <see cref=\"JAngle\"/>.\n    /// </summary>\n    public readonly override string ToString()\n    {\n        return $\"Radian={Radian}, Degree={Degree}\";\n    }\n\n    public readonly override bool Equals(object? obj)\n    {\n        return obj is JAngle other && Equals(other);\n    }\n\n    public readonly bool Equals(JAngle p)\n    {\n        return p.Radian == Radian;\n    }\n\n    public readonly override int GetHashCode()\n    {\n        return Radian.GetHashCode();\n    }\n\n    /// <summary>\n    /// Gets or sets the angle value in degrees.\n    /// </summary>\n    public Real Degree\n    {\n        readonly get => Radian / MathR.PI * (Real)180.0;\n        set => Radian = value / (Real)180.0 * MathR.PI;\n    }\n\n    /// <summary>\n    /// Creates a <see cref=\"JAngle\"/> from a value in radians.\n    /// </summary>\n    public static JAngle FromRadian(Real rad)\n    {\n        return new JAngle { Radian = rad };\n    }\n\n    /// <summary>\n    /// Creates a <see cref=\"JAngle\"/> from a value in degrees.\n    /// </summary>\n    public static JAngle FromDegree(Real deg)\n    {\n        return new JAngle { Degree = deg };\n    }\n\n    public static explicit operator JAngle(Real angle)\n    {\n        return FromRadian(angle);\n    }\n\n    public static JAngle operator -(JAngle a)\n    {\n        return FromRadian(-a.Radian);\n    }\n\n    public static JAngle operator +(JAngle a, JAngle b)\n    {\n        return FromRadian(a.Radian + b.Radian);\n    }\n\n    public static JAngle operator -(JAngle a, JAngle b)\n    {\n        return FromRadian(a.Radian - b.Radian);\n    }\n\n    public static bool operator ==(JAngle l, JAngle r)\n    {\n        return (Real)l == (Real)r;\n    }\n\n    public static bool operator !=(JAngle l, JAngle r)\n    {\n        return (Real)l != (Real)r;\n    }\n\n    public static bool operator <(JAngle l, JAngle r)\n    {\n        return (Real)l < (Real)r;\n    }\n\n    public static bool operator >(JAngle l, JAngle r)\n    {\n        return (Real)l > (Real)r;\n    }\n\n    public static bool operator >=(JAngle l, JAngle r)\n    {\n        return (Real)l >= (Real)r;\n    }\n\n    public static bool operator <=(JAngle l, JAngle r)\n    {\n        return (Real)l <= (Real)r;\n    }\n\n    public static explicit operator Real(JAngle angle)\n    {\n        return angle.Radian;\n    }\n}"
  },
  {
    "path": "src/Jitter2/LinearMath/JBoundingBox.cs",
    "content": "/*\n * Jitter2 Physics Library\n * (c) Thorben Linneweber and contributors\n * SPDX-License-Identifier: MIT\n */\n\nusing System;\nusing System.Collections.Generic;\nusing System.Runtime.InteropServices;\n\nnamespace Jitter2.LinearMath;\n\n/// <summary>\n/// Represents an axis-aligned bounding box (AABB), a rectangular bounding box whose edges are parallel to the coordinate axes.\n/// </summary>\n[StructLayout(LayoutKind.Explicit, Size = 6 * sizeof(Real))]\npublic struct JBoundingBox(JVector min, JVector max) : IEquatable<JBoundingBox>\n{\n    public const Real Epsilon = (Real)1e-12;\n\n    /// <summary>\n    /// Describes how one bounding box relates to another spatially.\n    /// </summary>\n    public enum ContainmentType\n    {\n        /// <summary>\n        /// The two boxes are completely separated and do not touch or overlap.\n        /// </summary>\n        Disjoint,\n\n        /// <summary>\n        /// The other box is completely inside this box.\n        /// </summary>\n        Contains,\n\n        /// <summary>\n        /// The boxes overlap, but neither completely contains the other.\n        /// </summary>\n        Intersects\n    }\n\n    /// <summary>\n    /// The minimum corner of the bounding box (smallest X, Y, Z coordinates).\n    /// </summary>\n    [FieldOffset(0 * sizeof(Real))]\n    public JVector Min = min;\n\n    /// <summary>\n    /// The maximum corner of the bounding box (largest X, Y, Z coordinates).\n    /// </summary>\n    [FieldOffset(3 * sizeof(Real))]\n    public JVector Max = max;\n\n    /// <summary>\n    /// A bounding box covering the entire valid range of coordinates.\n    /// </summary>\n    public static readonly JBoundingBox LargeBox;\n\n    /// <summary>\n    /// An inverted bounding box initialized with Min > Max, useful for growing a box from scratch.\n    /// </summary>\n    public static readonly JBoundingBox SmallBox;\n\n    static JBoundingBox()\n    {\n        LargeBox.Min = new JVector(Real.MinValue);\n        LargeBox.Max = new JVector(Real.MaxValue);\n        SmallBox.Min = new JVector(Real.MaxValue);\n        SmallBox.Max = new JVector(Real.MinValue);\n    }\n\n    /// <summary>\n    /// Returns a string representation of the <see cref=\"JBoundingBox\"/>.\n    /// </summary>\n    public readonly override string ToString()\n    {\n        return $\"Min={{{Min}}}, Max={{{Max}}}\";\n    }\n\n    // Prefer using CreateTransformed for clarity and to avoid mutations.\n    [Obsolete($\"Use static {nameof(CreateTransformed)} instead.\")]\n    public void Transform(in JMatrix orientation)\n    {\n        JVector halfExtents = (Real)0.5 * (Max - Min);\n        JVector center = (Real)0.5 * (Max + Min);\n\n        JVector.Transform(center, orientation, out center);\n\n        JMatrix.Absolute(orientation, out var abs);\n        JVector.Transform(halfExtents, abs, out halfExtents);\n\n        Max = center + halfExtents;\n        Min = center - halfExtents;\n    }\n\n    /// <summary>\n    /// Creates a new AABB that encloses the original box after it has been rotated by the given orientation matrix.\n    /// </summary>\n    /// <remarks>\n    /// Rotating an AABB usually results in a larger AABB to fit the rotated geometry.\n    /// </remarks>\n    /// <param name=\"box\">The original bounding box.</param>\n    /// <param name=\"orientation\">The rotation matrix to apply.</param>\n    /// <returns>A new AABB enclosing the rotated box.</returns>\n    public static JBoundingBox CreateTransformed(in JBoundingBox box, in JMatrix orientation)\n    {\n        JVector halfExtents = (Real)0.5 * (box.Max - box.Min);\n        JVector center = (Real)0.5 * (box.Max + box.Min);\n\n        JVector.Transform(center, orientation, out center);\n\n        JMatrix.Absolute(orientation, out var abs);\n        JVector.Transform(halfExtents, abs, out halfExtents);\n\n        JBoundingBox result;\n        result.Max = center + halfExtents;\n        result.Min = center - halfExtents;\n\n        return result;\n    }\n\n    private static bool Intersect1D(Real start, Real dir, Real min, Real max,\n        ref Real enter, ref Real exit)\n    {\n        if (dir * dir < Epsilon * Epsilon) return start >= min && start <= max;\n\n        Real t0 = (min - start) / dir;\n        Real t1 = (max - start) / dir;\n\n        if (t0 > t1)\n        {\n            (t0, t1) = (t1, t0);\n        }\n\n        if (t0 > exit || t1 < enter) return false;\n\n        if (t0 > enter) enter = t0;\n        if (t1 < exit) exit = t1;\n        return true;\n    }\n\n    /// <summary>\n    /// Checks if a finite line segment intersects this bounding box.\n    /// </summary>\n    /// <param name=\"origin\">The start point of the segment.</param>\n    /// <param name=\"direction\">The vector from start to end (End = Origin + Direction).</param>\n    /// <returns><c>true</c> if the segment passes through the box; otherwise, <c>false</c>.</returns>\n    public readonly bool SegmentIntersect(in JVector origin, in JVector direction)\n    {\n        Real enter = (Real)0.0, exit = (Real)1.0;\n\n        if (!Intersect1D(origin.X, direction.X, Min.X, Max.X, ref enter, ref exit))\n            return false;\n\n        if (!Intersect1D(origin.Y, direction.Y, Min.Y, Max.Y, ref enter, ref exit))\n            return false;\n\n        if (!Intersect1D(origin.Z, direction.Z, Min.Z, Max.Z, ref enter, ref exit))\n            return false;\n\n        return true;\n    }\n\n    /// <summary>\n    /// Checks if an infinite ray intersects this bounding box.\n    /// </summary>\n    /// <param name=\"origin\">The origin of the ray.</param>\n    /// <param name=\"direction\">The direction of the ray (not necessarily normalized).</param>\n    /// <returns><c>true</c> if the ray intersects the box; otherwise, <c>false</c>.</returns>\n    public readonly bool RayIntersect(in JVector origin, in JVector direction)\n    {\n        Real enter = (Real)0.0, exit = Real.MaxValue;\n\n        if (!Intersect1D(origin.X, direction.X, Min.X, Max.X, ref enter, ref exit))\n            return false;\n\n        if (!Intersect1D(origin.Y, direction.Y, Min.Y, Max.Y, ref enter, ref exit))\n            return false;\n\n        if (!Intersect1D(origin.Z, direction.Z, Min.Z, Max.Z, ref enter, ref exit))\n            return false;\n\n        return true;\n    }\n\n    /// <summary>\n    /// Checks if an infinite ray intersects this bounding box and calculates the entry distance.\n    /// </summary>\n    /// <param name=\"origin\">The origin of the ray.</param>\n    /// <param name=\"direction\">The direction of the ray (not necessarily normalized).</param>\n    /// <param name=\"enter\">Outputs the distance along the direction vector where the ray enters the box. Returns 0 if the origin is inside.</param>\n    /// <returns><c>true</c> if the ray intersects the box; otherwise, <c>false</c>.</returns>\n    public readonly bool RayIntersect(in JVector origin, in JVector direction, out Real enter)\n    {\n        enter = (Real)0.0;\n        Real exit = Real.MaxValue;\n\n        if (!Intersect1D(origin.X, direction.X, Min.X, Max.X, ref enter, ref exit))\n            return false;\n\n        if (!Intersect1D(origin.Y, direction.Y, Min.Y, Max.Y, ref enter, ref exit))\n            return false;\n\n        if (!Intersect1D(origin.Z, direction.Z, Min.Z, Max.Z, ref enter, ref exit))\n            return false;\n\n        return true;\n    }\n\n    /// <summary>\n    /// Determines whether the bounding box contains the specified point.\n    /// </summary>\n    public readonly bool Contains(in JVector point)\n    {\n        return Min.X <= point.X && point.X <= Max.X &&\n               Min.Y <= point.Y && point.Y <= Max.Y &&\n               Min.Z <= point.Z && point.Z <= Max.Z;\n    }\n\n    /// <summary>\n    /// Gets the 8 corners of the bounding box.\n    /// </summary>\n    /// <param name=\"destination\">A span of at least 8 JVectors to hold the corners.</param>\n    public readonly void GetCorners(Span<JVector> destination)\n    {\n        destination[0] = new(Min.X, Max.Y, Max.Z);\n        destination[1] = new(Max.X, Max.Y, Max.Z);\n        destination[2] = new(Max.X, Min.Y, Max.Z);\n        destination[3] = new(Min.X, Min.Y, Max.Z);\n        destination[4] = new(Min.X, Max.Y, Min.Z);\n        destination[5] = new(Max.X, Max.Y, Min.Z);\n        destination[6] = new(Max.X, Min.Y, Min.Z);\n        destination[7] = new(Min.X, Min.Y, Min.Z);\n    }\n\n    // Marked obsolete to guide users toward the preferred static method.\n    [Obsolete($\"Use static {nameof(AddPointInPlace)} instead.\")]\n    public void AddPoint(in JVector point)\n    {\n        JVector.Max(Max, point, out Max);\n        JVector.Min(Min, point, out Min);\n    }\n\n    /// <summary>\n    /// Expands the bounding box to include the specified point.\n    /// </summary>\n    /// <param name=\"box\">The bounding box to expand.</param>\n    /// <param name=\"point\">The point to include.</param>\n    public static void AddPointInPlace(ref JBoundingBox box, in JVector point)\n    {\n        JVector.Max(box.Max, point, out box.Max);\n        JVector.Min(box.Min, point, out box.Min);\n    }\n\n    /// <summary>\n    /// Creates a bounding box that exactly encompasses a collection of points.\n    /// </summary>\n    /// <param name=\"points\">The collection of points to encompass.</param>\n    /// <returns>A bounding box containing all the points.</returns>\n    public static JBoundingBox CreateFromPoints(IEnumerable<JVector> points)\n    {\n        JBoundingBox box = SmallBox;\n\n        foreach (var point in points)\n        {\n            AddPointInPlace(ref box, point);\n        }\n\n        return box;\n    }\n\n\n\n    /// <summary>\n    /// Determines the relationship between this box and another box.\n    /// </summary>\n    /// <param name=\"box\">The other bounding box to test.</param>\n    /// <returns>\n    /// <see cref=\"ContainmentType.Disjoint\"/> if they do not touch.<br/>\n    /// <see cref=\"ContainmentType.Contains\"/> if <paramref name=\"box\"/> is strictly inside this box.<br/>\n    /// <see cref=\"ContainmentType.Intersects\"/> if they overlap but one does not strictly contain the other.\n    /// </returns>\n    public readonly ContainmentType Contains(in JBoundingBox box)\n    {\n        ContainmentType result = ContainmentType.Disjoint;\n        if (Max.X >= box.Min.X && Min.X <= box.Max.X && Max.Y >= box.Min.Y && Min.Y <= box.Max.Y &&\n            Max.Z >= box.Min.Z && Min.Z <= box.Max.Z)\n        {\n            result = Min.X <= box.Min.X && box.Max.X <= Max.X && Min.Y <= box.Min.Y && box.Max.Y <= Max.Y &&\n                     Min.Z <= box.Min.Z && box.Max.Z <= Max.Z\n                ? ContainmentType.Contains\n                : ContainmentType.Intersects;\n        }\n\n        return result;\n    }\n\n    /// <summary>\n    /// Determines whether the two boxes intersect or overlap.\n    /// </summary>\n    /// <returns><c>true</c> if the boxes overlap; <c>false</c> if they are disjoint.</returns>\n    [Obsolete($\"Use !{nameof(Disjoint)} instead.\")]\n    public static bool NotDisjoint(in JBoundingBox left, in JBoundingBox right)\n    {\n        return left.Max.X >= right.Min.X && left.Min.X <= right.Max.X && left.Max.Y >= right.Min.Y && left.Min.Y <= right.Max.Y &&\n               left.Max.Z >= right.Min.Z && left.Min.Z <= right.Max.Z;\n    }\n\n    /// <summary>\n    /// Determines whether the two boxes are completely separated (disjoint).\n    /// </summary>\n    /// <param name=\"left\">The first bounding box.</param>\n    /// <param name=\"right\">The second bounding box.</param>\n    /// <returns><see langword=\"true\"/> if there is a gap between the boxes on at least one axis; otherwise, <see langword=\"false\"/>.</returns>\n    public static bool Disjoint(in JBoundingBox left, in JBoundingBox right)\n    {\n        return left.Max.X < right.Min.X || left.Min.X > right.Max.X || left.Max.Y < right.Min.Y || left.Min.Y > right.Max.Y ||\n               left.Max.Z < right.Min.Z || left.Min.Z > right.Max.Z;\n    }\n\n    /// <summary>\n    /// Determines whether the <paramref name=\"outer\"/> box completely contains the <paramref name=\"inner\"/> box.\n    /// </summary>\n    /// <param name=\"outer\">The outer bounding box.</param>\n    /// <param name=\"inner\">The inner bounding box to test.</param>\n    /// <returns><see langword=\"true\"/> if <paramref name=\"inner\"/> is entirely within the boundaries of <paramref name=\"outer\"/>; otherwise, <see langword=\"false\"/>.</returns>\n    public static bool Contains(in JBoundingBox outer, in JBoundingBox inner)\n    {\n        return outer.Min.X <= inner.Min.X && outer.Max.X >= inner.Max.X && outer.Min.Y <= inner.Min.Y && outer.Max.Y >= inner.Max.Y &&\n               outer.Min.Z <= inner.Min.Z && outer.Max.Z >= inner.Max.Z;\n    }\n\n    /// <summary>\n    /// Determines whether the <paramref name=\"outer\"/> box completely contains the <paramref name=\"inner\"/> box.\n    /// </summary>\n    /// <remarks>This is an alias for <see cref=\"Contains(in JBoundingBox, in JBoundingBox)\"/>.</remarks>\n    [Obsolete($\"Use {nameof(Contains)} instead.\")]\n    public static bool Encompasses(in JBoundingBox outer, in JBoundingBox inner)\n    {\n        return outer.Min.X <= inner.Min.X && outer.Max.X >= inner.Max.X && outer.Min.Y <= inner.Min.Y && outer.Max.Y >= inner.Max.Y &&\n               outer.Min.Z <= inner.Min.Z && outer.Max.Z >= inner.Max.Z;\n    }\n\n    /// <summary>\n    /// Creates a new bounding box that is the union of two other bounding boxes.\n    /// </summary>\n    /// <param name=\"original\">The first bounding box.</param>\n    /// <param name=\"additional\">The second bounding box.</param>\n    /// <returns>A bounding box encompassing both inputs.</returns>\n    public static JBoundingBox CreateMerged(in JBoundingBox original, in JBoundingBox additional)\n    {\n        CreateMerged(original, additional, out JBoundingBox result);\n        return result;\n    }\n\n    /// <summary>\n    /// Creates a new bounding box that is the union of two other bounding boxes.\n    /// </summary>\n    /// <param name=\"original\">The first bounding box.</param>\n    /// <param name=\"additional\">The second bounding box.</param>\n    /// <param name=\"result\">Output: A bounding box encompassing both inputs.</param>\n    public static void CreateMerged(in JBoundingBox original, in JBoundingBox additional, out JBoundingBox result)\n    {\n        JVector.Min(original.Min, additional.Min, out result.Min);\n        JVector.Max(original.Max, additional.Max, out result.Max);\n    }\n\n    /// <summary>\n    /// Gets the center point of the bounding box.\n    /// </summary>\n    public readonly JVector Center => (Min + Max) * ((Real)(1.0 / 2.0));\n\n    /// <summary>\n    /// Calculates the volume of the bounding box.\n    /// </summary>\n    public readonly Real GetVolume()\n    {\n        JVector len = Max - Min;\n        return len.X * len.Y * len.Z;\n    }\n\n    /// <summary>\n    /// Calculates the surface area of the bounding box.\n    /// </summary>\n    public readonly Real GetSurfaceArea()\n    {\n        JVector len = Max - Min;\n        return (Real)2.0 * (len.X * len.Y + len.Y * len.Z + len.Z * len.X);\n    }\n\n    public readonly bool Equals(JBoundingBox other)\n    {\n        return Min.Equals(other.Min) && Max.Equals(other.Max);\n    }\n\n    public readonly override bool Equals(object? obj)\n    {\n        return obj is JBoundingBox other && Equals(other);\n    }\n\n    public readonly override int GetHashCode() => HashCode.Combine(Min, Max);\n\n    public static bool operator ==(JBoundingBox left, JBoundingBox right)\n    {\n        return left.Equals(right);\n    }\n\n    public static bool operator !=(JBoundingBox left, JBoundingBox right)\n    {\n        return !(left == right);\n    }\n}"
  },
  {
    "path": "src/Jitter2/LinearMath/JMatrix.cs",
    "content": "/*\n * Jitter2 Physics Library\n * (c) Thorben Linneweber and contributors\n * SPDX-License-Identifier: MIT\n */\n\nusing System;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\nnamespace Jitter2.LinearMath;\n\n/// <summary>\n/// Represents a 3x3 matrix with components of type <see cref=\"Real\"/>.\n/// </summary>\n[StructLayout(LayoutKind.Explicit, Size = 9 * sizeof(Real))]\npublic struct JMatrix(\n    Real m11, Real m12, Real m13,\n    Real m21, Real m22, Real m23,\n    Real m31, Real m32, Real m33) : IEquatable<JMatrix>\n{\n    [FieldOffset(0 * sizeof(Real))] public Real M11 = m11;\n    [FieldOffset(1 * sizeof(Real))] public Real M21 = m21;\n    [FieldOffset(2 * sizeof(Real))] public Real M31 = m31;\n    [FieldOffset(3 * sizeof(Real))] public Real M12 = m12;\n    [FieldOffset(4 * sizeof(Real))] public Real M22 = m22;\n    [FieldOffset(5 * sizeof(Real))] public Real M32 = m32;\n    [FieldOffset(6 * sizeof(Real))] public Real M13 = m13;\n    [FieldOffset(7 * sizeof(Real))] public Real M23 = m23;\n    [FieldOffset(8 * sizeof(Real))] public Real M33 = m33;\n\n    /// <summary>\n    /// The identity matrix.\n    /// </summary>\n    public static readonly JMatrix Identity;\n\n    /// <summary>\n    /// The zero matrix.\n    /// </summary>\n    public static readonly JMatrix Zero;\n\n    static JMatrix()\n    {\n        Zero = new JMatrix();\n\n        Identity = new JMatrix\n        {\n            M11 = (Real)1.0,\n            M22 = (Real)1.0,\n            M33 = (Real)1.0\n        };\n    }\n\n    /// <summary>\n    /// Creates a matrix from three column vectors.\n    /// </summary>\n    /// <param name=\"col1\">The first column vector.</param>\n    /// <param name=\"col2\">The second column vector.</param>\n    /// <param name=\"col3\">The third column vector.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static JMatrix FromColumns(in JVector col1, in JVector col2, in JVector col3)\n    {\n        Unsafe.SkipInit(out JMatrix res);\n        res.UnsafeGet(0) = col1;\n        res.UnsafeGet(1) = col2;\n        res.UnsafeGet(2) = col3;\n        return res;\n    }\n\n    /// <summary>\n    /// Gets a reference to a column vector by index using unsafe pointer arithmetic.\n    /// </summary>\n    /// <param name=\"index\">The zero-based index of the column (0, 1, or 2).</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public unsafe ref JVector UnsafeGet(int index)\n    {\n        JVector* ptr = (JVector*)Unsafe.AsPointer(ref this);\n        return ref ptr[index];\n    }\n\n    /// <summary>\n    /// Gets a column vector by index.\n    /// </summary>\n    /// <param name=\"index\">The zero-based index of the column (0, 1, or 2).</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public unsafe JVector GetColumn(int index)\n    {\n        fixed (Real* ptr = &M11)\n        {\n            JVector* vptr = (JVector*)ptr;\n            return vptr[index];\n        }\n    }\n\n    /// <summary>\n    /// Multiplies two matrices.\n    /// </summary>\n    /// <param name=\"matrix1\">The first matrix.</param>\n    /// <param name=\"matrix2\">The second matrix.</param>\n    /// <returns>The product of the two matrices.</returns>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static JMatrix Multiply(in JMatrix matrix1, in JMatrix matrix2)\n    {\n        Multiply(matrix1, matrix2, out JMatrix result);\n        return result;\n    }\n\n    /// <summary>\n    /// Calculates <c>matrix1 * transpose(matrix2)</c>.\n    /// </summary>\n    /// <param name=\"matrix1\">The first matrix.</param>\n    /// <param name=\"matrix2\">The second matrix (which will be transposed during multiplication).</param>\n    /// <returns>The result of the multiplication.</returns>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static JMatrix MultiplyTransposed(in JMatrix matrix1, in JMatrix matrix2)\n    {\n        MultiplyTransposed(matrix1, matrix2, out JMatrix result);\n        return result;\n    }\n\n    /// <summary>\n    /// Calculates <c>transpose(matrix1) * matrix2</c>.\n    /// </summary>\n    /// <param name=\"matrix1\">The first matrix (which will be transposed during multiplication).</param>\n    /// <param name=\"matrix2\">The second matrix.</param>\n    /// <returns>The result of the multiplication.</returns>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static JMatrix TransposedMultiply(in JMatrix matrix1, in JMatrix matrix2)\n    {\n        TransposedMultiply(matrix1, matrix2, out JMatrix result);\n        return result;\n    }\n\n    /// <summary>\n    /// Creates a rotation matrix from an axis and an angle.\n    /// </summary>\n    /// <param name=\"axis\">The axis to rotate around.</param>\n    /// <param name=\"angle\">The angle of rotation in radians.</param>\n    /// <returns>The rotation matrix.</returns>\n    public static JMatrix CreateRotationMatrix(JVector axis, Real angle)\n    {\n        (Real s, Real c) = StableMath.SinCos(angle / (Real)2.0);\n        axis *= s;\n        JQuaternion jq = new(axis.X, axis.Y, axis.Z, c);\n        CreateFromQuaternion(in jq, out JMatrix result);\n        return result;\n    }\n\n    /// <summary>\n    /// Multiplies two matrices.\n    /// </summary>\n    /// <param name=\"matrix1\">The first matrix.</param>\n    /// <param name=\"matrix2\">The second matrix.</param>\n    /// <param name=\"result\">Output: The product of the two matrices.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static void Multiply(in JMatrix matrix1, in JMatrix matrix2, out JMatrix result)\n    {\n        Real num0 = matrix1.M11 * matrix2.M11 + matrix1.M12 * matrix2.M21 + matrix1.M13 * matrix2.M31;\n        Real num1 = matrix1.M11 * matrix2.M12 + matrix1.M12 * matrix2.M22 + matrix1.M13 * matrix2.M32;\n        Real num2 = matrix1.M11 * matrix2.M13 + matrix1.M12 * matrix2.M23 + matrix1.M13 * matrix2.M33;\n        Real num3 = matrix1.M21 * matrix2.M11 + matrix1.M22 * matrix2.M21 + matrix1.M23 * matrix2.M31;\n        Real num4 = matrix1.M21 * matrix2.M12 + matrix1.M22 * matrix2.M22 + matrix1.M23 * matrix2.M32;\n        Real num5 = matrix1.M21 * matrix2.M13 + matrix1.M22 * matrix2.M23 + matrix1.M23 * matrix2.M33;\n        Real num6 = matrix1.M31 * matrix2.M11 + matrix1.M32 * matrix2.M21 + matrix1.M33 * matrix2.M31;\n        Real num7 = matrix1.M31 * matrix2.M12 + matrix1.M32 * matrix2.M22 + matrix1.M33 * matrix2.M32;\n        Real num8 = matrix1.M31 * matrix2.M13 + matrix1.M32 * matrix2.M23 + matrix1.M33 * matrix2.M33;\n\n        result.M11 = num0;\n        result.M12 = num1;\n        result.M13 = num2;\n        result.M21 = num3;\n        result.M22 = num4;\n        result.M23 = num5;\n        result.M31 = num6;\n        result.M32 = num7;\n        result.M33 = num8;\n    }\n\n    /// <summary>\n    /// Adds two matrices.\n    /// </summary>\n    /// <param name=\"matrix1\">The first matrix.</param>\n    /// <param name=\"matrix2\">The second matrix.</param>\n    /// <returns>The sum of the two matrices.</returns>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static JMatrix Add(JMatrix matrix1, JMatrix matrix2)\n    {\n        Add(matrix1, matrix2, out JMatrix result);\n        return result;\n    }\n\n    /// <summary>\n    /// Calculates <c>matrix1 * matrix2ᵀ</c> (multiplying matrix1 by the transpose of matrix2).\n    /// </summary>\n    /// <param name=\"matrix1\">The first matrix.</param>\n    /// <param name=\"matrix2\">The second matrix (transposed during operation).</param>\n    /// <param name=\"result\">Output: The result of the multiplication.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static void MultiplyTransposed(in JMatrix matrix1, in JMatrix matrix2, out JMatrix result)\n    {\n        Real num0 = matrix1.M11 * matrix2.M11 + matrix1.M12 * matrix2.M12 + matrix1.M13 * matrix2.M13;\n        Real num1 = matrix1.M11 * matrix2.M21 + matrix1.M12 * matrix2.M22 + matrix1.M13 * matrix2.M23;\n        Real num2 = matrix1.M11 * matrix2.M31 + matrix1.M12 * matrix2.M32 + matrix1.M13 * matrix2.M33;\n        Real num3 = matrix1.M21 * matrix2.M11 + matrix1.M22 * matrix2.M12 + matrix1.M23 * matrix2.M13;\n        Real num4 = matrix1.M21 * matrix2.M21 + matrix1.M22 * matrix2.M22 + matrix1.M23 * matrix2.M23;\n        Real num5 = matrix1.M21 * matrix2.M31 + matrix1.M22 * matrix2.M32 + matrix1.M23 * matrix2.M33;\n        Real num6 = matrix1.M31 * matrix2.M11 + matrix1.M32 * matrix2.M12 + matrix1.M33 * matrix2.M13;\n        Real num7 = matrix1.M31 * matrix2.M21 + matrix1.M32 * matrix2.M22 + matrix1.M33 * matrix2.M23;\n        Real num8 = matrix1.M31 * matrix2.M31 + matrix1.M32 * matrix2.M32 + matrix1.M33 * matrix2.M33;\n\n        result.M11 = num0;\n        result.M12 = num1;\n        result.M13 = num2;\n        result.M21 = num3;\n        result.M22 = num4;\n        result.M23 = num5;\n        result.M31 = num6;\n        result.M32 = num7;\n        result.M33 = num8;\n    }\n\n    /// <summary>\n    /// Creates a rotation matrix around the X-axis.\n    /// </summary>\n    /// <param name=\"radians\">The angle of rotation in radians.</param>\n    /// <returns>The rotation matrix.</returns>\n    public static JMatrix CreateRotationX(Real radians)\n    {\n        JMatrix result = Identity;\n\n        (Real s, Real c) = StableMath.SinCos(radians);\n\n        // [  1  0  0  ]\n        // [  0  c -s  ]\n        // [  0  s  c  ]\n        result.M22 = c;\n        result.M23 = -s;\n        result.M32 = s;\n        result.M33 = c;\n\n        return result;\n    }\n\n    /// <summary>\n    /// Creates a rotation matrix around the Y-axis.\n    /// </summary>\n    /// <param name=\"radians\">The angle of rotation in radians.</param>\n    /// <returns>The rotation matrix.</returns>\n    public static JMatrix CreateRotationY(Real radians)\n    {\n        JMatrix result = Identity;\n\n        (Real s, Real c) = StableMath.SinCos(radians);\n\n        // [  c  0  s  ]\n        // [  0  1  0  ]\n        // [ -s  0  c  ]\n        result.M11 = c;\n        result.M13 = s;\n        result.M31 = -s;\n        result.M33 = c;\n\n        return result;\n    }\n\n    /// <summary>\n    /// Creates a rotation matrix around the Z-axis.\n    /// </summary>\n    /// <param name=\"radians\">The angle of rotation in radians.</param>\n    /// <returns>The rotation matrix.</returns>\n    public static JMatrix CreateRotationZ(Real radians)\n    {\n        JMatrix result = Identity;\n\n        (Real s, Real c) = StableMath.SinCos(radians);\n\n        // [  c -s  0  ]\n        // [  s  c  0  ]\n        // [  0  0  1  ]\n        result.M11 = c;\n        result.M12 = -s;\n        result.M21 = s;\n        result.M22 = c;\n\n        return result;\n    }\n\n    /// <summary>\n    /// Creates a scaling matrix.\n    /// </summary>\n    /// <param name=\"scale\">The scaling vector.</param>\n    /// <returns>The scaling matrix.</returns>\n    public static JMatrix CreateScale(in JVector scale)\n    {\n        JMatrix result = Zero;\n\n        result.M11 = scale.X;\n        result.M22 = scale.Y;\n        result.M33 = scale.Z;\n\n        return result;\n    }\n\n    /// <summary>\n    /// Creates a scaling matrix.\n    /// </summary>\n    /// <param name=\"x\">Scaling factor on the X-axis.</param>\n    /// <param name=\"y\">Scaling factor on the Y-axis.</param>\n    /// <param name=\"z\">Scaling factor on the Z-axis.</param>\n    /// <returns>The scaling matrix.</returns>\n    public static JMatrix CreateScale(Real x, Real y, Real z)\n    {\n        return CreateScale(new JVector(x, y, z));\n    }\n\n    /// <summary>\n    /// Calculates <c>matrix1ᵀ * matrix2</c> (multiplying the transpose of matrix1 by matrix2).\n    /// </summary>\n    /// <param name=\"matrix1\">The first matrix (transposed during operation).</param>\n    /// <param name=\"matrix2\">The second matrix.</param>\n    /// <param name=\"result\">Output: The result of the multiplication.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static void TransposedMultiply(in JMatrix matrix1, in JMatrix matrix2, out JMatrix result)\n    {\n        Real num0 = matrix1.M11 * matrix2.M11 + matrix1.M21 * matrix2.M21 + matrix1.M31 * matrix2.M31;\n        Real num1 = matrix1.M11 * matrix2.M12 + matrix1.M21 * matrix2.M22 + matrix1.M31 * matrix2.M32;\n        Real num2 = matrix1.M11 * matrix2.M13 + matrix1.M21 * matrix2.M23 + matrix1.M31 * matrix2.M33;\n        Real num3 = matrix1.M12 * matrix2.M11 + matrix1.M22 * matrix2.M21 + matrix1.M32 * matrix2.M31;\n        Real num4 = matrix1.M12 * matrix2.M12 + matrix1.M22 * matrix2.M22 + matrix1.M32 * matrix2.M32;\n        Real num5 = matrix1.M12 * matrix2.M13 + matrix1.M22 * matrix2.M23 + matrix1.M32 * matrix2.M33;\n        Real num6 = matrix1.M13 * matrix2.M11 + matrix1.M23 * matrix2.M21 + matrix1.M33 * matrix2.M31;\n        Real num7 = matrix1.M13 * matrix2.M12 + matrix1.M23 * matrix2.M22 + matrix1.M33 * matrix2.M32;\n        Real num8 = matrix1.M13 * matrix2.M13 + matrix1.M23 * matrix2.M23 + matrix1.M33 * matrix2.M33;\n\n        result.M11 = num0;\n        result.M12 = num1;\n        result.M13 = num2;\n        result.M21 = num3;\n        result.M22 = num4;\n        result.M23 = num5;\n        result.M31 = num6;\n        result.M32 = num7;\n        result.M33 = num8;\n    }\n\n    /// <summary>\n    /// Adds two matrices component-wise.\n    /// </summary>\n    /// <param name=\"matrix1\">The first matrix.</param>\n    /// <param name=\"matrix2\">The second matrix.</param>\n    /// <param name=\"result\">Output: The sum of the two matrices.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static void Add(in JMatrix matrix1, in JMatrix matrix2, out JMatrix result)\n    {\n        result.M11 = matrix1.M11 + matrix2.M11;\n        result.M12 = matrix1.M12 + matrix2.M12;\n        result.M13 = matrix1.M13 + matrix2.M13;\n        result.M21 = matrix1.M21 + matrix2.M21;\n        result.M22 = matrix1.M22 + matrix2.M22;\n        result.M23 = matrix1.M23 + matrix2.M23;\n        result.M31 = matrix1.M31 + matrix2.M31;\n        result.M32 = matrix1.M32 + matrix2.M32;\n        result.M33 = matrix1.M33 + matrix2.M33;\n    }\n\n    /// <summary>\n    /// Subtracts the second matrix from the first component-wise.\n    /// </summary>\n    /// <param name=\"matrix1\">The first matrix.</param>\n    /// <param name=\"matrix2\">The second matrix.</param>\n    /// <param name=\"result\">Output: The difference of the two matrices.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static void Subtract(in JMatrix matrix1, in JMatrix matrix2, out JMatrix result)\n    {\n        result.M11 = matrix1.M11 - matrix2.M11;\n        result.M12 = matrix1.M12 - matrix2.M12;\n        result.M13 = matrix1.M13 - matrix2.M13;\n        result.M21 = matrix1.M21 - matrix2.M21;\n        result.M22 = matrix1.M22 - matrix2.M22;\n        result.M23 = matrix1.M23 - matrix2.M23;\n        result.M31 = matrix1.M31 - matrix2.M31;\n        result.M32 = matrix1.M32 - matrix2.M32;\n        result.M33 = matrix1.M33 - matrix2.M33;\n    }\n\n    /// <summary>\n    /// Calculates the determinant of the matrix.\n    /// </summary>\n    /// <returns>The determinant.</returns>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public readonly Real Determinant()\n    {\n        return M11 * M22 * M33 + M12 * M23 * M31 + M13 * M21 * M32 -\n               M31 * M22 * M13 - M32 * M23 * M11 - M33 * M21 * M12;\n    }\n\n    /// <summary>\n    /// Calculates the inverse of the matrix.\n    /// </summary>\n    /// <param name=\"matrix\">The matrix to invert.</param>\n    /// <param name=\"result\">Output: The inverted matrix, or a zero matrix if the determinant is zero.</param>\n    /// <returns><c>true</c> if the matrix can be inverted; otherwise, <c>false</c>.</returns>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static bool Inverse(in JMatrix matrix, out JMatrix result)\n    {\n        Real idet = (Real)1.0 / matrix.Determinant();\n\n        if (!Real.IsNormal(idet))\n        {\n            result = new JMatrix();\n            return false;\n        }\n\n        Real num11 = matrix.M22 * matrix.M33 - matrix.M23 * matrix.M32;\n        Real num12 = matrix.M13 * matrix.M32 - matrix.M12 * matrix.M33;\n        Real num13 = matrix.M12 * matrix.M23 - matrix.M22 * matrix.M13;\n\n        Real num21 = matrix.M23 * matrix.M31 - matrix.M33 * matrix.M21;\n        Real num22 = matrix.M11 * matrix.M33 - matrix.M31 * matrix.M13;\n        Real num23 = matrix.M13 * matrix.M21 - matrix.M23 * matrix.M11;\n\n        Real num31 = matrix.M21 * matrix.M32 - matrix.M31 * matrix.M22;\n        Real num32 = matrix.M12 * matrix.M31 - matrix.M32 * matrix.M11;\n        Real num33 = matrix.M11 * matrix.M22 - matrix.M21 * matrix.M12;\n\n        result.M11 = num11 * idet;\n        result.M12 = num12 * idet;\n        result.M13 = num13 * idet;\n        result.M21 = num21 * idet;\n        result.M22 = num22 * idet;\n        result.M23 = num23 * idet;\n        result.M31 = num31 * idet;\n        result.M32 = num32 * idet;\n        result.M33 = num33 * idet;\n\n        return true;\n    }\n\n    /// <summary>\n    /// Multiplies a matrix by a scalar factor.\n    /// </summary>\n    /// <param name=\"matrix1\">The matrix.</param>\n    /// <param name=\"scaleFactor\">The scalar factor.</param>\n    /// <returns>The scaled matrix.</returns>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static JMatrix Multiply(JMatrix matrix1, Real scaleFactor)\n    {\n        Multiply(in matrix1, scaleFactor, out JMatrix result);\n        return result;\n    }\n\n    /// <summary>\n    /// Multiplies a matrix by a scalar factor.\n    /// </summary>\n    /// <param name=\"matrix1\">The matrix.</param>\n    /// <param name=\"scaleFactor\">The scalar factor.</param>\n    /// <param name=\"result\">Output: The scaled matrix.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static void Multiply(in JMatrix matrix1, Real scaleFactor, out JMatrix result)\n    {\n        Real num = scaleFactor;\n        result.M11 = matrix1.M11 * num;\n        result.M12 = matrix1.M12 * num;\n        result.M13 = matrix1.M13 * num;\n        result.M21 = matrix1.M21 * num;\n        result.M22 = matrix1.M22 * num;\n        result.M23 = matrix1.M23 * num;\n        result.M31 = matrix1.M31 * num;\n        result.M32 = matrix1.M32 * num;\n        result.M33 = matrix1.M33 * num;\n    }\n\n    /// <summary>\n    /// Creates a rotation matrix from a quaternion.\n    /// </summary>\n    /// <param name=\"quaternion\">The quaternion representing the rotation.</param>\n    /// <returns>The rotation matrix.</returns>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static JMatrix CreateFromQuaternion(JQuaternion quaternion)\n    {\n        CreateFromQuaternion(quaternion, out JMatrix result);\n        return result;\n    }\n\n    /// <summary>\n    /// Creates a matrix where each component is the absolute value of the input matrix component.\n    /// </summary>\n    /// <param name=\"matrix\">The input matrix.</param>\n    /// <param name=\"result\">Output: The absolute matrix.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static void Absolute(in JMatrix matrix, out JMatrix result)\n    {\n        result.M11 = Math.Abs(matrix.M11);\n        result.M12 = Math.Abs(matrix.M12);\n        result.M13 = Math.Abs(matrix.M13);\n        result.M21 = Math.Abs(matrix.M21);\n        result.M22 = Math.Abs(matrix.M22);\n        result.M23 = Math.Abs(matrix.M23);\n        result.M31 = Math.Abs(matrix.M31);\n        result.M32 = Math.Abs(matrix.M32);\n        result.M33 = Math.Abs(matrix.M33);\n    }\n\n    /// <summary>\n    /// Creates a rotation matrix from a quaternion.\n    /// </summary>\n    /// <param name=\"quaternion\">The quaternion representing the rotation.</param>\n    /// <param name=\"result\">Output: The rotation matrix.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static void CreateFromQuaternion(in JQuaternion quaternion, out JMatrix result)\n    {\n        Real r = quaternion.W;\n        Real i = quaternion.X;\n        Real j = quaternion.Y;\n        Real k = quaternion.Z;\n\n        result.M11 = (Real)1.0 - (Real)2.0 * (j * j + k * k);\n        result.M12 = (Real)2.0 * (i * j - k * r);\n        result.M13 = (Real)2.0 * (i * k + j * r);\n        result.M21 = (Real)2.0 * (i * j + k * r);\n        result.M22 = (Real)1.0 - (Real)2.0 * (i * i + k * k);\n        result.M23 = (Real)2.0 * (j * k - i * r);\n        result.M31 = (Real)2.0 * (i * k - j * r);\n        result.M32 = (Real)2.0 * (j * k + i * r);\n        result.M33 = (Real)1.0 - (Real)2.0 * (i * i + j * j);\n    }\n\n    /// <summary>\n    /// Transposes a matrix.\n    /// </summary>\n    /// <param name=\"matrix\">The matrix to transpose.</param>\n    /// <returns>The transposed matrix.</returns>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static JMatrix Transpose(in JMatrix matrix)\n    {\n        Transpose(in matrix, out JMatrix result);\n        return result;\n    }\n\n    /// <summary>\n    /// Creates a skew-symmetric matrix from a vector, representing the cross product operation.\n    /// </summary>\n    /// <remarks>\n    /// Result is equivalent to:\n    /// <code>\n    /// [  0  -z   y ]\n    /// [  z   0  -x ]\n    /// [ -y   x   0 ]\n    /// </code>\n    /// </remarks>\n    /// <param name=\"vec\">The vector.</param>\n    /// <returns>The skew-symmetric matrix.</returns>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static JMatrix CreateCrossProduct(in JVector vec)\n    {\n        return new JMatrix(0, -vec.Z, vec.Y, vec.Z, 0, -vec.X, -vec.Y, vec.X, 0);\n    }\n\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    private static void Transpose(in JMatrix matrix, out JMatrix result)\n    {\n        result.M11 = matrix.M11;\n        result.M12 = matrix.M21;\n        result.M13 = matrix.M31;\n        result.M21 = matrix.M12;\n        result.M22 = matrix.M22;\n        result.M23 = matrix.M32;\n        result.M31 = matrix.M13;\n        result.M32 = matrix.M23;\n        result.M33 = matrix.M33;\n    }\n\n    /// <summary>\n    /// Multiplies two matrices.\n    /// </summary>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static JMatrix operator *(in JMatrix matrix1, in JMatrix matrix2)\n    {\n        JMatrix result;\n        result.M11 = matrix1.M11 * matrix2.M11 + matrix1.M12 * matrix2.M21 + matrix1.M13 * matrix2.M31;\n        result.M12 = matrix1.M11 * matrix2.M12 + matrix1.M12 * matrix2.M22 + matrix1.M13 * matrix2.M32;\n        result.M13 = matrix1.M11 * matrix2.M13 + matrix1.M12 * matrix2.M23 + matrix1.M13 * matrix2.M33;\n        result.M21 = matrix1.M21 * matrix2.M11 + matrix1.M22 * matrix2.M21 + matrix1.M23 * matrix2.M31;\n        result.M22 = matrix1.M21 * matrix2.M12 + matrix1.M22 * matrix2.M22 + matrix1.M23 * matrix2.M32;\n        result.M23 = matrix1.M21 * matrix2.M13 + matrix1.M22 * matrix2.M23 + matrix1.M23 * matrix2.M33;\n        result.M31 = matrix1.M31 * matrix2.M11 + matrix1.M32 * matrix2.M21 + matrix1.M33 * matrix2.M31;\n        result.M32 = matrix1.M31 * matrix2.M12 + matrix1.M32 * matrix2.M22 + matrix1.M33 * matrix2.M32;\n        result.M33 = matrix1.M31 * matrix2.M13 + matrix1.M32 * matrix2.M23 + matrix1.M33 * matrix2.M33;\n        return result;\n    }\n\n    /// <summary>\n    /// Calculates the trace (sum of diagonal elements) of the matrix.\n    /// </summary>\n    /// <returns>The trace of the matrix.</returns>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public readonly Real Trace()\n    {\n        return M11 + M22 + M33;\n    }\n\n    /// <summary>\n    /// Scales a matrix by a factor.\n    /// </summary>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static JMatrix operator *(Real factor, in JMatrix matrix)\n    {\n        Multiply(matrix, factor, out JMatrix result);\n        return result;\n    }\n\n    /// <summary>\n    /// Scales a matrix by a factor.\n    /// </summary>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static JMatrix operator *(in JMatrix matrix, Real factor)\n    {\n        Multiply(matrix, factor, out JMatrix result);\n        return result;\n    }\n\n    /// <summary>\n    /// Adds two matrices.\n    /// </summary>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static JMatrix operator +(in JMatrix value1, in JMatrix value2)\n    {\n        Add(value1, value2, out JMatrix result);\n        return result;\n    }\n\n    /// <summary>\n    /// Subtracts the second matrix from the first.\n    /// </summary>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static JMatrix operator -(in JMatrix value1, in JMatrix value2)\n    {\n        Subtract(value1, value2, out JMatrix result);\n        return result;\n    }\n\n    public readonly bool Equals(JMatrix other)\n    {\n        return M11.Equals(other.M11) && M21.Equals(other.M21) &&\n               M31.Equals(other.M31) && M12.Equals(other.M12) &&\n               M22.Equals(other.M22) && M32.Equals(other.M32) &&\n               M13.Equals(other.M13) && M23.Equals(other.M23) &&\n               M33.Equals(other.M33);\n    }\n\n    public readonly override string ToString()\n    {\n        return $\"M11={M11:F6}, M12={M12:F6}, M13={M13:F6}, \" +\n               $\"M21={M21:F6}, M22={M22:F6}, M23={M23:F6}, \" +\n               $\"M31={M31:F6}, M32={M32:F6}, M33={M33:F6}\";\n    }\n\n    public readonly override bool Equals(object? obj)\n    {\n        return obj is JMatrix other && Equals(other);\n    }\n\n    public readonly override int GetHashCode()\n    {\n        var hc = new HashCode();\n        hc.Add(M11); hc.Add(M21); hc.Add(M31);\n        hc.Add(M12); hc.Add(M22); hc.Add(M32);\n        hc.Add(M13); hc.Add(M23); hc.Add(M33);\n        return hc.ToHashCode();\n    }\n\n    public static bool operator ==(JMatrix left, JMatrix right)\n    {\n        return left.Equals(right);\n    }\n\n    public static bool operator !=(JMatrix left, JMatrix right)\n    {\n        return !(left == right);\n    }\n}"
  },
  {
    "path": "src/Jitter2/LinearMath/JQuaternion.cs",
    "content": "/*\n * Jitter2 Physics Library\n * (c) Thorben Linneweber and contributors\n * SPDX-License-Identifier: MIT\n */\n\nusing System;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\nnamespace Jitter2.LinearMath;\n\n/// <summary>\n/// A structure representing a Quaternion: <c>Q = x*i + y*j + z*k + w</c>.\n/// <br/>\n/// Uses the Hamilton convention where <c>i² = j² = k² = ijk = -1</c>.\n/// </summary>\n[StructLayout(LayoutKind.Explicit, Size = 4 * sizeof(Real))]\npublic partial struct JQuaternion(Real x, Real y, Real z, Real w) : IEquatable<JQuaternion>\n{\n    [FieldOffset(0 * sizeof(Real))] public Real X = x;\n    [FieldOffset(1 * sizeof(Real))] public Real Y = y;\n    [FieldOffset(2 * sizeof(Real))] public Real Z = z;\n    [FieldOffset(3 * sizeof(Real))] public Real W = w;\n\n    /// <summary>\n    /// Gets the vector part <c>(x, y, z)</c> of the quaternion.\n    /// </summary>\n    public JVector Vector\n    {\n        [MethodImpl(MethodImplOptions.AggressiveInlining)]\n        get => Unsafe.As<JQuaternion, JVector>(ref this);\n    }\n\n    /// <summary>\n    /// Gets the scalar part <c>(w)</c> of the quaternion.\n    /// </summary>\n    public Real Scalar\n    {\n        [MethodImpl(MethodImplOptions.AggressiveInlining)]\n        get => W;\n    }\n\n    /// <summary>\n    /// Gets the identity quaternion <c>(0, 0, 0, 1)</c>.\n    /// </summary>\n    public static JQuaternion Identity => new(0, 0, 0, 1);\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"JQuaternion\"/> struct.\n    /// </summary>\n    /// <param name=\"w\">The scalar (W) component.</param>\n    /// <param name=\"v\">The vector (X, Y, Z) component.</param>\n    public JQuaternion(Real w, in JVector v) : this(v.X, v.Y, v.Z, w)\n    {\n    }\n\n    /// <summary>\n    /// Adds two quaternions component-wise.\n    /// </summary>\n    /// <param name=\"quaternion1\">The first quaternion.</param>\n    /// <param name=\"quaternion2\">The second quaternion.</param>\n    /// <returns>The sum of the two quaternions.</returns>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static JQuaternion Add(in JQuaternion quaternion1, in JQuaternion quaternion2)\n    {\n        Add(in quaternion1, in quaternion2, out JQuaternion result);\n        return result;\n    }\n\n    /// <summary>\n    /// Creates a quaternion that rotates the unit vector <paramref name=\"from\"/> into\n    /// the unit vector <paramref name=\"to\"/>.\n    /// </summary>\n    /// <remarks>\n    /// This calculation relies on the half-angle formula.\n    /// If the vectors are parallel (<c>dot ≈ 1</c>), Identity is returned.\n    /// If the vectors are opposite (<c>dot ≈ -1</c>), a rotation of 180° (π radians)\n    /// around an arbitrary orthogonal axis is returned.\n    /// </remarks>\n    /// <param name=\"from\">Source direction (must be unit length).</param>\n    /// <param name=\"to\">Target direction (must be unit length).</param>\n    /// <returns>A unit quaternion representing the shortest rotation.</returns>\n    public static JQuaternion CreateFromToRotation(JVector from, JVector to)\n    {\n        const Real epsilon = (Real)1e-6;\n        Real dot = JVector.Dot(from, to);\n\n        // Vectors are opposite (Singularity)\n        if (dot < -(Real)1.0 + epsilon)\n        {\n            JVector axis = MathHelper.CreateOrthonormal(from);\n            return new JQuaternion(axis.X, axis.Y, axis.Z, 0);\n        }\n\n        Real s = MathR.Sqrt(((Real)1.0 + dot) * (Real)2.0);\n        Real invS = (Real)1.0 / s;\n\n        JVector c = JVector.Cross(from, to);\n        return new JQuaternion(s * (Real)0.5, c * invS);\n    }\n\n    /// <summary>\n    /// Adds two quaternions component-wise.\n    /// </summary>\n    /// <param name=\"quaternion1\">The first quaternion.</param>\n    /// <param name=\"quaternion2\">The second quaternion.</param>\n    /// <param name=\"result\">Output: The sum of the two quaternions.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static void Add(in JQuaternion quaternion1, in JQuaternion quaternion2, out JQuaternion result)\n    {\n        result.X = quaternion1.X + quaternion2.X;\n        result.Y = quaternion1.Y + quaternion2.Y;\n        result.Z = quaternion1.Z + quaternion2.Z;\n        result.W = quaternion1.W + quaternion2.W;\n    }\n\n    /// <summary>\n    /// Returns the conjugate of a quaternion.\n    /// </summary>\n    /// <remarks>\n    /// The conjugate is defined as <c>(-x, -y, -z, w)</c>.\n    /// For unit quaternions, the conjugate is equivalent to the inverse.\n    /// </remarks>\n    /// <param name=\"value\">The quaternion to conjugate.</param>\n    /// <returns>The conjugate of the quaternion.</returns>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static JQuaternion Conjugate(in JQuaternion value)\n    {\n        JQuaternion quaternion;\n        quaternion.X = -value.X;\n        quaternion.Y = -value.Y;\n        quaternion.Z = -value.Z;\n        quaternion.W = value.W;\n        return quaternion;\n    }\n\n    /// <summary>\n    /// Returns the conjugate of the quaternion.\n    /// </summary>\n    /// <remarks>\n    /// The conjugate is defined as <c>(-x, -y, -z, w)</c>.\n    /// </remarks>\n    /// <returns>The conjugate of the quaternion.</returns>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public readonly JQuaternion Conjugate()\n    {\n        JQuaternion quaternion;\n        quaternion.X = -X;\n        quaternion.Y = -Y;\n        quaternion.Z = -Z;\n        quaternion.W = W;\n        return quaternion;\n    }\n\n    /// <summary>\n    /// Returns a string representing the quaternion in the format <c>X=..., Y=..., Z=..., W=...</c>.\n    /// </summary>\n    public readonly override string ToString()\n    {\n        return $\"X={X:F6}, Y={Y:F6}, Z={Z:F6}, W={W:F6}\";\n    }\n\n    /// <summary>\n    /// Subtracts the second quaternion from the first component-wise.\n    /// </summary>\n    /// <param name=\"quaternion1\">The first quaternion.</param>\n    /// <param name=\"quaternion2\">The second quaternion.</param>\n    /// <returns>The difference of the two quaternions.</returns>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static JQuaternion Subtract(in JQuaternion quaternion1, in JQuaternion quaternion2)\n    {\n        Subtract(quaternion1, quaternion2, out JQuaternion result);\n        return result;\n    }\n\n    /// <summary>\n    /// Subtracts the second quaternion from the first component-wise.\n    /// </summary>\n    /// <param name=\"quaternion1\">The first quaternion.</param>\n    /// <param name=\"quaternion2\">The second quaternion.</param>\n    /// <param name=\"result\">Output: The difference of the two quaternions.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static void Subtract(in JQuaternion quaternion1, in JQuaternion quaternion2, out JQuaternion result)\n    {\n        result.X = quaternion1.X - quaternion2.X;\n        result.Y = quaternion1.Y - quaternion2.Y;\n        result.Z = quaternion1.Z - quaternion2.Z;\n        result.W = quaternion1.W - quaternion2.W;\n    }\n\n    /// <summary>\n    /// Multiplies two quaternions (Hamilton Product).\n    /// </summary>\n    /// <remarks>\n    /// Non-commutative. <c>Q1 * Q2</c> represents the rotation Q2 followed by Q1 (local frame) or Q1 followed by Q2 (global frame).\n    /// </remarks>\n    /// <param name=\"quaternion1\">The first quaternion.</param>\n    /// <param name=\"quaternion2\">The second quaternion.</param>\n    /// <returns>The product of the two quaternions.</returns>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static JQuaternion Multiply(in JQuaternion quaternion1, in JQuaternion quaternion2)\n    {\n        Multiply(quaternion1, quaternion2, out JQuaternion result);\n        return result;\n    }\n\n    /// <summary>\n    /// Calculates the transformation of the X-axis <c>(1, 0, 0)</c> by this quaternion.\n    /// </summary>\n    /// <remarks>\n    /// Mathematically equivalent to <c>q · (1,0,0) · q⁻¹</c>.<br/>\n    /// Result: <c>[1 - 2(y² + z²), 2(xy + zw), 2(xz - yw)]</c>\n    /// </remarks>\n    /// <returns>The transformed vector.</returns>\n    public readonly JVector GetBasisX()\n    {\n        JVector result;\n        result.X = (Real)1.0 - (Real)2.0 * (Y * Y + Z * Z);\n        result.Y = (Real)2.0 * (X * Y + Z * W);\n        result.Z = (Real)2.0 * (X * Z - Y * W);\n        return result;\n    }\n\n    /// <summary>\n    /// Calculates the transformation of the Y-axis <c>(0, 1, 0)</c> by this quaternion.\n    /// </summary>\n    /// <remarks>\n    /// Mathematically equivalent to <c>q · (0,1,0) · q⁻¹</c>.<br/>\n    /// Result: <c>[2(xy - zw), 1 - 2(x² + z²), 2(yz + xw)]</c>\n    /// </remarks>\n    /// <returns>The transformed vector.</returns>\n    public readonly JVector GetBasisY()\n    {\n        JVector result;\n        result.X = (Real)2.0 * (X * Y - Z * W);\n        result.Y = (Real)1.0 - (Real)2.0 * (X * X + Z * Z);\n        result.Z = (Real)2.0 * (Y * Z + X * W);\n        return result;\n    }\n\n    /// <summary>\n    /// Calculates the transformation of the Z-axis <c>(0, 0, 1)</c> by this quaternion.\n    /// </summary>\n    /// <remarks>\n    /// Mathematically equivalent to <c>q · (0,0,1) · q⁻¹</c>.<br/>\n    /// Result: <c>[2(xz + yw), 2(yz - xw), 1 - 2(x² + y²)]</c>\n    /// </remarks>\n    /// <returns>The transformed vector.</returns>\n    public readonly JVector GetBasisZ()\n    {\n        JVector result;\n        result.X = (Real)2.0 * (X * Z + Y * W);\n        result.Y = (Real)2.0 * (Y * Z - X * W);\n        result.Z = (Real)1.0 - (Real)2.0 * (X * X + Y * Y);\n        return result;\n    }\n\n    /// <summary>\n    /// Creates a quaternion representing a rotation around the X-axis.\n    /// </summary>\n    /// <param name=\"radians\">The angle of rotation in radians.</param>\n    /// <returns>The resulting quaternion.</returns>\n    public static JQuaternion CreateRotationX(Real radians)\n    {\n        Real halfAngle = radians * (Real)0.5;\n        (Real sha, Real cha) = StableMath.SinCos(halfAngle);\n        return new JQuaternion(sha, 0, 0, cha);\n    }\n\n    /// <summary>\n    /// Creates a quaternion representing a rotation around the Y-axis.\n    /// </summary>\n    /// <param name=\"radians\">The angle of rotation in radians.</param>\n    /// <returns>The resulting quaternion.</returns>\n    public static JQuaternion CreateRotationY(Real radians)\n    {\n        Real halfAngle = radians * (Real)0.5;\n        (Real sha, Real cha) = StableMath.SinCos(halfAngle);\n        return new JQuaternion(0, sha, 0, cha);\n    }\n\n    /// <summary>\n    /// Creates a quaternion representing a rotation around the Z-axis.\n    /// </summary>\n    /// <param name=\"radians\">The angle of rotation in radians.</param>\n    /// <returns>The resulting quaternion.</returns>\n    public static JQuaternion CreateRotationZ(Real radians)\n    {\n        Real halfAngle = radians * (Real)0.5;\n        (Real sha, Real cha) = StableMath.SinCos(halfAngle);\n        return new JQuaternion(0, 0, sha, cha);\n    }\n\n    /// <summary>\n    /// Creates a quaternion from a unit axis and an angle.\n    /// </summary>\n    /// <remarks>\n    /// The <paramref name=\"axis\"/> must be normalized.\n    /// </remarks>\n    /// <param name=\"axis\">The unit vector to rotate around (must be normalized).</param>\n    /// <param name=\"angle\">The angle of rotation in radians.</param>\n    /// <returns>A unit quaternion representing the rotation.</returns>\n    public static JQuaternion CreateFromAxisAngle(in JVector axis, Real angle)\n    {\n        Real halfAngle = angle * (Real)0.5;\n        (Real s, Real c) = StableMath.SinCos(halfAngle);\n        return new JQuaternion(axis.X * s, axis.Y * s, axis.Z * s, c);\n    }\n\n    /// <summary>\n    /// Decomposes a unit quaternion into an axis and an angle.\n    /// </summary>\n    /// <remarks>\n    /// Assumes <paramref name=\"quaternion\"/> is normalized.\n    /// Returns the shortest arc (angle in [0, π]).\n    /// </remarks>\n    /// <param name=\"quaternion\">The unit quaternion to decompose.</param>\n    /// <param name=\"axis\">Output: The unit rotation axis.</param>\n    /// <param name=\"angle\">Output: The rotation angle (radians).</param>\n    public static void ToAxisAngle(JQuaternion quaternion, out JVector axis, out Real angle)\n    {\n        Real s = MathR.Sqrt(MathR.Max((Real)0.0, (Real)1.0 - quaternion.W * quaternion.W));\n\n        const Real epsilonSingularity = (Real)1e-6;\n\n        if (s < epsilonSingularity)\n        {\n            angle = (Real)0.0;\n            axis = JVector.UnitX;\n            return;\n        }\n\n        Real invS = (Real)1.0 / s;\n        axis = new JVector(quaternion.X * invS, quaternion.Y * invS, quaternion.Z * invS);\n        angle = (Real)2.0 * StableMath.Acos(quaternion.W);\n\n        // Enforce the shortest-arc representation (angle between 0 and PI)\n        if (angle > MathR.PI)\n        {\n            angle = (Real)2.0 * MathR.PI - angle;\n            axis = -axis;\n        }\n    }\n\n    /// <summary>\n    /// Multiplies two quaternions.\n    /// </summary>\n    /// <param name=\"quaternion1\">The first quaternion.</param>\n    /// <param name=\"quaternion2\">The second quaternion.</param>\n    /// <param name=\"result\">Output: The product of the two quaternions.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static void Multiply(in JQuaternion quaternion1, in JQuaternion quaternion2, out JQuaternion result)\n    {\n        Real r1 = quaternion1.W;\n        Real i1 = quaternion1.X;\n        Real j1 = quaternion1.Y;\n        Real k1 = quaternion1.Z;\n\n        Real r2 = quaternion2.W;\n        Real i2 = quaternion2.X;\n        Real j2 = quaternion2.Y;\n        Real k2 = quaternion2.Z;\n\n        result.W = r1 * r2 - (i1 * i2 + j1 * j2 + k1 * k2);\n        result.X = r1 * i2 + r2 * i1 + j1 * k2 - k1 * j2;\n        result.Y = r1 * j2 + r2 * j1 + k1 * i2 - i1 * k2;\n        result.Z = r1 * k2 + r2 * k1 + i1 * j2 - j1 * i2;\n    }\n\n    /// <summary>\n    /// Calculates <c>conjugate(Q1) * Q2</c>.\n    /// </summary>\n    /// <param name=\"quaternion1\">The quaternion to conjugate and then multiply.</param>\n    /// <param name=\"quaternion2\">The second quaternion.</param>\n    /// <param name=\"result\">Output: The resulting quaternion.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static void ConjugateMultiply(in JQuaternion quaternion1, in JQuaternion quaternion2, out JQuaternion result)\n    {\n        Real r1 = quaternion1.W;\n        Real i1 = -quaternion1.X;\n        Real j1 = -quaternion1.Y;\n        Real k1 = -quaternion1.Z;\n\n        Real r2 = quaternion2.W;\n        Real i2 = quaternion2.X;\n        Real j2 = quaternion2.Y;\n        Real k2 = quaternion2.Z;\n\n        result.W = r1 * r2 - (i1 * i2 + j1 * j2 + k1 * k2);\n        result.X = r1 * i2 + r2 * i1 + j1 * k2 - k1 * j2;\n        result.Y = r1 * j2 + r2 * j1 + k1 * i2 - i1 * k2;\n        result.Z = r1 * k2 + r2 * k1 + i1 * j2 - j1 * i2;\n    }\n\n    /// <inheritdoc cref=\"ConjugateMultiply(in JQuaternion, in JQuaternion, out JQuaternion)\"/>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static JQuaternion ConjugateMultiply(in JQuaternion quaternion1, in JQuaternion quaternion2)\n    {\n        ConjugateMultiply(quaternion1, quaternion2, out JQuaternion result);\n        return result;\n    }\n\n    /// <summary>\n    /// Calculates <c>Q1 * conjugate(Q2)</c>.\n    /// </summary>\n    /// <param name=\"quaternion1\">The first quaternion.</param>\n    /// <param name=\"quaternion2\">The quaternion to conjugate.</param>\n    /// <param name=\"result\">Output: The resulting quaternion.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static void MultiplyConjugate(in JQuaternion quaternion1, in JQuaternion quaternion2, out JQuaternion result)\n    {\n        Real r1 = quaternion1.W;\n        Real i1 = quaternion1.X;\n        Real j1 = quaternion1.Y;\n        Real k1 = quaternion1.Z;\n\n        Real r2 = quaternion2.W;\n        Real i2 = -quaternion2.X;\n        Real j2 = -quaternion2.Y;\n        Real k2 = -quaternion2.Z;\n\n        result.W = r1 * r2 - (i1 * i2 + j1 * j2 + k1 * k2);\n        result.X = r1 * i2 + r2 * i1 + j1 * k2 - k1 * j2;\n        result.Y = r1 * j2 + r2 * j1 + k1 * i2 - i1 * k2;\n        result.Z = r1 * k2 + r2 * k1 + i1 * j2 - j1 * i2;\n    }\n\n    /// <inheritdoc cref=\"MultiplyConjugate(in JQuaternion, in JQuaternion, out JQuaternion)\"/>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static JQuaternion MultiplyConjugate(in JQuaternion quaternion1, in JQuaternion quaternion2)\n    {\n        MultiplyConjugate(quaternion1, quaternion2, out JQuaternion result);\n        return result;\n    }\n\n    /// <summary>\n    /// Multiplies a quaternion by a scalar factor.\n    /// </summary>\n    /// <param name=\"quaternion1\">The quaternion.</param>\n    /// <param name=\"scaleFactor\">The scalar factor.</param>\n    /// <returns>The scaled quaternion.</returns>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static JQuaternion Multiply(in JQuaternion quaternion1, Real scaleFactor)\n    {\n        Multiply(in quaternion1, scaleFactor, out JQuaternion result);\n        return result;\n    }\n\n    /// <summary>\n    /// Multiplies a quaternion by a scalar factor.\n    /// </summary>\n    /// <param name=\"quaternion1\">The quaternion.</param>\n    /// <param name=\"scaleFactor\">The scalar factor.</param>\n    /// <param name=\"result\">Output: The scaled quaternion.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static void Multiply(in JQuaternion quaternion1, Real scaleFactor, out JQuaternion result)\n    {\n        result.W = quaternion1.W * scaleFactor;\n        result.X = quaternion1.X * scaleFactor;\n        result.Y = quaternion1.Y * scaleFactor;\n        result.Z = quaternion1.Z * scaleFactor;\n    }\n\n    /// <summary>\n    /// Calculates the Euclidean length of the quaternion.\n    /// </summary>\n    /// <returns>The length (magnitude).</returns>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public readonly Real Length()\n    {\n        return (Real)Math.Sqrt(X * X + Y * Y + Z * Z + W * W);\n    }\n\n    /// <summary>\n    /// Calculates the squared Euclidean length of the quaternion.\n    /// </summary>\n    /// <returns>The squared length.</returns>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public readonly Real LengthSquared()\n    {\n        return X * X + Y * Y + Z * Z + W * W;\n    }\n\n    /// <summary>\n    /// Normalizes the quaternion to unit length.\n    /// </summary>\n    [Obsolete($\"In-place Normalize() is deprecated; \" +\n              $\"use the static {nameof(JQuaternion.Normalize)} method or {nameof(JQuaternion.NormalizeInPlace)}.\")]\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public void Normalize()\n    {\n        Real num2 = X * X + Y * Y + Z * Z + W * W;\n        Real num = (Real)1.0 / MathR.Sqrt(num2);\n        X *= num;\n        Y *= num;\n        Z *= num;\n        W *= num;\n    }\n\n    /// <summary>\n    /// Normalizes the provided quaternion structure in place.\n    /// </summary>\n    /// <param name=\"quaternion\">The quaternion to normalize.</param>\n    public static void NormalizeInPlace(ref JQuaternion quaternion)\n    {\n        Real num2 = quaternion.LengthSquared();\n        Real num = (Real)1.0 / MathR.Sqrt(num2);\n        quaternion.X *= num;\n        quaternion.Y *= num;\n        quaternion.Z *= num;\n        quaternion.W *= num;\n    }\n\n    /// <summary>\n    /// Returns a normalized version of the quaternion.\n    /// </summary>\n    /// <param name=\"value\">The source quaternion.</param>\n    /// <param name=\"result\">Output: The normalized unit quaternion.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static void Normalize(in JQuaternion value, out JQuaternion result)\n    {\n        Real num2 = value.X * value.X + value.Y * value.Y + value.Z * value.Z + value.W * value.W;\n        Real num = (Real)1.0 / MathR.Sqrt(num2);\n        result.X = value.X * num;\n        result.Y = value.Y * num;\n        result.Z = value.Z * num;\n        result.W = value.W * num;\n    }\n\n    /// <inheritdoc cref=\"Normalize(in JQuaternion, out JQuaternion)\"/>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static JQuaternion Normalize(in JQuaternion value)\n    {\n        Normalize(value, out JQuaternion result);\n        return result;\n    }\n\n    /// <summary>\n    /// Creates a quaternion from a rotation matrix.\n    /// </summary>\n    /// <param name=\"matrix\">The rotation matrix.</param>\n    /// <returns>The quaternion representing the rotation.</returns>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static JQuaternion CreateFromMatrix(in JMatrix matrix)\n    {\n        CreateFromMatrix(matrix, out JQuaternion result);\n        return result;\n    }\n\n    /// <summary>\n    /// Creates a quaternion from a rotation matrix.\n    /// </summary>\n    /// <param name=\"matrix\">The rotation matrix.</param>\n    /// <param name=\"result\">Output: The quaternion representing the rotation.</param>\n    public static void CreateFromMatrix(in JMatrix matrix, out JQuaternion result)\n    {\n        Real t;\n\n        if (matrix.M33 < 0)\n        {\n            if (matrix.M11 > matrix.M22)\n            {\n                t = (Real)1.0 + matrix.M11 - matrix.M22 - matrix.M33;\n                result = new JQuaternion(t, matrix.M21 + matrix.M12, matrix.M31 + matrix.M13, matrix.M32 - matrix.M23);\n            }\n            else\n            {\n                t = (Real)1.0 - matrix.M11 + matrix.M22 - matrix.M33;\n                result = new JQuaternion(matrix.M21 + matrix.M12, t, matrix.M32 + matrix.M23, matrix.M13 - matrix.M31);\n            }\n        }\n        else\n        {\n            if (matrix.M11 < -matrix.M22)\n            {\n                t = (Real)1.0 - matrix.M11 - matrix.M22 + matrix.M33;\n                result = new JQuaternion(matrix.M13 + matrix.M31, matrix.M32 + matrix.M23, t, matrix.M21 - matrix.M12);\n            }\n            else\n            {\n                t = (Real)1.0 + matrix.M11 + matrix.M22 + matrix.M33;\n                result = new JQuaternion(matrix.M32 - matrix.M23, matrix.M13 - matrix.M31, matrix.M21 - matrix.M12, t);\n            }\n        }\n\n        t = (Real)(0.5d / Math.Sqrt(t));\n        result.X *= t;\n        result.Y *= t;\n        result.Z *= t;\n        result.W *= t;\n    }\n\n    /// <summary>\n    /// Calculates the dot product of two quaternions.\n    /// </summary>\n    /// <param name=\"quaternion1\">The first quaternion.</param>\n    /// <param name=\"quaternion2\">The second quaternion.</param>\n    /// <returns>The dot product.</returns>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static Real Dot(in JQuaternion quaternion1, in JQuaternion quaternion2)\n    {\n        return quaternion1.X * quaternion2.X +\n               quaternion1.Y * quaternion2.Y +\n               quaternion1.Z * quaternion2.Z +\n               quaternion1.W * quaternion2.W;\n    }\n\n    /// <summary>\n    /// Returns the inverse of a quaternion.\n    /// </summary>\n    /// <remarks>\n    /// Unlike <see cref=\"Conjugate(in JQuaternion)\"/>, this handles non-unit quaternions correctly\n    /// by dividing by the squared length.\n    /// </remarks>\n    public static JQuaternion Inverse(in JQuaternion value)\n    {\n        Real lengthSq = value.LengthSquared();\n        if (lengthSq < (Real)1e-12) return Identity;\n\n        Real invLengthSq = (Real)1.0 / lengthSq;\n        return new JQuaternion(\n            -value.X * invLengthSq,\n            -value.Y * invLengthSq,\n            -value.Z * invLengthSq,\n            value.W * invLengthSq);\n    }\n\n    /// <summary>\n    /// Linearly interpolates between two quaternions and normalizes the result.\n    /// </summary>\n    /// <param name=\"quaternion1\">Source quaternion.</param>\n    /// <param name=\"quaternion2\">Target quaternion.</param>\n    /// <param name=\"amount\">Weight of the interpolation.</param>\n    /// <returns>The interpolated unit quaternion.</returns>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static JQuaternion Lerp(in JQuaternion quaternion1, in JQuaternion quaternion2, Real amount)\n    {\n        Real inverse = (Real)1.0 - amount;\n        JQuaternion result;\n\n        if (Dot(quaternion1, quaternion2) >= (Real)0.0)\n        {\n            result.X = inverse * quaternion1.X + amount * quaternion2.X;\n            result.Y = inverse * quaternion1.Y + amount * quaternion2.Y;\n            result.Z = inverse * quaternion1.Z + amount * quaternion2.Z;\n            result.W = inverse * quaternion1.W + amount * quaternion2.W;\n        }\n        else\n        {\n            // Flip sign of the second quaternion to ensure shortest path\n            result.X = inverse * quaternion1.X - amount * quaternion2.X;\n            result.Y = inverse * quaternion1.Y - amount * quaternion2.Y;\n            result.Z = inverse * quaternion1.Z - amount * quaternion2.Z;\n            result.W = inverse * quaternion1.W - amount * quaternion2.W;\n        }\n\n        Normalize(result, out result);\n        return result;\n    }\n\n    /// <summary>\n    /// Interpolates between two quaternions using Spherical Linear Interpolation (SLERP).\n    /// </summary>\n    /// <param name=\"quaternion1\">Source quaternion.</param>\n    /// <param name=\"quaternion2\">Target quaternion.</param>\n    /// <param name=\"amount\">Weight of the interpolation.</param>\n    /// <returns>The interpolated quaternion.</returns>\n    public static JQuaternion Slerp(in JQuaternion quaternion1, in JQuaternion quaternion2, Real amount)\n    {\n        Real dot = Dot(quaternion1, quaternion2);\n        JQuaternion target = quaternion2;\n\n        // If the dot product is negative, the quaternions are pointing in opposite directions.\n        // Reversing one ensures we take the shortest path around the sphere.\n        if (dot < (Real)0.0)\n        {\n            dot = -dot;\n            target = -target;\n        }\n\n        const Real epsilon = (Real)1e-6;\n        Real scale0, scale1;\n\n        // If the quaternions are very close, linear interpolation is faster and safe.\n        if (dot > (Real)1.0 - epsilon)\n        {\n            scale0 = (Real)1.0 - amount;\n            scale1 = amount;\n        }\n        else\n        {\n            Real omega = StableMath.Acos(dot);\n            Real invSinOmega = (Real)1.0 / StableMath.Sin(omega);\n            scale0 = StableMath.Sin(((Real)1.0 - amount) * omega) * invSinOmega;\n            scale1 = StableMath.Sin(amount * omega) * invSinOmega;\n        }\n\n        return new JQuaternion(\n            scale0 * quaternion1.X + scale1 * target.X,\n            scale0 * quaternion1.Y + scale1 * target.Y,\n            scale0 * quaternion1.Z + scale1 * target.Z,\n            scale0 * quaternion1.W + scale1 * target.W);\n    }\n\n    /// <summary>\n    /// Flips the sign of each component of the quaternion.\n    /// </summary>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static JQuaternion operator -(in JQuaternion value)\n    {\n        return new JQuaternion(-value.X, -value.Y, -value.Z, -value.W);\n    }\n\n    /// <summary>\n    /// Multiplies two quaternions (Hamilton Product).\n    /// </summary>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static JQuaternion operator *(in JQuaternion value1, in JQuaternion value2)\n    {\n        Multiply(value1, value2, out JQuaternion result);\n        return result;\n    }\n\n    /// <summary>\n    /// Scales a quaternion by a factor.\n    /// </summary>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static JQuaternion operator *(Real value1, in JQuaternion value2)\n    {\n        Multiply(value2, value1, out JQuaternion result);\n        return result;\n    }\n\n    /// <summary>\n    /// Scales a quaternion by a factor.\n    /// </summary>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static JQuaternion operator *(in JQuaternion value1, Real value2)\n    {\n        Multiply(value1, value2, out JQuaternion result);\n        return result;\n    }\n\n    /// <summary>\n    /// Adds two quaternions component-wise.\n    /// </summary>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static JQuaternion operator +(in JQuaternion value1, in JQuaternion value2)\n    {\n        Add(value1, value2, out JQuaternion result);\n        return result;\n    }\n\n    /// <summary>\n    /// Subtracts the second quaternion from the first component-wise.\n    /// </summary>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static JQuaternion operator -(in JQuaternion value1, in JQuaternion value2)\n    {\n        Subtract(value1, value2, out JQuaternion result);\n        return result;\n    }\n\n    public readonly bool Equals(JQuaternion other)\n    {\n        return X.Equals(other.X) && Y.Equals(other.Y) && Z.Equals(other.Z) && W.Equals(other.W);\n    }\n\n    public readonly override bool Equals(object? obj)\n    {\n        return obj is JQuaternion other && Equals(other);\n    }\n\n    public readonly override int GetHashCode() => HashCode.Combine(X, Y, Z, W);\n\n    public static bool operator ==(JQuaternion left, JQuaternion right)\n    {\n        return left.Equals(right);\n    }\n\n    public static bool operator !=(JQuaternion left, JQuaternion right)\n    {\n        return !(left == right);\n    }\n}"
  },
  {
    "path": "src/Jitter2/LinearMath/JTriangle.cs",
    "content": "/*\n * Jitter2 Physics Library\n * (c) Thorben Linneweber and contributors\n * SPDX-License-Identifier: MIT\n */\n\nusing System;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\nnamespace Jitter2.LinearMath;\n\n/// <summary>\n/// Represents a triangle defined by three vertices.\n/// </summary>\n[StructLayout(LayoutKind.Explicit, Size = 9*sizeof(Real))]\npublic struct JTriangle(in JVector v0, in JVector v1, in JVector v2) : IEquatable<JTriangle>\n{\n    /// <summary>\n    /// Specifies the face culling mode for triangles based on their winding order.\n    /// Counter-clockwise (CCW) winding is considered front-facing.\n    /// </summary>\n    public enum CullMode\n    {\n        /// <summary>\n        /// Cull triangles that are front-facing.\n        /// A triangle is front-facing if its vertices are ordered counter-clockwise (CCW).\n        /// </summary>\n        FrontFacing,\n\n        /// <summary>\n        /// Cull triangles that are back-facing.\n        /// A triangle is back-facing if its vertices are ordered clockwise (CW).\n        /// This is the most common culling mode.\n        /// </summary>\n        BackFacing,\n\n        /// <summary>\n        /// Do not perform face culling; both front- and back-facing triangles are processed.\n        /// </summary>\n        None\n    }\n\n    /// <summary>The first vertex of the triangle.</summary>\n    [FieldOffset(0 * sizeof(Real))] public JVector V0 = v0;\n\n    /// <summary>The second vertex of the triangle.</summary>\n    [FieldOffset(3 * sizeof(Real))] public JVector V1 = v1;\n\n    /// <summary>The third vertex of the triangle.</summary>\n    [FieldOffset(6 * sizeof(Real))] public JVector V2 = v2;\n\n    /// <summary>\n    /// Checks if a ray intersects the triangle.\n    /// </summary>\n    /// <param name=\"origin\">The starting point (origin) of the ray.</param>\n    /// <param name=\"direction\">The direction vector of the ray.</param>\n    /// <param name=\"cullMode\">Determines whether to ignore triangles based on their winding order (Front/Back facing).</param>\n    /// <param name=\"normal\">Output: The normalized surface normal at the point of intersection.</param>\n    /// <param name=\"lambda\">Output: The distance along the <paramref name=\"direction\"/> vector where the intersection occurs (hit point = origin + lambda * direction).</param>\n    /// <returns><c>true</c> if the ray intersects the triangle; otherwise, <c>false</c>.</returns>\n    public readonly bool RayIntersect(in JVector origin, in JVector direction, CullMode cullMode,\n        out JVector normal, out Real lambda)\n    {\n        JVector u = V0 - V1;\n        JVector v = V0 - V2;\n\n        normal = u % v;\n        Real it = (Real)1.0 / normal.LengthSquared();\n\n        Real denominator = JVector.Dot(direction, normal);\n\n        if (Math.Abs(denominator) < (Real)1e-06)\n        {\n            // triangle and ray are parallel\n            goto return_false;\n        }\n\n        lambda = JVector.Dot(V0 - origin, normal);\n\n        switch (cullMode)\n        {\n            case CullMode.FrontFacing when lambda < (Real)0.0:\n            case CullMode.BackFacing when lambda > (Real)0.0:\n                goto return_false;\n        }\n\n        lambda /= denominator;\n\n        // point where the ray intersects the plane of the triangle.\n        JVector hitPoint = origin + lambda * direction;\n\n        // check if the point is inside the triangle\n        JVector at = V0 - hitPoint;\n        JVector.Cross(u, at, out JVector tmp);\n        Real gamma = JVector.Dot(tmp, normal) * it;\n        JVector.Cross(at, v, out tmp);\n        Real beta = JVector.Dot(tmp, normal) * it;\n        Real alpha = (Real)1.0 - gamma - beta;\n\n        if (alpha > 0 && beta > 0 && gamma > 0)\n        {\n            normal *= -MathHelper.SignBit(denominator) * MathR.Sqrt(it);\n            return true;\n        }\n\n        return_false:\n\n        lambda = Real.MaxValue; normal = JVector.Zero;\n        return false;\n    }\n\n    /// <summary>\n    /// Returns a string representation of the <see cref=\"JTriangle\"/>.\n    /// </summary>\n    public readonly override string ToString()\n    {\n        return $\"V0={{{V0}}}, V1={{{V1}}}, V2={{{V2}}}\";\n    }\n\n    /// <summary>\n    /// Calculates the face normal of the triangle.\n    /// The direction follows the Right-Hand Rule (counter-clockwise winding).\n    /// </summary>\n    /// <returns>The non-normalized normal vector.</returns>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public readonly JVector GetNormal()\n    {\n        return (V1 - V0) % (V2 - V0);\n    }\n\n    /// <summary>\n    /// Calculates the geometric center (centroid) of the triangle.\n    /// </summary>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public readonly JVector GetCenter()\n    {\n        return (V0 + V1 + V2) * (Real)(1.0 / 3.0);\n    }\n\n    /// <summary>\n    /// Calculates the area of the triangle.\n    /// </summary>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public readonly Real GetArea()\n    {\n        return GetNormal().Length() * (Real)0.5;\n    }\n\n    /// <summary>\n    /// Calculates the axis-aligned bounding box (AABB) of this triangle.\n    /// </summary>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public readonly JBoundingBox GetBoundingBox()\n    {\n        JBoundingBox box = JBoundingBox.SmallBox;\n        JBoundingBox.AddPointInPlace(ref box, V0);\n        JBoundingBox.AddPointInPlace(ref box, V1);\n        JBoundingBox.AddPointInPlace(ref box, V2);\n        return box;\n    }\n\n    /// <summary>\n    /// Finds the closest point on the triangle surface to a specified point.\n    /// </summary>\n    /// <param name=\"point\">The query point.</param>\n    /// <returns>The point on the triangle closest to the query point.</returns>\n    public readonly JVector ClosestPoint(JVector point)\n    {\n        JVector ab = V1 - V0;\n        JVector ac = V2 - V0;\n        JVector ap = point - V0;\n\n        Real d1 = JVector.Dot(ab, ap);\n        Real d2 = JVector.Dot(ac, ap);\n\n        // Vertex region V0\n        if (d1 <= 0 && d2 <= 0) return V0;\n\n        JVector bp = point - V1;\n        Real d3 = JVector.Dot(ab, bp);\n        Real d4 = JVector.Dot(ac, bp);\n\n        // Vertex region V1\n        if (d3 >= 0 && d4 <= d3) return V1;\n\n        // Edge region V0-V1\n        Real vc = d1 * d4 - d3 * d2;\n        if (vc <= 0 && d1 >= 0 && d3 <= 0)\n        {\n            Real v = d1 / (d1 - d3);\n            return V0 + v * ab;\n        }\n\n        JVector cp = point - V2;\n        Real d5 = JVector.Dot(ab, cp);\n        Real d6 = JVector.Dot(ac, cp);\n\n        // Vertex region V2\n        if (d6 >= 0 && d5 <= d6) return V2;\n\n        // Edge region V0-V2\n        Real vb = d5 * d2 - d1 * d6;\n        if (vb <= 0 && d2 >= 0 && d6 <= 0)\n        {\n            Real w = d2 / (d2 - d6);\n            return V0 + w * ac;\n        }\n\n        // Edge region V1-V2\n        Real va = d3 * d6 - d5 * d4;\n        if (va <= 0 && (d4 - d3) >= 0 && (d5 - d6) >= 0)\n        {\n            Real w = (d4 - d3) / ((d4 - d3) + (d5 - d6));\n            return V1 + w * (V2 - V1);\n        }\n\n        // Face region\n        Real denom = (Real)1.0 / (va + vb + vc);\n        Real vbn = vb * denom;\n        Real wn = vc * denom;\n\n        return V0 + ab * vbn + ac * wn;\n    }\n\n    public readonly override int GetHashCode() => HashCode.Combine(V0, V1, V2);\n\n    public readonly bool Equals(JTriangle other)\n    {\n        return V0.Equals(other.V0) && V1.Equals(other.V1) && V2.Equals(other.V2);\n    }\n\n    public readonly override bool Equals(object? obj)\n    {\n        return obj is JTriangle other && Equals(other);\n    }\n\n    public static bool operator ==(JTriangle left, JTriangle right)\n    {\n        return left.Equals(right);\n    }\n\n    public static bool operator !=(JTriangle left, JTriangle right)\n    {\n        return !(left == right);\n    }\n}"
  },
  {
    "path": "src/Jitter2/LinearMath/JVector.cs",
    "content": "/*\n * Jitter2 Physics Library\n * (c) Thorben Linneweber and contributors\n * SPDX-License-Identifier: MIT\n */\n\nusing System;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\nnamespace Jitter2.LinearMath;\n\n/// <summary>\n/// Represents a three-dimensional vector with components of type <see cref=\"Real\"/>.\n/// </summary>\n[StructLayout(LayoutKind.Explicit, Size = 3 * sizeof(Real))]\npublic partial struct JVector(Real x, Real y, Real z) : IEquatable<JVector>\n{\n    internal static JVector InternalZero;\n    internal static JVector Arbitrary;\n\n    [FieldOffset(0 * sizeof(Real))] public Real X = x;\n    [FieldOffset(1 * sizeof(Real))] public Real Y = y;\n    [FieldOffset(2 * sizeof(Real))] public Real Z = z;\n\n    /// <summary>The zero vector (0, 0, 0).</summary>\n    public static readonly JVector Zero;\n\n    /// <summary>The unit vector along the X-axis (1, 0, 0).</summary>\n    public static readonly JVector UnitX;\n\n    /// <summary>The unit vector along the Y-axis (0, 1, 0).</summary>\n    public static readonly JVector UnitY;\n\n    /// <summary>The unit vector along the Z-axis (0, 0, 1).</summary>\n    public static readonly JVector UnitZ;\n\n    /// <summary>A vector with all components set to one (1, 1, 1).</summary>\n    public static readonly JVector One;\n\n    /// <summary>A vector with all components set to <see cref=\"Real.MinValue\"/>.</summary>\n    public static readonly JVector MinValue;\n\n    /// <summary>A vector with all components set to <see cref=\"Real.MaxValue\"/>.</summary>\n    public static readonly JVector MaxValue;\n\n    static JVector()\n    {\n        One = new JVector(1, 1, 1);\n        Zero = new JVector(0, 0, 0);\n        UnitX = new JVector(1, 0, 0);\n        UnitY = new JVector(0, 1, 0);\n        UnitZ = new JVector(0, 0, 1);\n        MinValue = new JVector(Real.MinValue);\n        MaxValue = new JVector(Real.MaxValue);\n        Arbitrary = new JVector(1, 1, 1);\n        InternalZero = Zero;\n    }\n\n    [Obsolete($\"Do not use any longer.\")]\n    public void Set(Real x, Real y, Real z)\n    {\n        X = x;\n        Y = y;\n        Z = z;\n    }\n\n    /// <summary>\n    /// Creates a vector with all components set to the same value.\n    /// </summary>\n    /// <param name=\"xyz\">The value for X, Y, and Z components.</param>\n    public JVector(Real xyz) : this(xyz, xyz, xyz)\n    {\n    }\n\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public unsafe ref Real UnsafeGet(int index)\n    {\n        Real* ptr = (Real*)Unsafe.AsPointer(ref this);\n        return ref ptr[index];\n    }\n\n    public unsafe Real this[int i]\n    {\n        get\n        {\n            fixed (Real* ptr = &X)\n            {\n                return ptr[i];\n            }\n        }\n        set\n        {\n            fixed (Real* ptr = &X)\n            {\n                ptr[i] = value;\n            }\n        }\n    }\n\n    /// <summary>\n    /// Returns a string representation of the <see cref=\"JVector\"/>.\n    /// </summary>\n    public readonly override string ToString()\n    {\n        return $\"X={X:F6}, Y={Y:F6}, Z={Z:F6}\";\n    }\n\n    public readonly override bool Equals(object? obj)\n    {\n        return obj is JVector other && Equals(other);\n    }\n\n    public static bool operator ==(JVector value1, JVector value2)\n    {\n        return value1.X == value2.X && value1.Y == value2.Y && value1.Z == value2.Z;\n    }\n\n    public static bool operator !=(JVector value1, JVector value2)\n    {\n        if (value1.X == value2.X && value1.Y == value2.Y)\n        {\n            return value1.Z != value2.Z;\n        }\n\n        return true;\n    }\n\n    /// <summary>\n    /// Returns a vector containing the minimum components of the specified vectors.\n    /// </summary>\n    /// <param name=\"value1\">The first vector.</param>\n    /// <param name=\"value2\">The second vector.</param>\n    /// <returns>A vector with the minimum of each component.</returns>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static JVector Min(in JVector value1, in JVector value2)\n    {\n        Min(value1, value2, out JVector result);\n        return result;\n    }\n\n    /// <summary>\n    /// Returns a vector containing the minimum components of the specified vectors.\n    /// </summary>\n    /// <param name=\"value1\">The first vector.</param>\n    /// <param name=\"value2\">The second vector.</param>\n    /// <param name=\"result\">Output: A vector with the minimum of each component.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static void Min(in JVector value1, in JVector value2, out JVector result)\n    {\n        result.X = value1.X < value2.X ? value1.X : value2.X;\n        result.Y = value1.Y < value2.Y ? value1.Y : value2.Y;\n        result.Z = value1.Z < value2.Z ? value1.Z : value2.Z;\n    }\n\n    /// <summary>\n    /// Returns a vector containing the maximum components of the specified vectors.\n    /// </summary>\n    /// <param name=\"value1\">The first vector.</param>\n    /// <param name=\"value2\">The second vector.</param>\n    /// <returns>A vector with the maximum of each component.</returns>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static JVector Max(in JVector value1, in JVector value2)\n    {\n        Max(value1, value2, out JVector result);\n        return result;\n    }\n\n    /// <summary>\n    /// Returns a vector containing the maximum components of the specified vectors.\n    /// </summary>\n    /// <param name=\"value1\">The first vector.</param>\n    /// <param name=\"value2\">The second vector.</param>\n    /// <param name=\"result\">Output: A vector with the maximum of each component.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static void Max(in JVector value1, in JVector value2, out JVector result)\n    {\n        result.X = value1.X > value2.X ? value1.X : value2.X;\n        result.Y = value1.Y > value2.Y ? value1.Y : value2.Y;\n        result.Z = value1.Z > value2.Z ? value1.Z : value2.Z;\n    }\n\n    /// <summary>\n    /// Returns a vector containing the absolute values of the components of the specified vector.\n    /// </summary>\n    /// <param name=\"value1\">The input vector.</param>\n    /// <returns>A vector with absolute values of each component.</returns>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static JVector Abs(in JVector value1)\n    {\n        return new JVector(MathR.Abs(value1.X), MathR.Abs(value1.Y), MathR.Abs(value1.Z));\n    }\n\n    /// <summary>\n    /// Returns the maximum absolute value among the vector's components.\n    /// </summary>\n    /// <param name=\"value1\">The input vector.</param>\n    /// <returns>The maximum of |X|, |Y|, and |Z|.</returns>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static Real MaxAbs(in JVector value1)\n    {\n        JVector abs = Abs(value1);\n        return MathR.Max(MathR.Max(abs.X, abs.Y), abs.Z);\n    }\n\n    /// <summary>\n    /// Calculates <c>matrix * vector</c> (multiplying matrix by column vector).\n    /// </summary>\n    /// <param name=\"vector\">The column vector.</param>\n    /// <param name=\"matrix\">The matrix.</param>\n    /// <returns>The transformed vector.</returns>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static JVector Transform(in JVector vector, in JMatrix matrix)\n    {\n        Transform(vector, matrix, out JVector result);\n        return result;\n    }\n\n    /// <summary>\n    /// Transforms the vector by a quaternion rotation.\n    /// </summary>\n    /// <param name=\"vector\">The vector to transform.</param>\n    /// <param name=\"quat\">The quaternion representing the rotation.</param>\n    /// <returns>The rotated vector.</returns>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static JVector Transform(in JVector vector, in JQuaternion quat)\n    {\n        Transform(vector, quat, out JVector result);\n        return result;\n    }\n\n    /// <summary>\n    /// Calculates <c>matrixᵀ * vector</c> (multiplying transposed matrix by column vector).\n    /// </summary>\n    /// <param name=\"vector\">The column vector.</param>\n    /// <param name=\"matrix\">The matrix (transposed during operation).</param>\n    /// <returns>The transformed vector.</returns>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static JVector TransposedTransform(in JVector vector, in JMatrix matrix)\n    {\n        TransposedTransform(vector, matrix, out JVector result);\n        return result;\n    }\n\n    /// <summary>\n    /// Transforms the vector by the conjugate of a quaternion (inverse rotation for unit quaternions).\n    /// </summary>\n    /// <param name=\"vector\">The vector to transform.</param>\n    /// <param name=\"quat\">The quaternion (conjugated during operation).</param>\n    /// <returns>The inversely rotated vector.</returns>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static JVector ConjugatedTransform(in JVector vector, in JQuaternion quat)\n    {\n        ConjugatedTransform(vector, quat, out JVector result);\n        return result;\n    }\n\n    /// <summary>\n    /// Calculates <c>matrix * vector</c> (multiplying matrix by column vector).\n    /// </summary>\n    /// <param name=\"vector\">The column vector.</param>\n    /// <param name=\"matrix\">The matrix.</param>\n    /// <param name=\"result\">Output: The transformed vector.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static void Transform(in JVector vector, in JMatrix matrix, out JVector result)\n    {\n        Real num0 = vector.X * matrix.M11 + vector.Y * matrix.M12 + vector.Z * matrix.M13;\n        Real num1 = vector.X * matrix.M21 + vector.Y * matrix.M22 + vector.Z * matrix.M23;\n        Real num2 = vector.X * matrix.M31 + vector.Y * matrix.M32 + vector.Z * matrix.M33;\n\n        result.X = num0;\n        result.Y = num1;\n        result.Z = num2;\n    }\n\n    /// <summary>\n    /// Calculates <c>matrixᵀ * vector</c> (multiplying transposed matrix by column vector).\n    /// </summary>\n    /// <param name=\"vector\">The column vector.</param>\n    /// <param name=\"matrix\">The matrix (transposed during operation).</param>\n    /// <param name=\"result\">Output: The transformed vector.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static void TransposedTransform(in JVector vector, in JMatrix matrix, out JVector result)\n    {\n        Real num0 = vector.X * matrix.M11 + vector.Y * matrix.M21 + vector.Z * matrix.M31;\n        Real num1 = vector.X * matrix.M12 + vector.Y * matrix.M22 + vector.Z * matrix.M32;\n        Real num2 = vector.X * matrix.M13 + vector.Y * matrix.M23 + vector.Z * matrix.M33;\n\n        result.X = num0;\n        result.Y = num1;\n        result.Z = num2;\n    }\n\n    /// <summary>\n    /// Transforms the vector by a quaternion rotation.\n    /// </summary>\n    /// <param name=\"vector\">The vector to transform.</param>\n    /// <param name=\"quaternion\">The quaternion representing the rotation.</param>\n    /// <param name=\"result\">Output: The rotated vector.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static void Transform(in JVector vector, in JQuaternion quaternion, out JVector result)\n    {\n        Real num0 = (Real)2.0 * (quaternion.Y * vector.Z - quaternion.Z * vector.Y);\n        Real num1 = (Real)2.0 * (quaternion.Z * vector.X - quaternion.X * vector.Z);\n        Real num2 = (Real)2.0 * (quaternion.X * vector.Y - quaternion.Y * vector.X);\n\n        Real num00 = quaternion.Y * num2 - quaternion.Z * num1;\n        Real num11 = quaternion.Z * num0 - quaternion.X * num2;\n        Real num22 = quaternion.X * num1 - quaternion.Y * num0;\n\n        result.X = vector.X + quaternion.W * num0 + num00;\n        result.Y = vector.Y + quaternion.W * num1 + num11;\n        result.Z = vector.Z + quaternion.W * num2 + num22;\n    }\n\n    /// <summary>\n    /// Transforms the vector by the conjugate of a quaternion (inverse rotation).\n    /// </summary>\n    /// <param name=\"vector\">The vector to transform.</param>\n    /// <param name=\"quaternion\">The quaternion (conjugated during operation).</param>\n    /// <param name=\"result\">Output: The inversely rotated vector.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static void ConjugatedTransform(in JVector vector, in JQuaternion quaternion, out JVector result)\n    {\n        Real num0 = (Real)2.0 * (quaternion.Z * vector.Y - quaternion.Y * vector.Z);\n        Real num1 = (Real)2.0 * (quaternion.X * vector.Z - quaternion.Z * vector.X);\n        Real num2 = (Real)2.0 * (quaternion.Y * vector.X - quaternion.X * vector.Y);\n\n        Real num00 = quaternion.Z * num1 - quaternion.Y * num2;\n        Real num11 = quaternion.X * num2 - quaternion.Z * num0;\n        Real num22 = quaternion.Y * num0 - quaternion.X * num1;\n\n        result.X = vector.X + quaternion.W * num0 + num00;\n        result.Y = vector.Y + quaternion.W * num1 + num11;\n        result.Z = vector.Z + quaternion.W * num2 + num22;\n    }\n\n    /// <summary>\n    /// Calculates the outer product (tensor product) of two vectors.\n    /// </summary>\n    /// <remarks>\n    /// Result is the matrix <c>u * vᵀ</c>.\n    /// </remarks>\n    /// <param name=\"u\">The first vector.</param>\n    /// <param name=\"v\">The second vector.</param>\n    /// <returns>A 3x3 matrix representing the outer product.</returns>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static JMatrix Outer(in JVector u, in JVector v)\n    {\n        JMatrix result;\n        result.M11 = u.X * v.X;\n        result.M12 = u.X * v.Y;\n        result.M13 = u.X * v.Z;\n        result.M21 = u.Y * v.X;\n        result.M22 = u.Y * v.Y;\n        result.M23 = u.Y * v.Z;\n        result.M31 = u.Z * v.X;\n        result.M32 = u.Z * v.Y;\n        result.M33 = u.Z * v.Z;\n        return result;\n    }\n\n    /// <summary>\n    /// Calculates the dot product of two vectors (<c>u · v</c>).\n    /// </summary>\n    /// <param name=\"vector1\">The first vector.</param>\n    /// <param name=\"vector2\">The second vector.</param>\n    /// <returns>The dot product.</returns>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static Real Dot(in JVector vector1, in JVector vector2)\n    {\n        return vector1.X * vector2.X + vector1.Y * vector2.Y + vector1.Z * vector2.Z;\n    }\n\n    /// <summary>\n    /// Adds two vectors.\n    /// </summary>\n    /// <param name=\"value1\">The first vector.</param>\n    /// <param name=\"value2\">The second vector.</param>\n    /// <returns>The sum of the two vectors.</returns>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static JVector Add(in JVector value1, in JVector value2)\n    {\n        Add(value1, value2, out JVector result);\n        return result;\n    }\n\n    /// <summary>\n    /// Adds two vectors.\n    /// </summary>\n    /// <param name=\"value1\">The first vector.</param>\n    /// <param name=\"value2\">The second vector.</param>\n    /// <param name=\"result\">Output: The sum of the two vectors.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static void Add(in JVector value1, in JVector value2, out JVector result)\n    {\n        result.X = value1.X + value2.X;\n        result.Y = value1.Y + value2.Y;\n        result.Z = value1.Z + value2.Z;\n    }\n\n    /// <summary>\n    /// Subtracts the second vector from the first.\n    /// </summary>\n    /// <param name=\"value1\">The first vector.</param>\n    /// <param name=\"value2\">The second vector.</param>\n    /// <returns>The difference of the two vectors.</returns>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static JVector Subtract(JVector value1, JVector value2)\n    {\n        Subtract(value1, value2, out JVector result);\n        return result;\n    }\n\n    /// <summary>\n    /// Subtracts the second vector from the first.\n    /// </summary>\n    /// <param name=\"value1\">The first vector.</param>\n    /// <param name=\"value2\">The second vector.</param>\n    /// <param name=\"result\">Output: The difference of the two vectors.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static void Subtract(in JVector value1, in JVector value2, out JVector result)\n    {\n        Real num0 = value1.X - value2.X;\n        Real num1 = value1.Y - value2.Y;\n        Real num2 = value1.Z - value2.Z;\n\n        result.X = num0;\n        result.Y = num1;\n        result.Z = num2;\n    }\n\n    /// <summary>\n    /// Calculates the cross product of two vectors (<c>u × v</c>).\n    /// </summary>\n    /// <param name=\"vector1\">The first vector.</param>\n    /// <param name=\"vector2\">The second vector.</param>\n    /// <returns>The cross product.</returns>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static JVector Cross(in JVector vector1, in JVector vector2)\n    {\n        Cross(vector1, vector2, out JVector result);\n        return result;\n    }\n\n    /// <summary>\n    /// Calculates the cross product of two vectors (<c>u × v</c>).\n    /// </summary>\n    /// <param name=\"vector1\">The first vector.</param>\n    /// <param name=\"vector2\">The second vector.</param>\n    /// <param name=\"result\">Output: The cross product.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static void Cross(in JVector vector1, in JVector vector2, out JVector result)\n    {\n        Real num0 = vector1.Y * vector2.Z - vector1.Z * vector2.Y;\n        Real num1 = vector1.Z * vector2.X - vector1.X * vector2.Z;\n        Real num2 = vector1.X * vector2.Y - vector1.Y * vector2.X;\n\n        result.X = num0;\n        result.Y = num1;\n        result.Z = num2;\n    }\n\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public readonly override int GetHashCode() => HashCode.Combine(X, Y, Z);\n\n    [Obsolete($\"Use static {nameof(NegateInPlace)} instead.\")]\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public void Negate()\n    {\n        X = -X;\n        Y = -Y;\n        Z = -Z;\n    }\n\n    /// <summary>\n    /// Negates the vector in-place.\n    /// </summary>\n    /// <param name=\"vector\">The vector to negate.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static void NegateInPlace(ref JVector vector)\n    {\n        vector.X = -vector.X;\n        vector.Y = -vector.Y;\n        vector.Z = -vector.Z;\n    }\n\n    /// <summary>\n    /// Returns a negated copy of the vector.\n    /// </summary>\n    /// <param name=\"value\">The vector to negate.</param>\n    /// <returns>The negated vector.</returns>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static JVector Negate(in JVector value)\n    {\n        Negate(value, out JVector result);\n        return result;\n    }\n\n    /// <summary>\n    /// Returns a negated copy of the vector.\n    /// </summary>\n    /// <param name=\"value\">The vector to negate.</param>\n    /// <param name=\"result\">Output: The negated vector.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static void Negate(in JVector value, out JVector result)\n    {\n        Real num0 = -value.X;\n        Real num1 = -value.Y;\n        Real num2 = -value.Z;\n\n        result.X = num0;\n        result.Y = num1;\n        result.Z = num2;\n    }\n\n    /// <summary>\n    /// Returns a normalized unit vector.\n    /// </summary>\n    /// <param name=\"value\">The vector to normalize.</param>\n    /// <returns>The normalized unit vector.</returns>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static JVector Normalize(in JVector value)\n    {\n        Normalize(value, out JVector result);\n        return result;\n    }\n\n    /// <summary>\n    /// Normalizes <paramref name=\"value\"/>; returns <see cref=\"JVector.Zero\"/> when its squared-length is below <paramref name=\"epsilonSquared\"/>.\n    /// </summary>\n    /// <param name=\"value\">Vector to normalize.</param>\n    /// <param name=\"epsilonSquared\">Cut-off for <c>‖value‖²</c>; default is <c>1 × 10⁻¹⁶</c>.</param>\n    /// <returns>Unit vector or zero.</returns>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static JVector NormalizeSafe(in JVector value, Real epsilonSquared = (Real)1e-16)\n    {\n        Real len2 = value.X * value.X + value.Y * value.Y + value.Z * value.Z;\n        if (len2 < epsilonSquared) return JVector.Zero;\n\n        return ((Real)1.0 / MathR.Sqrt(len2)) * value;\n    }\n\n    [Obsolete($\"In-place Normalize() is deprecated; \" +\n              $\"use the static {nameof(JVector.Normalize)} method or {nameof(JVector.NormalizeInPlace)}.\")]\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public void Normalize()\n    {\n        Real num2 = X * X + Y * Y + Z * Z;\n        Real num = (Real)1.0 / MathR.Sqrt(num2);\n        X *= num;\n        Y *= num;\n        Z *= num;\n    }\n\n    /// <summary>\n    /// Normalizes the vector in-place.\n    /// </summary>\n    /// <param name=\"toNormalize\">The vector to normalize.</param>\n    public static void NormalizeInPlace(ref JVector toNormalize)\n    {\n        Real num2 = toNormalize.LengthSquared();\n        Real num = (Real)1.0 / MathR.Sqrt(num2);\n        toNormalize.X *= num;\n        toNormalize.Y *= num;\n        toNormalize.Z *= num;\n    }\n\n    /// <summary>\n    /// Returns a normalized unit vector.\n    /// </summary>\n    /// <param name=\"value\">The vector to normalize.</param>\n    /// <param name=\"result\">Output: The normalized unit vector.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static void Normalize(in JVector value, out JVector result)\n    {\n        Real num2 = value.X * value.X + value.Y * value.Y + value.Z * value.Z;\n        Real num = (Real)1.0 / MathR.Sqrt(num2);\n        result.X = value.X * num;\n        result.Y = value.Y * num;\n        result.Z = value.Z * num;\n    }\n\n    /// <summary>\n    /// Calculates the squared length of the vector (<c>‖v‖²</c>).\n    /// </summary>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public readonly Real LengthSquared()\n    {\n        return X * X + Y * Y + Z * Z;\n    }\n\n    /// <summary>\n    /// Calculates the length of the vector (<c>‖v‖</c>).\n    /// </summary>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public readonly Real Length()\n    {\n        return MathR.Sqrt(X * X + Y * Y + Z * Z);\n    }\n\n    /// <summary>\n    /// Swaps the values of two vectors.\n    /// </summary>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static void Swap(ref JVector vector1, ref JVector vector2)\n    {\n        (vector2, vector1) = (vector1, vector2);\n    }\n\n    /// <summary>\n    /// Multiplies a vector by a scalar.\n    /// </summary>\n    /// <param name=\"value1\">The vector.</param>\n    /// <param name=\"scaleFactor\">The scalar factor.</param>\n    /// <returns>The scaled vector.</returns>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static JVector Multiply(in JVector value1, Real scaleFactor)\n    {\n        Multiply(value1, scaleFactor, out JVector result);\n        return result;\n    }\n\n    /// <summary>\n    /// Multiplies a vector by a scalar.\n    /// </summary>\n    /// <param name=\"value1\">The vector.</param>\n    /// <param name=\"scaleFactor\">The scalar factor.</param>\n    /// <param name=\"result\">Output: The scaled vector.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static void Multiply(in JVector value1, Real scaleFactor, out JVector result)\n    {\n        result.X = value1.X * scaleFactor;\n        result.Y = value1.Y * scaleFactor;\n        result.Z = value1.Z * scaleFactor;\n    }\n\n    /// <summary>\n    /// Calculates the cross product of two vectors (<c>u × v</c>).\n    /// </summary>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static JVector operator %(in JVector vector1, in JVector vector2)\n    {\n        JVector result;\n        result.X = vector1.Y * vector2.Z - vector1.Z * vector2.Y;\n        result.Y = vector1.Z * vector2.X - vector1.X * vector2.Z;\n        result.Z = vector1.X * vector2.Y - vector1.Y * vector2.X;\n        return result;\n    }\n\n    /// <summary>\n    /// Calculates the dot product of two vectors (<c>u · v</c>).\n    /// </summary>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static Real operator *(in JVector vector1, in JVector vector2)\n    {\n        return vector1.X * vector2.X + vector1.Y * vector2.Y + vector1.Z * vector2.Z;\n    }\n\n    /// <summary>\n    /// Multiplies a vector by a scalar.\n    /// </summary>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static JVector operator *(in JVector value1, Real value2)\n    {\n        JVector result;\n        result.X = value1.X * value2;\n        result.Y = value1.Y * value2;\n        result.Z = value1.Z * value2;\n        return result;\n    }\n\n    /// <summary>\n    /// Multiplies a vector by a scalar.\n    /// </summary>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static JVector operator *(Real value1, in JVector value2)\n    {\n        JVector result;\n        result.X = value2.X * value1;\n        result.Y = value2.Y * value1;\n        result.Z = value2.Z * value1;\n        return result;\n    }\n\n    /// <summary>\n    /// Subtracts the second vector from the first.\n    /// </summary>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static JVector operator -(in JVector value1, in JVector value2)\n    {\n        JVector result;\n        result.X = value1.X - value2.X;\n        result.Y = value1.Y - value2.Y;\n        result.Z = value1.Z - value2.Z;\n        return result;\n    }\n\n    /// <summary>\n    /// Negates the vector.\n    /// </summary>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static JVector operator -(in JVector left)\n    {\n        return Multiply(left, -(Real)1.0);\n    }\n\n    /// <summary>\n    /// Returns the vector itself.\n    /// </summary>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static JVector operator +(in JVector left)\n    {\n        return left;\n    }\n\n    /// <summary>\n    /// Adds two vectors.\n    /// </summary>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static JVector operator +(in JVector value1, in JVector value2)\n    {\n        JVector result;\n        result.X = value1.X + value2.X;\n        result.Y = value1.Y + value2.Y;\n        result.Z = value1.Z + value2.Z;\n\n        return result;\n    }\n\n    public readonly bool Equals(JVector other)\n    {\n        return X.Equals(other.X) && Y.Equals(other.Y) && Z.Equals(other.Z);\n    }\n}"
  },
  {
    "path": "src/Jitter2/LinearMath/MathHelper.cs",
    "content": "/*\n * Jitter2 Physics Library\n * (c) Thorben Linneweber and contributors\n * SPDX-License-Identifier: MIT\n */\n\nusing System;\nusing System.Diagnostics;\nusing System.Runtime.CompilerServices;\n\nnamespace Jitter2.LinearMath;\n\n/// <summary>\n/// Provides mathematical helper methods for linear algebra and physics calculations.\n/// </summary>\npublic static class MathHelper\n{\n    /// <summary>\n    /// Gets the sign of <paramref name=\"value\"/> purely from its IEEE-754 sign bit.\n    /// </summary>\n    /// <param name=\"value\">The number to test.</param>\n    /// <returns>\n    /// <c>+1</c> when the sign bit is clear (positive, +0, or a positive-sign NaN),\n    /// <c>-1</c> when the sign bit is set (negative, −0, or a negative-sign NaN).\n    /// Never returns <c>0</c>, unlike <see cref=\"Math.Sign(float)\"/>.\n    /// </returns>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static int SignBit(float value)\n    {\n        return 1 | (BitConverter.SingleToInt32Bits(value) >> 31);\n    }\n\n    /// <inheritdoc cref=\"SignBit(float)\"/>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static int SignBit(double value)\n    {\n        return 1 | (int)(BitConverter.DoubleToInt64Bits(value) >> 63);\n    }\n\n    /// <summary>\n    /// Calculates the rotation quaternion corresponding to the given angular velocity using\n    /// deterministic trigonometric approximations.\n    /// </summary>\n    /// <param name=\"omega\">The angular velocity vector in radians per second.</param>\n    /// <param name=\"dt\">The time step in seconds.</param>\n    /// <returns>A unit quaternion representing the rotation.</returns>\n    public static JQuaternion RotationQuaternion(in JVector omega, Real dt)\n    {\n        Real angle = omega.Length();\n        Real theta = angle * dt;\n\n        if (theta < (Real)1e-3)\n        {\n            Real dt3 = dt * dt * dt;\n            Real angle2 = angle * angle;\n\n            Real scale = (Real)0.5 * dt - ((Real)1.0 / (Real)48.0) * dt3 * angle2;\n            JVector.Multiply(omega, scale, out var axis);\n\n            Real cos = (Real)1.0 - ((Real)1.0 / (Real)8.0) * theta * theta;\n\n            JQuaternion res = new JQuaternion(axis.X, axis.Y, axis.Z, cos);\n            Debug.Assert(MathHelper.IsZero(res.Length() - 1, (Real)1e-2));\n            return res;\n        }\n        else\n        {\n            Real halfAngleDt = (Real)0.5 * angle * dt;\n            (Real sinD, Real cosD) = StableMath.SinCos(halfAngleDt);\n\n            Real scale = sinD / angle;\n            JVector.Multiply(omega, scale, out var axis);\n\n            JQuaternion res = new JQuaternion(axis.X, axis.Y, axis.Z, cosD);\n            Debug.Assert(MathHelper.IsZero(res.Length() - 1, (Real)1e-2));\n            return res;\n        }\n    }\n\n    /// <summary>\n    /// Checks if matrix is a pure rotation matrix.\n    /// </summary>\n    /// <param name=\"matrix\">The matrix to check.</param>\n    /// <param name=\"epsilon\">The tolerance for floating-point comparisons.</param>\n    /// <returns><see langword=\"true\"/> if the matrix is orthonormal with determinant 1; otherwise, <see langword=\"false\"/>.</returns>\n    public static bool IsRotationMatrix(in JMatrix matrix, Real epsilon = (Real)1e-06)\n    {\n        JMatrix delta = JMatrix.MultiplyTransposed(matrix, matrix) - JMatrix.Identity;\n\n        if (!UnsafeIsZero(ref delta, epsilon))\n        {\n            return false;\n        }\n\n        return MathR.Abs(matrix.Determinant() - (Real)1.0) < epsilon;\n    }\n\n    /// <summary>\n    /// Checks if all entries of a vector are close to zero.\n    /// </summary>\n    /// <param name=\"vector\">The vector to check.</param>\n    /// <param name=\"epsilon\">The tolerance for each component.</param>\n    /// <returns><see langword=\"true\"/> if all components are within epsilon of zero; otherwise, <see langword=\"false\"/>.</returns>\n    public static bool IsZero(in JVector vector, Real epsilon = (Real)1e-6)\n    {\n        return !(MathR.Abs(vector.X) >= epsilon) &&\n               !(MathR.Abs(vector.Y) >= epsilon) &&\n               !(MathR.Abs(vector.Z) >= epsilon);\n    }\n\n    /// <summary>\n    /// Checks if a value is close to zero.\n    /// </summary>\n    /// <param name=\"value\">The value to check.</param>\n    /// <param name=\"epsilon\">The tolerance.</param>\n    /// <returns><see langword=\"true\"/> if the absolute value is less than epsilon; otherwise, <see langword=\"false\"/>.</returns>\n    public static bool IsZero(Real value, Real epsilon = (Real)1e-6)\n    {\n        return MathR.Abs(value) < epsilon;\n    }\n\n    /// <summary>\n    /// Checks if all entries of a matrix are close to zero.\n    /// </summary>\n    /// <param name=\"matrix\">The matrix to check.</param>\n    /// <param name=\"epsilon\">The tolerance for each element.</param>\n    /// <returns><see langword=\"true\"/> if all elements are within epsilon of zero; otherwise, <see langword=\"false\"/>.</returns>\n    public static bool UnsafeIsZero(ref JMatrix matrix, Real epsilon = (Real)1e-6)\n    {\n        if (!IsZero(matrix.UnsafeGet(0), epsilon)) return false;\n        if (!IsZero(matrix.UnsafeGet(1), epsilon)) return false;\n        if (!IsZero(matrix.UnsafeGet(2), epsilon)) return false;\n        return true;\n    }\n\n    /// <summary>\n    /// Calculates <c>(MᵀM)^(-1/2)</c> using Jacobi iterations.\n    /// </summary>\n    /// <param name=\"m\">The input matrix.</param>\n    /// <param name=\"sweeps\">The number of Jacobi iterations.</param>\n    /// <returns>The inverse square root of <c>MᵀM</c>.</returns>\n    public static JMatrix InverseSquareRoot(JMatrix m, int sweeps = 2)\n    {\n        Unsafe.SkipInit(out JMatrix r);\n\n        JMatrix rotation = JMatrix.Identity;\n\n        for (int i = 0; i < sweeps; i++)\n        {\n            Real phi, cp, sp;\n\n            // M32\n            if (MathR.Abs(m.M23) > (Real)1e-6)\n            {\n                phi = StableMath.Atan2((Real)1.0, (m.M33 - m.M22) / ((Real)2.0 * m.M23)) / (Real)2.0;\n                (sp, cp) = StableMath.SinCos(phi);\n                r = new JMatrix(1, 0, 0, 0, cp, sp, 0, -sp, cp);\n                JMatrix.Multiply(m, r, out m);\n                JMatrix.TransposedMultiply(r, m, out m);\n                JMatrix.Multiply(rotation, r, out rotation);\n            }\n\n            // M21\n            if (MathR.Abs(m.M21) > (Real)1e-6)\n            {\n                phi = StableMath.Atan2((Real)1.0, (m.M22 - m.M11) / ((Real)2.0 * m.M21)) / (Real)2.0;\n                (sp, cp) = StableMath.SinCos(phi);\n                r = new JMatrix(cp, sp, 0, -sp, cp, 0, 0, 0, 1);\n                JMatrix.Multiply(m, r, out m);\n                JMatrix.TransposedMultiply(r, m, out m);\n                JMatrix.Multiply(rotation, r, out rotation);\n            }\n\n            // M31\n            if (MathR.Abs(m.M31) > (Real)1e-6)\n            {\n                phi = StableMath.Atan2((Real)1.0, (m.M33 - m.M11) / ((Real)2.0 * m.M31)) / (Real)2.0;\n                (sp, cp) = StableMath.SinCos(phi);\n                r = new JMatrix(cp, 0, sp, 0, 1, 0, -sp, 0, cp);\n                JMatrix.Multiply(m, r, out m);\n                JMatrix.TransposedMultiply(r, m, out m);\n                JMatrix.Multiply(rotation, r, out rotation);\n            }\n        }\n\n        JMatrix d = new((Real)1.0 / MathR.Sqrt(m.M11), 0, 0,\n            0, (Real)1.0 / MathR.Sqrt(m.M22), 0,\n            0, 0, (Real)1.0 / MathR.Sqrt(m.M33));\n\n        return rotation * d * JMatrix.Transpose(rotation);\n    }\n\n    /// <summary>\n    /// Calculates an orthonormal vector to the given vector.\n    /// </summary>\n    /// <remarks>\n    /// The input vector must be non-zero. Debug builds assert this condition.\n    /// </remarks>\n    /// <param name=\"vec\">The input vector (must be non-zero, does not need to be normalized).</param>\n    /// <returns>A unit vector orthogonal to the input.</returns>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static JVector CreateOrthonormal(in JVector vec)\n    {\n        Debug.Assert(!CloseToZero(vec), \"Cannot create orthonormal of a zero vector\");\n\n        Real ax = Math.Abs(vec.X);\n        Real ay = Math.Abs(vec.Y);\n        Real az = Math.Abs(vec.Z);\n\n        JVector r;\n\n        if (ax <= ay && ax <= az)\n        {\n            // (0, z, -y)\n            Real y = vec.Z;\n            Real z = -vec.Y;\n\n            // invLen = 1 / sqrt(y*y + z*z)\n            Real invLen = (Real)1.0 / MathR.Sqrt(y * y + z * z);\n\n            r.X = 0;\n            r.Y = y * invLen;\n            r.Z = z * invLen;\n        }\n        else if (ay <= az)\n        {\n            // (-z, 0, x)\n            Real x = -vec.Z;\n            Real z = vec.X;\n\n            Real invLen = (Real)1.0 / MathR.Sqrt(x * x + z * z);\n\n            r.X = x * invLen;\n            r.Y = 0;\n            r.Z = z * invLen;\n        }\n        else\n        {\n            // (y, -x, 0)\n            Real x = vec.Y;\n            Real y = -vec.X;\n\n            Real invLen = (Real)1.0 / MathR.Sqrt(x * x + y * y);\n\n            r.X = x * invLen;\n            r.Y = y * invLen;\n            r.Z = 0;\n        }\n\n        Debug.Assert(MathR.Abs(JVector.Dot(r, vec)) < (Real)1e-6);\n        return r;\n    }\n\n    /// <summary>\n    /// Verifies whether the columns of the given matrix constitute an orthonormal basis.\n    /// </summary>\n    /// <param name=\"matrix\">The input matrix to check.</param>\n    /// <param name=\"epsilon\">The tolerance for floating-point comparisons.</param>\n    /// <returns><see langword=\"true\"/> if the columns are mutually perpendicular and have unit length; otherwise, <see langword=\"false\"/>.</returns>\n    public static bool CheckOrthonormalBasis(in JMatrix matrix, Real epsilon = (Real)1e-6)\n    {\n        JMatrix delta = JMatrix.MultiplyTransposed(matrix, matrix) - JMatrix.Identity;\n        return UnsafeIsZero(ref delta, epsilon);\n    }\n\n    /// <summary>\n    /// Determines whether the length of the given vector is zero or close to zero.\n    /// </summary>\n    /// <param name=\"v\">The vector to evaluate.</param>\n    /// <param name=\"epsilonSq\">Threshold for squared magnitude.</param>\n    /// <returns><see langword=\"true\"/> if the squared length is less than <paramref name=\"epsilonSq\"/>; otherwise, <see langword=\"false\"/>.</returns>\n    public static bool CloseToZero(in JVector v, Real epsilonSq = (Real)1e-16)\n    {\n        return v.LengthSquared() < epsilonSq;\n    }\n}"
  },
  {
    "path": "src/Jitter2/LinearMath/StableMath.cs",
    "content": "/*\n * Jitter2 Physics Library\n * (c) Thorben Linneweber and contributors\n * SPDX-License-Identifier: MIT\n */\n\nusing System;\nusing System.Runtime.CompilerServices;\n\nnamespace Jitter2.LinearMath;\n\n/// <summary>\n/// Internal trigonometric helpers for bit-identical results on different platforms (not guaranteed by Math and MathF).\n/// </summary>\n/// <remarks>\n/// Until scalar trig in the BCL is both deterministic and fixed by managed source across targets,\n/// this helper keeps its own tiny approximation pipeline so the physics engine owns the behavior.\n/// </remarks>\ninternal static class StableMath\n{\n    internal const Real Pi = (Real)3.141592653589793238462643383279502884;\n    internal const Real HalfPi = (Real)1.570796326794896619231321691639751442;\n    internal const Real QuarterPi = (Real)0.785398163397448309615660845819875721;\n    internal const Real TwoPi = (Real)6.283185307179586476925286766559005768;\n\n    // Used by atan's angle-addition identity: atan(x) = pi/4 + atan((x - 1) / (x + 1)).\n    private const Real TanPiOver8 = (Real)0.414213562373095048801688724209698079;\n\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    private static int FloorToInt(Real value)\n    {\n        // Casting truncates toward zero. The reducers need mathematical floor so that negative\n        // angles land in the same buckets on every platform and quadrant boundaries stay symmetric.\n        int integer = (int)value;\n        return value < integer ? integer - 1 : integer;\n    }\n\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    private static Real ReduceAngle(Real angle)\n    {\n        // This is intentionally the \"naive\" reducer: one modulo by 2*pi into [-pi, pi] in the\n        // current Real precision. It is not a Payne-Hanek/Cody-Waite style high-precision reducer.\n        // That means enormous inputs can lose low bits before the polynomial ever runs, but for the\n        // angle magnitudes seen in the solver this is a good tradeoff: tiny code, deterministic data\n        // flow, and no dependency on platform libm internals.\n        int periods = FloorToInt((angle + Pi) / TwoPi);\n        angle -= periods * TwoPi;\n\n        if (angle > Pi) angle -= TwoPi;\n        else if (angle <= -Pi) angle += TwoPi;\n\n        return angle;\n    }\n\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    private static void ReduceToQuadrant(Real angle, out int quadrant, out Real reduced)\n    {\n        angle = ReduceAngle(angle);\n\n        // Fold once more into [-pi/4, pi/4]. The returned quadrant stores the swaps/sign flips needed\n        // to reconstruct the original sine/cosine pair after the low-order polynomial is evaluated.\n        int nearestQuarterTurn = FloorToInt((angle + QuarterPi) / HalfPi);\n\n        reduced = angle - nearestQuarterTurn * HalfPi;\n        quadrant = nearestQuarterTurn & 3;\n    }\n\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    private static Real SinPolynomial(Real x)\n    {\n        // 13th-order Maclaurin approximation of sin(x), evaluated in Horner form.\n        //\n        // The reduction above is what makes this usable. In exact arithmetic the truncation remainder\n        // on [-pi/4, pi/4] is bounded by |x|^15 / 15!, which is about 2.04e-14 at the endpoint.\n        // If we skip reduction and run the same polynomial directly on [-pi, pi], a dense float scan\n        // lands around 2.14e-5 max absolute error. The quadrant fold is therefore not optional detail;\n        // it is the reason this low-order Taylor polynomial works for the engine.\n        Real x2 = x * x;\n        Real poly = -(Real)(1.0 / 6227020800.0);\n        poly = poly * x2 + (Real)(1.0 / 39916800.0);\n        poly = poly * x2 - (Real)(1.0 / 362880.0);\n        poly = poly * x2 + (Real)(1.0 / 5040.0);\n        poly = poly * x2 - (Real)(1.0 / 120.0);\n        poly = poly * x2 + (Real)(1.0 / 6.0);\n        poly = poly * x2 - (Real)1.0;\n        return -x * poly;\n    }\n\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    private static Real CosPolynomial(Real x)\n    {\n        // 12th-order Maclaurin approximation of cos(x), also in Horner form.\n        //\n        // The exact-series truncation remainder on [-pi/4, pi/4] is bounded by |x|^14 / 14!, about\n        // 3.90e-13 at the endpoint. Without reduction the same coefficients are much less acceptable:\n        // a dense float scan over [-pi, pi] lands around 1.01e-4 max absolute error.\n        Real x2 = x * x;\n        Real poly = -(Real)(1.0 / 479001600.0);\n        poly = poly * x2 + (Real)(1.0 / 3628800.0);\n        poly = poly * x2 - (Real)(1.0 / 40320.0);\n        poly = poly * x2 + (Real)(1.0 / 720.0);\n        poly = poly * x2 - (Real)(1.0 / 24.0);\n        poly = poly * x2 + (Real)(1.0 / 2.0);\n        poly = poly * x2 - (Real)1.0;\n        return -poly;\n    }\n\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    private static (Real sin, Real cos) ApplyQuadrant(int quadrant, Real sin, Real cos)\n    {\n        // Undo the octant/quadrant fold from ReduceToQuadrant.\n        return quadrant switch\n        {\n            0 => (sin, cos),\n            1 => (cos, -sin),\n            2 => (-sin, -cos),\n            _ => (-cos, sin)\n        };\n    }\n\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    private static Real ApplyQuadrantSin(int quadrant, Real sin, Real cos)\n    {\n        return quadrant switch\n        {\n            0 => sin,\n            1 => cos,\n            2 => -sin,\n            _ => -cos\n        };\n    }\n\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    private static Real ApplyQuadrantCos(int quadrant, Real sin, Real cos)\n    {\n        return quadrant switch\n        {\n            0 => cos,\n            1 => -sin,\n            2 => -cos,\n            _ => sin\n        };\n    }\n\n    internal static (Real sin, Real cos) SinCos(Real angle)\n    {\n        if (angle >= -QuarterPi && angle <= QuarterPi)\n        {\n            return (SinPolynomial(angle), CosPolynomial(angle));\n        }\n\n        // Everything outside the minimal polynomial interval goes through the normal range reducer.\n        ReduceToQuadrant(angle, out int quadrant, out Real reduced);\n\n        Real sin = SinPolynomial(reduced);\n        Real cos = CosPolynomial(reduced);\n\n        return ApplyQuadrant(quadrant, sin, cos);\n    }\n\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    internal static Real Sin(Real angle)\n    {\n        if (angle >= -QuarterPi && angle <= QuarterPi)\n        {\n            return SinPolynomial(angle);\n        }\n\n        ReduceToQuadrant(angle, out int quadrant, out Real reduced);\n\n        // The single-output paths keep the same reduction logic but avoid computing the polynomial\n        // that is not needed for the selected quadrant.\n        return quadrant switch\n        {\n            0 => SinPolynomial(reduced),\n            1 => CosPolynomial(reduced),\n            2 => -SinPolynomial(reduced),\n            _ => -CosPolynomial(reduced)\n        };\n    }\n\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    internal static Real Cos(Real angle)\n    {\n        if (angle >= -QuarterPi && angle <= QuarterPi)\n        {\n            return CosPolynomial(angle);\n        }\n\n        ReduceToQuadrant(angle, out int quadrant, out Real reduced);\n\n        return quadrant switch\n        {\n            0 => CosPolynomial(reduced),\n            1 => -SinPolynomial(reduced),\n            2 => -CosPolynomial(reduced),\n            _ => SinPolynomial(reduced)\n        };\n    }\n\n    private static Real AtanTaylor(Real value)\n    {\n        // 17th-order odd Taylor series for atan(x) in Horner form. The caller keeps |x| small\n        // enough that the notoriously slow convergence near x = 1 does not dominate the error.\n        Real x2 = value * value;\n        Real poly = (Real)(1.0 / 17.0);\n        poly = poly * x2 - (Real)(1.0 / 15.0);\n        poly = poly * x2 + (Real)(1.0 / 13.0);\n        poly = poly * x2 - (Real)(1.0 / 11.0);\n        poly = poly * x2 + (Real)(1.0 / 9.0);\n        poly = poly * x2 - (Real)(1.0 / 7.0);\n        poly = poly * x2 + (Real)(1.0 / 5.0);\n        poly = poly * x2 - (Real)(1.0 / 3.0);\n        poly = poly * x2 + (Real)1.0;\n        return value * poly;\n    }\n\n    private static Real Atan(Real value)\n    {\n        if (value < (Real)0.0) return -Atan(-value);\n\n        if (value > (Real)1.0)\n        {\n            // atan(x) = pi/2 - atan(1/x)\n            return HalfPi - Atan((Real)1.0 / value);\n        }\n\n        if (value > TanPiOver8)\n        {\n            // atan(x) = pi/4 + atan((x - 1) / (x + 1)). After this transform the Taylor series only\n            // sees values up to tan(pi/8) ~= 0.4142 instead of fighting the slow x ~= 1 case directly.\n            Real reduced = (value - (Real)1.0) / (value + (Real)1.0);\n            return QuarterPi + AtanTaylor(reduced);\n        }\n\n        return AtanTaylor(value);\n    }\n\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    private static Real AsinTaylor(Real value)\n    {\n        // 15th-order Maclaurin approximation of asin(x). We only feed it |x| <= 0.5 directly; near\n        // the endpoints Asin/Acos switch to a half-angle form so the polynomial still sees a small x.\n        Real x2 = value * value;\n        Real poly = (Real)(143.0 / 10240.0);\n        poly = poly * x2 + (Real)(231.0 / 13312.0);\n        poly = poly * x2 + (Real)(63.0 / 2816.0);\n        poly = poly * x2 + (Real)(35.0 / 1152.0);\n        poly = poly * x2 + (Real)(5.0 / 112.0);\n        poly = poly * x2 + (Real)(3.0 / 40.0);\n        poly = poly * x2 + (Real)(1.0 / 6.0);\n        poly = poly * x2 + (Real)1.0;\n        return value * poly;\n    }\n\n    internal static Real Atan2(Real y, Real x)\n    {\n        // Classic quadrant reconstruction around the scalar atan approximation above.\n        if (x > (Real)0.0)\n        {\n            return Atan(y / x);\n        }\n\n        if (x < (Real)0.0)\n        {\n            return y >= (Real)0.0\n                ? Atan(y / x) + Pi\n                : Atan(y / x) - Pi;\n        }\n\n        if (y > (Real)0.0) return HalfPi;\n        if (y < (Real)0.0) return -HalfPi;\n\n        return (Real)0.0;\n    }\n\n    internal static Real Acos(Real value)\n    {\n        value = Math.Clamp(value, (Real)(-1.0), (Real)1.0);\n\n        if (value > (Real)0.5)\n        {\n            // acos(x) = 2 * asin(sqrt((1 - x) / 2))\n            Real reduced = MathR.Sqrt(MathR.Max((Real)0.0, ((Real)1.0 - value) * (Real)0.5));\n            return (Real)2.0 * AsinTaylor(reduced);\n        }\n\n        if (value < (Real)(-0.5))\n        {\n            // acos(x) = pi - 2 * asin(sqrt((1 + x) / 2))\n            Real reduced = MathR.Sqrt(MathR.Max((Real)0.0, ((Real)1.0 + value) * (Real)0.5));\n            return Pi - (Real)2.0 * AsinTaylor(reduced);\n        }\n\n        return HalfPi - AsinTaylor(value);\n    }\n\n    internal static Real Asin(Real value)\n    {\n        value = Math.Clamp(value, (Real)(-1.0), (Real)1.0);\n        Real absValue = MathR.Abs(value);\n\n        if (absValue <= (Real)0.5)\n        {\n            return AsinTaylor(value);\n        }\n\n        // asin(x) = pi/2 - 2 * asin(sqrt((1 - |x|) / 2))\n        Real reduced = MathR.Sqrt(MathR.Max((Real)0.0, ((Real)1.0 - absValue) * (Real)0.5));\n        Real angle = HalfPi - (Real)2.0 * AsinTaylor(reduced);\n\n        return value < (Real)0.0 ? -angle : angle;\n    }\n}\n"
  },
  {
    "path": "src/Jitter2/Logger.cs",
    "content": "/*\n * Jitter2 Physics Library\n * (c) Thorben Linneweber and contributors\n * SPDX-License-Identifier: MIT\n */\n\nusing System;\n\nnamespace Jitter2;\n\n/// <summary>\n/// Provides logging functionality.\n/// </summary>\npublic static class Logger\n{\n    /// <summary>\n    /// Gets or sets a listener which receives log messages.\n    /// </summary>\n    public static Action<LogLevel, string>? Listener { get; set; }\n\n    /// <summary>\n    /// Defines the severity levels for logging messages.\n    /// </summary>\n    public enum LogLevel\n    {\n        Information,\n        Warning,\n        Error\n    }\n\n    /// <summary>\n    /// Logs an informational message.\n    /// </summary>\n    /// <param name=\"format\">The message to log.</param>\n    public static void Information(scoped ReadOnlySpan<char> format) => Log(LogLevel.Information, format);\n\n    /// <inheritdoc cref=\"Information\"/>\n    public static void Information<T1>(scoped ReadOnlySpan<char> format, T1 arg1) => LogFormat(LogLevel.Information, format, arg1);\n\n    /// <inheritdoc cref=\"Information\"/>\n    public static void Information<T1, T2>(scoped ReadOnlySpan<char> format, T1 arg1, T2 arg2) => LogFormat(LogLevel.Information, format, arg1, arg2);\n\n    /// <inheritdoc cref=\"Information\"/>\n    public static void Information<T1, T2, T3>(scoped ReadOnlySpan<char> format, T1 arg1, T2 arg2, T3 arg3) => LogFormat(LogLevel.Information, format, arg1, arg2, arg3);\n\n    /// <summary>\n    /// Logs a warning message.\n    /// </summary>\n    /// <param name=\"format\">The message to log.</param>\n    public static void Warning(scoped ReadOnlySpan<char> format) => Log(LogLevel.Warning, format);\n\n    /// <inheritdoc cref=\"Warning\"/>\n    public static void Warning<T1>(scoped ReadOnlySpan<char> format, T1 arg1) => LogFormat(LogLevel.Warning, format, arg1);\n\n    /// <inheritdoc cref=\"Warning\"/>\n    public static void Warning<T1, T2>(scoped ReadOnlySpan<char> format, T1 arg1, T2 arg2) => LogFormat(LogLevel.Warning, format, arg1, arg2);\n\n    /// <inheritdoc cref=\"Warning\"/>\n    public static void Warning<T1, T2, T3>(scoped ReadOnlySpan<char> format, T1 arg1, T2 arg2, T3 arg3) => LogFormat(LogLevel.Warning, format, arg1, arg2, arg3);\n\n    /// <summary>\n    /// Logs an error message.\n    /// </summary>\n    /// <param name=\"format\">The message to log.</param>\n    public static void Error(scoped ReadOnlySpan<char> format) => Log(LogLevel.Error, format);\n\n    /// <inheritdoc cref=\"Error\"/>\n    public static void Error<T1>(scoped ReadOnlySpan<char> format, T1 arg1) => LogFormat(LogLevel.Error, format, arg1);\n\n    /// <inheritdoc cref=\"Error\"/>\n    public static void Error<T1, T2>(scoped ReadOnlySpan<char> format, T1 arg1, T2 arg2) => LogFormat(LogLevel.Error, format, arg1, arg2);\n\n    /// <inheritdoc cref=\"Error\"/>\n    public static void Error<T1, T2, T3>(scoped ReadOnlySpan<char> format, T1 arg1, T2 arg2, T3 arg3) => LogFormat(LogLevel.Error, format, arg1, arg2, arg3);\n\n    /// <summary>\n    /// Internal logging method that invokes all registered listeners with the given message.\n    /// </summary>\n    /// <param name=\"level\">The log level of the message.</param>\n    /// <param name=\"format\">The message to log.</param>\n    private static void Log(LogLevel level, scoped ReadOnlySpan<char> format)\n    {\n        Listener?.Invoke(level, format.ToString());\n    }\n\n    /// <summary>\n    /// Formats a log message with one argument and invokes the listeners.\n    /// </summary>\n    private static void LogFormat<T1>(LogLevel level, scoped ReadOnlySpan<char> format, T1 arg1)\n    {\n        Listener?.Invoke(level, string.Format(format.ToString(), arg1));\n    }\n\n    /// <summary>\n    /// Formats a log message with two arguments and invokes the listeners.\n    /// </summary>\n    private static void LogFormat<T1, T2>(LogLevel level, scoped ReadOnlySpan<char> format, T1 arg1, T2 arg2)\n    {\n        Listener?.Invoke(level, string.Format(format.ToString(), arg1, arg2));\n    }\n\n    /// <summary>\n    /// Formats a log message with three arguments and invokes the listeners.\n    /// </summary>\n    private static void LogFormat<T1, T2, T3>(LogLevel level, scoped ReadOnlySpan<char> format, T1 arg1, T2 arg2, T3 arg3)\n    {\n        Listener?.Invoke(level, string.Format(format.ToString(), arg1, arg2, arg3));\n    }\n}\n"
  },
  {
    "path": "src/Jitter2/Parallelization/Parallel.cs",
    "content": "/*\n * Jitter2 Physics Library\n * (c) Thorben Linneweber and contributors\n * SPDX-License-Identifier: MIT\n */\n\nusing System;\nusing System.Diagnostics;\n\nnamespace Jitter2.Parallelization;\n\n/// <summary>\n/// Provides methods and structures for parallel batch processing within the Jitter physics engine.\n/// </summary>\n/// <remarks>\n/// This class is used internally to distribute work across worker threads via <see cref=\"ThreadPool\"/>.\n/// </remarks>\npublic static class Parallel\n{\n    /// <summary>\n    /// Represents a batch defined by a start index, an end index, and a batch index.\n    /// This struct is utilized in <see cref=\"ForBatch\"/> to facilitate multithreaded batch processing within a for-loop.\n    /// </summary>\n    public readonly struct Batch(int start, int end)\n    {\n        /// <summary>Returns a string representation of the batch.</summary>\n        public override string ToString()\n        {\n            return $\"Batch(Start: {Start}, End: {End})\";\n        }\n\n        /// <summary>The inclusive start index of the batch.</summary>\n        public readonly int Start = start;\n\n        /// <summary>The exclusive end index of the batch.</summary>\n        public readonly int End = end;\n    }\n\n    /// <summary>\n    /// Computes the start and end indices for a specific part of an evenly divided range.\n    /// </summary>\n    /// <param name=\"numElements\">The total number of elements to divide.</param>\n    /// <param name=\"numDivisions\">The number of divisions (parts).</param>\n    /// <param name=\"part\">The zero-based index of the part.</param>\n    /// <param name=\"start\">The inclusive start index for the specified part.</param>\n    /// <param name=\"end\">The exclusive end index for the specified part.</param>\n    /// <remarks>\n    /// Distributes remainder elements across the first parts. For example, with 14 elements\n    /// and 4 divisions: part 0 gets [0,4), part 1 gets [4,8), part 2 gets [8,11), part 3 gets [11,14).\n    /// </remarks>\n    public static void GetBounds(int numElements, int numDivisions, int part, out int start, out int end)\n    {\n        Debug.Assert(part < numDivisions);\n\n        int div = Math.DivRem(numElements, numDivisions, out int mod);\n\n        start = div * part + Math.Min(part, mod);\n        end = start + div + (part < mod ? 1 : 0);\n    }\n\n    private static readonly ThreadPool threadPool = ThreadPool.Instance;\n\n    /// <summary>\n    /// Executes tasks in parallel by dividing the work into batches using the <see cref=\"ThreadPool\"/>.\n    /// </summary>\n    /// <param name=\"lower\">The inclusive lower bound of the range to be processed.</param>\n    /// <param name=\"upper\">The exclusive upper bound of the range to be processed.</param>\n    /// <param name=\"numTasks\">The number of batches to divide the work into.</param>\n    /// <param name=\"action\">The callback function to execute for each batch.</param>\n    /// <param name=\"execute\">Indicates whether to execute the tasks immediately after adding them to the thread pool.</param>\n    /// <remarks>\n    /// This method splits the range [lower, upper) into <paramref name=\"numTasks\"/> batches and processes each batch in parallel.\n    /// The <paramref name=\"action\"/> callback is invoked for each batch, which is represented by a <see cref=\"Batch\"/> struct.\n    /// If <paramref name=\"execute\"/> is true, the method will call <see cref=\"ThreadPool.Execute\"/> to start executing the tasks.\n    /// </remarks>\n    public static void ForBatch(int lower, int upper, int numTasks, Action<Batch> action, bool execute = true)\n    {\n        Debug.Assert(numTasks <= ushort.MaxValue);\n        for (int i = 0; i < numTasks; i++)\n        {\n            GetBounds(upper - lower, numTasks, i, out int start, out int end);\n            threadPool.AddTask(action, new Batch(start + lower, end + lower));\n        }\n\n        if (execute) threadPool.Execute();\n    }\n}"
  },
  {
    "path": "src/Jitter2/Parallelization/ParallelExtensions.cs",
    "content": "/*\n * Jitter2 Physics Library\n * (c) Thorben Linneweber and contributors\n * SPDX-License-Identifier: MIT\n */\n\nusing System;\nusing Jitter2.DataStructures;\nusing Jitter2.Unmanaged;\n\nnamespace Jitter2.Parallelization;\n\n/// <summary>\n/// Provides parallel batch processing extension methods for collections used by the physics engine.\n/// </summary>\n/// <remarks>\n/// These methods divide collections into batches and distribute them across worker threads.\n/// The batch count is determined by the task threshold and available threads.\n/// </remarks>\npublic static class ParallelExtensions\n{\n    /// <summary>\n    /// Processes array elements in parallel batches.\n    /// </summary>\n    /// <param name=\"array\">The array to process.</param>\n    /// <param name=\"taskThreshold\">Minimum elements per batch. Fewer elements result in a single batch.</param>\n    /// <param name=\"action\">The callback to invoke for each batch.</param>\n    /// <param name=\"execute\">If <see langword=\"true\"/>, calls <see cref=\"ThreadPool.Execute\"/> to start execution.</param>\n    /// <returns>The number of batches generated.</returns>\n    public static int ParallelForBatch(this Array array, int taskThreshold,\n        Action<Parallel.Batch> action, bool execute = true)\n    {\n        int numTasks = array.Length / taskThreshold + 1;\n        numTasks = Math.Min(numTasks, ThreadPool.Instance.ThreadCount);\n\n        Parallel.ForBatch(0, array.Length, numTasks, action, execute);\n\n        return numTasks;\n    }\n\n    /// <summary>\n    /// Processes active elements of a <see cref=\"PartitionedBuffer{T}\"/> in parallel batches.\n    /// </summary>\n    /// <typeparam name=\"T\">The unmanaged element type.</typeparam>\n    /// <param name=\"list\">The buffer to process.</param>\n    /// <param name=\"taskThreshold\">Minimum elements per batch. Fewer elements result in a single batch.</param>\n    /// <param name=\"action\">The callback to invoke for each batch.</param>\n    /// <param name=\"execute\">If <see langword=\"true\"/>, calls <see cref=\"ThreadPool.Execute\"/> to start execution.</param>\n    /// <returns>The number of batches generated.</returns>\n    public static int ParallelForBatch<T>(this PartitionedBuffer<T> list, int taskThreshold,\n        Action<Parallel.Batch> action, bool execute = true) where T : unmanaged\n    {\n        int numTasks = list.Active.Length / taskThreshold + 1;\n        numTasks = Math.Min(numTasks, ThreadPool.Instance.ThreadCount);\n\n        Parallel.ForBatch(0, list.Active.Length, numTasks, action, execute);\n\n        return numTasks;\n    }\n\n    /// <summary>\n    /// Processes active elements of a <see cref=\"ReadOnlyPartitionedSet{T}\"/> in parallel batches.\n    /// </summary>\n    /// <typeparam name=\"T\">The element type.</typeparam>\n    /// <param name=\"list\">The set to process.</param>\n    /// <param name=\"taskThreshold\">Minimum elements per batch. Fewer elements result in a single batch.</param>\n    /// <param name=\"action\">The callback to invoke for each batch.</param>\n    /// <param name=\"execute\">If <see langword=\"true\"/>, calls <see cref=\"ThreadPool.Execute\"/> to start execution.</param>\n    /// <returns>The number of batches generated.</returns>\n    public static int ParallelForBatch<T>(this ReadOnlyPartitionedSet<T> list, int taskThreshold,\n        Action<Parallel.Batch> action, bool execute = true) where T : class, IPartitionedSetIndex\n    {\n        int numTasks = list.ActiveCount / taskThreshold + 1;\n        numTasks = Math.Min(numTasks, ThreadPool.Instance.ThreadCount);\n\n        Parallel.ForBatch(0, list.ActiveCount, numTasks, action, execute);\n\n        return numTasks;\n    }\n\n    /// <summary>\n    /// Processes active elements of a <see cref=\"PartitionedSet{T}\"/> in parallel batches.\n    /// </summary>\n    /// <typeparam name=\"T\">The element type.</typeparam>\n    /// <param name=\"partitionedSet\">The set to process.</param>\n    /// <param name=\"taskThreshold\">Minimum elements per batch. Fewer elements result in a single batch.</param>\n    /// <param name=\"action\">The callback to invoke for each batch.</param>\n    /// <param name=\"execute\">If <see langword=\"true\"/>, calls <see cref=\"ThreadPool.Execute\"/> to start execution.</param>\n    /// <returns>The number of batches generated.</returns>\n    internal static int ParallelForBatch<T>(this PartitionedSet<T> partitionedSet, int taskThreshold,\n        Action<Parallel.Batch> action, bool execute = true) where T : class, IPartitionedSetIndex\n    {\n        int numTasks = partitionedSet.ActiveCount / taskThreshold + 1;\n        numTasks = Math.Min(numTasks, ThreadPool.Instance.ThreadCount);\n\n        Parallel.ForBatch(0, partitionedSet.ActiveCount, numTasks, action, execute);\n\n        return numTasks;\n    }\n\n    /// <summary>\n    /// Processes elements of a <see cref=\"SlimBag{T}\"/> in parallel batches.\n    /// </summary>\n    /// <typeparam name=\"T\">The element type.</typeparam>\n    /// <param name=\"list\">The bag to process.</param>\n    /// <param name=\"taskThreshold\">Minimum elements per batch. Fewer elements result in a single batch.</param>\n    /// <param name=\"action\">The callback to invoke for each batch.</param>\n    /// <param name=\"execute\">If <see langword=\"true\"/>, calls <see cref=\"ThreadPool.Execute\"/> to start execution.</param>\n    /// <returns>The number of batches generated.</returns>\n    internal static int ParallelForBatch<T>(this SlimBag<T> list, int taskThreshold,\n        Action<Parallel.Batch> action, bool execute = true) where T : class, IPartitionedSetIndex\n    {\n        int numTasks = list.Count / taskThreshold + 1;\n        numTasks = Math.Min(numTasks, ThreadPool.Instance.ThreadCount);\n\n        Parallel.ForBatch(0, list.Count, numTasks, action, execute);\n\n        return numTasks;\n    }\n}"
  },
  {
    "path": "src/Jitter2/Parallelization/ReaderWriterLock.cs",
    "content": "/*\n * Jitter2 Physics Library\n * (c) Thorben Linneweber and contributors\n * SPDX-License-Identifier: MIT\n */\n\nusing System.Threading;\n\nnamespace Jitter2.Parallelization;\n\n/// <summary>\n/// Provides a lightweight reader-writer lock optimized for rare write operations.\n/// </summary>\n/// <remarks>\n/// <para>\n/// Multiple readers can hold the lock concurrently, but writers have exclusive access.\n/// This implementation uses spin-waiting and is best suited for short critical sections.\n/// </para>\n/// <para>\n/// Thread-safe. All methods use atomic operations and memory barriers.\n/// </para>\n/// </remarks>\npublic struct ReaderWriterLock\n{\n    private volatile int writer;\n    private volatile int reader;\n\n    /// <summary>\n    /// Acquires the read lock. Blocks while a writer holds the lock.\n    /// </summary>\n    /// <remarks>\n    /// Multiple threads can hold the read lock simultaneously.\n    /// Call <see cref=\"ExitReadLock\"/> to release.\n    /// </remarks>\n    public void EnterReadLock()\n    {\n        while (true)\n        {\n            while (writer == 1) Thread.SpinWait(1);\n\n            Interlocked.Increment(ref reader);\n            if (writer == 0) break;\n            Interlocked.Decrement(ref reader);\n        }\n    }\n\n    /// <summary>\n    /// Acquires the write lock with exclusive access. Blocks until all readers and writers release.\n    /// </summary>\n    /// <remarks>\n    /// Only one thread can hold the write lock at a time.\n    /// Call <see cref=\"ExitWriteLock\"/> to release.\n    /// </remarks>\n    public void EnterWriteLock()\n    {\n        SpinWait sw = new();\n\n        while (true)\n        {\n            if (Interlocked.CompareExchange(ref writer, 1, 0) == 0)\n            {\n                while (reader != 0) Thread.SpinWait(1);\n                break;\n            }\n\n            sw.SpinOnce();\n        }\n    }\n\n    /// <summary>\n    /// Exits the read section.\n    /// </summary>\n    public void ExitReadLock()\n    {\n        Interlocked.Decrement(ref reader);\n    }\n\n    /// <summary>\n    /// Exits the write section.\n    /// </summary>\n    public void ExitWriteLock()\n    {\n        writer = 0;\n    }\n}"
  },
  {
    "path": "src/Jitter2/Parallelization/ThreadPool.cs",
    "content": "/*\n * Jitter2 Physics Library\n * (c) Thorben Linneweber and contributors\n * SPDX-License-Identifier: MIT\n */\n\nusing System;\nusing System.Collections.Concurrent;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Threading;\nusing Jitter2.DataStructures;\nusing Jitter2.Unmanaged;\n\nnamespace Jitter2.Parallelization;\n\n/*\n * ---------------------------------------------------------------------------\n *  Jitter2 ThreadPool – Persistent Worker Thread Model\n * ---------------------------------------------------------------------------\n *\n *  This thread pool is built around the idea of keeping a fixed set of worker\n *  threads alive for the entire lifetime of the simulation. Workers are kept\n *  in a tight loop, only parking when explicitly instructed. This avoids the\n *  cost of repeatedly waking threads *during* each simulation step.\n *\n * Main Thread:\n *\n *  [ 1. Queue Tasks ]\n *      Tasks are added to a temporary list via AddTask(). Tasks are lightweight\n *      objects wrapping an Action<T> and parameter, pooled for reuse.\n *\n *  [ 2. Execute ]\n *      When Execute() is called, all staged tasks are distributed to\n *      per-thread queues in a round-robin fashion.\n *\n *      The main thread then participates in task execution as \"worker 0\",\n *      draining its own queue and stealing work from others until all tasks\n *      are completed.\n *\n * Worker Threads:\n *\n *  [ 3. Worker Loop ]\n *      Each worker thread repeatedly:\n *\n *        - Drains its own queue fully.\n *        - If it did any work, attempts to steal tasks from other queues\n *          (draining each queue it visits).\n *        - If no work is available, spins briefly and waits on a ManualResetEventSlim.\n *\n *      Workers stay in this loop permanently. When the event is set\n *      (via ResumeWorkers), they run; when reset (via PauseWorkers),\n *      they block once they have no work left.\n *\n *  [ 4. Completion ]\n *      Execute() blocks until all tasks have finished (tasksLeft == 0),\n *      but the threads themselves remain hot. The simulation loop can\n *      run multiple Execute() calls per step without waking threads.\n *\n *      At the end of the simulation step, PauseWorkers() is called to\n *      park the threads until the next step.\n *\n *  ---------------------------------------------------------------------------\n *  Why this design?\n *  ---------------------------------------------------------------------------\n *  - No thread wake-up overhead during simulation steps (threads are persistent).\n *  - Tasks tend to be picked up by the same thread each simulation step, improving\n *    cache locality.\n *  - Work stealing improves load balancing.\n * ---------------------------------------------------------------------------\n */\n\n/// <summary>\n/// Provides a persistent worker thread pool for parallel task execution within the physics engine.\n/// </summary>\n/// <remarks>\n/// <para>\n/// Worker threads are kept alive for the lifetime of the pool to avoid wake-up overhead.\n/// Tasks are distributed via per-thread queues with work stealing for load balancing.\n/// </para>\n/// <para>\n/// The main thread participates as \"worker 0\" during <see cref=\"Execute\"/> calls.\n/// Use <see cref=\"ResumeWorkers\"/> and <see cref=\"PauseWorkers\"/> to control thread activity\n/// between simulation steps.\n/// </para>\n/// </remarks>\npublic sealed class ThreadPool\n{\n    private interface ITask\n    {\n        public void Perform();\n    }\n\n    private sealed class Task<T> : ITask\n    {\n        public Action<T> Action = null!;\n        public T Parameter = default!;\n\n        public void Perform()\n        {\n            _counter = _total;\n\n            Tracer.ProfileBegin(Action);\n            Action(Parameter);\n            Tracer.ProfileEnd(Action);\n        }\n\n        private static readonly List<Task<T>> pool = new(32);\n\n        private static int _counter;\n        private static int _total;\n\n        public static Task<T> GetFree()\n        {\n            if (_counter == 0)\n            {\n                _counter++;\n                _total++;\n                pool.Add(new Task<T>());\n            }\n\n            return pool[^_counter--];\n        }\n    }\n\n    /// <summary>\n    /// The fraction of available processors to use for worker threads.\n    /// </summary>\n    public const float ThreadsPerProcessor = 0.9f;\n\n    private readonly ManualResetEventSlim mainResetEvent;\n    private Thread[] threads = [];\n\n    private readonly SlimBag<ITask> taskList = [];\n\n    private ConcurrentQueue<ITask>[] queues = [];\n\n    private volatile bool running = true;\n\n    private MemoryHelper.IsolatedInt tasksLeft;\n    private int threadCount;\n\n    private static ThreadPool? _instance;\n\n    /// <summary>\n    /// Gets the number of worker threads managed by this pool.\n    /// </summary>\n    /// <value>Includes the main thread as worker 0.</value>\n    public int ThreadCount => threadCount;\n\n    private ThreadPool()\n    {\n        threadCount = 0;\n        mainResetEvent = new ManualResetEventSlim(true);\n\n        int initialThreadCount = ThreadCountSuggestion;\n\n#if !NET9_0_OR_GREATER\n        // .NET versions below 9.0 have a known issue that can cause hangups or freezing\n        // when debugging on non-Windows systems. See: https://github.com/dotnet/runtime/pull/95555\n        // To avoid this issue, multi-threading is disabled when a debugger is attached on non-Windows systems.\n        if (!OperatingSystem.IsWindows() && Debugger.IsAttached)\n        {\n            Debug.WriteLine(\n                \"Multi-threading disabled to prevent potential hangups: Debugger attached, \" +\n                \".NET version < 9.0, non-Windows system detected.\");\n            initialThreadCount = 1; // Forces single-threading to avoid hangups\n        }\n#endif\n\n        ChangeThreadCount(initialThreadCount);\n    }\n\n    /// <summary>\n    /// Gets the suggested number of threads based on available processors.\n    /// </summary>\n    /// <value>At least 1, computed as <see cref=\"ThreadsPerProcessor\"/> × processor count.</value>\n    public static int ThreadCountSuggestion => Math.Max((int)(Environment.ProcessorCount * ThreadsPerProcessor), 1);\n\n    /// <summary>\n    /// Changes the number of worker threads.\n    /// </summary>\n    /// <param name=\"numThreads\">The new thread count.</param>\n    /// <remarks>\n    /// Existing worker threads are stopped and new ones are created.\n    /// This operation blocks until all previous threads have terminated.\n    /// </remarks>\n    public void ChangeThreadCount(int numThreads)\n    {\n        if (numThreads == threadCount) return;\n\n        running = false;\n        mainResetEvent.Set();\n\n        for (int i = 0; i < threadCount - 1; i++)\n        {\n            threads[i].Join();\n        }\n\n        running = true;\n        threadCount = numThreads;\n\n        queues = new ConcurrentQueue<ITask>[threadCount];\n        for (int i = 0; i < threadCount; i++)\n            queues[i] = new ConcurrentQueue<ITask>();\n\n        threads = new Thread[threadCount - 1];\n\n        var initWaitHandle = new AutoResetEvent(false);\n\n        for (int i = 0; i < threadCount - 1; i++)\n        {\n            int index = i;\n\n            threads[i] = new Thread(() =>\n            {\n                initWaitHandle.Set();\n                ThreadProc(index + 1);\n            });\n\n            threads[i].IsBackground = true;\n            threads[i].Start();\n            initWaitHandle.WaitOne();\n        }\n\n        PauseWorkers();\n    }\n\n    /// <summary>\n    /// Adds a task to the queue for later execution.\n    /// </summary>\n    /// <typeparam name=\"T\">The type of the task parameter.</typeparam>\n    /// <param name=\"action\">The action to execute.</param>\n    /// <param name=\"parameter\">The parameter to pass to the action.</param>\n    /// <remarks>\n    /// Tasks are not executed until <see cref=\"Execute\"/> is called.\n    /// This method is not thread-safe and must be called from a single thread.\n    /// </remarks>\n    public void AddTask<T>(Action<T> action, T parameter)\n    {\n        var instance = Task<T>.GetFree();\n        instance.Action = action;\n        instance.Parameter = parameter;\n        taskList.Add(instance);\n    }\n\n    /// <summary>\n    /// Indicates whether the <see cref=\"ThreadPool\"/> instance is initialized.\n    /// </summary>\n    /// <value><c>true</c> if initialized; otherwise, <c>false</c>.</value>\n    public static bool InstanceInitialized => _instance != null;\n\n    /// <summary>\n    /// Gets the singleton instance of the <see cref=\"ThreadPool\"/>.\n    /// </summary>\n    public static ThreadPool Instance\n    {\n        get\n        {\n            _instance ??= new ThreadPool();\n            return _instance;\n        }\n    }\n\n    /// <summary>\n    /// Resumes all worker threads so they can process queued tasks.\n    /// </summary>\n    /// <remarks>\n    /// Called automatically by <see cref=\"Execute\"/>. Manual calls are typically only needed\n    /// when using <see cref=\"World.ThreadModelType.Persistent\"/>.\n    /// </remarks>\n    public void ResumeWorkers()\n    {\n        mainResetEvent.Set();\n    }\n\n    /// <summary>\n    /// Pauses all worker threads after they finish their current tasks.\n    /// </summary>\n    /// <remarks>\n    /// Workers will block on a wait handle until <see cref=\"ResumeWorkers\"/> is called.\n    /// This reduces CPU usage between simulation steps.\n    /// </remarks>\n    public void PauseWorkers()\n    {\n        mainResetEvent.Reset();\n    }\n\n    private void ThreadProc(int index)\n    {\n        var myQueue = queues[index];\n\n        while (running)\n        {\n            int performedTasks = 0;\n\n            while (myQueue.TryDequeue(out var task))\n            {\n                task.Perform();\n                Interlocked.Decrement(ref tasksLeft.Value);\n                performedTasks++;\n            }\n\n            // done performing all own tasks. only now try to steal work from others.\n            if (performedTasks > 0)\n            {\n                // steal from other queues\n                for (int i = 1; i < queues.Length; i++)\n                {\n                    int queueIndex = (i + index) % queues.Length;\n\n                    while (queues[queueIndex].TryDequeue(out var task))\n                    {\n                        task.Perform();\n                        Interlocked.Decrement(ref tasksLeft.Value);\n                    }\n                }\n            }\n\n            Thread.Sleep(0);\n            mainResetEvent.Wait();\n        }\n    }\n\n    /// <summary>\n    /// Executes all queued tasks and blocks until completion.\n    /// </summary>\n    /// <remarks>\n    /// <para>\n    /// Tasks are distributed to per-thread queues in round-robin order. The main thread\n    /// participates as worker 0 and performs work stealing from other queues.\n    /// </para>\n    /// <para>\n    /// This method automatically calls <see cref=\"ResumeWorkers\"/> at the start.\n    /// </para>\n    /// </remarks>\n    public void Execute()\n    {\n        ResumeWorkers();\n\n        int totalTasks = taskList.Count;\n        Volatile.Write(ref tasksLeft.Value, totalTasks);\n\n        for (int i = 0; i < totalTasks; i++)\n        {\n            queues[i % this.ThreadCount].Enqueue(taskList[i]);\n        }\n\n        taskList.Clear();\n\n        // the main thread's queue.\n        var myQueue = queues[0];\n\n        while (myQueue.TryDequeue(out var task))\n        {\n            task.Perform();\n            Interlocked.Decrement(ref tasksLeft.Value);\n        }\n\n        // steal from other queues\n        for (int i = 1; i < queues.Length; i++)\n        {\n            while (queues[i].TryDequeue(out var task))\n            {\n                task.Perform();\n                Interlocked.Decrement(ref tasksLeft.Value);\n            }\n        }\n\n        while (Volatile.Read(ref tasksLeft.Value) > 0)\n        {\n            Thread.SpinWait(1);\n        }\n    }\n}"
  },
  {
    "path": "src/Jitter2/Precision.cs",
    "content": "﻿/*\n * Jitter2 Physics Library\n * (c) Thorben Linneweber and contributors\n * SPDX-License-Identifier: MIT\n */\n\n// Uncomment here to build Jitter using double precision\n// --------------------------------------------------------\n// #define USE_DOUBLE_PRECISION\n// --------------------------------------------------------\n// Or use command line option, e.g.,\n// dotnet build -c Release -p:DoublePrecision=true\n\n#if USE_DOUBLE_PRECISION\n\nglobal using Real = System.Double;\nglobal using MathR = System.Math;\nglobal using Vector = System.Runtime.Intrinsics.Vector256;\nglobal using VectorReal = System.Runtime.Intrinsics.Vector256<System.Double>;\n\n#else\n\nglobal using Real = System.Single;\nglobal using MathR = System.MathF;\nglobal using Vector = System.Runtime.Intrinsics.Vector128;\nglobal using VectorReal = System.Runtime.Intrinsics.Vector128<System.Single>;\n\n#endif\n\nnamespace Jitter2;\n\n/// <summary>\n/// Provides constants and utilities related to floating-point precision configuration.\n/// The library can be compiled with single-precision (float) or double-precision (double)\n/// by defining the <c>USE_DOUBLE_PRECISION</c> symbol.\n/// </summary>\npublic static class Precision\n{\n#if USE_DOUBLE_PRECISION\n    /// <summary>\n    /// The size in bytes of a full constraint data structure.\n    /// </summary>\n    public const int ConstraintSizeFull = 512;\n\n    /// <summary>\n    /// The size in bytes of a small constraint data structure.\n    /// </summary>\n    public const int ConstraintSizeSmall = 256;\n\n    /// <summary>\n    /// The size in bytes of the <see cref=\"Dynamics.RigidBodyData\"/> structure.\n    /// </summary>\n    public const int RigidBodyDataSize = 256;\n#else\n    /// <summary>\n    /// The size in bytes of a full constraint data structure.\n    /// </summary>\n    public const int ConstraintSizeFull = 256;\n\n    /// <summary>\n    /// The size in bytes of a small constraint data structure.\n    /// </summary>\n    public const int ConstraintSizeSmall = 128;\n\n    /// <summary>\n    /// The size in bytes of the <see cref=\"Dynamics.RigidBodyData\"/> structure.\n    /// </summary>\n    public const int RigidBodyDataSize = 128;\n#endif\n\n    /// <summary>\n    /// Gets a value indicating whether the engine is configured to use double-precision floating-point numbers.\n    /// </summary>\n    public static bool IsDoublePrecision => sizeof(Real) == sizeof(double);\n}"
  },
  {
    "path": "src/Jitter2/SoftBodies/BroadPhaseCollisionFilter.cs",
    "content": "/*\n * Jitter2 Physics Library\n * (c) Thorben Linneweber and contributors\n * SPDX-License-Identifier: MIT\n */\n\nusing Jitter2.Collision;\nusing Jitter2.Collision.Shapes;\nusing Jitter2.Dynamics;\nusing Jitter2.LinearMath;\n\nnamespace Jitter2.SoftBodies;\n\n/// <summary>\n/// A broad-phase filter that handles collisions involving soft body shapes.\n/// It delegates collision detection to the narrow phase and registers contacts with the\n/// closest rigid body vertices of the soft body.\n/// </summary>\npublic class BroadPhaseCollisionFilter : IBroadPhaseFilter\n{\n    private readonly World world;\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"BroadPhaseCollisionFilter\"/> class.\n    /// </summary>\n    /// <param name=\"world\">The world instance.</param>\n    public BroadPhaseCollisionFilter(World world)\n    {\n        this.world = world;\n    }\n\n    /// <inheritdoc/>\n    public bool Filter(IDynamicTreeProxy proxyA, IDynamicTreeProxy proxyB)\n    {\n        SoftBodyShape? i1 = proxyA as SoftBodyShape;\n        SoftBodyShape? i2 = proxyB as SoftBodyShape;\n\n        if (i1 != null && i2 != null)\n        {\n            if (i2.ShapeId < i1.ShapeId)\n            {\n                (i1, i2) = (i2, i1);\n            }\n\n            if (!i1.SoftBody.IsActive && !i2.SoftBody.IsActive) return false;\n\n            bool colliding = NarrowPhase.MprEpa(i1, i2,\n                JQuaternion.Identity, JVector.Zero,\n                out JVector pA, out JVector pB, out JVector normal, out _);\n\n            if (!colliding) return false;\n\n            var closestA = i1.GetClosest(pA);\n            var closestB = i2.GetClosest(pB);\n\n            world.RegisterContact(closestA.RigidBodyId, closestB.RigidBodyId, closestA, closestB,\n                pA, pB, normal);\n\n            return false;\n        }\n\n        if (i1 != null)\n        {\n            var rb = (proxyB as RigidBodyShape)!.RigidBody;\n\n            if (!i1.SoftBody.IsActive && !rb.Data.IsActive) return false;\n\n            bool colliding = NarrowPhase.MprEpa(i1, (proxyB as RigidBodyShape)!, rb.Orientation, rb.Position,\n                out JVector pA, out JVector pB, out JVector normal, out _);\n\n            if (!colliding) return false;\n\n            var closest = i1.GetClosest(pA);\n\n            world.RegisterContact(closest.RigidBodyId, rb.RigidBodyId, closest, rb,\n                pA, pB, normal, ContactData.SolveMode.AngularBody1);\n\n            return false;\n        }\n\n        if (i2 != null)\n        {\n            var ra = (proxyA as RigidBodyShape)!.RigidBody;\n\n            if (!i2.SoftBody.IsActive && !ra.Data.IsActive) return false;\n\n            bool colliding = NarrowPhase.MprEpa(i2, (proxyA as RigidBodyShape)!, ra.Orientation, ra.Position,\n                out JVector pA, out JVector pB, out JVector normal, out _);\n\n            if (!colliding) return false;\n\n            var closest = i2.GetClosest(pA);\n\n            world.RegisterContact(closest.RigidBodyId, ra.RigidBodyId, closest, ra,\n                pA, pB, normal, ContactData.SolveMode.AngularBody1);\n\n            return false;\n        }\n\n        return true;\n    }\n}"
  },
  {
    "path": "src/Jitter2/SoftBodies/DynamicTreeCollisionFilter.cs",
    "content": "/*\n * Jitter2 Physics Library\n * (c) Thorben Linneweber and contributors\n * SPDX-License-Identifier: MIT\n */\n\nusing Jitter2.Collision;\nusing Jitter2.Collision.Shapes;\n\nnamespace Jitter2.SoftBodies;\n\n/// <summary>\n/// Provides a collision filter that prevents self-collisions within soft bodies\n/// and shapes attached to the same rigid body.\n/// </summary>\npublic static class DynamicTreeCollisionFilter\n{\n    /// <summary>\n    /// Filters collision pairs to exclude self-collisions.\n    /// </summary>\n    /// <param name=\"proxyA\">The first proxy.</param>\n    /// <param name=\"proxyB\">The second proxy.</param>\n    /// <returns>\n    /// <c>true</c> if the pair should be processed for collision; <c>false</c> if it should be skipped.\n    /// </returns>\n    public static bool Filter(IDynamicTreeProxy proxyA, IDynamicTreeProxy proxyB)\n    {\n        if (proxyA is RigidBodyShape rbsA && proxyB is RigidBodyShape rbsB)\n        {\n            if (rbsA.RigidBody == rbsB.RigidBody) return false;\n        }\n        else if (proxyA is SoftBodyShape softBodyShapeA &&\n                 proxyB is SoftBodyShape softBodyShapeB)\n        {\n            SoftBody ta = softBodyShapeA.SoftBody;\n            SoftBody tb = softBodyShapeB.SoftBody;\n            return ta != tb;\n        }\n\n        return true;\n    }\n}"
  },
  {
    "path": "src/Jitter2/SoftBodies/SoftBody.cs",
    "content": "/*\n * Jitter2 Physics Library\n * (c) Thorben Linneweber and contributors\n * SPDX-License-Identifier: MIT\n */\n\nusing System.Collections.Generic;\nusing Jitter2.Dynamics;\nusing Jitter2.Dynamics.Constraints;\n\nnamespace Jitter2.SoftBodies;\n\n/// <summary>\n/// Represents a soft body in the physics simulation. A soft body is composed of vertices (rigid bodies),\n/// springs (constraints), and shapes.\n/// </summary>\npublic class SoftBody\n{\n    /// <summary>\n    /// Gets the list of vertices (rigid bodies) that make up the soft body.\n    /// </summary>\n    public List<RigidBody> Vertices { get; } = [];\n\n    /// <summary>\n    /// Gets the list of springs (constraints) that connect the vertices of the soft body.\n    /// </summary>\n    public List<Constraint> Springs { get; } = [];\n\n    /// <summary>\n    /// Gets the list of shapes that define the geometry of the soft body.\n    /// </summary>\n    public List<SoftBodyShape> Shapes { get; } = [];\n\n    /// <summary>\n    /// Gets the world in which the soft body exists.\n    /// </summary>\n    public World World { get; }\n\n    /// <summary>\n    /// Gets a value indicating whether the soft body is active. A soft body is considered active\n    /// if its first vertex is active.\n    /// </summary>\n    public bool IsActive => Vertices.Count > 0 && Vertices[0].IsActive;\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"SoftBody\"/> class.\n    /// </summary>\n    /// <param name=\"world\">The world in which the soft body will be created.</param>\n    public SoftBody(World world)\n    {\n        World = world;\n        world.PostStep += WorldOnPostStep;\n    }\n\n    /// <summary>\n    /// Adds a shape to the soft body and registers it with the world's dynamic tree.\n    /// </summary>\n    /// <param name=\"shape\">The shape to add.</param>\n    public void AddShape(SoftBodyShape shape)\n    {\n        Shapes.Add(shape);\n        World.DynamicTree.AddProxy(shape);\n    }\n\n    /// <summary>\n    /// Adds a spring (constraint) to the soft body.\n    /// </summary>\n    /// <param name=\"constraint\">The constraint to add.</param>\n    public void AddSpring(Constraint constraint)\n    {\n        Springs.Add(constraint);\n    }\n\n    /// <summary>\n    /// Destroys the soft body, removing all its components from the simulation world.\n    /// </summary>\n    public virtual void Destroy()\n    {\n        World.PostStep -= WorldOnPostStep;\n\n        foreach (var shape in Shapes)\n        {\n            World.DynamicTree.RemoveProxy(shape);\n        }\n        Shapes.Clear();\n\n        foreach (var spring in Springs)\n        {\n            World.Remove(spring);\n        }\n        Springs.Clear();\n\n        foreach (var point in Vertices)\n        {\n            World.Remove(point);\n        }\n        Vertices.Clear();\n    }\n\n    private bool active = true;\n\n    /// <summary>\n    /// Called after each world step to update the activation state of the soft body's shapes.\n    /// </summary>\n    /// <param name=\"dt\">The time step.</param>\n    protected virtual void WorldOnPostStep(Real dt)\n    {\n        if (IsActive == active) return;\n        active = IsActive;\n\n        foreach (var shape in Shapes)\n        {\n            if (active)\n            {\n                World.DynamicTree.ActivateProxy(shape);\n            }\n            else\n            {\n                World.DynamicTree.DeactivateProxy(shape);\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/Jitter2/SoftBodies/SoftBodyShape.cs",
    "content": "/*\n * Jitter2 Physics Library\n * (c) Thorben Linneweber and contributors\n * SPDX-License-Identifier: MIT\n */\n\nusing Jitter2.Collision;\nusing Jitter2.Collision.Shapes;\nusing Jitter2.Dynamics;\nusing Jitter2.LinearMath;\n\nnamespace Jitter2.SoftBodies;\n\n/// <summary>\n/// Abstract base class for shapes used in soft body simulations.\n/// </summary>\npublic abstract class SoftBodyShape : Shape\n{\n    /// <summary>\n    /// Gets the rigid body closest to the specified position.\n    /// </summary>\n    /// <param name=\"pos\">The position in world coordinates.</param>\n    /// <returns>The closest rigid body (vertex) of this shape.</returns>\n    public abstract RigidBody GetClosest(in JVector pos);\n\n    /// <summary>\n    /// Gets the soft body instance this shape belongs to.\n    /// </summary>\n    public SoftBody SoftBody { get; internal init; } = null!;\n\n    /// <inheritdoc/>\n    public override bool RayCast(in JVector origin, in JVector direction, out JVector normal, out Real lambda)\n    {\n        return NarrowPhase.RayCast(this, origin, direction, out lambda, out normal);\n    }\n\n    /// <inheritdoc/>\n    public override bool Sweep<T>(in T support, in JQuaternion orientation, in JVector position, in JVector sweep,\n        out JVector pointA, out JVector pointB, out JVector normal, out Real lambda)\n    {\n        bool hit = NarrowPhase.Sweep(this, support,\n            orientation, position, sweep,\n            out pointB, out pointA, out normal, out lambda);\n\n        JVector.NegateInPlace(ref normal);\n        return hit;\n    }\n\n    /// <inheritdoc/>\n    public override bool Distance<T>(in T support, in JQuaternion orientation, in JVector position,\n        out JVector pointA, out JVector pointB, out JVector normal, out Real distance)\n    {\n        return NarrowPhase.Distance(support, this,\n            orientation, JQuaternion.Identity,\n            position, JVector.Zero,\n            out pointA, out pointB, out normal, out distance);\n    }\n}\n"
  },
  {
    "path": "src/Jitter2/SoftBodies/SoftBodyTetrahedron.cs",
    "content": "/*\n * Jitter2 Physics Library\n * (c) Thorben Linneweber and contributors\n * SPDX-License-Identifier: MIT\n */\n\nusing Jitter2.Dynamics;\nusing Jitter2.LinearMath;\n\nnamespace Jitter2.SoftBodies;\n\n/// <summary>\n/// Represents a tetrahedral shape in a soft body simulation.\n/// </summary>\npublic sealed class SoftBodyTetrahedron : SoftBodyShape\n{\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"SoftBodyTetrahedron\"/> class.\n    /// </summary>\n    /// <param name=\"body\">The soft body this shape belongs to.</param>\n    /// <param name=\"v1\">The first vertex.</param>\n    /// <param name=\"v2\">The second vertex.</param>\n    /// <param name=\"v3\">The third vertex.</param>\n    /// <param name=\"v4\">The fourth vertex.</param>\n    public SoftBodyTetrahedron(SoftBody body, RigidBody v1, RigidBody v2, RigidBody v3, RigidBody v4)\n    {\n        Vertices[0] = v1;\n        Vertices[1] = v2;\n        Vertices[2] = v3;\n        Vertices[3] = v4;\n\n        SoftBody = body;\n\n        UpdateWorldBoundingBox();\n    }\n\n    /// <summary>\n    /// Gets the four vertices (rigid bodies) of the tetrahedron.\n    /// </summary>\n    public RigidBody[] Vertices { get; } = new RigidBody[4];\n\n    /// <inheritdoc/>\n    public override JVector Velocity\n    {\n        get\n        {\n            JVector vel = JVector.Zero;\n\n            for (int i = 0; i < 4; i++)\n            {\n                vel += Vertices[i].Velocity;\n            }\n\n            vel *= (Real)0.25;\n\n            return vel;\n        }\n    }\n\n    /// <inheritdoc/>\n    public override RigidBody GetClosest(in JVector pos)\n    {\n        Real dist = Real.MaxValue;\n        int closest = 0;\n\n        for (int i = 0; i < 4; i++)\n        {\n            Real len = (pos - Vertices[i].Position).LengthSquared();\n            if (len < dist)\n            {\n                dist = len;\n                closest = i;\n            }\n        }\n\n        return Vertices[closest];\n    }\n\n    /// <inheritdoc/>\n    public override void SupportMap(in JVector direction, out JVector result)\n    {\n        Real maxDot = Real.MinValue;\n        int furthest = 0;\n\n        for (int i = 0; i < 4; i++)\n        {\n            Real dot = JVector.Dot(direction, Vertices[i].Position);\n            if (dot > maxDot)\n            {\n                maxDot = dot;\n                furthest = i;\n            }\n        }\n\n        result = Vertices[furthest].Position;\n    }\n\n    /// <inheritdoc/>\n    public override void GetCenter(out JVector point)\n    {\n        point = (Real)0.25 * (Vertices[0].Position + Vertices[1].Position +\n                         Vertices[2].Position + Vertices[3].Position);\n    }\n\n    /// <inheritdoc/>\n    public override void UpdateWorldBoundingBox(Real dt = (Real)0.0)\n    {\n        const Real extraMargin = (Real)0.01;\n\n        JBoundingBox box = JBoundingBox.SmallBox;\n        JBoundingBox.AddPointInPlace(ref box, Vertices[0].Position);\n        JBoundingBox.AddPointInPlace(ref box, Vertices[1].Position);\n        JBoundingBox.AddPointInPlace(ref box, Vertices[2].Position);\n        JBoundingBox.AddPointInPlace(ref box, Vertices[3].Position);\n\n        box.Min -= JVector.One * extraMargin;\n        box.Max += JVector.One * extraMargin;\n\n        WorldBoundingBox = box;\n    }\n}"
  },
  {
    "path": "src/Jitter2/SoftBodies/SoftBodyTriangle.cs",
    "content": "/*\n * Jitter2 Physics Library\n * (c) Thorben Linneweber and contributors\n * SPDX-License-Identifier: MIT\n */\n\nusing Jitter2.Dynamics;\nusing Jitter2.LinearMath;\n\nnamespace Jitter2.SoftBodies;\n\n/// <summary>\n/// Represents a triangular shape in a soft body simulation.\n/// </summary>\npublic sealed class SoftBodyTriangle : SoftBodyShape\n{\n    private readonly RigidBody v1;\n    private readonly RigidBody v2;\n    private readonly RigidBody v3;\n\n    /// <summary>\n    /// Gets the first vertex (rigid body) of the triangle.\n    /// </summary>\n    public RigidBody Vertex1 => v1;\n\n    /// <summary>\n    /// Gets the second vertex (rigid body) of the triangle.\n    /// </summary>\n    public RigidBody Vertex2 => v2;\n\n    /// <summary>\n    /// Gets the third vertex (rigid body) of the triangle.\n    /// </summary>\n    public RigidBody Vertex3 => v3;\n\n    private Real halfThickness = (Real)0.05;\n\n    /// <summary>\n    /// Gets or sets the thickness of the triangle.\n    /// </summary>\n    public Real Thickness\n    {\n        get => halfThickness * (Real)2.0;\n        set => halfThickness = value * (Real)0.5;\n    }\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"SoftBodyTriangle\"/> class.\n    /// </summary>\n    /// <param name=\"body\">The soft body this shape belongs to.</param>\n    /// <param name=\"v1\">The first vertex.</param>\n    /// <param name=\"v2\">The second vertex.</param>\n    /// <param name=\"v3\">The third vertex.</param>\n    public SoftBodyTriangle(SoftBody body, RigidBody v1, RigidBody v2, RigidBody v3)\n    {\n        this.v1 = v1;\n        this.v2 = v2;\n        this.v3 = v3;\n\n        SoftBody = body;\n        UpdateWorldBoundingBox();\n    }\n\n    /// <inheritdoc/>\n    public override JVector Velocity => (Real)(1.0 / 3.0) * (v1.Data.Velocity + v2.Data.Velocity + v3.Data.Velocity);\n\n    /// <inheritdoc/>\n    public override RigidBody GetClosest(in JVector pos)\n    {\n        Real len1 = (pos - v1.Position).LengthSquared();\n        Real len2 = (pos - v2.Position).LengthSquared();\n        Real len3 = (pos - v3.Position).LengthSquared();\n\n        return (len1 < len2 && len1 < len3) ? v1 :\n            (len2 < len3) ? v2 : v3;\n    }\n\n    /// <inheritdoc/>\n    public override void UpdateWorldBoundingBox(Real dt = (Real)0.0)\n    {\n        Real extraMargin = MathR.Max(halfThickness, (Real)0.01);\n\n        JBoundingBox box = JBoundingBox.SmallBox;\n\n        JBoundingBox.AddPointInPlace(ref box, Vertex1.Position);\n        JBoundingBox.AddPointInPlace(ref box, Vertex2.Position);\n        JBoundingBox.AddPointInPlace(ref box, Vertex3.Position);\n\n        // prevent a degenerate bounding box\n        JVector extra = new(extraMargin);\n        box.Min -= extra;\n        box.Max += extra;\n\n        WorldBoundingBox = box;\n    }\n\n    /// <inheritdoc/>\n    public override void SupportMap(in JVector direction, out JVector result)\n    {\n        JVector a = v1.Position;\n        JVector b = v2.Position;\n        JVector c = v3.Position;\n\n        Real min = JVector.Dot(a, direction);\n        Real dot = JVector.Dot(b, direction);\n\n        result = a;\n\n        if (dot > min)\n        {\n            min = dot;\n            result = b;\n        }\n\n        dot = JVector.Dot(c, direction);\n\n        if (dot > min)\n        {\n            result = c;\n        }\n\n        result += JVector.Normalize(direction) * halfThickness;\n    }\n\n    /// <inheritdoc/>\n    public override void GetCenter(out JVector point)\n    {\n        point = ((Real)(1.0 / 3.0)) * (Vertex1.Position + Vertex2.Position + Vertex3.Position);\n    }\n}"
  },
  {
    "path": "src/Jitter2/SoftBodies/SpringConstraint.cs",
    "content": "/*\n * Jitter2 Physics Library\n * (c) Thorben Linneweber and contributors\n * SPDX-License-Identifier: MIT\n */\n\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\nusing Jitter2.Dynamics;\nusing Jitter2.Dynamics.Constraints;\nusing Jitter2.LinearMath;\nusing Jitter2.Unmanaged;\n\nnamespace Jitter2.SoftBodies;\n\n/// <summary>\n/// Constrains two bodies to maintain a target distance between anchor points,\n/// applying spring-like forces. Removes one translational degree of freedom along\n/// the line connecting the anchors.\n/// </summary>\n/// <remarks>\n/// This constraint is designed for soft body vertices, which act as mass points.\n/// Angular velocities of the connected bodies are not taken into account.\n/// The spring behavior is controlled by <see cref=\"Softness\"/> and <see cref=\"Bias\"/>,\n/// which can be set directly or computed from physical parameters using\n/// <see cref=\"SetSpringParameters\"/>.\n/// </remarks>\npublic unsafe class SpringConstraint : Constraint<SpringConstraint.SpringData>\n{\n    /// <summary>\n    /// Low-level data for the spring constraint, stored in unmanaged memory.\n    /// </summary>\n    [StructLayout(LayoutKind.Sequential)]\n    public struct SpringData\n    {\n        internal int _internal;\n        internal uint DispatchId;\n        internal ulong ConstraintId;\n\n        public JHandle<RigidBodyData> Body1;\n        public JHandle<RigidBodyData> Body2;\n\n        public JVector LocalAnchor1;\n        public JVector LocalAnchor2;\n\n        public Real BiasFactor;\n        public Real Softness;\n        public Real Distance;\n\n        public Real EffectiveMass;\n        public Real AccumulatedImpulse;\n        public Real Bias;\n\n        public JVector Jacobian;\n    }\n\n    private static readonly uint RegisteredDispatchId =\n        RegisterFullConstraint(&PrepareForIterationSpringConstraint, &IterateSpringConstraint);\n\n    /// <inheritdoc/>\n    protected override void Create()\n    {\n        DispatchId = RegisteredDispatchId;\n        base.Create();\n    }\n\n    /// <inheritdoc />\n    public override void ResetWarmStart() => Data.AccumulatedImpulse = (Real)0.0;\n\n    /// <summary>\n    /// Initializes the constraint from world-space anchor points.\n    /// </summary>\n    /// <param name=\"anchor1\">Anchor point on the first rigid body, in world space.</param>\n    /// <param name=\"anchor2\">Anchor point on the second rigid body, in world space.</param>\n    /// <remarks>\n    /// Computes local anchor offsets from the current body positions.\n    /// Default values: <see cref=\"Softness\"/> = <see cref=\"Constraint.DefaultLinearSoftness\"/>, <see cref=\"Bias\"/> = <see cref=\"Constraint.DefaultLinearBias\"/>.\n    /// The <see cref=\"TargetDistance\"/> is set to the initial distance between the anchors.\n    /// </remarks>\n    public void Initialize(JVector anchor1, JVector anchor2)\n    {\n        ref SpringData data = ref Data;\n        ref RigidBodyData body1 = ref data.Body1.Data;\n        ref RigidBodyData body2 = ref data.Body2.Data;\n\n        JVector.Subtract(anchor1, body1.Position, out data.LocalAnchor1);\n        JVector.Subtract(anchor2, body2.Position, out data.LocalAnchor2);\n\n        data.Softness = Constraint.DefaultLinearSoftness;\n        data.BiasFactor = Constraint.DefaultLinearBias;\n        data.Distance = (anchor2 - anchor1).Length();\n    }\n\n    /// <summary>\n    /// Sets the spring parameters using physical properties. This method calculates and sets\n    /// the <see cref=\"Softness\"/> and <see cref=\"Bias\"/> properties. It assumes that the mass\n    /// of the involved bodies and the timestep size does not change.\n    /// </summary>\n    /// <param name=\"frequency\">The frequency in Hz.</param>\n    /// <param name=\"damping\">The damping ratio (0 = no damping, 1 = critical damping).</param>\n    /// <param name=\"dt\">The timestep of the simulation.</param>\n    public void SetSpringParameters(Real frequency, Real damping, Real dt)\n    {\n        ref SpringData data = ref Data;\n        ref RigidBodyData body1 = ref data.Body1.Data;\n        ref RigidBodyData body2 = ref data.Body2.Data;\n\n        Real effectiveMass = (Real)1.0 / (body1.InverseMass + body2.InverseMass);\n\n        Real omega = (Real)2.0 * MathR.PI * frequency;\n        Real d = (Real)2.0 * effectiveMass * damping * omega;\n        Real k = effectiveMass * omega * omega;\n\n        Real h = dt;\n        data.Softness = (Real)1.0 / (d + h * k);\n        data.BiasFactor = h * k * data.Softness;\n    }\n\n    /// <summary>\n    /// Gets the accumulated impulse applied by the spring.\n    /// </summary>\n    public Real Impulse\n    {\n        get\n        {\n            ref SpringData data = ref Data;\n            return data.AccumulatedImpulse;\n        }\n    }\n\n    /// <summary>\n    /// Gets or sets the anchor point on the first body in world space.\n    /// </summary>\n    public JVector Anchor1\n    {\n        set\n        {\n            ref SpringData data = ref Data;\n            ref RigidBodyData body1 = ref data.Body1.Data;\n            JVector.Subtract(value, body1.Position, out data.LocalAnchor1);\n        }\n        get\n        {\n            ref SpringData data = ref Data;\n            ref RigidBodyData body1 = ref data.Body1.Data;\n            JVector.Add(data.LocalAnchor1, body1.Position, out JVector result);\n            return result;\n        }\n    }\n\n    /// <summary>\n    /// Gets or sets the anchor point on the second body in world space.\n    /// </summary>\n    public JVector Anchor2\n    {\n        set\n        {\n            ref SpringData data = ref Data;\n            ref RigidBodyData body2 = ref data.Body2.Data;\n            JVector.Subtract(value, body2.Position, out data.LocalAnchor2);\n        }\n        get\n        {\n            ref SpringData data = ref Data;\n            ref RigidBodyData body2 = ref data.Body2.Data;\n            JVector.Add(data.LocalAnchor2, body2.Position, out JVector result);\n            return result;\n        }\n    }\n\n    /// <summary>\n    /// Gets or sets the target resting distance of the spring.\n    /// </summary>\n    /// <value>Units: meters. Default is the initial distance between anchors at initialization.</value>\n    public Real TargetDistance\n    {\n        set\n        {\n            ref SpringData data = ref Data;\n            data.Distance = value;\n        }\n        get => Data.Distance;\n    }\n\n    /// <summary>\n    /// Gets the current distance between the anchor points.\n    /// </summary>\n    public Real Distance\n    {\n        get\n        {\n            ref SpringData data = ref Data;\n            ref RigidBodyData body1 = ref data.Body1.Data;\n            ref RigidBodyData body2 = ref data.Body2.Data;\n\n            JVector.Add(body1.Position, data.LocalAnchor1, out JVector p1);\n            JVector.Add(body2.Position, data.LocalAnchor2, out JVector p2);\n\n            JVector.Subtract(p2, p1, out JVector dp);\n\n            return dp.Length();\n        }\n    }\n\n    /// <summary>\n    /// Prepares the spring constraint for iteration.\n    /// </summary>\n    /// <param name=\"constraint\">The constraint data reference.</param>\n    /// <param name=\"idt\">The inverse substep duration (1/dt).</param>\n    public static void PrepareForIterationSpringConstraint(ref ConstraintData constraint, Real idt)\n    {\n        ref var data = ref Unsafe.As<ConstraintData, SpringData>(ref constraint);\n        ref RigidBodyData body1 = ref data.Body1.Data;\n        ref RigidBodyData body2 = ref data.Body2.Data;\n\n        JVector r1 = data.LocalAnchor1;\n        JVector r2 = data.LocalAnchor2;\n\n        JVector.Add(body1.Position, r1, out JVector p1);\n        JVector.Add(body2.Position, r2, out JVector p2);\n\n        JVector.Subtract(p2, p1, out JVector dp);\n\n        Real error = dp.Length() - data.Distance;\n\n        JVector n = p2 - p1;\n        if (n.LengthSquared() > (Real)1e-12) JVector.NormalizeInPlace(ref n);\n\n        data.Jacobian = n;\n        data.EffectiveMass = body1.InverseMass + body2.InverseMass;\n        data.EffectiveMass += data.Softness * idt;\n        data.EffectiveMass = (Real)1.0 / data.EffectiveMass;\n\n        data.Bias = error * data.BiasFactor * idt;\n\n        body1.Velocity -= body1.InverseMass * data.AccumulatedImpulse * data.Jacobian;\n        body2.Velocity += body2.InverseMass * data.AccumulatedImpulse * data.Jacobian;\n    }\n\n    /// <summary>\n    /// Gets or sets the softness (compliance) of the spring constraint.\n    /// </summary>\n    /// <value>\n    /// Default is 0.001. Higher values allow more positional error but produce a softer spring.\n    /// Scaled by inverse timestep during solving.\n    /// </value>\n    public Real Softness\n    {\n        get => Data.Softness;\n        set => Data.Softness = value;\n    }\n\n    /// <summary>\n    /// Gets or sets the bias factor (error correction strength) of the spring constraint.\n    /// </summary>\n    /// <value>\n    /// Default is 0.2. Higher values correct distance errors more aggressively.\n    /// </value>\n    public Real Bias\n    {\n        get => Data.BiasFactor;\n        set => Data.BiasFactor = value;\n    }\n\n    /// <summary>\n    /// Performs one iteration of the spring constraint solver.\n    /// </summary>\n    /// <param name=\"constraint\">The constraint data reference.</param>\n    /// <param name=\"idt\">The inverse substep duration (1/dt).</param>\n    public static void IterateSpringConstraint(ref ConstraintData constraint, Real idt)\n    {\n        ref var data = ref Unsafe.As<ConstraintData, SpringData>(ref constraint);\n        ref RigidBodyData body1 = ref constraint.Body1.Data;\n        ref RigidBodyData body2 = ref constraint.Body2.Data;\n\n        Real jv = (body2.Velocity - body1.Velocity) * data.Jacobian;\n\n        Real softnessScalar = data.AccumulatedImpulse * data.Softness * idt;\n\n        Real lambda = -data.EffectiveMass * (jv + data.Bias + softnessScalar);\n\n        Real oldAccumulatedImpulse = data.AccumulatedImpulse;\n        data.AccumulatedImpulse += lambda;\n        lambda = data.AccumulatedImpulse - oldAccumulatedImpulse;\n\n        body1.Velocity -= body1.InverseMass * lambda * data.Jacobian;\n        body2.Velocity += body2.InverseMass * lambda * data.Jacobian;\n    }\n\n    /// <inheritdoc/>\n    public override void DebugDraw(IDebugDrawer drawer)\n    {\n        ref SpringData data = ref Data;\n        ref RigidBodyData body1 = ref data.Body1.Data;\n        ref RigidBodyData body2 = ref data.Body2.Data;\n\n        JVector p1 = body1.Position + data.LocalAnchor1;\n        JVector p2 = body2.Position + data.LocalAnchor2;\n\n        drawer.DrawSegment(body1.Position, p1);\n        drawer.DrawSegment(body2.Position, p2);\n        drawer.DrawSegment(p1, p2);\n        drawer.DrawPoint(p1);\n        drawer.DrawPoint(p2);\n    }\n}\n"
  },
  {
    "path": "src/Jitter2/Tracer.cs",
    "content": "/*\n * Jitter2 Physics Library\n * (c) Thorben Linneweber and contributors\n * SPDX-License-Identifier: MIT\n */\n\n/*\n * This file defines the Tracer utility used to record performance data during simulation.\n *\n * When the symbol PROFILE is defined at compile time, the Tracer class is fully included.\n * It records events with minimal overhead using thread-local buffers and can export them\n * in Chrome Trace Event format for external analysis. The public surface is intentionally minimal:\n * external code can write out recorded traces, but the recording itself is controlled internally\n * by the engine.\n *\n * When PROFILE is not defined, the Tracer class is replaced by a stub implementation.\n * All trace methods in the stub are decorated with [Conditional(\"_NEVER\")], ensuring that\n * every call to Tracer.* is completely stripped by the compiler. This eliminates any\n * runtime cost or dependency on the tracing system in non-profile builds.\n */\n\nusing System;\nusing System.Buffers;\nusing System.Collections.Concurrent;\nusing System.Diagnostics;\nusing System.Globalization;\nusing System.IO;\nusing System.Runtime.CompilerServices;\nusing System.Text;\n\nnamespace Jitter2;\n\ninternal enum TraceCategory : ushort\n{\n    General,\n    Solver,\n    Runtime,\n    Invoke,\n}\n\ninternal enum TraceName : long\n{\n    Scope,\n    PruneInvalidPairs,\n    UpdateBoundingBoxes,\n    ScanMoved,\n    UpdateProxies,\n    ScanOverlaps,\n    Gc,\n    Step,\n    NarrowPhase,\n    AddArbiter,\n    ReorderContacts,\n    CheckDeactivation,\n    Solve,\n    RemoveArbiter,\n    UpdateContacts,\n    UpdateBodies,\n    BroadPhase,\n    Queue,\n    PreStep,\n    PostStep,\n}\n\ninternal enum TracePhase : byte\n{\n    Begin,\n    End,\n    Instant,\n    Complete\n}\n\n#if PROFILE\n\n/// <summary>\n/// Provides access to performance tracing features.\n/// </summary>\n/// <remarks>\n/// When tracing is enabled, performance data can be recorded during simulation\n/// and exported for analysis with external tools such as Chrome's tracing viewer.\n/// </remarks>\npublic static class Tracer\n{\n    private const string DefaultPath = \"trace.json\";\n\n    static Tracer()\n    {\n        string message =\n            $\">>> PROFILING ENABLED! <<< Use {nameof(Tracer)}.{nameof(WriteToFile)} to dump trace to disk.\";\n\n        if(Logger.Listener == null) Console.WriteLine(message);\n        else Logger.Warning(message);\n\n        StartGcTracing();\n    }\n\n    private struct TraceEvent\n    {\n        public double TimestampMicro;\n        public double DurationMicro;\n        public int ThreadId;\n        public TraceCategory Category;\n        public TracePhase Phase;\n        public TraceName Name;\n    }\n\n    private sealed class PerThreadBuffer(int initialCapacity)\n    {\n        public TraceEvent[] Events = ArrayPool<TraceEvent>.Shared.Rent(initialCapacity);\n        public int Count = 0;\n    }\n\n    private static readonly ConcurrentBag<PerThreadBuffer> allBuffers = new();\n    [ThreadStatic] private static PerThreadBuffer? _perThreadBuffer;\n\n    private const int InitialCapacity = 16_384;\n\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    private static PerThreadBuffer EnsureThreadBuffer()\n    {\n        var b = _perThreadBuffer;\n        if (b is not null) return b;\n\n        b = new PerThreadBuffer(InitialCapacity);\n        _perThreadBuffer = b;\n        allBuffers.Add(b);\n        return b;\n    }\n\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    private static void Record(ref TraceEvent e)\n    {\n        var b = EnsureThreadBuffer();\n        int i = b.Count;\n        if ((uint)i >= (uint)b.Events.Length)\n        {\n            Grow(b);\n        }\n\n        b.Events[i] = e;\n        b.Count = i + 1;\n    }\n\n    private static void Grow(PerThreadBuffer b)\n    {\n        var oldArr = b.Events;\n        int newLen = oldArr.Length << 1;\n        var newArr = ArrayPool<TraceEvent>.Shared.Rent(newLen);\n        Array.Copy(oldArr, 0, newArr, 0, oldArr.Length);\n        b.Events = newArr;\n        ArrayPool<TraceEvent>.Shared.Return(oldArr, clearArray: false);\n    }\n\n    private static readonly double ticksToMicro = 1_000_000.0 / Stopwatch.Frequency;\n\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    internal static double NowMicroseconds()\n        => Stopwatch.GetTimestamp() * ticksToMicro;\n\n    [ThreadStatic] private static double _scopeStartMicro;\n\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    internal static void ProfileBegin(TraceName name, TraceCategory cat = TraceCategory.Solver)\n    {\n        var evt = new TraceEvent\n        {\n            TimestampMicro = NowMicroseconds(),\n            ThreadId = Environment.CurrentManagedThreadId,\n            Category = cat,\n            Phase = TracePhase.Begin,\n            Name = name\n        };\n        Record(ref evt);\n    }\n\n    internal static void ProfileBegin(Delegate @delegate)\n    {\n        var evt = new TraceEvent\n        {\n            TimestampMicro = NowMicroseconds(),\n            ThreadId = Environment.CurrentManagedThreadId,\n            Category = TraceCategory.Invoke,\n            Phase = TracePhase.Begin,\n            Name = (TraceName)@delegate.Method.MethodHandle.Value,\n        };\n        Record(ref evt);\n    }\n\n    internal static void ProfileEnd(Delegate @delegate)\n    {\n        var evt = new TraceEvent\n        {\n            TimestampMicro = NowMicroseconds(),\n            ThreadId = Environment.CurrentManagedThreadId,\n            Category = TraceCategory.Invoke,\n            Phase = TracePhase.End,\n            Name = (TraceName)@delegate.Method.MethodHandle.Value,\n        };\n        Record(ref evt);\n    }\n\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    internal static void ProfileEnd(TraceName name, TraceCategory cat = TraceCategory.Solver)\n    {\n        var evt = new TraceEvent\n        {\n            TimestampMicro = NowMicroseconds(),\n            ThreadId = Environment.CurrentManagedThreadId,\n            Category = cat,\n            Phase = TracePhase.End,\n            Name = name\n        };\n        Record(ref evt);\n    }\n\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    internal static void ProfileEvent(TraceName name, TraceCategory cat = TraceCategory.Solver)\n    {\n        var evt = new TraceEvent\n        {\n            TimestampMicro = NowMicroseconds(),\n            ThreadId = Environment.CurrentManagedThreadId,\n            Category = cat,\n            Phase = TracePhase.Instant,\n            Name = name\n        };\n        Record(ref evt);\n    }\n\n    /// <summary>\n    /// Starts measuring the duration of a profiling scope on the current thread.\n    /// </summary>\n    /// <remarks>\n    /// Only one scope measurement can be active per thread at a time. Nested calls to\n    /// <see cref=\"ProfileScopeBegin\"/> will overwrite the previous start timestamp,\n    /// resulting in incorrect duration measurements.\n    /// </remarks>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    internal static void ProfileScopeBegin()\n    {\n        _scopeStartMicro = NowMicroseconds();\n    }\n\n    /// <summary>\n    /// Ends the current profiling scope and records its duration if it exceeds the given threshold.\n    /// </summary>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    internal static void ProfileScopeEnd(\n        TraceName name = TraceName.Scope,\n        TraceCategory cat = TraceCategory.Solver,\n        double thresholdMicroseconds = 100.0)\n    {\n        double end = NowMicroseconds();\n        double dur = end - _scopeStartMicro;\n        if (dur < thresholdMicroseconds) return;\n\n        var evt = new TraceEvent\n        {\n            TimestampMicro = _scopeStartMicro,\n            DurationMicro = dur,\n            ThreadId = Environment.CurrentManagedThreadId,\n            Category = cat,\n            Phase = TracePhase.Complete,\n            Name = name\n        };\n        Record(ref evt);\n    }\n\n    private sealed class GcNotification\n    {\n        ~GcNotification()\n        {\n            var evt = new TraceEvent\n            {\n                TimestampMicro = NowMicroseconds(),\n                ThreadId = Environment.CurrentManagedThreadId,\n                Category = TraceCategory.Runtime,\n                Phase = TracePhase.Instant,\n                Name = TraceName.Gc\n            };\n            Record(ref evt);\n\n            if (!Environment.HasShutdownStarted)\n            {\n                _ = new GcNotification();\n            }\n        }\n    }\n\n    private static void StartGcTracing()\n    {\n        _ = new GcNotification();\n    }\n\n    /// <summary>\n    /// Writes all recorded trace events to a JSON file.\n    /// </summary>\n    /// <param name=\"filename\">The file path to write to. Defaults to <c>trace.json</c>.</param>\n    /// <param name=\"clear\">\n    /// If <see langword=\"true\"/>, all recorded data is cleared after writing.\n    /// If <see langword=\"false\"/>, recorded data remains in memory.\n    /// </param>\n    /// <remarks>\n    /// The output file uses the Chrome Trace Event format and can be opened in\n    /// <a href=\"chrome://tracing\">chrome://tracing</a> or compatible viewers.\n    /// </remarks>\n    public static void WriteToFile(string filename = DefaultPath, bool clear = true)\n    {\n        using var writer = new StreamWriter(filename, false, new UTF8Encoding(false));\n        writer.Write('[');\n\n        bool first = true;\n        var inv = CultureInfo.InvariantCulture;\n\n        foreach (var buf in allBuffers)\n        {\n            var arr = buf.Events;\n            int count = buf.Count;\n\n            for (int i = 0; i < count; i++)\n            {\n                ref readonly var e = ref arr[i];\n                if (!first) writer.Write(',');\n                first = false;\n\n                writer.Write('{');\n\n                writer.Write(\"\\\"name\\\":\\\"\");\n\n                if (e.Category == TraceCategory.Invoke)\n                {\n                    var method = System.Reflection.MethodBase.GetMethodFromHandle(\n                        RuntimeMethodHandle.FromIntPtr((IntPtr)e.Name))!.Name;\n                    writer.Write(method);\n                }\n                else\n                {\n                    writer.Write(e.Name.ToString());\n                }\n\n                writer.Write(\"\\\",\");\n\n                writer.Write(\"\\\"cat\\\":\\\"\");\n                writer.Write(e.Category.ToString());\n                writer.Write(\"\\\",\");\n\n                writer.Write(\"\\\"ph\\\":\\\"\");\n                writer.Write(PhaseToChar(e.Phase));\n                writer.Write(\"\\\",\");\n\n                writer.Write(\"\\\"ts\\\":\");\n                writer.Write(e.TimestampMicro.ToString(inv));\n\n                if (e.Phase == TracePhase.Complete)\n                {\n                    writer.Write(\",\\\"dur\\\":\");\n                    writer.Write(e.DurationMicro.ToString(inv));\n                }\n\n                writer.Write(\",\\\"pid\\\":1,\\\"tid\\\":\");\n                writer.Write(e.ThreadId);\n\n                writer.Write('}');\n            }\n\n            if (clear)\n            {\n                buf.Count = 0;\n            }\n        }\n\n        writer.Write(']');\n\n        if (clear)\n        {\n            foreach (var buf in allBuffers)\n            {\n                if (buf.Events.Length > InitialCapacity)\n                {\n                    var old = buf.Events;\n                    buf.Events = ArrayPool<TraceEvent>.Shared.Rent(InitialCapacity);\n                    buf.Count = 0;\n                    ArrayPool<TraceEvent>.Shared.Return(old, clearArray: false);\n                }\n            }\n        }\n    }\n\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    private static char PhaseToChar(TracePhase p) => p switch\n    {\n        TracePhase.Begin => 'B',\n        TracePhase.End => 'E',\n        TracePhase.Instant => 'i',\n        TracePhase.Complete => 'X',\n        _ => '?'\n    };\n}\n\n#else\n\ninternal static class Tracer\n{\n    [Conditional(\"_NEVER\")]\n    internal static void ProfileBegin(TraceName name, TraceCategory cat = TraceCategory.Solver)\n    {\n    }\n\n    [Conditional(\"_NEVER\")]\n    internal static void ProfileEnd(TraceName name, TraceCategory cat = TraceCategory.Solver)\n    {\n    }\n\n    [Conditional(\"_NEVER\")]\n    internal static void ProfileEvent(TraceName name, TraceCategory cat = TraceCategory.Solver)\n    {\n    }\n\n    [Conditional(\"_NEVER\")]\n    internal static void ProfileScopeBegin()\n    {\n    }\n\n    [Conditional(\"_NEVER\")]\n    internal static void ProfileBegin(Delegate @delegate)\n    {\n    }\n\n    [Conditional(\"_NEVER\")]\n    internal static void ProfileEnd(Delegate @delegate)\n    {\n    }\n\n    [Conditional(\"_NEVER\")]\n    internal static void ProfileScopeEnd(TraceName name = TraceName.Scope,\n        TraceCategory cat = TraceCategory.Solver,\n        double thresholdMicroseconds = 100.0)\n    {\n\n    }\n}\n\n#endif"
  },
  {
    "path": "src/Jitter2/Unmanaged/MemoryHelper.cs",
    "content": "/*\n * Jitter2 Physics Library\n * (c) Thorben Linneweber and contributors\n * SPDX-License-Identifier: MIT\n */\n\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\nnamespace Jitter2.Unmanaged;\n\n/// <summary>\n/// Provides helper methods for allocating and managing unmanaged memory.\n/// </summary>\n/// <remarks>\n/// <para>\n/// <b>Safety:</b> All pointers returned by allocation methods must be freed using\n/// the corresponding <see cref=\"Free(void*)\"/> or <see cref=\"AlignedFree\"/> method.\n/// Failure to do so will result in memory leaks.\n/// </para>\n/// <para>\n/// <b>Threading:</b> These methods are thread-safe, but the caller is responsible\n/// for synchronizing access to the allocated memory.\n/// </para>\n/// </remarks>\npublic static unsafe class MemoryHelper\n{\n    /// <summary>\n    /// Represents an integer value isolated in memory to prevent false sharing\n    /// between multiple threads operating on adjacent data.\n    /// </summary>\n    /// <remarks>\n    /// The struct is padded to 132 bytes (64-byte padding on each side of the value)\n    /// to ensure the <see cref=\"Value\"/> field resides on its own cache line.\n    /// </remarks>\n    [StructLayout(LayoutKind.Explicit, Size = 132)]\n    public struct IsolatedInt\n    {\n        [FieldOffset(0)]\n        private fixed byte pad0[64];\n\n        [FieldOffset(64)]\n        public int Value;\n\n        [FieldOffset(68)]\n        private fixed byte pad1[64];\n    }\n\n    /// <summary>\n    /// A memory block with a size equivalent to six instances of the <see cref=\"Real\"/> type.\n    /// </summary>\n    /// <remarks>\n    /// The struct uses sequential layout and a fixed size to ensure consistent memory alignment and layout.\n    /// </remarks>\n    [StructLayout(LayoutKind.Sequential, Size = 6 * sizeof(Real))]\n    public struct MemBlock6Real { }\n\n    /// <summary>\n    /// A memory block with a size equivalent to nine instances of the <see cref=\"Real\"/> type.\n    /// </summary>\n    /// <remarks>\n    /// The struct uses sequential layout and a fixed size to ensure consistent memory alignment and layout.\n    /// </remarks>\n    [StructLayout(LayoutKind.Sequential, Size = 9 * sizeof(Real))]\n    public struct MemBlock9Real { }\n\n    /// <summary>\n    /// A memory block with a size equivalent to twelve instances of the <see cref=\"Real\"/> type.\n    /// </summary>\n    /// <remarks>\n    /// The struct uses sequential layout and a fixed size to ensure consistent memory alignment and layout.\n    /// </remarks>\n    [StructLayout(LayoutKind.Sequential, Size = 12 * sizeof(Real))]\n    public struct MemBlock12Real { }\n\n    /// <summary>\n    /// A memory block with a size equivalent to sixteen instances of the <see cref=\"Real\"/> type.\n    /// </summary>\n    /// <remarks>\n    /// The struct uses sequential layout and a fixed size to ensure consistent memory alignment and layout.\n    /// </remarks>\n    [StructLayout(LayoutKind.Sequential, Size = 16 * sizeof(Real))]\n    public struct MemBlock16Real { }\n\n    /// <summary>\n    /// Allocates a block of unmanaged memory for an array of the specified type.\n    /// </summary>\n    /// <typeparam name=\"T\">The unmanaged type of the elements to allocate memory for.</typeparam>\n    /// <param name=\"num\">The number of elements to allocate memory for.</param>\n    /// <returns>A pointer to the allocated memory block.</returns>\n    /// <remarks>\n    /// <b>Safety:</b> The caller must free the returned pointer using <see cref=\"Free{T}\"/>.\n    /// The memory is not zero-initialized.\n    /// </remarks>\n    public static T* AllocateHeap<T>(int num) where T : unmanaged\n    {\n        return (T*)AllocateHeap(num * sizeof(T));\n    }\n\n    /// <summary>\n    /// Allocates a block of aligned unmanaged memory for an array of the specified type.\n    /// </summary>\n    /// <typeparam name=\"T\">The unmanaged type of the elements to allocate memory for.</typeparam>\n    /// <param name=\"num\">The number of elements to allocate memory for.</param>\n    /// <param name=\"alignment\">The memory alignment in bytes (must be a power of 2).</param>\n    /// <returns>A pointer to the allocated memory block.</returns>\n    /// <remarks>\n    /// <b>Safety:</b> The caller must free the returned pointer using <see cref=\"AlignedFree\"/>.\n    /// The memory is not zero-initialized.\n    /// </remarks>\n    public static T* AlignedAllocateHeap<T>(int num, int alignment) where T : unmanaged\n    {\n        return (T*)AlignedAllocateHeap(num * sizeof(T), alignment);\n    }\n\n    /// <summary>\n    /// Frees a block of unmanaged memory previously allocated for an array of the specified type.\n    /// </summary>\n    /// <typeparam name=\"T\">The unmanaged type of the elements in the memory block.</typeparam>\n    /// <param name=\"ptr\">A pointer to the memory block to free.</param>\n    public static void Free<T>(T* ptr) where T : unmanaged\n    {\n        Free((void*)ptr);\n    }\n\n    /// <summary>\n    /// Allocates a block of unmanaged memory of the specified length in bytes.\n    /// </summary>\n    /// <param name=\"len\">The length of the memory block to allocate, in bytes.</param>\n    /// <returns>A pointer to the allocated memory block.</returns>\n    /// <remarks>\n    /// <b>Safety:</b> The caller must free the returned pointer using <see cref=\"Free(void*)\"/>.\n    /// The memory is not zero-initialized.\n    /// </remarks>\n    public static void* AllocateHeap(int len) => NativeMemory.Alloc((nuint)len);\n\n    /// <summary>\n    /// Allocates a block of aligned unmanaged memory of the specified length in bytes.\n    /// </summary>\n    /// <param name=\"len\">The length of the memory block to allocate, in bytes.</param>\n    /// <param name=\"alignment\">The memory alignment in bytes (must be a power of 2).</param>\n    /// <returns>A pointer to the allocated memory block.</returns>\n    /// <remarks>\n    /// <b>Safety:</b> The caller must free the returned pointer using <see cref=\"AlignedFree\"/>.\n    /// The memory is not zero-initialized.\n    /// </remarks>\n    public static void* AlignedAllocateHeap(int len, int alignment) => NativeMemory.AlignedAlloc((nuint)len, (nuint)alignment);\n\n    /// <summary>\n    /// Frees a block of unmanaged memory previously allocated.\n    /// </summary>\n    /// <param name=\"ptr\">A pointer to the memory block to free.</param>\n    public static void Free(void* ptr) => NativeMemory.Free(ptr);\n\n    /// <summary>\n    /// Frees a block of aligned unmanaged memory previously allocated.\n    /// </summary>\n    /// <param name=\"ptr\">A pointer to the aligned memory block to free.</param>\n    public static void AlignedFree(void* ptr) => NativeMemory.AlignedFree(ptr);\n\n    /// <summary>\n    /// Zeros out unmanaged memory.\n    /// </summary>\n    /// <param name=\"buffer\">A pointer to the memory block to zero out.</param>\n    /// <param name=\"len\">The length of the memory block to zero out, in bytes.</param>\n    public static void MemSet(void* buffer, int len)  => Unsafe.InitBlock(buffer, 0, (uint)len);\n}"
  },
  {
    "path": "src/Jitter2/Unmanaged/PartitionedBuffer.cs",
    "content": "/*\n * Jitter2 Physics Library\n * (c) Thorben Linneweber and contributors\n * SPDX-License-Identifier: MIT\n */\n\nusing System;\nusing System.Diagnostics;\nusing System.Runtime.CompilerServices;\nusing Jitter2.Parallelization;\n\nnamespace Jitter2.Unmanaged;\n\n/// <summary>\n/// Handle for an unmanaged object stored in a <see cref=\"PartitionedBuffer{T}\"/>.\n/// The handle remains stable even when the underlying memory is resized.\n/// </summary>\n/// <typeparam name=\"T\">The unmanaged type of the data.</typeparam>\n/// <remarks>\n/// <para>\n/// <b>Validity:</b> A handle is valid only while the owning <see cref=\"PartitionedBuffer{T}\"/>\n/// exists and the element has not been freed via <see cref=\"PartitionedBuffer{T}.Free\"/>.\n/// </para>\n/// <para>\n/// <b>Do not cache</b> the <see cref=\"Data\"/> reference across operations that may resize\n/// the buffer. Use the handle to obtain a fresh reference when needed.\n/// </para>\n/// </remarks>\npublic readonly unsafe struct JHandle<T> : IEquatable<JHandle<T>> where T : unmanaged\n{\n    /// <summary>\n    /// A handle representing a null/invalid reference.\n    /// </summary>\n    public static readonly JHandle<T> Zero = new(null);\n\n    internal readonly T** Pointer;\n\n    /// <summary>\n    /// Gets a reference to the underlying data.\n    /// </summary>\n    public ref T Data => ref Unsafe.AsRef<T>(*Pointer);\n\n    internal JHandle(T** ptr)\n    {\n        Pointer = ptr;\n    }\n\n    /// <summary>\n    /// Gets a value indicating whether this handle is null/invalid.\n    /// </summary>\n    public readonly bool IsZero => Pointer == null;\n\n    /// <summary>\n    /// Reinterprets a handle as a handle to a different type. Both types must have compatible layouts.\n    /// </summary>\n    /// <typeparam name=\"TConvert\">The target unmanaged type to reinterpret as.</typeparam>\n    /// <param name=\"handle\">The handle to reinterpret.</param>\n    /// <returns>A handle reinterpreted as the target type.</returns>\n    /// <remarks>\n    /// <b>Safety:</b> The caller must ensure that <typeparamref name=\"T\"/> and <typeparamref name=\"TConvert\"/>\n    /// have compatible memory layouts. No runtime validation is performed.\n    /// </remarks>\n    public static JHandle<TConvert> AsHandle<TConvert>(JHandle<T> handle) where TConvert : unmanaged\n    {\n        return new JHandle<TConvert>((TConvert**)handle.Pointer);\n    }\n\n    public readonly bool Equals(JHandle<T> other)\n    {\n        return Pointer == other.Pointer;\n    }\n\n    public readonly override bool Equals(object? obj)\n    {\n        return obj is JHandle<T> other && Equals(other);\n    }\n\n    public readonly override int GetHashCode()\n    {\n        return ((nint)Pointer).GetHashCode();\n    }\n\n    public static bool operator ==(JHandle<T> left, JHandle<T> right)\n    {\n        return left.Equals(right);\n    }\n\n    public static bool operator !=(JHandle<T> left, JHandle<T> right)\n    {\n        return !(left == right);\n    }\n}\n\n/// <summary>\n/// Manages memory for unmanaged structs, storing them sequentially in contiguous memory blocks.\n/// Each struct can either be active or inactive.\n/// </summary>\n/// <typeparam name=\"T\">The unmanaged type to store. Must be at least 4 bytes in size.</typeparam>\n/// <remarks>\n/// <para>\n/// <b>Memory Layout Requirement:</b> The type <typeparamref name=\"T\"/> must reserve its first\n/// 4 bytes (sizeof(int)) for internal bookkeeping. This memory region is used to store\n/// the stable ID that maps the data back to its <see cref=\"JHandle{T}\"/>.\n/// </para>\n/// <para>\n/// Do not modify these bytes manually. A compatible struct should look like this:\n/// <code>\n/// [StructLayout(LayoutKind.Sequential)]\n/// public struct RigidBodyData\n/// {\n///     private readonly int _internalIndex; // Reserved by PartitionedBuffer\n///\n///     public JVector Position;\n///     public JQuaternion Orientation;\n///     // ... other fields\n/// }\n/// </code>\n/// </para>\n/// <para>\n/// <b>Threading:</b> Concurrent calls to <see cref=\"Allocate\"/> may trigger a resize. Use\n/// <see cref=\"ResizeLock\"/> to synchronize access when reading data concurrently with allocations.\n/// </para>\n/// <para>\n/// <b>Disposal:</b> This class owns unmanaged memory and must be disposed to avoid memory leaks.\n/// </para>\n/// </remarks>\npublic sealed unsafe class PartitionedBuffer<T> : IDisposable where T : unmanaged\n{\n    /// <summary>\n    /// Exception thrown when the buffer's internal indirection table reaches its maximum capacity.\n    /// </summary>\n    public class MaximumSizeException : Exception\n    {\n        public MaximumSizeException() { }\n        public MaximumSizeException(string message) : base(message) { }\n        public MaximumSizeException(string message, Exception inner) : base(message, inner) { }\n    }\n\n    // Paging constants for the indirection table\n    private const int PageSize = 4096;\n    private const int PageMask = PageSize - 1;\n    private const int PageShift = 12; // 2^12 = 4096\n    private const int MaxPages = 1024 * 16; // Capacity for ~67 million handles\n\n    private T* memory;\n    private T*** pages; // Array of pointers to pages (indirection table)\n\n    private int activeCount;\n    private int size;\n    private int pageCount;\n    private bool disposed;\n\n    /// <summary>\n    /// Reader-writer lock. Locked by a writer when a resize occurs.\n    /// Resizing moves the contiguous data memory addresses. Use a reader lock\n    /// to access data if concurrent calls to Allocate are made.\n    /// </summary>\n    public ReaderWriterLock ResizeLock;\n\n    /// <summary>\n    /// Gets the number of allocated elements in the buffer.\n    /// </summary>\n    public int Count { get; private set; }\n\n    /// <summary>\n    /// Indicates whether the allocated memory is aligned to a 64-byte boundary.\n    /// </summary>\n    public bool Aligned64 { get; }\n\n    /// <summary>\n    /// Initializes a new instance of the class.\n    /// </summary>\n    /// <param name=\"initialSize\">The initial size of the contiguous memory block.</param>\n    /// <param name=\"aligned64\">Indicates whether the memory should be aligned to 64 bytes.</param>\n    public PartitionedBuffer(int initialSize = 1024, bool aligned64 = false)\n    {\n        if (sizeof(T) < sizeof(int))\n        {\n            throw new ArgumentException($\"Type {typeof(T).Name} is too small. It must be at least {sizeof(int)} bytes to store the internal ID.\");\n        }\n\n        size = initialSize;\n\n        // Allocate the master list of page pointers\n        pages = (T***)MemoryHelper.AllocateHeap(MaxPages * sizeof(IntPtr));\n\n        if (aligned64)\n        {\n            try { memory = (T*)MemoryHelper.AlignedAllocateHeap(size * sizeof(T), 64); }\n            catch\n            {\n                Logger.Warning(\"Could not allocate aligned memory. Falling back to unaligned memory.\");\n                aligned64 = false;\n            }\n        }\n\n        if (!aligned64)\n        {\n            memory = (T*)MemoryHelper.AllocateHeap(size * sizeof(T));\n        }\n\n        this.Aligned64 = aligned64;\n\n        EnsureHandleCapacity(size);\n\n        // Initialize ID slots in the memory\n        for (int i = 0; i < size; i++)\n        {\n            Unsafe.AsRef<int>(&memory[i]) = i;\n        }\n    }\n\n    /// <summary>\n    /// Returns the total amount of unmanaged memory allocated in bytes (data + indirection pages + master page table).\n    /// </summary>\n    public long TotalBytesAllocated => (long)size * sizeof(T) + (long)pageCount * PageSize * sizeof(IntPtr) + MaxPages * sizeof(IntPtr);\n\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    private T** GetHandleSlot(int id)\n    {\n        return &pages[id >> PageShift][id & PageMask];\n    }\n\n    private void EnsureHandleCapacity(int requiredCount)\n    {\n        while (pageCount * PageSize < requiredCount)\n        {\n            if (pageCount >= MaxPages)\n                throw new MaximumSizeException(\"Internal indirection table limit reached.\");\n\n            pages[pageCount] = (T**)MemoryHelper.AllocateHeap(PageSize * sizeof(IntPtr));\n            pageCount++;\n        }\n    }\n\n    /// <summary>\n    /// Removes the associated native structure from the buffer and invalidates the handle.\n    /// </summary>\n    /// <param name=\"handle\">The handle to free.</param>\n    /// <remarks>\n    /// <b>Safety:</b> After calling this method, the handle becomes invalid.\n    /// Do not use the handle or any cached references to its data.\n    /// </remarks>\n    public void Free(JHandle<T> handle)\n    {\n        Debug.Assert(!disposed);\n\n        MoveToInactive(handle);\n\n        Count -= 1;\n        // Swap with the last element\n        (**handle.Pointer, memory[Count]) = (memory[Count], **handle.Pointer);\n\n        // Update the handle slots for the two swapped elements\n        *GetHandleSlot(Unsafe.Read<int>(*handle.Pointer)) = *handle.Pointer;\n        *GetHandleSlot(Unsafe.Read<int>(&memory[Count])) = &memory[Count];\n    }\n\n    /// <summary>\n    /// A span for all elements marked as active.\n    /// </summary>\n    /// <remarks>\n    /// <b>Do not cache:</b> This span is invalidated when the buffer resizes.\n    /// </remarks>\n    public Span<T> Active => new(memory, activeCount);\n\n    /// <summary>\n    /// A span for all elements marked as inactive.\n    /// </summary>\n    /// <remarks>\n    /// <b>Do not cache:</b> This span is invalidated when the buffer resizes.\n    /// </remarks>\n    public Span<T> Inactive => new(&memory[activeCount], Count - activeCount);\n\n    /// <summary>\n    /// A span for all elements.\n    /// </summary>\n    /// <remarks>\n    /// <b>Do not cache:</b> This span is invalidated when the buffer resizes.\n    /// </remarks>\n    public Span<T> Elements => new(memory, Count);\n\n    /// <summary>\n    /// Returns the handle of the object. O(1) operation.\n    /// </summary>\n    /// <param name=\"t\">A reference to the element in the buffer.</param>\n    /// <returns>The handle for the element.</returns>\n    public JHandle<T> GetHandle(ref T t)\n    {\n        return new JHandle<T>(GetHandleSlot(Unsafe.Read<int>(Unsafe.AsPointer(ref t))));\n    }\n\n    /// <summary>\n    /// Checks if the element is stored as an active element. O(1).\n    /// </summary>\n    /// <param name=\"handle\">The handle to check.</param>\n    /// <returns><see langword=\"true\"/> if the element is active; otherwise, <see langword=\"false\"/>.</returns>\n    public bool IsActive(JHandle<T> handle)\n    {\n        Debug.Assert(*handle.Pointer - memory < Count);\n        return (nint)(*handle.Pointer) - (nint)memory < activeCount * sizeof(T);\n    }\n\n    /// <summary>\n    /// Moves an object from inactive to active.\n    /// </summary>\n    /// <param name=\"handle\">The handle of the element to move.</param>\n    public void MoveToActive(JHandle<T> handle)\n    {\n        Debug.Assert(*handle.Pointer - memory < Count);\n\n        if ((nint)(*handle.Pointer) - (nint)memory < activeCount * sizeof(T)) return;\n\n        (**handle.Pointer, memory[activeCount]) = (memory[activeCount], **handle.Pointer);\n\n        *GetHandleSlot(Unsafe.Read<int>(*handle.Pointer)) = *handle.Pointer;\n        *GetHandleSlot(Unsafe.Read<int>(&memory[activeCount])) = &memory[activeCount];\n\n        activeCount += 1;\n    }\n\n    /// <summary>\n    /// Moves an object from active to inactive.\n    /// </summary>\n    /// <param name=\"handle\">The handle of the element to move.</param>\n    public void MoveToInactive(JHandle<T> handle)\n    {\n        if ((nint)(*handle.Pointer) - (nint)memory >= activeCount * sizeof(T)) return;\n\n        activeCount -= 1;\n        (**handle.Pointer, memory[activeCount]) = (memory[activeCount], **handle.Pointer);\n\n        *GetHandleSlot(Unsafe.Read<int>(*handle.Pointer)) = *handle.Pointer;\n        *GetHandleSlot(Unsafe.Read<int>(&memory[activeCount])) = &memory[activeCount];\n    }\n\n    /// <summary>\n    /// Swap two entries based on their index. Adjusts handles accordingly.\n    /// </summary>\n    /// <param name=\"i\">The index of the first element.</param>\n    /// <param name=\"j\">The index of the second element.</param>\n    public void Swap(int i, int j)\n    {\n        (memory[i], memory[j]) = (memory[j], memory[i]);\n\n        *GetHandleSlot(Unsafe.Read<int>(&memory[i])) = &memory[i];\n        *GetHandleSlot(Unsafe.Read<int>(&memory[j])) = &memory[j];\n    }\n\n    /// <summary>\n    /// Gets the index of the element referred to by the handle.\n    /// </summary>\n    /// <param name=\"handle\">The handle to get the index for.</param>\n    /// <returns>The index of the element in the buffer.</returns>\n    public int GetIndex(JHandle<T> handle)\n    {\n        return (int)(((nint)(*handle.Pointer) - (nint)memory) / sizeof(T));\n    }\n\n    /// <summary>\n    /// Allocates an unmanaged object. Growth is dynamic.\n    /// </summary>\n    /// <param name=\"active\">If <see langword=\"true\"/>, the element is added to the active partition.</param>\n    /// <param name=\"clear\">If <see langword=\"true\"/>, the element's memory (excluding the internal ID) is zeroed.</param>\n    /// <returns>A handle to the newly allocated element.</returns>\n    /// <remarks>\n    /// <b>Threading:</b> This method may resize the buffer, which moves all data. Use\n    /// <see cref=\"ResizeLock\"/> when calling concurrently with data access.\n    /// </remarks>\n    public JHandle<T> Allocate(bool active = false, bool clear = false)\n    {\n        Debug.Assert(!disposed);\n\n        if (Count == size)\n        {\n            ResizeLock.EnterWriteLock();\n\n            int oldSize = size;\n            size *= 2; // Dynamic doubling\n\n            T* oldMemory = memory;\n\n            if (Aligned64) memory = (T*)MemoryHelper.AlignedAllocateHeap(size * sizeof(T), 64);\n            else memory = (T*)MemoryHelper.AllocateHeap(size * sizeof(T));\n\n            // Ensure handles are ready for the new memory range\n            EnsureHandleCapacity(size);\n\n            for (int i = 0; i < oldSize; i++)\n            {\n                memory[i] = oldMemory[i];\n                // Update stable pointers to the new memory location\n                *GetHandleSlot(Unsafe.Read<int>(&memory[i])) = &memory[i];\n            }\n\n            for (int i = oldSize; i < size; i++)\n            {\n                Unsafe.AsRef<int>(&memory[i]) = i;\n            }\n\n            if (Aligned64) MemoryHelper.AlignedFree(oldMemory);\n            else MemoryHelper.Free(oldMemory);\n\n            ResizeLock.ExitWriteLock();\n        }\n\n        int hdlId = Unsafe.Read<int>(&memory[Count]);\n        T** slot = GetHandleSlot(hdlId);\n        *slot = &memory[Count];\n\n        var handle = new JHandle<T>(slot);\n\n        if (clear)\n        {\n            // Skip the first 4 bytes (the ID) when clearing\n            MemoryHelper.MemSet((byte*)*slot + sizeof(int), sizeof(T) - sizeof(int));\n        }\n\n        Count += 1;\n        if (active) MoveToActive(handle);\n\n        return handle;\n    }\n\n    private void FreeResources()\n    {\n        if (!disposed)\n        {\n            for (int i = 0; i < pageCount; i++)\n            {\n                MemoryHelper.Free(pages[i]);\n            }\n            MemoryHelper.Free(pages);\n            pages = (T***)0;\n\n            if (Aligned64) MemoryHelper.AlignedFree(memory);\n            else MemoryHelper.Free(memory);\n            memory = (T*)0;\n\n            disposed = true;\n        }\n    }\n\n    ~PartitionedBuffer() => FreeResources();\n\n    public void Dispose()\n    {\n        FreeResources();\n        GC.SuppressFinalize(this);\n    }\n}"
  },
  {
    "path": "src/Jitter2/World.Detect.cs",
    "content": "/*\n * Jitter2 Physics Library\n * (c) Thorben Linneweber and contributors\n * SPDX-License-Identifier: MIT\n */\n\nusing System;\nusing System.Diagnostics;\nusing System.Diagnostics.CodeAnalysis;\nusing System.Runtime.CompilerServices;\nusing Jitter2.Collision;\nusing Jitter2.Collision.Shapes;\nusing Jitter2.Dynamics;\nusing Jitter2.LinearMath;\n\nnamespace Jitter2;\n\npublic sealed partial class World\n{\n    /// <summary>\n    /// Thrown when the narrow phase encounters a pair of proxy types it cannot process.\n    /// </summary>\n    /// <remarks>\n    /// This typically indicates that non-<see cref=\"RigidBodyShape\"/> proxies were inserted into the\n    /// world's <see cref=\"DynamicTree\"/>. Use <see cref=\"BroadPhaseFilter\"/> to filter such pairs,\n    /// or ensure only supported proxy types are added.\n    /// </remarks>\n    public class InvalidCollisionTypeException(Type proxyA, Type proxyB) : Exception(\n        $\"Don't know how to handle collision between {proxyA} and {proxyB}.\" +\n        $\" Register a BroadPhaseFilter to handle and/or filter out these collision types.\");\n\n    /// <summary>\n    /// Hook into the narrow-phase collision detection pipeline.\n    /// The default instance is of type <see cref=\"TriangleEdgeCollisionFilter\"/>.\n    /// </summary>\n    /// <remarks>\n    /// Use this to intercept collisions after contact generation, modify contact data,\n    /// or implement custom collision responses. When <see cref=\"Step(Real, bool)\"/> is called\n    /// with <c>multiThread=true</c>, this may be invoked concurrently. Implementations must be thread-safe.\n    /// </remarks>\n    public INarrowPhaseFilter? NarrowPhaseFilter { get; set; } = new TriangleEdgeCollisionFilter();\n\n    /// <summary>\n    /// Hook into the broadphase collision detection pipeline. The default value is null.\n    /// </summary>\n    /// <remarks>\n    /// Use this to intercept shape pairs before narrow-phase detection, implement custom collision layers,\n    /// or handle collisions for custom proxy types. When <see cref=\"Step(Real, bool)\"/> is called\n    /// with <c>multiThread=true</c>, this may be invoked concurrently. Implementations must be thread-safe.\n    /// </remarks>\n    public IBroadPhaseFilter? BroadPhaseFilter { get; set; }\n\n    /// <summary>\n    /// Enables the generation of additional contacts for flat surfaces that are in contact.\n    /// Traditionally, the collision system reports the deepest collision point between two objects.\n    /// A full contact manifold is then generated over several time steps using contact caching, which\n    /// can be unstable. This method attempts to build a fuller or complete contact manifold within a single time step.\n    /// </summary>\n    public bool EnableAuxiliaryContactPoints { set; get; } = true;\n\n    /// <summary>\n    /// When enabled (the default), contact points and their accumulated impulses are cached between\n    /// frames. This allows the solver to warm-start from the previous solution and enables the\n    /// manifold to grow over several steps, which improves stability for resting contacts.\n    /// When disabled, all contact data is discarded at the end of each frame and every contact is\n    /// treated as brand-new. Disabling this removes all frame-to-frame contact memory at the cost\n    /// of solver convergence speed.\n    /// </summary>\n    public bool PersistentContactManifold { get; set; } = true;\n\n    /// <summary>\n    /// A speculative contact slows a body down such that it does not penetrate or tunnel through\n    /// an obstacle within one frame. The <see cref=\"SpeculativeRelaxationFactor\"/> scales the\n    /// slowdown, ranging from 0 (where the body stops immediately during this frame) to 1 (where the body and the\n    /// obstacle just touch after the next velocity integration). A value below 1 is preferred, as the leftover velocity\n    /// might be enough to trigger another speculative contact in the next frame.\n    /// Default value: 0.9.\n    /// </summary>\n    public Real SpeculativeRelaxationFactor { get; set; } = (Real)0.9;\n\n    /// <summary>\n    /// Speculative contacts are generated when the relative velocity between two bodies exceeds\n    /// the threshold value. To prevent bodies with a diameter of D from tunneling through thin walls, this\n    /// threshold should be set to approximately D / timestep, e.g., 100 for a unit cube and a\n    /// timestep of 0.01.\n    /// Default value: 10.0.\n    /// </summary>\n    public Real SpeculativeVelocityThreshold { get; set; } = (Real)10.0;\n\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    private void Detect(IDynamicTreeProxy proxyA, IDynamicTreeProxy proxyB)\n    {\n        if (BroadPhaseFilter != null)\n        {\n            if (!BroadPhaseFilter.Filter(proxyA, proxyB))\n            {\n                return;\n            }\n        }\n\n        if (proxyA is not RigidBodyShape sA || proxyB is not RigidBodyShape sB)\n        {\n            throw new InvalidCollisionTypeException(proxyA.GetType(), proxyB.GetType());\n        }\n\n        if (sB.ShapeId < sA.ShapeId)\n        {\n            (sA, sB) = (sB, sA);\n        }\n\n        Debug.Assert(sA.RigidBody != sB.RigidBody);\n        Debug.Assert(sA.RigidBody.World == this);\n        Debug.Assert(sB.RigidBody.World == this);\n\n        Debug.Assert(sA.RigidBody != null);\n        Debug.Assert(sB.RigidBody != null);\n\n        if (!sA.RigidBody.Data.IsActive && !sB.RigidBody.Data.IsActive) return;\n\n        if ((sA.RigidBody.Data.MotionType != MotionType.Dynamic) &&\n            (sB.RigidBody.Data.MotionType != MotionType.Dynamic)) return;\n\n        ref RigidBodyData b1 = ref sA.RigidBody.Data;\n        ref RigidBodyData b2 = ref sB.RigidBody.Data;\n\n        bool speculative = sA.RigidBody.EnableSpeculativeContacts || sB.RigidBody.EnableSpeculativeContacts;\n\n        var colliding = NarrowPhase.MprEpa(sA, sB, b1.Orientation, b2.Orientation, b1.Position, b2.Position,\n            out JVector pA, out JVector pB, out JVector normal, out var penetration);\n\n        if (!colliding)\n        {\n            if (!speculative) return;\n\n            JVector dv = sB.RigidBody.Velocity - sA.RigidBody.Velocity;\n\n            if (dv.LengthSquared() < SpeculativeVelocityThreshold * SpeculativeVelocityThreshold) return;\n\n            bool success = NarrowPhase.Sweep(sA, sB, b1.Orientation, b2.Orientation,\n                b1.Position, b2.Position, b1.Velocity, b2.Velocity,\n                out pA, out pB, out normal, out Real toi);\n\n            // ReSharper disable once CompareOfFloatsByEqualityOperator\n            if (!success || toi > stepDt || toi == (Real)0.0) return;\n\n            penetration = normal * (pA - pB) * SpeculativeRelaxationFactor;\n\n            if (NarrowPhaseFilter != null)\n            {\n                if (!NarrowPhaseFilter.Filter(sA, sB, ref pA, ref pB, ref normal, ref penetration))\n                {\n                    return;\n                }\n            }\n\n            RegisterContact(sA.ShapeId, sB.ShapeId, sA.RigidBody, sB.RigidBody,\n                pA, pB, normal, ContactData.SolveMode.Angular);\n\n            return;\n        }\n\n        if (NarrowPhaseFilter != null)\n        {\n            if (!NarrowPhaseFilter.Filter(sA, sB, ref pA, ref pB, ref normal, ref penetration))\n            {\n                return;\n            }\n        }\n\n        if (EnableAuxiliaryContactPoints)\n        {\n            Unsafe.SkipInit(out CollisionManifold manifold);\n            manifold.BuildManifold(sA, sB, pA, pB, normal);\n\n            RegisterContact(sA.ShapeId, sB.ShapeId, sA.RigidBody, sB.RigidBody, normal, ref manifold);\n        }\n        else\n        {\n            RegisterContact(sA.ShapeId, sB.ShapeId, sA.RigidBody, sB.RigidBody, pA, pB, normal);\n        }\n    }\n\n    /// <summary>\n    /// Registers a single contact point into an existing <see cref=\"Arbiter\"/>.\n    /// </summary>\n    /// <remarks>\n    /// This method adds a contact point to the specified <paramref name=\"arbiter\"/>, using the provided contact points\n    /// and normal. All input vectors must be in world space. The <paramref name=\"normal\"/> vector must be normalized.\n    /// This method assumes that the <paramref name=\"arbiter\"/> is already valid and mapped to the correct pair of bodies.\n    /// </remarks>\n    /// <param name=\"arbiter\">The existing <see cref=\"Arbiter\"/> instance to which the contact will be added.</param>\n    /// <param name=\"point1\">The contact point on the first body, in world space.</param>\n    /// <param name=\"point2\">The contact point on the second body, in world space.</param>\n    /// <param name=\"normal\">The contact normal, in world space. Must be normalized.</param>\n    /// <param name=\"removeFlags\">A bitmask of <see cref=\"ContactData.SolveMode\"/> flags to be removed from the full\n    /// contact solution (see <see cref=\"ContactData.SolveMode.Full\"/>).</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public void RegisterContact(Arbiter arbiter, in JVector point1, in JVector point2,\n        in JVector normal, ContactData.SolveMode removeFlags = ContactData.SolveMode.None)\n    {\n        lock (arbiter)\n        {\n            memContacts.ResizeLock.EnterReadLock();\n            if (!PersistentContactManifold) arbiter.Handle.Data.UsageMask = 0;\n            arbiter.Handle.Data.AddContact(point1, point2, normal);\n            arbiter.Handle.Data.ResetMode(removeFlags);\n            memContacts.ResizeLock.ExitReadLock();\n        }\n    }\n\n    /// <summary>\n    /// Registers one or more contact points between two rigid bodies using a <see cref=\"CollisionManifold\"/>,\n    /// creating an <see cref=\"Arbiter\"/> if one does not already exist.\n    /// </summary>\n    /// <remarks>\n    /// This method ensures that contact information between the specified ID pair is tracked by an <see cref=\"Arbiter\"/>.\n    /// If no arbiter exists for the given IDs, one is created using <paramref name=\"body1\"/> and <paramref name=\"body2\"/>.\n    ///\n    /// This method is thread-safe.\n    ///\n    /// <para><b>Note:</b> The order of <paramref name=\"id0\"/> and <paramref name=\"id1\"/> <i>does matter</i>.</para>\n    /// </remarks>\n    /// <param name=\"id0\">The first identifier associated with the contact (e.g., shape or feature ID).</param>\n    /// <param name=\"id1\">The second identifier associated with the contact.</param>\n    /// <param name=\"body1\">The first rigid body involved in the contact.</param>\n    /// <param name=\"body2\">The second rigid body involved in the contact.</param>\n    /// <param name=\"normal\">\n    /// The contact normal, in world space. Must be a unit vector pointing from <paramref name=\"body1\"/> toward <paramref name=\"body2\"/>.\n    /// </param>\n    /// <param name=\"manifold\">A <see cref=\"CollisionManifold\"/> containing contact point pairs in world space.</param>\n    /// <param name=\"removeFlags\">A bitmask of <see cref=\"ContactData.SolveMode\"/> flags to be removed from the full\n    /// contact solution (see <see cref=\"ContactData.SolveMode.Full\"/>).</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public void RegisterContact(ulong id0, ulong id1, RigidBody body1, RigidBody body2, in JVector normal,\n        ref CollisionManifold manifold, ContactData.SolveMode removeFlags = ContactData.SolveMode.None)\n    {\n        GetOrCreateArbiter(id0, id1, body1, body2, out Arbiter arbiter);\n\n        lock (arbiter)\n        {\n            // Do not add contacts while contacts might be resized\n            memContacts.ResizeLock.EnterReadLock();\n\n            if (!PersistentContactManifold) arbiter.Handle.Data.UsageMask = 0;\n            arbiter.Handle.Data.ResetMode(removeFlags);\n\n            ReadOnlySpan<JVector> manifoldA = manifold.ManifoldA;\n            ReadOnlySpan<JVector> manifoldB = manifold.ManifoldB;\n\n            for (int e = 0; e < manifold.Count; e++)\n            {\n                JVector mfA = manifoldA[e];\n                JVector mfB = manifoldB[e];\n                arbiter.Handle.Data.AddContact(mfA, mfB, normal);\n            }\n\n            memContacts.ResizeLock.ExitReadLock();\n        }\n    }\n\n    /// <summary>\n    /// Registers a contact point between two rigid bodies, creating an <see cref=\"Arbiter\"/> if one does not already exist.\n    /// </summary>\n    /// <remarks>\n    /// This method ensures that contact information between the specified ID pair is tracked by an <see cref=\"Arbiter\"/>.\n    /// If no arbiter exists for the given IDs, one is created using <paramref name=\"body1\"/> and <paramref name=\"body2\"/>.\n    /// The provided contact points and normal must be in world space. The <paramref name=\"normal\"/> vector must be normalized.\n    ///\n    /// This method is thread-safe.\n    ///\n    /// <para><b>Note:</b> The order of <paramref name=\"id0\"/> and <paramref name=\"id1\"/> <i>does matter</i>.</para>\n    /// </remarks>\n    /// <param name=\"id0\">The first identifier associated with the contact (e.g., shape or feature ID).</param>\n    /// <param name=\"id1\">The second identifier associated with the contact.</param>\n    /// <param name=\"body1\">The first rigid body involved in the contact.</param>\n    /// <param name=\"body2\">The second rigid body involved in the contact.</param>\n    /// <param name=\"point1\">The contact point on <paramref name=\"body1\"/>, in world space.</param>\n    /// <param name=\"point2\">The contact point on <paramref name=\"body2\"/>, in world space.</param>\n    /// <param name=\"normal\">\n    /// The contact normal, in world space. Must be a unit vector pointing from <paramref name=\"body1\"/> toward <paramref name=\"body2\"/>.\n    /// </param>\n    /// <param name=\"removeFlags\">A bitmask of <see cref=\"ContactData.SolveMode\"/> flags to be removed from the full\n    /// contact solution (see <see cref=\"ContactData.SolveMode.Full\"/>).</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public void RegisterContact(ulong id0, ulong id1, RigidBody body1, RigidBody body2,\n        in JVector point1, in JVector point2, in JVector normal,\n        ContactData.SolveMode removeFlags = ContactData.SolveMode.None)\n    {\n        GetOrCreateArbiter(id0, id1, body1, body2, out Arbiter arbiter);\n        RegisterContact(arbiter, point1, point2, normal, removeFlags);\n    }\n\n    /// <summary>\n    /// Gets an existing <see cref=\"Arbiter\"/> instance for the given pair of IDs.\n    /// </summary>\n    /// <param name=\"id0\">The first identifier (e.g., shape ID).</param>\n    /// <param name=\"id1\">The second identifier.</param>\n    /// <param name=\"arbiter\">The arbiter for the ordered ID pair, or <see langword=\"null\"/> if none exists.</param>\n    /// <returns><see langword=\"true\"/> if an arbiter exists for the ordered ID pair; otherwise, <see langword=\"false\"/>.</returns>\n    /// <remarks>\n    /// The order of <paramref name=\"id0\"/> and <paramref name=\"id1\"/> matters.\n    /// For arbiters created by the engine, <paramref name=\"id0\"/> &lt; <paramref name=\"id1\"/> holds\n    /// for <see cref=\"RigidBodyShape\"/>s.\n    /// </remarks>\n    public bool GetArbiter(ulong id0, ulong id1, [MaybeNullWhen(false)] out Arbiter arbiter)\n    {\n        ArbiterKey arbiterKey = new(id0, id1);\n\n        lock (arbiters.GetLock(arbiterKey))\n        {\n            return arbiters.TryGetValue(arbiterKey, out arbiter!);\n        }\n    }\n\n    /// <summary>\n    /// Gets an existing <see cref=\"Arbiter\"/> instance for the given pair of IDs,\n    /// or creates a new one if none exists.\n    /// </summary>\n    /// <remarks>\n    /// This method ensures there is a unique <see cref=\"Arbiter\"/> for each ordered pair of IDs.\n    /// If an arbiter already exists, it is returned via the <paramref name=\"arbiter\"/> out parameter.\n    /// Otherwise, a new arbiter is allocated, initialized with the provided <paramref name=\"body1\"/> and <paramref name=\"body2\"/>,\n    /// and registered internally. The body arguments are used only when a new arbiter is created.\n    ///\n    /// This method is thread-safe.\n    ///\n    /// <para><b>Note:</b> The order of <paramref name=\"id0\"/> and <paramref name=\"id1\"/> <i>does matter</i>.</para>\n    /// </remarks>\n    /// <param name=\"id0\">The first identifier associated with the contact (e.g., shape or feature ID).</param>\n    /// <param name=\"id1\">The second identifier associated with the contact.</param>\n    /// <param name=\"body1\">The first rigid body. Used only if a new arbiter is created.</param>\n    /// <param name=\"body2\">The second rigid body. Used only if a new arbiter is created.</param>\n    /// <param name=\"arbiter\">The resulting <see cref=\"Arbiter\"/> instance associated with the ID pair.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public void GetOrCreateArbiter(ulong id0, ulong id1, RigidBody body1, RigidBody body2, out Arbiter arbiter)\n    {\n        ArbiterKey arbiterKey = new(id0, id1);\n\n        lock (arbiters.GetLock(arbiterKey))\n        {\n            if (arbiters.TryGetValue(arbiterKey, out arbiter!))\n            {\n                Debug.Assert(arbiter.Body1 == body1 && arbiter.Body2 == body2);\n                return;\n            }\n\n            lock (memContacts)\n            {\n                if (!Arbiter.Pool.TryPop(out arbiter!))\n                {\n                    arbiter = new Arbiter();\n                }\n\n                var handle = memContacts.Allocate(true);\n                arbiter.Handle = handle;\n                handle.Data.Init(body1, body2);\n                handle.Data.Key = arbiterKey;\n                arbiter.Body1 = body1;\n                arbiter.Body2 = body2;\n\n                arbiters.Add(arbiterKey, arbiter);\n                deferredArbiters.Add(arbiter);\n\n                Debug.Assert(memContacts.IsActive(arbiter.Handle));\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/Jitter2/World.Deterministic.cs",
    "content": "/*\n * Jitter2 Physics Library\n * (c) Thorben Linneweber and contributors\n * SPDX-License-Identifier: MIT\n */\n\nusing System;\nusing System.Collections.Generic;\nusing System.Runtime.InteropServices;\nusing Jitter2.Collision;\nusing Jitter2.DataStructures;\nusing Jitter2.Dynamics;\nusing Jitter2.Dynamics.Constraints;\nusing Jitter2.Parallelization;\nusing Jitter2.Unmanaged;\n\nnamespace Jitter2;\n\n/// <summary>\n/// Controls which solver strategy is used during <see cref=\"World.Step\"/>.\n/// </summary>\npublic enum SolveMode\n{\n    /// <summary>\n    /// Standard parallel solver. Contacts and constraints are distributed across threads\n    /// in fixed-size batches. An incremental cache-friendly reorder pass keeps related\n    /// contacts adjacent in memory. Fast, but non-deterministic.\n    /// </summary>\n    Regular,\n\n    /// <summary>\n    /// Island-based deterministic solver. Each simulation island is solved sequentially\n    /// as an independent task. Islands are distributed across threads, so multithreading\n    /// is still used. This mode can be significantly slower than <see cref=\"Regular\"/>.\n    /// </summary>\n    Deterministic\n}\n\npublic sealed partial class World\n{\n    private SolveMode solveMode = Jitter2.SolveMode.Regular;\n\n    /// <summary>\n    /// The solver strategy used during <see cref=\"Step\"/>. Defaults to <see cref=\"Jitter2.SolveMode.Regular\"/>.\n    /// <remarks> <see cref=\"Jitter2.SolveMode.Deterministic\"/> can be significantly slower than\n    /// <see cref=\"Jitter2.SolveMode.Regular\"/>.</remarks>\n    /// </summary>\n    /// <exception cref=\"ArgumentOutOfRangeException\">Thrown when an undefined <see cref=\"Jitter2.SolveMode\"/>\n    /// value is assigned.</exception>\n    public SolveMode SolveMode\n    {\n        get => solveMode;\n        set\n        {\n            if (!Enum.IsDefined(value))\n            {\n                throw new ArgumentOutOfRangeException(nameof(value), value,\n                    \"The solve mode must be a defined enum value.\");\n            }\n\n            solveMode = value;\n        }\n    }\n\n    // -------------------------------------------------------------------------\n    // Internal state for island solving\n    // -------------------------------------------------------------------------\n\n    private struct IslandRange\n    {\n        public int ContactStart, ContactEnd;\n        public int SmallStart, SmallEnd;\n        public int ConstraintStart, ConstraintEnd;\n    }\n\n    private struct ContactEntry\n    {\n        public int Index;\n        public int IslandIndex;\n        public ArbiterKey Key;\n    }\n\n    private struct SmallConstraintEntry\n    {\n        public JHandle<SmallConstraintData> Handle;\n        public int IslandIndex;\n        public ulong ConstraintId;\n    }\n\n    private struct ConstraintEntry\n    {\n        public JHandle<ConstraintData> Handle;\n        public int IslandIndex;\n        public ulong ConstraintId;\n    }\n\n    // Maps RigidBodyData._index → island SetIndex. Cleared each frame; capacity grows on demand but is not trimmed.\n    private readonly Dictionary<int, int> handleToIsland = new();\n\n    // Per-frame island ranges built from the sorted buffers.\n    private readonly List<IslandRange> islandRanges = new();\n    private readonly List<ContactEntry> sortedContacts = new();\n    private readonly List<SmallConstraintEntry> sortedSmallConstraints = new();\n    private readonly List<ConstraintEntry> sortedConstraints = new();\n\n    // -------------------------------------------------------------------------\n    // Build island lookup.\n    // -------------------------------------------------------------------------\n\n    private void BuildIslandLookup()\n    {\n        handleToIsland.Clear();\n\n        // Map each active body's handle-index to its active island partition index.\n        for (int i = 0; i < bodies.ActiveCount; i++)\n        {\n            RigidBody body = bodies[i];\n            handleToIsland.Add(body.Data._index, ((IPartitionedSetIndex)body.Island).SetIndex);\n        }\n    }\n\n    // -------------------------------------------------------------------------\n    // Helpers\n    // -------------------------------------------------------------------------\n\n    private int IslandOf(JHandle<RigidBodyData> b1, JHandle<RigidBodyData> b2)\n    {\n        return b1.Data.MotionType != MotionType.Static\n            ? handleToIsland[b1.Data._index]\n            : handleToIsland[b2.Data._index];\n    }\n\n    // -------------------------------------------------------------------------\n    // Build sorted sidecar lists for contacts and constraints.\n    // -------------------------------------------------------------------------\n\n    private void SortForIslands()\n    {\n        sortedContacts.Clear();\n        var contacts = memContacts.Active;\n        for (int i = 0; i < contacts.Length; i++)\n        {\n            ref ContactData contact = ref contacts[i];\n            sortedContacts.Add(new ContactEntry\n            {\n                Index = i,\n                IslandIndex = IslandOf(contact.Body1, contact.Body2),\n                Key = contact.Key\n            });\n        }\n\n        sortedContacts.Sort(static (a, b) =>\n        {\n            if (a.IslandIndex != b.IslandIndex) return a.IslandIndex.CompareTo(b.IslandIndex);\n            if (a.Key.Key1 != b.Key.Key1) return a.Key.Key1 < b.Key.Key1 ? -1 : 1;\n            if (a.Key.Key2 != b.Key.Key2) return a.Key.Key2 < b.Key.Key2 ? -1 : 1;\n            return 0; // Contacts must be the same. Sort *does* compare objects to themselves.\n        });\n\n        sortedSmallConstraints.Clear();\n        var small = memSmallConstraints.Active;\n        for (int i = 0; i < small.Length; i++)\n        {\n            var handle = memSmallConstraints.GetHandle(ref small[i]);\n            sortedSmallConstraints.Add(new SmallConstraintEntry\n            {\n                Handle = handle,\n                IslandIndex = IslandOf(handle.Data.Body1, handle.Data.Body2),\n                ConstraintId = handle.Data.ConstraintId\n            });\n        }\n\n        sortedConstraints.Clear();\n        var constraints = memConstraints.Active;\n        for (int i = 0; i < constraints.Length; i++)\n        {\n            var handle = memConstraints.GetHandle(ref constraints[i]);\n            sortedConstraints.Add(new ConstraintEntry\n            {\n                Handle = handle,\n                IslandIndex = IslandOf(handle.Data.Body1, handle.Data.Body2),\n                ConstraintId = handle.Data.ConstraintId\n            });\n        }\n\n        // Group constraints by island and use the stored constraint identifier\n        // as a deterministic tie-breaker within each island.\n        sortedSmallConstraints.Sort(static (a, b) =>\n        {\n            if (a.IslandIndex != b.IslandIndex) return a.IslandIndex.CompareTo(b.IslandIndex);\n            return a.ConstraintId.CompareTo(b.ConstraintId);\n        });\n        sortedConstraints.Sort(static (a, b) =>\n        {\n            if (a.IslandIndex != b.IslandIndex) return a.IslandIndex.CompareTo(b.IslandIndex);\n            return a.ConstraintId.CompareTo(b.ConstraintId);\n        });\n    }\n\n    // -------------------------------------------------------------------------\n    // Build per-island ranges from the sorted buffers (single linear pass)\n    // -------------------------------------------------------------------------\n\n    private void BuildIslandRanges()\n    {\n        islandRanges.Clear();\n\n        var contacts = CollectionsMarshal.AsSpan(sortedContacts);\n        var small = CollectionsMarshal.AsSpan(sortedSmallConstraints);\n        var constraints = CollectionsMarshal.AsSpan(sortedConstraints);\n\n        int ci = 0, si = 0, ri = 0;\n\n        while (ci < contacts.Length || si < small.Length || ri < constraints.Length)\n        {\n            // Find the lowest island index among the three current scan positions.\n            int minIsland = int.MaxValue;\n            if (ci < contacts.Length)    minIsland = Math.Min(minIsland, contacts[ci].IslandIndex);\n            if (si < small.Length)       minIsland = Math.Min(minIsland, small[si].IslandIndex);\n            if (ri < constraints.Length) minIsland = Math.Min(minIsland, constraints[ri].IslandIndex);\n\n            IslandRange range = new();\n\n            range.ContactStart = ci;\n            while (ci < contacts.Length    && contacts[ci].IslandIndex    == minIsland) ci++;\n            range.ContactEnd = ci;\n\n            range.SmallStart = si;\n            while (si < small.Length       && small[si].IslandIndex       == minIsland) si++;\n            range.SmallEnd = si;\n\n            range.ConstraintStart = ri;\n            while (ri < constraints.Length && constraints[ri].IslandIndex == minIsland) ri++;\n            range.ConstraintEnd = ri;\n\n            islandRanges.Add(range);\n        }\n    }\n\n    // -------------------------------------------------------------------------\n    // Island solve task: prepare + iterate all contacts/constraints for a range\n    // of islands sequentially. No locking needed — islands are independent.\n    // -------------------------------------------------------------------------\n\n    private void SolveIslandBatch(Parallel.Batch batch)\n    {\n        var allContacts = memContacts.Active;\n        var orderedContacts = CollectionsMarshal.AsSpan(sortedContacts);\n        var allSmall = CollectionsMarshal.AsSpan(sortedSmallConstraints);\n        var allConstraints = CollectionsMarshal.AsSpan(sortedConstraints);\n\n        for (int idx = batch.Start; idx < batch.End; idx++)\n        {\n            IslandRange range = islandRanges[idx];\n\n            var contacts = orderedContacts[range.ContactStart..range.ContactEnd];\n            var small = allSmall[range.SmallStart..range.SmallEnd];\n            var constraints = allConstraints[range.ConstraintStart..range.ConstraintEnd];\n\n            // --- Prepare ---\n\n            for (int i = 0; i < contacts.Length; i++)\n            {\n                ref ContactData c = ref allContacts[contacts[i].Index];\n                c.PrepareForIteration(invStepDt);\n            }\n\n            for (int i = 0; i < constraints.Length; i++)\n            {\n                ref ConstraintData c = ref constraints[i].Handle.Data;\n                if (c.IsEnabled)\n                    c.PrepareForIteration(ref c, invStepDt);\n            }\n\n            for (int i = 0; i < small.Length; i++)\n            {\n                ref SmallConstraintData c = ref small[i].Handle.Data;\n                if (c.IsEnabled)\n                    c.PrepareForIteration(ref c, invStepDt);\n            }\n\n            // --- Iterate ---\n\n            for (int iter = 0; iter < solverIterations; iter++)\n            {\n                for (int i = 0; i < contacts.Length; i++)\n                {\n                    ref ContactData c = ref allContacts[contacts[i].Index];\n                    c.Iterate(true);\n                }\n\n                for (int i = 0; i < constraints.Length; i++)\n                {\n                    ref ConstraintData c = ref constraints[i].Handle.Data;\n                    if (c.IsEnabled)\n                        c.Iterate(ref c, invStepDt);\n                }\n\n                for (int i = 0; i < small.Length; i++)\n                {\n                    ref SmallConstraintData c = ref small[i].Handle.Data;\n                    if (c.IsEnabled)\n                        c.Iterate(ref c, invStepDt);\n                }\n            }\n\n        }\n    }\n\n    private void RelaxIslandBatch(Parallel.Batch batch)\n    {\n        var allContacts = memContacts.Active;\n        var orderedContacts = CollectionsMarshal.AsSpan(sortedContacts);\n\n        for (int idx = batch.Start; idx < batch.End; idx++)\n        {\n            IslandRange range = islandRanges[idx];\n            var contacts = orderedContacts[range.ContactStart..range.ContactEnd];\n\n            for (int iter = 0; iter < velocityRelaxations; iter++)\n            {\n                for (int i = 0; i < contacts.Length; i++)\n                {\n                    ref ContactData c = ref allContacts[contacts[i].Index];\n                    c.Iterate(false);\n                }\n            }\n        }\n    }\n\n    // -------------------------------------------------------------------------\n    // Entry point: build island lookup → sort sidecars → build ranges.\n    // -------------------------------------------------------------------------\n\n    private void PrepareIslandSolveOrder()\n    {\n        BuildIslandLookup();\n        SortForIslands();\n        BuildIslandRanges();\n    }\n\n    private void RelaxIslands()\n    {\n        int numIslands = islandRanges.Count;\n        if (numIslands == 0) return;\n\n        int numThreads = ThreadPool.Instance.ThreadCount;\n        int numTasks = Math.Min(numIslands, numThreads);\n\n        if (numTasks <= 1)\n        {\n            RelaxIslandBatch(new Parallel.Batch(0, numIslands));\n            return;\n        }\n\n        Parallel.ForBatch(0, numIslands, numTasks, relaxIsland);\n    }\n\n    private void SolveIslands(int iterations)\n    {\n        int numIslands = islandRanges.Count;\n        if (numIslands == 0) return;\n\n        int numThreads = ThreadPool.Instance.ThreadCount;\n        int numTasks = Math.Min(numIslands, numThreads);\n\n        if (numTasks <= 1)\n        {\n            // Single-threaded fallback: process all islands on the calling thread.\n            SolveIslandBatch(new Parallel.Batch(0, numIslands));\n            return;\n        }\n\n        // Distribute island ranges evenly across threads. Each task gets a\n        // contiguous slice of islandRanges and solves them sequentially.\n        // Islands across tasks are fully independent — no locking required.\n        Parallel.ForBatch(0, numIslands, numTasks, solveIsland);\n    }\n}\n"
  },
  {
    "path": "src/Jitter2/World.Step.cs",
    "content": "/*\n * Jitter2 Physics Library\n * (c) Thorben Linneweber and contributors\n * SPDX-License-Identifier: MIT\n */\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Runtime.CompilerServices;\nusing System.Threading;\nusing Jitter2.Collision;\nusing Jitter2.DataStructures;\nusing Jitter2.Dynamics;\nusing Jitter2.Dynamics.Constraints;\nusing Jitter2.LinearMath;\nusing Jitter2.Parallelization;\nusing Jitter2.Unmanaged;\nusing ThreadPool = Jitter2.Parallelization.ThreadPool;\n\nnamespace Jitter2;\n\npublic sealed partial class World\n{\n    // Note: A SlimBag of the reference type 'Arbiter' does not introduce GC problems (not setting\n    // all elements to null when clearing) since the references for Arbiters are pooled anyway.\n    private readonly SlimBag<Arbiter> deferredArbiters = [];\n    private readonly SlimBag<JHandle<ContactData>> brokenArbiters = [];\n\n    /// <summary>\n    /// Profiling buckets for <see cref=\"DebugTimings\"/>, representing stages of <see cref=\"Step(Real, bool)\"/>.\n    /// </summary>\n    public enum Timings\n    {\n        /// <summary>Time spent in <see cref=\"PreStep\"/> callbacks.</summary>\n        PreStep,\n\n        /// <summary>Time spent in narrow phase collision detection and contact generation.</summary>\n        NarrowPhase,\n\n        /// <summary>Time spent creating deferred arbiters.</summary>\n        AddArbiter,\n\n        /// <summary>Time spent reordering contacts (for cache optimization or deterministic results)</summary>\n        ReorderContacts,\n\n        /// <summary>Time spent evaluating body deactivation (sleeping).</summary>\n        CheckDeactivation,\n\n        /// <summary>Time spent in substeps: force integration, constraint solving, and velocity integration.</summary>\n        Solve,\n\n        /// <summary>Time spent removing broken arbiters.</summary>\n        RemoveArbiter,\n\n        /// <summary>Time spent updating contact state after solving.</summary>\n        UpdateContacts,\n\n        /// <summary>Time spent finalizing body state and broadphase proxy updates.</summary>\n        UpdateBodies,\n\n        /// <summary>Time spent updating the dynamic tree (broadphase).</summary>\n        BroadPhase,\n\n        /// <summary>Time spent in <see cref=\"PostStep\"/> callbacks.</summary>\n        PostStep,\n\n        /// <summary>Sentinel value for array sizing. Not a real timing bucket.</summary>\n        Last\n    }\n\n    private Action<Parallel.Batch> integrateVelocities;\n    private Action<Parallel.Batch> integrateForces;\n    private Action<Parallel.Batch> prepareContacts;\n    private Action<Parallel.Batch> iterateContacts;\n    private Action<Parallel.Batch> relaxVelocities;\n    private Action<Parallel.Batch> updateContacts;\n    private Action<Parallel.Batch> prepareConstraints;\n    private Action<Parallel.Batch> iterateConstraints;\n    private Action<Parallel.Batch> prepareSmallConstraints;\n    private Action<Parallel.Batch> iterateSmallConstraints;\n    private Action<Parallel.Batch> updateBodies;\n    private Action<IDynamicTreeProxy, IDynamicTreeProxy> detect;\n    private Action<Parallel.Batch> solveIsland;\n    private Action<Parallel.Batch> relaxIsland;\n\n    private void InitParallelCallbacks()\n    {\n        integrateVelocities = IntegrateVelocities;\n        integrateForces = IntegrateForces;\n        prepareContacts = PrepareContacts;\n        iterateContacts = IterateContacts;\n        relaxVelocities = RelaxVelocities;\n        prepareConstraints = PrepareConstraints;\n        iterateConstraints = IterateConstraints;\n        prepareSmallConstraints = PrepareSmallConstraints;\n        iterateSmallConstraints = IterateSmallConstraints;\n        updateContacts = UpdateContacts;\n        updateBodies = UpdateBodies;\n        detect = Detect;\n        solveIsland = SolveIslandBatch;\n        relaxIsland = RelaxIslandBatch;\n    }\n\n    private readonly double[] debugTimings = new double[(int)Timings.Last];\n\n    /// <summary>\n    /// Contains timings for the stages of the last call to <see cref=\"World.Step(Real, bool)\"/>.\n    /// Values are in milliseconds. Index using <c>(int)Timings.XYZ</c>.\n    /// </summary>\n    public ReadOnlySpan<double> DebugTimings => debugTimings;\n\n    /// <summary>\n    /// Performs a single simulation step.\n    /// </summary>\n    /// <param name=\"dt\">The duration of time to simulate in seconds. Should remain fixed and not exceed 1/60 s.</param>\n    /// <param name=\"multiThread\">If <see langword=\"true\"/>, uses the internal thread pool for parallel execution.\n    /// Set to <see langword=\"false\"/> for single-threaded execution (useful for debugging or platforms without threading).</param>\n    /// <remarks>\n    /// The step is divided into <see cref=\"SubstepCount\"/> substeps for improved stability.\n    /// Callbacks (<see cref=\"PreStep\"/>, <see cref=\"PostStep\"/>, etc.) are invoked on the calling thread.\n    /// When <paramref name=\"multiThread\"/> is true, <see cref=\"BroadPhaseFilter\"/> and <see cref=\"NarrowPhaseFilter\"/>\n    /// may be called concurrently from worker threads.\n    /// </remarks>\n    /// <exception cref=\"ArgumentException\">Thrown if <paramref name=\"dt\"/> is negative.</exception>\n    public void Step(Real dt, bool multiThread = true)\n    {\n        ThrowIfDisposed();\n        AssertNullBody();\n\n        switch (dt)\n        {\n            case < (Real)0.0:\n                throw new ArgumentException(\"Time step cannot be negative.\", nameof(dt));\n            case < Real.Epsilon:\n                return; // nothing to do\n        }\n\n        Tracer.ProfileBegin(TraceName.Step);\n\n        long time;\n        double invFrequency = 1.0d / Stopwatch.Frequency;\n\n        void SetTime(Timings type)\n        {\n            long ctime = Stopwatch.GetTimestamp();\n            double delta = (ctime - time) * 1000.0d;\n            debugTimings[(int)type] = delta * invFrequency;\n            time = ctime;\n        }\n\n        stepDt = dt;\n        invStepDt = (Real)1.0 / dt;\n        substepDt = dt / substeps;\n\n        if (multiThread)\n        {\n            // Signal the thread pool to spin up threads\n            ThreadPool.Instance.ResumeWorkers();\n        }\n\n        // Start timer\n        time = Stopwatch.GetTimestamp();\n\n        Tracer.ProfileScopeBegin();\n        PreStep?.Invoke(dt);\n        Tracer.ProfileScopeEnd(TraceName.PreStep);\n        SetTime(Timings.PreStep);\n\n        // Perform narrow phase detection.\n        Tracer.ProfileBegin(TraceName.NarrowPhase);\n        DynamicTree.EnumerateOverlaps(detect, multiThread);\n        Tracer.ProfileEnd(TraceName.NarrowPhase);\n        SetTime(Timings.NarrowPhase);\n\n        Tracer.ProfileBegin(TraceName.AddArbiter);\n        HandleDeferredArbiters();\n        Tracer.ProfileEnd(TraceName.AddArbiter);\n        SetTime(Timings.AddArbiter);\n\n        Tracer.ProfileBegin(TraceName.CheckDeactivation);\n        CheckDeactivation();\n        Tracer.ProfileEnd(TraceName.CheckDeactivation);\n        SetTime(Timings.CheckDeactivation);\n        AssertIslandActivationInvariants();\n        \n        Tracer.ProfileBegin(TraceName.ReorderContacts);\n        \n        switch (SolveMode)\n        {\n            case SolveMode.Regular:\n                ReorderContacts();\n                break;\n            case SolveMode.Deterministic:\n                PrepareIslandSolveOrder();\n                break;\n        }\n\n        Tracer.ProfileEnd(TraceName.ReorderContacts);\n        SetTime(Timings.ReorderContacts);\n        \n        Tracer.ProfileBegin(TraceName.Solve);\n\n        // Sub-stepping\n        for (int i = 0; i < substeps; i++)\n        {\n            PreSubStep?.Invoke(substepDt);\n            IntegrateForces(multiThread);                       // FAST SWEEP\n\n            if (SolveMode == Jitter2.SolveMode.Deterministic)\n            {\n                SolveIslands(solverIterations);                    // FAST SWEEP\n                IntegrateVelocities(multiThread);                  // FAST SWEEP\n                RelaxIslands();                                    // FAST SWEEP\n            }\n            else\n            {\n                SolveVelocities(multiThread, solverIterations);    // FAST SWEEP\n                IntegrateVelocities(multiThread);                  // FAST SWEEP\n                RelaxVelocities(multiThread, velocityRelaxations); // FAST SWEEP\n            }\n            PostSubStep?.Invoke(substepDt);\n        }\n\n        Tracer.ProfileEnd(TraceName.Solve);\n        SetTime(Timings.Solve);\n\n        Tracer.ProfileBegin(TraceName.RemoveArbiter);\n        RemoveBrokenArbiters();\n        Tracer.ProfileEnd(TraceName.RemoveArbiter);\n        SetTime(Timings.RemoveArbiter);\n        AssertIslandActivationInvariants();\n\n        Tracer.ProfileBegin(TraceName.UpdateContacts);\n        UpdateContacts(multiThread);                            // FAST SWEEP\n        Tracer.ProfileEnd(TraceName.UpdateContacts);\n        SetTime(Timings.UpdateContacts);\n\n        Tracer.ProfileBegin(TraceName.UpdateBodies);\n        ForeachActiveBody(multiThread);\n        Tracer.ProfileEnd(TraceName.UpdateBodies);\n        SetTime(Timings.UpdateBodies);\n\n        Tracer.ProfileBegin(TraceName.BroadPhase);\n        DynamicTree.Update(multiThread, stepDt);\n        Tracer.ProfileEnd(TraceName.BroadPhase);\n        SetTime(Timings.BroadPhase);\n\n        Tracer.ProfileScopeBegin();\n        PostStep?.Invoke(dt);\n        Tracer.ProfileScopeEnd(TraceName.PostStep);\n        SetTime(Timings.PostStep);\n\n        if ((ThreadModel == ThreadModelType.Regular || !multiThread)\n            && ThreadPool.InstanceInitialized)\n        {\n            // Signal the thread pool that threads can go into a wait state.\n            ThreadPool.Instance.PauseWorkers();\n        }\n\n        Tracer.ProfileEnd(TraceName.Step);\n    }\n\n    /// <summary>\n    /// Solves the existing contacts and constraints at the velocity level without advancing body transforms.\n    /// </summary>\n    /// <param name=\"dt\">The reference timestep in seconds used to scale bias and softness terms.</param>\n    /// <param name=\"solverIterations\">The number of solver iterations to execute.</param>\n    /// <param name=\"relaxationIterations\">The number of relaxation iterations to execute after solving.</param>\n    /// <param name=\"multiThread\">If <see langword=\"true\"/>, uses the internal thread pool for parallel execution.</param>\n    /// <remarks>\n    /// Unlike <see cref=\"Step\"/>, this method does not perform broadphase or narrowphase collision detection,\n    /// does not integrate forces, and does not integrate positions or orientations. It only processes the\n    /// existing active contacts and constraints already present in the world at the velocity level.\n    /// This is primarily useful after loading a previously saved scene: restore the saved contacts and\n    /// constraints first, then call <see cref=\"Stabilize\"/> to warm-start and solve the restored system\n    /// before resuming normal simulation with <see cref=\"Step\"/>.\n    /// </remarks>\n    /// <exception cref=\"ArgumentException\">\n    /// Thrown if <paramref name=\"dt\"/> is negative, <paramref name=\"solverIterations\"/> is less than 1,\n    /// or <paramref name=\"relaxationIterations\"/> is negative.\n    /// </exception>\n    public void Stabilize(Real dt, int solverIterations, int relaxationIterations = 0, bool multiThread = true)\n    {\n        ThrowIfDisposed();\n        AssertNullBody();\n\n        switch (dt)\n        {\n            case < (Real)0.0:\n                throw new ArgumentException(\"Time step cannot be negative.\", nameof(dt));\n            case < Real.Epsilon:\n                return; // nothing to do\n        }\n\n        if (solverIterations < 1)\n        {\n            throw new ArgumentException(\"Solver iterations can not be smaller than one.\", nameof(solverIterations));\n        }\n\n        if (relaxationIterations < 0)\n        {\n            throw new ArgumentException(\"Relaxation iterations can not be smaller than zero.\", nameof(relaxationIterations));\n        }\n\n        stepDt = dt;\n        invStepDt = (Real)1.0 / dt;\n        substepDt = dt / substeps;\n\n        if (multiThread)\n        {\n            ThreadPool.Instance.ResumeWorkers();\n        }\n\n        CheckDeactivation();\n\n        if (SolveMode == Jitter2.SolveMode.Deterministic)\n        {\n            PrepareIslandSolveOrder();\n\n            for (int i = 0; i < substeps; i++)\n            {\n                SolveIslands(solverIterations);\n                RelaxIslands();\n            }\n        }\n        else\n        {\n            for (int i = 0; i < substeps; i++)\n            {\n                SolveVelocities(multiThread, solverIterations);\n                RelaxVelocities(multiThread, relaxationIterations);\n            }\n        }\n\n        if ((ThreadModel == ThreadModelType.Regular || !multiThread)\n            && ThreadPool.InstanceInitialized)\n        {\n            ThreadPool.Instance.PauseWorkers();\n        }\n    }\n\n    #region Prepare and Solve Contacts and Constraints\n\n    private readonly ThreadLocal<Queue<int>> deferredContacts = new(() => new Queue<int>());\n    private readonly ThreadLocal<Queue<int>> deferredConstraints = new(() => new Queue<int>());\n    private readonly ThreadLocal<Queue<int>> deferredSmallConstraints = new(() => new Queue<int>());\n\n    private void PrepareContacts(Parallel.Batch batch)\n    {\n        var span = memContacts.Active[batch.Start..batch.End];\n        var localQueue = deferredContacts.Value!;\n\n        for (int i = 0; i < span.Length; i++)\n        {\n            ref ContactData contact = ref span[i];\n            ref RigidBodyData b1 = ref contact.Body1.Data;\n            ref RigidBodyData b2 = ref contact.Body2.Data;\n\n            if (!TryLockTwoBody(ref b1, ref b2))\n            {\n                localQueue.Enqueue(i);\n                continue;\n            }\n\n            contact.PrepareForIteration(invStepDt);\n            UnlockTwoBody(ref b1, ref b2);\n        }\n\n        Tracer.ProfileScopeBegin();\n\n        while (localQueue.TryDequeue(out int i))\n        {\n            ref ContactData contact = ref span[i];\n            ref RigidBodyData b1 = ref contact.Body1.Data;\n            ref RigidBodyData b2 = ref contact.Body2.Data;\n\n            if (!TryLockTwoBody(ref b1, ref b2))\n            {\n                localQueue.Enqueue(i);\n                continue;\n            }\n\n            contact.PrepareForIteration(invStepDt);\n            UnlockTwoBody(ref b1, ref b2);\n        }\n\n        Tracer.ProfileScopeEnd(TraceName.Queue, TraceCategory.General, 10);\n    }\n\n    private void IterateContacts(Parallel.Batch batch)\n    {\n        var span = memContacts.Active[batch.Start..batch.End];\n        var localQueue = deferredContacts.Value!;\n\n        for (int i = 0; i < span.Length; i++)\n        {\n            ref ContactData c = ref span[i];\n            ref RigidBodyData b1 = ref c.Body1.Data;\n            ref RigidBodyData b2 = ref c.Body2.Data;\n\n            if (!TryLockTwoBody(ref b1, ref b2))\n            {\n                localQueue.Enqueue(i);\n                continue;\n            }\n\n            c.Iterate(true);\n            UnlockTwoBody(ref b1, ref b2);\n        }\n\n        Tracer.ProfileScopeBegin();\n\n        while (localQueue.TryDequeue(out int i))\n        {\n            ref ContactData c = ref span[i];\n            ref RigidBodyData b1 = ref c.Body1.Data;\n            ref RigidBodyData b2 = ref c.Body2.Data;\n\n            if (!TryLockTwoBody(ref b1, ref b2))\n            {\n                localQueue.Enqueue(i);\n                continue;\n            }\n\n            c.Iterate(true);\n            UnlockTwoBody(ref b1, ref b2);\n        }\n\n        Tracer.ProfileScopeEnd(TraceName.Queue, TraceCategory.General, 10);\n    }\n\n    private unsafe void PrepareSmallConstraints(Parallel.Batch batch)\n    {\n        var span = memSmallConstraints.Active[batch.Start..batch.End];\n        var localQueue = deferredSmallConstraints.Value!;\n\n        for (int i = 0; i < span.Length; i++)\n        {\n            ref SmallConstraintData constraint = ref span[i];\n            ref RigidBodyData b1 = ref constraint.Body1.Data;\n            ref RigidBodyData b2 = ref constraint.Body2.Data;\n\n            if (!constraint.IsEnabled) continue;\n\n            if (!TryLockTwoBody(ref b1, ref b2))\n            {\n                localQueue.Enqueue(i);\n                continue;\n            }\n\n            constraint.PrepareForIteration(ref constraint, invStepDt);\n            UnlockTwoBody(ref b1, ref b2);\n        }\n\n        while (localQueue.TryDequeue(out int i))\n        {\n            ref SmallConstraintData constraint = ref span[i];\n            ref RigidBodyData b1 = ref constraint.Body1.Data;\n            ref RigidBodyData b2 = ref constraint.Body2.Data;\n\n            if (!TryLockTwoBody(ref b1, ref b2))\n            {\n                localQueue.Enqueue(i);\n                continue;\n            }\n\n            constraint.PrepareForIteration(ref constraint, invStepDt);\n            UnlockTwoBody(ref b1, ref b2);\n        }\n    }\n\n    private unsafe void IterateSmallConstraints(Parallel.Batch batch)\n    {\n        var span = memSmallConstraints.Active[batch.Start..batch.End];\n        var localQueue = deferredSmallConstraints.Value!;\n\n        for (int i = 0; i < span.Length; i++)\n        {\n            ref SmallConstraintData constraint = ref span[i];\n            ref RigidBodyData b1 = ref constraint.Body1.Data;\n            ref RigidBodyData b2 = ref constraint.Body2.Data;\n\n            if (!constraint.IsEnabled) continue;\n\n            if (!TryLockTwoBody(ref b1, ref b2))\n            {\n                localQueue.Enqueue(i);\n                continue;\n            }\n\n            constraint.Iterate(ref constraint, invStepDt);\n            UnlockTwoBody(ref b1, ref b2);\n        }\n\n        while (localQueue.TryDequeue(out int i))\n        {\n            ref SmallConstraintData constraint = ref span[i];\n            ref RigidBodyData b1 = ref constraint.Body1.Data;\n            ref RigidBodyData b2 = ref constraint.Body2.Data;\n\n            if (!TryLockTwoBody(ref b1, ref b2))\n            {\n                localQueue.Enqueue(i);\n                continue;\n            }\n\n            constraint.Iterate(ref constraint, invStepDt);\n            UnlockTwoBody(ref b1, ref b2);\n        }\n    }\n\n\n    private unsafe void PrepareConstraints(Parallel.Batch batch)\n    {\n        var span = memConstraints.Active[batch.Start..batch.End];\n        var localQueue = deferredConstraints.Value!;\n\n        for (int i = 0; i < span.Length; i++)\n        {\n            ref ConstraintData constraint = ref span[i];\n            ref RigidBodyData b1 = ref constraint.Body1.Data;\n            ref RigidBodyData b2 = ref constraint.Body2.Data;\n\n            if (!constraint.IsEnabled) continue;\n\n            Debug.Assert(b1.MotionType == MotionType.Dynamic || b2.MotionType == MotionType.Dynamic,\n                \"Invalid constraint: both bodies are non-dynamic.\");\n\n            if (!TryLockTwoBody(ref b1, ref b2))\n            {\n                localQueue.Enqueue(i);\n                continue;\n            }\n\n            constraint.PrepareForIteration(ref constraint, invStepDt);\n            UnlockTwoBody(ref b1, ref b2);\n        }\n\n        while (localQueue.TryDequeue(out int i))\n        {\n            ref ConstraintData constraint = ref span[i];\n            ref RigidBodyData b1 = ref constraint.Body1.Data;\n            ref RigidBodyData b2 = ref constraint.Body2.Data;\n\n            if (!TryLockTwoBody(ref b1, ref b2))\n            {\n                localQueue.Enqueue(i);\n                continue;\n            }\n\n            constraint.PrepareForIteration(ref constraint, invStepDt);\n            UnlockTwoBody(ref b1, ref b2);\n        }\n    }\n\n    private unsafe void IterateConstraints(Parallel.Batch batch)\n    {\n        var span = memConstraints.Active[batch.Start..batch.End];\n        var localQueue = deferredConstraints.Value!;\n\n        for (int i = 0; i < span.Length; i++)\n        {\n            ref ConstraintData constraint = ref span[i];\n            ref RigidBodyData b1 = ref constraint.Body1.Data;\n            ref RigidBodyData b2 = ref constraint.Body2.Data;\n\n            if (!constraint.IsEnabled) continue;\n\n            if (!TryLockTwoBody(ref b1, ref b2))\n            {\n                localQueue.Enqueue(i);\n                continue;\n            }\n\n            constraint.Iterate(ref constraint, invStepDt);\n            UnlockTwoBody(ref b1, ref b2);\n        }\n\n        while (localQueue.TryDequeue(out int i))\n        {\n            ref ConstraintData constraint = ref span[i];\n            ref RigidBodyData b1 = ref constraint.Body1.Data;\n            ref RigidBodyData b2 = ref constraint.Body2.Data;\n\n            if (!TryLockTwoBody(ref b1, ref b2))\n            {\n                localQueue.Enqueue(i);\n                continue;\n            }\n\n            constraint.Iterate(ref constraint, invStepDt);\n            UnlockTwoBody(ref b1, ref b2);\n        }\n    }\n\n    private void RelaxVelocities(Parallel.Batch batch)\n    {\n        var span = memContacts.Active[batch.Start..batch.End];\n        var localQueue = deferredContacts.Value!;\n\n        for (int i = 0; i < span.Length; i++)\n        {\n            ref ContactData c = ref span[i];\n            ref RigidBodyData b1 = ref c.Body1.Data;\n            ref RigidBodyData b2 = ref c.Body2.Data;\n\n            if (!TryLockTwoBody(ref b1, ref b2))\n            {\n                localQueue.Enqueue(i);\n                continue;\n            }\n\n            c.Iterate(false);\n            UnlockTwoBody(ref b1, ref b2);\n        }\n\n        Tracer.ProfileScopeBegin();\n\n        while (localQueue.TryDequeue(out int i))\n        {\n            ref ContactData c = ref span[i];\n            ref RigidBodyData b1 = ref c.Body1.Data;\n            ref RigidBodyData b2 = ref c.Body2.Data;\n\n            if (!TryLockTwoBody(ref b1, ref b2))\n            {\n                localQueue.Enqueue(i);\n                continue;\n            }\n\n            c.Iterate(false);\n            UnlockTwoBody(ref b1, ref b2);\n        }\n\n        Tracer.ProfileScopeEnd(TraceName.Queue, TraceCategory.General, 10);\n    }\n\n    #endregion\n\n    private void UpdateBodies(Parallel.Batch batch)\n    {\n        for (int i = batch.Start; i < batch.End; i++)\n        {\n            bodies[i].Update(stepDt, substepDt);\n        }\n    }\n\n    private JHandle<RigidBodyData> lastVisited = JHandle<RigidBodyData>.Zero;\n    private int sortCounter;\n\n    /// <summary>\n    /// This method gradually improves the memory layout of <see cref=\"memContacts\"/>, moving connected contacts\n    /// next to each other. This improves cache coherence.\n    /// </summary>\n    private void ReorderContacts()\n    {\n        int activeCount = memContacts.Active.Length;\n\n        // Don't even bother with sorting contacts when the set is small.\n        if (activeCount < 1024) return;\n\n        const int fraction = 1024;\n\n        // The basic idea here is to gradually improve the spatial locality of the contact array.\n        // Each frame, only a small fraction of contacts (1/1024th of the total) are visited.\n        // For each visited contact, the algorithm checks whether it is already adjacent to another\n        // contact that shares one of its bodies. If not, it attempts to move contacts that\n        // involve the same bodies forward in memory, grouping connected contacts together.\n\n        int iterations = activeCount / fraction;\n\n        for (int iter = 0; iter < iterations; iter++)\n        {\n            if (sortCounter > activeCount - 2) sortCounter = 0;\n\n            ref var current = ref memContacts.Active[sortCounter];\n            ref var next = ref memContacts.Active[sortCounter + 1];\n\n            if (current.Body1 == next.Body1 || current.Body1 == next.Body2)\n            {\n                lastVisited = current.Body1;\n                sortCounter += 1;\n                continue;\n            }\n\n            if (current.Body2 == next.Body1 || current.Body2 == next.Body2)\n            {\n                lastVisited = current.Body2;\n                sortCounter += 1;\n                continue;\n            }\n\n            int swaps = 0;\n\n            if (arbiters.TryGetValue(current.Key, out var arbiter))\n            {\n                if (lastVisited != arbiter.Body1.Handle)\n                {\n                    foreach (var arb in arbiter.Body1.Contacts)\n                    {\n                        int index = memContacts.GetIndex(arb.Handle);\n                        if (index <= sortCounter || index >= activeCount) continue;\n\n                        swaps++;\n                        memContacts.Swap(sortCounter + swaps, index);\n                    }\n\n                    lastVisited = arbiter.Body1.Handle;\n                }\n                else\n                {\n                    foreach (var arb in arbiter.Body2.Contacts)\n                    {\n                        int index = memContacts.GetIndex(arb.Handle);\n                        if (index <= sortCounter || index >= activeCount) continue;\n\n                        swaps++;\n                        memContacts.Swap(sortCounter + swaps, index);\n                    }\n\n                    lastVisited = arbiter.Body2.Handle;\n                }\n            }\n\n            sortCounter += Math.Max(1, swaps);\n        }\n    }\n\n    private void AssertNullBody()\n    {\n        ref RigidBodyData rigidBody = ref NullBody.Data;\n        Debug.Assert(rigidBody.MotionType == MotionType.Static);\n        Debug.Assert(rigidBody.InverseMass < Real.Epsilon);\n        Debug.Assert(MathHelper.UnsafeIsZero(ref rigidBody.InverseInertiaWorld));\n    }\n\n    private void ForeachActiveBody(bool multiThread)\n    {\n#if DEBUG\n        foreach (var body in bodies)\n        {\n            if (body.Data.MotionType != MotionType.Dynamic)\n            {\n                Debug.Assert(MathHelper.UnsafeIsZero(ref body.Data.InverseInertiaWorld));\n                Debug.Assert(body.Data.InverseMass < Real.Epsilon);\n            }\n        }\n#endif\n\n        if (multiThread)\n        {\n            bodies.ParallelForBatch(256, updateBodies);\n        }\n        else\n        {\n            Parallel.Batch batch = new(0, bodies.ActiveCount);\n            UpdateBodies(batch);\n        }\n    }\n\n    private void RemoveBrokenArbiters()\n    {\n        foreach (var handle in brokenArbiters)\n        {\n            if ((handle.Data.UsageMask & ContactData.MaskContactAll) != 0) continue;\n            var arb = arbiters[handle.Data.Key];\n\n            AddToActiveList(arb.Body1.InternalIsland);\n            AddToActiveList(arb.Body2.InternalIsland);\n\n            memContacts.Free(handle);\n            IslandHelper.ArbiterRemoved(islands, arb);\n            arbiters.Remove(handle.Data.Key);\n\n            arb.Body1.RaiseEndCollide(arb);\n            arb.Body2.RaiseEndCollide(arb);\n\n            Arbiter.Pool.Push(arb);\n            arb.Handle = JHandle<ContactData>.Zero;\n        }\n\n        brokenArbiters.Clear();\n    }\n\n    private void UpdateContacts(Parallel.Batch batch)\n    {\n        var span = memContacts.Active[batch.Start..batch.End];\n\n        for (int i = 0; i < span.Length; i++)\n        {\n            // get rid of broken contacts\n            ref ContactData cq = ref span[i];\n            cq.UpdatePosition();\n\n            if ((cq.UsageMask & ContactData.MaskContactAll) == 0)\n            {\n                var h = memContacts.GetHandle(ref cq);\n                brokenArbiters.ConcurrentAdd(h);\n            }\n        }\n    }\n\n    private void HandleDeferredArbiters()\n    {\n        foreach (var arb in deferredArbiters)\n        {\n            IslandHelper.ArbiterCreated(islands, arb);\n\n            AddToActiveList(arb.Body1.InternalIsland);\n            AddToActiveList(arb.Body2.InternalIsland);\n\n            arb.Body1.RaiseBeginCollide(arb);\n            arb.Body2.RaiseBeginCollide(arb);\n        }\n\n        deferredArbiters.Clear();\n    }\n\n    /// <summary>\n    /// Attempts to lock two rigid bodies. Briefly waits on contention, then backs off if unsuccessful.\n    /// The lock order is determined by memory address to prevent deadlocks.\n    /// </summary>\n    /// <param name=\"b1\">Reference to the first rigid body data.</param>\n    /// <param name=\"b2\">Reference to the second rigid body data.</param>\n    /// <returns><see langword=\"true\"/> if both locks were acquired; otherwise, <see langword=\"false\"/>.</returns>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static bool TryLockTwoBody(ref RigidBodyData b1, ref RigidBodyData b2)\n    {\n        const int spinCount = 10;\n\n        if (Unsafe.IsAddressGreaterThan(ref b1, ref b2))\n        {\n            if (b1.MotionType == MotionType.Dynamic)\n            {\n                if (Interlocked.CompareExchange(ref b1._lockFlag, 1, 0) != 0)\n                {\n                    Thread.SpinWait(spinCount);\n                    if (Interlocked.CompareExchange(ref b1._lockFlag, 1, 0) != 0)\n                    {\n                        return false;\n                    }\n                }\n            }\n\n            if (b2.MotionType == MotionType.Dynamic)\n            {\n                if (Interlocked.CompareExchange(ref b2._lockFlag, 1, 0) != 0)\n                {\n                    Thread.SpinWait(spinCount);\n                    if (Interlocked.CompareExchange(ref b2._lockFlag, 1, 0) != 0)\n                    {\n                        // back off\n                        Volatile.Write(ref b1._lockFlag, 0);\n                        return false;\n                    }\n                }\n            }\n        }\n        else\n        {\n            if (b2.MotionType == MotionType.Dynamic)\n            {\n                if (Interlocked.CompareExchange(ref b2._lockFlag, 1, 0) != 0)\n                {\n                    Thread.SpinWait(spinCount);\n                    if (Interlocked.CompareExchange(ref b2._lockFlag, 1, 0) != 0)\n                    {\n                        return false;\n                    }\n                }\n            }\n\n            if (b1.MotionType == MotionType.Dynamic)\n            {\n                if (Interlocked.CompareExchange(ref b1._lockFlag, 1, 0) != 0)\n                {\n                    Thread.SpinWait(spinCount);\n                    if (Interlocked.CompareExchange(ref b1._lockFlag, 1, 0) != 0)\n                    {\n                        // back off\n                        Volatile.Write(ref b2._lockFlag, 0);\n                        return false;\n                    }\n                }\n            }\n        }\n\n        return true;\n    }\n\n    /// <summary>\n    /// Acquires locks on two rigid bodies using a spin-wait loop. The lock order is determined\n    /// by memory address to prevent deadlocks.\n    /// </summary>\n    /// <param name=\"b1\">Reference to the first rigid body data.</param>\n    /// <param name=\"b2\">Reference to the second rigid body data.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static void LockTwoBody(ref RigidBodyData b1, ref RigidBodyData b2)\n    {\n        if (Unsafe.IsAddressGreaterThan(ref b1, ref b2))\n        {\n            if (b1.MotionType == MotionType.Dynamic)\n                while (Interlocked.CompareExchange(ref b1._lockFlag, 1, 0) != 0)\n                {\n                    Thread.SpinWait(10);\n                }\n\n            if (b2.MotionType == MotionType.Dynamic)\n                while (Interlocked.CompareExchange(ref b2._lockFlag, 1, 0) != 0)\n                {\n                    Thread.SpinWait(10);\n                }\n        }\n        else\n        {\n            if (b2.MotionType == MotionType.Dynamic)\n                while (Interlocked.CompareExchange(ref b2._lockFlag, 1, 0) != 0)\n                {\n                    Thread.SpinWait(10);\n                }\n\n            if (b1.MotionType == MotionType.Dynamic)\n                while (Interlocked.CompareExchange(ref b1._lockFlag, 1, 0) != 0)\n                {\n                    Thread.SpinWait(10);\n                }\n        }\n    }\n\n    /// <summary>\n    /// Releases locks on two rigid bodies previously acquired by <see cref=\"LockTwoBody\"/>\n    /// or <see cref=\"TryLockTwoBody\"/>.\n    /// </summary>\n    /// <param name=\"b1\">Reference to the first rigid body data.</param>\n    /// <param name=\"b2\">Reference to the second rigid body data.</param>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public static void UnlockTwoBody(ref RigidBodyData b1, ref RigidBodyData b2)\n    {\n        if (Unsafe.IsAddressGreaterThan(ref b1, ref b2))\n        {\n            if (b2.MotionType == MotionType.Dynamic) Interlocked.Decrement(ref b2._lockFlag);\n            if (b1.MotionType == MotionType.Dynamic) Interlocked.Decrement(ref b1._lockFlag);\n        }\n        else\n        {\n            if (b1.MotionType == MotionType.Dynamic) Interlocked.Decrement(ref b1._lockFlag);\n            if (b2.MotionType == MotionType.Dynamic) Interlocked.Decrement(ref b2._lockFlag);\n        }\n    }\n\n    private void IntegrateForces(Parallel.Batch batch)\n    {\n        var span = memRigidBodies.Active[batch.Start..batch.End];\n\n        for (int i = 0; i < span.Length; i++)\n        {\n            ref RigidBodyData rigidBody = ref span[i];\n            if (rigidBody.MotionType != MotionType.Dynamic) continue;\n\n            rigidBody.AngularVelocity += rigidBody.DeltaAngularVelocity;\n            rigidBody.Velocity += rigidBody.DeltaVelocity;\n        }\n    }\n\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    private static JVector SolveGyroscopic(in JMatrix inertiaWorld, in JVector omega, Real dt)\n    {\n        // The equation which we solve for ω_{n+1} in this method with a single Newton iteration:\n        // I_{n+1}(ω_{n+1} - ω_{n}) + h ω_{n+1} x (I_{n+1}ω_{n+1})=0\n\n        // Based on Erin Catto’s “Numerical Methods” (GDC 2015) slides.\n        // Catto integrates the gyroscopic term in **body space** where the inertia\n        // tensor I_b is constant, then transforms the updated angular velocity ω′\n        // back to world space with the *previous* orientation R_n.\n\n        // In this implementation, we keep only the world-space inverse inertia, so\n        // we solve the same implicit equation directly in **world space** using\n        //   I_w = R_n I_b R_nᵀ (assembled from the orientation at t_n).\n        //\n        // The two approaches are algebraically equivalent:           -\n        //   • Catto:  keep I_b fixed, rotate ω′ with R_n             |\n        //   • Here:   keep I_w fixed (= R_n I_b R_nᵀ) while solving  |\n        // Both introduce the same first-order O(h) approximation - either “freeze”\n        // the inertia tensor (our method) or rotate ω′ with an orientation that is one\n        // step out of date (Catto).\n\n        JVector f = dt * (omega % JVector.Transform(omega, inertiaWorld));\n\n        JMatrix jacobian = inertiaWorld + dt * (JMatrix.CreateCrossProduct(omega) * inertiaWorld -\n                                               JMatrix.CreateCrossProduct(JVector.Transform(omega, inertiaWorld)));\n\n        if (!JMatrix.Inverse(jacobian, out var invJacobian)) return omega;\n\n        return omega - JVector.Transform(f, invJacobian);\n    }\n\n    private void IntegrateVelocities(Parallel.Batch batch)\n    {\n        var span = memRigidBodies.Active[batch.Start..batch.End];\n\n        for (int i = 0; i < span.Length; i++)\n        {\n            ref RigidBodyData rigidBody = ref span[i];\n\n            // only dynamic and kinematic objects have a velocity\n            if(rigidBody.MotionType == MotionType.Static) continue;\n\n            JVector linearVelocity = rigidBody.Velocity;\n            JVector angularVelocity = rigidBody.AngularVelocity;\n\n            rigidBody.Position += linearVelocity * substepDt;\n\n            JQuaternion quat = MathHelper.RotationQuaternion(angularVelocity, substepDt);\n            rigidBody.Orientation = JQuaternion.Normalize(quat * rigidBody.Orientation);\n\n            if (!rigidBody.EnableGyroscopicForces) continue;\n\n            // Note: We do not perform a symplectic Euler update here (i.e., we calculate the new orientation\n            // from the *old* angular velocity), since the gyroscopic term does introduce instabilities.\n            // We handle the gyroscopic term with implicit Euler. This is known as the symplectic splitting method.\n            JMatrix.Inverse(rigidBody.InverseInertiaWorld, out var inertiaWorld);\n            rigidBody.AngularVelocity = SolveGyroscopic(inertiaWorld, angularVelocity, substepDt);\n        }\n    }\n\n    private void RelaxVelocities(bool multiThread, int iterations)\n    {\n        if (multiThread)\n        {\n            for (int iter = 0; iter < iterations; iter++)\n            {\n                memContacts.ParallelForBatch(64, relaxVelocities);\n            }\n        }\n        else\n        {\n            var batchContacts = new Parallel.Batch(0, memContacts.Active.Length);\n\n            for (int iter = 0; iter < iterations; iter++)\n            {\n                RelaxVelocities(batchContacts);\n            }\n        }\n    }\n\n    private void SolveVelocities(bool multiThread, int iterations)\n    {\n        if (multiThread)\n        {\n            memContacts.ParallelForBatch(64, prepareContacts, false);\n            memConstraints.ParallelForBatch(64, prepareConstraints, false);\n            memSmallConstraints.ParallelForBatch(64, prepareSmallConstraints, false);\n\n            ThreadPool.Instance.Execute();\n\n            for (int iter = 0; iter < iterations; iter++)\n            {\n                memContacts.ParallelForBatch(64, iterateContacts, false);\n                memConstraints.ParallelForBatch(64, iterateConstraints, false);\n                memSmallConstraints.ParallelForBatch(64, iterateSmallConstraints, false);\n\n                ThreadPool.Instance.Execute();\n            }\n        }\n        else\n        {\n            Parallel.Batch batchContacts = new(0, memContacts.Active.Length);\n            Parallel.Batch batchConstraints = new(0, memConstraints.Active.Length);\n            Parallel.Batch batchSmallConstraints = new(0, memSmallConstraints.Active.Length);\n\n            PrepareContacts(batchContacts);\n            PrepareConstraints(batchConstraints);\n            PrepareSmallConstraints(batchSmallConstraints);\n\n            for (int iter = 0; iter < iterations; iter++)\n            {\n                IterateContacts(batchContacts);\n                IterateConstraints(batchConstraints);\n                IterateSmallConstraints(batchSmallConstraints);\n            }\n        }\n    }\n\n    private void UpdateContacts(bool multiThread)\n    {\n        if (multiThread)\n        {\n            memContacts.ParallelForBatch(256, updateContacts);\n        }\n        else\n        {\n            Parallel.Batch batch = new(0, memContacts.Active.Length);\n            UpdateContacts(batch);\n        }\n    }\n\n    private void IntegrateForces(bool multiThread)\n    {\n        if (multiThread)\n        {\n            memRigidBodies.ParallelForBatch(256, integrateForces);\n        }\n        else\n        {\n            IntegrateForces(new Parallel.Batch(0, memRigidBodies.Active.Length));\n        }\n    }\n\n    private void IntegrateVelocities(bool multiThread)\n    {\n        if (multiThread)\n        {\n            memRigidBodies.ParallelForBatch(256, integrateVelocities);\n        }\n        else\n        {\n            IntegrateVelocities(new Parallel.Batch(0, memRigidBodies.Active.Length));\n        }\n    }\n\n    private readonly Stack<Island> inactivateIslands = new();\n\n    private void CheckDeactivation()\n    {\n        for (int i = 0; i < islands.ActiveCount; i++)\n        {\n            Island island = islands[i];\n\n            bool deactivateIsland = !island.MarkedAsActive;\n            if (!AllowDeactivation) deactivateIsland = false;\n\n            // Mark the island as inactive\n            // Next frame one active body will be enough to set\n            // MarkedAsActive back to true;\n            island.MarkedAsActive = false;\n\n            bool needsUpdate = island.NeedsUpdate;\n            island.NeedsUpdate = false;\n\n            if (!deactivateIsland && !needsUpdate) continue;\n\n            foreach (RigidBody body in island.InternalBodies)\n            {\n                ref RigidBodyData rigidBody = ref body.Data;\n\n                if (rigidBody.IsActive != deactivateIsland)\n                {\n                    if (!needsUpdate) break;\n                    continue;\n                }\n\n                if (deactivateIsland)\n                {\n                    rigidBody.IsActive = false;\n\n                    memRigidBodies.MoveToInactive(body.Handle);\n                    bodies.MoveToInactive(body);\n\n                    // Static bodies have contacts and constraints, but they do not form\n                    // collision islands. Do not deactivate contacts or constraint\n                    // of static bodies, as the island of the static body goes to sleep.\n                    if (body.MotionType != MotionType.Static)\n                    {\n                        foreach (var c in body.InternalContacts)\n                        {\n                            memContacts.MoveToInactive(c.Handle);\n                        }\n\n                        foreach (var c in body.InternalConstraints)\n                        {\n                            if (c.IsSmallConstraint)\n                            {\n                                memSmallConstraints.MoveToInactive(c.SmallHandle);\n                            }\n                            else\n                            {\n                                memConstraints.MoveToInactive(c.Handle);\n                            }\n                        }\n                    }\n\n                    foreach (var s in body.InternalShapes)\n                    {\n                        DynamicTree.DeactivateProxy(s);\n                    }\n                }\n                else\n                {\n                    // Don't activate static bodies at all.\n                    if (rigidBody.MotionType == MotionType.Static) continue;\n\n                    rigidBody.IsActive = true;\n\n                    body.InternalSleepTime = 0;\n\n                    memRigidBodies.MoveToActive(body.Handle);\n                    bodies.MoveToActive(body);\n\n                    foreach (var c in body.InternalContacts)\n                    {\n                        memContacts.MoveToActive(c.Handle);\n                    }\n\n                    foreach (var c in body.InternalConstraints)\n                    {\n                        if (c.IsSmallConstraint)\n                        {\n                            memSmallConstraints.MoveToActive(c.SmallHandle);\n                        }\n                        else\n                        {\n                            memConstraints.MoveToActive(c.Handle);\n                        }\n                    }\n\n                    foreach (var s in body.InternalShapes)\n                    {\n                        DynamicTree.ActivateProxy(s);\n                    }\n                }\n            }\n\n            if (deactivateIsland) inactivateIslands.Push(island);\n        }\n\n        while (inactivateIslands.Count > 0)\n        {\n            Island island = inactivateIslands.Pop();\n            islands.MoveToInactive(island);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Jitter2/World.cs",
    "content": "/*\n * Jitter2 Physics Library\n * (c) Thorben Linneweber and contributors\n * SPDX-License-Identifier: MIT\n */\n\nusing System;\nusing System.Buffers;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Threading;\nusing Jitter2.Collision;\nusing Jitter2.Collision.Shapes;\nusing Jitter2.DataStructures;\nusing Jitter2.Dynamics;\nusing Jitter2.Dynamics.Constraints;\nusing Jitter2.LinearMath;\nusing Jitter2.Unmanaged;\n\n#pragma warning disable CS8618 // Non-nullable field must contain a non-null value when exiting constructor.\n\nnamespace Jitter2;\n\n/// <summary>\n/// Represents a simulation environment that holds and manages the state of all simulation objects.\n/// </summary>\npublic sealed partial class World : IDisposable\n{\n    /// <summary>\n    /// Controls how internal worker threads behave between calls to <see cref=\"Step(Real, bool)\"/>.\n    /// </summary>\n    public enum ThreadModelType\n    {\n        /// <summary>\n        /// Worker threads may yield when the engine is idle. Lower background CPU usage.\n        /// </summary>\n        Regular,\n\n        /// <summary>\n        /// Worker threads remain active between steps to reduce wake-up latency,\n        /// at the cost of higher background CPU usage.\n        /// </summary>\n        Persistent\n    }\n\n    /// <summary>\n    /// Provides access to objects in unmanaged memory. This operation is potentially unsafe.\n    /// </summary>\n    /// <remarks>\n    /// The returned spans are backed by unmanaged memory and are only valid until the next\n    /// world modification that may resize internal buffers (e.g., creating or removing bodies,\n    /// constraints, contacts, or calling <see cref=\"Step\"/>). Do not cache these spans.\n    /// Not safe to use concurrently with <see cref=\"Step(Real, bool)\"/>.\n    /// </remarks>\n    public readonly struct SpanData(World world)\n    {\n        /// <summary>\n        /// Returns the total amount of unmanaged memory allocated in bytes.\n        /// </summary>\n        public long TotalBytesAllocated =>\n            world.memRigidBodies.TotalBytesAllocated +\n            world.memContacts.TotalBytesAllocated +\n            world.memConstraints.TotalBytesAllocated +\n            world.memSmallConstraints.TotalBytesAllocated;\n\n        /// <summary>Span over active (awake) rigid body data.</summary>\n        public Span<RigidBodyData> ActiveRigidBodies => world.memRigidBodies.Active;\n\n        /// <summary>Span over inactive (sleeping) rigid body data.</summary>\n        public Span<RigidBodyData> InactiveRigidBodies => world.memRigidBodies.Inactive;\n\n        /// <summary>Span over all rigid body data (active and inactive).</summary>\n        public Span<RigidBodyData> RigidBodies => world.memRigidBodies.Elements;\n\n        /// <summary>Span over active contact data.</summary>\n        public Span<ContactData> ActiveContacts => world.memContacts.Active;\n\n        /// <summary>Span over inactive contact data.</summary>\n        public Span<ContactData> InactiveContacts => world.memContacts.Inactive;\n\n        /// <summary>Span over all contact data (active and inactive).</summary>\n        public Span<ContactData> Contacts => world.memContacts.Elements;\n\n        /// <summary>Span over active constraint data.</summary>\n        public Span<ConstraintData> ActiveConstraints => world.memConstraints.Active;\n\n        /// <summary>Span over inactive constraint data.</summary>\n        public Span<ConstraintData> InactiveConstraints => world.memConstraints.Inactive;\n\n        /// <summary>Span over all constraint data (active and inactive).</summary>\n        public Span<ConstraintData> Constraints => world.memConstraints.Elements;\n\n        /// <summary>Span over active small constraint data.</summary>\n        public Span<SmallConstraintData> ActiveSmallConstraints => world.memSmallConstraints.Active;\n\n        /// <summary>Span over inactive small constraint data.</summary>\n        public Span<SmallConstraintData> InactiveSmallConstraints => world.memSmallConstraints.Inactive;\n\n        /// <summary>Span over all small constraint data (active and inactive).</summary>\n        public Span<SmallConstraintData> SmallConstraints => world.memSmallConstraints.Elements;\n    }\n\n    private readonly PartitionedBuffer<ContactData> memContacts;\n    private readonly PartitionedBuffer<RigidBodyData> memRigidBodies;\n    private readonly PartitionedBuffer<ConstraintData> memConstraints;\n    private readonly PartitionedBuffer<SmallConstraintData> memSmallConstraints;\n\n    /// <summary>\n    /// Delegate for per-step and per-substep callbacks.\n    /// </summary>\n    /// <param name=\"dt\">\n    /// The duration in seconds: the full step duration for <see cref=\"PreStep\"/>/<see cref=\"PostStep\"/>,\n    /// or the substep duration for <see cref=\"PreSubStep\"/>/<see cref=\"PostSubStep\"/>.\n    /// </param>\n    public delegate void WorldStep(Real dt);\n\n    // Post- and Pre-step\n\n    /// <summary>\n    /// Raised at the beginning of a simulation step, before any collision detection,\n    /// constraint solving, or integration is performed.\n    /// </summary>\n    /// <remarks>\n    /// This event is invoked once per call to <see cref=\"Step\"/> and receives the full\n    /// step time <c>dt</c>. It can be used to apply external forces, modify bodies,\n    /// or gather per-step diagnostics before the simulation advances.\n    /// </remarks>\n    [CallbackThread(ThreadContext.MainThread)]\n    public event WorldStep? PreStep;\n\n    /// <summary>\n    /// Raised at the end of a simulation step, after all substeps, collision handling,\n    /// and integration have completed.\n    /// </summary>\n    /// <remarks>\n    /// This event is invoked once per call to <see cref=\"Step\"/> and receives the full\n    /// step time <c>dt</c>. At this point, all body states represent the final results\n    /// of the step.\n    /// </remarks>\n    [CallbackThread(ThreadContext.MainThread)]\n    public event WorldStep? PostStep;\n\n    /// <summary>\n    /// Raised at the beginning of each substep during a simulation step.\n    /// </summary>\n    /// <remarks>\n    /// A simulation step may be divided into multiple substeps for stability.\n    /// This event is invoked once per substep and receives the substep duration\n    /// (<c>dt / substepCount</c>). It is called immediately before force integration\n    /// and constraint solving for the substep.\n    /// Do not perform topology-changing world modifications here (for example\n    /// adding or removing bodies, constraints, or contacts, or changing body\n    /// motion types).\n    /// </remarks>\n    [CallbackThread(ThreadContext.MainThread)]\n    public event WorldStep? PreSubStep;\n\n    /// <summary>\n    /// Raised at the end of each substep during a simulation step.\n    /// </summary>\n    /// <remarks>\n    /// This event is invoked once per substep and receives the substep duration.\n    /// It is called after integration and constraint solving for the substep\n    /// have completed.\n    /// Do not perform topology-changing world modifications here (for example\n    /// adding or removing bodies, constraints, or contacts, or changing body\n    /// motion types).\n    /// </remarks>\n    [CallbackThread(ThreadContext.MainThread)]\n    public event WorldStep? PostSubStep;\n\n    /// <summary>\n    /// Grants access to objects residing in unmanaged memory. This operation can be potentially unsafe. Use\n    /// the corresponding managed properties where possible to mitigate risk.\n    /// </summary>\n    public SpanData RawData => new(this);\n\n    private readonly ShardedDictionary<ArbiterKey, Arbiter> arbiters =\n        new(Parallelization.ThreadPool.ThreadCountSuggestion);\n\n    private readonly PartitionedSet<Island> islands = [];\n    private readonly PartitionedSet<RigidBody> bodies = [];\n\n    private static ulong _idCounter;\n\n    /// <summary>\n    /// Generates a unique ID.\n    /// </summary>\n    /// <returns>A monotonically increasing unique identifier.</returns>\n    public static ulong RequestId()\n    {\n        return Interlocked.Increment(ref _idCounter);\n    }\n\n    /// <summary>\n    /// Generates a range of unique IDs.\n    /// </summary>\n    /// <param name=\"count\">The number of IDs to generate.</param>\n    /// <returns>A tuple containing the minimum and maximum request IDs in the generated range. The upper\n    /// bound is exclusive.</returns>\n    /// <exception cref=\"ArgumentOutOfRangeException\">Thrown when count is less than 1.</exception>\n    public static (ulong min, ulong max) RequestId(int count)\n    {\n        if (count < 1) throw new ArgumentOutOfRangeException(nameof(count), \"Count must be greater zero.\");\n        ulong count64 = (ulong)count;\n        ulong max = Interlocked.Add(ref _idCounter, count64) + 1;\n        return (max - count64, max);\n    }\n\n    /// <summary>\n    /// Gets or sets the threading model used between calls to <see cref=\"Step(Real, bool)\"/>.\n    /// </summary>\n    public ThreadModelType ThreadModel { get; set; } = ThreadModelType.Regular;\n\n    /// <summary>\n    /// All collision islands in this world.\n    /// </summary>\n    public ReadOnlyPartitionedSet<Island> Islands => new(islands);\n\n    /// <summary>\n    /// All rigid bodies in this world.\n    /// </summary>\n    public ReadOnlyPartitionedSet<RigidBody> RigidBodies => new(bodies);\n\n    /// <summary>\n    /// Access to the <see cref=\"DynamicTree\"/> instance. The instance\n    /// should only be modified by Jitter.\n    /// </summary>\n    public DynamicTree DynamicTree { get; }\n\n    /// <summary>\n    /// A fixed body, pinned to the world. Can be used to create constraints with.\n    /// </summary>\n    public RigidBody NullBody { get; }\n\n    /// <summary>\n    /// Specifies whether the deactivation mechanism of Jitter is enabled.\n    /// Does not activate inactive objects if set to false.\n    /// </summary>\n    public bool AllowDeactivation { get; set; } = true;\n\n    /// <summary>\n    /// Gets or sets the number of iterations per substep for the constraint solver and velocity relaxation.\n    /// </summary>\n    /// <remarks>\n    /// Higher solver iterations improve constraint accuracy at the cost of performance.\n    /// Relaxation iterations help reduce velocity errors after solving.\n    /// Default value: (solver: 6, relaxation: 4).\n    /// </remarks>\n    /// <exception cref=\"ArgumentException\">\n    /// Thrown if <c>solver</c> is less than 1 or <c>relaxation</c> is negative.\n    /// </exception>\n    public (int solver, int relaxation) SolverIterations\n    {\n        get => (solverIterations, velocityRelaxations);\n        set\n        {\n            if (value.solver < 1)\n            {\n                throw new ArgumentException(\"Solver iterations can not be smaller than one.\",\n                    nameof(SolverIterations));\n            }\n\n            if (value.relaxation < 0)\n            {\n                throw new ArgumentException(\"Relaxation iterations can not be smaller than zero.\",\n                    nameof(SolverIterations));\n            }\n\n            solverIterations = value.solver;\n            velocityRelaxations = value.relaxation;\n        }\n    }\n\n    /// <summary>\n    /// The number of substeps for each call to <see cref=\"World.Step(Real, bool)\"/>.\n    /// Sub-stepping is deactivated when set to one.\n    /// Default value: 1.\n    /// </summary>\n    public int SubstepCount\n    {\n        get => substeps;\n        set\n        {\n            if (value < 1)\n            {\n                throw new ArgumentOutOfRangeException(nameof(value),\n                    \"The number of substeps has to be larger than zero.\");\n            }\n\n            substeps = value;\n        }\n    }\n\n    /// <summary>\n    /// Default gravity, see also <see cref=\"RigidBody.AffectedByGravity\"/>.\n    /// Default value: (0, -9.81, 0).\n    /// </summary>\n    public JVector Gravity { get; set; } = new(0, -(Real)9.81, 0);\n\n    // Make this global since it is used by nearly every method called\n    // in World.Step.\n    private int solverIterations = 6;\n    private int velocityRelaxations = 4;\n    private int substeps = 1;\n\n    private Real stepDt = (Real)0.01;\n    private Real substepDt = (Real)0.01;\n    private Real invStepDt = (Real)100.0;\n\n    /// <summary>\n    /// Creates an instance of the World class.\n    /// </summary>\n    public World()\n    {\n        Logger.Information($\"Creating new world.\");\n\n        memRigidBodies = new PartitionedBuffer<RigidBodyData>(aligned64: true);\n        memContacts = new PartitionedBuffer<ContactData>();\n        memConstraints = new PartitionedBuffer<ConstraintData>();\n        memSmallConstraints = new PartitionedBuffer<SmallConstraintData>();\n\n        NullBody = CreateRigidBody();\n        NullBody.MotionType = MotionType.Static;\n\n        DynamicTree = new DynamicTree(DefaultDynamicTreeFilter);\n\n        InitParallelCallbacks();\n    }\n\n    /// <summary>\n    /// Default filter function for the DynamicTree. Returns true if both proxies are of type RigidBodyShape\n    /// and belong to different RigidBody instances.\n    /// </summary>\n    public static bool DefaultDynamicTreeFilter(IDynamicTreeProxy proxyA, IDynamicTreeProxy proxyB)\n    {\n        if (proxyA is RigidBodyShape rbsA && proxyB is RigidBodyShape rbsB)\n        {\n            return rbsA.RigidBody != rbsB.RigidBody;\n        }\n\n        return true;\n    }\n\n    /// <summary>\n    /// Removes all entities from the simulation world. Also clears all proxies from the dynamic tree,\n    /// including any user-added proxies not owned by the world.\n    /// </summary>\n    public void Clear()\n    {\n        ThrowIfDisposed();\n\n        // create a copy, since we are going to modify the list\n        Stack<RigidBody> bodyStack = new(bodies);\n        while (bodyStack.Count > 0) Remove(bodyStack.Pop());\n\n        // Left-over shapes not associated with a rigid body.\n        Stack<IDynamicTreeProxy> proxies = new(DynamicTree.Proxies);\n        while (proxies.Count > 0) DynamicTree.RemoveProxy(proxies.Pop());\n\n    }\n\n    /// <summary>\n    /// Removes the specified body from the world. This operation also automatically discards any associated contacts\n    /// and constraints.\n    /// </summary>\n    /// <param name=\"body\">The rigid body to remove.</param>\n    public void Remove(RigidBody body)\n    {\n        if (body.World != this)\n            throw new ArgumentException(\"The body does not belong to this world.\", nameof(body));\n\n        if (body == NullBody) return;\n\n        // No need to copy the hashset content first. Removing while iterating does not invalidate\n        // the enumerator any longer, see https://github.com/dotnet/runtime/pull/37180\n        // This comes in very handy for us.\n\n        foreach (var constraint in body.InternalConstraints)\n        {\n            Remove(constraint);\n        }\n\n        foreach (var shape in body.Shapes)\n        {\n            DynamicTree.RemoveProxy(shape);\n            shape.RigidBody = null!;\n        }\n\n        foreach (var contact in body.InternalContacts)\n        {\n            Remove(contact);\n        }\n\n        memRigidBodies.Free(body.Handle);\n\n        // We must be our own island.\n        Debug.Assert(body.InternalIsland is { InternalBodies.Count: 1 });\n\n        body.Handle = JHandle<RigidBodyData>.Zero;\n\n        IslandHelper.BodyRemoved(islands, body);\n\n        body.InternalIsland = null!;\n\n        bodies.Remove(body);\n    }\n\n    /// <summary>\n    /// Removes a specific constraint from the world. For temporary deactivation of constraints, consider using the\n    /// <see cref=\"Constraint.IsEnabled\"/> property.\n    /// </summary>\n    /// <param name=\"constraint\">The constraint to be removed.</param>\n    public void Remove(Constraint constraint)\n    {\n        if (constraint.Body1.World != this)\n            throw new ArgumentException(\"The constraint does not belong to this world.\", nameof(constraint));\n\n        ActivateBodyNextStep(constraint.Body1);\n        ActivateBodyNextStep(constraint.Body2);\n\n        IslandHelper.ConstraintRemoved(islands, constraint);\n\n        if (constraint.IsSmallConstraint)\n        {\n            memSmallConstraints.Free(constraint.SmallHandle);\n        }\n        else\n        {\n            memConstraints.Free(constraint.Handle);\n        }\n\n        constraint.Handle = JHandle<ConstraintData>.Zero;\n    }\n\n    /// <summary>\n    /// Removes a particular arbiter from the world.\n    /// </summary>\n    public void Remove(Arbiter arbiter)\n    {\n        if (arbiter.Body1.World != this)\n            throw new ArgumentException(\"The arbiter does not belong to this world.\", nameof(arbiter));\n\n        ActivateBodyNextStep(arbiter.Body1);\n        ActivateBodyNextStep(arbiter.Body2);\n\n        IslandHelper.ArbiterRemoved(islands, arbiter);\n        arbiters.Remove(arbiter.Handle.Data.Key);\n\n        brokenArbiters.Remove(arbiter.Handle);\n        memContacts.Free(arbiter.Handle);\n\n        arbiter.Handle = JHandle<ContactData>.Zero;\n        arbiter.Body1 = null!;\n        arbiter.Body2 = null!;\n\n        Arbiter.Pool.Push(arbiter);\n    }\n\n    /// <summary>\n    /// Marks a body to be activated at the start of the next step.\n    /// </summary>\n    /// <param name=\"body\">The body to activate.</param>\n    /// <param name=\"wakeUpStatic\">Set to true when the intention is to move a static\n    /// body or to switch from another MotionType to static. This then activates all connected bodies.</param>\n    internal void ActivateBodyNextStep(RigidBody body, bool wakeUpStatic = false)\n    {\n        body.InternalSleepTime = 0;\n\n        if (body.IsActive) return;\n\n        if (body.MotionType == MotionType.Static && !wakeUpStatic) return;\n\n        AddToActiveList(body.InternalIsland);\n\n        if (body.MotionType == MotionType.Static)\n        {\n            foreach (var c in body.Constraints)\n            {\n                ActivateBodyNextStep(c.Body1 == body ? c.Body2 : c.Body1);\n            }\n\n            foreach (var c in body.Contacts)\n            {\n               ActivateBodyNextStep(c.Body1 == body ? c.Body2 : c.Body1);\n            }\n        }\n\n        body.Island.NeedsUpdate = true;\n    }\n\n    /// <summary>\n    /// Removes constraints and contacts that connect two non-dynamic bodies.\n    /// </summary>\n    /// <param name=\"body\">The body whose non-dynamic connections should be removed.</param>\n    internal void RemoveStaticStaticConstraints(RigidBody body)\n    {\n        foreach (var constraint in body.InternalConstraints)\n        {\n            if (constraint.Body1.Data.MotionType != MotionType.Dynamic &&\n                constraint.Body2.Data.MotionType != MotionType.Dynamic)\n            {\n                Remove(constraint);\n            }\n        }\n\n        foreach (var arbiter in body.InternalContacts)\n        {\n            if (arbiter.Body1.Data.MotionType != MotionType.Dynamic &&\n                arbiter.Body2.Data.MotionType != MotionType.Dynamic)\n            {\n                Remove(arbiter);\n            }\n        }\n    }\n\n    /// <summary>\n    /// Rebuilds island connections from the body's existing contacts and constraints.\n    /// </summary>\n    /// <param name=\"body\">The body whose connections should be rebuilt.</param>\n    internal void BuildConnectionsFromExistingContacts(RigidBody body)\n    {\n        foreach (var constraint in body.InternalConstraints)\n        {\n            IslandHelper.AddConnection(islands, constraint.Body1, constraint.Body2);\n        }\n\n        foreach (var contact in body.InternalContacts)\n        {\n            IslandHelper.AddConnection(islands, contact.Body1, contact.Body2);\n        }\n    }\n\n    /// <summary>\n    /// Removes all island connections for a body.\n    /// </summary>\n    /// <param name=\"body\">The body whose connections should be removed.</param>\n    internal void RemoveConnections(RigidBody body)\n    {\n        if (body.InternalConnections.Count > 0)\n        {\n            int count = body.InternalConnections.Count;\n            var connections = ArrayPool<RigidBody>.Shared.Rent(count);\n\n            try\n            {\n                body.InternalConnections.CopyTo(connections);\n\n                for (int i = 0; i < count; i++)\n                {\n                    IslandHelper.RemoveConnection(islands, body, connections[i]);\n                }\n            }\n            finally\n            {\n                ArrayPool<RigidBody>.Shared.Return(connections, clearArray: true);\n            }\n        }\n\n        Debug.Assert(body.InternalConnections.Count == 0);\n        Debug.Assert(body.InternalIsland.InternalBodies.Count == 1);\n    }\n\n    /// <summary>\n    /// Marks a body to be deactivated at the start of the next step.\n    /// </summary>\n    /// <param name=\"body\">The body to deactivate.</param>\n    internal void DeactivateBodyNextStep(RigidBody body)\n    {\n        body.InternalSleepTime = Real.PositiveInfinity;\n    }\n\n    /// <summary>\n    /// Constructs a constraint of the specified type. After creation, initialize the constraint\n    /// by calling its <c>Initialize</c> method.\n    /// </summary>\n    /// <typeparam name=\"T\">The specific type of constraint to create.</typeparam>\n    /// <param name=\"body1\">The first rigid body involved in the constraint.</param>\n    /// <param name=\"body2\">The second rigid body involved in the constraint.</param>\n    /// <returns>A new instance of the specified constraint type, already registered with the world.</returns>\n    /// <exception cref=\"ArgumentException\">Thrown if <paramref name=\"body1\"/> and <paramref name=\"body2\"/> are the same.</exception>\n    /// <exception cref=\"PartitionedBuffer{T}.MaximumSizeException\">Raised when the maximum size limit is exceeded.</exception>\n    public T CreateConstraint<T>(RigidBody body1, RigidBody body2) where T : Constraint, new()\n    {\n        ThrowIfDisposed();\n\n        if (body1.World != this)\n            throw new ArgumentException(\"The body does not belong to this world.\", nameof(body1));\n        if (body2.World != this)\n            throw new ArgumentException(\"The body does not belong to this world.\", nameof(body2));\n        if (ReferenceEquals(body1, body2))\n            throw new ArgumentException($\"{nameof(body1)} and {nameof(body2)} must be different.\");\n\n        T constraint = new();\n        ulong constraintId = RequestId();\n\n        if (constraint.IsSmallConstraint)\n        {\n            constraint.Create(memSmallConstraints.Allocate(true, true), body1, body2);\n            constraint.SmallHandle.Data.ConstraintId = constraintId;\n        }\n        else\n        {\n            constraint.Create(memConstraints.Allocate(true, true), body1, body2);\n            constraint.Handle.Data.ConstraintId = constraintId;\n        }\n\n        IslandHelper.ConstraintCreated(islands, constraint);\n\n        AddToActiveList(body1.InternalIsland);\n        AddToActiveList(body2.InternalIsland);\n\n        return constraint;\n    }\n\n    /// <summary>\n    /// Marks an island as active and moves it to the active partition.\n    /// </summary>\n    /// <param name=\"island\">The island to activate.</param>\n    private void AddToActiveList(Island island)\n    {\n        bool wasActive = islands.IsActive(island);\n        island.MarkedAsActive = true;\n        if (!wasActive) island.NeedsUpdate = true;\n\n        islands.MoveToActive(island);\n    }\n\n    [Conditional(\"DEBUG\")]\n    private void AssertIslandActivationInvariant(Island island)\n    {\n        if (island.NeedsUpdate) return;\n\n        bool shouldBeActive = islands.IsActive(island);\n\n        foreach (RigidBody body in island.InternalBodies)\n        {\n            if (body.Data.MotionType == MotionType.Static) continue;\n\n            Debug.Assert(body.Data.IsActive == shouldBeActive,\n                \"Islands without pending updates must not contain mixed dynamic body activation state.\");\n        }\n    }\n\n    [Conditional(\"DEBUG\")]\n    private void AssertIslandActivationInvariants()\n    {\n        for (int i = 0; i < islands.Count; i++)\n        {\n            AssertIslandActivationInvariant(islands[i]);\n        }\n    }\n\n    /// <summary>\n    /// Creates and adds a new rigid body to the simulation world.\n    /// </summary>\n    /// <returns>A newly created instance of <see cref=\"RigidBody\"/>.</returns>\n    /// <exception cref=\"PartitionedBuffer{T}.MaximumSizeException\">Raised when the maximum size limit is exceeded.</exception>\n    public RigidBody CreateRigidBody()\n    {\n        ThrowIfDisposed();\n        RigidBody body = new(memRigidBodies.Allocate(true, true), this);\n        body.Data.IsActive = true;\n\n        bodies.Add(body, true);\n\n        IslandHelper.BodyAdded(islands, body);\n\n        AddToActiveList(body.InternalIsland);\n\n        return body;\n    }\n\n    private bool disposed;\n\n    private void ThrowIfDisposed()\n    {\n        ObjectDisposedException.ThrowIf(disposed, this);\n    }\n\n    /// <summary>\n    /// Releases all unmanaged memory buffers used by this simulation world.\n    /// </summary>\n    /// <remarks>\n    /// After disposal, the world instance is unusable. All bodies, constraints, and contacts\n    /// become invalid. Calling <see cref=\"Dispose\"/> multiple times is safe.\n    /// </remarks>\n    public void Dispose()\n    {\n        if (disposed) return;\n        disposed = true;\n\n        memContacts.Dispose();\n        memRigidBodies.Dispose();\n        memConstraints.Dispose();\n        memSmallConstraints.Dispose();\n\n        deferredContacts.Dispose();\n        deferredConstraints.Dispose();\n        deferredSmallConstraints.Dispose();\n    }\n}\n"
  },
  {
    "path": "src/Jitter2/_package/LICENSE",
    "content": "MIT License\n\nCopyright (c) Thorben Linneweber and contributors\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE."
  },
  {
    "path": "src/Jitter2/_package/README.md",
    "content": "Fast, simple, and dependency-free physics engine written in C# with a clear and user-friendly API. "
  },
  {
    "path": "src/Jitter2/_package/THIRD-PARTY-NOTICES.txt",
    "content": "Jitter2 Third-Party Notices\n===========================\n\nThis package includes or derives from the third-party code fragments listed\nbelow.\n\n1. Box2D\n--------\n\nRepository source:\nsrc/Jitter2/Collision/DynamicTree/DynamicTree.cs\n\nProvenance:\nThe FindBestGreedy method is adapted from Box2D's dynamic_tree.c and is\nmarked as modified from the original version.\n\nLicense notice from source:\n\nMIT License\n\nCopyright (c) 2022 Erin Catto\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n\n2. XenoCollide Collision Detection and Physics Library\n------------------------------------------------------\n\nRepository source:\nsrc/Jitter2/Collision/NarrowPhase/NarrowPhase.cs\n\nProvenance:\nThe SolveMpr method is adapted from XenoCollide and is marked as modified\nfrom the original version.\n\nLicense notice from source:\n\nXenoCollide Collision Detection and Physics Library\nCopyright (c) 2007-2014 Gary Snethen http://xenocollide.com\n\nThis software is provided 'as-is', without any express or implied warranty.\nIn no event will the authors be held liable for any damages arising\nfrom the use of this software.\nPermission is granted to anyone to use this software for any purpose,\nincluding commercial applications, and to alter it and redistribute it freely,\nsubject to the following restrictions:\n\n1. The origin of this software must not be misrepresented; you must\nnot claim that you wrote the original software. If you use this\nsoftware in a product, an acknowledgment in the product documentation\nwould be appreciated but is not required.\n2. Altered source versions must be plainly marked as such, and must\nnot be misrepresented as being the original software.\n3. This notice may not be removed or altered from any source distribution.\n\n\n3. Bullet Continuous Collision Detection and Physics Library\n------------------------------------------------------------\n\nRepository source:\nsrc/Jitter2/Dynamics/Contact.cs\n\nProvenance:\nThe contact caching code is described in source as heavily influenced by /\na direct copy of Bullet's b3ContactCache.cpp.\n\nLicense notice from source:\n\nBullet Continuous Collision Detection and Physics Library Copyright (c)\n2003-2006 Erwin Coumans  https://bulletphysics.org\n\nThis software is provided 'as-is', without any express or implied warranty.\nIn no event will the authors be held liable for any damages arising from the\nuse of this software. Permission is granted to anyone to use this software\nfor any purpose, including commercial applications, and to alter it and\nredistribute it freely, subject to the following restrictions:\n\n1. The origin of this software must not be misrepresented; you must not claim\nthat you wrote the original software. If you use this software in a product,\nan acknowledgment in the product documentation would be appreciated but is not\nrequired.\n2. Altered source versions must be plainly marked as such, and must not be\nmisrepresented as being the original software.\n3. This notice may not be removed or altered from any source distribution.\n"
  },
  {
    "path": "src/Jitter2.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio Version 17\nVisualStudioVersion = 17.4.33205.214\nMinimumVisualStudioVersion = 10.0.40219.1\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"JitterDemo\", \"JitterDemo\\JitterDemo.csproj\", \"{72FE1C6B-BEF7-420E-BC33-EA5A807F8E0B}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Jitter2\", \"Jitter2\\Jitter2.csproj\", \"{2B3C7FF7-AC18-4301-9F67-664E7C3D029A}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"JitterTests\", \"JitterTests\\JitterTests.csproj\", \"{7BF1FFC1-7C57-4E98-BCAE-CF1314D3C448}\"\nEndProject\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"Solution Items\", \"Solution Items\", \"{E56321C4-A30F-49A6-9B55-D6B0952EB5A2}\"\n\tProjectSection(SolutionItems) = preProject\n\t\t.editorconfig = .editorconfig\n\tEndProjectSection\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"JitterBenchmark\", \"JitterBenchmark\\JitterBenchmark.csproj\", \"{2F4C8CF8-AF11-4B68-8521-2806A44CAA6F}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Any CPU = Debug|Any CPU\n\t\tRelease|Any CPU = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{72FE1C6B-BEF7-420E-BC33-EA5A807F8E0B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{72FE1C6B-BEF7-420E-BC33-EA5A807F8E0B}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{72FE1C6B-BEF7-420E-BC33-EA5A807F8E0B}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{72FE1C6B-BEF7-420E-BC33-EA5A807F8E0B}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{2B3C7FF7-AC18-4301-9F67-664E7C3D029A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{2B3C7FF7-AC18-4301-9F67-664E7C3D029A}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{2B3C7FF7-AC18-4301-9F67-664E7C3D029A}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{2B3C7FF7-AC18-4301-9F67-664E7C3D029A}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{7BF1FFC1-7C57-4E98-BCAE-CF1314D3C448}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{7BF1FFC1-7C57-4E98-BCAE-CF1314D3C448}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{7BF1FFC1-7C57-4E98-BCAE-CF1314D3C448}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{7BF1FFC1-7C57-4E98-BCAE-CF1314D3C448}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{2F4C8CF8-AF11-4B68-8521-2806A44CAA6F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{2F4C8CF8-AF11-4B68-8521-2806A44CAA6F}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{2F4C8CF8-AF11-4B68-8521-2806A44CAA6F}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{2F4C8CF8-AF11-4B68-8521-2806A44CAA6F}.Release|Any CPU.Build.0 = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\n\tGlobalSection(ExtensibilityGlobals) = postSolution\n\t\tSolutionGuid = {2D97F033-EBA6-48F2-8300-843283E8622B}\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "src/Jitter2.slnx",
    "content": "﻿<Solution>\n  <Project Path=\"Jitter2\\Jitter2.csproj\" />\n  <Project Path=\"JitterBenchmark\\JitterBenchmark.csproj\" />\n  <Project Path=\"JitterDemo\\JitterDemo.csproj\" />\n  <Project Path=\"JitterTests\\JitterTests.csproj\" />\n</Solution>"
  },
  {
    "path": "src/JitterBenchmark/JitterBenchmark.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n    <PropertyGroup>\n        <OutputType>Exe</OutputType>\n        <ImplicitUsings>enable</ImplicitUsings>\n        <Nullable>enable</Nullable>\n        <TargetFramework>net10.0</TargetFramework>\n    </PropertyGroup>\n\n    <ItemGroup>\n        <PackageReference Include=\"BenchmarkDotNet\" Version=\"0.14.0\" />\n    </ItemGroup>\n\n    <ItemGroup>\n        <ProjectReference Include=\"..\\Jitter2\\Jitter2.csproj\"/>\n        <ProjectReference Include=\"..\\JitterTests\\JitterTests.csproj\"/>\n    </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "src/JitterBenchmark/Program.cs",
    "content": "﻿using BenchmarkDotNet.Attributes;\nusing BenchmarkDotNet.Running;\nusing BenchmarkDotNet.Jobs;\nusing JitterTests;\nusing ThreadPool = Jitter2.Parallelization.ThreadPool;\n\nBenchmarkRunner.Run<TowerStack>();\n\n[MemoryDiagnoser]\n[SimpleJob(RuntimeMoniker.HostProcess, launchCount: 1, warmupCount: 1, iterationCount: 3)]\npublic class TowerStack\n{\n    private World world = null!;\n\n    [Params(2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40)]\n    public int ThreadCount;\n\n    [GlobalSetup]\n    public void GlobalSetup()\n    {\n        world = new World();\n        ThreadPool.Instance.ChangeThreadCount(ThreadCount);\n        world.AllowDeactivation = false;\n    }\n\n    [Benchmark]\n    public void Test()\n    {\n        world.SolverIterations = (14, 4);\n        world.SubstepCount = 4;\n\n        Helper.BuildTower(world, JVector.Zero, 400);\n        Helper.AdvanceWorld(world, 20, 1.0f / 100.0f, true);\n\n        world.Clear();\n    }\n}"
  },
  {
    "path": "src/JitterBenchmark/Usings.cs",
    "content": "global using Jitter2;\nglobal using Jitter2.Collision;\nglobal using Jitter2.Dynamics;\nglobal using Jitter2.LinearMath;\nglobal using Jitter2.Parallelization;\nglobal using Jitter2.Unmanaged;\nglobal using Jitter2.Collision.Shapes;\nglobal using BenchmarkDotNet;\nglobal using BenchmarkDotNet.Attributes;\nglobal using BenchmarkDotNet.Running;"
  },
  {
    "path": "src/JitterDemo/ColorGenerator.cs",
    "content": "using System;\nusing JitterDemo.Renderer.OpenGL;\n\nnamespace JitterDemo;\n\npublic static class ColorGenerator\n{\n    private const int NumColors = 127;\n\n    // Surprisingly buffering the colors is about 20 times\n    // faster than generating them on the fly.\n    private static readonly Vector3[] buffer = new Vector3[NumColors];\n\n    static ColorGenerator()\n    {\n        for (int i = 0; i < NumColors; i++)\n        {\n            buffer[i] = ColorFromHSV((float)i / NumColors, 1, 0.6f);\n        }\n    }\n\n    private static Vector3 ColorFromHSV(float h, float s, float v)\n    {\n        float Gen(float n)\n        {\n            float k = (n + h * 6) % 6;\n            return v - v * s * Math.Max(0.0f, Math.Min(Math.Min(k, 4.0f - k), 1.0f));\n        }\n\n        return new Vector3(Gen(5), Gen(3), Gen(1));\n    }\n\n    public static Vector3 GetColor(int seed)\n    {\n        return buffer[(uint)seed % NumColors];\n    }\n}"
  },
  {
    "path": "src/JitterDemo/Conversion.cs",
    "content": "using System.Runtime.CompilerServices;\nusing Jitter2.Dynamics;\nusing Jitter2.LinearMath;\nusing JitterDemo.Renderer.OpenGL;\n\nnamespace JitterDemo;\n\npublic static class Conversion\n{\n    public static JVector ToJitterVector(Vector3 im)\n    {\n        return new JVector(im.X, im.Y, im.Z);\n    }\n\n    public static Vector3 FromJitter(JVector vector)\n    {\n        return new Vector3(vector.X, vector.Y, vector.Z);\n    }\n\n    public static Matrix4 FromJitter(JMatrix jmat)\n    {\n        return new Matrix4\n        {\n            M11 = jmat.M11,\n            M12 = jmat.M12,\n            M13 = jmat.M13,\n            M14 = 0,\n\n            M21 = jmat.M21,\n            M22 = jmat.M22,\n            M23 = jmat.M23,\n            M24 = 0,\n\n            M31 = jmat.M31,\n            M32 = jmat.M32,\n            M33 = jmat.M33,\n            M34 = 0,\n\n            M41 = 0,\n            M42 = 0,\n            M43 = 0,\n            M44 = 1\n        };\n    }\n\n    public static Matrix4 FromJitter(RigidBody body)\n    {\n        Unsafe.SkipInit(out Matrix4 mat);\n\n        JMatrix ori = JMatrix.CreateFromQuaternion(body.Data.Orientation);\n        ref JVector pos = ref body.Data.Position;\n\n        mat.M11 = ori.M11;\n        mat.M12 = ori.M12;\n        mat.M13 = ori.M13;\n        mat.M14 = pos.X;\n\n        mat.M21 = ori.M21;\n        mat.M22 = ori.M22;\n        mat.M23 = ori.M23;\n        mat.M24 = pos.Y;\n\n        mat.M31 = ori.M31;\n        mat.M32 = ori.M32;\n        mat.M33 = ori.M33;\n        mat.M34 = pos.Z;\n\n        mat.M41 = 0;\n        mat.M42 = 0;\n        mat.M43 = 0;\n        mat.M44 = 1;\n\n        return mat;\n    }\n}"
  },
  {
    "path": "src/JitterDemo/ConvexDecomposition.cs",
    "content": "using System.Collections.Generic;\nusing Jitter2;\nusing Jitter2.Collision;\nusing Jitter2.Collision.Shapes;\nusing Jitter2.Dynamics;\nusing Jitter2.LinearMath;\nusing JitterDemo.Renderer;\nusing JitterDemo.Renderer.OpenGL;\n\nnamespace JitterDemo;\n\npublic class ConvexDecomposition<T> where T : MultiMesh, new()\n{\n    private readonly World world;\n    private readonly List<RigidBody> bodies = new();\n    private JVector com = JVector.Zero;\n\n    private readonly List<ConvexHullShape> shapesToAdd = new();\n\n    public ConvexDecomposition(World world)\n    {\n        this.world = world;\n    }\n\n    public RigidBody Spawn(JVector position)\n    {\n        RigidBody body = world.CreateRigidBody();\n        body.Position = position;\n\n        foreach (ConvexHullShape s in shapesToAdd)\n        {\n            body.AddShape(s.Clone(), MassInertiaUpdateMode.Preserve);\n        }\n\n        body.SetMassInertia();\n        bodies.Add(body);\n\n        return body;\n    }\n\n    public void Load()\n    {\n        var csmInstance = RenderWindow.Instance.CSMRenderer.GetInstance<T>();\n        Mesh mesh = csmInstance.mesh;\n\n        float totalMass = 0.0f;\n\n        foreach (var group in mesh.Groups)\n        {\n            List<JTriangle> hullTriangles = new();\n\n            for (int i = group.FromInclusive; i < group.ToExclusive; i++)\n            {\n                ref TriangleVertexIndex tvi = ref mesh.Indices[i];\n\n                JTriangle jt = new()\n                {\n                    V0 = Conversion.ToJitterVector(mesh.Vertices[tvi.T1].Position),\n                    V1 = Conversion.ToJitterVector(mesh.Vertices[tvi.T2].Position),\n                    V2 = Conversion.ToJitterVector(mesh.Vertices[tvi.T3].Position)\n                };\n\n                hullTriangles.Add(jt);\n            }\n\n            ConvexHullShape chs = new(hullTriangles);\n            chs.CalculateMassInertia(out _, out var cvhCom, out var cvhMass);\n\n            com += cvhCom * cvhMass;\n            totalMass += cvhMass;\n            shapesToAdd.Add(chs);\n        }\n\n        com *= 1.0f / totalMass;\n\n        foreach (ConvexHullShape s in shapesToAdd)\n        {\n            s.Shift = -com;\n        }\n    }\n\n    public void Clear()\n    {\n        bodies.Clear();\n    }\n\n    public void PushMatrices()\n    {\n        var csmInstance = RenderWindow.Instance.CSMRenderer.GetInstance<T>();\n\n        foreach (RigidBody body in bodies)\n        {\n            var mat = Conversion.FromJitter(body);\n            csmInstance.PushMatrix(mat * MatrixHelper.CreateTranslation(Conversion.FromJitter(-com)), Vector3.Zero);\n        }\n    }\n}"
  },
  {
    "path": "src/JitterDemo/Demos/Car/ConstraintCar.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing Jitter2;\nusing Jitter2.Collision.Shapes;\nusing Jitter2.Dynamics;\nusing Jitter2.Dynamics.Constraints;\nusing Jitter2.LinearMath;\nusing JitterDemo.Renderer;\nusing JitterDemo.Renderer.OpenGL;\n\nnamespace JitterDemo;\n\n#pragma warning disable CS8602\n\npublic class ConstraintCar\n{\n    private RigidBody car = null!;\n    private readonly RigidBody[] damper = new RigidBody[4];\n    private readonly RigidBody[] wheels = new RigidBody[4];\n    private readonly HingeJoint[] sockets = new HingeJoint[4];\n    private readonly PrismaticJoint[] damperJoints = new PrismaticJoint[4];\n    private readonly AngularMotor[] steerMotor = new AngularMotor[2];\n\n    private const int FrontLeft = 0;\n    private const int FrontRight = 1;\n    private const int BackLeft = 2;\n    private const int BackRight = 3;\n\n    private const float MaxAngle = 40;\n    private float steer;\n\n    public void BuildCar(World world, JVector position, Action<RigidBody>? action = null)\n    {\n        List<RigidBody> bodies = new List<RigidBody>(9);\n\n        car = world.CreateRigidBody();\n        bodies.Add(car);\n\n        TransformedShape tfs1 = new TransformedShape(new BoxShape(1.5f, 0.60f, 3), new JVector(0, -0.3f, 0.0f));\n        TransformedShape tfs2 = new TransformedShape(new BoxShape(1.0f, 0.45f, 1.5f), new JVector(0, 0.20f, 0.3f));\n\n        car.AddShape(tfs1);\n        car.AddShape(tfs2);\n        car.Position = new JVector(0, 2, 0);\n        car.SetMassInertia(new JMatrix(0.4f, 0, 0, 0, 0.4f, 0, 0, 0, 1.0f), 1.0f);\n\n        for (int i = 0; i < 4; i++)\n        {\n            damper[i] = world.CreateRigidBody();\n            damper[i].AddShape(new BoxShape(0.2f));\n            damper[i].SetMassInertia(0.1f);\n\n            wheels[i] = world.CreateRigidBody();\n\n            CylinderShape shape = new CylinderShape(0.1f, 0.3f);\n            TransformedShape tf = new TransformedShape(shape, JVector.Zero, JMatrix.CreateRotationZ(MathF.PI / 2.0f));\n\n            wheels[i].AddShape(tf);\n\n            bodies.Add(wheels[i]);\n            bodies.Add(damper[i]);\n        }\n\n        car.DeactivationTime = TimeSpan.MaxValue;\n\n        damper[FrontLeft].Position = new JVector(-0.75f, 1.4f, -1.1f);\n        damper[FrontRight].Position = new JVector(+0.75f, 1.4f, -1.1f);\n\n        damper[BackLeft].Position = new JVector(-0.75f, 1.4f, 1.1f);\n        damper[BackRight].Position = new JVector(+0.75f, 1.4f, 1.1f);\n\n        for (int i = 0; i < 4; i++)\n        {\n            wheels[i].Position = damper[i].Position;\n        }\n\n        for (int i = 0; i < 4; i++)\n        {\n            damperJoints[i] = new PrismaticJoint(world, car, damper[i], damper[i].Position, JVector.UnitY, LinearLimit.Fixed, false);\n\n            damperJoints[i].Slider.LimitBias = 2;\n            damperJoints[i].Slider.LimitSoftness = 0.6f;\n            damperJoints[i].Slider.Bias = 0.2f;\n\n            damperJoints[i].HingeAngle.LimitBias = 0.6f;\n            damperJoints[i].HingeAngle.LimitSoftness = 0.01f;\n        }\n\n        damperJoints[FrontLeft].HingeAngle.Limit = AngularLimit.FromDegree(-MaxAngle, MaxAngle);\n        damperJoints[FrontRight].HingeAngle.Limit = AngularLimit.FromDegree(-MaxAngle, MaxAngle);\n        damperJoints[BackLeft].HingeAngle.Limit = AngularLimit.Fixed;\n        damperJoints[BackRight].HingeAngle.Limit = AngularLimit.Fixed;\n\n        for (int i = 0; i < 4; i++)\n        {\n            sockets[i] = new HingeJoint(world, damper[i], wheels[i], wheels[i].Position, JVector.UnitX, true);\n        }\n\n        if (world.BroadPhaseFilter is not Common.IgnoreCollisionBetweenFilter filter)\n        {\n            filter = new Common.IgnoreCollisionBetweenFilter();\n            world.BroadPhaseFilter = filter;\n        }\n\n        for (int i = 0; i < 4; i++)\n        {\n            filter.IgnoreCollisionBetween(car.Shapes[0], damper[i].Shapes[0]);\n            filter.IgnoreCollisionBetween(wheels[i].Shapes[0], damper[i].Shapes[0]);\n            filter.IgnoreCollisionBetween(car.Shapes[0], wheels[i].Shapes[0]);\n        }\n\n        steerMotor[FrontLeft] = world.CreateConstraint<AngularMotor>(car, damper[FrontLeft]);\n        steerMotor[FrontLeft].Initialize(JVector.UnitY);\n        steerMotor[FrontRight] = world.CreateConstraint<AngularMotor>(car, damper[FrontRight]);\n        steerMotor[FrontRight].Initialize(JVector.UnitY);\n\n        if (action != null) bodies.ForEach(action);\n    }\n\n    public void UpdateControls()\n    {\n        float accelerate;\n        var kb = RenderWindow.Instance.Keyboard;\n\n        if (kb.IsKeyDown(Keyboard.Key.Up)) accelerate = 1.0f;\n        else if (kb.IsKeyDown(Keyboard.Key.Down)) accelerate = -1.0f;\n        else accelerate = 0.0f;\n\n        if (kb.IsKeyDown(Keyboard.Key.Left)) steer += 0.1f;\n        else if (kb.IsKeyDown(Keyboard.Key.Right)) steer -= 0.1f;\n        else steer *= 0.9f;\n\n        steer = Math.Clamp(steer, -1.0f, 1.0f);\n\n        float targetAngle = steer * MaxAngle / 180.0f * MathF.PI;\n        float currentAngleL = (float)damperJoints[FrontLeft].HingeAngle.Angle;\n        float currentAngleR = (float)damperJoints[FrontRight].HingeAngle.Angle;\n\n        steerMotor[FrontLeft].MaximumForce = 10.0f * Math.Abs(targetAngle - currentAngleL);\n        steerMotor[FrontLeft].TargetVelocity = 10.0f * (targetAngle - currentAngleL);\n\n        steerMotor[FrontRight].MaximumForce = 10.0f * Math.Abs(targetAngle - currentAngleR);\n        steerMotor[FrontRight].TargetVelocity = 10.0f * (targetAngle - currentAngleR);\n\n        for (int i = 0; i < 4; i++)\n        {\n            wheels[i].Friction = 0.8f;\n            sockets[i].Motor.MaximumForce = 1.0f * MathF.Abs(accelerate);\n            sockets[i].Motor.TargetVelocity = -80.0f * accelerate;\n        }\n    }\n}"
  },
  {
    "path": "src/JitterDemo/Demos/Car/RayCastCar.cs",
    "content": "// NOTE: The ray cast car demo is a copied and slightly modified version\n//       of the vehicle example from the great JigLib. License follows.\n\n/*\nCopyright (c) 2007 Danny Chapman\nhttp://www.rowlhouse.co.uk\n\nThis software is provided 'as-is', without any express or implied\nwarranty. In no event will the authors be held liable for any damages\narising from the use of this software.\n\nPermission is granted to anyone to use this software for any purpose,\nincluding commercial applications, and to alter it and redistribute it\nfreely, subject to the following restrictions:\n\n1. The origin of this software must not be misrepresented; you must not\nclaim that you wrote the original software. If you use this software\nin a product, an acknowledgment in the product documentation would be\nappreciated but is not required.\n\n2. Altered source versions must be plainly marked as such, and must not be\nmisrepresented as being the original software.\n\n3. This notice may not be removed or altered from any source\ndistribution.\n*/\n\nusing System;\nusing Jitter2;\nusing Jitter2.Collision.Shapes;\nusing Jitter2.Dynamics;\nusing Jitter2.LinearMath;\n\nnamespace JitterDemo;\n\n/// <summary>\n/// Creates the Jitter default car with 4 wheels. To create a custom car\n/// use the Wheel class and add it to a body.\n/// </summary>\npublic class RayCastCar\n{\n    // the default car has 4 wheels\n    private readonly World world;\n\n    public RigidBody Body { get; }\n\n    private float destSteering;\n    private float destAccelerate;\n    private float steering;\n    private float accelerate;\n\n    /// <summary>\n    /// The maximum steering angle in degrees\n    /// for both front wheels\n    /// </summary>\n    public float SteerAngle { get; set; }\n\n    /// <summary>\n    /// The maximum torque which is applied to the\n    /// car when accelerating.\n    /// </summary>\n    public float DriveTorque { get; set; }\n\n    /// <summary>\n    /// Lower/Higher the acceleration of the car.\n    /// </summary>\n    public float AccelerationRate { get; set; }\n\n    /// <summary>\n    /// Lower/Higher the steering rate of the car.\n    /// </summary>\n    public float SteerRate { get; set; }\n\n    // don't damp perfect, allow some bounciness.\n    private const float dampingFrac = 0.8f;\n    private const float springFrac = 0.45f;\n\n    /// <summary>\n    /// Initializes a new instance of the DefaultCar class.\n    /// </summary>\n    /// <param name=\"world\">The world the car should be in.</param>\n    /// <param name=\"shape\">The shape of the car. Recommend is a box shape.</param>\n    public RayCastCar(World world)\n    {\n        this.world = world;\n\n        // set some default values\n        AccelerationRate = 10f;\n        SteerAngle = (float)JAngle.FromDegree(40.0f);\n        DriveTorque = 340.0f;\n        SteerRate = 5.0f;\n\n        Body = world.CreateRigidBody();\n\n        TransformedShape tfs1 = new(new BoxShape(3.1f, 1.4f, 8f), new JVector(0, 0.4f, 0));\n        TransformedShape tfs2 = new(new BoxShape(2.4f, 0.8f, 5f), new JVector(0.0f, 1.5f, 1.1f));\n\n        Body.AddShape(tfs1);\n        Body.AddShape(tfs2);\n\n        float mass = 100.0f;\n        JVector sides = new JVector(3.1f, 1.0f, 8.0f);\n\n        float Ixx = (1.0f / 12.0f) * mass * (sides.Y * sides.Y + sides.Z * sides.Z);\n        float Iyy = (1.0f / 12.0f) * mass * (sides.X * sides.X + sides.Z * sides.Z);\n        float Izz = (1.0f / 12.0f) * mass * (sides.X * sides.X + sides.Y * sides.Y);\n\n        JMatrix inertia = new JMatrix(Ixx, 0, 0, 0, Iyy, 0, 0, 0, Izz);\n\n        Body.Position = new JVector(0, 0.5f, -4);\n        Body.SetMassInertia(inertia, mass);\n\n        Body.Damping = (0.0001f, 0.0001f);\n\n        // create default wheels\n        Wheels[0] = new Wheel(world, Body, new JVector(-1.3f, -0.1f, -2.5f), 0.60f);\n        Wheels[1] = new Wheel(world, Body, new JVector(+1.3f, -0.1f, -2.5f), 0.60f);\n        Wheels[2] = new Wheel(world, Body, new JVector(-1.3f, -0.1f, +2.4f), 0.60f);\n        Wheels[3] = new Wheel(world, Body, new JVector(+1.3f, -0.1f, +2.4f), 0.60f);\n\n        AdjustWheelValues();\n    }\n\n    /// <summary>\n    /// This recalculates the inertia, damping and spring of all wheels based\n    /// on the car mass, the wheel radius and the gravity. Should be called\n    /// after manipulating wheel data.\n    /// </summary>\n    public void AdjustWheelValues()\n    {\n        float mass = Body.Mass / 4.0f;\n        float wheelMass = Body.Mass * 0.03f;\n\n        foreach (Wheel w in Wheels)\n        {\n            w.Inertia = 0.5f * (w.Radius * w.Radius) * wheelMass;\n            w.Spring = mass * world.Gravity.Length() / (w.WheelTravel * springFrac);\n            w.Damping = 2.0f * (float)Math.Sqrt(w.Spring * Body.Mass) * 0.25f * dampingFrac;\n        }\n    }\n\n    /// <summary>\n    /// Access the wheels.\n    /// </summary>\n    public Wheel[] Wheels { get; } = new Wheel[4];\n\n    /// <summary>\n    /// Set input values for the car.\n    /// </summary>\n    /// <param name=\"accelerate\">\n    /// A value between -1 and 1 (other values get clamped). Adjust\n    /// the maximum speed of the car by setting <see cref=\"DriveTorque\" />. The maximum acceleration is adjusted\n    /// by setting <see cref=\"AccelerationRate\" />.\n    /// </param>\n    /// <param name=\"steer\">\n    /// A value between -1 and 1 (other values get clamped). Adjust\n    /// the maximum steer angle by setting <see cref=\"SteerAngle\" />. The speed of steering\n    /// change is adjusted by <see cref=\"SteerRate\" />.\n    /// </param>\n    public void SetInput(float accelerate, float steer)\n    {\n        destAccelerate = accelerate;\n        destSteering = steer;\n    }\n\n    public void Step(float timestep)\n    {\n        foreach (Wheel w in Wheels) w.PreStep(timestep);\n\n        float deltaAccelerate = timestep * AccelerationRate;\n\n        float deltaSteering = timestep * SteerRate;\n\n        float dAccelerate = destAccelerate - accelerate;\n        dAccelerate = Math.Clamp(dAccelerate, -deltaAccelerate, deltaAccelerate);\n\n        float dSteering = destSteering - steering;\n        dSteering = Math.Clamp(dSteering, -deltaSteering, deltaSteering);\n\n        accelerate += dAccelerate;\n        steering += dSteering;\n\n        float maxTorque = DriveTorque * 0.5f;\n\n        foreach (Wheel w in Wheels)\n        {\n            w.AddTorque(maxTorque * accelerate);\n\n            if (destAccelerate == 0.0f && w.AngularVelocity < 0.8f)\n            {\n                // if the car is slow enough and destAccelerate is zero\n                // apply torque in the opposite direction of the angular velocity\n                // to make the car come to a complete halt.\n                w.AddTorque(-w.AngularVelocity);\n            }\n        }\n\n        float alpha = SteerAngle * steering;\n\n        Wheels[0].SteerAngle = alpha;\n        Wheels[1].SteerAngle = alpha;\n\n        foreach (Wheel w in Wheels)\n        {\n            w.PostStep(timestep);\n        }\n    }\n}"
  },
  {
    "path": "src/JitterDemo/Demos/Car/Wheel.cs",
    "content": "// NOTE: The ray cast car demo is a copied and slightly modified version\n//       of the vehicle example from the great JigLib. License follows.\n\n/*\nCopyright (c) 2007 Danny Chapman\nhttp://www.rowlhouse.co.uk\n\nThis software is provided 'as-is', without any express or implied\nwarranty. In no event will the authors be held liable for any damages\narising from the use of this software.\n\nPermission is granted to anyone to use this software for any purpose,\nincluding commercial applications, and to alter it and redistribute it\nfreely, subject to the following restrictions:\n\n1. The origin of this software must not be misrepresented; you must not\nclaim that you wrote the original software. If you use this software\nin a product, an acknowledgment in the product documentation would be\nappreciated but is not required.\n\n2. Altered source versions must be plainly marked as such, and must not be\nmisrepresented as being the original software.\n\n3. This notice may not be removed or altered from any source\ndistribution.\n*/\n\nusing System;\nusing Jitter2;\nusing Jitter2.Collision;\nusing Jitter2.Collision.Shapes;\nusing Jitter2.Dynamics;\nusing Jitter2.LinearMath;\nusing JitterDemo.Renderer;\n\nnamespace JitterDemo;\n\n/// <summary>\n/// A wheel which adds drive forces to a body.\n/// Can be used to create a vehicle.\n/// </summary>\npublic class Wheel\n{\n    private readonly World world;\n\n    private readonly RigidBody car;\n\n    private float displacement, upSpeed, lastDisplacement;\n    private bool onFloor;\n    private float driveTorque;\n\n    private float angVel;\n\n    /// used to estimate the friction\n    private float angVelForGrip;\n\n    private float torque;\n\n    private readonly DynamicTree.RayCastFilterPre rayCast;\n\n    /// <summary>\n    /// Sets or gets the current steering angle of\n    /// the wheel in degrees.\n    /// </summary>\n    public float SteerAngle { get; set; }\n\n    /// <summary>\n    /// Gets the current rotation of the wheel in degrees.\n    /// </summary>\n    public float WheelRotation { get; private set; }\n\n    /// <summary>\n    /// The damping factor of the supension spring.\n    /// </summary>\n    public float Damping { get; set; }\n\n    /// <summary>\n    /// The supension spring.\n    /// </summary>\n    public float Spring { get; set; }\n\n    /// <summary>\n    /// Inertia of the wheel.\n    /// </summary>\n    public float Inertia { get; set; }\n\n    /// <summary>\n    /// The wheel radius.\n    /// </summary>\n    public float Radius { get; set; }\n\n    /// <summary>\n    /// The friction of the car in the side direction.\n    /// </summary>\n    public float SideFriction { get; set; }\n\n    /// <summary>\n    /// Friction of the car in forward direction.\n    /// </summary>\n    public float ForwardFriction { get; set; }\n\n    /// <summary>\n    /// The length of the suspension spring.\n    /// </summary>\n    public float WheelTravel { get; set; }\n\n    /// <summary>\n    /// If set to true the wheel blocks.\n    /// </summary>\n    public bool Locked { get; set; }\n\n    /// <summary>\n    /// The highest possible velocity of the wheel.\n    /// </summary>\n    public float MaximumAngularVelocity { get; set; }\n\n    /// <summary>\n    /// The number of rays used for this wheel.\n    /// </summary>\n    public int NumberOfRays { get; set; }\n\n    /// <summary>\n    /// The position of the wheel in body space.\n    /// </summary>\n    public JVector Position { get; set; }\n\n    public float AngularVelocity => angVel;\n\n    public readonly JVector Up = JVector.UnitY;\n\n    /// <summary>\n    /// Creates a new instance of the Wheel class.\n    /// </summary>\n    /// <param name=\"world\">The world.</param>\n    /// <param name=\"car\">The RigidBody on which to apply the wheel forces.</param>\n    /// <param name=\"position\">The position of the wheel on the body (in body space).</param>\n    /// <param name=\"radius\">The wheel radius.</param>\n    public Wheel(World world, RigidBody car, JVector position, float radius)\n    {\n        this.world = world;\n        this.car = car;\n        Position = position;\n\n        rayCast = RayCastCallback;\n\n        // set some default values.\n        SideFriction = 3.0f;\n        ForwardFriction = 5.0f;\n        Radius = radius;\n        Inertia = 1.0f;\n        WheelTravel = 0.2f;\n        MaximumAngularVelocity = 200;\n        NumberOfRays = 1;\n    }\n\n    /// <summary>\n    /// Gets the position of the wheel in world space.\n    /// </summary>\n    /// <returns>The position of the wheel in world space.</returns>\n    public JVector GetWheelCenter()\n    {\n        return Position + JVector.Transform(Up, car.Orientation) * displacement;\n    }\n\n    /// <summary>\n    /// Adds drivetorque.\n    /// </summary>\n    /// <param name=\"torque\">The amount of torque applied to this wheel.</param>\n    public void AddTorque(float torque)\n    {\n        driveTorque += torque;\n    }\n\n    public void PostStep(float timeStep)\n    {\n        if (timeStep <= 0.0f) return;\n\n        float origAngVel = angVel;\n        upSpeed = (displacement - lastDisplacement) / timeStep;\n\n        if (Locked)\n        {\n            angVel = 0;\n            torque = 0;\n        }\n        else\n        {\n            angVel += torque * timeStep / Inertia;\n            torque = 0;\n\n            if (!onFloor) driveTorque *= 0.1f;\n\n            // prevent friction from reversing dir - todo do this better\n            // by limiting the torque\n            if ((origAngVel > angVelForGrip && angVel < angVelForGrip) ||\n                (origAngVel < angVelForGrip && angVel > angVelForGrip))\n                angVel = angVelForGrip;\n\n            angVel += driveTorque * timeStep / Inertia;\n            driveTorque = 0;\n\n            float maxAngVel = MaximumAngularVelocity;\n            angVel = Math.Clamp(angVel, -maxAngVel, maxAngVel);\n\n            WheelRotation += timeStep * angVel;\n        }\n    }\n\n    public void PreStep(float timeStep)\n    {\n        JVector force = JVector.Zero;\n        lastDisplacement = displacement;\n        displacement = 0.0f;\n\n        float vel = car.Velocity.Length();\n\n        JVector worldPos = car.Position + JVector.Transform(Position, car.Orientation);\n        JVector worldAxis = JVector.Transform(Up, car.Orientation);\n\n        JVector forward = JVector.Transform(-JVector.UnitZ, car.Orientation);\n        JVector wheelFwd = JVector.Transform(forward, JMatrix.CreateRotationMatrix(worldAxis, SteerAngle));\n\n        JVector wheelLeft = JVector.Cross(worldAxis, wheelFwd);\n        JVector.NormalizeInPlace(ref wheelLeft);\n\n        JVector wheelUp = JVector.Cross(wheelFwd, wheelLeft);\n\n        float rayLen = 2.0f * Radius + WheelTravel;\n\n        JVector wheelRayEnd = worldPos - Radius * worldAxis;\n        JVector wheelRayOrigin = wheelRayEnd + rayLen * worldAxis;\n        JVector wheelRayDelta = wheelRayEnd - wheelRayOrigin;\n\n        float deltaFwd = 2.0f * Radius / (NumberOfRays + 1);\n        float deltaFwdStart = deltaFwd;\n\n        onFloor = false;\n\n        JVector groundNormal = JVector.Zero;\n        JVector groundPos = JVector.Zero;\n        float deepestFrac = float.MaxValue;\n        RigidBody worldBody = null!;\n\n        for (int i = 0; i < NumberOfRays; i++)\n        {\n            float distFwd = deltaFwdStart + i * deltaFwd - Radius;\n            float zOffset = Radius * (1.0f - (float)Math.Cos(Math.PI / 2.0f * (distFwd / Radius)));\n\n            JVector newOrigin = wheelRayOrigin + distFwd * wheelFwd + zOffset * wheelUp;\n\n            bool result = world.DynamicTree.RayCast(newOrigin, wheelRayDelta,\n                rayCast, null, out IDynamicTreeProxy? shape, out JVector normal, out float frac);\n\n            if (result && frac <= 1.0f)\n            {\n                // shape must be RigidBodyShape since we filter out other ray tests\n                RigidBody body = (shape as RigidBodyShape)!.RigidBody;\n\n                if (frac < deepestFrac)\n                {\n                    deepestFrac = frac;\n                    groundPos = newOrigin + frac * wheelRayDelta;\n                    worldBody = body;\n                    groundNormal = normal;\n                }\n\n                onFloor = true;\n            }\n        }\n\n        if (!onFloor) return;\n\n        if (groundNormal.LengthSquared() > 0.0f) JVector.NormalizeInPlace(ref groundNormal);\n\n        displacement = rayLen * (1.0f - deepestFrac);\n        displacement = Math.Clamp(displacement, 0.0f, WheelTravel);\n\n        float displacementForceMag = displacement * Spring;\n\n        // reduce force when suspension is par to ground\n        displacementForceMag *= JVector.Dot(groundNormal, worldAxis);\n\n        // apply damping\n        float dampingForceMag = upSpeed * Damping;\n\n        float totalForceMag = displacementForceMag + dampingForceMag;\n\n        if (totalForceMag < 0.0f) totalForceMag = 0.0f;\n\n        JVector extraForce = totalForceMag * worldAxis;\n\n        force += extraForce;\n\n        // side-slip friction and drive force. Work out wheel- and floor-relative coordinate frame\n        JVector groundUp = groundNormal;\n        JVector groundLeft = JVector.Cross(groundNormal, wheelFwd);\n        if (groundLeft.LengthSquared() > 0.0f) JVector.NormalizeInPlace(ref groundLeft);\n\n        JVector groundFwd = JVector.Cross(groundLeft, groundUp);\n\n        JVector wheelPointVel = car.Velocity +\n                                JVector.Cross(car.AngularVelocity, JVector.Transform(Position, car.Orientation));\n\n        // rimVel=(wxr)*v\n        JVector rimVel = angVel * JVector.Cross(wheelLeft, groundPos - worldPos);\n        wheelPointVel += rimVel;\n\n        if (worldBody == null) throw new Exception(\"car: world body is null.\");\n\n        JVector worldVel = worldBody.Velocity +\n                           JVector.Cross(worldBody.AngularVelocity, groundPos - worldBody.Position);\n\n        wheelPointVel -= worldVel;\n\n        // sideways forces\n        float noslipVel = 0.2f;\n        float slipVel = 0.4f;\n        float slipFactor = 0.7f;\n\n        float smallVel = 3.0f;\n        float friction = SideFriction;\n\n        float sideVel = JVector.Dot(wheelPointVel, groundLeft);\n\n        if (sideVel > slipVel || sideVel < -slipVel)\n        {\n            friction *= slipFactor;\n        }\n        else if (sideVel > noslipVel || sideVel < -noslipVel)\n        {\n            friction *= 1.0f - (1.0f - slipFactor) * (Math.Abs(sideVel) - noslipVel) / (slipVel - noslipVel);\n        }\n\n        if (sideVel < 0.0f)\n            friction *= -1.0f;\n\n        if (Math.Abs(sideVel) < smallVel)\n            friction *= Math.Abs(sideVel) / smallVel;\n\n        float sideForce = -friction * totalForceMag;\n\n        extraForce = sideForce * groundLeft;\n        force += extraForce;\n\n        // fwd/back forces\n        friction = ForwardFriction;\n        float fwdVel = JVector.Dot(wheelPointVel, groundFwd);\n\n        if (fwdVel > slipVel || fwdVel < -slipVel)\n        {\n            friction *= slipFactor;\n        }\n        else if (fwdVel > noslipVel || fwdVel < -noslipVel)\n        {\n            friction *= 1.0f - (1.0f - slipFactor) * (Math.Abs(fwdVel) - noslipVel) / (slipVel - noslipVel);\n        }\n\n        if (fwdVel < 0.0f)\n            friction *= -1.0f;\n\n        if (Math.Abs(fwdVel) < smallVel)\n            friction *= Math.Abs(fwdVel) / smallVel;\n\n        float fwdForce = -friction * totalForceMag;\n\n        extraForce = fwdForce * groundFwd;\n        force += extraForce;\n\n        // fwd force also spins the wheel\n        JVector wheelCentreVel = car.Velocity +\n                                 JVector.Cross(car.AngularVelocity, JVector.Transform(Position, car.Orientation));\n\n        angVelForGrip = JVector.Dot(wheelCentreVel, groundFwd) / Radius;\n        torque += -fwdForce * Radius;\n\n        // add force to car\n        car.AddForce(force, groundPos);\n\n        RenderWindow.Instance.DebugRenderer.PushPoint(DebugRenderer.Color.White, Conversion.FromJitter(groundPos), 0.2f);\n\n        // add force to the world\n        if (worldBody.MotionType == MotionType.Dynamic)\n        {\n            const float maxOtherBodyAcc = 500.0f;\n            float maxOtherBodyForce = maxOtherBodyAcc * worldBody.Mass;\n\n            if (force.LengthSquared() > (maxOtherBodyForce * maxOtherBodyForce))\n                force *= maxOtherBodyForce / force.Length();\n\n            worldBody.SetActivationState(true);\n\n            worldBody.AddForce(force * -1, groundPos);\n        }\n    }\n\n    private bool RayCastCallback(IDynamicTreeProxy shape)\n    {\n        if (shape is not RigidBodyShape rbs) return false;\n        return rbs.RigidBody != car;\n    }\n}"
  },
  {
    "path": "src/JitterDemo/Demos/Common.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing Jitter2;\nusing Jitter2.Collision;\nusing Jitter2.Collision.Shapes;\nusing Jitter2.Dynamics;\nusing Jitter2.Dynamics.Constraints;\nusing Jitter2.LinearMath;\nusing JitterDemo.Renderer;\n\nnamespace JitterDemo;\n\npublic static class Common\n{\n    public class IgnoreCollisionBetweenFilter : IBroadPhaseFilter\n    {\n        private readonly struct Pair : IEquatable<Pair>\n        {\n            private readonly RigidBodyShape shapeA, shapeB;\n\n            public Pair(RigidBodyShape shapeA, RigidBodyShape shapeB)\n            {\n                this.shapeA = shapeA;\n                this.shapeB = shapeB;\n            }\n\n            public bool Equals(Pair other)\n            {\n                return shapeA.Equals(other.shapeA) && shapeB.Equals(other.shapeB);\n            }\n\n            public override bool Equals(object? obj)\n            {\n                return obj is Pair other && Equals(other);\n            }\n\n            public override int GetHashCode()\n            {\n                return HashCode.Combine(shapeA, shapeB);\n            }\n        }\n\n        private readonly HashSet<Pair> ignore = new();\n\n        public bool Filter(IDynamicTreeProxy proxyA, IDynamicTreeProxy proxyB)\n        {\n            if (proxyA is not RigidBodyShape shapeA || proxyB is not RigidBodyShape shapeB) return false;\n\n            if (shapeB.ShapeId < shapeA.ShapeId) (shapeA, shapeB) = (shapeB, shapeA);\n            return !ignore.Contains(new Pair(shapeA, shapeB));\n        }\n\n        public void IgnoreCollisionBetween(RigidBodyShape shapeA, RigidBodyShape shapeB)\n        {\n            if (shapeB.ShapeId < shapeA.ShapeId) (shapeA, shapeB) = (shapeB, shapeA);\n            ignore.Add(new Pair(shapeA, shapeB));\n        }\n    }\n\n    public enum RagdollParts\n    {\n        Head,\n        UpperLegLeft,\n        UpperLegRight,\n        LowerLegLeft,\n        LowerLegRight,\n        UpperArmLeft,\n        UpperArmRight,\n        LowerArmLeft,\n        LowerArmRight,\n        Torso\n    }\n\n\n    private const int RagdollPartCount = (int)RagdollParts.Torso + 1;\n\n    public static void BuildRagdoll(JVector position, Action<RigidBody>? action = null)\n    {\n        World world = ((Playground)RenderWindow.Instance).World;\n\n        RigidBody[] parts = new RigidBody[RagdollPartCount];\n\n        for (int i = 0; i < parts.Length; i++)\n        {\n            parts[i] = world.CreateRigidBody();\n        }\n\n        var head = parts[(int)RagdollParts.Head];\n        var torso = parts[(int)RagdollParts.Torso];\n        var upperLegLeft = parts[(int)RagdollParts.UpperLegLeft];\n        var upperLegRight = parts[(int)RagdollParts.UpperLegRight];\n        var lowerLegLeft = parts[(int)RagdollParts.LowerLegLeft];\n        var lowerLegRight = parts[(int)RagdollParts.LowerLegRight];\n        var upperArmLeft = parts[(int)RagdollParts.UpperArmLeft];\n        var upperArmRight = parts[(int)RagdollParts.UpperArmRight];\n        var lowerArmLeft = parts[(int)RagdollParts.LowerArmLeft];\n        var lowerArmRight = parts[(int)RagdollParts.LowerArmRight];\n\n        head.AddShape(new SphereShape(0.15f));\n        upperLegLeft.AddShape(new CapsuleShape(0.08f, 0.3f));\n        upperLegRight.AddShape(new CapsuleShape(0.08f, 0.3f));\n        lowerLegLeft.AddShape(new CapsuleShape(0.08f, 0.3f));\n        lowerLegRight.AddShape(new CapsuleShape(0.08f, 0.3f));\n        upperArmLeft.AddShape(new CapsuleShape(0.07f, 0.2f));\n        upperArmRight.AddShape(new CapsuleShape(0.07f, 0.2f));\n        lowerArmLeft.AddShape(new CapsuleShape(0.06f, 0.2f));\n        lowerArmRight.AddShape(new CapsuleShape(0.06f, 0.2f));\n        torso.AddShape(new BoxShape(0.35f, 0.6f, 0.2f));\n\n        head.Position = new JVector(0, 0, 0);\n        torso.Position = new JVector(0, -0.46f, 0);\n        upperLegLeft.Position = new JVector(0.11f, -0.85f, 0);\n        upperLegRight.Position = new JVector(-0.11f, -0.85f, 0);\n        lowerLegLeft.Position = new JVector(0.11f, -1.2f, 0);\n        lowerLegRight.Position = new JVector(-0.11f, -1.2f, 0);\n\n        upperArmLeft.Orientation = JQuaternion.CreateRotationZ(MathF.PI / 2.0f);\n        upperArmRight.Orientation = JQuaternion.CreateRotationZ(MathF.PI / 2.0f);\n        lowerArmLeft.Orientation = JQuaternion.CreateRotationZ(MathF.PI / 2.0f);\n        lowerArmRight.Orientation = JQuaternion.CreateRotationZ(MathF.PI / 2.0f);\n\n        upperArmLeft.Position = new JVector(0.30f, -0.2f, 0);\n        upperArmRight.Position = new JVector(-0.30f, -0.2f, 0);\n\n        lowerArmLeft.Position = new JVector(0.55f, -0.2f, 0);\n        lowerArmRight.Position = new JVector(-0.55f, -0.2f, 0);\n\n        var spine0 = world.CreateConstraint<BallSocket>(head, torso);\n        spine0.Initialize(new JVector(0, -0.15f, 0));\n\n        var spine1 = world.CreateConstraint<ConeLimit>(head, torso);\n        spine1.Initialize(-JVector.UnitZ, AngularLimit.FromDegree(0, 45));\n\n        var hipLeft0 = world.CreateConstraint<BallSocket>(torso, upperLegLeft);\n        hipLeft0.Initialize(new JVector(0.11f, -0.7f, 0));\n\n        var hipLeft1 = world.CreateConstraint<TwistAngle>(torso, upperLegLeft);\n        hipLeft1.Initialize(JVector.UnitY, JVector.UnitY, AngularLimit.FromDegree(-80, +80));\n\n        var hipLeft2 = world.CreateConstraint<ConeLimit>(torso, upperLegLeft);\n        hipLeft2.Initialize(-JVector.UnitY, AngularLimit.FromDegree(0, 60));\n\n        var hipRight0 = world.CreateConstraint<BallSocket>(torso, upperLegRight);\n        hipRight0.Initialize(new JVector(-0.11f, -0.7f, 0));\n\n        var hipRight1 = world.CreateConstraint<TwistAngle>(torso, upperLegRight);\n        hipRight1.Initialize(JVector.UnitY, JVector.UnitY, AngularLimit.FromDegree(-80, +80));\n\n        var hipRight2 = world.CreateConstraint<ConeLimit>(torso, upperLegRight);\n        hipRight2.Initialize(-JVector.UnitY, AngularLimit.FromDegree(0, 60));\n\n        var kneeLeft = new HingeJoint(world, upperLegLeft, lowerLegLeft,\n            new JVector(0.11f, -1.05f, 0), JVector.UnitX, AngularLimit.FromDegree(-120, 0));\n\n        var kneeRight = new HingeJoint(world, upperLegRight, lowerLegRight,\n            new JVector(-0.11f, -1.05f, 0), JVector.UnitX, AngularLimit.FromDegree(-120, 0));\n\n        var armLeft = new HingeJoint(world, lowerArmLeft, upperArmLeft,\n            new JVector(0.42f, -0.2f, 0), JVector.UnitY, AngularLimit.FromDegree(-160, 0));\n\n        var armRight = new HingeJoint(world, lowerArmRight, upperArmRight,\n            new JVector(-0.42f, -0.2f, 0), JVector.UnitY, AngularLimit.FromDegree(0, 160));\n\n        // Soften the limits for the hinge joints\n        kneeLeft.HingeAngle.LimitSoftness = kneeLeft.HingeAngle.Softness = 1;\n        kneeRight.HingeAngle.LimitSoftness = kneeRight.HingeAngle.Softness = 1;\n        armLeft.HingeAngle.LimitSoftness = armLeft.HingeAngle.Softness = 1;\n        armRight.HingeAngle.LimitSoftness = armRight.HingeAngle.Softness = 1;\n\n        var shoulderLeft0 = world.CreateConstraint<BallSocket>(upperArmLeft, torso);\n        shoulderLeft0.Initialize(new JVector(0.20f, -0.2f, 0));\n\n        var shoulderLeft1 = world.CreateConstraint<TwistAngle>(torso, upperArmLeft);\n        shoulderLeft1.Initialize(JVector.UnitX, JVector.UnitX, AngularLimit.FromDegree(-20, 60));\n\n        var shoulderRight0 = world.CreateConstraint<BallSocket>(upperArmRight, torso);\n        shoulderRight0.Initialize(new JVector(-0.20f, -0.2f, 0));\n\n        var shoulderRight1 = world.CreateConstraint<TwistAngle>(torso, upperArmRight);\n        shoulderRight1.Initialize(JVector.UnitX, JVector.UnitX, AngularLimit.FromDegree(-20, 60));\n\n        shoulderLeft1.Bias = 0.01f;\n        shoulderRight1.Bias = 0.01f;\n        hipLeft1.Bias = 0.01f;\n        hipRight1.Bias = 0.01f;\n\n        if (world.BroadPhaseFilter is not IgnoreCollisionBetweenFilter filter)\n        {\n            filter = new IgnoreCollisionBetweenFilter();\n            world.BroadPhaseFilter = filter;\n        }\n\n        filter.IgnoreCollisionBetween(upperLegLeft.Shapes[0], torso.Shapes[0]);\n        filter.IgnoreCollisionBetween(upperLegRight.Shapes[0], torso.Shapes[0]);\n        filter.IgnoreCollisionBetween(upperLegLeft.Shapes[0], lowerLegLeft.Shapes[0]);\n        filter.IgnoreCollisionBetween(upperLegRight.Shapes[0], lowerLegRight.Shapes[0]);\n        filter.IgnoreCollisionBetween(upperArmLeft.Shapes[0], torso.Shapes[0]);\n        filter.IgnoreCollisionBetween(upperArmRight.Shapes[0], torso.Shapes[0]);\n        filter.IgnoreCollisionBetween(upperArmLeft.Shapes[0], lowerArmLeft.Shapes[0]);\n        filter.IgnoreCollisionBetween(upperArmRight.Shapes[0], lowerArmRight.Shapes[0]);\n\n        for (int i = 0; i < parts.Length; i++)\n        {\n            parts[i].Position += position;\n            action?.Invoke(parts[i]);\n        }\n    }\n\n    public static void BuildPyramid(JVector position, int size = 20, Action<RigidBody>? action = null)\n    {\n        World world = ((Playground)RenderWindow.Instance).World;\n\n        for (int i = 0; i < size; i++)\n        {\n            for (int e = i; e < size; e++)\n            {\n                RigidBody body = world.CreateRigidBody();\n                body.Position = position + new JVector((e - i * 0.5f) * 1.01f, 0.5f + i * 1.0f, 0);\n                var shape = new BoxShape(1);\n                body.AddShape(shape);\n                action?.Invoke(body);\n            }\n        }\n    }\n\n    public static void BuildTower(JVector pos, int height = 40, Action<RigidBody>? action = null)\n    {\n        World world = ((Playground)RenderWindow.Instance).World;\n\n        JQuaternion halfRotationStep = JQuaternion.CreateRotationY(MathF.PI * 2.0f / 64.0f);\n        JQuaternion fullRotationStep = halfRotationStep * halfRotationStep;\n        JQuaternion orientation = JQuaternion.Identity;\n\n        for (int e = 0; e < height; e++)\n        {\n            orientation *= halfRotationStep;\n\n            for (int i = 0; i < 32; i++)\n            {\n                JVector position = pos + JVector.Transform(\n                    new JVector(0, 0.5f + e, 19.5f), orientation);\n\n                var shape = new BoxShape(3f, 1, 0.2f);\n                var body = world.CreateRigidBody();\n\n                body.Orientation = orientation;\n                body.Position = new JVector(position.X, position.Y, position.Z);\n\n                body.AddShape(shape);\n\n                orientation *= fullRotationStep;\n\n                action?.Invoke(body);\n            }\n        }\n    }\n\n    public static void BuildJenga(JVector position, int size = 20, Action<RigidBody>? action = null)\n    {\n        World world = ((Playground)RenderWindow.Instance).World;\n\n        position += new JVector(0, 0.5f, 0);\n\n        for (int i = 0; i < size; i++)\n        {\n            for (int e = 0; e < 3; e++)\n            {\n                var body = world.CreateRigidBody();\n\n                if (i % 2 == 0)\n                {\n                    body.AddShape(new BoxShape(3, 1, 1));\n                    body.Position = position + new JVector(0, i, -1 + e);\n                }\n                else\n                {\n                    body.AddShape(new BoxShape(1, 1, 3));\n                    body.Position = position + new JVector(-1 + e, i, 0);\n                }\n\n                action?.Invoke(body);\n            }\n        }\n    }\n\n    public static void BuildWall(JVector position, int sizex = 20, int sizey = 14, Action<RigidBody>? action = null)\n    {\n        World world = ((Playground)RenderWindow.Instance).World;\n\n        for (int i = 0; i < sizex; i++)\n        {\n            for (int e = 0; e < sizey; e++)\n            {\n                RigidBody body = world.CreateRigidBody();\n                body.Position = position + new JVector((i % 2 == 0 ? 0.5f : 0.0f) + e * 2.01f, 0.5f + i * 1.0f, 0.0f);\n                var shape = new BoxShape(2, 1, 1);\n                body.AddShape(shape);\n                action?.Invoke(body);\n            }\n        }\n    }\n\n    public static void BuildPyramidCylinder(JVector position, int size = 20, Action<RigidBody>? action = null)\n    {\n        World world = ((Playground)RenderWindow.Instance).World;\n\n        for (int i = 0; i < size; i++)\n        {\n            for (int e = i; e < size; e++)\n            {\n                RigidBody body = world.CreateRigidBody();\n                body.Position = position + new JVector((e - i * 0.5f) * 1.01f, 0.5f + i * 1f, 0.0f);\n                var shape = new CylinderShape(1f, 0.5f);\n                body.AddShape(shape);\n                action?.Invoke(body);\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/JitterDemo/Demos/Demo00.cs",
    "content": "using System.IO;\nusing Jitter2;\nusing Jitter2.LinearMath;\nusing JitterDemo.Renderer;\n\nnamespace JitterDemo;\n\npublic class DecomposedTeapot : MultiMesh\n{\n    public DecomposedTeapot() : base(Path.Combine(\"assets\", \"teapot_hull.obj\"), 0.03f)\n    {\n    }\n}\n\npublic class Demo00 : IDemo, IDrawUpdate\n{\n    private ConvexDecomposition<DecomposedTeapot> teapotDecomp = null!;\n\n    public string Name => \"Convex Decomposition\";\n    public string Description => \"Convex-decomposed teapot models with compound convex hull collision.\";\n\n    public void Build(Playground pg, World world)\n    {\n        pg.AddFloor();\n\n        teapotDecomp = new ConvexDecomposition<DecomposedTeapot>(world);\n        teapotDecomp.Load();\n\n        for (int i = 0; i < 6; i++)\n        {\n            teapotDecomp.Spawn(new JVector(0, 10 + i * 3, -14));\n            teapotDecomp.Spawn(new JVector(0, 10 + i * 3, -6));\n            teapotDecomp.Spawn(new JVector(5, 10 + i * 3, -14));\n            teapotDecomp.Spawn(new JVector(5, 10 + i * 3, -6));\n        }\n\n        world.SolverIterations = (8, 4);\n    }\n\n    public void DrawUpdate()\n    {\n        teapotDecomp.PushMatrices();\n    }\n}"
  },
  {
    "path": "src/JitterDemo/Demos/Demo01.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing Jitter2;\nusing Jitter2.Collision.Shapes;\nusing Jitter2.Dynamics;\nusing Jitter2.Dynamics.Constraints;\nusing Jitter2.LinearMath;\nusing JitterDemo.Renderer;\n\nnamespace JitterDemo;\n\npublic class Demo01 : IDemo, IDrawUpdate\n{\n    public string Name => \"Constraint car\";\n    public string Description => \"Constraint-based car with a breakable hinge-joint suspension bridge.\";\n    public string Controls => \"Arrow Keys - Steer and accelerate\";\n\n    private readonly ConstraintCar car = new();\n    private readonly List<HingeJoint> hinges = new();\n    private World world = null!;\n\n    public void Build(Playground pg, World world)\n    {\n        this.world = world;\n\n        hinges.Clear();\n\n        pg.AddFloor();\n\n        {\n            // -------  bridge\n            RigidBody body = null!;\n\n            JVector startPos = new JVector(-10, 8, -20);\n            const int numElements = 30;\n\n            for (int i = 0; i < numElements; i++)\n            {\n                var nbody = world.CreateRigidBody();\n                nbody.AddShape(new BoxShape(0.7f, 0.1f, 4f));\n                nbody.Position = startPos + new JVector(i * 0.8f, 0, 0);\n\n                if (i == 0)\n                {\n                    var hinge = new HingeJoint(world, world.NullBody, nbody,\n                        startPos + new JVector(i * 0.8f - 0.7f, 0, 0), JVector.UnitZ);\n                }\n                else\n                {\n                    var hinge = new HingeJoint(world, body, nbody,\n                        startPos + new JVector(i * 0.8f - 0.1f, 0, 0), JVector.UnitZ);\n\n                    hinge.BallSocket.Softness = 0.1f;\n                    hinges.Add(hinge);\n                }\n\n                if (i == numElements - 1)\n                {\n                    var hinge = new HingeJoint(world, nbody, world.NullBody,\n                        startPos + new JVector(i * 0.8f + 0.7f, 0, 0), JVector.UnitZ);\n                }\n\n                body = nbody;\n            }\n        }\n\n        {\n            // Add a car made out of constraints\n            JVector carPos = new JVector(10, 9, -20);\n            JQuaternion rot = JQuaternion.CreateRotationY(MathF.PI / 2.0f);\n\n            car.BuildCar(world, carPos, body =>\n                {\n                    body.Position = JVector.Transform(body.Position, rot) + carPos;\n                    body.Orientation = rot;\n                }\n            );\n        }\n\n        world.SubstepCount = 4;\n        world.SolverIterations = (2, 2);\n    }\n\n    public void DrawUpdate()\n    {\n        for (int i = hinges.Count; i-- > 0;)\n        {\n            var h = hinges[i];\n            if (h.BallSocket.Impulse.Length() > 0.5f)\n            {\n                h.Remove();\n                hinges.RemoveAt(i);\n            }\n        }\n\n        car.UpdateControls();\n    }\n}"
  },
  {
    "path": "src/JitterDemo/Demos/Demo02.cs",
    "content": "using Jitter2;\nusing Jitter2.LinearMath;\nusing JitterDemo.Renderer;\n\nnamespace JitterDemo;\n\npublic class Demo02 : IDemo\n{\n    public string Name => \"Tower of Jitter\";\n    public string Description => \"A single tower of stacked bodies to test solver stability.\";\n\n    public void Build(Playground pg, World world)\n    {\n        pg.AddFloor();\n\n        Common.BuildTower(JVector.Zero);\n\n        world.SolverIterations = (12, 4);\n    }\n}"
  },
  {
    "path": "src/JitterDemo/Demos/Demo03.cs",
    "content": "using Jitter2;\nusing Jitter2.LinearMath;\nusing JitterDemo.Renderer;\n\nnamespace JitterDemo;\n\npublic class Demo03 : IDemo\n{\n    public string Name => \"Ancient Pyramids\";\n    public string Description => \"Large pyramids of boxes and cylinders to stress-test stacking.\";\n\n    public void Build(Playground pg, World world)\n    {\n        pg.AddFloor();\n\n        Common.BuildPyramid(JVector.Zero, 40);\n        Common.BuildPyramidCylinder(new JVector(10, 0, 10));\n\n        world.SolverIterations = (4, 4);\n    }\n}"
  },
  {
    "path": "src/JitterDemo/Demos/Demo04.cs",
    "content": "using Jitter2;\nusing Jitter2.LinearMath;\nusing JitterDemo.Renderer;\nusing static JitterDemo.Common;\n\nnamespace JitterDemo;\n\npublic class Demo04 : IDemo\n{\n    public string Name => \"Many Ragdolls\";\n    public string Description => \"100 ragdolls dropping from increasing heights with collision filtering between limbs.\";\n\n    public void Build(Playground pg, World world)\n    {\n        pg.AddFloor();\n\n        for (int i = 0; i < 100; i++)\n        {\n            BuildRagdoll(new JVector(0, 3 + 2 * i, 0));\n        }\n\n        world.SolverIterations = (8, 4);\n    }\n}"
  },
  {
    "path": "src/JitterDemo/Demos/Demo05.cs",
    "content": "using System.Collections.Generic;\nusing System.Linq;\nusing System.Runtime.InteropServices;\nusing Jitter2;\nusing Jitter2.Collision.Shapes;\nusing Jitter2.Dynamics;\nusing Jitter2.LinearMath;\nusing JitterDemo.Renderer;\nusing JitterDemo.Renderer.OpenGL;\nusing TriangleMesh = JitterDemo.Renderer.TriangleMesh;\n\nnamespace JitterDemo;\n\npublic class Dust : TriangleMesh\n{\n    public Dust() : base(\"level.obj\", 0.8f)\n    {\n    }\n\n    public override void LightPass(PhongShader shader)\n    {\n        shader.MaterialProperties.SetDefaultMaterial();\n        shader.MaterialProperties.ColorMixing.Set(1.2f, 0, 0.5f);\n        base.LightPass(shader);\n    }\n}\n\npublic class Demo05 : IDemo, IDrawUpdate\n{\n    public string Name => \"Level Geometry\";\n    public string Description => \"Triangle-mesh level loaded from an OBJ file with a player character.\";\n    public string Controls => \"Arrow Keys - Move player\\nLeft Ctrl - Jump\\nO - Toggle debug draw\";\n\n    private TriangleMesh tm = null!;\n\n    private Player player = null!;\n\n    private RigidBody level = null!;\n\n    private bool debugDraw;\n\n    public IEnumerable<RigidBodyShape> CreateShapes()\n    {\n        var indices = MemoryMarshal.Cast<TriangleVertexIndex, int>(tm.Mesh.Indices);\n        var vertices = tm.Mesh.Vertices.Select(vertex => Conversion.ToJitterVector(vertex.Position)).ToArray();\n\n        var jtm = new Jitter2.Collision.Shapes.TriangleMesh(vertices, indices);\n        return TriangleShape.CreateAllShapes(jtm);\n    }\n\n    public void Build(Playground pg, World world)\n    {\n        tm = pg.CSMRenderer.GetInstance<Dust>();\n\n        pg.AddFloor();\n\n        level = world.CreateRigidBody();\n        level.AddShapes(CreateShapes(), MassInertiaUpdateMode.Preserve);\n        level.Tag = new RigidBodyTag(doNotDraw:true);\n        level.MotionType = MotionType.Static;\n\n        Common.BuildJenga(new JVector(-2, 6, 24), 20, rigidBody => rigidBody.Friction = 0.3f);\n\n        player = new Player(world, new JVector(-6, 7, 32));\n    }\n\n    public void DrawUpdate()\n    {\n        tm.PushMatrix(Conversion.FromJitter(level), new Vector3(0.35f, 0.35f, 0.35f));\n\n        if (debugDraw)\n        {\n            Playground pg = (Playground)RenderWindow.Instance;\n\n            foreach (var triangle in tm.Mesh.Indices)\n            {\n                var a = tm.Mesh.Vertices[triangle.T1].Position;\n                var b = tm.Mesh.Vertices[triangle.T2].Position;\n                var c = tm.Mesh.Vertices[triangle.T3].Position;\n\n                pg.DebugRenderer.PushLine(DebugRenderer.Color.Green, a, b);\n                pg.DebugRenderer.PushLine(DebugRenderer.Color.Green, b, c);\n                pg.DebugRenderer.PushLine(DebugRenderer.Color.Green, c, a);\n            }\n        }\n\n        Keyboard kb = Keyboard.Instance;\n\n        if (kb.KeyPressBegin(Keyboard.Key.O)) debugDraw = !debugDraw;\n\n        if (kb.IsKeyDown(Keyboard.Key.Left)) player.SetAngularInput(-1.0f);\n        else if (kb.IsKeyDown(Keyboard.Key.Right)) player.SetAngularInput(1.0f);\n        else player.SetAngularInput(0.0f);\n\n        if (kb.IsKeyDown(Keyboard.Key.Up)) player.SetLinearInput(-JVector.UnitZ);\n        else if (kb.IsKeyDown(Keyboard.Key.Down)) player.SetLinearInput(JVector.UnitZ);\n        else player.SetLinearInput(JVector.Zero);\n\n        if (kb.IsKeyDown(Keyboard.Key.LeftControl)) player.Jump();\n    }\n}"
  },
  {
    "path": "src/JitterDemo/Demos/Demo06.cs",
    "content": "using System;\nusing System.IO;\nusing Jitter2;\nusing Jitter2.LinearMath;\nusing JitterDemo.Renderer;\nusing JitterDemo.Renderer.OpenGL;\n\nnamespace JitterDemo;\n\npublic static class CarTextureCache\n{\n    private static Texture2D? carTexture;\n\n    public static Texture2D CarTexture\n    {\n        get\n        {\n            if (carTexture == null)\n            {\n                carTexture = new Texture2D();\n                string filename = Path.Combine(\"assets\", \"car.tga\");\n\n                Image.LoadImage(filename).FixedData((img, ptr) => { carTexture.LoadImage(ptr, img.Width, img.Height); });\n\n                carTexture.SetWrap(Texture.Wrap.Repeat);\n                carTexture.SetAnisotropicFiltering(Texture.Anisotropy.Filter_8x);\n            }\n\n            return carTexture;\n        }\n    }\n}\n\npublic class WheelMesh : TriangleMesh\n{\n    public WheelMesh() : base(\"wheel.obj\")\n    {\n    }\n\n    public override void LightPass(PhongShader shader)\n    {\n        shader.MaterialProperties.SetDefaultMaterial();\n        shader.MaterialProperties.ColorMixing.Set(0.05f, 0, 1);\n\n        shader.MaterialProperties.Specular.Set(1, 1, 1);\n        shader.MaterialProperties.Shininess.Set(1000);\n\n        base.LightPass(shader);\n    }\n\n    public override void Load()\n    {\n        Texture = CarTextureCache.CarTexture;\n        base.Load();\n    }\n}\n\npublic class CarMesh : MultiMesh\n{\n    public CarMesh() : base(\"./assets/car.obj\")\n    {\n    }\n\n    public override void LightPass(PhongShader shader)\n    {\n        if (mesh.Groups.Length == 0) return;\n\n        Texture?.Bind(3);\n\n        shader.MaterialProperties.SetDefaultMaterial();\n\n        Vao.Bind();\n\n        int sof = sizeof(float);\n        Mesh.Group mg;\n\n        // chassis\n        mg = mesh.Groups[1];\n        shader.MaterialProperties.ColorMixing.Set(0.1f, 0, 1.2f);\n        shader.MaterialProperties.Shininess.Set(1000);\n        shader.MaterialProperties.Specular.Set(1, 1, 1);\n        GLDevice.DrawElementsInstanced(DrawMode.Triangles, 3 * (mg.ToExclusive - mg.FromInclusive),\n            IndexType.UnsignedInt, mg.FromInclusive * sof * 3, Count);\n\n        // glass\n        mg = mesh.Groups[0];\n        shader.MaterialProperties.ColorMixing.Set(0, 1, 0);\n        shader.MaterialProperties.Color.Set(0.6f, 0.6f, 0.6f);\n        shader.MaterialProperties.Alpha.Set(0.6f);\n        shader.MaterialProperties.Shininess.Set(1000.0f);\n        GLDevice.DrawElementsInstanced(DrawMode.Triangles, 3 * (mg.ToExclusive - mg.FromInclusive),\n            IndexType.UnsignedInt, mg.FromInclusive * sof * 3, Count);\n        shader.MaterialProperties.Alpha.Set(1.0f);\n    }\n\n    public override void Load()\n    {\n        Texture = CarTextureCache.CarTexture;\n        base.Load();\n    }\n}\n\npublic class Demo06 : IDemo, IDrawUpdate\n{\n    public string Name => \"Ray-cast Car\";\n    public string Description => \"Drivable car using raycasts for wheel-ground contact.\";\n    public string Controls => \"Arrow Keys - Steer and accelerate\";\n\n    private RayCastCar defaultCar = null!;\n\n    public void Build(Playground pg, World world)\n    {\n        pg.AddFloor();\n\n        defaultCar = new RayCastCar(world);\n        defaultCar.Body.Position = new JVector(0, 2, 0);\n        defaultCar.Body.DeactivationTime = TimeSpan.MaxValue;\n        defaultCar.Body.Tag = new RigidBodyTag();\n\n        Common.BuildPyramid(-JVector.UnitZ * 20, 10);\n        Common.BuildJenga(new JVector(-20, 0, -10), 10);\n        Common.BuildWall(new JVector(30, 0, -20), 4);\n\n        world.SolverIterations = (4, 4);\n        world.SubstepCount = 2;\n    }\n\n    public void DrawUpdate()\n    {\n        var cm = RenderWindow.Instance.CSMRenderer.GetInstance<CarMesh>();\n        cm.PushMatrix(Conversion.FromJitter(defaultCar.Body) *\n                      MatrixHelper.CreateTranslation(0, -0.3f, 0.8f));\n\n        var whr = RenderWindow.Instance.CSMRenderer.GetInstance<WheelMesh>();\n\n        for (int i = 0; i < 4; i++)\n        {\n            Wheel wh = defaultCar.Wheels[i];\n\n            Matrix4 rotate = Matrix4.Identity;\n\n            if (i == 1 || i == 3) rotate = MatrixHelper.CreateRotationY(MathF.PI);\n\n            Matrix4 whm = Conversion.FromJitter(defaultCar.Body) *\n                          MatrixHelper.CreateTranslation(Conversion.FromJitter(wh.GetWheelCenter())) *\n                          MatrixHelper.CreateRotationY(wh.SteerAngle) *\n                          MatrixHelper.CreateRotationX(-wh.WheelRotation) *\n                          rotate;\n\n            whr.PushMatrix(whm);\n        }\n\n        float steer, accelerate;\n        var kb = Keyboard.Instance;\n\n        if (kb.IsKeyDown(Keyboard.Key.Up)) accelerate = 1.0f;\n        else if (kb.IsKeyDown(Keyboard.Key.Down)) accelerate = -1.0f;\n        else accelerate = 0.0f;\n\n        if (kb.IsKeyDown(Keyboard.Key.Left)) steer = 1;\n        else if (kb.IsKeyDown(Keyboard.Key.Right)) steer = -1;\n        else steer = 0.0f;\n\n        defaultCar.SetInput(accelerate, steer);\n\n        defaultCar.Step(1.0f / 100.0f);\n    }\n}"
  },
  {
    "path": "src/JitterDemo/Demos/Demo07.cs",
    "content": "using Jitter2;\nusing Jitter2.LinearMath;\nusing JitterDemo.Renderer;\n\nnamespace JitterDemo;\n\npublic class Demo07 : IDemo\n{\n    public string Name => \"Many Pyramids\";\n    public string Description => \"60 pre-deactivated box pyramids arranged in a grid.\";\n\n    public void Build(Playground pg, World world)\n    {\n        pg.AddFloor();\n\n        world.SolverIterations = (4, 2);\n\n        for (int e = 0; e < 2; e++)\n        {\n            for (int i = 0; i < 30; i++)\n            {\n                Common.BuildPyramid(new JVector(-20 + 40 * e, 0, -75 + 5 * i), 20,\n                    body => body.SetActivationState(false));\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/JitterDemo/Demos/Demo08.cs",
    "content": "using Jitter2;\nusing Jitter2.Collision.Shapes;\nusing Jitter2.Dynamics;\nusing Jitter2.LinearMath;\nusing JitterDemo.Renderer;\n\nnamespace JitterDemo;\n\npublic class Demo08 : IDemo\n{\n    public string Name => \"Contact Manifold Test\";\n\n    public void Build(Playground pg, World world)\n    {\n        pg.AddFloor();\n\n        world.SolverIterations = (4, 4);\n\n        var body = world.CreateRigidBody();\n        body.AddShape(new BoxShape(new JVector(5, 0.5f, 0.5f)));\n        body.Position = new JVector(0, 1, 0);\n        body.MotionType = MotionType.Static;\n\n        var body2 = world.CreateRigidBody();\n        body2.AddShape(new CylinderShape(0.5f, 3.0f));\n        body2.Position = new JVector(0, 2.5f, 0);\n        body2.Friction = 0;\n    }\n}"
  },
  {
    "path": "src/JitterDemo/Demos/Demo09.cs",
    "content": "using Jitter2;\nusing Jitter2.Collision.Shapes;\nusing Jitter2.LinearMath;\nusing JitterDemo.Renderer;\n\nnamespace JitterDemo;\n\npublic class Demo09 : IDemo\n{\n    public string Name => \"Restitution and Friction\";\n    public string Description => \"Varying restitution and friction values across rows of bodies.\";\n\n    public void Build(Playground pg, World world)\n    {\n        pg.AddFloor();\n\n        world.SolverIterations = (20, 4);\n\n        if (pg.FloorShape != null)\n        {\n            pg.FloorShape.RigidBody.Friction = 0.0f;\n            pg.FloorShape.RigidBody.Restitution = 0.0f;\n        }\n\n        for (int i = 0; i < 11; i++)\n        {\n            var body = world.CreateRigidBody();\n            body.AddShape(new BoxShape(0.5f));\n            body.Position = new JVector(-10 + i * 1, 4, -10);\n            body.Restitution = i * 0.1f;\n            body.Damping = (0.001f, 0.001f);\n        }\n\n        for (int i = 0; i < 11; i++)\n        {\n            var body = world.CreateRigidBody();\n            body.AddShape(new BoxShape(0.5f));\n            body.Position = new JVector(2 + i, 0.25f, 0);\n            body.Friction = 1.0f - i * 0.1f;\n            body.Velocity = new JVector(0, 0, -10);\n            body.Damping = (0.001f, 0.001f);\n        }\n    }\n}"
  },
  {
    "path": "src/JitterDemo/Demos/Demo10.cs",
    "content": "using Jitter2;\nusing Jitter2.Collision.Shapes;\nusing Jitter2.Dynamics;\nusing Jitter2.LinearMath;\nusing JitterDemo.Renderer;\n\nnamespace JitterDemo;\n\npublic class Demo10 : IDemo\n{\n    public string Name => \"Stacked Cubes\";\n    public string Description => \"Tall stacks of cubes and cones using sub-stepping for stability.\";\n\n    public void Build(Playground pg, World world)\n    {\n        pg.AddFloor();\n\n        for (int i = 0; i < 32; i++)\n        {\n            var body = world.CreateRigidBody();\n\n            body.Position = new JVector(0, 0.5f + i * 0.999f, 0);\n            body.AddShape(new BoxShape(1));\n            body.Damping = (0.002f, 0.002f);\n        }\n\n        for (int i = 0; i < 32; i++)\n        {\n            var body = world.CreateRigidBody();\n\n            body.Position = new JVector(10, 0.5f + i * 0.999f, 0);\n            body.AddShape(new TransformedShape(new ConeShape(), JVector.Zero, JMatrix.CreateScale(0.4f, 1, 1)));\n            body.Damping = (0.002f, 0.002f);\n        }\n\n        world.SolverIterations = (4, 2);\n        world.SubstepCount = 3;\n    }\n}"
  },
  {
    "path": "src/JitterDemo/Demos/Demo11.cs",
    "content": "using System;\nusing Jitter2;\nusing Jitter2.Collision.Shapes;\nusing Jitter2.Dynamics;\nusing Jitter2.Dynamics.Constraints;\nusing Jitter2.LinearMath;\nusing JitterDemo.Renderer;\n\nnamespace JitterDemo;\n\npublic class Demo11 : IDemo, IDrawUpdate\n{\n    public string Name => \"Double Pendulum\";\n\n    private RigidBody b0 = null!, b1 = null!;\n\n    private World world = null!;\n\n    public void Build(Playground pg, World world)\n    {\n        this.world = world;\n\n        pg.AddFloor();\n\n        b0 = world.CreateRigidBody();\n        b0.AddShape(new SphereShape(0.2f));\n        b0.Position = new JVector(0, 12, 0);\n        b0.Velocity = new JVector(0.01f, 0, 0);\n        b0.DeactivationTime = TimeSpan.MaxValue;\n\n        b1 = world.CreateRigidBody();\n        b1.AddShape(new SphereShape(0.2f));\n        b1.Velocity = new JVector(0, 0, 0.01f);\n        b1.Position = new JVector(0, 13, 0);\n\n        var c0 = world.CreateConstraint<DistanceLimit>(world.NullBody, b0);\n        c0.Initialize(new JVector(0, 8, 0), b0.Position);\n\n        var c1 = world.CreateConstraint<DistanceLimit>(b0, b1);\n        c1.Initialize(b0.Position, b1.Position);\n\n        world.SubstepCount = 10;\n        world.SolverIterations = (2, 2);\n\n        b0.Damping = (0, 0);\n        b1.Damping = (0, 0);\n    }\n\n    public void DrawUpdate()\n    {\n        float ekin = 0.5f * (b0.Velocity.LengthSquared() + b1.Velocity.LengthSquared());\n        float epot = -world.Gravity.Y * (b0.Position.Y + b1.Position.Y);\n\n        Console.WriteLine($\"Energy: {ekin + epot} Kinetic {ekin}; Potential {epot}\");\n\n        var dr = RenderWindow.Instance.DebugRenderer;\n        dr.PushLine(DebugRenderer.Color.Green, Conversion.FromJitter(new JVector(0, 8, 0)), Conversion.FromJitter(b0.Position));\n        dr.PushLine(DebugRenderer.Color.White, Conversion.FromJitter(b0.Position), Conversion.FromJitter(b1.Position));\n    }\n}"
  },
  {
    "path": "src/JitterDemo/Demos/Demo12.cs",
    "content": "using Jitter2;\nusing Jitter2.Collision.Shapes;\nusing Jitter2.Dynamics;\nusing Jitter2.LinearMath;\nusing JitterDemo.Renderer;\n\nnamespace JitterDemo;\n\npublic class Demo12 : IDemo\n{\n    public string Name => \"Speculative Contacts\";\n    public string Description => \"High-velocity objects fired at thin walls to test tunneling prevention.\";\n\n    public void Build(Playground pg, World world)\n    {\n        pg.AddFloor();\n\n        world.BroadPhaseFilter = new Common.IgnoreCollisionBetweenFilter();\n\n        var wallBody = world.CreateRigidBody();\n        wallBody.AddShape(new BoxShape(10, 10f, 0.02f));\n        wallBody.Position = new JVector(0, 6, -10);\n        wallBody.MotionType = MotionType.Static;\n\n        var sphereBody = world.CreateRigidBody();\n        sphereBody.AddShape(new SphereShape(0.3f));\n        sphereBody.Position = new JVector(-3, 8, -1);\n        sphereBody.Velocity = new JVector(0, 0, -107);\n        sphereBody.EnableSpeculativeContacts = true;\n\n        var boxBody = world.CreateRigidBody();\n        boxBody.AddShape(new BoxShape(0.3f));\n        boxBody.Position = new JVector(+3, 8, -1);\n        boxBody.Velocity = new JVector(0, 0, -107);\n        boxBody.EnableSpeculativeContacts = true;\n\n        Common.BuildRagdoll(new JVector(0, 8, -1),\n            body =>\n            {\n                body.Velocity = new JVector(0, 0, -107);\n                body.EnableSpeculativeContacts = true;\n                body.SetActivationState(false);\n            }\n        );\n    }\n}"
  },
  {
    "path": "src/JitterDemo/Demos/Demo13.cs",
    "content": "using System;\nusing Jitter2;\nusing Jitter2.Collision.Shapes;\nusing Jitter2.Dynamics.Constraints;\nusing Jitter2.LinearMath;\nusing JitterDemo.Renderer;\n\nnamespace JitterDemo;\n\npublic class Demo13 : IDemo\n{\n    public string Name => \"Motor and Limit\";\n    public string Description => \"Hinge joints with angular motors, angular limits, and coupled rotating wheels.\";\n\n    public void Build(Playground pg, World world)\n    {\n        pg.AddFloor();\n\n        {\n            // Motor\n            var b0 = world.CreateRigidBody();\n            b0.AddShape(new BoxShape(2, 0.1f, 0.1f));\n            b0.Position = new JVector(-1.1f, 4, 0);\n\n            var b1 = world.CreateRigidBody();\n            b1.AddShape(new BoxShape(2, 0.1f, 0.1f));\n            b1.Position = new JVector(1.1f, 4, 0);\n\n            HingeJoint hj = new HingeJoint(world, world.NullBody, b0, b0.Position, JVector.UnitX, AngularLimit.Full, true);\n            UniversalJoint uj = new UniversalJoint(world, b0, b1, new JVector(0, 4, 0), JVector.UnitX, JVector.UnitX);\n\n            if (hj.Motor != null)\n            {\n                hj.Motor.TargetVelocity = 4;\n                hj.Motor.MaximumForce = 1;\n            }\n\n            if (world.BroadPhaseFilter is not Common.IgnoreCollisionBetweenFilter filter)\n            {\n                filter = new Common.IgnoreCollisionBetweenFilter();\n                world.BroadPhaseFilter = filter;\n            }\n\n            filter.IgnoreCollisionBetween(b0.Shapes[0], b1.Shapes[0]);\n        }\n\n        {\n            // Hinge Joint with -120 <-> + 120 Limit\n            var b0 = world.CreateRigidBody();\n            b0.AddShape(new BoxShape(2, 0.1f, 3));\n            b0.AddShape(new BoxShape(0.1f, 2, 2.9f));\n            b0.Position = new JVector(-5, 3, 0);\n\n            HingeJoint hj = new HingeJoint(world, world.NullBody, b0, b0.Position, JVector.UnitZ, AngularLimit.FromDegree(-120, 120));\n            hj.HingeAngle.Bias = 0.3f;\n            hj.HingeAngle.Softness = 0.0f;\n            hj.HingeAngle.LimitBias = 0.3f;\n            hj.HingeAngle.LimitSoftness = 0.0f;\n\n            for (int i = 0; i < 4; i++)\n                Common.BuildRagdoll(new JVector(-4, 5 + i * 3, 0));\n        }\n\n        {\n            float angle = (float)JAngle.FromDegree(90);\n            JVector rot1Axis = JVector.Transform(JVector.UnitZ, JQuaternion.CreateRotationY(angle));\n\n            // two free rotating wheels\n            var b0 = world.CreateRigidBody();\n            b0.Position = new JVector(5, 4, 0);\n            b0.Orientation = JQuaternion.CreateRotationX(MathF.PI / 2);\n            b0.AddShape(new CylinderShape(0.4f, 2.0f));\n\n            var b1 = world.CreateRigidBody();\n            b1.AddShape(new CylinderShape(0.4f, 2.0f));\n            b1.Position = new JVector(9.2f, 4, 0);\n            b1.Orientation = JQuaternion.CreateRotationY(angle) * JQuaternion.CreateRotationX(MathF.PI / 2);\n\n            HingeJoint hj1 = new HingeJoint(world, world.NullBody, b0, b0.Position, JVector.UnitZ, AngularLimit.Full);\n            HingeJoint hj2 = new HingeJoint(world, world.NullBody, b1, b1.Position, rot1Axis, AngularLimit.Full);\n            hj1.HingeAngle.Softness = 0;\n            hj2.HingeAngle.Softness = 0;\n\n            // constraint them to have the same rotation\n            var relative = world.CreateConstraint<TwistAngle>(b0, b1);\n            relative.Initialize(JVector.UnitZ, rot1Axis);\n        }\n\n        world.SolverIterations = (4, 2);\n        world.SubstepCount = 3;\n    }\n}"
  },
  {
    "path": "src/JitterDemo/Demos/Demo14.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing Jitter2;\nusing Jitter2.Collision;\nusing Jitter2.Collision.Shapes;\nusing Jitter2.Dynamics;\nusing Jitter2.LinearMath;\nusing JitterDemo.Renderer;\nusing JitterDemo.Renderer.OpenGL;\n\nnamespace JitterDemo;\n\npublic class CustomSupportMapInstance<T> : CSMInstance where T : Shape, new()\n{\n    public override (Vertex[] vertices, TriangleVertexIndex[] indices) ProvideVertices()\n    {\n        T es = new();\n\n        List<Vertex> verts = new();\n        List<TriangleVertexIndex> inds = new();\n\n        int idx = 0;\n\n        foreach (var triangle in ShapeHelper.Tessellate(es))\n        {\n            JVector normal = (triangle.V1 - triangle.V0) % (triangle.V2 - triangle.V0);\n            JVector.NormalizeInPlace(ref normal);\n\n            verts.Add(new Vertex(Conversion.FromJitter(triangle.V0), Conversion.FromJitter(normal)));\n            verts.Add(new Vertex(Conversion.FromJitter(triangle.V1), Conversion.FromJitter(normal)));\n            verts.Add(new Vertex(Conversion.FromJitter(triangle.V2), Conversion.FromJitter(normal)));\n\n            inds.Add(new TriangleVertexIndex(idx + 0, idx + 1, idx + 2));\n            idx += 3;\n        }\n\n        return (verts.ToArray(), inds.ToArray());\n    }\n\n    public override void LightPass(PhongShader shader)\n    {\n        shader.MaterialProperties.ColorMixing.Set(0.7f, 0, 0);\n        base.LightPass(shader);\n    }\n}\n\npublic class EllipsoidShape : RigidBodyShape\n{\n    public EllipsoidShape()\n    {\n        UpdateWorldBoundingBox();\n    }\n\n    public override void SupportMap(in JVector direction, out JVector result)\n    {\n        JVector dir = direction;\n        dir.X *= 0.8f;\n        dir.Y *= 1.2f;\n        dir.Z *= 0.4f;\n        result = dir;\n        JVector.NormalizeInPlace(ref result);\n        result.X *= 0.8f;\n        result.Y *= 1.2f;\n        result.Z *= 0.4f;\n    }\n\n    public override void GetCenter(out JVector point)\n    {\n        point = JVector.Zero;\n    }\n}\n\npublic class DoubleSphereShape : RigidBodyShape\n{\n    public DoubleSphereShape()\n    {\n        UpdateWorldBoundingBox();\n    }\n\n    public override void SupportMap(in JVector direction, out JVector result)\n    {\n        JVector.Normalize(direction, out JVector ndir);\n\n        JVector sphere1 = ndir * 1.0f + JVector.UnitY * 1.1f;\n        JVector sphere2 = ndir * 1.5f - JVector.UnitY * 0.5f;\n\n        if (JVector.Dot(sphere1, ndir) > JVector.Dot(sphere2, ndir))\n        {\n            result = sphere1 * 0.5f;\n        }\n        else\n        {\n            result = sphere2 * 0.5f;\n        }\n    }\n\n    public override void GetCenter(out JVector point)\n    {\n        point = JVector.Zero;\n    }\n}\n\npublic class Icosahedron : RigidBodyShape\n{\n    private static readonly float GR = (1.0f + MathF.Sqrt(5.0f)) / 2.0f;\n\n    private static readonly JVector[] Vertices =\n    [\n        new(0, +1, +GR), new(0, -1, +GR), new(0, +1, -GR), new(0, -1, -GR),\n        new(+1, +GR, 0), new(+1, -GR, 0), new(-1, +GR, 0), new(-1, -GR, 0),\n        new(+GR, 0, +1), new(+GR, 0, -1), new(-GR, 0, +1), new(-GR, 0, -1)\n    ];\n\n    public Icosahedron()\n    {\n        UpdateWorldBoundingBox();\n    }\n\n    public override void SupportMap(in JVector direction, out JVector result)\n    {\n        int largestIndex = 0;\n        float maxDot = JVector.Dot(Vertices[0], direction);\n\n        for (int i = 1; i < Vertices.Length; i++)\n        {\n            float dot = JVector.Dot(Vertices[i], direction);\n            if (dot > maxDot)\n            {\n                maxDot = dot;\n                largestIndex = i;\n            }\n        }\n\n        result = Vertices[largestIndex] * 0.5f;\n    }\n\n    public override void GetCenter(out JVector point)\n    {\n        point = JVector.Zero;\n    }\n}\n\npublic class Demo14 : IDemo, IDrawUpdate\n{\n    public string Name => \"Custom Shapes\";\n    public string Description => \"Custom support-mapped shapes: ellipsoid, double-sphere, and icosahedron.\";\n\n    private Playground pg = null!;\n\n    private List<RigidBody> demoBodies = null!;\n\n    public void Build(Playground pg, World world)\n    {\n        this.pg = pg;\n\n        pg.AddFloor();\n\n        demoBodies = new List<RigidBody>();\n\n        for (int i = 0; i < 100; i++)\n        {\n            var ellipsoid = new EllipsoidShape();\n            var doublesSphere = new DoubleSphereShape();\n            var icosahedron = new Icosahedron();\n\n            var body1 = world.CreateRigidBody();\n            body1.AddShape(ellipsoid);\n            body1.Position = new JVector(-3, 3 + i * 5, 0);\n            demoBodies.Add(body1);\n\n            var body2 = world.CreateRigidBody();\n            body2.AddShape(doublesSphere);\n            body2.Position = new JVector(0, 3 + i * 5, 0);\n            demoBodies.Add(body2);\n\n            var body3 = world.CreateRigidBody();\n            body3.AddShape(icosahedron);\n            body3.Position = new JVector(3, 3 + i * 5, 0);\n            demoBodies.Add(body3);\n        }\n    }\n\n    public void DrawUpdate()\n    {\n        var cesd = pg.CSMRenderer.GetInstance<CustomSupportMapInstance<EllipsoidShape>>();\n        var rbsd = pg.CSMRenderer.GetInstance<CustomSupportMapInstance<DoubleSphereShape>>();\n        var icsd = pg.CSMRenderer.GetInstance<CustomSupportMapInstance<Icosahedron>>();\n\n        foreach (var body in demoBodies)\n        {\n            var color = ColorGenerator.GetColor(body.GetHashCode());\n            if (!body.IsActive) color += new Vector3(0.2f, 0.2f, 0.2f);\n\n            switch (body.Shapes[0])\n            {\n                case EllipsoidShape:\n                    cesd.PushMatrix(Conversion.FromJitter(body), color);\n                    break;\n                case DoubleSphereShape:\n                    rbsd.PushMatrix(Conversion.FromJitter(body), color);\n                    break;\n                case Icosahedron:\n                    icsd.PushMatrix(Conversion.FromJitter(body), color);\n                    break;\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/JitterDemo/Demos/Demo15.cs",
    "content": "using System.Collections.Generic;\nusing Jitter2;\nusing Jitter2.LinearMath;\nusing Jitter2.SoftBodies;\nusing JitterDemo.Renderer;\n\nnamespace JitterDemo;\n\npublic class Demo15 : IDemo, ICleanDemo, IDrawUpdate\n{\n    public string Name => \"Pressurized Soft Bodies\";\n    public string Description => \"Soft-body spheres using spring-connected particles and internal pressure.\";\n\n    private readonly List<SoftBodySphere> spheres = new();\n    private World world = null!;\n\n    public void Build(Playground pg, World world)\n    {\n        spheres.Clear();\n\n        this.world = world;\n\n        pg.AddFloor();\n\n        // Prepare Jitter to handle soft bodies.\n        world.DynamicTree.Filter = DynamicTreeCollisionFilter.Filter;\n        world.BroadPhaseFilter = new BroadPhaseCollisionFilter(world);\n\n        for (int i = 0; i < 3; i++)\n        {\n            var sphere = new SoftBodySphere(world, new JVector(-3 + i * 3, 2, 0));\n            sphere.Pressure = 300;\n            spheres.Add(sphere);\n        }\n\n        world.SolverIterations = (4, 2);\n        world.SubstepCount = 3;\n    }\n\n    public void DrawUpdate()\n    {\n        var dr = RenderWindow.Instance.DebugRenderer;\n\n        foreach (var sphere in spheres)\n        {\n            foreach (var spring in sphere.Springs)\n            {\n                dr.PushLine(DebugRenderer.Color.Green, Conversion.FromJitter(spring.Body1.Position),\n                    Conversion.FromJitter(spring.Body2.Position));\n            }\n        }\n    }\n\n    public void CleanUp()\n    {\n        spheres.ForEach(sphere => sphere.Destroy());\n    }\n}"
  },
  {
    "path": "src/JitterDemo/Demos/Demo16.cs",
    "content": "using System.Collections.Generic;\nusing Jitter2;\nusing Jitter2.Collision.Shapes;\nusing Jitter2.LinearMath;\nusing Jitter2.SoftBodies;\nusing JitterDemo.Renderer;\n\nnamespace JitterDemo;\n\npublic class Demo16 : IDemo, ICleanDemo, IDrawUpdate\n{\n    public string Name => \"Soft Body Cubes\";\n    public string Description => \"Deformable soft-body cubes interacting with rigid bodies.\";\n\n    private readonly List<SoftBodyCube> cubes = new();\n    private World world = null!;\n\n    public void Build(Playground pg, World world)\n    {\n        cubes.Clear();\n\n        this.world = world;\n\n        pg.AddFloor();\n\n        world.DynamicTree.Filter = DynamicTreeCollisionFilter.Filter;\n        world.BroadPhaseFilter = new BroadPhaseCollisionFilter(world);\n\n        for (int i = 0; i < 3; i++)\n        {\n            JVector pos = new JVector(0, 5 + i * 3, 0);\n\n            var cube = new SoftBodyCube(world, pos);\n            cubes.Add(cube);\n\n            JVector[] offset =\n            {\n                new(-0.5f, -1.5f, -0.5f),\n                new(-0.5f, -1.5f, +0.5f),\n                new(+0.5f, -1.5f, -0.5f),\n                new(+0.5f, -1.5f, +0.5f)\n            };\n\n            for (int e = 0; e < 4; e++)\n            {\n                var c0 = world.CreateRigidBody();\n                c0.AddShape(new BoxShape(1));\n                c0.Position = pos + offset[e];\n            }\n        }\n\n        JVector position = new JVector(10, 1, 0);\n\n        for (int i = 0; i < 3; i++)\n        {\n            for (int e = i; e < 3; e++)\n            {\n                JVector cpos = position + new JVector((e - i * 0.5f) * 1.01f, 0.5f + i * 1.0f, 0) * 2;\n                var cube = new SoftBodyCube(world, cpos);\n                cubes.Add(cube);\n            }\n        }\n\n        world.SolverIterations = (4, 2);\n        world.SubstepCount = 4;\n    }\n\n    public void DrawUpdate()\n    {\n        var dr = RenderWindow.Instance.DebugRenderer;\n        foreach (var cube in cubes)\n        {\n            foreach (var spring in SoftBodyCube.Edges)\n            {\n                dr.PushLine(DebugRenderer.Color.Green, Conversion.FromJitter(cube.Vertices[spring.Item1].Position),\n                    Conversion.FromJitter(cube.Vertices[spring.Item2].Position));\n\n                dr.PushPoint(DebugRenderer.Color.White, Conversion.FromJitter(cube.Center.Position), 0.2f);\n            }\n        }\n    }\n\n    public void CleanUp()\n    {\n        foreach (var cube in cubes) cube.Destroy();\n    }\n}"
  },
  {
    "path": "src/JitterDemo/Demos/Demo17.cs",
    "content": "using System.Collections.Generic;\nusing System.Linq;\nusing Jitter2;\nusing Jitter2.Collision.Shapes;\nusing Jitter2.Dynamics;\nusing Jitter2.Dynamics.Constraints;\nusing Jitter2.LinearMath;\nusing Jitter2.SoftBodies;\nusing JitterDemo.Renderer;\nusing JitterDemo.Renderer.OpenGL;\n\nnamespace JitterDemo;\n\npublic class Demo17 : IDemo, ICleanDemo, IDrawUpdate\n{\n    public string Name => \"Cloth\";\n    public string Description => \"Cloth sheet pinned at its corners with rigid bodies falling onto it.\";\n\n    private Playground pg = null!;\n    private SoftBodyCloth cloth = null!;\n    private World world = null!;\n\n    private Cloth clothRenderer = null!;\n\n    public void Build(Playground pg, World world)\n    {\n        this.pg = pg;\n        this.world = world;\n\n        pg.AddFloor();\n\n        world.DynamicTree.Filter = DynamicTreeCollisionFilter.Filter;\n        world.BroadPhaseFilter = new BroadPhaseCollisionFilter(world);\n\n        const int len = 40;\n        const float scale = 0.2f;\n        const int leno2 = len / 2;\n\n        List<JTriangle> tris = new();\n\n        for (int i = 0; i < len; i++)\n        {\n            for (int e = 0; e < len; e++)\n            {\n                JVector v0 = new JVector((-leno2 + e + 0) * scale, 6, (-leno2 + i + 0) * scale);\n                JVector v1 = new JVector((-leno2 + e + 0) * scale, 6, (-leno2 + i + 1) * scale);\n                JVector v2 = new JVector((-leno2 + e + 1) * scale, 6, (-leno2 + i + 0) * scale);\n                JVector v3 = new JVector((-leno2 + e + 1) * scale, 6, (-leno2 + i + 1) * scale);\n\n                tris.Add(new JTriangle(v0, v1, v2));\n                tris.Add(new JTriangle(v3, v2, v1));\n            }\n        }\n\n        cloth = new SoftBodyCloth(world, tris);\n\n        clothRenderer = pg.CSMRenderer.GetInstance<Cloth>();\n        clothRenderer.SetIndices(cloth.Triangles.ToArray());\n        SetUVCoordinates();\n\n        var b0 = world.CreateRigidBody();\n        b0.Position = new JVector(-1, 10, 0);\n        b0.AddShape(new BoxShape(1));\n        b0.Orientation = JQuaternion.CreateRotationX(0.4f);\n\n        var b1 = world.CreateRigidBody();\n        b1.Position = new JVector(0, 10, 0);\n        b1.AddShape(new CapsuleShape(0.4f));\n        b1.Orientation = JQuaternion.CreateRotationX(1f);\n\n        var b2 = world.CreateRigidBody();\n        b2.Position = new JVector(1, 11, 0);\n        b2.AddShape(new SphereShape(0.5f));\n\n        RigidBody fb0 = cloth.Vertices.OrderByDescending(item => +item.Position.X + item.Position.Z).First();\n        var c0 = world.CreateConstraint<BallSocket>(fb0, world.NullBody);\n        c0.Initialize(fb0.Position);\n\n        RigidBody fb1 = cloth.Vertices.OrderByDescending(item => +item.Position.X - item.Position.Z).First();\n        var c1 = world.CreateConstraint<BallSocket>(fb1, world.NullBody);\n        c1.Initialize(fb1.Position);\n\n        RigidBody fb2 = cloth.Vertices.OrderByDescending(item => -item.Position.X + item.Position.Z).First();\n        var c2 = world.CreateConstraint<BallSocket>(fb2, world.NullBody);\n        c2.Initialize(fb2.Position);\n\n        RigidBody fb3 = cloth.Vertices.OrderByDescending(item => -item.Position.X - item.Position.Z).First();\n        var c3 = world.CreateConstraint<BallSocket>(fb3, world.NullBody);\n        c3.Initialize(fb3.Position);\n\n        world.SolverIterations = (4, 2);\n        world.SubstepCount = 3;\n    }\n\n    private void SetUVCoordinates()\n    {\n        var vertices = clothRenderer.Vertices;\n\n        for (int i = 0; i < cloth.Vertices.Count; i++)\n        {\n            ref var pos = ref cloth.Vertices[i].Data.Position;\n            vertices[i].Texture = new Vector2(pos.X, pos.Z);\n        }\n    }\n\n    private void UpdateRenderVertices()\n    {\n        var vertices = clothRenderer.Vertices;\n\n        for (int i = 0; i < cloth.Vertices.Count; i++)\n        {\n            vertices[i].Position = Conversion.FromJitter(cloth.Vertices[i].Position);\n        }\n\n        clothRenderer.VerticesChanged();\n    }\n\n\n    public void DrawUpdate()\n    {\n        UpdateRenderVertices();\n        clothRenderer.PushMatrix(Matrix4.Identity, Vector3.UnitY);\n    }\n\n    public void CleanUp()\n    {\n        cloth.Destroy();\n    }\n}"
  },
  {
    "path": "src/JitterDemo/Demos/Demo18.cs",
    "content": "using Jitter2;\nusing Jitter2.Collision;\nusing Jitter2.Collision.Shapes;\nusing Jitter2.LinearMath;\nusing JitterDemo.Renderer;\n\nnamespace JitterDemo;\n\npublic class Demo18 : IDemo, IDrawUpdate\n{\n    public void DrawUpdate()\n    {\n        float time = (float)pg.Time;\n\n        JMatrix ori = JMatrix.CreateRotationX(1.1f * time) *\n                      JMatrix.CreateRotationY(2.1f * time) *\n                      JMatrix.CreateRotationZ(1.7f * time);\n\n        for (int i = -15; i < 16; i++)\n        {\n            for (int e = -15; e < 16; e++)\n            {\n                for (int k = -15; k < 16; k++)\n                {\n                    JVector point = new JVector(i, e, k) * 0.1f;\n\n                    bool result = NarrowPhase.PointTest(testShape, ori, JVector.Zero, point);\n\n                    if (result)\n                    {\n                        pg.DebugRenderer.PushPoint(DebugRenderer.Color.White,\n                            Conversion.FromJitter(point), 0.01f);\n                    }\n                }\n            }\n        }\n    }\n\n    public string Name => \"PointTest\";\n\n    private Playground pg = null!;\n\n    private Shape testShape = null!;\n\n    public void Build(Playground pg, World world)\n    {\n        this.pg = pg;\n        testShape = new ConeShape(1f);\n    }\n}"
  },
  {
    "path": "src/JitterDemo/Demos/Demo19.cs",
    "content": "using Jitter2;\nusing Jitter2.Collision;\nusing Jitter2.Collision.Shapes;\nusing Jitter2.Dynamics;\nusing Jitter2.LinearMath;\nusing JitterDemo.Renderer;\n\nnamespace JitterDemo;\n\npublic class Demo19 : IDemo, IDrawUpdate\n{\n    public void DrawUpdate()\n    {\n        var dr = pg.DebugRenderer;\n\n        var origin = new JVector(0, 20, 0);\n\n        JVector rayVector = new JVector(0, -1, 0);\n\n        for (int i = 0; i < 10000; i++)\n        {\n            JVector dir = JVector.Transform(rayVector, JMatrix.CreateRotationX(0.1f + 0.0001f * i));\n            dir = 60.0f * JVector.Transform(dir, JMatrix.CreateRotationY(0.004f * i));\n\n            dr.PushLine(DebugRenderer.Color.Green, Conversion.FromJitter(origin),\n                Conversion.FromJitter(origin + dir));\n\n            bool hit = world.DynamicTree.RayCast(origin, dir, null, null, out IDynamicTreeProxy? shape,\n                out JVector normal, out float frac);\n\n            if (hit)\n            {\n                dr.PushPoint(DebugRenderer.Color.White, Conversion.FromJitter(origin + frac * dir), 0.2f);\n            }\n        }\n    }\n\n    public string Name => \"RayCastTest\";\n\n    private Playground pg = null!;\n    private World world = null!;\n\n    private RigidBody box = null!;\n\n    public void Build(Playground pg, World world)\n    {\n        this.pg = pg;\n        this.world = world;\n\n        pg.AddFloor();\n\n        box = world.CreateRigidBody();\n        box.AddShape(new BoxShape(1));\n        box.Position = new JVector(0, 0.5f, -6);\n        box.MotionType = MotionType.Static;\n    }\n}"
  },
  {
    "path": "src/JitterDemo/Demos/Demo20.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Runtime.CompilerServices;\nusing Jitter2;\nusing Jitter2.Collision;\nusing Jitter2.Collision.Shapes;\nusing Jitter2.Dynamics;\nusing Jitter2.LinearMath;\nusing JitterDemo.Renderer;\nusing JitterDemo.Renderer.OpenGL;\nusing TriangleMesh = JitterDemo.Renderer.TriangleMesh;\n\nnamespace JitterDemo;\n\npublic class Dragon : TriangleMesh\n{\n    public Dragon() : base(\"dragon.obj.zip\", 5)\n    {\n    }\n\n    public override void LightPass(PhongShader shader)\n    {\n        shader.MaterialProperties.SetDefaultMaterial();\n        shader.MaterialProperties.ColorMixing.Set(1.2f, 0, 0.5f);\n        base.LightPass(shader);\n    }\n}\n\npublic struct CollisionTriangle : ISupportMappable\n{\n    public JVector A, B, C;\n\n    public void SupportMap(in JVector direction, out JVector result)\n    {\n        float min = JVector.Dot(A, direction);\n        float dot = JVector.Dot(B, direction);\n\n        result = A;\n        if (dot > min)\n        {\n            min = dot;\n            result = B;\n        }\n\n        dot = JVector.Dot(C, direction);\n        if (dot > min)\n        {\n            result = C;\n        }\n    }\n\n    public void GetCenter(out JVector point)\n    {\n        point = (1.0f / 3.0f) * (A + B + C);\n    }\n}\n\npublic class CustomCollisionDetection : IBroadPhaseFilter\n{\n    private readonly World world;\n    private readonly Tester shape;\n    private readonly Octree octree;\n    private readonly ulong minIndex;\n\n    public CustomCollisionDetection(World world, Tester shape, Octree octree)\n    {\n        this.shape = shape;\n        this.octree = octree;\n        this.world = world;\n\n        (minIndex, _) = World.RequestId(octree.Indices.Length);\n    }\n\n    [ThreadStatic] private static Stack<uint>? candidates;\n\n    public bool Filter(IDynamicTreeProxy shapeA, IDynamicTreeProxy shapeB)\n    {\n        if (shapeA != shape && shapeB != shape) return true;\n\n        var collider = shapeA == shape ? shapeB : shapeA;\n\n        if (collider is not RigidBodyShape rbs || rbs.RigidBody.MotionType != MotionType.Dynamic\n                                               || !rbs.RigidBody.IsActive) return false;\n\n        candidates ??= new Stack<uint>();\n        CollisionTriangle ts = new();\n\n        octree.Query(candidates, collider.WorldBoundingBox);\n\n        while (candidates.Count > 0)\n        {\n            uint index = candidates.Pop();\n            ts.A = octree.Vertices[octree.Indices[index].IndexA];\n            ts.B = octree.Vertices[octree.Indices[index].IndexB];\n            ts.C = octree.Vertices[octree.Indices[index].IndexC];\n\n            bool hit = NarrowPhase.MprEpa(ts, rbs, rbs.RigidBody!.Orientation, rbs.RigidBody!.Position,\n                out JVector pointA, out JVector pointB, out _, out float penetration);\n\n            if (hit)\n            {\n                JVector normal = JVector.Normalize(JVector.Cross(ts.B - ts.A, ts.C - ts.A));\n\n                if (world.EnableAuxiliaryContactPoints)\n                {\n                    Unsafe.SkipInit(out CollisionManifold manifold);\n\n                    // Build the whole contact manifold if enabled.\n                    manifold.BuildManifold(ts, rbs, JQuaternion.Identity, rbs.RigidBody!.Orientation,\n                        JVector.Zero, rbs.RigidBody!.Position, pointA, pointB, normal);\n\n                    world.RegisterContact(rbs.ShapeId, minIndex + index, world.NullBody, rbs.RigidBody, normal, ref manifold);\n                }\n                else\n                {\n                    world.RegisterContact(rbs.ShapeId, minIndex + index, world.NullBody, rbs.RigidBody, pointB, pointB, normal);\n                }\n            }\n        }\n\n        return false;\n    }\n}\n\npublic class Tester(Octree tree) : IDynamicTreeProxy, IRayCastable\n{\n    public int SetIndex { get; set; } = -1;\n    public int NodePtr { get; set; }\n\n    public JVector Velocity => JVector.Zero;\n    public JBoundingBox WorldBoundingBox { get; } = tree.Dimensions;\n\n    public bool RayCast(in JVector origin, in JVector direction, out JVector normal, out float lambda)\n    {\n        return tree.Raycast(origin,direction, out normal, out lambda);\n    }\n}\n\npublic class Demo20 : IDemo, ICleanDemo, IDrawUpdate\n{\n    public string Name => \"Octree (Custom Collision)\";\n    public string Description => \"High-poly mesh in an octree with custom narrow-phase triangle collision.\";\n\n    private Playground pg = null!;\n    private World world = null!;\n\n    private Tester testShape = null!;\n\n    public void Build(Playground pg, World world)\n    {\n        this.pg = pg;\n        this.world = world;\n\n        pg.AddFloor();\n\n        var tm = RenderWindow.Instance.CSMRenderer.GetInstance<Dragon>();\n\n        var indices = tm.Mesh.Indices.Select(i\n            => new Octree.TriangleIndices(i.T1, i.T2, i.T3)).ToArray();\n\n        var vertices = tm.Mesh.Vertices.Select(v\n            => Conversion.ToJitterVector(v.Position)).ToArray();\n\n        // Build the octree\n        var octree = new Octree(indices, vertices);\n\n        // Add a \"test\" shape to the jitter world. We will filter out broad phase collision\n        // events generated by Jitter and add our own collision handling. Make the test shape\n        // the dimensions of the octree.\n        testShape = new Tester(octree);\n        world.DynamicTree.AddProxy(testShape, false);\n\n        world.BroadPhaseFilter = new CustomCollisionDetection(world, testShape, octree);\n    }\n\n    public void DrawUpdate()\n    {\n        var tm = RenderWindow.Instance.CSMRenderer.GetInstance<Dragon>();\n        tm.PushMatrix(Matrix4.Identity, new Vector3(0.35f, 0.35f, 0.35f));\n    }\n\n    public void CleanUp()\n    {\n        world.DynamicTree.RemoveProxy(testShape);\n    }\n}"
  },
  {
    "path": "src/JitterDemo/Demos/Demo21.cs",
    "content": "using System;\nusing System.Collections.Concurrent;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\nusing Jitter2;\nusing Jitter2.Collision;\nusing Jitter2.Collision.Shapes;\nusing Jitter2.LinearMath;\nusing JitterDemo.Renderer;\nusing JitterDemo.Renderer.OpenGL;\n\nnamespace JitterDemo;\n\n/*\n * Infinite Voxel World Demo\n * Code generated and optimized with Google Gemini\n * * Features:\n * - Infinite procedural terrain using 3D Perlin Noise\n * - Multi-threaded Chunk Generation\n * - Frustum Culling & Face Culling for high performance\n * - Object Pooling to minimize Garbage Collection\n * - Custom Voxel Collision system for Jitter2\n */\n\n// -------------------------------------------------------------------------\n// 1. DATA STRUCTURES (Optimized for Memory)\n// -------------------------------------------------------------------------\n\npublic enum VoxelType : byte\n{\n    Grass = 0,\n    Rock = 1,\n    Snow = 2\n}\n\n// Lightweight struct for rendering data.\n// We use simple ints/bytes to keep memory footprint low in large lists.\npublic readonly struct VoxelRenderData(int x, int y, int z, VoxelType type)\n{\n    public readonly int X = x, Y = y, Z = z;\n    public readonly VoxelType Type = type;\n}\n\n// Key for the Chunk Dictionary (Spatial Hashing)\npublic readonly struct ChunkKey(int x, int z) : IEquatable<ChunkKey>\n{\n    public readonly int X = x;\n    public readonly int Z = z;\n\n    public bool Equals(ChunkKey other) => X == other.X && Z == other.Z;\n    public override bool Equals(object? obj) => obj is ChunkKey other && Equals(other);\n    public override int GetHashCode() => HashCode.Combine(X, Z);\n\n    public static bool operator ==(ChunkKey left, ChunkKey right) => left.Equals(right);\n    public static bool operator !=(ChunkKey left, ChunkKey right) => !(left == right);\n}\n\n// Temporary struct passed to the Physics Engine (NarrowPhase)\npublic readonly struct CollisionVoxel(JVector position) : ISupportMappable\n{\n    private const float HalfSize = 0.5f;\n\n    public void SupportMap(in JVector direction, out JVector result)\n    {\n        result.X = position.X + MathHelper.SignBit(direction.X) * HalfSize;\n        result.Y = position.Y + MathHelper.SignBit(direction.Y) * HalfSize;\n        result.Z = position.Z + MathHelper.SignBit(direction.Z) * HalfSize;\n    }\n\n    public void GetCenter(out JVector point) => point = position;\n}\n\n// -------------------------------------------------------------------------\n// 2. NOISE GENERATOR (Standard Perlin Implementation)\n// -------------------------------------------------------------------------\npublic static class Noise\n{\n    private static readonly int[] p = new int[512];\n    private static readonly int[] permutation = { 151,160,137,91,90,15,\n    131,13,201,95,96,53,194,233,7,225,140,36,103,30,69,142,8,99,37,240,21,10,23,\n    190, 6,148,247,120,234,75,0,26,197,62,94,252,219,203,117,35,11,32,57,177,33,\n    88,237,149,56,87,174,20,125,136,171,168, 68,175,74,165,71,134,139,48,27,166,\n    77,146,158,231,83,111,229,122,60,211,133,230,220,105,92,41,55,46,245,40,244,\n    102,143,54, 65,25,63,161, 1,216,80,73,209,76,132,187,208, 89,18,169,200,196,\n    135,130,116,188,159,86,164,100,109,198,173,186, 3,64,52,217,226,250,124,123,\n    5,202,38,147,118,126,255,82,85,212,207,206,59,227,47,16,58,17,182,189,28,42,\n    223,183,170,213,119,248,152, 2,44,154,163, 70,221,153,101,155,167, 43,172,9,\n    129,22,39,253, 19,98,108,110,79,113,224,232,178,185, 112,104,218,246,97,228,\n    251,34,242,193,238,210,144,12,191,179,162,241, 81,51,145,235,249,14,239,107,\n    49,192,214, 31,181,199,106,157,184, 84,204,176,115,121,50,45,127, 4,150,254,\n    138,236,205,93,222,114,67,29,24,72,243,141,128,195,78,66,215,61,156,180\n    };\n\n    static Noise()\n    {\n        for (int i = 0; i < 256; i++) p[256 + i] = p[i] = permutation[i];\n    }\n\n    public static float Calc(float x, float y)\n    {\n        int X = (int)MathF.Floor(x) & 255;\n        int Y = (int)MathF.Floor(y) & 255;\n        x -= MathF.Floor(x); y -= MathF.Floor(y);\n        float u = Fade(x), v = Fade(y);\n        int A = p[X] + Y, B = p[X + 1] + Y;\n        return Lerp(v, Lerp(u, Grad(p[A], x, y, 0), Grad(p[B], x - 1, y, 0)),\n                       Lerp(u, Grad(p[A + 1], x, y - 1, 0), Grad(p[B + 1], x - 1, y - 1, 0)));\n    }\n\n    public static float Calc3D(float x, float y, float z)\n    {\n        int X = (int)MathF.Floor(x) & 255;\n        int Y = (int)MathF.Floor(y) & 255;\n        int Z = (int)MathF.Floor(z) & 255;\n        x -= MathF.Floor(x); y -= MathF.Floor(y); z -= MathF.Floor(z);\n        float u = Fade(x), v = Fade(y), w = Fade(z);\n        int A = p[X] + Y, AA = p[A] + Z, AB = p[A + 1] + Z;\n        int B = p[X + 1] + Y, BA = p[B] + Z, BB = p[B + 1] + Z;\n\n        return Lerp(w, Lerp(v, Lerp(u, Grad(p[AA], x, y, z), Grad(p[BA], x - 1, y, z)),\n                               Lerp(u, Grad(p[AB], x, y - 1, z), Grad(p[BB], x - 1, y - 1, z))),\n                       Lerp(v, Lerp(u, Grad(p[AA + 1], x, y, z - 1), Grad(p[BA + 1], x - 1, y, z - 1)),\n                               Lerp(u, Grad(p[AB + 1], x, y - 1, z - 1), Grad(p[BB + 1], x - 1, y - 1, z - 1))));\n    }\n\n    private static float Fade(float t) => t * t * t * (t * (t * 6 - 15) + 10);\n    private static float Lerp(float t, float a, float b) => a + t * (b - a);\n    private static float Grad(int hash, float x, float y, float z)\n    {\n        int h = hash & 15;\n        float u = h < 8 ? x : y, v = h < 4 ? y : h == 12 || h == 14 ? x : z;\n        return ((h & 1) == 0 ? u : -u) + ((h & 2) == 0 ? v : -v);\n    }\n}\n\n// -------------------------------------------------------------------------\n// 3. WORLD LOGIC (Procedural Generation)\n// -------------------------------------------------------------------------\npublic class VoxelWorld : IDynamicTreeProxy, IRayCastable\n{\n    // Global minimum height for optimizing loops\n    public const int MinHeight = -40;\n\n    public static float GetHeight(int x, int z)\n    {\n        float h = 0;\n        h += Noise.Calc(x * 0.01f, z * 0.01f) * 30.0f; // Mountains\n        h += Noise.Calc(x * 0.05f, z * 0.05f) * 5.0f;  // Hills\n        return h;\n    }\n\n    public static bool IsSolid(int x, int y, int z, float terrainHeight)\n    {\n        // 1. Bedrock Layer\n        if (y < MinHeight) return true;\n\n        // 2. 3D Noise for Caves\n        // Returns true if solid, false if air (cave)\n        float density = Noise.Calc3D(x * 0.05f, y * 0.08f, z * 0.05f);\n\n        // 3. Ground Logic\n        // If below terrain height, solid UNLESS noise creates a cave (density > 0.3)\n        if (y < terrainHeight) return density <= 0.3f;\n\n        return false;\n    }\n\n    public static bool IsSolid(int x, int y, int z) => IsSolid(x, y, z, GetHeight(x, z));\n\n    // IBroadPhaseProxy implementation\n    public JVector Velocity => JVector.Zero;\n    public JBoundingBox WorldBoundingBox => new (new JVector(-1e6f), new JVector(1e6f));\n    public int NodePtr { get; set; }\n    public int SetIndex { get; set; } = -1;\n\n    public bool RayCast(in JVector origin, in JVector direction, out JVector normal, out float lambda)\n    { normal = JVector.Zero; lambda = 0; return false; }\n}\n\n// -------------------------------------------------------------------------\n// 4. COLLISION FILTER (Physics Integration)\n// -------------------------------------------------------------------------\npublic class VoxelCollisionFilter : IBroadPhaseFilter\n{\n    private readonly World world;\n    private readonly VoxelWorld voxelProxy;\n    private readonly ulong minIndex;\n\n    private const float NormalThreshold = 0.5f;\n    private const float EdgeThreshold = 0.01f;\n\n    public VoxelCollisionFilter(World world, VoxelWorld voxelProxy)\n    {\n        this.world = world;\n        this.voxelProxy = voxelProxy;\n        // Reserve a range of IDs for voxel contacts\n        (minIndex, _) = World.RequestId(1_000_000);\n    }\n\n    public bool Filter(IDynamicTreeProxy shapeA, IDynamicTreeProxy shapeB)\n    {\n        // Only process collisions involving the VoxelWorld proxy\n        if (shapeA != voxelProxy && shapeB != voxelProxy) return true;\n\n        var bodyShape = shapeA == voxelProxy ? shapeB : shapeA;\n        if (bodyShape is not RigidBodyShape rbs || !rbs.RigidBody.IsActive) return false;\n\n        // Iterate through all integer coordinates intersecting the body's AABB\n        JBoundingBox box = bodyShape.WorldBoundingBox;\n        int minX = (int)MathF.Floor(box.Min.X);\n        int minY = (int)MathF.Floor(box.Min.Y);\n        int minZ = (int)MathF.Floor(box.Min.Z);\n        int maxX = (int)MathF.Ceiling(box.Max.X);\n        int maxY = (int)MathF.Ceiling(box.Max.Y);\n        int maxZ = (int)MathF.Ceiling(box.Max.Z);\n\n        float closeToEdge = 0.5f - EdgeThreshold;\n\n        for (int x = minX; x < maxX; x++)\n        {\n            for (int z = minZ; z < maxZ; z++)\n            {\n                for (int y = minY; y < maxY; y++)\n                {\n                    if (VoxelWorld.IsSolid(x, y, z))\n                    {\n                        // Generate a unique ID based on coordinates\n                        ulong voxelId = (ulong)((x * 73856093) ^ (y * 19349663) ^ (z * 83492791));\n\n                        JVector voxelPos = new JVector(x + 0.5f, y + 0.5f, z + 0.5f);\n                        CollisionVoxel voxel = new CollisionVoxel(voxelPos);\n\n                        // NarrowPhase: Box vs Voxel\n                        bool hit = NarrowPhase.MprEpa(voxel, rbs,\n                            rbs.RigidBody!.Orientation, rbs.RigidBody!.Position,\n                            out JVector pointA, out JVector pointB, out JVector normal, out float penetration);\n\n                        if (hit)\n                        {\n                            // \"Internal Edge\" Smoothing\n                            // Discard contacts that push against internal edges of the mesh\n                            JVector relPos = pointA - voxelPos;\n                            if (relPos.X > closeToEdge && normal.X > NormalThreshold && VoxelWorld.IsSolid(x + 1, y, z)) continue;\n                            if (relPos.X < -closeToEdge && normal.X < -NormalThreshold &&  VoxelWorld.IsSolid(x - 1, y, z)) continue;\n                            if (relPos.Y > closeToEdge && normal.Y > NormalThreshold && VoxelWorld.IsSolid(x, y + 1, z)) continue;\n                            if (relPos.Y < -closeToEdge && normal.Y < -NormalThreshold && VoxelWorld.IsSolid(x, y - 1, z)) continue;\n                            if (relPos.Z > closeToEdge && normal.Z > NormalThreshold && VoxelWorld.IsSolid(x, y, z + 1)) continue;\n                            if (relPos.Z < -closeToEdge && normal.Z < -NormalThreshold && VoxelWorld.IsSolid(x, y, z - 1)) continue;\n\n                            world.RegisterContact(rbs.ShapeId, minIndex + (voxelId % 1000000),\n                                world.NullBody, rbs.RigidBody, pointA, pointB, normal);\n                        }\n                    }\n                }\n            }\n        }\n        return false;\n    }\n}\n\n// -------------------------------------------------------------------------\n// 5. THE DEMO (Chunk Management & Rendering)\n// -------------------------------------------------------------------------\npublic class Demo21 : IDemo, ICleanDemo, IDrawUpdate\n{\n    public string Name => \"Voxel World (Custom Collision)\";\n    public string Description => \"Infinite procedural voxel terrain with custom collision shapes.\";\n\n    private Playground pg = null!;\n    private World world = null!;\n    private VoxelWorld voxelProxy = null!;\n\n    // Config\n    private const int ChunkSize = 16;\n    private const int RenderRadius = 8; // Chunks to render in each direction\n\n    // Cache\n    private readonly ConcurrentDictionary<ChunkKey, List<VoxelRenderData>> chunkCache = new();\n    private readonly ConcurrentStack<List<VoxelRenderData>> listPool = new();\n\n    private int frameCount = 0;\n\n    private readonly Vector3[] palette =\n    [\n        new Vector3(0.1f, 0.5f, 0.1f), // Grass\n        new Vector3(0.3f, 0.3f, 0.3f), // Rock (Darker)\n        new Vector3(0.9f, 0.9f, 0.9f)  // Snow\n    ];\n\n    public void Build(Playground pg, World world)\n    {\n        this.pg = pg;\n        this.world = world;\n        voxelProxy = new VoxelWorld();\n        world.DynamicTree.AddProxy(voxelProxy, false);\n        world.BroadPhaseFilter = new VoxelCollisionFilter(world, voxelProxy);\n    }\n\n    public void DrawUpdate()\n    {\n        var cam = RenderWindow.Instance.Camera;\n        Vector3 camPos = cam.Position;\n        Vector3 camDir = cam.Direction;\n\n        // Current chunk coordinates\n        int camChunkX = (int)MathF.Floor(camPos.X / ChunkSize);\n        int camChunkZ = (int)MathF.Floor(camPos.Z / ChunkSize);\n\n        // 1. GENERATION PHASE (Parallel)\n        // Identify which chunks are missing and generate them on threads\n        var chunksNeeded = new List<ChunkKey>();\n        for (int x = -RenderRadius; x <= RenderRadius; x++)\n        {\n            for (int z = -RenderRadius; z <= RenderRadius; z++)\n            {\n                if (x * x + z * z > RenderRadius * RenderRadius) continue;\n                ChunkKey key = new ChunkKey(camChunkX + x, camChunkZ + z);\n                if (!chunkCache.ContainsKey(key)) chunksNeeded.Add(key);\n            }\n        }\n\n        if (chunksNeeded.Count > 0)\n        {\n            Parallel.ForEach(chunksNeeded, key =>\n            {\n                chunkCache.TryAdd(key, BuildChunk(key.X, key.Z));\n            });\n        }\n\n        // 2. RENDER PHASE (Main Thread)\n        // Submit geometry to the GPU using Instancing\n        var cr = pg.CSMRenderer.GetInstance<Cube>();\n\n        for (int x = -RenderRadius; x <= RenderRadius; x++)\n        {\n            for (int z = -RenderRadius; z <= RenderRadius; z++)\n            {\n                if (x * x + z * z > RenderRadius * RenderRadius) continue;\n\n                ChunkKey key = new ChunkKey(camChunkX + x, camChunkZ + z);\n\n                // Frustum Culling (Approximate using Dot Product)\n                Vector3 chunkCenter = new Vector3(\n                    key.X * ChunkSize + (ChunkSize * 0.5f),\n                    camPos.Y, // Ignore Y for horizontal FOV check\n                    key.Z * ChunkSize + (ChunkSize * 0.5f)\n                );\n\n                if (!IsChunkInView(chunkCenter, camPos, camDir)) continue;\n\n                if (chunkCache.TryGetValue(key, out var voxels))\n                {\n                    foreach (var v in voxels)\n                    {\n                        Vector3 pos = new Vector3(v.X + 0.5f, v.Y + 0.5f, v.Z + 0.5f);\n                        cr.PushMatrix(MatrixHelper.CreateTranslation(pos), palette[(int)v.Type]);\n                    }\n                }\n            }\n        }\n\n        // 3. MAINTENANCE (Cleanup)\n        // Every 60 frames, remove far-away chunks to free memory\n        frameCount++;\n        if (frameCount > 60)\n        {\n            frameCount = 0;\n            CleanupCache(camChunkX, camChunkZ);\n        }\n    }\n\n    private bool IsChunkInView(Vector3 chunkCenter, Vector3 camPos, Vector3 camDir)\n    {\n        Vector3 toChunk = chunkCenter - camPos;\n        // Always draw chunks very close to camera to avoid clipping issues\n        if (toChunk.LengthSquared() < 32 * 32) return true;\n        // Simple Cone Check (>60 degrees)\n        return Vector3.Dot(camDir, Vector3.Normalize(toChunk)) > 0.5f;\n    }\n\n    private List<VoxelRenderData> BuildChunk(int cx, int cz)\n    {\n        // Object Pooling: Reuse list from pool if available\n        if (!listPool.TryPop(out var list)) list = new List<VoxelRenderData>(512);\n        else list.Clear();\n\n        int startX = cx * ChunkSize;\n        int startZ = cz * ChunkSize;\n        int endX = startX + ChunkSize;\n        int endZ = startZ + ChunkSize;\n\n        for (int x = startX; x < endX; x++)\n        {\n            for (int z = startZ; z < endZ; z++)\n            {\n                float h = VoxelWorld.GetHeight(x, z);\n\n                // Loop Optimization: Scan from just below bedrock up to surface\n                int maxY = (int)h + 2;\n                int minY = VoxelWorld.MinHeight - 2;\n\n                for (int y = minY; y <= maxY; y++)\n                {\n                    if (VoxelWorld.IsSolid(x, y, z, h))\n                    {\n                        // Face Culling: Only draw blocks adjacent to Air\n                        bool topAir = !VoxelWorld.IsSolid(x, y + 1, z, h);\n                        bool bottomAir = !VoxelWorld.IsSolid(x, y - 1, z, h);\n                        bool exposed = topAir || bottomAir;\n\n                        if (!exposed)\n                        {\n                            if (!VoxelWorld.IsSolid(x + 1, y, z) || !VoxelWorld.IsSolid(x - 1, y, z) ||\n                                !VoxelWorld.IsSolid(x, y, z + 1) || !VoxelWorld.IsSolid(x, y, z - 1))\n                            {\n                                exposed = true;\n                            }\n                        }\n\n                        if (exposed)\n                        {\n                            VoxelType type = VoxelType.Rock;\n\n                            if (topAir) // Surface blocks get snow/grass\n                            {\n                                if (y > 10) type = VoxelType.Snow;\n                                else if (y < -5) type = VoxelType.Rock;\n                                else type = VoxelType.Grass;\n                            }\n\n                            list.Add(new VoxelRenderData(x, y, z, type));\n                        }\n                    }\n                }\n            }\n        }\n        return list;\n    }\n\n    private void CleanupCache(int camX, int camZ)\n    {\n        int cleanupRadius = RenderRadius + 4;\n        int distSq = cleanupRadius * cleanupRadius;\n        var toRemove = new List<ChunkKey>();\n\n        foreach (var key in chunkCache.Keys)\n        {\n            int dx = key.X - camX;\n            int dz = key.Z - camZ;\n            if (dx * dx + dz * dz > distSq) toRemove.Add(key);\n        }\n\n        foreach (var key in toRemove)\n        {\n            // Return old lists to the pool instead of garbage collecting them\n            if (chunkCache.TryRemove(key, out var list)) listPool.Push(list);\n        }\n    }\n\n    public void CleanUp()\n    {\n        world.DynamicTree.RemoveProxy(voxelProxy);\n    }\n}"
  },
  {
    "path": "src/JitterDemo/Demos/Demo22.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing Jitter2;\nusing Jitter2.Collision.Shapes;\nusing Jitter2.Dynamics;\nusing Jitter2.LinearMath;\nusing JitterDemo.Renderer;\n\nnamespace JitterDemo;\n\npublic class Demo22 : IDemo, ICleanDemo, IDrawUpdate\n{\n    public string Name => \"Conveyor Belt\";\n    public string Description => \"Kinematic planks forming a conveyor belt that transports rigid bodies.\";\n\n    private Playground pg = null!;\n    private World world = null!;\n\n    // We need to track time manually for the physics steps\n    // to ensure the belt moves perfectly in sync with the solver.\n    private double physicsTime = 0.0;\n\n    private struct BeltPlank\n    {\n        public RigidBody Body;\n        public float DistanceOffset;\n    }\n\n    private readonly List<BeltPlank> planks = new();\n\n    private static class Curve\n    {\n        public const float Speed = 2f;\n        public const float StraightLength = 12.0f;\n        public const float Radius = 6.0f;\n\n        public static float TotalLength => (StraightLength * 2.0f) + (MathF.PI * Radius * 2.0f);\n\n        public static void GetState(float distance, out JVector pos, out JVector vel, out float angVelY)\n        {\n            distance = distance % TotalLength;\n            if (distance < 0) distance += TotalLength;\n\n            float curveLen = MathF.PI * Radius;\n\n            // 1. Bottom Straight\n            if (distance < StraightLength)\n            {\n                float t = distance;\n                pos = new JVector(-StraightLength * 0.5f + t, 4.0f, -Radius);\n                vel = new JVector(Speed, 0, 0);\n                angVelY = 0;\n            }\n            // 2. Right Turn\n            else if (distance < StraightLength + curveLen)\n            {\n                float t = distance - StraightLength;\n                float angle = -MathF.PI * 0.5f + (t / Radius);\n                pos = new JVector(StraightLength * 0.5f + MathF.Cos(angle) * Radius, 4.0f, MathF.Sin(angle) * Radius);\n                vel = new JVector(-MathF.Sin(angle), 0, MathF.Cos(angle)) * Speed;\n                angVelY = Speed / Radius;\n            }\n            // 3. Top Straight\n            else if (distance < (StraightLength * 2.0f) + curveLen)\n            {\n                float t = distance - (StraightLength + curveLen);\n                pos = new JVector(StraightLength * 0.5f - t, 4.0f, Radius);\n                vel = new JVector(-Speed, 0, 0);\n                angVelY = 0;\n            }\n            // 4. Left Turn\n            else\n            {\n                float t = distance - ((StraightLength * 2.0f) + curveLen);\n                float angle = MathF.PI * 0.5f + (t / Radius);\n                pos = new JVector(-StraightLength * 0.5f + MathF.Cos(angle) * Radius, 4.0f, MathF.Sin(angle) * Radius);\n                vel = new JVector(-MathF.Sin(angle), 0, MathF.Cos(angle)) * Speed;\n                angVelY = Speed / Radius;\n            }\n        }\n    }\n\n    public void Build(Playground pg, World world)\n    {\n        this.pg = pg;\n        this.world = world;\n        pg.AddFloor();\n        planks.Clear();\n        physicsTime = 0;\n\n        // Subscribe to the physics step event\n        world.PreSubStep += OnPreStep;\n\n        float plankWidth = 0.6f;\n        int plankCount = (int)(Curve.TotalLength / plankWidth);\n        float distStep = Curve.TotalLength / plankCount;\n\n        for (int i = 0; i < plankCount; i++)\n        {\n            var body = world.CreateRigidBody();\n            body.AddShape(new BoxShape(1.8f, 0.1f, 0.55f));\n            body.MotionType = MotionType.Kinematic;\n            body.Friction = 1.0f;\n\n            float dist = i * distStep;\n            Curve.GetState(dist, out JVector pos, out JVector vel, out float w);\n\n            body.Position = pos;\n\n            // Align initial orientation\n            JVector fwd = JVector.Normalize(vel);\n            JVector up = JVector.UnitY;\n            JVector right = JVector.Cross(fwd, up);\n            JMatrix ori = new JMatrix(right.X, up.X, fwd.X, right.Y, up.Y, fwd.Y, right.Z, up.Z, fwd.Z);\n            body.Orientation = JQuaternion.CreateFromMatrix(ori);\n\n            planks.Add(new BeltPlank { Body = body, DistanceOffset = dist });\n        }\n\n        // Debris\n        for (int i = 0; i < 8; i++)\n        {\n            var box = world.CreateRigidBody();\n            box.AddShape(new BoxShape(1));\n            box.Position = new JVector(-5 + i * 1.5f, 6, -Curve.Radius);\n        }\n\n        var floor = world.CreateRigidBody();\n        floor.AddShape(new BoxShape(100, 1, 100));\n        floor.Position = new JVector(0, -5, 0);\n        floor.MotionType = MotionType.Static;\n    }\n\n    // Called automatically by Jitter before every physics sub-step\n    private void OnPreStep(float dt)\n    {\n        physicsTime += dt;\n        float globalDist = (float)physicsTime * Curve.Speed;\n\n        foreach (var plank in planks)\n        {\n            float d = globalDist + plank.DistanceOffset;\n\n            Curve.GetState(d, out JVector targetPos, out JVector targetVel, out float targetAngVelY);\n\n            // Motion Control Logic\n            //\n            // We want the platform to follow a path p(t) and orientation. Setting the position/orientation\n            // directly results in teleportation, which prevents proper physics simulation.\n            //\n            // Instead, we use a control scheme that combines Feed-Forward (target velocity)\n            // with a Proportional Controller (position error correction) to drive the body velocity v(t)\n            // towards the target:\n            //\n            // v(t) = alpha * (k(t) - x(t))\n            //\n            // where x(t) is the current position and alpha is a gain constant.\n            // By choosing k(t) = p(t) + 1/alpha * p'(t), the differential equation solves to:\n            //\n            // x(t) = C * exp(-alpha * t) + p(t)\n            //\n            // This means the body's position x(t) exponentially converges to the target path p(t).\n            //\n            // We apply this same logic to both Linear Velocity (below) and Angular Velocity.\n            plank.Body.Velocity = targetVel + (targetPos - plank.Body.Position) * 10.0f;\n\n            JVector currentForward = plank.Body.Orientation.GetBasisZ();\n            JVector targetForward = JVector.Normalize(targetVel);\n\n            // Calculate angle sine error (Cross Product Y-component)\n            float angleError = (currentForward.Z * targetForward.X - currentForward.X * targetForward.Z);\n\n            float correction = angleError * 20.0f;\n            plank.Body.AngularVelocity = new JVector(0, targetAngVelY + correction, 0);\n        }\n    }\n\n    public void DrawUpdate()\n    {\n        // Only drawing logic remains here\n        const int stepMax = 200;\n        float totalLen = Curve.TotalLength;\n\n        for (int step = 0; step < stepMax; step++)\n        {\n            float d1 = totalLen / stepMax * step;\n            float d2 = totalLen / stepMax * (step + 1);\n            Curve.GetState(d1, out JVector p1, out _, out _);\n            Curve.GetState(d2, out JVector p2, out _, out _);\n            pg.DebugRenderer.PushLine(DebugRenderer.Color.Green, Conversion.FromJitter(p1), Conversion.FromJitter(p2));\n        }\n    }\n\n    // Important: Unsubscribe when the demo is switched to avoid memory leaks\n    // or ghost logic running in the next demo.\n    public void CleanUp()\n    {\n        if (world != null)\n        {\n            world.PreSubStep -= OnPreStep;\n        }\n    }\n}"
  },
  {
    "path": "src/JitterDemo/Demos/Demo23.cs",
    "content": "using System;\nusing Jitter2;\nusing Jitter2.Collision.Shapes;\nusing Jitter2.Dynamics;\nusing Jitter2.LinearMath;\nusing JitterDemo.Renderer;\n\nnamespace JitterDemo;\n\npublic class Demo23 : IDemo, IDrawUpdate\n{\n    public string Name => \"Rotating Cube\";\n    public string Description => \"Bodies inside a large kinematic rotating hollow cube.\";\n\n    private RigidBody rotatingBox = null!;\n\n    public void Build(Playground pg, World world)\n    {\n        rotatingBox = world.CreateRigidBody();\n\n        float size = 50;\n\n        var bs0 = new TransformedShape(new BoxShape(size, 1, size), new JVector(0, +size / 2, 0));\n        var bs1 = new TransformedShape(new BoxShape(size, 1, size), new JVector(0, -size / 2, 0));\n\n        var bs2 = new TransformedShape(new BoxShape(1, size, size), new JVector(+size / 2,0, 0));\n        var bs3 = new TransformedShape(new BoxShape(1, size, size), new JVector(-size / 2,0, 0));\n\n        var bs4 = new TransformedShape(new BoxShape(size, size, 1), new JVector(0,0, +size / 2));\n        var bs5 = new TransformedShape(new BoxShape(size, size, 1), new JVector(0,0, -size / 2));\n\n        rotatingBox.AddShapes([bs0, bs1, bs2, bs3, bs4, bs5]);\n        rotatingBox.Tag = new RigidBodyTag(true);\n\n        rotatingBox.MotionType = MotionType.Kinematic;\n\n        rotatingBox.DeactivationTime = TimeSpan.MaxValue;\n        rotatingBox.SetActivationState(true);\n\n        for (int i = -10; i < 10; i++)\n        {\n            for (int e = -10; e < 10; e++)\n            {\n                for (int j = -10; j < 10; j++)\n                {\n                    RigidBody rb = world.CreateRigidBody();\n                    rb.AddShape(new BoxShape(1.5f));\n                    rb.Position = new JVector(i, e, j) * 2;\n                }\n            }\n        }\n    }\n\n    public void DrawUpdate()\n    {\n        rotatingBox.AngularVelocity = new JVector(0.14f, 0.02f, 0.03f);\n    }\n}"
  },
  {
    "path": "src/JitterDemo/Demos/Demo24.cs",
    "content": "using System.Collections.Generic;\nusing System.Linq;\nusing Jitter2;\nusing Jitter2.Collision.Shapes;\nusing Jitter2.Dynamics;\nusing Jitter2.LinearMath;\nusing JitterDemo.Renderer;\nusing JitterDemo.Renderer.OpenGL;\nusing TriangleMesh = JitterDemo.Renderer.TriangleMesh;\n\nnamespace JitterDemo;\n\npublic class Teapot : TriangleMesh\n{\n    public Teapot() : base(\"teapot.obj.zip\", 1.0f) { }\n\n    public override void LightPass(PhongShader shader)\n    {\n        shader.MaterialProperties.SetDefaultMaterial();\n        base.LightPass(shader);\n    }\n}\n\npublic class Demo24 : IDemo, IDrawUpdate\n{\n    public string Name => \"Convex PointCloudShape\";\n    public string Description => \"Convex hull collision shape created from sampled teapot vertices.\";\n\n    private TriangleMesh teapot = null!;\n    private List<RigidBody> teapotBodies = null!;\n    private Matrix4 shift;\n\n    public void Build(Playground pg, World world)\n    {\n        pg.AddFloor();\n\n        teapotBodies = new List<RigidBody>();\n\n        teapot = RenderWindow.Instance.CSMRenderer.GetInstance<Teapot>();\n\n        var vertices = teapot.Mesh.Vertices.Select(v\n            => new JVector(v.Position.X, v.Position.Y, v.Position.Z)).Distinct().ToList();\n\n        // Find a few points on the convex hull of the teapot.\n        var reducedVertices = ShapeHelper.SampleHull(vertices, subdivisions: 3);\n\n        // Use these points to create a PointCloudShape. One could also use all vertices\n        // of the teapot, but this would be slower since it also includes vertices that are\n        // inside the convex hull of the teapot.\n        PointCloudShape pcs = new PointCloudShape(reducedVertices);\n\n        // Jitter requires the center of mass to be at the origin!\n\n        // get the center of mass and shift the convex hull, such that the new\n        // center of mass is at the origin.\n        pcs.GetCenter(out JVector ctr);\n        pcs.Shift = -ctr;\n        // pcs.GetCenter(out JVector ctr); <- this would now return (0,0,0)\n\n        // also shift the visual representation of the teapot\n        shift = MatrixHelper.CreateTranslation(-ctr.X, -ctr.Y, -ctr.Z);\n\n        for (int i = 0; i < 16; i++)\n        {\n            RigidBody body = world.CreateRigidBody();\n            body.Position = new JVector(0, 10 + i * 3, 0);\n            body.AddShape(pcs.Clone());\n            teapotBodies.Add(body);\n        }\n    }\n\n    public void DrawUpdate()\n    {\n        foreach (var body in teapotBodies)\n        {\n            var color = ColorGenerator.GetColor(body.GetHashCode());\n            if (!body.IsActive) color += new Vector3(0.2f, 0.2f, 0.2f);\n            teapot.PushMatrix(Conversion.FromJitter(body) * shift, color);\n        }\n    }\n}"
  },
  {
    "path": "src/JitterDemo/Demos/Demo25.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing Jitter2;\nusing Jitter2.Collision;\nusing Jitter2.Collision.Shapes;\nusing Jitter2.Dynamics;\nusing Jitter2.LinearMath;\nusing JitterDemo.Renderer;\nusing JitterDemo.Renderer.OpenGL;\n\nnamespace JitterDemo;\n\n// In this example, we create a heightmap and use it for collision detection.\n// Note that only the rendering code requires memory, the heightmap itself may be\n// generated procedurally and be of infinite size.\n// To save resources when performing raycasts, we use a ray with finite size (segment).\n\npublic static class Heightmap\n{\n    public const int Width = 100;\n    public const int Height = 100;\n    public const float Amplitude = 2f;\n\n    public static float GetHeight(int x, int z)\n    {\n        // GetHeight could be implemented as an array, make sure to respect array bounds\n        if (x < 0 || x >= Width || z < 0 || z >= Height)\n            throw new ArgumentOutOfRangeException();\n\n        return MathF.Sin(x * 0.1f) * MathF.Cos(z * 0.1f) * Amplitude;\n    }\n\n    public static JBoundingBox GetBoundingBox()\n    {\n        JVector min = new JVector(0, -Amplitude, 0);\n        JVector max = new JVector(Width - 1, Amplitude, Height - 1);\n        return new JBoundingBox(min, max);\n    }\n}\n\npublic class HeightmapTester(JBoundingBox box) : IDynamicTreeProxy, IRayCastable\n{\n    public int SetIndex { get; set; } = -1;\n    public int NodePtr { get; set; }\n\n    public JVector Velocity => JVector.Zero;\n    public JBoundingBox WorldBoundingBox { get; } = box;\n\n    public bool RayCast(in JVector origin, in JVector direction, out JVector normal, out float lambda)\n    {\n        const float maxDistance = 100.0f;\n\n        float dirX = direction.X;\n        float dirZ = direction.Z;\n\n        float len2 = dirX * dirX + dirZ * dirZ;\n        float ilen = 1.0f / MathF.Sqrt(len2);\n\n        dirX *= ilen;\n        dirZ *= ilen;\n\n        int x = (int)Math.Floor(origin.X);\n        int z = (int)Math.Floor(origin.Z);\n\n        int stepX = dirX > 0 ? 1 : -1;\n        int stepZ = dirZ > 0 ? 1 : -1;\n\n        float nextX = dirX > 0 ? (x + 1) - origin.X : origin.X - x;\n        float nextZ = dirZ > 0 ? (z + 1) - origin.Z : origin.Z - z;\n\n        float tMaxX = dirX != 0 ? nextX / Math.Abs(dirX) : float.PositiveInfinity;\n        float tMaxZ = dirZ != 0 ? nextZ / Math.Abs(dirZ) : float.PositiveInfinity;\n\n        float tDeltaX = direction.X != 0 ? 1f / Math.Abs(dirX) : float.PositiveInfinity;\n        float tDeltaZ = direction.Z != 0 ? 1f / Math.Abs(dirZ) : float.PositiveInfinity;\n\n        float t = 0f;\n\n        while (t <= maxDistance)\n        {\n            // check if we are out of bounds\n            if (x < 0 || x + 1 >= Heightmap.Width || z < 0 || z + 1 >= Heightmap.Height)\n                goto continue_walk;\n\n            // check this quad!\n            var a = new JVector(x + 0, Heightmap.GetHeight(x + 0, z + 0), z + 0);\n            var b = new JVector(x + 1, Heightmap.GetHeight(x + 1, z + 0), z + 0);\n            var c = new JVector(x + 1, Heightmap.GetHeight(x + 1, z + 1), z + 1);\n            var d = new JVector(x + 0, Heightmap.GetHeight(x + 0, z + 1), z + 1);\n\n            //  a ----- b\n            //  | \\     |\n            //  |  \\    |\n            //  |   \\   |\n            //  |    \\  |\n            //  d ----- c\n\n            JTriangle tri0 = new JTriangle(a, c, b);\n            JTriangle tri1 = new JTriangle(a, d, c);\n\n            tri0.RayIntersect(origin, direction, JTriangle.CullMode.BackFacing, out JVector normal0, out float lambda0);\n            tri1.RayIntersect(origin, direction, JTriangle.CullMode.BackFacing, out JVector normal1, out float lambda1);\n\n            if (lambda0 < float.MaxValue || lambda1 < float.MaxValue)\n            {\n                if (lambda0 <= lambda1)\n                {\n                    normal = normal0;\n                    lambda = lambda0;\n                }\n                else\n                {\n                    normal = normal1;\n                    lambda = lambda1;\n                }\n\n                return true;\n            }\n\n            continue_walk:\n\n            if (tMaxX < tMaxZ)\n            {\n                x += stepX;\n                t = tMaxX;\n                tMaxX += tDeltaX;\n            }\n            else\n            {\n                z += stepZ;\n                t = tMaxZ;\n                tMaxZ += tDeltaZ;\n            }\n        }\n\n        normal = JVector.Zero; lambda = 0.0f;\n        return false;\n    }\n}\n\npublic class HeightmapDetection : IBroadPhaseFilter\n{\n    private readonly World world;\n    private readonly HeightmapTester shape;\n    private readonly ulong minIndex;\n\n    public HeightmapDetection(World world, HeightmapTester shape)\n    {\n        this.shape = shape;\n        this.world = world;\n\n        (minIndex, _) = World.RequestId(Heightmap.Width * Heightmap.Height * 2);\n    }\n\n    public bool Filter(IDynamicTreeProxy shapeA, IDynamicTreeProxy shapeB)\n    {\n        if (shapeA != shape && shapeB != shape) return true;\n\n        var collider = shapeA == shape ? shapeB : shapeA;\n\n        if (collider is not RigidBodyShape rbs || rbs.RigidBody.MotionType != MotionType.Dynamic\n                                               || !rbs.RigidBody.IsActive) return false;\n\n        ref RigidBodyData body = ref rbs.RigidBody!.Data;\n\n        var min = collider.WorldBoundingBox.Min;\n        var max = collider.WorldBoundingBox.Max;\n\n        int minX = Math.Max(0, (int)min.X);\n        int minZ = Math.Max(0, (int)min.Z);\n        int maxX = Math.Min(Heightmap.Width - 1, (int)max.X + 1);\n        int maxZ = Math.Min(Heightmap.Height - 1, (int)max.Z + 1);\n\n        for (int x = minX; x < maxX; x++)\n        {\n            for (int z = minZ; z < maxZ; z++)\n            {\n                // First triangle of the quad\n\n                ulong index = 2 * (ulong)(x * Heightmap.Width + z);\n\n                CollisionTriangle triangle;\n\n                triangle.A = new JVector(x + 0, Heightmap.GetHeight(x + 0, z + 0), z + 0);\n                triangle.B = new JVector(x + 1, Heightmap.GetHeight(x + 1, z + 1), z + 1);\n                triangle.C = new JVector(x + 1, Heightmap.GetHeight(x + 1, z + 0), z + 0);\n\n                JVector normal = JVector.Normalize((triangle.B - triangle.A) % (triangle.C - triangle.A));\n\n                bool hit = NarrowPhase.MprEpa(triangle, rbs, body.Orientation, body.Position,\n                    out JVector pointA, out JVector pointB, out _, out float penetration);\n\n                if (hit)\n                {\n                    world.RegisterContact(rbs.ShapeId, minIndex + index, world.NullBody, rbs.RigidBody,\n                        pointA, pointB, normal);\n                }\n\n                // Second triangle of the quad\n\n                index += 1;\n                triangle.A = new JVector(x + 0, Heightmap.GetHeight(x + 0, z + 0), z + 0);\n                triangle.B = new JVector(x + 0, Heightmap.GetHeight(x + 0, z + 1), z + 1);\n                triangle.C = new JVector(x + 1, Heightmap.GetHeight(x + 1, z + 1), z + 1);\n\n                normal = JVector.Normalize((triangle.B - triangle.A) % (triangle.C - triangle.A));\n\n                hit = NarrowPhase.MprEpa(triangle, rbs, body.Orientation, body.Position,\n                    out pointA, out pointB, out _, out penetration);\n\n                if (hit)\n                {\n                    world.RegisterContact(rbs.ShapeId, minIndex + index, world.NullBody, rbs.RigidBody,\n                        pointA, pointB, normal);\n                }\n            }\n        }\n\n        return false;\n    }\n}\n\npublic class Demo25 : IDemo, IDrawUpdate\n{\n    public string Name => \"Heightmap (Custom Collision)\";\n    public string Description => \"Procedural heightmap with custom per-triangle collision and raycasting.\";\n\n    private Cloth terrainRenderer = null!;\n\n    // Only for rendering...\n    TriangleVertexIndex[] GetIndices(int width, int height)\n    {\n        var indices = new List<TriangleVertexIndex>();\n\n        for (int j = 0; j < height - 1; j++)\n        {\n            for (int i = 0; i < width - 1; i++)\n            {\n                int a = j * width + i;\n                int b = j * width + (i + 1);\n                int c = (j + 1) * width + i;\n                int d = (j + 1) * width + (i + 1);\n\n                indices.Add(new TriangleVertexIndex(b, a, c)); // Triangle 1\n                indices.Add(new TriangleVertexIndex(d, b, c)); // Triangle 2\n            }\n        }\n        return indices.ToArray();\n    }\n\n    // Only for rendering...\n    void FillVertices(Vertex[] vertices, int width, int height)\n    {\n        for (int j = 0; j < height; j++)\n        {\n            for (int i = 0; i < width; i++)\n            {\n                int index = j * width + i;\n\n                vertices[index].Position = new Vector3(i, Heightmap.GetHeight(i, j), j);\n                vertices[index].Texture = new Vector2(i * 0.5f, j * 0.5f);\n                // Normals are automatically calculated within terrainRenderer.VerticesChanged();\n            }\n        }\n    }\n\n    public void Build(Playground pg, World world)\n    {\n        var tester = new HeightmapTester(Heightmap.GetBoundingBox());\n\n        world.BroadPhaseFilter = new HeightmapDetection(world, tester);\n        world.DynamicTree.AddProxy(tester, false);\n\n        // Only for rendering...\n        terrainRenderer = RenderWindow.Instance.CSMRenderer.GetInstance<Cloth>();\n        terrainRenderer.SetIndices(GetIndices(Heightmap.Width, Heightmap.Height));\n        FillVertices(terrainRenderer.Vertices, Heightmap.Width, Heightmap.Height);\n        terrainRenderer.VerticesChanged();\n    }\n\n    public void DrawUpdate()\n    {\n        terrainRenderer.PushMatrix(Matrix4.Identity);\n    }\n}"
  },
  {
    "path": "src/JitterDemo/Demos/Demo26.cs",
    "content": "using Jitter2;\nusing Jitter2.Collision;\nusing Jitter2.Collision.Shapes;\nusing Jitter2.LinearMath;\nusing JitterDemo.Renderer;\nusing JitterDemo.Renderer.OpenGL;\n\nnamespace JitterDemo;\n\npublic class Demo26 : IDemo, IDrawUpdate\n{\n    public string Name => \"Angular Sweep\";\n    public string Description => \"Visualizes NarrowPhase.Sweep with angular velocity.\\n\" +\n                                 \"A rotating box sweeps toward a static bar, showing\\n\" +\n                                 \"interpolated orientations up to the time of impact.\";\n    public string Controls => \"O/P - Move sweep origin forward/backward\";\n\n    private BoxShape staticBar = null!;\n    private BoxShape dynamicBox = null!;\n\n    private Playground pg = null!;\n\n    private JVector position = new JVector(0, 0, 10);\n    private JVector velocity = new JVector(0, 0, -10);\n    private JVector angularVelocity = new JVector(1, 2,2);\n\n    public void Build(Playground pg, World world)\n    {\n        this.pg = pg;\n        staticBar = new BoxShape(10,10,0.1f);\n        dynamicBox = new BoxShape(5,1,1);\n    }\n\n    private Matrix4 CreateMatrix(JVector pos, JVector vel, JVector angVel, float dt)\n    {\n        JQuaternion quat = MathHelper.RotationQuaternion(angularVelocity, dt);\n        Matrix4 orientation = Conversion.FromJitter(JMatrix.CreateFromQuaternion(quat));\n        Matrix4 translation = MatrixHelper.CreateTranslation(Conversion.FromJitter(pos + vel * dt));\n        Matrix4 scale = MatrixHelper.CreateScale(5, 1, 1);\n\n        return translation * orientation * scale;\n    }\n\n    public void DrawUpdate()\n    {\n        var kb = Keyboard.Instance;\n        if(kb.IsKeyDown(Keyboard.Key.O)) position += new JVector(0,0,0.01f);\n        if(kb.IsKeyDown(Keyboard.Key.P)) position -= new JVector(0,0,0.01f);\n\n        var cr = pg.CSMRenderer.GetInstance<Cube>();\n\n        cr.PushMatrix(MatrixHelper.CreateScale(10, 10, 0.1f), new Vector3(0.2f, 0.2f, 0.2f));\n\n        bool res = NarrowPhase.Sweep(staticBar, dynamicBox, JQuaternion.Identity, JQuaternion.Identity,\n            JVector.Zero, position,\n            JVector.Zero, velocity, JVector.Zero, angularVelocity, 10, 10,\n            out JVector posA, out JVector posB, out JVector normal, out float lambda);\n\n        if (!res) return;\n\n        for (int i = 0; i <= 10; i++)\n        {\n            cr.PushMatrix(CreateMatrix(position, velocity, angularVelocity, i * 0.1f * lambda),\n                ColorGenerator.GetColor(i*4));\n        }\n\n        pg.DebugRenderer.PushPoint(DebugRenderer.Color.White, Conversion.FromJitter(posA), 2);\n        pg.DebugRenderer.PushPoint(DebugRenderer.Color.White, Conversion.FromJitter(posB), 2);\n    }\n}"
  },
  {
    "path": "src/JitterDemo/Demos/Demo27.cs",
    "content": "using System;\nusing Jitter2;\nusing Jitter2.Collision.Shapes;\nusing Jitter2.Dynamics.Constraints;\nusing Jitter2.LinearMath;\nusing JitterDemo.Renderer;\n\nnamespace JitterDemo;\n\npublic class Demo27 : IDemo, ICleanDemo\n{\n    public string Name => \"CCD: Proof of concept\";\n    public string Description => \"Continuous collision detection with fast-moving objects and thin geometry.\";\n\n    private CcdSolver ccdSolver = null!;\n\n    public void Build(Playground pg, World world)\n    {\n        ccdSolver = new CcdSolver(world);\n\n        pg.AddFloor();\n\n        var paddle = world.CreateRigidBody();\n        paddle.AddShape(new BoxShape(5, 1, 0.01f));\n        paddle.Position = (0, 3, -20);\n        paddle.AffectedByGravity = false;\n\n        var hinge = new HingeJoint(world, world.NullBody, paddle, paddle.Position,\n            JVector.UnitY, AngularLimit.Full, false);\n\n        var ball = world.CreateRigidBody();\n        ball.AddShape(new SphereShape(0.2f));\n        ball.Position = (+2.2f, 3, 400);\n        ball.Velocity = (0, 0, -400);\n        ball.Damping = (0, 0);\n        ball.AffectedByGravity = false;\n\n        Common.BuildRagdoll((-2.2f, 3.5f, -19.7f), body =>\n        {\n            body.AffectedByGravity = false;\n            ccdSolver.Add(body);\n        });\n\n        ccdSolver.Add(paddle);\n        ccdSolver.Add(ball);\n\n        world.SpeculativeRelaxationFactor = 0.5f;\n    }\n\n    public void CleanUp()\n    {\n        ccdSolver.Destroy();\n    }\n}"
  },
  {
    "path": "src/JitterDemo/Demos/Demo28.cs",
    "content": "using System;\nusing Jitter2;\nusing Jitter2.Collision.Shapes;\nusing Jitter2.LinearMath;\nusing JitterDemo.Renderer;\n\nnamespace JitterDemo;\n\n/*\n * Jitter2 Colosseum Demo\n * This demo logic is ported from BepuPhysics2\n * https://github.com/bepu/bepuphysics2/blob/cfb5daa1837aef30a5437ac347ac583f2ffaf2b0/Demos/Demos/ColosseumDemo.cs\n * Original Copyright Ross Nordby.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n * * http://www.apache.org/licenses/LICENSE-2.0\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npublic class Demo28: IDemo\n{\n    public string Name => \"Colosseum\";\n    public string Description => \"Colosseum of concentric ring walls and platforms to benchmark large scenes.\";\n\n    private static void CreateRingWall(World world, JVector position, JVector size, int height, float radius)\n    {\n        var circumference = MathF.PI * 2 * radius;\n        var boxCountPerRing = (int)(0.9f * circumference / size.Z);\n        float increment = (2.0f*MathF.PI) / boxCountPerRing;\n        for (int ringIndex = 0; ringIndex < height; ringIndex++)\n        {\n            for (int i = 0; i < boxCountPerRing; i++)\n            {\n                var body = world.CreateRigidBody();\n                body.AddShape(new BoxShape(size));\n\n                var angle = ((ringIndex & 1) == 0 ? i + 0.5f : i) * increment;\n                body.Position = position + new JVector(-MathF.Cos(angle) * radius, (ringIndex + 0.5f) * size.Y, MathF.Sin(angle) * radius);\n                body.Orientation = JQuaternion.CreateFromAxisAngle(JVector.UnitY, angle);\n            }\n        }\n    }\n\n    private static void CreateRingPlatform(World world, JVector position, JVector size, float radius)\n    {\n        var innerCircumference = MathF.PI * 2 * (radius - 0.5f * size.Z);\n        var boxCount = (int)(0.95f * innerCircumference / size.Y);\n        float increment = (2.0f*MathF.PI)/ boxCount;\n        for (int i = 0; i < boxCount; i++)\n        {\n            var angle = i * increment;\n\n            var body = world.CreateRigidBody();\n            body.AddShape(new BoxShape(size));\n\n            body.Position = position + new JVector(-MathF.Cos(angle) * radius, 0.5f * size.X, MathF.Sin(angle) * radius);\n            body.Orientation = JQuaternion.CreateFromAxisAngle(JVector.UnitY, angle + MathF.PI * 0.5f)*JQuaternion.CreateFromAxisAngle(JVector.UnitZ, MathF.PI * 0.5f);\n        }\n    }\n\n    private static JVector CreateRing(World world, JVector position, JVector size, float radius, int heightPerPlatformLevel, int platformLevels)\n    {\n        for (int platformIndex = 0; platformIndex < platformLevels; ++platformIndex)\n        {\n            var wallOffset = 0.5f * size.Z - 0.5f * size.X;\n            CreateRingWall(world, position, size, heightPerPlatformLevel, radius + wallOffset);\n            CreateRingWall(world, position, size, heightPerPlatformLevel, radius - wallOffset);\n\n            CreateRingPlatform(world, position + new JVector(0, heightPerPlatformLevel * size.Y, 0), size, radius);\n            position.Y += heightPerPlatformLevel * size.Y + size.X;\n        }\n        return position;\n    }\n\n    public void Build(Playground pg, World world)\n    {\n        pg.AddFloor();\n\n        var size = new JVector(0.5f, 1, 3);\n        var layerPosition = new JVector();\n        const int layerCount = 6;\n        var innerRadius = 15f;\n        var heightPerPlatform = 3;\n        var platformsPerLayer = 1;\n        var ringSpacing = 0.5f;\n\n        for (int layerIndex = 0; layerIndex < layerCount; ++layerIndex)\n        {\n            var ringCount = layerCount - layerIndex;\n            for (int ringIndex = 0; ringIndex < ringCount; ++ringIndex)\n            {\n                CreateRing(world, layerPosition, size, innerRadius + ringIndex * (size.Z + ringSpacing) + layerIndex * (size.Z - size.X), heightPerPlatform, platformsPerLayer);\n            }\n            layerPosition.Y += platformsPerLayer * (size.Y * heightPerPlatform + size.X);\n        }\n    }\n}"
  },
  {
    "path": "src/JitterDemo/Demos/Demo29.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing JitterDemo.Renderer.OpenGL;\nusing Jitter2;\nusing Jitter2.Collision;\nusing Jitter2.Collision.Shapes;\nusing Jitter2.Dynamics;\nusing Jitter2.LinearMath;\nusing JitterDemo.Renderer;\n\nnamespace JitterDemo;\n\npublic class IgnoreGearCollisionFilter : IBroadPhaseFilter\n{\n    public class GearMarker\n    {\n    }\n\n    public static GearMarker Marker { get; } = new();\n\n    public bool Filter(IDynamicTreeProxy proxyA, IDynamicTreeProxy proxyB)\n    {\n        if (proxyA is not RigidBodyShape shapeA || proxyB is not RigidBodyShape shapeB) return false;\n        return !(shapeA.RigidBody.Tag is GearMarker && shapeB.RigidBody.Tag is GearMarker);\n    }\n}\n\npublic class Demo29 : IDemo, ICleanDemo, IDrawUpdate\n{\n    public string Name => \"Gears\";\n    public string Description => \"Interlocking gear bodies coupled via constraints.\";\n\n    private readonly List<GearCoupling> couplings = [];\n\n    private RigidBody CreateGear(World world, JVector position)\n    {\n        var gear = world.CreateRigidBody();\n        gear.AddShape(new TransformedShape(new CylinderShape(0.2f, 2.0f), (+0.0f, -0.1f, +0.0f)));\n        gear.AddShape(new TransformedShape(new CylinderShape(0.2f, 1.0f), (+0.0f, +0.1f, +0.0f)));\n        gear.AddShape(new TransformedShape(new CylinderShape(0.8f, 0.1f), (-0.8f, +0.4f, +0.0f)));\n\n        gear.Orientation = JQuaternion.CreateRotationX((float)JAngle.FromDegree(90));\n        gear.Position = position;\n        gear.AffectedByGravity = false;\n        gear.Tag = IgnoreGearCollisionFilter.Marker;\n\n        return gear;\n    }\n\n    private void CreateGears(World world)\n    {\n        var g0 = CreateGear(world, (-6, 3, 0.0f));\n        var g1 = CreateGear(world, (-3, 3, 0.2f));\n        var g2 = CreateGear(world, (+0, 3, 0.4f));\n        var g3 = CreateGear(world, (+3, 3, 0.2f));\n        var g4 = CreateGear(world, (+6, 3, 0.0f));\n\n        var gc0 = new GearCoupling(world, g0, g1, JVector.UnitZ, JVector.UnitZ, g0.Position + (1,0,0));\n        var gc1 = new GearCoupling(world, g1, g2, JVector.UnitZ, JVector.UnitZ, g1.Position + (1,0,0));\n        var gc2 = new GearCoupling(world, g2, g3, JVector.UnitZ, JVector.UnitZ, g3.Position - (1,0,0));\n        var gc3 = new GearCoupling(world, g3, g4, JVector.UnitZ, JVector.UnitZ, g4.Position - (1,0,0));\n\n        couplings.AddRange([gc0, gc1, gc2, gc3]);\n    }\n\n    public void Build(Playground pg, World world)\n    {\n        pg.AddFloor();\n\n        world.BroadPhaseFilter = new IgnoreGearCollisionFilter();\n        CreateGears(world);\n\n        world.SolverIterations = (6, 2);\n        world.SubstepCount = 3;\n    }\n\n    public void DrawUpdate()\n    {\n        var pg = (Playground)RenderWindow.Instance;\n\n        foreach (var coupling in couplings)\n        {\n            pg.DebugRenderer.PushPoint(DebugRenderer.Color.Green, Conversion.FromJitter(coupling.ContactPoint));\n        }\n    }\n\n    public void CleanUp()\n    {\n        foreach (var coupling in couplings)\n        {\n            coupling.Remove();\n        }\n\n        couplings.Clear();\n    }\n}"
  },
  {
    "path": "src/JitterDemo/Demos/Demo30.cs",
    "content": "using System;\nusing Jitter2;\nusing Jitter2.LinearMath;\nusing JitterDemo.Renderer;\nusing JitterDemo.Renderer.OpenGL;\n\nnamespace JitterDemo;\n\npublic class Demo30 : IDemo, IDrawUpdate\n{\n    public string Name => \"Sweep Casts\";\n    public string Description => \"Camera-driven sweep casts through a simple physics scene.\\n\" +\n                                 \"Switch between sphere, box, capsule and cylinder queries\\n\" +\n                                 \"to compare the impact pose for the same view direction.\";\n    public string Controls => \"O/P - Previous/next cast type\";\n\n    private enum CastKind\n    {\n        Sphere,\n        Box,\n        Capsule,\n        Cylinder\n    }\n\n    private Playground pg = null!;\n\n    private Sphere sphereDrawer = null!;\n    private Cube boxDrawer = null!;\n    private Cylinder cylinderDrawer = null!;\n    private HalfSphere halfSphereDrawer = null!;\n\n    private CastKind castKind = CastKind.Sphere;\n\n    private const float Radius = 0.45f;\n    private static readonly JVector boxHalfExtents = new(0.75f, 0.5f, 1.1f);\n    private const float HalfLength = 0.45f;\n    private const float HalfHeight = 0.45f;\n    private static readonly Vector3 castColor = new(0.35f, 0.35f, 0.35f);\n\n    public void Build(Playground pg, World world)\n    {\n        this.pg = pg;\n\n        sphereDrawer = pg.CSMRenderer.GetInstance<Sphere>();\n        boxDrawer = pg.CSMRenderer.GetInstance<Cube>();\n        cylinderDrawer = pg.CSMRenderer.GetInstance<Cylinder>();\n        halfSphereDrawer = pg.CSMRenderer.GetInstance<HalfSphere>();\n\n        pg.AddFloor();\n\n        Common.BuildJenga(new JVector(-8, 0, -10), 12);\n        Common.BuildPyramid(new JVector(6, 0, -12), 10);\n        Common.BuildWall(new JVector(-4, 0, -22), 8, 8);\n    }\n\n    private void HandleInput()\n    {\n        Keyboard kb = Keyboard.Instance;\n\n        if (kb.KeyPressBegin(Keyboard.Key.O))\n        {\n            castKind = (CastKind)(((int)castKind + 3) % 4);\n        }\n\n        if (kb.KeyPressBegin(Keyboard.Key.P))\n        {\n            castKind = (CastKind)(((int)castKind + 1) % 4);\n        }\n\n    }\n\n    private void DrawCastShape(CastKind kind, in JVector position, in JQuaternion orientation, in Vector3 color)\n    {\n        Matrix4 mat = MatrixHelper.CreateTranslation(Conversion.FromJitter(position)) *\n                      Conversion.FromJitter(JMatrix.CreateFromQuaternion(orientation));\n\n        switch (kind)\n        {\n            case CastKind.Sphere:\n                sphereDrawer.PushMatrix(mat * MatrixHelper.CreateScale(Radius * 2.0f), color);\n                break;\n\n            case CastKind.Box:\n                boxDrawer.PushMatrix(mat * MatrixHelper.CreateScale(\n                    boxHalfExtents.X * 2.0f,\n                    boxHalfExtents.Y * 2.0f,\n                    boxHalfExtents.Z * 2.0f), color);\n                break;\n\n            case CastKind.Capsule:\n                cylinderDrawer.PushMatrix(mat * MatrixHelper.CreateScale(\n                    Radius, HalfLength * 2.0f, Radius), color);\n\n                Matrix4 cap = MatrixHelper.CreateTranslation(0, HalfLength, 0) *\n                              MatrixHelper.CreateScale(Radius * 2.0f);\n                halfSphereDrawer.PushMatrix(mat * cap, color);\n                halfSphereDrawer.PushMatrix(mat * MatrixHelper.CreateRotationX(MathF.PI) * cap, color);\n                break;\n\n            case CastKind.Cylinder:\n                cylinderDrawer.PushMatrix(mat * MatrixHelper.CreateScale(\n                    Radius, HalfHeight * 2.0f, Radius), color);\n                break;\n        }\n    }\n\n    public void DrawUpdate()\n    {\n        HandleInput();\n\n        Camera camera = RenderWindow.Instance.Camera;\n        JVector origin = Conversion.ToJitterVector(camera.Position);\n        JVector direction = JVector.NormalizeSafe(Conversion.ToJitterVector(camera.Direction));\n\n        JQuaternion shapeOrientation = JQuaternion.Identity;\n\n        bool hit;\n        float lambda;\n\n        switch (castKind)\n        {\n            case CastKind.Sphere:\n                hit = pg.World.DynamicTree.SweepCastSphere(Radius, origin, direction, null, null,\n                    out _, out _, out _, out _, out lambda);\n                break;\n\n            case CastKind.Box:\n                hit = pg.World.DynamicTree.SweepCastBox(boxHalfExtents, shapeOrientation, origin, direction, null, null,\n                    out _, out _, out _, out _, out lambda);\n                break;\n\n            case CastKind.Capsule:\n                hit = pg.World.DynamicTree.SweepCastCapsule(Radius, HalfLength, shapeOrientation, origin, direction, null, null,\n                    out _, out _, out _, out _, out lambda);\n                break;\n\n            default:\n                hit = pg.World.DynamicTree.SweepCastCylinder(Radius, HalfHeight, shapeOrientation, origin, direction, null, null,\n                    out _, out _, out _, out _, out lambda);\n                break;\n        }\n\n        if (!hit)\n        {\n            return;\n        }\n\n        JVector hitPosition = origin + direction * lambda;\n        DrawCastShape(castKind, hitPosition, castKind == CastKind.Sphere ? JQuaternion.Identity : shapeOrientation, castColor);\n    }\n}\n"
  },
  {
    "path": "src/JitterDemo/Demos/IDemo.cs",
    "content": "using Jitter2;\n\nnamespace JitterDemo;\n\npublic interface ICleanDemo\n{\n    public void CleanUp();\n}\n\npublic interface IDrawUpdate\n{\n    public void DrawUpdate();\n}\n\npublic interface IDemo\n{\n    public void Build(Playground pg, World world);\n    public string Name { get; }\n    public string Description => string.Empty;\n    public string Controls => string.Empty;\n}"
  },
  {
    "path": "src/JitterDemo/Demos/Misc/CcdSolver.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\nusing Jitter2;\nusing Jitter2.Collision;\nusing Jitter2.Collision.Shapes;\nusing Jitter2.Dynamics;\nusing Jitter2.LinearMath;\n\nnamespace JitterDemo;\n\n\n/// <summary>\n/// A simple continuous collision detection (CCD) solver based on speculative contacts.\n/// This is more a proof-of-concept than a production-ready solution. There is no multithreading support\n/// and the solver is not very efficient. For very few shapes (~10), it works well.\n/// There is not really a 'right way' to implement CCD, so this is just one of many possible approaches.\n/// </summary>\npublic class CcdSolver\n{\n    private const int SelfConsistencyIterations = 4;\n\n    private readonly World world;\n\n    private readonly List<RigidBody> bodies = new();\n    private readonly List<IDynamicTreeProxy> overlapList = new();\n\n    public CcdSolver(World world)\n    {\n        this.world = world;\n        world.PreStep += PreStep;\n    }\n\n    public bool Enabled { get; set; } = true;\n\n    private void PreStep(float dt)\n    {\n        if (!Enabled) return;\n\n        var spanBodies = CollectionsMarshal.AsSpan(bodies);\n\n        for (int iter = 0; iter < SelfConsistencyIterations; iter++)\n        {\n            // Go through all rigid bodies which have been registered with the ccd-solver.\n            for (int i = 0; i < spanBodies.Length; i++)\n            {\n                ref var body = ref spanBodies[i];\n\n                if (body.Handle.IsZero)\n                {\n                    throw new InvalidOperationException(\"RigidBody has been removed from the world, \" +\n                                                        \"but is still registered with the CCD solver.\");\n                }\n\n                ref var data = ref body.Data;\n\n                // Predict the position and orientation of the rigid body after the time step.\n                body.PredictPose(dt, out var predPos, out var predOri);\n\n                foreach (var shape in body.Shapes)\n                {\n                    // Use the predicted position and orientation to calculate the future bounding box of the shape.\n                    // Then merge this box with the current bounding box of the shape.\n                    shape.CalculateBoundingBox(predOri, predPos, out var predBox);\n                    var box = JBoundingBox.CreateMerged(shape.WorldBoundingBox, predBox);\n\n                    // Query all tree proxies (read: shapes) which overlap with this extended bounding box.\n                    overlapList.Clear();\n                    world.DynamicTree.Query(overlapList, box);\n\n                    // Find the first future collision of the shape with any of the overlapping shapes.\n                    // If a collision is found, create an arbiter and solve it.\n                    CreateAndSolve(overlapList, shape, dt);\n                }\n            }\n        }\n    }\n\n    private void CreateAndSolve(List<IDynamicTreeProxy> proxies, RigidBodyShape shape, float dt)\n    {\n        // Within proxies find the one which collides with 'shape' and has the smallest time of impact (TOI).\n\n        RigidBodyShape otherShape = null!;\n\n        Unsafe.SkipInit(out JVector bestpA);\n        Unsafe.SkipInit(out JVector bestpB);\n        Unsafe.SkipInit(out JVector bestNormal);\n\n        float smallestToi = float.MaxValue;\n\n        for (int i = 0; i < proxies.Count; i++)\n        {\n            var proxy = proxies[i];\n\n            if (proxy is not RigidBodyShape pshape) continue;\n            if (pshape.RigidBody == shape.RigidBody) continue;\n\n            ref var data = ref shape.RigidBody.Data;\n            ref var pdata = ref pshape.RigidBody.Data;\n\n            float extentA = MathF.Max((shape.WorldBoundingBox.Max - shape.RigidBody.Position).Length(),\n                (shape.WorldBoundingBox.Min - shape.RigidBody.Position).Length());\n\n            float extentB = MathF.Max((pshape.WorldBoundingBox.Max - pshape.RigidBody.Position).Length(),\n                (pshape.WorldBoundingBox.Min - pshape.RigidBody.Position).Length());\n\n            bool success = NarrowPhase.Sweep(shape, pshape, data.Orientation, pdata.Orientation,\n                data.Position, pdata.Position, data.Velocity, pdata.Velocity,\n                data.AngularVelocity, pdata.AngularVelocity, extentA, extentB,\n                out JVector pA, out JVector pB, out JVector normal, out float toi);\n\n            if (!success || toi > dt || toi == (float)0.0) continue;\n\n            if (world.NarrowPhaseFilter != null)\n            {\n                bool result = world.NarrowPhaseFilter.Filter(shape, pshape, ref pA, ref pB, ref normal, ref toi);\n                if (!result) continue;\n            }\n\n            if (toi < smallestToi)\n            {\n                smallestToi = toi;\n                bestpA = pA;\n                bestpB = pB;\n                bestNormal = normal;\n                otherShape = pshape;\n            }\n        }\n\n        if (!(smallestToi < float.MaxValue)) return;\n\n        // Create an arbiter and register the contact. Perform one iteration of the solver.\n        // This updates the velocities of the rigid bodies and prepares them for the next iteration.\n\n        Arbiter arbiter;\n\n        if(shape.ShapeId < otherShape.ShapeId)\n        {\n            world.GetOrCreateArbiter(shape.ShapeId, otherShape.ShapeId, shape.RigidBody, otherShape.RigidBody, out arbiter);\n            world.RegisterContact(arbiter, bestpA, bestpB, bestNormal);\n        }\n        else\n        {\n            world.GetOrCreateArbiter(otherShape.ShapeId, shape.ShapeId, otherShape.RigidBody, shape.RigidBody, out arbiter);\n            world.RegisterContact(arbiter, bestpB, bestpA, -bestNormal);\n        }\n\n        arbiter.Handle.Data.PrepareForIteration((float)1.0 / dt);\n        arbiter.Handle.Data.Iterate(false);\n    }\n\n    public void Destroy()\n    {\n        world.PreStep -= PreStep;\n        bodies.Clear();\n    }\n\n    public void Remove(RigidBody body) => bodies.Remove(body);\n\n    public void Add(RigidBody body) => bodies.Add(body);\n}"
  },
  {
    "path": "src/JitterDemo/Demos/Misc/GearCoupling.cs",
    "content": "using System;\nusing Jitter2;\nusing Jitter2.Dynamics;\nusing Jitter2.Dynamics.Constraints;\nusing Jitter2.LinearMath;\n\nnamespace JitterDemo;\n\n/*\n --- 1. The Basic Idea ---\n We simulate the gear connection using a standard DistanceLimit constraint.\n This constraint acts like a \"Virtual Tooth\" that pins the two bodies together\n at the contact point.\n\n Crucially, we hook into the physics loop (OnPreStep) to update this constraint\n EVERY FRAME. Since the gears are rotating, the specific points on the surface\n that are touching change constantly. By resetting the DistanceLimit anchors to the\n current world contact point every frame, we allow the gears to rotate freely\n while maintaining the velocity relationship at the contact.\n\n --- 2. The Refinement: Error Correction ---\n If we strictly placed the anchors at the current contact point, the gears would\n eventually drift out of sync (\"slip\"). This happens because the physics solver\n has limited iterations and cannot solve the velocity constraints perfectly\n every frame, leading to accumulated position error.\n\n To fix this, this demo implements an active Error Correction system:\n - We track the EXACT total rotation of both gears (counting full 360 loops).\n - We calculate the \"Angular Error\" (how far they have drifted from the ideal ratio).\n - We shift the BallSocket anchors slightly along the tangent based on this error.\n\n This forces the physics solver to push the gears back into perfect phase,\n correcting any drift.\n */\n\npublic class GearCoupling\n{\n    // DistanceLimit seems to lead to more stable systems.\n    // BallSocketConstraint over-constraints the system (Hinge, Hinge, BallSocket).\n    public DistanceLimit DistanceLimit { get; private set; }\n\n    // Using simple HingeJoints to pin the gears to the world (NullBody)\n    public HingeJoint HingeJoint1 { get; private set; }\n    public HingeJoint HingeJoint2 { get; private set; }\n\n    public RigidBody Body1 { get; }\n    public RigidBody Body2 { get; }\n\n    private readonly JQuaternion initialOrientation1;\n    private readonly JQuaternion initialOrientation2;\n\n    public JVector ContactPoint { get; }\n\n    private readonly JVector localAxis1;\n    private readonly JVector localAxis2;\n\n    private readonly World world;\n\n    private float prevAngle1, prevAngle2;\n\n    public float GearRatio { get; private set; }\n\n    // Accumulators for full rotations\n    public int Rotations1 { get; private set; }\n    public int Rotations2 { get; private set; }\n\n    public GearCoupling(World world, RigidBody body1, RigidBody body2,\n        JVector rotationAxis1, JVector rotationAxis2, JVector contactPoint)\n    {\n        JVector.NormalizeInPlace(ref rotationAxis1);\n        JVector.NormalizeInPlace(ref rotationAxis2);\n\n        this.Body1 = body1;\n        this.Body2 = body2;\n        this.world = world;\n        this.ContactPoint = contactPoint;\n\n        // 1. Store Local Axes\n        // We must store the axis relative to EACH body's initial orientation\n        localAxis1 = JVector.ConjugatedTransform(rotationAxis1, body1.Orientation);\n        localAxis2 = JVector.ConjugatedTransform(rotationAxis2, body2.Orientation);\n\n        // 2. Setup World Hinges (Pins the gears in place)\n        HingeJoint1 = new HingeJoint(world, world.NullBody, body1, body1.Position, rotationAxis1, AngularLimit.Full);\n        HingeJoint2 = new HingeJoint(world, world.NullBody, body2, body2.Position, rotationAxis2, AngularLimit.Full);\n\n        // Make hinges stiff so gears don't wobble\n        HingeJoint1.HingeAngle.Bias = 0.3f;\n        HingeJoint2.HingeAngle.Bias = 0.3f;\n        HingeJoint1.HingeAngle.Softness = 0.0f;\n        HingeJoint2.HingeAngle.Softness = 0.0f;\n\n        // 3. Setup the Virtual Tooth\n        DistanceLimit = world.CreateConstraint<DistanceLimit>(body1, body2);\n        DistanceLimit.Initialize(contactPoint, contactPoint, LinearLimit.Fixed);\n\n        DistanceLimit.Bias = 0.1f;\n        DistanceLimit.Softness = 0.0000f;\n\n        initialOrientation1 = body1.Orientation;\n        initialOrientation2 = body2.Orientation;\n\n        // Calculate Ratio based on radius to contact point\n        // Ratio = r1 / r2\n        float r1 = (body1.Position - contactPoint).Length();\n        float r2 = (body2.Position - contactPoint).Length();\n        this.GearRatio = r1 / r2;\n\n        // 4. Initialize Angles immediately to prevent \"spin on spawn\"\n        // (Pass the correct local axis for each!)\n        this.prevAngle1 = GetTwistAngle(body1, initialOrientation1, localAxis1);\n        this.prevAngle2 = GetTwistAngle(body2, initialOrientation2, localAxis2);\n\n        world.PreSubStep += OnPreStep;\n    }\n\n    /// <summary>\n    /// Calculates the signed twist angle relative to the initial orientation.\n    /// </summary>\n    private static float GetTwistAngle(RigidBody body, JQuaternion initialOrientation, JVector localAxis)\n    {\n        JQuaternion q = JQuaternion.MultiplyConjugate(body.Orientation, initialOrientation);\n        JVector ax = JVector.Transform(localAxis, body.Orientation);\n\n        float y = JVector.Dot(q.Vector, ax);\n        float x = q.Scalar;\n\n        // Double-cover check\n        if (x < 0)\n        {\n            x = -x;\n            y = -y;\n        }\n\n        return 2.0f * MathF.Atan2(y, x);\n    }\n\n    public float GearAngle1 => GetTwistAngle(Body1, initialOrientation1, localAxis1);\n    public float GearAngle2 => GetTwistAngle(Body2, initialOrientation2, localAxis2);\n\n    public float TrackDeltaAngle()\n    {\n        float angle1 = GearAngle1;\n        float angle2 = GearAngle2;\n\n        float deltaAngle1 = angle1 - prevAngle1;\n        float deltaAngle2 = angle2 - prevAngle2;\n\n        // Phase Unwrapping\n        if (MathF.Abs(deltaAngle1) > MathF.PI)\n            Rotations1 -= MathF.Sign(deltaAngle1);\n\n        if (MathF.Abs(deltaAngle2) > MathF.PI)\n            Rotations2 -= MathF.Sign(deltaAngle2);\n\n        prevAngle1 = angle1;\n        prevAngle2 = angle2;\n\n        float totRot1 = Rotations1 * MathF.PI * 2.0f + angle1;\n        float totRot2 = Rotations2 * MathF.PI * 2.0f + angle2;\n\n        // Constraint: Theta2 - Ratio * Theta1 = 0\n        // We return the error (delta)\n        return totRot2 + GearRatio * totRot1; // Note: Usually '+' if gears rotate opposite directions!\n    }\n\n    private void OnPreStep(float dt)\n    {\n        // 1. Calculate the Error\n        float error = TrackDeltaAngle();\n\n        // Optional: Clamp error to prevent explosions if physics glitched hard\n        error = Math.Clamp(error, -0.1f, 0.1f);\n\n        // 2. Calculate the Tangent Direction\n        // The tangent is the direction the teeth move at the contact point.\n        // We approximate this using the Cross Product of the axle and the radius.\n\n        JVector ax1 = JVector.Transform(localAxis1, Body1.Orientation);\n        JVector r = ContactPoint - Body1.Position;\n\n        // Tangent direction at the contact point\n        JVector tangent = JVector.Normalize(JVector.Cross(ax1, r));\n\n        // 3. Move the Anchor Points (\"Virtual Tooth\")\n        // We shift the anchor points along the tangent to compensate for the angular error.\n        // The factor '0.5' splits the correction between both bodies.\n        // 'r2' (radius) acts as the lever arm converter (Angle -> Arc Length).\n        float radius2 = (Body2.Position - ContactPoint).Length();\n        JVector offset = tangent * (error * radius2 * 0.5f);\n\n        DistanceLimit.Anchor1 = ContactPoint + offset;\n        DistanceLimit.Anchor2 = ContactPoint - offset;\n    }\n\n    public void Remove()\n    {\n        world.PreSubStep -= OnPreStep;\n    }\n}"
  },
  {
    "path": "src/JitterDemo/Demos/Misc/Octree.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\nusing Jitter2.LinearMath;\n\nnamespace JitterDemo;\n\npublic class Octree\n{\n    public struct Node\n    {\n        #region public struct NeighborIndices\n\n        [StructLayout(LayoutKind.Explicit, Size = 8 * sizeof(uint))]\n        public struct NeighborIndices\n        {\n            public unsafe uint this[int index]\n            {\n                get\n                {\n                    uint* ptr = (uint*)Unsafe.AsPointer(ref this);\n                    return ptr[index];\n                }\n                set\n                {\n                    uint* ptr = (uint*)Unsafe.AsPointer(ref this);\n                    ptr[index] = value;\n                }\n            }\n        }\n\n        #endregion\n\n        public JBoundingBox Box;\n        public NeighborIndices Neighbors;\n\n        public List<uint>? Triangles;\n    }\n\n    public struct TriangleIndices\n    {\n        public uint IndexA;\n        public uint IndexB;\n        public uint IndexC;\n\n        public TriangleIndices(uint indexA, uint indexB, uint indexC)\n        {\n            IndexA = indexA;\n            IndexB = indexB;\n            IndexC = indexC;\n        }\n    }\n\n    private readonly TriangleIndices[] indices;\n    private readonly JVector[] vertices;\n\n    private readonly JBoundingBox[] triangleBoxes;\n    private Node[] nodes;\n    private uint nodeCount;\n\n    private int numLeafs;\n\n    public JBoundingBox Dimensions => nodes[0].Box;\n\n    public JVector[] Vertices => vertices;\n    public TriangleIndices[] Indices => indices;\n\n    public Octree(TriangleIndices[] indices, JVector[] vertices)\n    {\n        this.indices = indices;\n        this.vertices = vertices;\n        nodes = new Node[1024];\n        triangleBoxes = new JBoundingBox[indices.Length];\n\n        var sw = Stopwatch.StartNew();\n\n        Build();\n\n        Console.WriteLine($\"Build octree ({indices.Length} triangles, {nodeCount} nodes, {numLeafs} leafs)\" +\n                          $\" in {sw.ElapsedMilliseconds} ms.\");\n    }\n\n    private uint AllocateNode(in JBoundingBox size)\n    {\n        if (nodes.Length == nodeCount)\n        {\n            Array.Resize(ref nodes, nodes.Length * 2);\n        }\n\n        nodes[nodeCount].Box = size;\n        return nodeCount++;\n    }\n\n    private void InternalQuery(Stack<uint> triangles, in JBoundingBox box, uint nodeIndex)\n    {\n        ref var node = ref nodes[nodeIndex];\n\n        if (node.Box.Contains(box) == JBoundingBox.ContainmentType.Disjoint)\n        {\n            return;\n        }\n\n        var tris = node.Triangles;\n\n        if (tris != null)\n        {\n            foreach (var t in tris)\n            {\n                if (!JBoundingBox.Disjoint(box, triangleBoxes[t]))\n                {\n                    triangles.Push(t);\n                }\n            }\n        }\n\n        for (int i = 0; i < 8; i++)\n        {\n            uint index = node.Neighbors[i];\n\n            if (index != 0)\n            {\n                InternalQuery(triangles, box, index);\n            }\n        }\n    }\n\n    public void Query(Stack<uint> triangles, in JBoundingBox box)\n    {\n        InternalQuery(triangles, box, 0);\n    }\n\n    private void Build()\n    {\n        for (int i = 0; i < indices.Length; i++)\n        {\n            ref JBoundingBox triangleBox = ref triangleBoxes[i];\n            ref var triangle = ref indices[i];\n\n            triangleBox = JBoundingBox.SmallBox;\n            JBoundingBox.AddPointInPlace(ref triangleBox, vertices[triangle.IndexA]);\n            JBoundingBox.AddPointInPlace(ref triangleBox, vertices[triangle.IndexB]);\n            JBoundingBox.AddPointInPlace(ref triangleBox, vertices[triangle.IndexC]);\n        }\n\n        JBoundingBox box = JBoundingBox.CreateFromPoints(vertices);\n\n        JVector delta = box.Max - box.Min;\n        JVector center = box.Center;\n\n        float max = MathF.Max(MathF.Max(delta.X, delta.Y), delta.Z);\n        delta = new JVector(max, max, max);\n\n        box.Max = center + delta * 0.5f;\n        box.Min = center - delta * 0.5f;\n\n        AllocateNode(box);\n\n        for (uint i = 0; i < indices.Length; i++)\n        {\n            AddNode(0, i);\n        }\n    }\n\n    public bool Raycast(in JVector origin, in JVector direction, out JVector normal, out float lambda)\n    {\n        lambda = float.MaxValue;\n        normal = JVector.Zero;\n\n        return InternalRaycast(origin, direction, 0, ref normal, ref lambda);\n    }\n\n    private bool InternalRaycast(in JVector origin, in JVector direction, uint nodeIndex, ref JVector normal, ref float lambda)\n    {\n        ref var node = ref nodes[nodeIndex];\n\n        if (!node.Box.RayIntersect(origin, direction, out _))\n            return false;\n\n        bool hit = false;\n\n        if (node.Triangles != null)\n        {\n            foreach (var triIdx in node.Triangles)\n            {\n                ref var triangleIndex = ref indices[triIdx];\n\n                JTriangle tri = new JTriangle(vertices[triangleIndex.IndexA], vertices[triangleIndex.IndexB],\n                    vertices[triangleIndex.IndexC]);\n\n                if (tri.RayIntersect(origin, direction, JTriangle.CullMode.BackFacing,\n                        out JVector currentNormal, out var currentLambda))\n                {\n                    if (currentLambda < lambda)\n                    {\n                        lambda = currentLambda;\n                        normal = currentNormal;\n                        hit = true;\n                    }\n                }\n            }\n        }\n\n        for (int i = 0; i < 8; i++)\n        {\n            uint childIdx = node.Neighbors[i];\n            if (childIdx == 0) continue;\n\n            // TODO: Optimize traversal by only visiting child nodes whose bounding boxes\n            // intersect the ray at a distance less than the current closest hit (lambda).\n            // Sort the child nodes by ray-box intersection distance to prioritize nearer hits,\n            // potentially avoiding unnecessary deeper traversal.\n\n            if (InternalRaycast(origin, direction, childIdx,  ref normal, ref lambda))\n            {\n                hit = true;\n            }\n        }\n\n        return hit;\n    }\n\n    private int TestSubdivision(in JBoundingBox parent, uint triangle)\n    {\n        JBoundingBox objBox = triangleBoxes[triangle];\n        JVector center = parent.Center;\n\n        int bits = 0;\n\n        if (objBox.Min.X > center.X) bits |= 1;\n        else if (objBox.Max.X > center.X) return -1;\n\n        if (objBox.Min.Y > center.Y) bits |= 2;\n        else if (objBox.Max.Y > center.Y) return -1;\n\n        if (objBox.Min.Z > center.Z) bits |= 4;\n        else if (objBox.Max.Z > center.Z) return -1;\n\n        return bits;\n    }\n\n    private void GetSubdivison(in JBoundingBox parent, int index, out JBoundingBox result)\n    {\n        JVector.Subtract(parent.Max, parent.Min, out var dims);\n        JVector.Multiply(dims, 0.5f, out dims);\n\n        JVector offset = new JVector((index & (1 << 0)) >> 0, (index & (1 << 1)) >> 1, (index & (1 << 2)) >> 2);\n\n        result.Min = new JVector(offset.X * dims.X, offset.Y * dims.Y, offset.Z * dims.Z);\n        JVector.Add(result.Min, parent.Min, out result.Min);\n        JVector.Add(result.Min, dims, out result.Max);\n\n        const float margin = 1e-6f; // expand boxes by a tiny amount\n        JVector.Multiply(dims, margin, out var temp);\n        JVector.Subtract(result.Min, temp, out result.Min);\n        JVector.Add(result.Max, temp, out result.Max);\n    }\n\n    private void AddNode(uint node, uint triangle)\n    {\n        const int maxDepth = 64;\n        int depth = 0;\n\n        while (true)\n        {\n            if (depth++ > maxDepth)\n            {\n                throw new InvalidOperationException(\"Maximum depth exceeded. \" +\n                                                    \"Check you model for small or degenerate triangles.\");\n            }\n\n            ref var nn = ref nodes[node];\n\n            int index = TestSubdivision(nn.Box, triangle);\n\n            if (index == -1)\n            {\n                if (nn.Triangles == null)\n                {\n                    nn.Triangles = new List<uint>(8);\n                    numLeafs++;\n                }\n\n                nn.Triangles.Add(triangle);\n            }\n            else\n            {\n                uint newNode = nn.Neighbors[index];\n\n                if (newNode == 0)\n                {\n                    GetSubdivison(nn.Box, index, out JBoundingBox newBox);\n                    newNode = AllocateNode(newBox);\n                    nodes[node].Neighbors[index] = newNode;\n                }\n\n                node = newNode;\n                continue;\n            }\n\n            break;\n        }\n    }\n}"
  },
  {
    "path": "src/JitterDemo/Demos/Misc/Player.cs",
    "content": "using System;\nusing Jitter2;\nusing Jitter2.Collision.Shapes;\nusing Jitter2.Dynamics;\nusing Jitter2.Dynamics.Constraints;\nusing Jitter2.LinearMath;\n\nnamespace JitterDemo;\n\n// Shows one way to implement a character controller.\npublic class Player\n{\n    public RigidBody Body { get; }\n    public AngularMotor AngularMovement { get; }\n\n    private readonly World world;\n\n    public Player(World world, JVector position)\n    {\n        Body = world.CreateRigidBody();\n        Body.AddShape(new CapsuleShape());\n        Body.Position = position;\n\n        // disable velocity damping\n        Body.Damping = (0, 0);\n\n        this.world = world;\n\n        // Disable deactivation\n        Body.DeactivationTime = TimeSpan.MaxValue;\n\n        // Add two arms - to be able to visually tell how the player is orientated\n        var arm1 = new TransformedShape(new BoxShape(0.2f, 0.8f, 0.2f), new JVector(+0.5f, 0.3f, 0));\n        var arm2 = new TransformedShape(new BoxShape(0.2f, 0.8f, 0.2f), new JVector(-0.5f, 0.3f, 0));\n\n        // Add the shapes without recalculating mass and inertia, we take mass and inertia from the capsule\n        // shape we added before.\n        Body.AddShape(arm1, MassInertiaUpdateMode.Preserve);\n        Body.AddShape(arm2, MassInertiaUpdateMode.Preserve);\n\n        // Make the capsule stand upright, but able to rotate 360 degrees.\n        var ur = world.CreateConstraint<HingeAngle>(Body, world.NullBody);\n        ur.Initialize(JVector.UnitY, AngularLimit.Full);\n\n        // Add some friction\n        Body.Friction = 0.8f;\n\n        // An angular motor for turning.\n        AngularMovement = world.CreateConstraint<AngularMotor>(Body, world.NullBody);\n        AngularMovement.Initialize(JVector.UnitY, JVector.UnitY);\n        AngularMovement.MaximumForce = 1000;\n    }\n\n    public void SetAngularInput(float rotate)\n    {\n        AngularMovement.TargetVelocity = rotate;\n    }\n\n    private bool CanJump(out RigidBody? floor, out JVector hitPoint)\n    {\n        foreach (var contact in Body.Contacts)\n        {\n            // go through all contacts of the capsule (player)\n\n            var cd = contact.Handle.Data;\n            int numContacts = 0;\n            hitPoint = JVector.Zero;\n\n            // a contact may contain up to four contact points,\n            // see which ones were used during the last step.\n            uint mask = cd.UsageMask >> 4;\n\n            bool isBody1 = contact.Body1 == Body;\n            floor = isBody1 ? contact.Body2 : contact.Body1;\n\n            if ((mask & ContactData.MaskContact0) != 0) { hitPoint += isBody1 ? cd.Contact0.RelativePosition1 : cd.Contact0.RelativePosition2; numContacts++; }\n            if ((mask & ContactData.MaskContact1) != 0) { hitPoint += isBody1 ? cd.Contact1.RelativePosition1 : cd.Contact1.RelativePosition2; numContacts++; }\n            if ((mask & ContactData.MaskContact2) != 0) { hitPoint += isBody1 ? cd.Contact2.RelativePosition1 : cd.Contact2.RelativePosition2; numContacts++; }\n            if ((mask & ContactData.MaskContact3) != 0) { hitPoint += isBody1 ? cd.Contact3.RelativePosition1 : cd.Contact3.RelativePosition2; numContacts++; }\n\n            if (numContacts == 0) continue;\n\n            // divide the result by the number of contact points to get the \"center\" of the contact\n            hitPoint *= (1.0f / numContacts);\n\n            // check if the hitpoint is on the players base\n            if (hitPoint.Y <= -0.8f) return true;\n        }\n\n        hitPoint = JVector.Zero;\n        floor = null;\n\n        return false;\n    }\n\n    public void Jump()\n    {\n        if (CanJump(out RigidBody? floorBody, out JVector hitPoint))\n        {\n            float newYVel = 5.0f;\n\n            if (floorBody != null)\n            {\n                newYVel += floorBody.Velocity.Y;\n            }\n\n            float deltaVel = Body.Velocity.Y - newYVel;\n\n            Body.Velocity = new JVector(Body.Velocity.X, newYVel, Body.Velocity.Z);\n\n            if (floorBody != null && floorBody.MotionType == MotionType.Dynamic)\n            {\n                float force = Body.Mass * deltaVel * 100.0f;\n                floorBody.SetActivationState(true);\n                floorBody.AddForce(JVector.UnitY * force, floorBody.Position + hitPoint);\n            }\n        }\n    }\n\n    public void SetLinearInput(JVector deltaMove)\n    {\n        if (!CanJump(out var floor, out JVector hitpoint))\n        {\n            return;\n        }\n\n        deltaMove *= 3.0f;\n\n        float deltaMoveLen = deltaMove.Length();\n\n        JVector bodyVel = Body.Velocity;\n        bodyVel.Y = 0;\n\n        float bodyVelLen = bodyVel.Length();\n\n        if (deltaMoveLen > 0.01f)\n        {\n            if (bodyVelLen < 5f)\n            {\n                var force = JVector.Transform(deltaMove, Body.Orientation) * 10.0f;\n\n                Body.AddForce(force);\n\n                // follow Newton's law (for once) and add a force\n                // with equal magnitude in the opposite direction.\n                floor!.AddForce(-force, Body.Position + hitpoint);\n            }\n        }\n\n    }\n}"
  },
  {
    "path": "src/JitterDemo/Demos/SoftBody/PressurizedSphere.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing Jitter2;\nusing Jitter2.Collision;\nusing Jitter2.Collision.Shapes;\nusing Jitter2.LinearMath;\nusing Jitter2.SoftBodies;\n\nnamespace JitterDemo;\n\npublic class SoftBodySphere : SoftBodyCloth\n{\n    public float Pressure { get; set; } = 400.0f;\n\n    private static IEnumerable<JTriangle> GenSphereTriangles(JVector offset)\n    {\n        return ShapeHelper.Tessellate(SupportPrimitives.CreateSphere(1.0f), 4)\n            .Select(t => new JTriangle(t.V0 + offset, t.V1 + offset, t.V2 + offset));\n    }\n\n    public SoftBodySphere(World world, JVector offset) : base(world, GenSphereTriangles(offset))\n    {\n        foreach (var rb in Vertices)\n        {\n            rb.SetMassInertia(JMatrix.Zero, 100.0f, true);\n            rb.Damping = (0.001f, 0);\n        }\n\n        foreach (var spring in Springs)\n        {\n            ((SpringConstraint)spring).Softness = 0.5f;\n        }\n    }\n\n    protected override void WorldOnPostStep(float dt)\n    {\n        base.WorldOnPostStep(dt);\n\n        if (!IsActive) return;\n\n        float volume = 0.0f;\n\n        foreach (SoftBodyTriangle sbt in Shapes)\n        {\n            JVector v1 = sbt.Vertex1.Position;\n            JVector v2 = sbt.Vertex2.Position;\n            JVector v3 = sbt.Vertex3.Position;\n\n            volume += ((v2.Y - v1.Y) * (v3.Z - v1.Z) -\n                       (v2.Z - v1.Z) * (v3.Y - v1.Y)) * (v1.X + v2.X + v3.X);\n        }\n\n        float invVol = 1.0f / MathF.Max(0.1f, volume);\n\n        foreach (SoftBodyTriangle sbt in Shapes)\n        {\n            JVector p0 = sbt.Vertex1.Position;\n            JVector p1 = sbt.Vertex2.Position;\n            JVector p2 = sbt.Vertex3.Position;\n\n            JVector normal = (p1 - p0) % (p2 - p0);\n            JVector force = normal * Pressure * invVol;\n\n            // Limit the maximum force\n            const float maxForce = 2.0f;\n\n            float fl2 = force.LengthSquared();\n\n            if (fl2 > maxForce * maxForce)\n            {\n                force *= 1.0f / MathF.Sqrt(fl2) * maxForce;\n            }\n\n            sbt.Vertex1.AddForce(force, false);\n            sbt.Vertex2.AddForce(force, false);\n            sbt.Vertex3.AddForce(force, false);\n        }\n    }\n}\n"
  },
  {
    "path": "src/JitterDemo/Demos/SoftBody/SoftBodyCloth.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing Jitter2;\nusing Jitter2.Dynamics;\nusing Jitter2.LinearMath;\nusing Jitter2.SoftBodies;\nusing JitterDemo.Renderer;\n\nnamespace JitterDemo;\n\npublic class SoftBodyCloth : SoftBody\n{\n    private readonly struct Edge : IEquatable<Edge>\n    {\n        public readonly ushort IndexA;\n        public readonly ushort IndexB;\n\n        public Edge(ushort u0, ushort u1)\n        {\n            IndexA = u0;\n            IndexB = u1;\n        }\n\n        public bool Equals(Edge other)\n        {\n            return other.IndexA == IndexA && other.IndexB == IndexB;\n        }\n\n        public override bool Equals(object? obj)\n        {\n            return obj is Edge other && Equals(other);\n        }\n\n        public override int GetHashCode()\n        {\n            return IndexA * 24712 + IndexB;\n        }\n    }\n\n    private List<JVector> vertices = null!;\n    private List<TriangleVertexIndex> triangles = null!;\n    private List<Edge> edges = null!;\n\n    public List<TriangleVertexIndex> Triangles => triangles;\n\n    public SoftBodyCloth(World world, IEnumerable<JTriangle> triangles) : base(world)\n    {\n        LoadMesh(triangles);\n        Build();\n    }\n\n    private void LoadMesh(IEnumerable<JTriangle> tris)\n    {\n        Dictionary<JVector, ushort> verts = new();\n        HashSet<Edge> edgs = new();\n\n        ushort AddVertex(in JVector vertex)\n        {\n            if (!verts.TryGetValue(vertex, out ushort ind))\n            {\n                ind = (ushort)verts.Count;\n                verts.Add(vertex, ind);\n            }\n\n            return ind;\n        }\n\n        triangles = new List<TriangleVertexIndex>();\n\n        foreach (var tri in tris)\n        {\n            ushort u0 = AddVertex(tri.V0);\n            ushort u1 = AddVertex(tri.V1);\n            ushort u2 = AddVertex(tri.V2);\n\n            TriangleVertexIndex t = new TriangleVertexIndex(u0, u1, u2);\n            triangles.Add(t);\n\n            edgs.Add(new Edge(u0, u1));\n            edgs.Add(new Edge(u0, u2));\n            edgs.Add(new Edge(u1, u2));\n        }\n\n        vertices = verts.Keys.ToList();\n        edges = edgs.ToList();\n    }\n\n    private void Build()\n    {\n        foreach (var vertex in vertices)\n        {\n            RigidBody body = World.CreateRigidBody();\n            body.SetMassInertia(JMatrix.Zero, 100.0f, true);\n            body.Position = vertex;\n            Vertices.Add(body);\n        }\n\n        foreach (var edge in edges)\n        {\n            var constraint = World.CreateConstraint<SpringConstraint>(Vertices[edge.IndexA], Vertices[edge.IndexB]);\n            constraint.Initialize(Vertices[edge.IndexA].Position, Vertices[edge.IndexB].Position);\n            constraint.Softness = 0.2f;\n            Springs.Add(constraint);\n        }\n\n        foreach (var triangle in triangles)\n        {\n            var tri = new SoftBodyTriangle(this, Vertices[(int)triangle.T1], Vertices[(int)triangle.T2], Vertices[(int)triangle.T3]);\n            tri.UpdateWorldBoundingBox();\n            World.DynamicTree.AddProxy(tri);\n            Shapes.Add(tri);\n        }\n    }\n}"
  },
  {
    "path": "src/JitterDemo/Demos/SoftBody/SoftBodyCube.cs",
    "content": "using System;\nusing Jitter2;\nusing Jitter2.Dynamics;\nusing Jitter2.Dynamics.Constraints;\nusing Jitter2.LinearMath;\nusing Jitter2.SoftBodies;\n\nnamespace JitterDemo;\n\npublic class SoftBodyCube : SoftBody\n{\n    public static readonly ValueTuple<int, int>[] Edges =\n    {\n        (0, 1), (1, 2), (2, 3), (3, 0),\n        (4, 5), (5, 6), (6, 7), (7, 4),\n        (0, 4), (1, 5), (2, 6), (3, 7)\n    };\n\n    public RigidBody Center { get; }\n\n    public SoftBodyCube(World world, JVector offset) : base(world)\n    {\n        JVector[] vertices = new JVector[8];\n\n        vertices[0] = new JVector(+1, -1, +1);\n        vertices[1] = new JVector(+1, -1, -1);\n        vertices[2] = new JVector(-1, -1, -1);\n        vertices[3] = new JVector(-1, -1, +1);\n        vertices[4] = new JVector(+1, +1, +1);\n        vertices[5] = new JVector(+1, +1, -1);\n        vertices[6] = new JVector(-1, +1, -1);\n        vertices[7] = new JVector(-1, +1, +1);\n\n        for (int i = 0; i < 8; i++)\n        {\n            var rb = world.CreateRigidBody();\n            rb.SetMassInertia(JMatrix.Zero, 5.0f, true);\n            rb.Position = vertices[i] + offset;\n            Vertices.Add(rb);\n        }\n\n        SoftBodyTetrahedron[] tetrahedra = new SoftBodyTetrahedron[5];\n        tetrahedra[0] = new SoftBodyTetrahedron(this, Vertices[0], Vertices[1], Vertices[5], Vertices[2]);\n        tetrahedra[1] = new SoftBodyTetrahedron(this, Vertices[2], Vertices[5], Vertices[6], Vertices[7]);\n        tetrahedra[2] = new SoftBodyTetrahedron(this, Vertices[3], Vertices[0], Vertices[2], Vertices[7]);\n        tetrahedra[3] = new SoftBodyTetrahedron(this, Vertices[0], Vertices[4], Vertices[5], Vertices[7]);\n        tetrahedra[4] = new SoftBodyTetrahedron(this, Vertices[0], Vertices[2], Vertices[5], Vertices[7]);\n\n        for (int i = 0; i < 5; i++)\n        {\n            tetrahedra[i].UpdateWorldBoundingBox();\n            world.DynamicTree.AddProxy(tetrahedra[i]);\n            Shapes.Add(tetrahedra[i]);\n        }\n\n        Center = world.CreateRigidBody();\n        Center.Position = offset;\n        Center.SetMassInertia(JMatrix.Identity * 0.05f, 0.1f);\n\n        for (int i = 0; i < 8; i++)\n        {\n            var constraint = world.CreateConstraint<BallSocket>(Center, Vertices[i]);\n            constraint.Initialize(Vertices[i].Position);\n            constraint.Softness = 1;\n        }\n    }\n}"
  },
  {
    "path": "src/JitterDemo/JitterDemo.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n    <ItemGroup>\n        <None Include=\"..\\.editorconfig\" Link=\".editorconfig\"/>\n    </ItemGroup>\n\n    <ItemGroup>\n        <ProjectReference Include=\"..\\Jitter2\\Jitter2.csproj\"/>\n    </ItemGroup>\n\n    <PropertyGroup>\n        <IsWindows Condition=\"'$([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::Windows)))' == 'true'\">true</IsWindows>\n        <IsOSX Condition=\"'$([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::OSX)))' == 'true'\">true</IsOSX>\n        <IsLinux Condition=\"'$([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::Linux)))' == 'true'\">true</IsLinux>\n    </PropertyGroup>\n\n    <PropertyGroup>\n        <OutputType Condition=\"'$(IsLinux)'=='true'\">Exe</OutputType>\n        <OutputType Condition=\"'$(IsWindows)'=='true'\">WinExe</OutputType>\n        <AllowUnsafeBlocks>true</AllowUnsafeBlocks>\n        <DefineConstants>UNSAFE</DefineConstants>\n    </PropertyGroup>\n\n    <PropertyGroup Condition=\"'$(Configuration)' == 'Release'\">\n        <DefineConstants>$(DefineConstants);RELEASE;TRACE</DefineConstants>\n        <DebugSymbols>false</DebugSymbols>\n        <DebugType>portable</DebugType>\n        <Optimize>true</Optimize>\n    </PropertyGroup>\n\n    <ItemGroup>\n        <Content Include=\"assets\\*.*\">\n            <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n        </Content>\n    </ItemGroup>\n\n    <ItemGroup>\n      <None Include=\"runtimes\\**\\*.*\">\n        <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n      </None>\n    </ItemGroup>\n\n    <PropertyGroup>\n        <OutputType>Exe</OutputType>\n        <TargetFramework>net10.0</TargetFramework>\n        <ImplicitUsings>disable</ImplicitUsings>\n        <Nullable>enable</Nullable>\n        <AllowUnsafeBlocks>true</AllowUnsafeBlocks>\n    </PropertyGroup>\n\n</Project>\n"
  },
  {
    "path": "src/JitterDemo/Playground.Debug.cs",
    "content": "using System;\nusing Jitter2.Collision;\nusing Jitter2.Dynamics;\nusing Jitter2.LinearMath;\nusing JitterDemo.Renderer;\nusing JitterDemo.Renderer.OpenGL;\n\nnamespace JitterDemo;\n\npublic partial class Playground : RenderWindow\n{\n    private bool debugDrawIslands;\n    private bool debugDrawContacts;\n    private bool debugDrawShapes;\n    private bool debugDrawTree;\n    private int debugDrawTreeDepth = 1;\n\n    private readonly Action<TreeBox, int> drawBox;\n\n    private void DrawBox(TreeBox treeBBox, int depth)\n    {\n        if (depth != debugDrawTreeDepth) return;\n        DebugRenderer.PushBox(DebugRenderer.Color.Green, Conversion.FromJitter(treeBBox.Min),\n            Conversion.FromJitter(treeBBox.Max));\n    }\n\n    private void DrawContact(in ContactData cq, in ContactData.Contact c)\n    {\n        JVector v1 = c.RelativePosition1 + cq.Body1.Data.Position;\n        JVector v2 = c.RelativePosition2 + cq.Body2.Data.Position;\n\n        DebugRenderer.PushPoint(DebugRenderer.Color.Green, Conversion.FromJitter(v1), 0.1f);\n        DebugRenderer.PushPoint(DebugRenderer.Color.White, Conversion.FromJitter(v2), 0.1f);\n    }\n\n    private void DebugDraw()\n    {\n        if (debugDrawTree)\n        {\n            World.DynamicTree.EnumerateTreeBoxes(drawBox);\n        }\n\n        if (debugDrawShapes)\n        {\n            foreach (var shape in World.DynamicTree.Proxies)\n            {\n                var bb = shape.WorldBoundingBox;\n                DebugRenderer.PushBox(DebugRenderer.Color.Green, Conversion.FromJitter(bb.Min),\n                    Conversion.FromJitter(bb.Max));\n            }\n        }\n\n        if (debugDrawIslands)\n        {\n            for (int i = 0; i < World.Islands.Count; i++)\n            {\n                Island island = World.Islands[i];\n\n                bool active = false;\n                JBoundingBox box = JBoundingBox.SmallBox;\n                foreach (RigidBody body in island.Bodies)\n                {\n                    if (body.Shapes.Count == 0)\n                    {\n                        // mass point\n                        JBoundingBox.AddPointInPlace(ref box, body.Position);\n                    }\n                    else\n                    {\n                        foreach (var shape in body.Shapes)\n                            JBoundingBox.CreateMerged(box, shape.WorldBoundingBox, out box);\n                    }\n\n                    active = body.IsActive;\n                }\n\n                DebugRenderer.PushBox(active ? DebugRenderer.Color.Green : DebugRenderer.Color.Red,\n                    Conversion.FromJitter(box.Min),\n                    Conversion.FromJitter(box.Max));\n            }\n        }\n\n        if (debugDrawContacts)\n        {\n            var contacts = World.RawData.ActiveContacts;\n\n            for (int i = 0; i < contacts.Length; i++)\n            {\n                ref var cq = ref contacts[i];\n                uint umask = cq.UsageMask >> 4;\n\n                if ((umask & ContactData.MaskContact0) != 0) DrawContact(cq, cq.Contact0);\n                if ((umask & ContactData.MaskContact1) != 0) DrawContact(cq, cq.Contact1);\n                if ((umask & ContactData.MaskContact2) != 0) DrawContact(cq, cq.Contact2);\n                if ((umask & ContactData.MaskContact3) != 0) DrawContact(cq, cq.Contact3);\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/JitterDemo/Playground.Gui.cs",
    "content": "using System;\nusing System.Linq;\nusing System.Text;\nusing Jitter2;\nusing Jitter2.Collision;\nusing JitterDemo.Renderer;\nusing JitterDemo.Renderer.DearImGui;\nusing JitterDemo.Renderer.OpenGL;\n\nnamespace JitterDemo;\n\npublic partial class Playground : RenderWindow\n{\n    private const string GlobalControls =\n        \"[Controls]\\n\" +\n        \"WASD - Move camera\\n\" +\n        \"Right Mouse (hold) - Rotate camera\\n\" +\n        \"Left Mouse (hold) - Grab object\\n\" +\n        \"Scroll Wheel - Adjust grab distance\\n\" +\n        \"Space - Shoot cube\\n\" +\n        \"M - Toggle multi-threading\";\n\n    private bool demoSelected;\n    private readonly double[] debugTimes = new double[(int)World.Timings.Last];\n    private readonly StringBuilder gcText = new();\n\n    private readonly float[] physicsTime = new float[100];\n    private double totalTime;\n\n    private int samplingRate = 5;\n    private int accSteps;\n\n    private double lastTime;\n    private ushort frameCount;\n    private ushort fps = 100;\n\n    private void UpdateDisplayText()\n    {\n        if (Time - lastTime > 1.0d)\n        {\n            lastTime = Time;\n            fps = frameCount;\n            frameCount = 0;\n        }\n\n        frameCount++;\n\n        accSteps += 1;\n        if (accSteps < samplingRate) return;\n\n        accSteps = 0;\n\n        gcText.Clear();\n\n        World.DebugTimings.CopyTo(debugTimes);\n        totalTime = debugTimes.Sum();\n\n        for (int i = physicsTime.Length; i-- > 1;)\n        {\n            physicsTime[i] = physicsTime[i - 1];\n        }\n\n        physicsTime[0] = (float)totalTime;\n\n        gcText.Append(\"gen0: \").Append(GC.CollectionCount(0))\n              .Append(\"; gen1: \").Append(GC.CollectionCount(1))\n              .Append(\"; gen2: \").AppendLine(GC.CollectionCount(2).ToString());\n        gcText.Append(\"pause total: \").Append(GC.GetTotalPauseDuration().TotalSeconds).AppendLine(\" s\");\n    }\n\n    private void LayoutGui()\n    {\n        bool opened = true;\n\n        ImGuiWindowFlags windowFlags = ImGuiWindowFlags.NoDecoration |\n                                       ImGuiWindowFlags.AlwaysAutoResize |\n                                       ImGuiWindowFlags.NoSavedSettings |\n                                       ImGuiWindowFlags.NoFocusOnAppearing;\n\n        ImGui.NewFrame();\n\n        ImGui.SetNextWindowsPos(new Vector2(10, 10), ImGuiCond.Once, Vector2.Zero);\n        ImGui.SetNextWindowBgAlpha(0.35f);\n\n        ImGui.Begin(\"##overlay\", ref opened, windowFlags);\n        ImGui.SetStyle();\n\n        ImGui.Text($\"{fps} fps\", new Vector4(1, 1, 0, 1));\n\n        if (!demoSelected)\n        {\n            float alpha = (float)(0.5 + 0.5 * Math.Sin(ImGui.GetTime() * 4.0));\n            ImGui.PushStyleColor(ImGuiCol.Text, new Vector4(1, 1, 1, alpha));\n        }\n\n        if (ImGui.BeginMenu(\"Select Demo Scene\", true))\n        {\n            if (!demoSelected) ImGui.PopStyleColor();\n            demoSelected = true;\n\n            for (int i = 0; i < demos.Count; i++)\n            {\n                if (ImGui.MenuItem($\"Demo {i:00} - {demos[i].Name}\", string.Empty, false, true))\n                {\n                    SwitchDemo(i);\n                }\n\n                if (demos[i].Description.Length > 0)\n                {\n                    ImGui.PushStyleColor(ImGuiCol.PopupBg, new Vector4(1.0f, 1.0f, 0.88f, 0.95f));\n                    ImGui.PushStyleColor(ImGuiCol.Text, new Vector4(0.0f, 0.0f, 0.0f, 1.0f));\n                    if (ImGui.BeginItemTooltip())\n                    {\n                        ImGui.Text(demos[i].Description);\n                        ImGui.Text(string.Empty);\n                        ImGui.Text(GlobalControls, new Vector4(0.3f, 0.3f, 0.3f, 1.0f));\n                        if (demos[i].Controls.Length > 0)\n                        {\n                            ImGui.Text(demos[i].Controls, new Vector4(0.3f, 0.3f, 0.3f, 1.0f));\n                        }\n\n                        ImGui.EndTooltip();\n                    }\n\n                    ImGui.PopStyleColor(2);\n                }\n            }\n\n            ImGui.EndMenu();\n        }\n        else if (!demoSelected)\n        {\n            ImGui.PopStyleColor();\n        }\n\n        ImGui.Separator();\n\n        ImGui.NextTreeNodeOpen(true);\n        if (ImGui.TreeNode(\"Objects\"))\n        {\n            BeginFixedTable(\"##objects\", 3);\n            World.SpanData data = World.RawData;\n\n            AddTableRow(\"Islands\", $\"{World.Islands.Count,5}\", $\"{World.Islands.ActiveCount,5}\");\n            AddTableRow(\"Bodies\", $\"{data.RigidBodies.Length,5}\", $\"{data.ActiveRigidBodies.Length,5}\");\n            AddTableRow(\"Arbiter\", $\"{data.Contacts.Length,5}\", $\"{data.ActiveContacts.Length,5}\");\n            AddTableRow(\"Constraints\", $\"{data.Constraints.Length,5}\", $\"{data.ActiveConstraints.Length,5}\");\n            AddTableRow(\"SmallConstraints\", $\"{data.SmallConstraints.Length,5}\", $\"{data.ActiveSmallConstraints.Length,5}\");\n            AddTableRow(\"Proxies\", $\"{World.DynamicTree.Proxies.Count,5}\", $\"{World.DynamicTree.Proxies.ActiveCount,5}\");\n\n            ImGui.EndTable();\n            ImGui.TreePop();\n        }\n\n        ImGui.NextTreeNodeOpen(true);\n        if (ImGui.TreeNode(\"Options\"))\n        {\n            bool allowDeactivation = World.AllowDeactivation;\n            ImGui.Checkbox(\"Allow Deactivation\", ref allowDeactivation);\n            World.AllowDeactivation = allowDeactivation;\n\n            bool auxiliaryContacts = World.EnableAuxiliaryContactPoints;\n            ImGui.Checkbox(\"Auxiliary Flat Surface\", ref auxiliaryContacts);\n            World.EnableAuxiliaryContactPoints = auxiliaryContacts;\n\n            ImGui.Checkbox(\"Multithreading\", ref multiThread);\n\n            ImGui.TreePop();\n        }\n\n        if (ImGui.TreeNode(\"Debug Draw\"))\n        {\n            ImGui.Checkbox(\"Islands\", ref debugDrawIslands);\n            ImGui.Checkbox(\"Contacts\", ref debugDrawContacts);\n            ImGui.Checkbox(\"Shapes\", ref debugDrawShapes);\n            ImGui.TreePop();\n        }\n\n        if (ImGui.TreeNode(\"Broadphase\"))\n        {\n            BeginFixedTable(\"##broadphase\", 2);\n\n            AddTableRow(\"PairHashSet Size\", $\"{World.DynamicTree.HashSetInfo.TotalSize,6}\");\n            AddTableRow(\"PairHashSet Count\", $\"{World.DynamicTree.HashSetInfo.Count,6}\");\n            AddTableRow(\"Proxies updated\", $\"{World.DynamicTree.UpdatedProxyCount,6}\");\n\n            for (int i = 0; i < (int)DynamicTree.Timings.Last; i++)\n            {\n                AddTableRow($\"{(DynamicTree.Timings)i}\",\n                    $\"{World.DynamicTree.DebugTimings[i],6:N2}\");\n            }\n\n            ImGui.EndTable();\n\n            ImGui.Checkbox(\"Debug draw tree\", ref debugDrawTree);\n\n            if (ImGui.Slider(\"##depthslider\", ref debugDrawTreeDepth, 1, 64, \"Tree depth (%d)\", ImGuiSliderFlags.None))\n            {\n                debugDrawTree = true;\n            }\n\n            ImGui.TreePop();\n        }\n\n        ImGui.NextTreeNodeOpen(true);\n        if (ImGui.TreeNode(\"Timings\"))\n        {\n            BeginFixedTable(\"##timings\", 2);\n\n            for (int i = 0; i < (int)World.Timings.Last; i++)\n            {\n                AddTableRow(((World.Timings)i).ToString(), $\"{debugTimes[i],6:N2}\");\n            }\n\n            ImGui.EndTable();\n\n            float max = physicsTime.Max();\n            ImGui.PlotHistogram(physicsTime, \"##histogram\", $\"max. {max:f2} ms\", 0, max * 1.0f, 200, 80);\n\n            ImGui.Text($\"Total: {totalTime,0:N2} ms ({1000.0d / totalTime,0:N0} fps)\");\n            ImGui.Slider(\"##sampleslider\", ref samplingRate, 1, 10, \"sampling rate (%d)\", ImGuiSliderFlags.None);\n\n            ImGui.TreePop();\n        }\n\n        ImGui.NextTreeNodeOpen(true);\n        if (ImGui.TreeNode(\"GC statistics\"))\n        {\n            ImGui.Text(gcText.ToString());\n            ImGui.TreePop();\n        }\n\n        ImGui.End();\n\n        // ImGui.ShowDemo();\n\n        ImGui.EndFrame();\n        ImGui.Render();\n    }\n\n    private static void BeginFixedTable(string id, int columns)\n    {\n        ImGui.BeginTable(id, columns,\n            ImGuiTableFlags.NoBordersInBody |\n            ImGuiTableFlags.SizingFixedFit |\n            ImGuiTableFlags.Resizable,\n            Vector2.Zero, 0);\n\n        ImGui.SetupColumn(string.Empty, ImGuiTableColumnFlags.WidthStretch, 0, 0);\n        for (int i = 1; i < columns; i++)\n        {\n            ImGui.SetupColumn(string.Empty, ImGuiTableColumnFlags.WidthFixed, 0, 0);\n        }\n    }\n\n    private static void AddTableRow(params string[] columns)\n    {\n        ImGui.TableNextRow();\n        for (int i = 0; i < columns.Length; i++)\n        {\n            ImGui.TableSetColumnIndex(i);\n            ImGui.Text(columns[i]);\n        }\n    }\n}"
  },
  {
    "path": "src/JitterDemo/Playground.Picking.cs",
    "content": "using Jitter2.Collision;\nusing Jitter2.Collision.Shapes;\nusing Jitter2.Dynamics;\nusing Jitter2.Dynamics.Constraints;\nusing Jitter2.LinearMath;\nusing Jitter2.SoftBodies;\nusing JitterDemo.Renderer;\nusing JitterDemo.Renderer.OpenGL;\n\nnamespace JitterDemo;\n\npublic partial class Playground : RenderWindow\n{\n    private Vector3 Unproject(Vector3 source, in Matrix4 projection, in Matrix4 view)\n    {\n        source.X = source.X / Width * 2.0f - 1.0f;\n        source.Y = -source.Y / Height * 2.0f + 1.0f;\n        Matrix4 matrix = Matrix4.Multiply(projection, view);\n        Matrix4.Invert(matrix, out matrix);\n        Vector4 vec = new(source, 1.0f);\n        Vector4 up = matrix * vec;\n        return new Vector3(up.X / up.W, up.Y / up.W, up.Z / up.W);\n    }\n\n    private Vector3 RayTo(int x, int y)\n    {\n        Vector3 nearSource = new(x, y, 0.1f);\n        Vector3 farSource = new(x, y, 0.5f);\n\n        Vector3 nearPoint = Unproject(nearSource, Camera.ProjectionMatrix, Camera.ViewMatrix);\n        Vector3 farPoint = Unproject(farSource, Camera.ProjectionMatrix, Camera.ViewMatrix);\n\n        return Vector3.Normalize(farPoint - nearPoint);\n    }\n\n    private RigidBody? grabBody;\n    private bool grabbing;\n\n    private DistanceLimit? grabConstraint;\n    private float hitDistance;\n    private void Pick()\n    {\n        JVector origin = Conversion.ToJitterVector(Camera.Position);\n        JVector dir = Conversion.ToJitterVector(RayTo((int)Mouse.Position.X, (int)Mouse.Position.Y));\n\n        if (grabbing)\n        {\n            if (grabBody == null) return;\n            if (grabConstraint == null) return;\n\n            hitDistance += (float)Mouse.ScrollWheel.Y;\n\n            grabConstraint.Anchor2 = origin + hitDistance * dir;\n            grabBody.SetActivationState(true);\n\n            grabBody.Data.Velocity *= 0.98f;\n            grabBody.Data.AngularVelocity *= 0.98f;\n        }\n        else\n        {\n            grabBody = null;\n\n            bool result = World.DynamicTree.RayCast(origin, dir, null, null,\n                out IDynamicTreeProxy? grabShape, out JVector hitNormal, out hitDistance);\n\n            if (!result) return;\n\n            JVector hitPoint = origin + hitDistance * dir;\n\n            if (grabShape != null)\n            {\n                if (grabShape is SoftBodyShape gs)\n                {\n                    grabBody = gs.GetClosest(hitPoint);\n                }\n                else if (grabShape is RigidBodyShape rbs)\n                {\n                    grabBody = rbs.RigidBody;\n                }\n            }\n\n            if (grabBody == null || grabBody.MotionType != MotionType.Dynamic) return;\n            grabbing = true;\n\n            if (grabConstraint != null) World.Remove(grabConstraint);\n\n            grabConstraint = World.CreateConstraint<DistanceLimit>(grabBody, World.NullBody);\n            grabConstraint.Initialize(hitPoint, hitPoint);\n            grabConstraint.Softness = 0.01f;\n            grabConstraint.Bias = 0.1f;\n        }\n    }\n}"
  },
  {
    "path": "src/JitterDemo/Playground.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing Jitter2;\nusing Jitter2.Collision;\nusing Jitter2.Collision.Shapes;\nusing Jitter2.Dynamics;\nusing Jitter2.LinearMath;\nusing JitterDemo.Renderer;\nusing JitterDemo.Renderer.OpenGL;\n\nnamespace JitterDemo;\n\npublic class RigidBodyTag(bool doNotDraw = true)\n{\n    public bool DoNotDraw { get; set; } = doNotDraw;\n}\n\npublic partial class Playground : RenderWindow\n{\n    private readonly World world;\n\n    private const float PhysicsTimestep = 1.0f / 100.0f;\n    private bool multiThread = true;\n    private RigidBodyShape? floorShape;\n\n    private CSMInstance sphereDrawer = null!;\n    private CSMInstance boxDrawer = null!;\n    private CSMInstance coneDrawer = null!;\n    private CSMInstance cylinderDrawer = null!;\n    private CSMInstance halfSphereDrawer = null!;\n    private CSMInstance floorDrawer = null!;\n\n    private readonly List<IDemo> demos = new()\n    {\n        new Demo00(),\n        new Demo01(),\n        new Demo02(),\n        new Demo03(),\n        new Demo04(),\n        new Demo05(),\n        new Demo06(),\n        new Demo07(),\n        //new Demo08(),   // contact manifold test\n        new Demo09(),\n        new Demo10(),\n        // new Demo11(),  // double pendulum\n        new Demo12(),\n        new Demo13(),\n        new Demo14(),\n        new Demo15(),\n        new Demo16(),\n        new Demo17(),\n        // new Demo18(),  // point test\n        // new Demo19(),  // ray cast test\n        new Demo20(),\n        new Demo21(),\n        new Demo22(),\n        new Demo23(),\n        new Demo24(),\n        new Demo25(),\n        new Demo26(), // angular sweep\n        new Demo27(),\n        new Demo28(),\n        new Demo29(),\n        new Demo30(),\n    };\n\n    private IDemo? currentDemo;\n\n    private void SwitchDemo(int index)\n    {\n        (currentDemo as ICleanDemo)?.CleanUp();\n        ResetScene();\n        currentDemo = demos[index];\n        currentDemo.Build(this, world);\n    }\n\n    public Playground()\n    {\n        world = new World();\n        world.NullBody.Tag = new RigidBodyTag();\n        drawBox = DrawBox;\n    }\n\n    private void ResetScene()\n    {\n        floorShape = null;\n        world.Clear();\n        world.DynamicTree.Filter = World.DefaultDynamicTreeFilter;\n        world.BroadPhaseFilter = null;\n        world.NarrowPhaseFilter = new TriangleEdgeCollisionFilter();\n        world.Gravity = new JVector(0, -9.81f, 0);\n        world.SubstepCount = 1;\n        world.SolverIterations = (8, 4);\n    }\n\n    public void AddFloor()\n    {\n        RigidBody body = World.CreateRigidBody();\n        floorShape = new BoxShape(200, 200, 200);\n        body.Position = new JVector(0, -100, 0f);\n        body.MotionType = MotionType.Static;\n        body.AddShape(floorShape);\n    }\n\n    public override void Load()\n    {\n        base.Load();\n        ResetScene();\n        AddFloor();\n\n        sphereDrawer = CSMRenderer.GetInstance<Sphere>();\n        boxDrawer = CSMRenderer.GetInstance<Cube>();\n        coneDrawer = CSMRenderer.GetInstance<Cone>();\n        cylinderDrawer = CSMRenderer.GetInstance<Cylinder>();\n        halfSphereDrawer = CSMRenderer.GetInstance<HalfSphere>();\n        floorDrawer = CSMRenderer.GetInstance<JitterFloor>();\n\n        VerticalSync = false;\n    }\n\n    public RigidBodyShape? FloorShape => floorShape;\n\n    public World World => world;\n\n    public void ShootPrimitive()\n    {\n        const float primitiveVelocity = 20.0f;\n\n        var pos = Camera.Position;\n        var dir = Camera.Direction;\n\n        var sb = World.CreateRigidBody();\n        sb.Position = Conversion.ToJitterVector(pos);\n        sb.Velocity = Conversion.ToJitterVector(dir * primitiveVelocity);\n\n        var ss = new BoxShape(1);\n        sb.AddShape(ss);\n    }\n\n    private void DrawShape(Shape shape, in Matrix4 mat, in Vector3 color)\n    {\n        Matrix4 ms;\n\n        switch (shape)\n        {\n            case BoxShape s:\n                ms = MatrixHelper.CreateScale(s.Size.X, s.Size.Y, s.Size.Z);\n                boxDrawer.PushMatrix(mat * ms, color);\n                break;\n            case SphereShape s:\n                ms = MatrixHelper.CreateScale(s.Radius * 2);\n                sphereDrawer.PushMatrix(mat * ms, color);\n                break;\n            case CylinderShape s:\n                ms = MatrixHelper.CreateScale(s.Radius, s.Height, s.Radius);\n                cylinderDrawer.PushMatrix(mat * ms, color);\n                break;\n            case CapsuleShape s:\n                ms = MatrixHelper.CreateScale(s.Radius, s.Length, s.Radius);\n                cylinderDrawer.PushMatrix(mat * ms, color);\n                ms = MatrixHelper.CreateTranslation(0, 0.5f * s.Length, 0) * MatrixHelper.CreateScale(s.Radius * 2);\n                halfSphereDrawer.PushMatrix(mat * ms, color);\n                halfSphereDrawer.PushMatrix(mat * MatrixHelper.CreateRotationX(MathF.PI) * ms, color);\n                break;\n            case ConeShape s:\n                ms = MatrixHelper.CreateScale(s.Radius * 2, s.Height, s.Radius * 2);\n                coneDrawer.PushMatrix(mat * ms, color);\n                break;\n        }\n    }\n\n    public override void Draw()\n    {\n        world.Step(PhysicsTimestep, multiThread);\n\n        UpdateDisplayText();\n        LayoutGui();\n\n        foreach (RigidBody body in world.RigidBodies)\n        {\n            if (body.Tag is RigidBodyTag { DoNotDraw: true }) continue;\n\n            Matrix4 mat = Conversion.FromJitter(body);\n\n            foreach (var shape in body.Shapes)\n            {\n                if (shape == floorShape)\n                {\n                    floorDrawer.PushMatrix(Matrix4.Identity);\n                    continue;\n                }\n\n                var color = ColorGenerator.GetColor(shape.GetHashCode());\n                if (!shape.RigidBody.Data.IsActive) color += new Vector3(0.2f, 0.2f, 0.2f);\n\n                if (shape is TransformedShape ts)\n                {\n                    Matrix4 tmat = mat * MatrixHelper.CreateTranslation(Conversion.FromJitter(ts.Translation)) *\n                                   Conversion.FromJitter(ts.Transformation);\n                    DrawShape(ts.OriginalShape, tmat, color);\n                }\n                else\n                {\n                    DrawShape(shape, mat, color);\n                }\n            }\n        }\n\n        (currentDemo as IDrawUpdate)?.DrawUpdate();\n\n        DebugDraw();\n\n        if (!GuiRenderer.WantsCaptureMouse && (Mouse.ButtonPressBegin(Mouse.Button.Left) || grabbing))\n        {\n            Pick();\n        }\n\n        if (!Mouse.IsButtonDown(Mouse.Button.Left))\n        {\n            if (grabConstraint != null) world.Remove(grabConstraint);\n            grabBody = null;\n            grabConstraint = null;\n            grabbing = false;\n        }\n\n        if (Keyboard.KeyPressBegin(Keyboard.Key.M))\n        {\n            multiThread = !multiThread;\n        }\n\n        if (!GuiRenderer.WantsCaptureKeyboard && Keyboard.KeyPressBegin(Keyboard.Key.Space))\n        {\n            ShootPrimitive();\n        }\n\n        base.Draw();\n    }\n}"
  },
  {
    "path": "src/JitterDemo/Program.cs",
    "content": "﻿using System;\nusing JitterDemo.Renderer.OpenGL;\n\nnamespace JitterDemo;\n\npublic static class Program\n{\n    private static void PrintException(Exception ex, string info)\n    {\n        Console.ForegroundColor = ConsoleColor.Red;\n        Console.WriteLine($\"{ex.GetType()}\");\n        Console.ForegroundColor = ConsoleColor.Yellow;\n        Console.WriteLine(info);\n        Console.ResetColor();\n        Console.WriteLine(ex.Message);\n    }\n\n    public static void Main()\n    {\n        Jitter2.Logger.Listener = (level, message) =>\n        {\n            string colorCode = level switch\n            {\n                Jitter2.Logger.LogLevel.Information => \"\\e[32m\", // Green\n                Jitter2.Logger.LogLevel.Warning     => \"\\e[33m\", // Yellow\n                Jitter2.Logger.LogLevel.Error       => \"\\e[31m\", // Red\n                _                                   => \"\\e[0m\",  // Reset\n            };\n\n            const string bold = \"\\e[1m\";\n            const string reset = \"\\e[0m\";\n\n            Console.WriteLine($\"{colorCode}{bold}[Jitter] {level}{reset}: {message}\");\n        };\n\n        CreationSettings cs = new(1200, 800, \"Jitter2 - Demo\");\n\n        try\n        {\n            new Playground().Open(cs);\n        }\n        catch (DllNotFoundException ex)\n        {\n            PrintException(ex, \"Unable to load library.\");\n        }\n        catch (OpenGLVersionNotSupportedException ex)\n        {\n            PrintException(ex, \"The OpenGL version available on this system is too old.\");\n        }\n    }\n}"
  },
  {
    "path": "src/JitterDemo/Renderer/Assets/Image.cs",
    "content": "/* Copyright <2022> <Thorben Linneweber>\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n *\n */\n\nusing System;\nusing System.IO;\n\nnamespace JitterDemo.Renderer;\n\npublic class Image\n{\n    public int Width { private set; get; }\n    public int Height { private set; get; }\n\n    private readonly byte[] argbData;\n\n    private Image(byte[] argbData, int width, int height)\n    {\n        this.argbData = argbData;\n        Width = width;\n        Height = height;\n    }\n\n    /// <summary>\n    /// Minimal  *.tga (Truevision TGA) loader for true color images with runtime\n    /// length encoding support.\n    /// </summary>\n    public static Image LoadImage(string filename)\n    {\n        const int dataOffset = 18;\n\n        var data = File.ReadAllBytes(filename).AsSpan();\n\n        int imageType = data[2];\n        int imageWidth = (data[13] << 8) | data[12];\n        int imageHeight = (data[15] << 8) | data[14];\n        int bitPerPixel = data[16];\n        int descriptor = data[17];\n\n        // Image type 2 and 10: The image data is a direct representation of the pixel color.\n        // For a Pixel Depth of 15 and 16 bit, each pixel is stored with 5 bits per color.\n        // If the pixel depth is 16 bits, the topmost bit is reserved for transparency. For\n        // a pixel depth of 24 bits, each pixel is stored with 8 bits per color. A 32-bit pixel\n        // depth defines an additional 8-bit alpha channel.\n        // [https://en.wikipedia.org/wiki/Truevision_TGA]\n\n        if (!(imageType is 2 or 10 && bitPerPixel is 24 or 32))\n        {\n            throw new Exception(\"Only 24bit and 32bit encoded *.tga-files supported!\");\n        }\n\n        var colorData = data[dataOffset..data.Length];\n\n        int bytesPerPixel = bitPerPixel / 8;\n\n        bool hl = (descriptor & 0x20) == 0;\n        bool vl = (descriptor & 0x10) != 0;\n\n        int FlipImage(int index)\n        {\n            int row = index / imageWidth;\n            int col = index - row * imageWidth;\n            if (hl) row = imageHeight - 1 - row;\n            if (vl) col = imageWidth - 1 - col;\n            return row * imageWidth + col;\n        }\n\n        int pixelCount = imageWidth * imageHeight;\n\n        byte[] decoded = new byte[4 * pixelCount];\n        int pixelIndex = 0;\n\n        int pos = 0;\n        while (pixelIndex < pixelCount)\n        {\n            int skip = 0;\n            int count = pixelCount;\n\n            if (imageType == 10)\n            {\n                skip = (colorData[pos] & 0x80) != 0 ? 1 : 0;\n                count = (colorData[pos] & 0x7F) + 1;\n                pos += 1;\n            }\n\n            for (int i = 0; i < count; i++)\n            {\n                int idx = 4 * FlipImage(pixelIndex++);\n                decoded[idx + 0] = colorData[pos + 0];\n                decoded[idx + 1] = colorData[pos + 1];\n                decoded[idx + 2] = colorData[pos + 2];\n                decoded[idx + 3] = bytesPerPixel == 4 ? colorData[pos + 3] : (byte)0;\n                pos += bytesPerPixel * (1 - skip);\n            }\n\n            pos += bytesPerPixel * skip;\n        }\n\n        return new Image(decoded, imageWidth, imageHeight);\n    }\n\n    public unsafe void FixedData(Action<Image, IntPtr> action)\n    {\n        fixed (void* ptr = argbData)\n        {\n            action(this, (IntPtr)ptr);\n        }\n    }\n}"
  },
  {
    "path": "src/JitterDemo/Renderer/Assets/Mesh.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.IO;\nusing System.IO.Compression;\nusing System.Linq;\nusing System.Text;\nusing JitterDemo.Renderer.OpenGL;\n\nnamespace JitterDemo.Renderer;\n\npublic class Mesh\n{\n    public struct Group\n    {\n        public string Name;\n        public int FromInclusive;\n        public int ToExclusive;\n    }\n\n    public readonly Vertex[] Vertices;\n    public readonly TriangleVertexIndex[] Indices;\n    public readonly Group[] Groups;\n\n    private Mesh(Vertex[] vertices, TriangleVertexIndex[] indices, Group[] groups)\n    {\n        Vertices = vertices;\n        Indices = indices;\n        Groups = groups;\n    }\n\n    public void Transform(Matrix4 matrix)\n    {\n        for (int i = 0; i < Vertices.Length; i++)\n        {\n            Vertices[i].Position = Vector3.Transform(Vertices[i].Position, matrix);\n        }\n    }\n\n    private static IEnumerable<string> ReadFromZip(string filename)\n    {\n        using var zip = new ZipArchive(File.OpenRead(filename));\n        if (zip.Entries.Count != 1)\n        {\n            throw new InvalidOperationException(\"Invalid zip file. There should be exactly one entry.\");\n        }\n\n        using var sr = new StreamReader(zip.Entries[0].Open(), Encoding.UTF8);\n        while (!sr.EndOfStream)\n        {\n            yield return sr.ReadLine()!;\n        }\n    }\n\n    public static Mesh LoadMesh(string filename, bool revertWinding = false)\n    {\n        var format = new NumberFormatInfo { NumberDecimalSeparator = \".\" };\n\n        float ParseFloat(string str)\n        {\n            return float.Parse(str, format);\n        }\n\n        int ParseIndex(string str)\n        {\n            return int.Parse(str) - 1;\n        }\n\n        string[] content = filename.EndsWith(\".zip\") ? ReadFromZip(filename).ToArray() : File.ReadAllLines(filename);\n        var lines = content.Select(s => s.Trim()).Where(s => s != string.Empty);\n\n        List<Vector3> v = [], vn = [];\n        List<Vector2> vt = [];\n\n        foreach (string line in lines)\n        {\n            var s = line.Split(' ', StringSplitOptions.TrimEntries | StringSplitOptions.RemoveEmptyEntries);\n            switch (s[0])\n            {\n                case \"v\":\n                    v.Add(new Vector3(ParseFloat(s[1]), ParseFloat(s[2]), ParseFloat(s[3])));\n                    break;\n                case \"vn\":\n                    vn.Add(new Vector3(ParseFloat(s[1]), ParseFloat(s[2]), ParseFloat(s[3])));\n                    break;\n                case \"vt\":\n                    vt.Add(new Vector2(ParseFloat(s[1]), ParseFloat(s[2])));\n                    break;\n            }\n        }\n\n        bool hasTexture = vt.Count > 0;\n        bool hasNormals = vn.Count > 0;\n\n        Dictionary<string, int> dict = new();\n        List<Vertex> vertices = [];\n        List<TriangleVertexIndex> indices = [];\n\n        int AddVertex(string s)\n        {\n            var a = s.Split(\"/\");\n            if (hasTexture && hasNormals) vertices.Add(new Vertex(v[ParseIndex(a[0])], vn[ParseIndex(a[2])], vt[ParseIndex(a[1])]));\n            else if (hasNormals) vertices.Add(new Vertex(v[ParseIndex(a[0])], vn[ParseIndex(a[2])]));\n            else vertices.Add(new Vertex(v[ParseIndex(a[0])]));\n\n            return vertices.Count - 1;\n        }\n\n        foreach (string line in lines)\n        {\n            var s = line.Split(' ', StringSplitOptions.TrimEntries | StringSplitOptions.RemoveEmptyEntries);\n            if (s[0] != \"f\") continue;\n\n            for (int i = 1; i <= 3; i++)\n            {\n                if (!dict.TryGetValue(s[i], out int index))\n                {\n                    index = AddVertex(s[i]);\n                    dict.Add(s[i], index);\n                }\n            }\n        }\n\n        List<Group> groups = [];\n        Group groupLast = new();\n        bool firstGroup = true;\n\n        foreach (string line in lines)\n        {\n            var s = line.Split(' ', StringSplitOptions.TrimEntries |\n                                    StringSplitOptions.RemoveEmptyEntries);\n\n            switch (s[0])\n            {\n                case \"o\":\n                {\n                    if (!firstGroup)\n                    {\n                        groupLast.ToExclusive = indices.Count;\n                        groups.Add(groupLast);\n                    }\n\n                    firstGroup = false;\n                    groupLast.FromInclusive = indices.Count;\n                    groupLast.Name = s.Length > 1 ? s[1] : string.Empty;\n                    break;\n                }\n                case \"f\":\n                {\n                    int i0 = dict[s[1]];\n                    int i1 = dict[s[2]];\n                    int i2 = dict[s[3]];\n\n                    indices.Add(revertWinding ? new TriangleVertexIndex(i1, i0, i2) : new TriangleVertexIndex(i0, i1, i2));\n                    break;\n                }\n            }\n        }\n\n        if (!firstGroup)\n        {\n            groupLast.ToExclusive = indices.Count;\n            groups.Add(groupLast);\n        }\n\n        return new Mesh(vertices.ToArray(), indices.ToArray(), groups.ToArray());\n    }\n}"
  },
  {
    "path": "src/JitterDemo/Renderer/CSM/CSMInstance.cs",
    "content": "using System;\nusing JitterDemo.Renderer.OpenGL;\nusing JitterDemo.Renderer.OpenGL.Native;\n\nnamespace JitterDemo.Renderer;\n\npublic struct TransformColor\n{\n    public Matrix4 Transform;\n    public Vector3 Color;\n\n    public static readonly TransformColor Default = new()\n    {\n        Transform = Matrix4.Identity,\n        Color = new Vector3(0, 1, 0)\n    };\n}\n\npublic abstract class CSMInstance\n{\n    public Texture2D Texture { set; get; } = Texture2D.EmptyTexture();\n\n    protected VertexArrayObject Vao = null!;\n    protected PhongShader shader = null!;\n    protected ArrayBuffer ab = null!;\n\n    protected ArrayBuffer worldMatrices = null!;\n    protected int IndexLen;\n\n    public TransformColor[] WorldMatrices = { TransformColor.Default };\n    public int Count { set; get; }\n\n    public abstract (Vertex[] vertices, TriangleVertexIndex[] indices) ProvideVertices();\n\n    public void PushMatrix(in Matrix4 matrix)\n    {\n        PushMatrix(matrix, new Vector3(1, 1, 1));\n    }\n\n    public void PushMatrix(in Matrix4 matrix, in Vector3 color)\n    {\n        Count++;\n\n        TransformColor tc;\n        tc.Transform = matrix;\n        tc.Color = color;\n\n        if (Count >= WorldMatrices.Length)\n        {\n            Array.Resize(ref WorldMatrices, WorldMatrices.Length * 2);\n        }\n\n        WorldMatrices[Count - 1] = tc;\n    }\n\n    public virtual void LightPass(PhongShader shader)\n    {\n        if (Count == 0) return;\n\n        Texture?.Bind(3);\n\n        Vao.Bind();\n        GLDevice.DrawElementsInstanced(DrawMode.Triangles, IndexLen, IndexType.UnsignedInt, 0, Count);\n    }\n\n    public virtual void UpdateWorldMatrices()\n    {\n        if (Count == 0) return;\n        worldMatrices.SetData(WorldMatrices, Count, GLC.DYNAMIC_DRAW);\n    }\n\n    public virtual void ShadowPass(ShadowShader shader)\n    {\n        if (Count == 0) return;\n\n        Vao.Bind();\n        GLDevice.DrawElementsInstanced(DrawMode.Triangles, IndexLen, IndexType.UnsignedInt, 0, Count);\n    }\n\n    public virtual void Load()\n    {\n        Vao = new VertexArrayObject();\n\n        (var vertices, var indices) = ProvideVertices();\n        IndexLen = indices.Length * 3;\n\n        ab = new ArrayBuffer();\n        ab.SetData(vertices);\n\n        int sof = sizeof(float);\n\n        Vao.VertexAttributes[5].Set(ab, 3, VertexAttributeType.Float, false, 8 * sof, 0 * sof); // position\n        Vao.VertexAttributes[6].Set(ab, 3, VertexAttributeType.Float, false, 8 * sof, 3 * sof); // normal\n        Vao.VertexAttributes[7].Set(ab, 2, VertexAttributeType.Float, false, 8 * sof, 6 * sof); // texture\n\n        worldMatrices = new ArrayBuffer();\n\n        Vao.VertexAttributes[0].Set(worldMatrices, 4, VertexAttributeType.Float, false, 19 * sof, 0 * sof);\n        Vao.VertexAttributes[1].Set(worldMatrices, 4, VertexAttributeType.Float, false, 19 * sof, 4 * sof);\n        Vao.VertexAttributes[2].Set(worldMatrices, 4, VertexAttributeType.Float, false, 19 * sof, 8 * sof);\n        Vao.VertexAttributes[3].Set(worldMatrices, 4, VertexAttributeType.Float, false, 19 * sof, 12 * sof);\n        Vao.VertexAttributes[4].Set(worldMatrices, 3, VertexAttributeType.Float, false, 19 * sof, 16 * sof);\n\n        Vao.VertexAttributes[0].Divisor = 1;\n        Vao.VertexAttributes[1].Divisor = 1;\n        Vao.VertexAttributes[2].Divisor = 1;\n        Vao.VertexAttributes[3].Divisor = 1;\n        Vao.VertexAttributes[4].Divisor = 1;\n\n        Vao.ElementArrayBuffer = new ElementArrayBuffer();\n        Vao.ElementArrayBuffer.SetData(indices);\n    }\n}"
  },
  {
    "path": "src/JitterDemo/Renderer/CSM/CSMRenderer.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing JitterDemo.Renderer.OpenGL;\n\nnamespace JitterDemo.Renderer;\n\npublic class CSMRenderer\n{\n    private readonly Dictionary<Type, CSMInstance> csmInstances = new();\n\n    public T GetInstance<T>() where T : CSMInstance, new()\n    {\n        if (!csmInstances.TryGetValue(typeof(T), out CSMInstance? rinst))\n        {\n            rinst = new T();\n            csmInstances.Add(typeof(T), rinst);\n            rinst.Load();\n        }\n\n        return (T)rinst;\n    }\n\n    private readonly Matrix4[] lightMatrices = new Matrix4[3];\n    public Texture2D[] DepthMap { get; } = new Texture2D[3];\n    private readonly FrameBuffer[] depthMapFBO = new FrameBuffer[3];\n\n    public const int ShadowMapSize = 4096;\n\n    private ShadowShader shadowShader = null!;\n    private PhongShader phongShader = null!;\n\n    private readonly float[] shadowCascadeLevels = { 20, 60 };\n\n    private static void GetFrustumPoints(Span<Vector4> corners, Matrix4 proj, Matrix4 view)\n    {\n        bool result = Matrix4.Invert(proj * view, out Matrix4 inv);\n        if (!result) throw new Exception(\"matrix misbehaved.\");\n\n        for (int x = 0; x < 2; x++)\n        for (int y = 0; y < 2; y++)\n        for (int z = 0; z < 2; z++)\n        {\n            Vector4 pt;\n            pt.X = 2.0f * x - 1.0f;\n            pt.Y = 2.0f * y - 1.0f;\n            pt.Z = 2.0f * z - 1.0f;\n            pt.W = 1.0f;\n\n            pt = inv * pt;\n\n            corners[4 * x + 2 * y + z] = pt * (1.0f / pt.W);\n        }\n    }\n\n    private Vector3 lightDir;\n\n    private Matrix4 GetLightSpaceMatrix(float nearPlane, float farPlane)\n    {\n        (float width, float height) = RenderWindow.Instance.FramebufferSize;\n\n        Camera camera = RenderWindow.Instance.Camera;\n\n        Span<Vector4> corners = stackalloc Vector4[8];\n\n        float cameraZoom = camera.FieldOfView;\n        Matrix4 proj = MatrixHelper.CreatePerspectiveFieldOfView(cameraZoom, width / height, nearPlane, farPlane);\n\n        GetFrustumPoints(corners, proj, camera.ViewMatrix);\n\n        Vector3 center = Vector3.Zero;\n\n        for (int i = 0; i < 8; i++)\n        {\n            center += corners[i].XYZ;\n        }\n\n        center *= 1.0f / 8.0f;\n\n        Vector3 rotv = new Vector3(1, 2, 1);\n\n        lightDir = Vector3.Normalize(rotv);\n        Matrix4 lightView = MatrixHelper.CreateLookAt(center + lightDir, center, Vector3.UnitY);\n\n        Vector3 min = new Vector3(float.MaxValue, float.MaxValue, float.MaxValue);\n        Vector3 max = new Vector3(float.MinValue, float.MinValue, float.MinValue);\n\n        for (int i = 0; i < 8; i++)\n        {\n            Vector4 trf = lightView * corners[i];\n            if (trf.X < min.X) min.X = trf.X;\n            if (trf.Y < min.Y) min.Y = trf.Y;\n            if (trf.Z < min.Z) min.Z = trf.Z;\n            if (trf.X > max.X) max.X = trf.X;\n            if (trf.Y > max.Y) max.Y = trf.Y;\n            if (trf.Z > max.Z) max.Z = trf.Z;\n        }\n\n        // Tune this parameter according to the scene\n        float zMult = 3.0f;\n        if (min.Z < 0) min.Z *= zMult;\n        else min.Z /= zMult;\n\n        if (max.Z < 0) max.Z /= zMult;\n        else max.Z *= zMult;\n\n        Matrix4 lightProjection = MatrixHelper.CreateOrthographicOffCenter(min.X, max.X, min.Y, max.Y, min.Z, max.Z);\n\n        return lightProjection * lightView;\n    }\n\n    private void GetLightSpaceMatrices(Matrix4[] matrices)\n    {\n        Camera camera = RenderWindow.Instance.Camera;\n\n        for (int i = 0;; i++)\n        {\n            if (i == 0) matrices[i] = GetLightSpaceMatrix(camera.NearPlane, shadowCascadeLevels[i]);\n            else if (i < shadowCascadeLevels.Length)\n                matrices[i] = GetLightSpaceMatrix(shadowCascadeLevels[i - 1], shadowCascadeLevels[i]);\n            else\n            {\n                matrices[i] = GetLightSpaceMatrix(shadowCascadeLevels[i - 1], camera.FarPlane);\n                break;\n            }\n        }\n    }\n\n    private void CreateFramebuffer(out Texture2D texture, out FrameBuffer frameBuffer)\n    {\n        texture = new Texture2D();\n\n        frameBuffer = new FrameBuffer();\n\n        frameBuffer.AttachDepthTexture(texture);\n\n        texture.Specify(Texture.Format.Depth, ShadowMapSize, ShadowMapSize, Texture.Type.Float);\n        texture.SetMinMagFilter(Texture.Filter.Nearest, Texture.Filter.Nearest);\n        texture.SetWrap(Texture.Wrap.ClampToBorder);\n        texture.SetBorderColor(new Vector4(1, 1, 1, 1));\n\n        FrameBuffer.Default.Bind();\n    }\n\n    public void Load()\n    {\n        for (int i = 0; i < 3; i++) CreateFramebuffer(out DepthMap[i], out depthMapFBO[i]);\n\n        shadowShader = new ShadowShader();\n        phongShader = new PhongShader();\n\n        shadowShader.Use();\n        shadowShader.Model.Set(Matrix4.Identity);\n        phongShader.Use();\n        phongShader.Model.Set(Matrix4.Identity);\n    }\n\n    public void Draw()\n    {\n        Camera camera = RenderWindow.Instance.Camera;\n\n        GLDevice.SetViewport(0, 0, ShadowMapSize, ShadowMapSize);\n\n        foreach (var drawable in csmInstances.Values)\n        {\n            if (drawable.Count == 0) continue;\n            drawable.UpdateWorldMatrices();\n        }\n\n        shadowShader.Use();\n\n        GetLightSpaceMatrices(lightMatrices);\n\n        for (int i = 0; i < 3; i++)\n        {\n            depthMapFBO[i].Bind();\n            GLDevice.Clear(ClearFlags.DepthBuffer);\n\n            shadowShader.ProjectionView.Set(lightMatrices[i]);\n\n            GLDevice.SetCullFaceMode(CullMode.Front);\n\n            foreach (var drawable in csmInstances.Values)\n            {\n                if (drawable.Count == 0) continue;\n                drawable.ShadowPass(shadowShader);\n            }\n\n            GLDevice.SetCullFaceMode(CullMode.Back);\n        }\n\n        FrameBuffer.Default.Bind();\n\n        for (uint i = 0; i < 3; i++)\n        {\n            DepthMap[i].Bind(i);\n        }\n\n        (int width, int height) = RenderWindow.Instance.FramebufferSize;\n        GLDevice.SetViewport(0, 0, width, height);\n\n        phongShader.Use();\n        phongShader.MaterialProperties.SetDefaultMaterial();\n        phongShader.Projection.Set(camera.ProjectionMatrix);\n        phongShader.View.Set(camera.ViewMatrix);\n        phongShader.ViewPosition.Set(camera.Position);\n        phongShader.Lights.Set(lightMatrices, false);\n        phongShader.SunDir.Set(lightDir);\n\n        foreach (var drawable in csmInstances.Values)\n        {\n            if (drawable.Count == 0) continue;\n\n            drawable.LightPass(phongShader);\n\n            int mld4 = drawable.WorldMatrices.Length / 4;\n            if (drawable.Count < mld4)\n            {\n                Array.Resize(ref drawable.WorldMatrices, drawable.WorldMatrices.Length / 2);\n            }\n\n            drawable.Count = 0;\n        }\n    }\n}"
  },
  {
    "path": "src/JitterDemo/Renderer/CSM/CSMShader.cs",
    "content": "using JitterDemo.Renderer.OpenGL;\n\nnamespace JitterDemo.Renderer;\n\npublic class ShadowShader : BasicShader\n{\n    public UniformMatrix4 ProjectionView { private set; get; }\n    public UniformMatrix4 Model { private set; get; }\n\n    public ShadowShader() : base(vshader, fshader)\n    {\n        ProjectionView = GetUniform<UniformMatrix4>(\"projectionview\");\n        Model = GetUniform<UniformMatrix4>(\"model\");\n    }\n\n    private static readonly string vshader = @\"\n        #version 330 core\n        layout (location = 0) in mat4 aModel;\n        layout (location = 5) in vec3 aPos;\n\n        uniform mat4 projectionview;\n        uniform mat4 model;\n\n        void main()\n        {\n            gl_Position = projectionview * aModel * model * vec4(aPos, 1.0);\n        }  \n        \";\n\n    private static readonly string fshader = @\"\n        #version 330 core\n        out vec4 FragColor;\n        void main()\n        {             \n        } \n        \";\n}\n\npublic class PhongShader : BasicShader\n{\n    public class Material\n    {\n        public UniformVector3 Color { get; }\n        public UniformVector3 Specular { get; }\n        public UniformFloat Shininess { get; }\n        public UniformFloat Alpha { get; }\n\n        private UniformFloat NormalMultiply { get; }\n\n        public bool FlipNormal\n        {\n            set => NormalMultiply.Set(value ? -1.0f : 1.0f);\n        }\n\n        /// <summary>\n        /// Magic:\n        /// Ambient = ColorMixing.X * vertexColor + ColorMixing.Y * shaderColor\n        /// Diffusive = (1.0f - ColorMixing.Z) * vec3(0.6f) +  ColorMixing.Z * textureColor.\n        /// </summary>\n        public UniformVector3 ColorMixing { get; }\n\n        public Material(ShaderProgram shader)\n        {\n            Color = shader.GetUniform<UniformVector3>(\"material.color\");\n            Specular = shader.GetUniform<UniformVector3>(\"material.specular\");\n            Shininess = shader.GetUniform<UniformFloat>(\"material.shininess\");\n            Alpha = shader.GetUniform<UniformFloat>(\"material.alpha\");\n            ColorMixing = shader.GetUniform<UniformVector3>(\"material.mixing\");\n            NormalMultiply = shader.GetUniform<UniformFloat>(\"material.flipnormal\");\n        }\n\n        public void SetDefaultMaterial()\n        {\n            Color.Set(0.0f, 0.0f, 0.0f);\n            Specular.Set(0.1f, 0.1f, 0.1f);\n            Shininess.Set(128);\n            Alpha.Set(1.0f);\n            ColorMixing.Set(1, 0, 0);\n            NormalMultiply.Set(1);\n        }\n    }\n\n    public UniformMatrix4 View { private set; get; }\n    public UniformMatrix4 Projection { private set; get; }\n    public UniformVector3 ViewPosition { private set; get; }\n    public UniformVector3 SunDir { private set; get; }\n    public Material MaterialProperties { private set; get; }\n    public UniformMatrix4 Lights { private set; get; }\n    public UniformTexture DiffuseTexture { private set; get; }\n    public UniformMatrix4 Model { private set; get; }\n\n    public PhongShader() : base(vshader, fshader)\n    {\n        View = GetUniform<UniformMatrix4>(\"view\");\n        Projection = GetUniform<UniformMatrix4>(\"projection\");\n        ViewPosition = GetUniform<UniformVector3>(\"viewPos\");\n        Lights = GetUniform<UniformMatrix4>(\"lightmaps[0]\");\n        DiffuseTexture = GetUniform<UniformTexture>(\"diffuse\");\n        SunDir = GetUniform<UniformVector3>(\"sundir\");\n        Model = GetUniform<UniformMatrix4>(\"model\");\n\n        MaterialProperties = new Material(this);\n    }\n\n    private static readonly string vshader = @\"\n        #version 330 core\n\n        layout (location = 0) in mat4 amodel;\n        layout (location = 4) in vec3 acolor;\n        layout (location = 5) in vec3 aPos;\n        layout (location = 6) in vec3 aNorm;\n        layout (location = 7) in vec2 aTexCoords;\n        \n        uniform mat4 view;\n        uniform mat4 projection;\n        uniform mat4[3] lightmaps;\n        uniform mat4 model;\n\n        out vec3 vertexColor;\n        out vec3 normal;\n        out vec3 pos;\n        out vec2 TexCoords;\n\n        void main()\n        {\n            mat4 fmodel = amodel * model;\n            gl_Position = projection * view * fmodel * vec4(aPos, 1.0);\n            normal = normalize(mat3(transpose(inverse(fmodel))) * normalize(aNorm));\n            \n            pos = vec3(fmodel * vec4(aPos, 1.0));\n            TexCoords.y = 1-aTexCoords.y;\n            TexCoords.x = aTexCoords.x;\n\n            vertexColor = acolor;\n        }\n        \";\n\n    private static readonly string fshader = @\"\n        #version 420 core\n        struct Material {\n            vec3 color;\n            vec3 specular;\n            float shininess;\n            vec3 diffuse;\n            float alpha;\n            vec3 mixing;\n            float flipnormal;\n        };\n\n        uniform Material material;\n        uniform vec3 viewPos;\n        uniform mat4 view;\n        uniform vec3 sundir;\n\n        uniform mat4[3] lightmaps;\n\n        layout(binding=0)\n        uniform sampler2D shadowNear;\n        layout(binding=1)\n        uniform sampler2D shadowMid;\n        layout(binding=2)\n        uniform sampler2D shadowFar;\n\n        layout(binding=3)\n        uniform sampler2D diffuse;\n    \n        in vec3 normal;\n        in vec3 pos;\n        in vec2 TexCoords;\n        in vec3 ambient;\n        in vec3 vertexColor;\n\n        out vec4 FragColor;\n\n        float calcShadow(mat4 light, sampler2D shadowmap, vec3 nn)\n        {\n            // (*) Empirically found to look okay.\n            float bias = max(0.6 * (0.4 - dot(nn, sundir)), 0.0001);\n\n            vec4 fragPosLightSpace = light * vec4(pos, 1.0);\n            vec3 projCoords = fragPosLightSpace.xyz / fragPosLightSpace.w;\n            projCoords = projCoords * 0.5 + 0.5; \n\n            float currentDepth = projCoords.z;  \n\n            if(projCoords.z > 1.0) return 0.0;\n\n            float pcfDepth = texture(shadowmap, projCoords.xy).r; \n            if (currentDepth - bias > pcfDepth)\n            {\n                // (*) same here.\n                return abs(dot(nn, sundir));\n            }\n            return 0.0;\n        }\n\n        float ShadowCalculation(vec3 nn)\n        {\n            float shadow;\n\n            vec4 fragPosViewSpace = view * vec4(pos, 1.0);\n            float depthvalue = abs(fragPosViewSpace.z);\n\n            if(depthvalue < 20)\n            {\n                shadow = calcShadow(lightmaps[0], shadowNear, nn);\n            }\n            else if (depthvalue < 60)\n            {\n                shadow = calcShadow(lightmaps[1], shadowMid, nn);\n            }\n            else\n            {\n                shadow = calcShadow(lightmaps[2], shadowFar, nn);\n            }\n\n            return shadow;\n        }\n      \n        void main()\n        {\n            vec3 lightColor = vec3(1, 1, 1);\n            vec3 mix = material.mixing;\n            vec3 fnormal = normal * material.flipnormal;\n\n            vec3 ambient = mix.x * vertexColor + mix.y * material.color;\n            vec3 diffuse = (1.0f - mix.z) * vec3(0.6f, 0.6f, 0.6f) + mix.z * vec3(texture(diffuse, TexCoords));\n\n            vec3 lights[4];\n            float lightstrength[4];\n\n            lightstrength[0] = 1.0f;\n            lightstrength[1] = 0.2f;\n            lightstrength[2] = 0.2f;\n            lightstrength[3] = 0.2f;\n\n            lights[0] = sundir;  // main light from the sun\n            lights[1] = vec3(-1, 0, 1);\n            lights[2] = vec3(0, 0, -1);\n            lights[3] = vec3(-1, 0, -1);\n\n            vec3 diffusive = vec3(0, 0, 0);\n            vec3 specular = vec3(0, 0, 0);\n            vec3 lightDir;\n\n            for(int i=0; i<4; i++)\n            {\n                // diffuse\n                lightDir = normalize(lights[i]);\n                float diff = max(dot(fnormal, lightDir), 0.0);\n                diffusive += lightColor * lightstrength[i] * diff * diffuse;\n            }\n\n            // specular\n            lightDir = normalize(lights[0]);\n            vec3 viewDir = normalize(viewPos - pos);\n            vec3 halfwayDir = normalize(lightDir + viewDir);\n            float spec = pow(max(dot(viewDir, halfwayDir),0.0), material.shininess);\n            specular = lightColor * spec * material.specular;\n            \n            float shadow = ShadowCalculation(fnormal);\n            \n            vec3 result = (1.0f*ambient + 1.0f*(diffusive + 0.4f*specular) * (1- shadow));\n            FragColor = vec4(result, material.alpha);\n        }\n        \";\n}"
  },
  {
    "path": "src/JitterDemo/Renderer/CSM/Instances/Cloth.cs",
    "content": "using System.IO;\nusing JitterDemo.Renderer.OpenGL;\n\nnamespace JitterDemo.Renderer;\n\npublic class Cloth : CSMInstance\n{\n    private Vertex[] vertices;\n    private TriangleVertexIndex[] indices;\n\n    public Cloth()\n    {\n        // dummy data\n        vertices = new Vertex[4];\n        vertices[0] = new Vertex(new Vector3(-1, 0, -1), Vector3.UnitY, new Vector2(0, 0));\n        vertices[1] = new Vertex(new Vector3(-1, 0, +1), Vector3.UnitY, new Vector2(0, 1));\n        vertices[2] = new Vertex(new Vector3(+1, 0, -1), Vector3.UnitY, new Vector2(1, 0));\n        vertices[3] = new Vertex(new Vector3(+1, 0, +1), Vector3.UnitY, new Vector2(1, 1));\n\n        indices = new TriangleVertexIndex[2];\n        indices[0] = new TriangleVertexIndex(0, 1, 2);\n        indices[1] = new TriangleVertexIndex(2, 1, 3);\n    }\n\n    public Vertex[] Vertices => vertices;\n\n    public void SetIndices(TriangleVertexIndex[] indices)\n    {\n        IndexLen = indices.Length * 3;\n        Vao.ElementArrayBuffer!.SetData(indices);\n\n        uint largest = 0;\n        for (int i = 0; i < indices.Length; i++)\n        {\n            if (indices[i].T1 > largest) largest = indices[i].T1;\n            if (indices[i].T2 > largest) largest = indices[i].T2;\n            if (indices[i].T3 > largest) largest = indices[i].T3;\n        }\n\n        vertices = new Vertex[largest + 1];\n        this.indices = indices;\n    }\n\n    public void VerticesChanged()\n    {\n        for (int i = 0; i < vertices.Length; i++)\n        {\n            vertices[i].Normal = Vector3.Zero;\n        }\n\n        for (int i = 0; i < indices.Length; i++)\n        {\n            ref var v1 = ref vertices[indices[i].T1];\n            ref var v2 = ref vertices[indices[i].T2];\n            ref var v3 = ref vertices[indices[i].T3];\n\n            var p0 = v1.Position;\n            var p1 = v2.Position;\n            var p2 = v3.Position;\n            var n = Vector3.Cross(p1 - p0, p2 - p0);\n\n            v1.Normal += n;\n            v2.Normal += n;\n            v3.Normal += n;\n        }\n\n        ab.SetData(vertices);\n    }\n\n    public override void Load()\n    {\n        string filename = Path.Combine(\"assets\", \"texture_10.tga\");\n        Image.LoadImage(filename).FixedData((img, ptr) => { Texture.LoadImage(ptr, img.Width, img.Height); });\n\n        Texture.SetWrap(OpenGL.Texture.Wrap.Repeat);\n        Texture.SetAnisotropicFiltering(OpenGL.Texture.Anisotropy.Filter_8x);\n\n        base.Load();\n    }\n\n    public override (Vertex[] vertices, TriangleVertexIndex[] indices) ProvideVertices()\n    {\n        return (vertices, indices);\n    }\n\n    public override void ShadowPass(ShadowShader shader)\n    {\n        GLDevice.Disable(Capability.CullFace);\n        base.ShadowPass(shader);\n        GLDevice.Enable(Capability.CullFace);\n    }\n\n    public override void LightPass(PhongShader shader)\n    {\n        shader.MaterialProperties.SetDefaultMaterial();\n        shader.MaterialProperties.ColorMixing.Set(0.1f, 0.0f, 0.9f);\n        shader.MaterialProperties.FlipNormal = true;\n        GLDevice.SetCullFaceMode(CullMode.Front);\n        base.LightPass(shader);\n        shader.MaterialProperties.FlipNormal = false;\n        GLDevice.SetCullFaceMode(CullMode.Back);\n        base.LightPass(shader);\n    }\n}"
  },
  {
    "path": "src/JitterDemo/Renderer/CSM/Instances/Cone.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing JitterDemo.Renderer.OpenGL;\n\nnamespace JitterDemo.Renderer;\n\npublic class Cone : CSMInstance\n{\n    public const int Tesselation = 20;\n\n    public override (Vertex[] vertices, TriangleVertexIndex[] indices) ProvideVertices()\n    {\n        static Vector3 GetSpherical(double alpha, double beta)\n        {\n            return new Vector3((float)(Math.Cos(alpha) * Math.Sin(beta)),\n                (float)Math.Sin(beta),\n                (float)(Math.Sin(alpha) * Math.Sin(beta)));\n        }\n\n        List<Vertex> vertices = new();\n        List<TriangleVertexIndex> indices = new();\n\n        float p1o4 = 1.0f / 4.0f;\n        float p2o4 = 3.0f / 4.0f;\n\n        vertices.Add(new Vertex(-p1o4 * Vector3.UnitY, -Vector3.UnitY));\n\n        for (int i = 0; i < Tesselation; i++)\n        {\n            double alpha1 = 2.0d * Math.PI / Tesselation * i;\n            double alpha2 = alpha1 + Math.PI / Tesselation;\n            float beta = (float)(2.0d / Math.Sqrt(5.0d));\n\n            Vector3 v1 = new()\n            {\n                X = 0.5f * (float)Math.Cos(alpha1),\n                Z = 0.5f * (float)Math.Sin(alpha1)\n            };\n\n            Vector3 v2 = GetSpherical(alpha1, beta);\n            Vector3 v3 = GetSpherical(alpha2, beta);\n\n            vertices.Add(new Vertex(v1 - p1o4 * Vector3.UnitY, -Vector3.UnitY));\n            vertices.Add(new Vertex(v1 - p1o4 * Vector3.UnitY, v2));\n            vertices.Add(new Vertex(p2o4 * Vector3.UnitY, v3));\n        }\n\n        int t3 = 3 * Tesselation;\n\n        for (int i = 0; i < Tesselation; i++)\n        {\n            indices.Add(new TriangleVertexIndex(0, 1 + 3 * i, 1 + (3 * i + 3) % t3));\n            indices.Add(new TriangleVertexIndex(2 + 3 * i, 3 + 3 * i, 2 + (3 * i + 3) % t3));\n        }\n\n        return (vertices.ToArray(), indices.ToArray());\n    }\n\n    public override void LightPass(PhongShader shader)\n    {\n        shader.MaterialProperties.SetDefaultMaterial();\n\n        base.LightPass(shader);\n    }\n}"
  },
  {
    "path": "src/JitterDemo/Renderer/CSM/Instances/Cube.cs",
    "content": "using JitterDemo.Renderer.OpenGL;\n\nnamespace JitterDemo.Renderer;\n\npublic class Cube : CSMInstance\n{\n    public override (Vertex[] vertices, TriangleVertexIndex[] indices) ProvideVertices()\n    {\n        // a 1x1x1 unit cube centered around the origin.\n        Vertex[] vertices = new Vertex[24]; // 6 faces times 4 vertices\n        TriangleVertexIndex[] indices = new TriangleVertexIndex[12]; // 2 triangles per face\n\n        Vector3[] normals =\n        {\n            new(0, 0, 1),\n            new(0, 0, -1),\n            new(1, 0, 0),\n            new(-1, 0, 0),\n            new(0, 1, 0),\n            new(0, -1, 0)\n        };\n\n        for (int i = 0; i < 6; i++)\n        {\n            Vector3 n = normals[i];\n            Vector3 s1 = new(n.Y, n.Z, n.X);\n            Vector3 s2 = Vector3.Cross(n, s1);\n\n            vertices[4 * i + 0] = new Vertex((n - s1 - s2) * 0.5f, n);\n            vertices[4 * i + 1] = new Vertex((n - s1 + s2) * 0.5f, n);\n            vertices[4 * i + 2] = new Vertex((n + s1 + s2) * 0.5f, n);\n            vertices[4 * i + 3] = new Vertex((n + s1 - s2) * 0.5f, n);\n\n            indices[2 * i + 0] = new TriangleVertexIndex(4 * i + 1, 4 * i + 0, 4 * i + 2);\n            indices[2 * i + 1] = new TriangleVertexIndex(4 * i + 2, 4 * i + 0, 4 * i + 3);\n        }\n\n        return (vertices, indices);\n    }\n}"
  },
  {
    "path": "src/JitterDemo/Renderer/CSM/Instances/Cylinder.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing JitterDemo.Renderer.OpenGL;\n\nnamespace JitterDemo.Renderer;\n\npublic class Cylinder : CSMInstance\n{\n    public const int Tesselation = 20;\n\n    public override (Vertex[] vertices, TriangleVertexIndex[] indices) ProvideVertices()\n    {\n        List<Vertex> vertices = new();\n        List<TriangleVertexIndex> indices = new();\n\n        vertices.Add(new Vertex(-0.5f * Vector3.UnitY, -Vector3.UnitY));\n        vertices.Add(new Vertex(+0.5f * Vector3.UnitY, +Vector3.UnitY));\n\n        for (int i = 0; i < Tesselation; i++)\n        {\n            double alpha = 2.0d * Math.PI / Tesselation * i;\n\n            Vector3 vertex = new()\n            {\n                X = (float)Math.Cos(alpha),\n                Z = (float)Math.Sin(alpha)\n            };\n\n            vertices.Add(new Vertex(vertex - 0.5f * Vector3.UnitY, -Vector3.UnitY));\n            vertices.Add(new Vertex(vertex + 0.5f * Vector3.UnitY, +Vector3.UnitY));\n\n            vertices.Add(new Vertex(vertex - 0.5f * Vector3.UnitY, vertex));\n            vertices.Add(new Vertex(vertex + 0.5f * Vector3.UnitY, vertex));\n        }\n\n        int t4 = 4 * Tesselation;\n\n        for (int i = 0; i < Tesselation; i++)\n        {\n            indices.Add(new TriangleVertexIndex(0, 2 + 4 * i, 2 + (4 * i + 4) % t4));\n            indices.Add(new TriangleVertexIndex(3 + 4 * i, 1, 3 + (4 * i + 4) % t4));\n            indices.Add(new TriangleVertexIndex(4 + 4 * i, 5 + 4 * i, 4 + (4 * i + 4) % t4));\n            indices.Add(new TriangleVertexIndex(5 + 4 * i, 5 + (4 * i + 4) % t4, 4 + (4 * i + 4) % t4));\n        }\n\n        return (vertices.ToArray(), indices.ToArray());\n    }\n\n    public override void LightPass(PhongShader shader)\n    {\n        shader.MaterialProperties.SetDefaultMaterial();\n\n        base.LightPass(shader);\n    }\n}"
  },
  {
    "path": "src/JitterDemo/Renderer/CSM/Instances/DebugInstance.cs",
    "content": "namespace JitterDemo.Renderer;\n\npublic class DebugInstance : CSMInstance\n{\n    private readonly Vertex[] vertices;\n    private readonly TriangleVertexIndex[] indices;\n\n    public DebugInstance(Vertex[] vertices, TriangleVertexIndex[] indices)\n    {\n        this.vertices = vertices;\n        this.indices = indices;\n    }\n\n    public override (Vertex[] vertices, TriangleVertexIndex[] indices) ProvideVertices()\n    {\n        return (vertices, indices);\n    }\n}"
  },
  {
    "path": "src/JitterDemo/Renderer/CSM/Instances/Floor.cs",
    "content": "using System.IO;\nusing JitterDemo.Renderer.OpenGL;\n\nnamespace JitterDemo.Renderer;\n\npublic class JitterFloor : CSMInstance\n{\n    public override (Vertex[] vertices, TriangleVertexIndex[] indices) ProvideVertices()\n    {\n        const int size = 100;\n\n        Vertex[] vertices = new Vertex[4];\n        vertices[0] = new Vertex(new Vector3(-size, 0, -size), Vector3.UnitY, new Vector2(0, 0));\n        vertices[1] = new Vertex(new Vector3(-size, 0, +size), Vector3.UnitY, new Vector2(0, size));\n        vertices[2] = new Vertex(new Vector3(+size, 0, -size), Vector3.UnitY, new Vector2(size, 0));\n        vertices[3] = new Vertex(new Vector3(+size, 0, +size), Vector3.UnitY, new Vector2(size, size));\n\n        TriangleVertexIndex[] indices = new TriangleVertexIndex[2];\n        indices[0] = new TriangleVertexIndex(0, 1, 2);\n        indices[1] = new TriangleVertexIndex(2, 1, 3);\n\n        return (vertices, indices);\n    }\n\n    public override void LightPass(PhongShader shader)\n    {\n        shader.MaterialProperties.SetDefaultMaterial();\n\n        shader.MaterialProperties.Shininess.Set(10.0f);\n\n        shader.MaterialProperties.ColorMixing.Set(0.0f, 0, 1f);\n\n        base.LightPass(shader);\n    }\n\n    public override void Load()\n    {\n        string filename = Path.Combine(\"assets\", \"unit.tga\");\n\n        Image.LoadImage(filename).FixedData((img, ptr) => { Texture.LoadImage(ptr, img.Width, img.Height); });\n\n        Texture.SetWrap(OpenGL.Texture.Wrap.Repeat);\n        Texture.SetAnisotropicFiltering(OpenGL.Texture.Anisotropy.Filter_8x);\n\n        base.Load();\n    }\n}"
  },
  {
    "path": "src/JitterDemo/Renderer/CSM/Instances/HalfSphere.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing JitterDemo.Renderer.OpenGL;\n\nnamespace JitterDemo.Renderer;\n\npublic class HalfSphere : CSMInstance\n{\n    public const int Tesselation = 20;\n\n    public override (Vertex[] vertices, TriangleVertexIndex[] indices) ProvideVertices()\n    {\n        List<Vertex> vertices = new();\n        List<TriangleVertexIndex> indices = new();\n\n        for (int e = 0; e < Tesselation / 2; e++)\n        {\n            for (int i = 0; i < Tesselation; i++)\n            {\n                double alpha = 2.0d * Math.PI / Tesselation * i;\n                double beta = Math.PI / Tesselation * e;\n\n                Vector3 vertex;\n                vertex.X = (float)(Math.Cos(alpha) * Math.Cos(beta));\n                vertex.Y = (float)Math.Sin(beta);\n                vertex.Z = (float)(Math.Sin(alpha) * Math.Cos(beta));\n\n                vertices.Add(new Vertex(vertex * 0.5f, vertex));\n            }\n        }\n\n        vertices.Add(new Vertex(Vector3.UnitY * 0.5f, Vector3.UnitY));\n\n        int t1 = Tesselation;\n        int td2 = Tesselation / 2;\n\n        for (int e = 0; e < td2 - 1; e++)\n        {\n            for (int i = 0; i < Tesselation; i++)\n            {\n                indices.Add(new TriangleVertexIndex(e * t1 + (i + 1) % t1,e * t1 + i, (e + 1) * t1 + i));\n                indices.Add(new TriangleVertexIndex((e + 1) * t1 + (i + 1) % t1, e * t1 + (i + 1) % t1, (e + 1) * t1 + i));\n            }\n        }\n\n        for (int i = 0; i < Tesselation; i++)\n        {\n            int e = td2 - 1;\n            indices.Add(new TriangleVertexIndex(e * t1 + (i + 1) % t1, e * t1 + i, td2 * t1));\n        }\n\n        return (vertices.ToArray(), indices.ToArray());\n    }\n\n    public override void LightPass(PhongShader shader)\n    {\n        shader.MaterialProperties.SetDefaultMaterial();\n\n        base.LightPass(shader);\n    }\n}"
  },
  {
    "path": "src/JitterDemo/Renderer/CSM/Instances/MultiMesh.cs",
    "content": "using JitterDemo.Renderer.OpenGL;\n\nnamespace JitterDemo.Renderer;\n\npublic class MultiMesh : CSMInstance\n{\n    public readonly Mesh mesh;\n\n    public MultiMesh(string filename, float scale = 1.0f)\n    {\n        mesh = Mesh.LoadMesh(filename, false);\n        mesh.Transform(MatrixHelper.CreateScale(scale));\n    }\n\n    public override void LightPass(PhongShader shader)\n    {\n        if (mesh.Groups.Length == 0) return;\n\n        Texture?.Bind(3);\n\n        shader.MaterialProperties.SetDefaultMaterial();\n\n        Vao.Bind();\n\n        int sof = sizeof(float);\n\n        for (int i = 0; i < mesh.Groups.Length; i++)\n        {\n            shader.MaterialProperties.Color.Set(ColorGenerator.GetColor(i * (i << 6)));\n            shader.MaterialProperties.ColorMixing.Set(0, 1, 0);\n\n\n            GLDevice.DrawElementsInstanced(DrawMode.Triangles,\n                3 * (mesh.Groups[i].ToExclusive - mesh.Groups[i].FromInclusive), IndexType.UnsignedInt,\n                mesh.Groups[i].FromInclusive * sof * 3, Count);\n        }\n\n        shader.MaterialProperties.SetDefaultMaterial();\n    }\n\n    public override (Vertex[] vertices, TriangleVertexIndex[] indices) ProvideVertices()\n    {\n        return (mesh.Vertices, mesh.Indices);\n    }\n}"
  },
  {
    "path": "src/JitterDemo/Renderer/CSM/Instances/Sphere.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing JitterDemo.Renderer.OpenGL;\n\nnamespace JitterDemo.Renderer;\n\npublic class Sphere : CSMInstance\n{\n    public const int Tesselation = 20;\n\n    public override (Vertex[] vertices, TriangleVertexIndex[] indices) ProvideVertices()\n    {\n        List<Vertex> vertices = new();\n        List<TriangleVertexIndex> indices = new();\n\n        for (int e = 0; e < Tesselation; e++)\n        {\n            for (int i = 0; i < Tesselation; i++)\n            {\n                double alpha = 2.0d * Math.PI / Tesselation * i;\n                double beta = Math.PI / (Tesselation + 1) * (e + 1);\n\n                Vector3 vertex;\n                vertex.X = (float)(Math.Cos(alpha) * Math.Sin(beta));\n                vertex.Y = (float)Math.Cos(beta);\n                vertex.Z = (float)(Math.Sin(alpha) * Math.Sin(beta));\n\n                vertices.Add(new Vertex(vertex * 0.5f, vertex));\n            }\n        }\n\n        vertices.Add(new Vertex(Vector3.UnitY * -0.5f, -Vector3.UnitY));\n        vertices.Add(new Vertex(Vector3.UnitY * +0.5f, Vector3.UnitY));\n\n        int t1 = Tesselation;\n\n        for (int e = 0; e < Tesselation - 1; e++)\n        {\n            for (int i = 0; i < Tesselation; i++)\n            {\n                indices.Add(new TriangleVertexIndex(e * t1 + i, e * t1 + (i + 1) % t1, (e + 1) * t1 + i));\n                indices.Add(new TriangleVertexIndex(e * t1 + (i + 1) % t1, (e + 1) * t1 + (i + 1) % t1,\n                    (e + 1) * t1 + i));\n            }\n        }\n\n        for (int i = 0; i < Tesselation; i++)\n        {\n            int e = t1 - 1;\n            indices.Add(new TriangleVertexIndex(e * t1 + i, e * t1 + (i + 1) % t1, t1 * t1 + 0));\n            e = 0;\n            indices.Add(new TriangleVertexIndex(e * t1 + (i + 1) % t1, e * t1 + i, t1 * t1 + 1));\n        }\n\n        return (vertices.ToArray(), indices.ToArray());\n    }\n\n    public override void LightPass(PhongShader shader)\n    {\n        shader.MaterialProperties.SetDefaultMaterial();\n\n        base.LightPass(shader);\n    }\n}"
  },
  {
    "path": "src/JitterDemo/Renderer/CSM/Instances/TestCube.cs",
    "content": "using JitterDemo.Renderer.OpenGL;\n\nnamespace JitterDemo.Renderer;\n\npublic class TestCube : CSMInstance\n{\n    private float timea;\n\n    public override void LightPass(PhongShader shader)\n    {\n        if (Count == 0) return;\n\n        Texture?.Bind(3);\n        Vao.Bind();\n\n        timea = (float)RenderWindow.Instance.Time;\n\n        shader.Model.Set(MatrixHelper.CreateRotationX(timea));\n        GLDevice.DrawElementsInstanced(DrawMode.Triangles, 36, IndexType.UnsignedInt, 0, Count);\n        shader.Model.Set(MatrixHelper.CreateRotationY(timea));\n        GLDevice.DrawElementsInstanced(DrawMode.Triangles, 36, IndexType.UnsignedInt, 36, Count);\n        shader.Model.Set(Matrix4.Identity);\n    }\n\n    public override void ShadowPass(ShadowShader shader)\n    {\n        if (Count == 0) return;\n\n        Vao.Bind();\n\n        shader.Model.Set(MatrixHelper.CreateRotationX(timea));\n        GLDevice.DrawElementsInstanced(DrawMode.Triangles, 36, IndexType.UnsignedInt, 0, Count);\n        shader.Model.Set(MatrixHelper.CreateRotationY(timea));\n        GLDevice.DrawElementsInstanced(DrawMode.Triangles, 36, IndexType.UnsignedInt, 36, Count);\n        shader.Model.Set(Matrix4.Identity);\n    }\n\n    public override (Vertex[] vertices, TriangleVertexIndex[] indices) ProvideVertices()\n    {\n        // a 1x1x1 unit cube centered around the origin.\n        Vertex[] vertices = new Vertex[48]; // 6 faces times 4 vertices\n        TriangleVertexIndex[] indices = new TriangleVertexIndex[24]; // 2 triangles per face\n\n        Vector3[] normals =\n        {\n            new(0, 0, 1),\n            new(0, 0, -1),\n            new(1, 0, 0),\n            new(-1, 0, 0),\n            new(0, 1, 0),\n            new(0, -1, 0)\n        };\n\n        for (int i = 0; i < 6; i++)\n        {\n            Vector3 n = normals[i];\n            Vector3 s1 = new(n.Y, n.Z, n.X);\n            Vector3 s2 = Vector3.Cross(n, s1);\n\n            vertices[4 * i + 0] = new Vertex((n - s1 - s2) * 0.5f, n);\n            vertices[4 * i + 1] = new Vertex((n - s1 + s2) * 0.5f, n);\n            vertices[4 * i + 2] = new Vertex((n + s1 + s2) * 0.5f, n);\n            vertices[4 * i + 3] = new Vertex((n + s1 - s2) * 0.5f, n);\n\n            indices[2 * i + 0] = new TriangleVertexIndex(4 * i + 1, 4 * i + 0, 4 * i + 2);\n            indices[2 * i + 1] = new TriangleVertexIndex(4 * i + 2, 4 * i + 0, 4 * i + 3);\n        }\n\n        for (int i = 0; i < 6; i++)\n        {\n            Vector3 n = normals[i];\n            Vector3 s1 = new(n.Y, n.Z, n.X);\n            Vector3 s2 = Vector3.Cross(n, s1);\n\n            vertices[24 + 4 * i + 0] = new Vertex((n - s1 - s2) * 0.5f, n);\n            vertices[24 + 4 * i + 1] = new Vertex((n - s1 + s2) * 0.5f, n);\n            vertices[24 + 4 * i + 2] = new Vertex((n + s1 + s2) * 0.5f, n);\n            vertices[24 + 4 * i + 3] = new Vertex((n + s1 - s2) * 0.5f, n);\n\n            indices[12 + 2 * i + 0] = new TriangleVertexIndex(24 + 4 * i + 1, 24 + 4 * i + 0, 24 + 4 * i + 2);\n            indices[12 + 2 * i + 1] = new TriangleVertexIndex(24 + 4 * i + 2, 24 + 4 * i + 0, 24 + 4 * i + 3);\n        }\n\n        return (vertices, indices);\n    }\n}"
  },
  {
    "path": "src/JitterDemo/Renderer/CSM/Instances/TriangleMesh.cs",
    "content": "using System.IO;\nusing JitterDemo.Renderer.OpenGL;\n\nnamespace JitterDemo.Renderer;\n\npublic class TriangleMesh : CSMInstance\n{\n    public readonly Mesh Mesh;\n\n    public TriangleMesh(string objFile, float scale = 1.0f)\n    {\n        string filename = Path.Combine(\"assets\", objFile);\n        Mesh = Mesh.LoadMesh(filename);\n        Mesh.Transform(MatrixHelper.CreateScale(scale));\n    }\n\n    public override (Vertex[] vertices, TriangleVertexIndex[] indices) ProvideVertices()\n    {\n        return (Mesh.Vertices, Mesh.Indices);\n    }\n\n}"
  },
  {
    "path": "src/JitterDemo/Renderer/CSM/Instances/Tube.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing JitterDemo.Renderer.OpenGL;\n\nnamespace JitterDemo.Renderer;\n\npublic class Tube : CSMInstance\n{\n    public const int Tesselation = 30;\n\n    public override (Vertex[] vertices, TriangleVertexIndex[] indices) ProvideVertices()\n    {\n        List<Vertex> vertices = new();\n        List<TriangleVertexIndex> indices = new();\n\n        vertices.Add(new Vertex(-0.5f * Vector3.UnitY, -Vector3.UnitY));\n        vertices.Add(new Vertex(+0.5f * Vector3.UnitY, +Vector3.UnitY));\n\n        for (int i = 0; i < Tesselation; i++)\n        {\n            double alpha = 2.0d * Math.PI / Tesselation * i;\n\n            Vector3 vertex = new()\n            {\n                X = (float)Math.Cos(alpha),\n                Z = (float)Math.Sin(alpha)\n            };\n\n            vertices.Add(new Vertex(0.5f * (vertex - Vector3.UnitY), vertex));\n            vertices.Add(new Vertex(0.5f * (vertex + Vector3.UnitY), vertex));\n        }\n\n        int t2 = 2 * Tesselation;\n\n        for (int i = 0; i < Tesselation; i++)\n        {\n            indices.Add(new TriangleVertexIndex(2 + 2 * i, 3 + 2 * i, 2 + (2 * i + 2) % t2));\n            indices.Add(new TriangleVertexIndex(3 + 2 * i, 3 + (2 * i + 2) % t2, 2 + (2 * i + 2) % t2));\n        }\n\n        return (vertices.ToArray(), indices.ToArray());\n    }\n\n    public override void LightPass(PhongShader shader)\n    {\n        shader.MaterialProperties.SetDefaultMaterial();\n\n        base.LightPass(shader);\n    }\n}"
  },
  {
    "path": "src/JitterDemo/Renderer/Camera.cs",
    "content": "using System;\nusing JitterDemo.Renderer.OpenGL;\n\nnamespace JitterDemo.Renderer;\n\npublic class Camera\n{\n    public bool IgnoreMouseInput { get; set; } = false;\n    public bool IgnoreKeyboardInput { get; set; } = false;\n    public Matrix4 ViewMatrix { get; protected set; } = Matrix4.Identity;\n    public Matrix4 ProjectionMatrix { get; protected set; } = Matrix4.Identity;\n\n    public Vector3 Position { get; set; }\n    public Vector3 Direction { get; protected set; }\n\n    public float FieldOfView { get; set; } = MathF.PI / 4.0f;\n\n    public double Theta { get; set; } = Math.PI / 2.0d;\n    public double Phi { get; set; }\n\n    public float NearPlane { get; protected set; } = 0.1f;\n    public float FarPlane { get; protected set; } = 400.0f;\n\n    public virtual void Update()\n    {\n    }\n}\n\npublic class FreeCamera : Camera\n{\n    private const float MoveSpeed = 0.4f;\n    private const float MouseSensitivity = 0.006f;\n\n    public override void Update()\n    {\n        Keyboard kb = Keyboard.Instance;\n        Mouse ms = Mouse.Instance;\n\n        if (!IgnoreMouseInput && ms.IsButtonDown(Mouse.Button.Right))\n        {\n            Phi -= ms.DeltaPosition.X * MouseSensitivity;\n            Theta += ms.DeltaPosition.Y * MouseSensitivity;\n        }\n\n        if (Theta > Math.PI - 0.1d) Theta = Math.PI - 0.1d;\n        if (Theta < 0.1d) Theta = 0.1d;\n\n        Direction = new Vector3\n        {\n            Z = -(float)(Math.Sin(Theta) * Math.Cos(Phi)),\n            X = -(float)(Math.Sin(Theta) * Math.Sin(Phi)),\n            Y = (float)Math.Cos(Theta)\n        };\n\n        Vector3 cright = Vector3.Normalize(Vector3.UnitY % Direction);\n        Vector3 mv = Vector3.Zero;\n\n        if (!IgnoreKeyboardInput && !kb.IsKeyDown(Keyboard.Key.LeftControl))\n        {\n            if (kb.IsKeyDown(Keyboard.Key.W)) mv += Direction;\n            if (kb.IsKeyDown(Keyboard.Key.S)) mv -= Direction;\n            if (kb.IsKeyDown(Keyboard.Key.A)) mv += cright;\n            if (kb.IsKeyDown(Keyboard.Key.D)) mv -= cright;\n        }\n\n        if (mv.LengthSquared() > 0.1f) mv = Vector3.Normalize(mv);\n        Position += MoveSpeed * mv;\n\n        float width = RenderWindow.Instance.Width;\n        float height = RenderWindow.Instance.Height;\n\n        ViewMatrix = MatrixHelper.CreateLookAt(Position, Position + Direction, Vector3.UnitY);\n        ProjectionMatrix =\n            MatrixHelper.CreatePerspectiveFieldOfView(FieldOfView, width / height, NearPlane, FarPlane);\n    }\n}"
  },
  {
    "path": "src/JitterDemo/Renderer/DearImGui/ImGui.cs",
    "content": "using System;\nusing System.Runtime.InteropServices;\nusing System.Text;\nusing JitterDemo.Renderer.OpenGL;\n\nnamespace JitterDemo.Renderer.DearImGui;\n\npublic static unsafe class ImGui\n{\n    // Allocate three temporary buffers on the heap. This is slower than on the stack but saves us\n    // from calling stackalloc in every method. - \"1K is more memory than anyone will ever need\"\n    private static readonly byte** strPtr;\n    private const int strPtrSize = 1024;\n\n    static ImGui()\n    {\n        strPtr = (byte**)NativeMemory.Alloc((nuint)(sizeof(IntPtr) * 3));\n\n        for (int i = 0; i < 3; i++)\n        {\n            strPtr[i] = (byte*)NativeMemory.Alloc(strPtrSize);\n        }\n    }\n\n    private static void PushStr(in string str, int index)\n    {\n        fixed (char* c = str)\n        {\n            int bc0 = Encoding.UTF8.GetByteCount(c, str.Length);\n            if (bc0 + 1 > strPtrSize) throw new ArgumentException(\"UTF8 endcoded string too long.\");\n            Encoding.UTF8.GetBytes(c, str.Length, strPtr[index], bc0);\n            strPtr[index][bc0] = 0;\n        }\n    }\n\n    private static string PopStr(int index)\n    {\n        int len = 0;\n        byte* ptr = strPtr[index];\n\n        while (*ptr != 0)\n        {\n            if (++len == strPtrSize)\n            {\n                return string.Empty;\n            }\n\n            ptr += 1;\n        }\n\n        return Encoding.UTF8.GetString(strPtr[index], len);\n    }\n\n    public static bool BeginTable(string str_id, int column, ImGuiTableFlags flags, Vector2 outerSize, float innerWidth)\n    {\n        PushStr(str_id, 0);\n        byte result = ImGuiNative.igBeginTable(strPtr[0], column, flags, outerSize, innerWidth);\n        return Convert.ToBoolean(result);\n    }\n\n    public static bool Slider(string label, ref int value, int min, int max, string format, ImGuiSliderFlags flags)\n    {\n        PushStr(label, 0);\n        PushStr(format, 1);\n\n        fixed (int* ptr = &value)\n        {\n            byte result = ImGuiNative.igSliderInt(strPtr[0], ptr, min, max, strPtr[1], flags);\n            return Convert.ToBoolean(result);\n        }\n    }\n\n    public static void Begin(string name, ref bool open, ImGuiWindowFlags flags)\n    {\n        PushStr(name, 0);\n        byte cb = 0b0;\n        if (open) cb = 0b1;\n        ImGuiNative.igBegin(strPtr[0], &cb, flags);\n        open = cb == 0b1;\n    }\n\n    public static void DisableIni()\n    {\n        var io = ImGuiNative.igGetIO();\n        io->IniFilename = (byte*)0;\n    }\n\n    public static void TableNextColumn()\n    {\n        ImGuiNative.igTableNextColumn();\n    }\n\n    public static void TableNextRow()\n    {\n        ImGuiNative.igTableNextRow(ImGuiTableRowFlags.None, 0);\n    }\n\n    public static void TableSetColumnIndex(int index)\n    {\n        ImGuiNative.igTableSetColumnIndex(index);\n    }\n\n    public static void EndTable()\n    {\n        ImGuiNative.igEndTable();\n    }\n\n    public static void NewFrame()\n    {\n        ImGuiNative.igNewFrame();\n    }\n\n    public static void SetNextWindowsPos(in Vector2 pos, ImGuiCond cond, in Vector2 pivot)\n    {\n        ImGuiNative.igSetNextWindowPos(pos, cond, pivot);\n    }\n\n    public static void SetNextWindowBgAlpha(float alpha)\n    {\n        ImGuiNative.igSetNextWindowBgAlpha(alpha);\n    }\n\n    public static void SetStyle(float windowBorderSize = 1.0f, float frameBordersize = 1.0f,\n        float indentSpacing = 1.0f, float windowRounding = 6.0f, float popupRounding = 6.0f)\n    {\n        ImGuiStyle* style = ImGuiNative.igGetStyle();\n        style->WindowBorderSize = windowBorderSize;\n        style->FrameBorderSize = frameBordersize;\n        style->IndentSpacing = indentSpacing;\n        style->WindowRounding = windowRounding;\n        style->PopupRounding = popupRounding;\n    }\n\n    public static void Separator()\n    {\n        ImGuiNative.igSeparator();\n    }\n\n    public static void End()\n    {\n        ImGuiNative.igEnd();\n    }\n\n    public static void EndFrame()\n    {\n        ImGuiNative.igEndFrame();\n    }\n\n    public static void Render()\n    {\n        ImGuiNative.igRender();\n    }\n\n    public static void SameLine(float offsetFromStartx, float spacing)\n    {\n        ImGuiNative.igSameLine(offsetFromStartx, spacing);\n    }\n\n    public static void Checkbox(string label, ref bool value)\n    {\n        PushStr(label, 0);\n        byte cb = 0b0;\n        if (value) cb = 0b1;\n        ImGuiNative.igCheckbox(strPtr[0], &cb);\n        value = cb == 0b1;\n    }\n\n    public static float GetWindowWidth()\n    {\n        return ImGuiNative.igGetWindowWidth();\n    }\n\n    public static bool Button(string label, Vector2 size)\n    {\n        PushStr(label, 0);\n        var result = ImGuiNative.igButton(strPtr[0], size);\n        return Convert.ToBoolean(result);\n    }\n\n    public static void InputText(string label, ref string text, ImGuiInputTextFlags flags)\n    {\n        PushStr(label, 0);\n        PushStr(text, 1);\n        ImGuiNative.igInputText(strPtr[0], strPtr[1], strPtrSize, flags, null, (void*)0);\n        text = PopStr(1);\n    }\n\n    public static void PushStyleVar(ImGuiStyleVar var, in Vector2 vec2)\n    {\n        ImGuiNative.igPushStyleVar_Vec2(var, vec2);\n    }\n\n    public static void SetupColumn(string label, ImGuiTableColumnFlags flags, float initWidthOrHeight, uint userId)\n    {\n        PushStr(label, 0);\n        ImGuiNative.igTableSetupColumn(strPtr[0], flags, initWidthOrHeight, userId);\n    }\n\n    public static bool BeginMenu(string label, bool enabled)\n    {\n        PushStr(label, 0);\n        return Convert.ToBoolean(ImGuiNative.igBeginMenu(strPtr[0], Convert.ToByte(enabled)));\n    }\n\n    public static bool MenuItem(string label, string shortcut, bool selected, bool enabled)\n    {\n        PushStr(label, 0);\n        PushStr(shortcut, 1);\n        return Convert.ToBoolean(\n            ImGuiNative.igMenuItem_Bool(strPtr[0], strPtr[1],\n                Convert.ToByte(selected), Convert.ToByte(enabled)));\n    }\n\n    public static void EndMenu()\n    {\n        ImGuiNative.igEndMenu();\n    }\n\n    public static void Text(string text)\n    {\n        PushStr(text, 0);\n        ImGuiNative.igText(strPtr[0]);\n    }\n\n    public static void Text(string text, Vector4 color)\n    {\n        PushStr(text, 0);\n        ImGuiNative.igTextColored(color, strPtr[0]);\n    }\n\n    public static bool TreeNode(string label)\n    {\n        PushStr(label, 0);\n        return Convert.ToBoolean(ImGuiNative.igTreeNode_Str(strPtr[0]));\n    }\n\n    public static void SetNextItemWidth(float width)\n    {\n        ImGuiNative.igSetNextItemWidth(width);\n    }\n\n    public static void TreePop()\n    {\n        ImGuiNative.igTreePop();\n    }\n\n    public static void NextTreeNodeOpen(bool open)\n    {\n        ImGuiNative.igSetNextItemOpen(Convert.ToByte(open), ImGuiCond.FirstUseEver);\n    }\n\n    public static void NextItemOpen(bool open)\n    {\n        ImGuiNative.igSetNextItemOpen(Convert.ToByte(open), ImGuiCond.FirstUseEver);\n    }\n\n    public static void PlotHistogram(float[] array, string label, string overlayText, float min, float max, float sizeX,\n        float sizeY)\n    {\n        PushStr(label, 0);\n        PushStr(overlayText, 1);\n\n        fixed (float* ptr = array)\n        {\n            ImGuiNative.igPlotHistogram_FloatPtr(strPtr[0], ptr, array.Length, 0, strPtr[1], min, max,\n                new Vector2(sizeX, sizeY), sizeof(float));\n        }\n    }\n\n    public static double GetTime()\n    {\n        return ImGuiNative.igGetTime();\n    }\n\n    public static void PushStyleColor(ImGuiCol idx, Vector4 color)\n    {\n        ImGuiNative.igPushStyleColor_Vec4(idx, color);\n    }\n\n    public static void PopStyleColor(int count = 1)\n    {\n        ImGuiNative.igPopStyleColor(count);\n    }\n\n    public static bool IsItemHovered(ImGuiHoveredFlags flags = ImGuiHoveredFlags.None)\n    {\n        return Convert.ToBoolean(ImGuiNative.igIsItemHovered(flags));\n    }\n\n    public static void SetItemTooltip(string text)\n    {\n        PushStr(text, 0);\n        ImGuiNative.igSetItemTooltip(strPtr[0]);\n    }\n\n    public static bool BeginItemTooltip()\n    {\n        return Convert.ToBoolean(ImGuiNative.igBeginItemTooltip());\n    }\n\n    public static void EndTooltip()\n    {\n        ImGuiNative.igEndTooltip();\n    }\n\n    public static void ShowDemo()\n    {\n        byte popen = 1;\n        ImGuiNative.igShowDemoWindow(&popen);\n    }\n}"
  },
  {
    "path": "src/JitterDemo/Renderer/DearImGui/ImGuiNative.cs",
    "content": "using System;\nusing System.Diagnostics.CodeAnalysis;\nusing System.Runtime.InteropServices;\nusing JitterDemo.Renderer.OpenGL;\n\nnamespace JitterDemo.Renderer.DearImGui;\n\n[SuppressMessage(\"Usage\", \"CA1401: P/Invokes should not be visible\")]\n[SuppressMessage(\"Usage\", \"CA1069: Enums should not have duplicate values\")]\n[SuppressMessage(\"Usage\",\n    \"SYSLIB1054: Use LibraryImportAttribute instead of DllImportAttribute to generate p/invoke marshalling code at compile time.\")]\npublic static unsafe class ImGuiNative\n{\n    public const string LIBCIMGUI = \"cimgui\";\n\n    static ImGuiNative()\n    {\n        ImportResolver.Load();\n    }\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern ImGuiPayload* igAcceptDragDropPayload(byte* type, ImGuiDragDropFlags flags);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igAlignTextToFramePadding();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igArrowButton(byte* str_id, ImGuiDir dir);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igBegin(byte* name, byte* p_open, ImGuiWindowFlags flags);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igBeginChild_Str(byte* str_id, Vector2 size, ImGuiChildFlags child_flags, ImGuiWindowFlags window_flags);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igBeginChild_ID(uint id, Vector2 size, ImGuiChildFlags child_flags, ImGuiWindowFlags window_flags);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igBeginCombo(byte* label, byte* preview_value, ImGuiComboFlags flags);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igBeginDisabled(byte disabled);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igBeginDragDropSource(ImGuiDragDropFlags flags);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igBeginDragDropTarget();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igBeginGroup();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igBeginItemTooltip();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igBeginListBox(byte* label, Vector2 size);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igBeginMainMenuBar();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igBeginMenu(byte* label, byte enabled);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igBeginMenuBar();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern ImGuiMultiSelectIO* igBeginMultiSelect(ImGuiMultiSelectFlags flags, int selection_size, int items_count);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igBeginPopup(byte* str_id, ImGuiWindowFlags flags);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igBeginPopupContextItem(byte* str_id, ImGuiPopupFlags popup_flags);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igBeginPopupContextVoid(byte* str_id, ImGuiPopupFlags popup_flags);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igBeginPopupContextWindow(byte* str_id, ImGuiPopupFlags popup_flags);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igBeginPopupModal(byte* name, byte* p_open, ImGuiWindowFlags flags);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igBeginTabBar(byte* str_id, ImGuiTabBarFlags flags);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igBeginTabItem(byte* label, byte* p_open, ImGuiTabItemFlags flags);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igBeginTable(byte* str_id, int columns, ImGuiTableFlags flags, Vector2 outer_size,\n        float inner_width);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igBeginTooltip();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igBullet();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igBulletText(byte* fmt);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igButton(byte* label, Vector2 size);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern float igCalcItemWidth();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igCalcTextSize(Vector2* pOut, byte* text, byte* text_end,\n        byte hide_text_after_double_hash, float wrap_width);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igCheckbox(byte* label, byte* v);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igCheckboxFlags_IntPtr(byte* label, int* flags, int flags_value);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igCheckboxFlags_UintPtr(byte* label, uint* flags, uint flags_value);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igCloseCurrentPopup();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igCollapsingHeader_TreeNodeFlags(byte* label, ImGuiTreeNodeFlags flags);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igCollapsingHeader_BoolPtr(byte* label, byte* p_visible, ImGuiTreeNodeFlags flags);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igColorButton(byte* desc_id, Vector4 col, ImGuiColorEditFlags flags, Vector2 size);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern uint igColorConvertFloat4ToU32(Vector4 @in);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igColorConvertHSVtoRGB(float h, float s, float v, float* out_r, float* out_g,\n        float* out_b);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igColorConvertRGBtoHSV(float r, float g, float b, float* out_h, float* out_s,\n        float* out_v);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igColorConvertU32ToFloat4(Vector4* pOut, uint @in);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igColorEdit3(byte* label, Vector3* col, ImGuiColorEditFlags flags);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igColorEdit4(byte* label, Vector4* col, ImGuiColorEditFlags flags);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igColorPicker3(byte* label, Vector3* col, ImGuiColorEditFlags flags);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igColorPicker4(byte* label, Vector4* col, ImGuiColorEditFlags flags, float* ref_col);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igColumns(int count, byte* id, byte borders);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igCombo_Str_arr(byte* label, int* current_item, byte** items, int items_count,\n        int popup_max_height_in_items);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igCombo_Str(byte* label, int* current_item, byte* items_separated_by_zeros,\n        int popup_max_height_in_items);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern IntPtr igCreateContext(ImFontAtlas* shared_font_atlas);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igDebugCheckVersionAndDataLayout(byte* version_str, uint sz_io, uint sz_style,\n        uint sz_vec2, uint sz_vec4, uint sz_drawvert, uint sz_drawidx);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igDebugFlashStyleColor(ImGuiCol idx);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igDebugLog(byte* fmt);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igDebugStartItemPicker();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igDebugTextEncoding(byte* text);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igDestroyContext(IntPtr ctx);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igDragFloat(byte* label, float* v, float v_speed, float v_min, float v_max, byte* format,\n        ImGuiSliderFlags flags);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igDragFloat2(byte* label, Vector2* v, float v_speed, float v_min, float v_max,\n        byte* format, ImGuiSliderFlags flags);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igDragFloat3(byte* label, Vector3* v, float v_speed, float v_min, float v_max,\n        byte* format, ImGuiSliderFlags flags);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igDragFloat4(byte* label, Vector4* v, float v_speed, float v_min, float v_max,\n        byte* format, ImGuiSliderFlags flags);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igDragFloatRange2(byte* label, float* v_current_min, float* v_current_max, float v_speed,\n        float v_min, float v_max, byte* format, byte* format_max, ImGuiSliderFlags flags);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igDragInt(byte* label, int* v, float v_speed, int v_min, int v_max, byte* format,\n        ImGuiSliderFlags flags);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igDragInt2(byte* label, int* v, float v_speed, int v_min, int v_max, byte* format,\n        ImGuiSliderFlags flags);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igDragInt3(byte* label, int* v, float v_speed, int v_min, int v_max, byte* format,\n        ImGuiSliderFlags flags);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igDragInt4(byte* label, int* v, float v_speed, int v_min, int v_max, byte* format,\n        ImGuiSliderFlags flags);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igDragIntRange2(byte* label, int* v_current_min, int* v_current_max, float v_speed,\n        int v_min, int v_max, byte* format, byte* format_max, ImGuiSliderFlags flags);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igDragScalar(byte* label, ImGuiDataType data_type, void* p_data, float v_speed,\n        void* p_min, void* p_max, byte* format, ImGuiSliderFlags flags);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igDragScalarN(byte* label, ImGuiDataType data_type, void* p_data, int components,\n        float v_speed, void* p_min, void* p_max, byte* format, ImGuiSliderFlags flags);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igDummy(Vector2 size);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igEnd();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igEndChild();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igEndCombo();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igEndDisabled();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igEndDragDropSource();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igEndDragDropTarget();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igEndFrame();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igEndGroup();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igEndListBox();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igEndMainMenuBar();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igEndMenu();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igEndMenuBar();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern ImGuiMultiSelectIO* igEndMultiSelect();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igEndPopup();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igEndTabBar();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igEndTabItem();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igEndTable();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igEndTooltip();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igGetAllocatorFunctions(IntPtr* p_alloc_func, IntPtr* p_free_func, void** p_user_data);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern ImDrawList* igGetBackgroundDrawList_Nil();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte* igGetClipboardText();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern uint igGetColorU32_Col(ImGuiCol idx, float alpha_mul);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern uint igGetColorU32_Vec4(Vector4 col);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern uint igGetColorU32_U32(uint col, float alpha_mul);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern int igGetColumnIndex();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern float igGetColumnOffset(int column_index);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern int igGetColumnsCount();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern float igGetColumnWidth(int column_index);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igGetContentRegionAvail(Vector2* pOut);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern IntPtr igGetCurrentContext();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igGetCursorPos(Vector2* pOut);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern float igGetCursorPosX();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern float igGetCursorPosY();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igGetCursorScreenPos(Vector2* pOut);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igGetCursorStartPos(Vector2* pOut);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern ImGuiPayload* igGetDragDropPayload();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern ImDrawData* igGetDrawData();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern IntPtr igGetDrawListSharedData();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern ImFont* igGetFont();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern float igGetFontSize();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igGetFontTexUvWhitePixel(Vector2* pOut);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern ImDrawList* igGetForegroundDrawList_Nil();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern int igGetFrameCount();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern float igGetFrameHeight();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern float igGetFrameHeightWithSpacing();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern uint igGetID_Str(byte* str_id);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern uint igGetID_StrStr(byte* str_id_begin, byte* str_id_end);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern uint igGetID_Ptr(void* ptr_id);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern uint igGetID_Int(int int_id);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern ImGuiIO* igGetIO();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern uint igGetItemID();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igGetItemRectMax(Vector2* pOut);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igGetItemRectMin(Vector2* pOut);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igGetItemRectSize(Vector2* pOut);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte* igGetKeyName(ImGuiKey key);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern int igGetKeyPressedAmount(ImGuiKey key, float repeat_delay, float rate);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern ImGuiViewport* igGetMainViewport();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern int igGetMouseClickedCount(ImGuiMouseButton button);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern ImGuiMouseCursor igGetMouseCursor();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igGetMouseDragDelta(Vector2* pOut, ImGuiMouseButton button, float lock_threshold);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igGetMousePos(Vector2* pOut);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igGetMousePosOnOpeningCurrentPopup(Vector2* pOut);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern ImGuiPlatformIO* igGetPlatformIO();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern float igGetScrollMaxX();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern float igGetScrollMaxY();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern float igGetScrollX();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern float igGetScrollY();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern ImGuiStorage* igGetStateStorage();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern ImGuiStyle* igGetStyle();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte* igGetStyleColorName(ImGuiCol idx);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern Vector4* igGetStyleColorVec4(ImGuiCol idx);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern float igGetTextLineHeight();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern float igGetTextLineHeightWithSpacing();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern double igGetTime();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern float igGetTreeNodeToLabelSpacing();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte* igGetVersion();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern ImDrawList* igGetWindowDrawList();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern float igGetWindowHeight();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igGetWindowPos(Vector2* pOut);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igGetWindowSize(Vector2* pOut);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern float igGetWindowWidth();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igImage(IntPtr user_texture_id, Vector2 image_size, Vector2 uv0, Vector2 uv1,\n        Vector4 tint_col, Vector4 border_col);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igImageButton(byte* str_id, IntPtr user_texture_id, Vector2 image_size, Vector2 uv0,\n        Vector2 uv1, Vector4 bg_col, Vector4 tint_col);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igIndent(float indent_w);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igInputDouble(byte* label, double* v, double step, double step_fast, byte* format,\n        ImGuiInputTextFlags flags);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igInputFloat(byte* label, float* v, float step, float step_fast, byte* format,\n        ImGuiInputTextFlags flags);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igInputFloat2(byte* label, Vector2* v, byte* format, ImGuiInputTextFlags flags);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igInputFloat3(byte* label, Vector3* v, byte* format, ImGuiInputTextFlags flags);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igInputFloat4(byte* label, Vector4* v, byte* format, ImGuiInputTextFlags flags);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igInputInt(byte* label, int* v, int step, int step_fast, ImGuiInputTextFlags flags);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igInputInt2(byte* label, int* v, ImGuiInputTextFlags flags);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igInputInt3(byte* label, int* v, ImGuiInputTextFlags flags);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igInputInt4(byte* label, int* v, ImGuiInputTextFlags flags);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igInputScalar(byte* label, ImGuiDataType data_type, void* p_data, void* p_step,\n        void* p_step_fast, byte* format, ImGuiInputTextFlags flags);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igInputScalarN(byte* label, ImGuiDataType data_type, void* p_data, int components,\n        void* p_step, void* p_step_fast, byte* format, ImGuiInputTextFlags flags);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igInputText(byte* label, byte* buf, uint buf_size, ImGuiInputTextFlags flags,\n        ImGuiInputTextCallback? callback, void* user_data);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igInputTextMultiline(byte* label, byte* buf, uint buf_size, Vector2 size,\n        ImGuiInputTextFlags flags, ImGuiInputTextCallback callback, void* user_data);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igInputTextWithHint(byte* label, byte* hint, byte* buf, uint buf_size,\n        ImGuiInputTextFlags flags, ImGuiInputTextCallback callback, void* user_data);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igInvisibleButton(byte* str_id, Vector2 size, ImGuiButtonFlags flags);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igIsAnyItemActive();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igIsAnyItemFocused();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igIsAnyItemHovered();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igIsAnyMouseDown();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igIsItemActivated();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igIsItemActive();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igIsItemClicked(ImGuiMouseButton mouse_button);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igIsItemDeactivated();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igIsItemDeactivatedAfterEdit();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igIsItemEdited();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igIsItemFocused();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igIsItemHovered(ImGuiHoveredFlags flags);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igIsItemToggledOpen();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igIsItemToggledSelection();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igIsItemVisible();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igIsKeyChordPressed_Nil(ImGuiKey key_chord);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igIsKeyDown_Nil(ImGuiKey key);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igIsKeyPressed_Bool(ImGuiKey key, byte repeat);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igIsKeyReleased_Nil(ImGuiKey key);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igIsMouseClicked_Bool(ImGuiMouseButton button, byte repeat);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igIsMouseDoubleClicked_Nil(ImGuiMouseButton button);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igIsMouseDown_Nil(ImGuiMouseButton button);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igIsMouseDragging(ImGuiMouseButton button, float lock_threshold);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igIsMouseHoveringRect(Vector2 r_min, Vector2 r_max, byte clip);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igIsMousePosValid(Vector2* mouse_pos);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igIsMouseReleased_Nil(ImGuiMouseButton button);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igIsPopupOpen_Str(byte* str_id, ImGuiPopupFlags flags);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igIsRectVisible_Nil(Vector2 size);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igIsRectVisible_Vec2(Vector2 rect_min, Vector2 rect_max);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igIsWindowAppearing();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igIsWindowCollapsed();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igIsWindowFocused(ImGuiFocusedFlags flags);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igIsWindowHovered(ImGuiHoveredFlags flags);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igLabelText(byte* label, byte* fmt);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igListBox_Str_arr(byte* label, int* current_item, byte** items, int items_count,\n        int height_in_items);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igLoadIniSettingsFromDisk(byte* ini_filename);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igLoadIniSettingsFromMemory(byte* ini_data, uint ini_size);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igLogButtons();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igLogFinish();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igLogText(byte* fmt);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igLogToClipboard(int auto_open_depth);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igLogToFile(int auto_open_depth, byte* filename);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igLogToTTY(int auto_open_depth);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void* igMemAlloc(uint size);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igMemFree(void* ptr);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igMenuItem_Bool(byte* label, byte* shortcut, byte selected, byte enabled);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igMenuItem_BoolPtr(byte* label, byte* shortcut, byte* p_selected, byte enabled);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igNewFrame();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igNewLine();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igNextColumn();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igOpenPopup_Str(byte* str_id, ImGuiPopupFlags popup_flags);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igOpenPopup_ID(uint id, ImGuiPopupFlags popup_flags);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igOpenPopupOnItemClick(byte* str_id, ImGuiPopupFlags popup_flags);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igPlotHistogram_FloatPtr(byte* label, float* values, int values_count, int values_offset,\n        byte* overlay_text, float scale_min, float scale_max, Vector2 graph_size, int stride);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igPlotLines_FloatPtr(byte* label, float* values, int values_count, int values_offset,\n        byte* overlay_text, float scale_min, float scale_max, Vector2 graph_size, int stride);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igPopClipRect();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igPopFont();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igPopID();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igPopItemFlag();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igPopItemWidth();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igPopStyleColor(int count);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igPopStyleVar(int count);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igPopTextWrapPos();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igProgressBar(float fraction, Vector2 size_arg, byte* overlay);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igPushClipRect(Vector2 clip_rect_min, Vector2 clip_rect_max,\n        byte intersect_with_current_clip_rect);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igPushFont(ImFont* font);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igPushID_Str(byte* str_id);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igPushID_StrStr(byte* str_id_begin, byte* str_id_end);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igPushID_Ptr(void* ptr_id);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igPushID_Int(int int_id);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igPushItemFlag(ImGuiItemFlags option, byte enabled);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igPushItemWidth(float item_width);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igPushStyleColor_U32(ImGuiCol idx, uint col);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igPushStyleColor_Vec4(ImGuiCol idx, Vector4 col);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igPushStyleVar_Float(ImGuiStyleVar idx, float val);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igPushStyleVar_Vec2(ImGuiStyleVar idx, Vector2 val);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igPushStyleVarX(ImGuiStyleVar idx, float val_x);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igPushStyleVarY(ImGuiStyleVar idx, float val_y);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igPushTextWrapPos(float wrap_local_pos_x);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igRadioButton_Bool(byte* label, byte active);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igRadioButton_IntPtr(byte* label, int* v, int v_button);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igRender();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igResetMouseDragDelta(ImGuiMouseButton button);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igSameLine(float offset_from_start_x, float spacing);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igSaveIniSettingsToDisk(byte* ini_filename);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte* igSaveIniSettingsToMemory(uint* out_ini_size);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igSelectable_Bool(byte* label, byte selected, ImGuiSelectableFlags flags, Vector2 size);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igSelectable_BoolPtr(byte* label, byte* p_selected, ImGuiSelectableFlags flags,\n        Vector2 size);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igSeparator();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igSeparatorText(byte* label);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igSetAllocatorFunctions(IntPtr alloc_func, IntPtr free_func, void* user_data);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igSetClipboardText(byte* text);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igSetColorEditOptions(ImGuiColorEditFlags flags);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igSetColumnOffset(int column_index, float offset_x);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igSetColumnWidth(int column_index, float width);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igSetCurrentContext(IntPtr ctx);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igSetCursorPos(Vector2 local_pos);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igSetCursorPosX(float local_x);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igSetCursorPosY(float local_y);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igSetCursorScreenPos(Vector2 pos);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igSetDragDropPayload(byte* type, void* data, uint sz, ImGuiCond cond);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igSetItemDefaultFocus();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igSetItemKeyOwner_Nil(ImGuiKey key);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igSetItemTooltip(byte* fmt);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igSetKeyboardFocusHere(int offset);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igSetMouseCursor(ImGuiMouseCursor cursor_type);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igSetNavCursorVisible(byte visible);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igSetNextFrameWantCaptureKeyboard(byte want_capture_keyboard);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igSetNextFrameWantCaptureMouse(byte want_capture_mouse);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igSetNextItemAllowOverlap();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igSetNextItemOpen(byte is_open, ImGuiCond cond);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igSetNextItemSelectionUserData(long selection_user_data);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igSetNextItemShortcut(ImGuiKey key_chord, ImGuiInputFlags flags);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igSetNextItemStorageID(uint storage_id);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igSetNextItemWidth(float item_width);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igSetNextWindowBgAlpha(float alpha);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igSetNextWindowCollapsed(byte collapsed, ImGuiCond cond);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igSetNextWindowContentSize(Vector2 size);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igSetNextWindowFocus();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igSetNextWindowPos(Vector2 pos, ImGuiCond cond, Vector2 pivot);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igSetNextWindowScroll(Vector2 scroll);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igSetNextWindowSize(Vector2 size, ImGuiCond cond);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igSetNextWindowSizeConstraints(Vector2 size_min, Vector2 size_max,\n        ImGuiSizeCallback custom_callback, void* custom_callback_data);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igSetScrollFromPosX_Float(float local_x, float center_x_ratio);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igSetScrollFromPosY_Float(float local_y, float center_y_ratio);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igSetScrollHereX(float center_x_ratio);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igSetScrollHereY(float center_y_ratio);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igSetScrollX_Float(float scroll_x);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igSetScrollY_Float(float scroll_y);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igSetStateStorage(ImGuiStorage* storage);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igSetTabItemClosed(byte* tab_or_docked_window_label);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igSetTooltip(byte* fmt);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igSetWindowCollapsed_Bool(byte collapsed, ImGuiCond cond);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igSetWindowCollapsed_Str(byte* name, byte collapsed, ImGuiCond cond);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igSetWindowFocus_Nil();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igSetWindowFocus_Str(byte* name);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igSetWindowFontScale(float scale);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igSetWindowPos_Vec2(Vector2 pos, ImGuiCond cond);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igSetWindowPos_Str(byte* name, Vector2 pos, ImGuiCond cond);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igSetWindowSize_Vec2(Vector2 size, ImGuiCond cond);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igSetWindowSize_Str(byte* name, Vector2 size, ImGuiCond cond);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igShortcut_Nil(ImGuiKey key_chord, ImGuiInputFlags flags);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igShowAboutWindow(byte* p_open);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igShowDebugLogWindow(byte* p_open);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igShowDemoWindow(byte* p_open);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igShowFontSelector(byte* label);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igShowIDStackToolWindow(byte* p_open);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igShowMetricsWindow(byte* p_open);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igShowStyleEditor(ImGuiStyle* @ref);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igShowStyleSelector(byte* label);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igShowUserGuide();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igSliderAngle(byte* label, float* v_rad, float v_degrees_min, float v_degrees_max,\n        byte* format, ImGuiSliderFlags flags);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igSliderFloat(byte* label, float* v, float v_min, float v_max, byte* format,\n        ImGuiSliderFlags flags);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igSliderFloat2(byte* label, Vector2* v, float v_min, float v_max, byte* format,\n        ImGuiSliderFlags flags);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igSliderFloat3(byte* label, Vector3* v, float v_min, float v_max, byte* format,\n        ImGuiSliderFlags flags);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igSliderFloat4(byte* label, Vector4* v, float v_min, float v_max, byte* format,\n        ImGuiSliderFlags flags);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igSliderInt(byte* label, int* v, int v_min, int v_max, byte* format,\n        ImGuiSliderFlags flags);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igSliderInt2(byte* label, int* v, int v_min, int v_max, byte* format,\n        ImGuiSliderFlags flags);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igSliderInt3(byte* label, int* v, int v_min, int v_max, byte* format,\n        ImGuiSliderFlags flags);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igSliderInt4(byte* label, int* v, int v_min, int v_max, byte* format,\n        ImGuiSliderFlags flags);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igSliderScalar(byte* label, ImGuiDataType data_type, void* p_data, void* p_min,\n        void* p_max, byte* format, ImGuiSliderFlags flags);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igSliderScalarN(byte* label, ImGuiDataType data_type, void* p_data, int components,\n        void* p_min, void* p_max, byte* format, ImGuiSliderFlags flags);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igSmallButton(byte* label);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igSpacing();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igStyleColorsClassic(ImGuiStyle* dst);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igStyleColorsDark(ImGuiStyle* dst);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igStyleColorsLight(ImGuiStyle* dst);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igTabItemButton(byte* label, ImGuiTabItemFlags flags);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igTableAngledHeadersRow();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern int igTableGetColumnCount();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern ImGuiTableColumnFlags igTableGetColumnFlags(int column_n);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern int igTableGetColumnIndex();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte* igTableGetColumnName_Int(int column_n);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern int igTableGetHoveredColumn();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern int igTableGetRowIndex();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern ImGuiTableSortSpecs* igTableGetSortSpecs();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igTableHeader(byte* label);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igTableHeadersRow();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igTableNextColumn();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igTableNextRow(ImGuiTableRowFlags row_flags, float min_row_height);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igTableSetBgColor(ImGuiTableBgTarget target, uint color, int column_n);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igTableSetColumnEnabled(int column_n, byte v);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igTableSetColumnIndex(int column_n);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igTableSetupColumn(byte* label, ImGuiTableColumnFlags flags, float init_width_or_weight,\n        uint user_id);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igTableSetupScrollFreeze(int cols, int rows);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igText(byte* fmt);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igTextColored(Vector4 col, byte* fmt);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igTextDisabled(byte* fmt);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igTextLink(byte* label);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igTextLinkOpenURL(byte* label, byte* url);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igTextUnformatted(byte* text, byte* text_end);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igTextWrapped(byte* fmt);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igTreeNode_Str(byte* label);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igTreeNode_StrStr(byte* str_id, byte* fmt);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igTreeNode_Ptr(void* ptr_id, byte* fmt);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igTreeNodeEx_Str(byte* label, ImGuiTreeNodeFlags flags);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igTreeNodeEx_StrStr(byte* str_id, ImGuiTreeNodeFlags flags, byte* fmt);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igTreeNodeEx_Ptr(void* ptr_id, ImGuiTreeNodeFlags flags, byte* fmt);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igTreePop();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igTreePush_Str(byte* str_id);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igTreePush_Ptr(void* ptr_id);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igUnindent(float indent_w);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igValue_Bool(byte* prefix, byte b);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igValue_Int(byte* prefix, int v);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igValue_Uint(byte* prefix, uint v);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void igValue_Float(byte* prefix, float v, byte* float_format);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igVSliderFloat(byte* label, Vector2 size, float* v, float v_min, float v_max,\n        byte* format, ImGuiSliderFlags flags);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igVSliderInt(byte* label, Vector2 size, int* v, int v_min, int v_max, byte* format,\n        ImGuiSliderFlags flags);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte igVSliderScalar(byte* label, Vector2 size, ImGuiDataType data_type, void* p_data,\n        void* p_min, void* p_max, byte* format, ImGuiSliderFlags flags);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImColor_destroy(ImColor* self);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImColor_HSV(ImColor* pOut, float h, float s, float v, float a);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern ImColor* ImColor_ImColor_Nil();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern ImColor* ImColor_ImColor_Float(float r, float g, float b, float a);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern ImColor* ImColor_ImColor_Vec4(Vector4 col);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern ImColor* ImColor_ImColor_Int(int r, int g, int b, int a);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern ImColor* ImColor_ImColor_U32(uint rgba);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImColor_SetHSV(ImColor* self, float h, float s, float v, float a);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImDrawCmd_destroy(ImDrawCmd* self);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern IntPtr ImDrawCmd_GetTexID(ImDrawCmd* self);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern ImDrawCmd* ImDrawCmd_ImDrawCmd();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImDrawData_AddDrawList(ImDrawData* self, ImDrawList* draw_list);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImDrawData_Clear(ImDrawData* self);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImDrawData_DeIndexAllBuffers(ImDrawData* self);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImDrawData_destroy(ImDrawData* self);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern ImDrawData* ImDrawData_ImDrawData();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImDrawData_ScaleClipRects(ImDrawData* self, Vector2 fb_scale);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern int ImDrawList__CalcCircleAutoSegmentCount(ImDrawList* self, float radius);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImDrawList__ClearFreeMemory(ImDrawList* self);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImDrawList__OnChangedClipRect(ImDrawList* self);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImDrawList__OnChangedTextureID(ImDrawList* self);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImDrawList__OnChangedVtxOffset(ImDrawList* self);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImDrawList__PathArcToFastEx(ImDrawList* self, Vector2 center, float radius,\n        int a_min_sample, int a_max_sample, int a_step);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImDrawList__PathArcToN(ImDrawList* self, Vector2 center, float radius, float a_min,\n        float a_max, int num_segments);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImDrawList__PopUnusedDrawCmd(ImDrawList* self);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImDrawList__ResetForNewFrame(ImDrawList* self);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImDrawList__SetTextureID(ImDrawList* self, IntPtr texture_id);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImDrawList__TryMergeDrawCmds(ImDrawList* self);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImDrawList_AddBezierCubic(ImDrawList* self, Vector2 p1, Vector2 p2, Vector2 p3,\n        Vector2 p4, uint col, float thickness, int num_segments);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImDrawList_AddBezierQuadratic(ImDrawList* self, Vector2 p1, Vector2 p2, Vector2 p3,\n        uint col, float thickness, int num_segments);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImDrawList_AddCallback(ImDrawList* self, IntPtr callback, void* userdata,\n        uint userdata_size);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImDrawList_AddCircle(ImDrawList* self, Vector2 center, float radius, uint col,\n        int num_segments, float thickness);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImDrawList_AddCircleFilled(ImDrawList* self, Vector2 center, float radius, uint col,\n        int num_segments);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImDrawList_AddConcavePolyFilled(ImDrawList* self, Vector2* points, int num_points,\n        uint col);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImDrawList_AddConvexPolyFilled(ImDrawList* self, Vector2* points, int num_points,\n        uint col);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImDrawList_AddDrawCmd(ImDrawList* self);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImDrawList_AddEllipse(ImDrawList* self, Vector2 center, Vector2 radius, uint col,\n        float rot, int num_segments, float thickness);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImDrawList_AddEllipseFilled(ImDrawList* self, Vector2 center, Vector2 radius, uint col,\n        float rot, int num_segments);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImDrawList_AddImage(ImDrawList* self, IntPtr user_texture_id, Vector2 p_min,\n        Vector2 p_max, Vector2 uv_min, Vector2 uv_max, uint col);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImDrawList_AddImageQuad(ImDrawList* self, IntPtr user_texture_id, Vector2 p1, Vector2 p2,\n        Vector2 p3, Vector2 p4, Vector2 uv1, Vector2 uv2, Vector2 uv3, Vector2 uv4, uint col);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImDrawList_AddImageRounded(ImDrawList* self, IntPtr user_texture_id, Vector2 p_min,\n        Vector2 p_max, Vector2 uv_min, Vector2 uv_max, uint col, float rounding, ImDrawFlags flags);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImDrawList_AddLine(ImDrawList* self, Vector2 p1, Vector2 p2, uint col, float thickness);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImDrawList_AddNgon(ImDrawList* self, Vector2 center, float radius, uint col,\n        int num_segments, float thickness);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImDrawList_AddNgonFilled(ImDrawList* self, Vector2 center, float radius, uint col,\n        int num_segments);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImDrawList_AddPolyline(ImDrawList* self, Vector2* points, int num_points, uint col,\n        ImDrawFlags flags, float thickness);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImDrawList_AddQuad(ImDrawList* self, Vector2 p1, Vector2 p2, Vector2 p3, Vector2 p4,\n        uint col, float thickness);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImDrawList_AddQuadFilled(ImDrawList* self, Vector2 p1, Vector2 p2, Vector2 p3, Vector2 p4,\n        uint col);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImDrawList_AddRect(ImDrawList* self, Vector2 p_min, Vector2 p_max, uint col,\n        float rounding, ImDrawFlags flags, float thickness);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImDrawList_AddRectFilled(ImDrawList* self, Vector2 p_min, Vector2 p_max, uint col,\n        float rounding, ImDrawFlags flags);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImDrawList_AddRectFilledMultiColor(ImDrawList* self, Vector2 p_min, Vector2 p_max,\n        uint col_upr_left, uint col_upr_right, uint col_bot_right, uint col_bot_left);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImDrawList_AddText_Vec2(ImDrawList* self, Vector2 pos, uint col, byte* text_begin,\n        byte* text_end);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImDrawList_AddText_FontPtr(ImDrawList* self, ImFont* font, float font_size, Vector2 pos,\n        uint col, byte* text_begin, byte* text_end, float wrap_width, Vector4* cpu_fine_clip_rect);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImDrawList_AddTriangle(ImDrawList* self, Vector2 p1, Vector2 p2, Vector2 p3, uint col,\n        float thickness);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImDrawList_AddTriangleFilled(ImDrawList* self, Vector2 p1, Vector2 p2, Vector2 p3,\n        uint col);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImDrawList_ChannelsMerge(ImDrawList* self);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImDrawList_ChannelsSetCurrent(ImDrawList* self, int n);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImDrawList_ChannelsSplit(ImDrawList* self, int count);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern ImDrawList* ImDrawList_CloneOutput(ImDrawList* self);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImDrawList_destroy(ImDrawList* self);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImDrawList_GetClipRectMax(Vector2* pOut, ImDrawList* self);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImDrawList_GetClipRectMin(Vector2* pOut, ImDrawList* self);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern ImDrawList* ImDrawList_ImDrawList(IntPtr shared_data);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImDrawList_PathArcTo(ImDrawList* self, Vector2 center, float radius, float a_min,\n        float a_max, int num_segments);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImDrawList_PathArcToFast(ImDrawList* self, Vector2 center, float radius, int a_min_of_12,\n        int a_max_of_12);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImDrawList_PathBezierCubicCurveTo(ImDrawList* self, Vector2 p2, Vector2 p3, Vector2 p4,\n        int num_segments);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImDrawList_PathBezierQuadraticCurveTo(ImDrawList* self, Vector2 p2, Vector2 p3,\n        int num_segments);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImDrawList_PathClear(ImDrawList* self);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImDrawList_PathEllipticalArcTo(ImDrawList* self, Vector2 center, Vector2 radius, float rot, float a_min, float a_max, int num_segments);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImDrawList_PathFillConcave(ImDrawList* self, uint col);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImDrawList_PathFillConvex(ImDrawList* self, uint col);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImDrawList_PathLineTo(ImDrawList* self, Vector2 pos);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImDrawList_PathLineToMergeDuplicate(ImDrawList* self, Vector2 pos);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImDrawList_PathRect(ImDrawList* self, Vector2 rect_min, Vector2 rect_max, float rounding,\n        ImDrawFlags flags);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImDrawList_PathStroke(ImDrawList* self, uint col, ImDrawFlags flags, float thickness);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImDrawList_PopClipRect(ImDrawList* self);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImDrawList_PopTextureID(ImDrawList* self);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImDrawList_PrimQuadUV(ImDrawList* self, Vector2 a, Vector2 b, Vector2 c, Vector2 d,\n        Vector2 uv_a, Vector2 uv_b, Vector2 uv_c, Vector2 uv_d, uint col);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImDrawList_PrimRect(ImDrawList* self, Vector2 a, Vector2 b, uint col);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImDrawList_PrimRectUV(ImDrawList* self, Vector2 a, Vector2 b, Vector2 uv_a, Vector2 uv_b,\n        uint col);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImDrawList_PrimReserve(ImDrawList* self, int idx_count, int vtx_count);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImDrawList_PrimUnreserve(ImDrawList* self, int idx_count, int vtx_count);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImDrawList_PrimVtx(ImDrawList* self, Vector2 pos, Vector2 uv, uint col);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImDrawList_PrimWriteIdx(ImDrawList* self, ushort idx);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImDrawList_PrimWriteVtx(ImDrawList* self, Vector2 pos, Vector2 uv, uint col);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImDrawList_PushClipRect(ImDrawList* self, Vector2 clip_rect_min, Vector2 clip_rect_max,\n        byte intersect_with_current_clip_rect);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImDrawList_PushClipRectFullScreen(ImDrawList* self);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImDrawList_PushTextureID(ImDrawList* self, IntPtr texture_id);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImDrawListSplitter_Clear(ImDrawListSplitter* self);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImDrawListSplitter_ClearFreeMemory(ImDrawListSplitter* self);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImDrawListSplitter_destroy(ImDrawListSplitter* self);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern ImDrawListSplitter* ImDrawListSplitter_ImDrawListSplitter();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImDrawListSplitter_Merge(ImDrawListSplitter* self, ImDrawList* draw_list);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImDrawListSplitter_SetCurrentChannel(ImDrawListSplitter* self, ImDrawList* draw_list,\n        int channel_idx);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImDrawListSplitter_Split(ImDrawListSplitter* self, ImDrawList* draw_list, int count);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImFont_AddGlyph(ImFont* self, ImFontConfig* src_cfg, ushort c, float x0, float y0,\n        float x1, float y1, float u0, float v0, float u1, float v1, float advance_x);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImFont_AddRemapChar(ImFont* self, ushort dst, ushort src, byte overwrite_dst);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImFont_BuildLookupTable(ImFont* self);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImFont_CalcTextSizeA(Vector2* pOut, ImFont* self, float size, float max_width,\n        float wrap_width, byte* text_begin, byte* text_end, byte** remaining);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte* ImFont_CalcWordWrapPositionA(ImFont* self, float scale, byte* text, byte* text_end,\n        float wrap_width);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImFont_ClearOutputData(ImFont* self);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImFont_destroy(ImFont* self);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern ImFontGlyph* ImFont_FindGlyph(ImFont* self, ushort c);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern ImFontGlyph* ImFont_FindGlyphNoFallback(ImFont* self, ushort c);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern float ImFont_GetCharAdvance(ImFont* self, ushort c);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte* ImFont_GetDebugName(ImFont* self);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImFont_GrowIndex(ImFont* self, int new_size);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern ImFont* ImFont_ImFont();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte ImFont_IsGlyphRangeUnused(ImFont* self, uint c_begin, uint c_last);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte ImFont_IsLoaded(ImFont* self);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImFont_RenderChar(ImFont* self, ImDrawList* draw_list, float size, Vector2 pos, uint col,\n        ushort c);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImFont_RenderText(ImFont* self, ImDrawList* draw_list, float size, Vector2 pos, uint col,\n        Vector4 clip_rect, byte* text_begin, byte* text_end, float wrap_width, byte cpu_fine_clip);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImFont_SetGlyphVisible(ImFont* self, ushort c, byte visible);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern int ImFontAtlas_AddCustomRectFontGlyph(ImFontAtlas* self, ImFont* font, ushort id, int width,\n        int height, float advance_x, Vector2 offset);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern int ImFontAtlas_AddCustomRectRegular(ImFontAtlas* self, int width, int height);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern ImFont* ImFontAtlas_AddFont(ImFontAtlas* self, ImFontConfig* font_cfg);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern ImFont* ImFontAtlas_AddFontDefault(ImFontAtlas* self, ImFontConfig* font_cfg);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern ImFont* ImFontAtlas_AddFontFromFileTTF(ImFontAtlas* self, byte* filename, float size_pixels,\n        ImFontConfig* font_cfg, ushort* glyph_ranges);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern ImFont* ImFontAtlas_AddFontFromMemoryCompressedBase85TTF(ImFontAtlas* self,\n        byte* compressed_font_data_base85, float size_pixels, ImFontConfig* font_cfg, ushort* glyph_ranges);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern ImFont* ImFontAtlas_AddFontFromMemoryCompressedTTF(ImFontAtlas* self,\n        void* compressed_font_data, int compressed_font_data_size, float size_pixels, ImFontConfig* font_cfg,\n        ushort* glyph_ranges);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern ImFont* ImFontAtlas_AddFontFromMemoryTTF(ImFontAtlas* self, void* font_data,\n        int font_data_size, float size_pixels, ImFontConfig* font_cfg, ushort* glyph_ranges);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte ImFontAtlas_Build(ImFontAtlas* self);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImFontAtlas_CalcCustomRectUV(ImFontAtlas* self, ImFontAtlasCustomRect* rect,\n        Vector2* out_uv_min, Vector2* out_uv_max);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImFontAtlas_Clear(ImFontAtlas* self);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImFontAtlas_ClearFonts(ImFontAtlas* self);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImFontAtlas_ClearInputData(ImFontAtlas* self);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImFontAtlas_ClearTexData(ImFontAtlas* self);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImFontAtlas_destroy(ImFontAtlas* self);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern ImFontAtlasCustomRect* ImFontAtlas_GetCustomRectByIndex(ImFontAtlas* self, int index);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern ushort* ImFontAtlas_GetGlyphRangesChineseFull(ImFontAtlas* self);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern ushort* ImFontAtlas_GetGlyphRangesChineseSimplifiedCommon(ImFontAtlas* self);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern ushort* ImFontAtlas_GetGlyphRangesCyrillic(ImFontAtlas* self);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern ushort* ImFontAtlas_GetGlyphRangesDefault(ImFontAtlas* self);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern ushort* ImFontAtlas_GetGlyphRangesGreek(ImFontAtlas* self);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern ushort* ImFontAtlas_GetGlyphRangesJapanese(ImFontAtlas* self);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern ushort* ImFontAtlas_GetGlyphRangesKorean(ImFontAtlas* self);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern ushort* ImFontAtlas_GetGlyphRangesThai(ImFontAtlas* self);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern ushort* ImFontAtlas_GetGlyphRangesVietnamese(ImFontAtlas* self);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte ImFontAtlas_GetMouseCursorTexData(ImFontAtlas* self, ImGuiMouseCursor cursor,\n        Vector2* out_offset, Vector2* out_size, Vector2* out_uv_border, Vector2* out_uv_fill);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImFontAtlas_GetTexDataAsAlpha8(ImFontAtlas* self, byte** out_pixels, int* out_width,\n        int* out_height, int* out_bytes_per_pixel);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImFontAtlas_GetTexDataAsAlpha8(ImFontAtlas* self, IntPtr* out_pixels, int* out_width,\n        int* out_height, int* out_bytes_per_pixel);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImFontAtlas_GetTexDataAsRGBA32(ImFontAtlas* self, byte** out_pixels, int* out_width,\n        int* out_height, int* out_bytes_per_pixel);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImFontAtlas_GetTexDataAsRGBA32(ImFontAtlas* self, IntPtr* out_pixels, int* out_width,\n        int* out_height, int* out_bytes_per_pixel);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern ImFontAtlas* ImFontAtlas_ImFontAtlas();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte ImFontAtlas_IsBuilt(ImFontAtlas* self);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImFontAtlas_SetTexID(ImFontAtlas* self, IntPtr id);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImFontAtlasCustomRect_destroy(ImFontAtlasCustomRect* self);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern ImFontAtlasCustomRect* ImFontAtlasCustomRect_ImFontAtlasCustomRect();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte ImFontAtlasCustomRect_IsPacked(ImFontAtlasCustomRect* self);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImFontConfig_destroy(ImFontConfig* self);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern ImFontConfig* ImFontConfig_ImFontConfig();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImFontGlyphRangesBuilder_AddChar(ImFontGlyphRangesBuilder* self, ushort c);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImFontGlyphRangesBuilder_AddRanges(ImFontGlyphRangesBuilder* self, ushort* ranges);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImFontGlyphRangesBuilder_AddText(ImFontGlyphRangesBuilder* self, byte* text,\n        byte* text_end);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void\n        ImFontGlyphRangesBuilder_BuildRanges(ImFontGlyphRangesBuilder* self, ImVector* out_ranges);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImFontGlyphRangesBuilder_Clear(ImFontGlyphRangesBuilder* self);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImFontGlyphRangesBuilder_destroy(ImFontGlyphRangesBuilder* self);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte ImFontGlyphRangesBuilder_GetBit(ImFontGlyphRangesBuilder* self, uint n);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern ImFontGlyphRangesBuilder* ImFontGlyphRangesBuilder_ImFontGlyphRangesBuilder();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImFontGlyphRangesBuilder_SetBit(ImFontGlyphRangesBuilder* self, uint n);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern IntPtr* ImGuiFreeType_GetBuilderForFreeType();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImGuiInputTextCallbackData_ClearSelection(ImGuiInputTextCallbackData* self);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImGuiInputTextCallbackData_DeleteChars(ImGuiInputTextCallbackData* self, int pos,\n        int bytes_count);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImGuiInputTextCallbackData_destroy(ImGuiInputTextCallbackData* self);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte ImGuiInputTextCallbackData_HasSelection(ImGuiInputTextCallbackData* self);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern ImGuiInputTextCallbackData* ImGuiInputTextCallbackData_ImGuiInputTextCallbackData();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImGuiInputTextCallbackData_InsertChars(ImGuiInputTextCallbackData* self, int pos,\n        byte* text, byte* text_end);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImGuiInputTextCallbackData_SelectAll(ImGuiInputTextCallbackData* self);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImGuiIO_AddFocusEvent(ImGuiIO* self, byte focused);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImGuiIO_AddInputCharacter(ImGuiIO* self, uint c);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImGuiIO_AddInputCharactersUTF8(ImGuiIO* self, byte* str);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImGuiIO_AddInputCharacterUTF16(ImGuiIO* self, ushort c);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImGuiIO_AddKeyAnalogEvent(ImGuiIO* self, ImGuiKey key, byte down, float v);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImGuiIO_AddKeyEvent(ImGuiIO* self, ImGuiKey key, byte down);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImGuiIO_AddMouseButtonEvent(ImGuiIO* self, int button, byte down);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImGuiIO_AddMousePosEvent(ImGuiIO* self, float x, float y);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImGuiIO_AddMouseSourceEvent(ImGuiIO* self, ImGuiMouseSource source);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImGuiIO_AddMouseWheelEvent(ImGuiIO* self, float wheel_x, float wheel_y);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImGuiIO_ClearEventsQueue(ImGuiIO* self);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImGuiIO_ClearInputKeys(ImGuiIO* self);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImGuiIO_ClearInputMouse(ImGuiIO* self);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImGuiIO_destroy(ImGuiIO* self);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern ImGuiIO* ImGuiIO_ImGuiIO();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImGuiIO_SetAppAcceptingEvents(ImGuiIO* self, byte accepting_events);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImGuiIO_SetKeyEventNativeData(ImGuiIO* self, ImGuiKey key, int native_keycode,\n        int native_scancode, int native_legacy_index);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImGuiListClipper_Begin(ImGuiListClipper* self, int items_count, float items_height);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImGuiListClipper_destroy(ImGuiListClipper* self);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImGuiListClipper_End(ImGuiListClipper* self);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern ImGuiListClipper* ImGuiListClipper_ImGuiListClipper();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImGuiListClipper_IncludeItemByIndex(ImGuiListClipper* self, int item_index);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void\n        ImGuiListClipper_IncludeItemsByIndex(ImGuiListClipper* self, int item_begin, int item_end);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImGuiListClipper_SeekCursorForItem(ImGuiListClipper* self, int item_index);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte ImGuiListClipper_Step(ImGuiListClipper* self);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImGuiOnceUponAFrame_destroy(ImGuiOnceUponAFrame* self);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern ImGuiOnceUponAFrame* ImGuiOnceUponAFrame_ImGuiOnceUponAFrame();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImGuiPayload_Clear(ImGuiPayload* self);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImGuiPayload_destroy(ImGuiPayload* self);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern ImGuiPayload* ImGuiPayload_ImGuiPayload();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte ImGuiPayload_IsDataType(ImGuiPayload* self, byte* type);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte ImGuiPayload_IsDelivery(ImGuiPayload* self);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte ImGuiPayload_IsPreview(ImGuiPayload* self);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImGuiPlatformImeData_destroy(ImGuiPlatformImeData* self);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern ImGuiPlatformImeData* ImGuiPlatformImeData_ImGuiPlatformImeData();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImGuiPlatformIO_destroy(ImGuiPlatformIO* self);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern ImGuiPlatformIO* ImGuiPlatformIO_ImGuiPlatformIO();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImGuiSelectionBasicStorage_ApplyRequests(ImGuiSelectionBasicStorage* self,\n        ImGuiMultiSelectIO* ms_io);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImGuiSelectionBasicStorage_Clear(ImGuiSelectionBasicStorage* self);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte ImGuiSelectionBasicStorage_Contains(ImGuiSelectionBasicStorage* self, uint id);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImGuiSelectionBasicStorage_destroy(ImGuiSelectionBasicStorage* self);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte ImGuiSelectionBasicStorage_GetNextSelectedItem(ImGuiSelectionBasicStorage* self,\n        void** opaque_it, uint* out_id);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern uint ImGuiSelectionBasicStorage_GetStorageIdFromIndex(ImGuiSelectionBasicStorage* self,\n        int idx);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern ImGuiSelectionBasicStorage* ImGuiSelectionBasicStorage_ImGuiSelectionBasicStorage();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImGuiSelectionBasicStorage_SetItemSelected(ImGuiSelectionBasicStorage* self, uint id,\n        byte selected);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImGuiSelectionBasicStorage_Swap(ImGuiSelectionBasicStorage* self,\n        ImGuiSelectionBasicStorage* r);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImGuiSelectionExternalStorage_ApplyRequests(ImGuiSelectionExternalStorage* self, ImGuiMultiSelectIO* ms_io);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImGuiSelectionExternalStorage_destroy(ImGuiSelectionExternalStorage* self);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern ImGuiSelectionExternalStorage* ImGuiSelectionExternalStorage_ImGuiSelectionExternalStorage();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImGuiStorage_BuildSortByKey(ImGuiStorage* self);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImGuiStorage_Clear(ImGuiStorage* self);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte ImGuiStorage_GetBool(ImGuiStorage* self, uint key, byte default_val);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte* ImGuiStorage_GetBoolRef(ImGuiStorage* self, uint key, byte default_val);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern float ImGuiStorage_GetFloat(ImGuiStorage* self, uint key, float default_val);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern float* ImGuiStorage_GetFloatRef(ImGuiStorage* self, uint key, float default_val);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern int ImGuiStorage_GetInt(ImGuiStorage* self, uint key, int default_val);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern int* ImGuiStorage_GetIntRef(ImGuiStorage* self, uint key, int default_val);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void* ImGuiStorage_GetVoidPtr(ImGuiStorage* self, uint key);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void** ImGuiStorage_GetVoidPtrRef(ImGuiStorage* self, uint key, void* default_val);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImGuiStorage_SetAllInt(ImGuiStorage* self, int val);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImGuiStorage_SetBool(ImGuiStorage* self, uint key, byte val);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImGuiStorage_SetFloat(ImGuiStorage* self, uint key, float val);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImGuiStorage_SetInt(ImGuiStorage* self, uint key, int val);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImGuiStorage_SetVoidPtr(ImGuiStorage* self, uint key, void* val);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImGuiStoragePair_destroy(ImGuiStoragePair* self);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern ImGuiStoragePair* ImGuiStoragePair_ImGuiStoragePair_Int(uint _key, int _val);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern ImGuiStoragePair* ImGuiStoragePair_ImGuiStoragePair_Float(uint _key, float _val);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern ImGuiStoragePair* ImGuiStoragePair_ImGuiStoragePair_Ptr(uint _key, void* _val);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImGuiStyle_destroy(ImGuiStyle* self);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern ImGuiStyle* ImGuiStyle_ImGuiStyle();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImGuiStyle_ScaleAllSizes(ImGuiStyle* self, float scale_factor);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImGuiTableColumnSortSpecs_destroy(ImGuiTableColumnSortSpecs* self);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern ImGuiTableColumnSortSpecs* ImGuiTableColumnSortSpecs_ImGuiTableColumnSortSpecs();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImGuiTableSortSpecs_destroy(ImGuiTableSortSpecs* self);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern ImGuiTableSortSpecs* ImGuiTableSortSpecs_ImGuiTableSortSpecs();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImGuiTextBuffer_append(ImGuiTextBuffer* self, byte* str, byte* str_end);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImGuiTextBuffer_appendf(ImGuiTextBuffer* self, byte* fmt);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte* ImGuiTextBuffer_begin(ImGuiTextBuffer* self);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte* ImGuiTextBuffer_c_str(ImGuiTextBuffer* self);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImGuiTextBuffer_clear(ImGuiTextBuffer* self);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImGuiTextBuffer_destroy(ImGuiTextBuffer* self);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte ImGuiTextBuffer_empty(ImGuiTextBuffer* self);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte* ImGuiTextBuffer_end(ImGuiTextBuffer* self);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern ImGuiTextBuffer* ImGuiTextBuffer_ImGuiTextBuffer();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImGuiTextBuffer_reserve(ImGuiTextBuffer* self, int capacity);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern int ImGuiTextBuffer_size(ImGuiTextBuffer* self);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImGuiTextFilter_Build(ImGuiTextFilter* self);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImGuiTextFilter_Clear(ImGuiTextFilter* self);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImGuiTextFilter_destroy(ImGuiTextFilter* self);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte ImGuiTextFilter_Draw(ImGuiTextFilter* self, byte* label, float width);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern ImGuiTextFilter* ImGuiTextFilter_ImGuiTextFilter(byte* default_filter);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte ImGuiTextFilter_IsActive(ImGuiTextFilter* self);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte ImGuiTextFilter_PassFilter(ImGuiTextFilter* self, byte* text, byte* text_end);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImGuiTextRange_destroy(ImGuiTextRange* self);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern byte ImGuiTextRange_empty(ImGuiTextRange* self);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern ImGuiTextRange* ImGuiTextRange_ImGuiTextRange_Nil();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern ImGuiTextRange* ImGuiTextRange_ImGuiTextRange_Str(byte* _b, byte* _e);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImGuiTextRange_split(ImGuiTextRange* self, byte separator, ImVector* @out);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImGuiViewport_destroy(ImGuiViewport* self);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImGuiViewport_GetCenter(Vector2* pOut, ImGuiViewport* self);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImGuiViewport_GetWorkCenter(Vector2* pOut, ImGuiViewport* self);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern ImGuiViewport* ImGuiViewport_ImGuiViewport();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImVec2_destroy(Vector2* self);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern Vector2* ImVec2_ImVec2_Nil();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern Vector2* ImVec2_ImVec2_Float(float _x, float _y);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern void ImVec4_destroy(Vector4* self);\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern Vector4* ImVec4_ImVec4_Nil();\n\n    [DllImport(LIBCIMGUI, CallingConvention = CallingConvention.Cdecl)]\n    public static extern Vector4* ImVec4_ImVec4_Float(float _x, float _y, float _z, float _w);\n}"
  },
  {
    "path": "src/JitterDemo/Renderer/DearImGui/ImGuiStructs.cs",
    "content": "using System;\nusing System.Runtime.CompilerServices;\nusing JitterDemo.Renderer.OpenGL;\n\nnamespace JitterDemo.Renderer.DearImGui;\n\npublic unsafe delegate int ImGuiInputTextCallback(ImGuiInputTextCallbackData* data);\n\npublic unsafe delegate void ImGuiSizeCallback(ImGuiSizeCallbackData* data);\n\npublic unsafe struct ImGuiStoragePair\n{\n    public uint key;\n    public int val_i;\n    public float val_f;\n    public void* val_p;\n}\n\npublic unsafe struct ImVector\n{\n    public readonly int Size;\n    public readonly int Capacity;\n    public readonly IntPtr Data;\n\n    public ImVector(int size, int capacity, IntPtr data)\n    {\n        Size = size;\n        Capacity = capacity;\n        Data = data;\n    }\n\n    public ref T Ref<T>(int index)\n    {\n        return ref Unsafe.AsRef<T>((byte*)Data + index * Unsafe.SizeOf<T>());\n    }\n\n    public IntPtr Address<T>(int index)\n    {\n        return (IntPtr)((byte*)Data + index * Unsafe.SizeOf<T>());\n    }\n}\n[System.Flags]\npublic enum ImDrawFlags\n{\n    None = 0,\n    Closed = 1,\n    RoundCornersTopLeft = 16,\n    RoundCornersTopRight = 32,\n    RoundCornersBottomLeft = 64,\n    RoundCornersBottomRight = 128,\n    RoundCornersNone = 256,\n    RoundCornersTop = 48,\n    RoundCornersBottom = 192,\n    RoundCornersLeft = 80,\n    RoundCornersRight = 160,\n    RoundCornersAll = 240,\n    RoundCornersDefault = 240,\n    RoundCornersMask = 496,\n}\n\n[System.Flags]\npublic enum ImDrawListFlags\n{\n    None = 0,\n    AntiAliasedLines = 1,\n    AntiAliasedLinesUseTex = 2,\n    AntiAliasedFill = 4,\n    AllowVtxOffset = 8,\n}\n\n[System.Flags]\npublic enum ImFontAtlasFlags\n{\n    None = 0,\n    NoPowerOfTwoHeight = 1,\n    NoMouseCursors = 2,\n    NoBakedLines = 4,\n}\n\n[System.Flags]\npublic enum ImGuiBackendFlags\n{\n    None = 0,\n    HasGamepad = 1,\n    HasMouseCursors = 2,\n    HasSetMousePos = 4,\n    RendererHasVtxOffset = 8,\n}\n\n[System.Flags]\npublic enum ImGuiButtonFlags\n{\n    None = 0,\n    MouseButtonLeft = 1,\n    MouseButtonRight = 2,\n    MouseButtonMiddle = 4,\n    MouseButtonMask = 7,\n    EnableNav = 8,\n}\n\n[System.Flags]\npublic enum ImGuiChildFlags\n{\n    None = 0,\n    Borders = 1,\n    AlwaysUseWindowPadding = 2,\n    ResizeX = 4,\n    ResizeY = 8,\n    AutoResizeX = 16,\n    AutoResizeY = 32,\n    AlwaysAutoResize = 64,\n    FrameStyle = 128,\n    NavFlattened = 256,\n}\n\npublic enum ImGuiCol\n{\n    Text = 0,\n    TextDisabled = 1,\n    WindowBg = 2,\n    ChildBg = 3,\n    PopupBg = 4,\n    Border = 5,\n    BorderShadow = 6,\n    FrameBg = 7,\n    FrameBgHovered = 8,\n    FrameBgActive = 9,\n    TitleBg = 10,\n    TitleBgActive = 11,\n    TitleBgCollapsed = 12,\n    MenuBarBg = 13,\n    ScrollbarBg = 14,\n    ScrollbarGrab = 15,\n    ScrollbarGrabHovered = 16,\n    ScrollbarGrabActive = 17,\n    CheckMark = 18,\n    SliderGrab = 19,\n    SliderGrabActive = 20,\n    Button = 21,\n    ButtonHovered = 22,\n    ButtonActive = 23,\n    Header = 24,\n    HeaderHovered = 25,\n    HeaderActive = 26,\n    Separator = 27,\n    SeparatorHovered = 28,\n    SeparatorActive = 29,\n    ResizeGrip = 30,\n    ResizeGripHovered = 31,\n    ResizeGripActive = 32,\n    TabHovered = 33,\n    Tab = 34,\n    TabSelected = 35,\n    TabSelectedOverline = 36,\n    TabDimmed = 37,\n    TabDimmedSelected = 38,\n    TabDimmedSelectedOverline = 39,\n    PlotLines = 40,\n    PlotLinesHovered = 41,\n    PlotHistogram = 42,\n    PlotHistogramHovered = 43,\n    TableHeaderBg = 44,\n    TableBorderStrong = 45,\n    TableBorderLight = 46,\n    TableRowBg = 47,\n    TableRowBgAlt = 48,\n    TextLink = 49,\n    TextSelectedBg = 50,\n    DragDropTarget = 51,\n    NavCursor = 52,\n    NavWindowingHighlight = 53,\n    NavWindowingDimBg = 54,\n    ModalWindowDimBg = 55,\n    COUNT = 56,\n}\n\n[System.Flags]\npublic enum ImGuiColorEditFlags\n{\n    None = 0,\n    NoAlpha = 2,\n    NoPicker = 4,\n    NoOptions = 8,\n    NoSmallPreview = 16,\n    NoInputs = 32,\n    NoTooltip = 64,\n    NoLabel = 128,\n    NoSidePreview = 256,\n    NoDragDrop = 512,\n    NoBorder = 1024,\n    AlphaBar = 65536,\n    AlphaPreview = 131072,\n    AlphaPreviewHalf = 262144,\n    HDR = 524288,\n    DisplayRGB = 1048576,\n    DisplayHSV = 2097152,\n    DisplayHex = 4194304,\n    Uint8 = 8388608,\n    Float = 16777216,\n    PickerHueBar = 33554432,\n    PickerHueWheel = 67108864,\n    InputRGB = 134217728,\n    InputHSV = 268435456,\n    DefaultOptions = 177209344,\n    DisplayMask = 7340032,\n    DataTypeMask = 25165824,\n    PickerMask = 100663296,\n    InputMask = 402653184,\n}\n\n[System.Flags]\npublic enum ImGuiComboFlags\n{\n    None = 0,\n    PopupAlignLeft = 1,\n    HeightSmall = 2,\n    HeightRegular = 4,\n    HeightLarge = 8,\n    HeightLargest = 16,\n    NoArrowButton = 32,\n    NoPreview = 64,\n    WidthFitPreview = 128,\n    HeightMask = 30,\n}\n\npublic enum ImGuiCond\n{\n    None = 0,\n    Always = 1,\n    Once = 2,\n    FirstUseEver = 4,\n    Appearing = 8,\n}\n\n[System.Flags]\npublic enum ImGuiConfigFlags\n{\n    None = 0,\n    NavEnableKeyboard = 1,\n    NavEnableGamepad = 2,\n    NoMouse = 16,\n    NoMouseCursorChange = 32,\n    NoKeyboard = 64,\n    IsSRGB = 1048576,\n    IsTouchScreen = 2097152,\n}\n\npublic enum ImGuiDataType\n{\n    S8 = 0,\n    U8 = 1,\n    S16 = 2,\n    U16 = 3,\n    S32 = 4,\n    U32 = 5,\n    S64 = 6,\n    U64 = 7,\n    Float = 8,\n    Double = 9,\n    Bool = 10,\n    String = 11,\n    COUNT = 12,\n}\n\npublic enum ImGuiDir\n{\n    None = -1,\n    Left = 0,\n    Right = 1,\n    Up = 2,\n    Down = 3,\n    COUNT = 4,\n}\n\n[System.Flags]\npublic enum ImGuiDragDropFlags\n{\n    None = 0,\n    SourceNoPreviewTooltip = 1,\n    SourceNoDisableHover = 2,\n    SourceNoHoldToOpenOthers = 4,\n    SourceAllowNullID = 8,\n    SourceExtern = 16,\n    PayloadAutoExpire = 32,\n    PayloadNoCrossContext = 64,\n    PayloadNoCrossProcess = 128,\n    AcceptBeforeDelivery = 1024,\n    AcceptNoDrawDefaultRect = 2048,\n    AcceptNoPreviewTooltip = 4096,\n    AcceptPeekOnly = 3072,\n}\n\n[System.Flags]\npublic enum ImGuiFocusedFlags\n{\n    None = 0,\n    ChildWindows = 1,\n    RootWindow = 2,\n    AnyWindow = 4,\n    NoPopupHierarchy = 8,\n    RootAndChildWindows = 3,\n}\n\n[System.Flags]\npublic enum ImGuiFreeTypeBuilderFlags\n{\n    NoHinting = 1,\n    NoAutoHint = 2,\n    ForceAutoHint = 4,\n    LightHinting = 8,\n    MonoHinting = 16,\n    Bold = 32,\n    Oblique = 64,\n    Monochrome = 128,\n    LoadColor = 256,\n    Bitmap = 512,\n}\n\n[System.Flags]\npublic enum ImGuiHoveredFlags\n{\n    None = 0,\n    ChildWindows = 1,\n    RootWindow = 2,\n    AnyWindow = 4,\n    NoPopupHierarchy = 8,\n    AllowWhenBlockedByPopup = 32,\n    AllowWhenBlockedByActiveItem = 128,\n    AllowWhenOverlappedByItem = 256,\n    AllowWhenOverlappedByWindow = 512,\n    AllowWhenDisabled = 1024,\n    NoNavOverride = 2048,\n    AllowWhenOverlapped = 768,\n    RectOnly = 928,\n    RootAndChildWindows = 3,\n    ForTooltip = 4096,\n    Stationary = 8192,\n    DelayNone = 16384,\n    DelayShort = 32768,\n    DelayNormal = 65536,\n    NoSharedDelay = 131072,\n}\n\n[System.Flags]\npublic enum ImGuiInputFlags\n{\n    None = 0,\n    Repeat = 1,\n    RouteActive = 1024,\n    RouteFocused = 2048,\n    RouteGlobal = 4096,\n    RouteAlways = 8192,\n    RouteOverFocused = 16384,\n    RouteOverActive = 32768,\n    RouteUnlessBgFocused = 65536,\n    RouteFromRootWindow = 131072,\n    Tooltip = 262144,\n}\n\n[System.Flags]\npublic enum ImGuiInputTextFlags\n{\n    None = 0,\n    CharsDecimal = 1,\n    CharsHexadecimal = 2,\n    CharsScientific = 4,\n    CharsUppercase = 8,\n    CharsNoBlank = 16,\n    AllowTabInput = 32,\n    EnterReturnsTrue = 64,\n    EscapeClearsAll = 128,\n    CtrlEnterForNewLine = 256,\n    ReadOnly = 512,\n    Password = 1024,\n    AlwaysOverwrite = 2048,\n    AutoSelectAll = 4096,\n    ParseEmptyRefVal = 8192,\n    DisplayEmptyRefVal = 16384,\n    NoHorizontalScroll = 32768,\n    NoUndoRedo = 65536,\n    ElideLeft = 131072,\n    CallbackCompletion = 262144,\n    CallbackHistory = 524288,\n    CallbackAlways = 1048576,\n    CallbackCharFilter = 2097152,\n    CallbackResize = 4194304,\n    CallbackEdit = 8388608,\n}\n\n[System.Flags]\npublic enum ImGuiItemFlags\n{\n    None = 0,\n    NoTabStop = 1,\n    NoNav = 2,\n    NoNavDefaultFocus = 4,\n    ButtonRepeat = 8,\n    AutoClosePopups = 16,\n    AllowDuplicateId = 32,\n}\n\npublic enum ImGuiKey\n{\n    None = 0,\n    NamedKey_BEGIN = 512,\n    Tab = 512,\n    LeftArrow = 513,\n    RightArrow = 514,\n    UpArrow = 515,\n    DownArrow = 516,\n    PageUp = 517,\n    PageDown = 518,\n    Home = 519,\n    End = 520,\n    Insert = 521,\n    Delete = 522,\n    Backspace = 523,\n    Space = 524,\n    Enter = 525,\n    Escape = 526,\n    LeftCtrl = 527,\n    LeftShift = 528,\n    LeftAlt = 529,\n    LeftSuper = 530,\n    RightCtrl = 531,\n    RightShift = 532,\n    RightAlt = 533,\n    RightSuper = 534,\n    Menu = 535,\n    _0 = 536,\n    _1 = 537,\n    _2 = 538,\n    _3 = 539,\n    _4 = 540,\n    _5 = 541,\n    _6 = 542,\n    _7 = 543,\n    _8 = 544,\n    _9 = 545,\n    A = 546,\n    B = 547,\n    C = 548,\n    D = 549,\n    E = 550,\n    F = 551,\n    G = 552,\n    H = 553,\n    I = 554,\n    J = 555,\n    K = 556,\n    L = 557,\n    M = 558,\n    N = 559,\n    O = 560,\n    P = 561,\n    Q = 562,\n    R = 563,\n    S = 564,\n    T = 565,\n    U = 566,\n    V = 567,\n    W = 568,\n    X = 569,\n    Y = 570,\n    Z = 571,\n    F1 = 572,\n    F2 = 573,\n    F3 = 574,\n    F4 = 575,\n    F5 = 576,\n    F6 = 577,\n    F7 = 578,\n    F8 = 579,\n    F9 = 580,\n    F10 = 581,\n    F11 = 582,\n    F12 = 583,\n    F13 = 584,\n    F14 = 585,\n    F15 = 586,\n    F16 = 587,\n    F17 = 588,\n    F18 = 589,\n    F19 = 590,\n    F20 = 591,\n    F21 = 592,\n    F22 = 593,\n    F23 = 594,\n    F24 = 595,\n    Apostrophe = 596,\n    Comma = 597,\n    Minus = 598,\n    Period = 599,\n    Slash = 600,\n    Semicolon = 601,\n    Equal = 602,\n    LeftBracket = 603,\n    Backslash = 604,\n    RightBracket = 605,\n    GraveAccent = 606,\n    CapsLock = 607,\n    ScrollLock = 608,\n    NumLock = 609,\n    PrintScreen = 610,\n    Pause = 611,\n    Keypad0 = 612,\n    Keypad1 = 613,\n    Keypad2 = 614,\n    Keypad3 = 615,\n    Keypad4 = 616,\n    Keypad5 = 617,\n    Keypad6 = 618,\n    Keypad7 = 619,\n    Keypad8 = 620,\n    Keypad9 = 621,\n    KeypadDecimal = 622,\n    KeypadDivide = 623,\n    KeypadMultiply = 624,\n    KeypadSubtract = 625,\n    KeypadAdd = 626,\n    KeypadEnter = 627,\n    KeypadEqual = 628,\n    AppBack = 629,\n    AppForward = 630,\n    GamepadStart = 631,\n    GamepadBack = 632,\n    GamepadFaceLeft = 633,\n    GamepadFaceRight = 634,\n    GamepadFaceUp = 635,\n    GamepadFaceDown = 636,\n    GamepadDpadLeft = 637,\n    GamepadDpadRight = 638,\n    GamepadDpadUp = 639,\n    GamepadDpadDown = 640,\n    GamepadL1 = 641,\n    GamepadR1 = 642,\n    GamepadL2 = 643,\n    GamepadR2 = 644,\n    GamepadL3 = 645,\n    GamepadR3 = 646,\n    GamepadLStickLeft = 647,\n    GamepadLStickRight = 648,\n    GamepadLStickUp = 649,\n    GamepadLStickDown = 650,\n    GamepadRStickLeft = 651,\n    GamepadRStickRight = 652,\n    GamepadRStickUp = 653,\n    GamepadRStickDown = 654,\n    MouseLeft = 655,\n    MouseRight = 656,\n    MouseMiddle = 657,\n    MouseX1 = 658,\n    MouseX2 = 659,\n    MouseWheelX = 660,\n    MouseWheelY = 661,\n    ReservedForModCtrl = 662,\n    ReservedForModShift = 663,\n    ReservedForModAlt = 664,\n    ReservedForModSuper = 665,\n    NamedKey_END = 666,\n    ModNone = 0,\n    ModCtrl = 4096,\n    ModShift = 8192,\n    ModAlt = 16384,\n    ModSuper = 32768,\n    ModMask = 61440,\n    NamedKey_COUNT = 154,\n}\n\npublic enum ImGuiMouseButton\n{\n    Left = 0,\n    Right = 1,\n    Middle = 2,\n    COUNT = 5,\n}\n\npublic enum ImGuiMouseCursor\n{\n    None = -1,\n    Arrow = 0,\n    TextInput = 1,\n    ResizeAll = 2,\n    ResizeNS = 3,\n    ResizeEW = 4,\n    ResizeNESW = 5,\n    ResizeNWSE = 6,\n    Hand = 7,\n    NotAllowed = 8,\n    COUNT = 9,\n}\n\npublic enum ImGuiMouseSource\n{\n    Mouse = 0,\n    TouchScreen = 1,\n    Pen = 2,\n    COUNT = 3,\n}\n\n[System.Flags]\npublic enum ImGuiMultiSelectFlags\n{\n    None = 0,\n    SingleSelect = 1,\n    NoSelectAll = 2,\n    NoRangeSelect = 4,\n    NoAutoSelect = 8,\n    NoAutoClear = 16,\n    NoAutoClearOnReselect = 32,\n    BoxSelect1d = 64,\n    BoxSelect2d = 128,\n    BoxSelectNoScroll = 256,\n    ClearOnEscape = 512,\n    ClearOnClickVoid = 1024,\n    ScopeWindow = 2048,\n    ScopeRect = 4096,\n    SelectOnClick = 8192,\n    SelectOnClickRelease = 16384,\n    NavWrapX = 65536,\n}\n\n[System.Flags]\npublic enum ImGuiPopupFlags\n{\n    None = 0,\n    MouseButtonLeft = 0,\n    MouseButtonRight = 1,\n    MouseButtonMiddle = 2,\n    MouseButtonMask = 31,\n    MouseButtonDefault = 1,\n    NoReopen = 32,\n    NoOpenOverExistingPopup = 128,\n    NoOpenOverItems = 256,\n    AnyPopupId = 1024,\n    AnyPopupLevel = 2048,\n    AnyPopup = 3072,\n}\n\n[System.Flags]\npublic enum ImGuiSelectableFlags\n{\n    None = 0,\n    NoAutoClosePopups = 1,\n    SpanAllColumns = 2,\n    AllowDoubleClick = 4,\n    Disabled = 8,\n    AllowOverlap = 16,\n    Highlight = 32,\n}\n\npublic enum ImGuiSelectionRequestType\n{\n    None = 0,\n    SetAll = 1,\n    SetRange = 2,\n}\n\n[System.Flags]\npublic enum ImGuiSliderFlags\n{\n    None = 0,\n    Logarithmic = 32,\n    NoRoundToFormat = 64,\n    NoInput = 128,\n    WrapAround = 256,\n    ClampOnInput = 512,\n    ClampZeroRange = 1024,\n    NoSpeedTweaks = 2048,\n    AlwaysClamp = 1536,\n    InvalidMask = 1879048207,\n}\n\npublic enum ImGuiSortDirection\n{\n    None = 0,\n    Ascending = 1,\n    Descending = 2,\n}\n\npublic enum ImGuiStyleVar\n{\n    Alpha = 0,\n    DisabledAlpha = 1,\n    WindowPadding = 2,\n    WindowRounding = 3,\n    WindowBorderSize = 4,\n    WindowMinSize = 5,\n    WindowTitleAlign = 6,\n    ChildRounding = 7,\n    ChildBorderSize = 8,\n    PopupRounding = 9,\n    PopupBorderSize = 10,\n    FramePadding = 11,\n    FrameRounding = 12,\n    FrameBorderSize = 13,\n    ItemSpacing = 14,\n    ItemInnerSpacing = 15,\n    IndentSpacing = 16,\n    CellPadding = 17,\n    ScrollbarSize = 18,\n    ScrollbarRounding = 19,\n    GrabMinSize = 20,\n    GrabRounding = 21,\n    TabRounding = 22,\n    TabBorderSize = 23,\n    TabBarBorderSize = 24,\n    TabBarOverlineSize = 25,\n    TableAngledHeadersAngle = 26,\n    TableAngledHeadersTextAlign = 27,\n    ButtonTextAlign = 28,\n    SelectableTextAlign = 29,\n    SeparatorTextBorderSize = 30,\n    SeparatorTextAlign = 31,\n    SeparatorTextPadding = 32,\n    COUNT = 33,\n}\n\n[System.Flags]\npublic enum ImGuiTabBarFlags\n{\n    None = 0,\n    Reorderable = 1,\n    AutoSelectNewTabs = 2,\n    TabListPopupButton = 4,\n    NoCloseWithMiddleMouseButton = 8,\n    NoTabListScrollingButtons = 16,\n    NoTooltip = 32,\n    DrawSelectedOverline = 64,\n    FittingPolicyResizeDown = 128,\n    FittingPolicyScroll = 256,\n    FittingPolicyMask = 384,\n    FittingPolicyDefault = 128,\n}\n\n[System.Flags]\npublic enum ImGuiTabItemFlags\n{\n    None = 0,\n    UnsavedDocument = 1,\n    SetSelected = 2,\n    NoCloseWithMiddleMouseButton = 4,\n    NoPushId = 8,\n    NoTooltip = 16,\n    NoReorder = 32,\n    Leading = 64,\n    Trailing = 128,\n    NoAssumedClosure = 256,\n}\n\npublic enum ImGuiTableBgTarget\n{\n    None = 0,\n    RowBg0 = 1,\n    RowBg1 = 2,\n    CellBg = 3,\n}\n\n[System.Flags]\npublic enum ImGuiTableColumnFlags\n{\n    None = 0,\n    Disabled = 1,\n    DefaultHide = 2,\n    DefaultSort = 4,\n    WidthStretch = 8,\n    WidthFixed = 16,\n    NoResize = 32,\n    NoReorder = 64,\n    NoHide = 128,\n    NoClip = 256,\n    NoSort = 512,\n    NoSortAscending = 1024,\n    NoSortDescending = 2048,\n    NoHeaderLabel = 4096,\n    NoHeaderWidth = 8192,\n    PreferSortAscending = 16384,\n    PreferSortDescending = 32768,\n    IndentEnable = 65536,\n    IndentDisable = 131072,\n    AngledHeader = 262144,\n    IsEnabled = 16777216,\n    IsVisible = 33554432,\n    IsSorted = 67108864,\n    IsHovered = 134217728,\n    WidthMask = 24,\n    IndentMask = 196608,\n    StatusMask = 251658240,\n    NoDirectResize = 1073741824,\n}\n\n[System.Flags]\npublic enum ImGuiTableFlags\n{\n    None = 0,\n    Resizable = 1,\n    Reorderable = 2,\n    Hideable = 4,\n    Sortable = 8,\n    NoSavedSettings = 16,\n    ContextMenuInBody = 32,\n    RowBg = 64,\n    BordersInnerH = 128,\n    BordersOuterH = 256,\n    BordersInnerV = 512,\n    BordersOuterV = 1024,\n    BordersH = 384,\n    BordersV = 1536,\n    BordersInner = 640,\n    BordersOuter = 1280,\n    Borders = 1920,\n    NoBordersInBody = 2048,\n    NoBordersInBodyUntilResize = 4096,\n    SizingFixedFit = 8192,\n    SizingFixedSame = 16384,\n    SizingStretchProp = 24576,\n    SizingStretchSame = 32768,\n    NoHostExtendX = 65536,\n    NoHostExtendY = 131072,\n    NoKeepColumnsVisible = 262144,\n    PreciseWidths = 524288,\n    NoClip = 1048576,\n    PadOuterX = 2097152,\n    NoPadOuterX = 4194304,\n    NoPadInnerX = 8388608,\n    ScrollX = 16777216,\n    ScrollY = 33554432,\n    SortMulti = 67108864,\n    SortTristate = 134217728,\n    HighlightHoveredColumn = 268435456,\n    SizingMask = 57344,\n}\n\n[System.Flags]\npublic enum ImGuiTableRowFlags\n{\n    None = 0,\n    Headers = 1,\n}\n\n[System.Flags]\npublic enum ImGuiTreeNodeFlags\n{\n    None = 0,\n    Selected = 1,\n    Framed = 2,\n    AllowOverlap = 4,\n    NoTreePushOnOpen = 8,\n    NoAutoOpenOnLog = 16,\n    DefaultOpen = 32,\n    OpenOnDoubleClick = 64,\n    OpenOnArrow = 128,\n    Leaf = 256,\n    Bullet = 512,\n    FramePadding = 1024,\n    SpanAvailWidth = 2048,\n    SpanFullWidth = 4096,\n    SpanLabelWidth = 8192,\n    SpanAllColumns = 16384,\n    LabelSpanAllColumns = 32768,\n    NavLeftJumpsBackHere = 131072,\n    CollapsingHeader = 26,\n}\n\n[System.Flags]\npublic enum ImGuiViewportFlags\n{\n    None = 0,\n    IsPlatformWindow = 1,\n    IsPlatformMonitor = 2,\n    OwnedByApp = 4,\n}\n\n[System.Flags]\npublic enum ImGuiWindowFlags\n{\n    None = 0,\n    NoTitleBar = 1,\n    NoResize = 2,\n    NoMove = 4,\n    NoScrollbar = 8,\n    NoScrollWithMouse = 16,\n    NoCollapse = 32,\n    AlwaysAutoResize = 64,\n    NoBackground = 128,\n    NoSavedSettings = 256,\n    NoMouseInputs = 512,\n    MenuBar = 1024,\n    HorizontalScrollbar = 2048,\n    NoFocusOnAppearing = 4096,\n    NoBringToFrontOnFocus = 8192,\n    AlwaysVerticalScrollbar = 16384,\n    AlwaysHorizontalScrollbar = 32768,\n    NoNavInputs = 65536,\n    NoNavFocus = 131072,\n    UnsavedDocument = 262144,\n    NoNav = 196608,\n    NoDecoration = 43,\n    NoInputs = 197120,\n    ChildWindow = 16777216,\n    Tooltip = 33554432,\n    Popup = 67108864,\n    Modal = 134217728,\n    ChildMenu = 268435456,\n}\n\npublic unsafe partial struct ImColor\n{\n    public Vector4 Value;\n}\n\npublic unsafe partial struct ImDrawChannel\n{\n    public ImVector _CmdBuffer;\n    public ImVector _IdxBuffer;\n}\n\npublic unsafe partial struct ImDrawCmd\n{\n    public Vector4 ClipRect;\n    public IntPtr TextureId;\n    public uint VtxOffset;\n    public uint IdxOffset;\n    public uint ElemCount;\n    public IntPtr UserCallback;\n    public void* UserCallbackData;\n    public int UserCallbackDataSize;\n    public int UserCallbackDataOffset;\n}\n\npublic unsafe partial struct ImDrawCmdHeader\n{\n    public Vector4 ClipRect;\n    public IntPtr TextureId;\n    public uint VtxOffset;\n}\n\npublic unsafe partial struct ImDrawData\n{\n    public byte Valid;\n    public int CmdListsCount;\n    public int TotalIdxCount;\n    public int TotalVtxCount;\n    public ImVector CmdLists;\n    public Vector2 DisplayPos;\n    public Vector2 DisplaySize;\n    public Vector2 FramebufferScale;\n    public ImGuiViewport* OwnerViewport;\n}\n\npublic unsafe partial struct ImDrawList\n{\n    public ImVector CmdBuffer;\n    public ImVector IdxBuffer;\n    public ImVector VtxBuffer;\n    public ImDrawListFlags Flags;\n    public uint _VtxCurrentIdx;\n    public IntPtr _Data;\n    public ImDrawVert* _VtxWritePtr;\n    public ushort* _IdxWritePtr;\n    public ImVector _Path;\n    public ImDrawCmdHeader _CmdHeader;\n    public ImDrawListSplitter _Splitter;\n    public ImVector _ClipRectStack;\n    public ImVector _TextureIdStack;\n    public ImVector _CallbacksDataBuf;\n    public float _FringeScale;\n    public byte* _OwnerName;\n}\n\npublic unsafe partial struct ImDrawListSplitter\n{\n    public int _Current;\n    public int _Count;\n    public ImVector _Channels;\n}\n\npublic unsafe partial struct ImDrawVert\n{\n    public Vector2 pos;\n    public Vector2 uv;\n    public uint col;\n}\n\npublic unsafe partial struct ImFont\n{\n    public ImVector IndexAdvanceX;\n    public float FallbackAdvanceX;\n    public float FontSize;\n    public ImVector IndexLookup;\n    public ImVector Glyphs;\n    public ImFontGlyph* FallbackGlyph;\n    public ImFontAtlas* ContainerAtlas;\n    public ImFontConfig* ConfigData;\n    public short ConfigDataCount;\n    public short EllipsisCharCount;\n    public ushort EllipsisChar;\n    public ushort FallbackChar;\n    public float EllipsisWidth;\n    public float EllipsisCharStep;\n    public byte DirtyLookupTables;\n    public float Scale;\n    public float Ascent;\n    public float Descent;\n    public int MetricsTotalSurface;\n    public fixed byte Used4kPagesMap[2];\n}\n\npublic unsafe partial struct ImFontAtlas\n{\n    public ImFontAtlasFlags Flags;\n    public IntPtr TexID;\n    public int TexDesiredWidth;\n    public int TexGlyphPadding;\n    public byte Locked;\n    public void* UserData;\n    public byte TexReady;\n    public byte TexPixelsUseColors;\n    public byte* TexPixelsAlpha8;\n    public uint* TexPixelsRGBA32;\n    public int TexWidth;\n    public int TexHeight;\n    public Vector2 TexUvScale;\n    public Vector2 TexUvWhitePixel;\n    public ImVector Fonts;\n    public ImVector CustomRects;\n    public ImVector ConfigData;\n    public Vector4 TexUvLines_0;\n    public Vector4 TexUvLines_1;\n    public Vector4 TexUvLines_2;\n    public Vector4 TexUvLines_3;\n    public Vector4 TexUvLines_4;\n    public Vector4 TexUvLines_5;\n    public Vector4 TexUvLines_6;\n    public Vector4 TexUvLines_7;\n    public Vector4 TexUvLines_8;\n    public Vector4 TexUvLines_9;\n    public Vector4 TexUvLines_10;\n    public Vector4 TexUvLines_11;\n    public Vector4 TexUvLines_12;\n    public Vector4 TexUvLines_13;\n    public Vector4 TexUvLines_14;\n    public Vector4 TexUvLines_15;\n    public Vector4 TexUvLines_16;\n    public Vector4 TexUvLines_17;\n    public Vector4 TexUvLines_18;\n    public Vector4 TexUvLines_19;\n    public Vector4 TexUvLines_20;\n    public Vector4 TexUvLines_21;\n    public Vector4 TexUvLines_22;\n    public Vector4 TexUvLines_23;\n    public Vector4 TexUvLines_24;\n    public Vector4 TexUvLines_25;\n    public Vector4 TexUvLines_26;\n    public Vector4 TexUvLines_27;\n    public Vector4 TexUvLines_28;\n    public Vector4 TexUvLines_29;\n    public Vector4 TexUvLines_30;\n    public Vector4 TexUvLines_31;\n    public Vector4 TexUvLines_32;\n    public Vector4 TexUvLines_33;\n    public Vector4 TexUvLines_34;\n    public Vector4 TexUvLines_35;\n    public Vector4 TexUvLines_36;\n    public Vector4 TexUvLines_37;\n    public Vector4 TexUvLines_38;\n    public Vector4 TexUvLines_39;\n    public Vector4 TexUvLines_40;\n    public Vector4 TexUvLines_41;\n    public Vector4 TexUvLines_42;\n    public Vector4 TexUvLines_43;\n    public Vector4 TexUvLines_44;\n    public Vector4 TexUvLines_45;\n    public Vector4 TexUvLines_46;\n    public Vector4 TexUvLines_47;\n    public Vector4 TexUvLines_48;\n    public Vector4 TexUvLines_49;\n    public Vector4 TexUvLines_50;\n    public Vector4 TexUvLines_51;\n    public Vector4 TexUvLines_52;\n    public Vector4 TexUvLines_53;\n    public Vector4 TexUvLines_54;\n    public Vector4 TexUvLines_55;\n    public Vector4 TexUvLines_56;\n    public Vector4 TexUvLines_57;\n    public Vector4 TexUvLines_58;\n    public Vector4 TexUvLines_59;\n    public Vector4 TexUvLines_60;\n    public Vector4 TexUvLines_61;\n    public Vector4 TexUvLines_62;\n    public Vector4 TexUvLines_63;\n    public IntPtr* FontBuilderIO;\n    public uint FontBuilderFlags;\n    public int PackIdMouseCursors;\n    public int PackIdLines;\n}\n\npublic unsafe partial struct ImFontAtlasCustomRect\n{\n    public ushort X;\n    public ushort Y;\n    public ushort Width;\n    public ushort Height;\n    public uint GlyphID;\n    public uint GlyphColored;\n    public float GlyphAdvanceX;\n    public Vector2 GlyphOffset;\n    public ImFont* Font;\n}\n\npublic unsafe partial struct ImFontConfig\n{\n    public void* FontData;\n    public int FontDataSize;\n    public byte FontDataOwnedByAtlas;\n    public int FontNo;\n    public float SizePixels;\n    public int OversampleH;\n    public int OversampleV;\n    public byte PixelSnapH;\n    public Vector2 GlyphExtraSpacing;\n    public Vector2 GlyphOffset;\n    public ushort* GlyphRanges;\n    public float GlyphMinAdvanceX;\n    public float GlyphMaxAdvanceX;\n    public byte MergeMode;\n    public uint FontBuilderFlags;\n    public float RasterizerMultiply;\n    public float RasterizerDensity;\n    public ushort EllipsisChar;\n    public fixed byte Name[40];\n    public ImFont* DstFont;\n}\n\npublic unsafe partial struct ImFontGlyph\n{\n    public uint Colored;\n    public uint Visible;\n    public uint Codepoint;\n    public float AdvanceX;\n    public float X0;\n    public float Y0;\n    public float X1;\n    public float Y1;\n    public float U0;\n    public float V0;\n    public float U1;\n    public float V1;\n}\n\npublic unsafe partial struct ImFontGlyphRangesBuilder\n{\n    public ImVector UsedChars;\n}\n\npublic unsafe partial struct ImGuiIO\n{\n    public ImGuiConfigFlags ConfigFlags;\n    public ImGuiBackendFlags BackendFlags;\n    public Vector2 DisplaySize;\n    public float DeltaTime;\n    public float IniSavingRate;\n    public byte* IniFilename;\n    public byte* LogFilename;\n    public void* UserData;\n    public ImFontAtlas* Fonts;\n    public float FontGlobalScale;\n    public byte FontAllowUserScaling;\n    public ImFont* FontDefault;\n    public Vector2 DisplayFramebufferScale;\n    public byte ConfigNavSwapGamepadButtons;\n    public byte ConfigNavMoveSetMousePos;\n    public byte ConfigNavCaptureKeyboard;\n    public byte ConfigNavEscapeClearFocusItem;\n    public byte ConfigNavEscapeClearFocusWindow;\n    public byte ConfigNavCursorVisibleAuto;\n    public byte ConfigNavCursorVisibleAlways;\n    public byte MouseDrawCursor;\n    public byte ConfigMacOSXBehaviors;\n    public byte ConfigInputTrickleEventQueue;\n    public byte ConfigInputTextCursorBlink;\n    public byte ConfigInputTextEnterKeepActive;\n    public byte ConfigDragClickToInputText;\n    public byte ConfigWindowsResizeFromEdges;\n    public byte ConfigWindowsMoveFromTitleBarOnly;\n    public byte ConfigWindowsCopyContentsWithCtrlC;\n    public byte ConfigScrollbarScrollByPage;\n    public float ConfigMemoryCompactTimer;\n    public float MouseDoubleClickTime;\n    public float MouseDoubleClickMaxDist;\n    public float MouseDragThreshold;\n    public float KeyRepeatDelay;\n    public float KeyRepeatRate;\n    public byte ConfigErrorRecovery;\n    public byte ConfigErrorRecoveryEnableAssert;\n    public byte ConfigErrorRecoveryEnableDebugLog;\n    public byte ConfigErrorRecoveryEnableTooltip;\n    public byte ConfigDebugIsDebuggerPresent;\n    public byte ConfigDebugHighlightIdConflicts;\n    public byte ConfigDebugBeginReturnValueOnce;\n    public byte ConfigDebugBeginReturnValueLoop;\n    public byte ConfigDebugIgnoreFocusLoss;\n    public byte ConfigDebugIniSettings;\n    public byte* BackendPlatformName;\n    public byte* BackendRendererName;\n    public void* BackendPlatformUserData;\n    public void* BackendRendererUserData;\n    public void* BackendLanguageUserData;\n    public byte WantCaptureMouse;\n    public byte WantCaptureKeyboard;\n    public byte WantTextInput;\n    public byte WantSetMousePos;\n    public byte WantSaveIniSettings;\n    public byte NavActive;\n    public byte NavVisible;\n    public float Framerate;\n    public int MetricsRenderVertices;\n    public int MetricsRenderIndices;\n    public int MetricsRenderWindows;\n    public int MetricsActiveWindows;\n    public Vector2 MouseDelta;\n    public IntPtr Ctx;\n    public Vector2 MousePos;\n    public fixed byte MouseDown[5];\n    public float MouseWheel;\n    public float MouseWheelH;\n    public ImGuiMouseSource MouseSource;\n    public byte KeyCtrl;\n    public byte KeyShift;\n    public byte KeyAlt;\n    public byte KeySuper;\n    public ImGuiKey KeyMods;\n    public ImGuiKeyData KeysData_0;\n    public ImGuiKeyData KeysData_1;\n    public ImGuiKeyData KeysData_2;\n    public ImGuiKeyData KeysData_3;\n    public ImGuiKeyData KeysData_4;\n    public ImGuiKeyData KeysData_5;\n    public ImGuiKeyData KeysData_6;\n    public ImGuiKeyData KeysData_7;\n    public ImGuiKeyData KeysData_8;\n    public ImGuiKeyData KeysData_9;\n    public ImGuiKeyData KeysData_10;\n    public ImGuiKeyData KeysData_11;\n    public ImGuiKeyData KeysData_12;\n    public ImGuiKeyData KeysData_13;\n    public ImGuiKeyData KeysData_14;\n    public ImGuiKeyData KeysData_15;\n    public ImGuiKeyData KeysData_16;\n    public ImGuiKeyData KeysData_17;\n    public ImGuiKeyData KeysData_18;\n    public ImGuiKeyData KeysData_19;\n    public ImGuiKeyData KeysData_20;\n    public ImGuiKeyData KeysData_21;\n    public ImGuiKeyData KeysData_22;\n    public ImGuiKeyData KeysData_23;\n    public ImGuiKeyData KeysData_24;\n    public ImGuiKeyData KeysData_25;\n    public ImGuiKeyData KeysData_26;\n    public ImGuiKeyData KeysData_27;\n    public ImGuiKeyData KeysData_28;\n    public ImGuiKeyData KeysData_29;\n    public ImGuiKeyData KeysData_30;\n    public ImGuiKeyData KeysData_31;\n    public ImGuiKeyData KeysData_32;\n    public ImGuiKeyData KeysData_33;\n    public ImGuiKeyData KeysData_34;\n    public ImGuiKeyData KeysData_35;\n    public ImGuiKeyData KeysData_36;\n    public ImGuiKeyData KeysData_37;\n    public ImGuiKeyData KeysData_38;\n    public ImGuiKeyData KeysData_39;\n    public ImGuiKeyData KeysData_40;\n    public ImGuiKeyData KeysData_41;\n    public ImGuiKeyData KeysData_42;\n    public ImGuiKeyData KeysData_43;\n    public ImGuiKeyData KeysData_44;\n    public ImGuiKeyData KeysData_45;\n    public ImGuiKeyData KeysData_46;\n    public ImGuiKeyData KeysData_47;\n    public ImGuiKeyData KeysData_48;\n    public ImGuiKeyData KeysData_49;\n    public ImGuiKeyData KeysData_50;\n    public ImGuiKeyData KeysData_51;\n    public ImGuiKeyData KeysData_52;\n    public ImGuiKeyData KeysData_53;\n    public ImGuiKeyData KeysData_54;\n    public ImGuiKeyData KeysData_55;\n    public ImGuiKeyData KeysData_56;\n    public ImGuiKeyData KeysData_57;\n    public ImGuiKeyData KeysData_58;\n    public ImGuiKeyData KeysData_59;\n    public ImGuiKeyData KeysData_60;\n    public ImGuiKeyData KeysData_61;\n    public ImGuiKeyData KeysData_62;\n    public ImGuiKeyData KeysData_63;\n    public ImGuiKeyData KeysData_64;\n    public ImGuiKeyData KeysData_65;\n    public ImGuiKeyData KeysData_66;\n    public ImGuiKeyData KeysData_67;\n    public ImGuiKeyData KeysData_68;\n    public ImGuiKeyData KeysData_69;\n    public ImGuiKeyData KeysData_70;\n    public ImGuiKeyData KeysData_71;\n    public ImGuiKeyData KeysData_72;\n    public ImGuiKeyData KeysData_73;\n    public ImGuiKeyData KeysData_74;\n    public ImGuiKeyData KeysData_75;\n    public ImGuiKeyData KeysData_76;\n    public ImGuiKeyData KeysData_77;\n    public ImGuiKeyData KeysData_78;\n    public ImGuiKeyData KeysData_79;\n    public ImGuiKeyData KeysData_80;\n    public ImGuiKeyData KeysData_81;\n    public ImGuiKeyData KeysData_82;\n    public ImGuiKeyData KeysData_83;\n    public ImGuiKeyData KeysData_84;\n    public ImGuiKeyData KeysData_85;\n    public ImGuiKeyData KeysData_86;\n    public ImGuiKeyData KeysData_87;\n    public ImGuiKeyData KeysData_88;\n    public ImGuiKeyData KeysData_89;\n    public ImGuiKeyData KeysData_90;\n    public ImGuiKeyData KeysData_91;\n    public ImGuiKeyData KeysData_92;\n    public ImGuiKeyData KeysData_93;\n    public ImGuiKeyData KeysData_94;\n    public ImGuiKeyData KeysData_95;\n    public ImGuiKeyData KeysData_96;\n    public ImGuiKeyData KeysData_97;\n    public ImGuiKeyData KeysData_98;\n    public ImGuiKeyData KeysData_99;\n    public ImGuiKeyData KeysData_100;\n    public ImGuiKeyData KeysData_101;\n    public ImGuiKeyData KeysData_102;\n    public ImGuiKeyData KeysData_103;\n    public ImGuiKeyData KeysData_104;\n    public ImGuiKeyData KeysData_105;\n    public ImGuiKeyData KeysData_106;\n    public ImGuiKeyData KeysData_107;\n    public ImGuiKeyData KeysData_108;\n    public ImGuiKeyData KeysData_109;\n    public ImGuiKeyData KeysData_110;\n    public ImGuiKeyData KeysData_111;\n    public ImGuiKeyData KeysData_112;\n    public ImGuiKeyData KeysData_113;\n    public ImGuiKeyData KeysData_114;\n    public ImGuiKeyData KeysData_115;\n    public ImGuiKeyData KeysData_116;\n    public ImGuiKeyData KeysData_117;\n    public ImGuiKeyData KeysData_118;\n    public ImGuiKeyData KeysData_119;\n    public ImGuiKeyData KeysData_120;\n    public ImGuiKeyData KeysData_121;\n    public ImGuiKeyData KeysData_122;\n    public ImGuiKeyData KeysData_123;\n    public ImGuiKeyData KeysData_124;\n    public ImGuiKeyData KeysData_125;\n    public ImGuiKeyData KeysData_126;\n    public ImGuiKeyData KeysData_127;\n    public ImGuiKeyData KeysData_128;\n    public ImGuiKeyData KeysData_129;\n    public ImGuiKeyData KeysData_130;\n    public ImGuiKeyData KeysData_131;\n    public ImGuiKeyData KeysData_132;\n    public ImGuiKeyData KeysData_133;\n    public ImGuiKeyData KeysData_134;\n    public ImGuiKeyData KeysData_135;\n    public ImGuiKeyData KeysData_136;\n    public ImGuiKeyData KeysData_137;\n    public ImGuiKeyData KeysData_138;\n    public ImGuiKeyData KeysData_139;\n    public ImGuiKeyData KeysData_140;\n    public ImGuiKeyData KeysData_141;\n    public ImGuiKeyData KeysData_142;\n    public ImGuiKeyData KeysData_143;\n    public ImGuiKeyData KeysData_144;\n    public ImGuiKeyData KeysData_145;\n    public ImGuiKeyData KeysData_146;\n    public ImGuiKeyData KeysData_147;\n    public ImGuiKeyData KeysData_148;\n    public ImGuiKeyData KeysData_149;\n    public ImGuiKeyData KeysData_150;\n    public ImGuiKeyData KeysData_151;\n    public ImGuiKeyData KeysData_152;\n    public ImGuiKeyData KeysData_153;\n    public byte WantCaptureMouseUnlessPopupClose;\n    public Vector2 MousePosPrev;\n    public Vector2 MouseClickedPos_0;\n    public Vector2 MouseClickedPos_1;\n    public Vector2 MouseClickedPos_2;\n    public Vector2 MouseClickedPos_3;\n    public Vector2 MouseClickedPos_4;\n    public fixed double MouseClickedTime[5];\n    public fixed byte MouseClicked[5];\n    public fixed byte MouseDoubleClicked[5];\n    public fixed ushort MouseClickedCount[5];\n    public fixed ushort MouseClickedLastCount[5];\n    public fixed byte MouseReleased[5];\n    public fixed byte MouseDownOwned[5];\n    public fixed byte MouseDownOwnedUnlessPopupClose[5];\n    public byte MouseWheelRequestAxisSwap;\n    public byte MouseCtrlLeftAsRightClick;\n    public fixed float MouseDownDuration[5];\n    public fixed float MouseDownDurationPrev[5];\n    public fixed float MouseDragMaxDistanceSqr[5];\n    public float PenPressure;\n    public byte AppFocusLost;\n    public byte AppAcceptingEvents;\n    public ushort InputQueueSurrogate;\n    public ImVector InputQueueCharacters;\n}\n\npublic unsafe partial struct ImGuiInputTextCallbackData\n{\n    public IntPtr Ctx;\n    public ImGuiInputTextFlags EventFlag;\n    public ImGuiInputTextFlags Flags;\n    public void* UserData;\n    public ushort EventChar;\n    public ImGuiKey EventKey;\n    public byte* Buf;\n    public int BufTextLen;\n    public int BufSize;\n    public byte BufDirty;\n    public int CursorPos;\n    public int SelectionStart;\n    public int SelectionEnd;\n}\n\npublic unsafe partial struct ImGuiKeyData\n{\n    public byte Down;\n    public float DownDuration;\n    public float DownDurationPrev;\n    public float AnalogValue;\n}\n\npublic unsafe partial struct ImGuiListClipper\n{\n    public IntPtr Ctx;\n    public int DisplayStart;\n    public int DisplayEnd;\n    public int ItemsCount;\n    public float ItemsHeight;\n    public float StartPosY;\n    public double StartSeekOffsetY;\n    public void* TempData;\n}\n\npublic unsafe partial struct ImGuiMultiSelectIO\n{\n    public ImVector Requests;\n    public long RangeSrcItem;\n    public long NavIdItem;\n    public byte NavIdSelected;\n    public byte RangeSrcReset;\n    public int ItemsCount;\n}\n\npublic unsafe partial struct ImGuiOnceUponAFrame\n{\n    public int RefFrame;\n}\n\npublic unsafe partial struct ImGuiPayload\n{\n    public void* Data;\n    public int DataSize;\n    public uint SourceId;\n    public uint SourceParentId;\n    public int DataFrameCount;\n    public fixed byte DataType[33];\n    public byte Preview;\n    public byte Delivery;\n}\n\npublic unsafe partial struct ImGuiPlatformIO\n{\n    public IntPtr Platform_GetClipboardTextFn;\n    public IntPtr Platform_SetClipboardTextFn;\n    public void* Platform_ClipboardUserData;\n    public IntPtr Platform_OpenInShellFn;\n    public void* Platform_OpenInShellUserData;\n    public IntPtr Platform_SetImeDataFn;\n    public void* Platform_ImeUserData;\n    public ushort Platform_LocaleDecimalPoint;\n    public void* Renderer_RenderState;\n}\n\npublic unsafe partial struct ImGuiPlatformImeData\n{\n    public byte WantVisible;\n    public Vector2 InputPos;\n    public float InputLineHeight;\n}\n\npublic unsafe partial struct ImGuiSelectionBasicStorage\n{\n    public int Size;\n    public byte PreserveOrder;\n    public void* UserData;\n    public IntPtr AdapterIndexToStorageId;\n    public int _SelectionOrder;\n    public ImGuiStorage _Storage;\n}\n\npublic unsafe partial struct ImGuiSelectionExternalStorage\n{\n    public void* UserData;\n    public IntPtr AdapterSetItemSelected;\n}\n\npublic unsafe partial struct ImGuiSelectionRequest\n{\n    public ImGuiSelectionRequestType Type;\n    public byte Selected;\n    public sbyte RangeDirection;\n    public long RangeFirstItem;\n    public long RangeLastItem;\n}\n\npublic unsafe partial struct ImGuiSizeCallbackData\n{\n    public void* UserData;\n    public Vector2 Pos;\n    public Vector2 CurrentSize;\n    public Vector2 DesiredSize;\n}\n\npublic unsafe partial struct ImGuiStorage\n{\n    public ImVector Data;\n}\n\npublic unsafe partial struct ImGuiStyle\n{\n    public float Alpha;\n    public float DisabledAlpha;\n    public Vector2 WindowPadding;\n    public float WindowRounding;\n    public float WindowBorderSize;\n    public Vector2 WindowMinSize;\n    public Vector2 WindowTitleAlign;\n    public ImGuiDir WindowMenuButtonPosition;\n    public float ChildRounding;\n    public float ChildBorderSize;\n    public float PopupRounding;\n    public float PopupBorderSize;\n    public Vector2 FramePadding;\n    public float FrameRounding;\n    public float FrameBorderSize;\n    public Vector2 ItemSpacing;\n    public Vector2 ItemInnerSpacing;\n    public Vector2 CellPadding;\n    public Vector2 TouchExtraPadding;\n    public float IndentSpacing;\n    public float ColumnsMinSpacing;\n    public float ScrollbarSize;\n    public float ScrollbarRounding;\n    public float GrabMinSize;\n    public float GrabRounding;\n    public float LogSliderDeadzone;\n    public float TabRounding;\n    public float TabBorderSize;\n    public float TabMinWidthForCloseButton;\n    public float TabBarBorderSize;\n    public float TabBarOverlineSize;\n    public float TableAngledHeadersAngle;\n    public Vector2 TableAngledHeadersTextAlign;\n    public ImGuiDir ColorButtonPosition;\n    public Vector2 ButtonTextAlign;\n    public Vector2 SelectableTextAlign;\n    public float SeparatorTextBorderSize;\n    public Vector2 SeparatorTextAlign;\n    public Vector2 SeparatorTextPadding;\n    public Vector2 DisplayWindowPadding;\n    public Vector2 DisplaySafeAreaPadding;\n    public float MouseCursorScale;\n    public byte AntiAliasedLines;\n    public byte AntiAliasedLinesUseTex;\n    public byte AntiAliasedFill;\n    public float CurveTessellationTol;\n    public float CircleTessellationMaxError;\n    public Vector4 Colors_0;\n    public Vector4 Colors_1;\n    public Vector4 Colors_2;\n    public Vector4 Colors_3;\n    public Vector4 Colors_4;\n    public Vector4 Colors_5;\n    public Vector4 Colors_6;\n    public Vector4 Colors_7;\n    public Vector4 Colors_8;\n    public Vector4 Colors_9;\n    public Vector4 Colors_10;\n    public Vector4 Colors_11;\n    public Vector4 Colors_12;\n    public Vector4 Colors_13;\n    public Vector4 Colors_14;\n    public Vector4 Colors_15;\n    public Vector4 Colors_16;\n    public Vector4 Colors_17;\n    public Vector4 Colors_18;\n    public Vector4 Colors_19;\n    public Vector4 Colors_20;\n    public Vector4 Colors_21;\n    public Vector4 Colors_22;\n    public Vector4 Colors_23;\n    public Vector4 Colors_24;\n    public Vector4 Colors_25;\n    public Vector4 Colors_26;\n    public Vector4 Colors_27;\n    public Vector4 Colors_28;\n    public Vector4 Colors_29;\n    public Vector4 Colors_30;\n    public Vector4 Colors_31;\n    public Vector4 Colors_32;\n    public Vector4 Colors_33;\n    public Vector4 Colors_34;\n    public Vector4 Colors_35;\n    public Vector4 Colors_36;\n    public Vector4 Colors_37;\n    public Vector4 Colors_38;\n    public Vector4 Colors_39;\n    public Vector4 Colors_40;\n    public Vector4 Colors_41;\n    public Vector4 Colors_42;\n    public Vector4 Colors_43;\n    public Vector4 Colors_44;\n    public Vector4 Colors_45;\n    public Vector4 Colors_46;\n    public Vector4 Colors_47;\n    public Vector4 Colors_48;\n    public Vector4 Colors_49;\n    public Vector4 Colors_50;\n    public Vector4 Colors_51;\n    public Vector4 Colors_52;\n    public Vector4 Colors_53;\n    public Vector4 Colors_54;\n    public Vector4 Colors_55;\n    public float HoverStationaryDelay;\n    public float HoverDelayShort;\n    public float HoverDelayNormal;\n    public ImGuiHoveredFlags HoverFlagsForTooltipMouse;\n    public ImGuiHoveredFlags HoverFlagsForTooltipNav;\n}\n\npublic unsafe partial struct ImGuiTableColumnSortSpecs\n{\n    public uint ColumnUserID;\n    public short ColumnIndex;\n    public short SortOrder;\n    public ImGuiSortDirection SortDirection;\n}\n\npublic unsafe partial struct ImGuiTableSortSpecs\n{\n    public ImGuiTableColumnSortSpecs* Specs;\n    public int SpecsCount;\n    public byte SpecsDirty;\n}\n\npublic unsafe partial struct ImGuiTextBuffer\n{\n    public ImVector Buf;\n}\n\npublic unsafe partial struct ImGuiTextFilter\n{\n    public fixed byte InputBuf[256];\n    public ImVector Filters;\n    public int CountGrep;\n}\n\npublic unsafe partial struct ImGuiTextRange\n{\n    public byte* b;\n    public byte* e;\n}\n\npublic unsafe partial struct ImGuiViewport\n{\n    public uint ID;\n    public ImGuiViewportFlags Flags;\n    public Vector2 Pos;\n    public Vector2 Size;\n    public Vector2 WorkPos;\n    public Vector2 WorkSize;\n    public void* PlatformHandle;\n    public void* PlatformHandleRaw;\n}\n\npublic unsafe partial struct ImVec2\n{\n    public float x;\n    public float y;\n}\n\npublic unsafe partial struct ImVec4\n{\n    public float x;\n    public float y;\n    public float z;\n    public float w;\n}\n\n"
  },
  {
    "path": "src/JitterDemo/Renderer/DebugRenderer.cs",
    "content": "using System;\nusing JitterDemo.Renderer.OpenGL;\n\nnamespace JitterDemo.Renderer;\n\npublic class LineShader : BasicShader\n{\n    public UniformVector4 Color { get; }\n\n    public UniformMatrix4 View { get; }\n    public UniformMatrix4 Projection { get; }\n\n    public LineShader() : base(vshader, fshader)\n    {\n        View = GetUniform<UniformMatrix4>(\"view\");\n        Projection = GetUniform<UniformMatrix4>(\"projection\");\n        Color = GetUniform<UniformVector4>(\"color\");\n    }\n\n    private static readonly string vshader = @\"\n        #version 330 core\n        layout (location = 0) in vec3 aPos;\n        \n        uniform mat4 view;\n        uniform mat4 projection;\n\n        void main()\n        {\n            gl_Position = projection * view * vec4(aPos, 1.0);\n        }\n        \";\n\n    private static readonly string fshader = @\"\n        #version 330 core\n\n        uniform vec4 color;\n    \n        out vec4 FragColor;\n     \n        void main()\n        {\n            FragColor = color;\n        }\n\n        \";\n}\n\npublic class DebugRenderer\n{\n    public enum Color\n    {\n        White = 0,\n        Red = 1,\n        Green = 2,\n        NumColor = 3\n    }\n\n    private readonly Vector4[] colors =\n    {\n        new(1, 1, 1, 1),\n        new(1, 0, 0, 1),\n        new(0, 1, 0, 1)\n    };\n\n    private struct Line\n    {\n        public Vector3 From;\n        public Vector3 To;\n\n        public Line(in Vector3 from, in Vector3 to)\n        {\n            From = from;\n            To = to;\n        }\n\n        public Line(float minx, float miny, float minz, float maxx, float maxy, float maxz)\n        {\n            From = new Vector3(minx, miny, minz);\n            To = new Vector3(maxx, maxy, maxz);\n        }\n    }\n\n    private class LineBuffer\n    {\n        public Vector3[] Vertices = new Vector3[64];\n        public LineVertexIndex[] Indices = new LineVertexIndex[64];\n\n        public int VertexCount;\n        public int IndexCount;\n\n        public void Add(float x, float y, float z)\n        {\n            if (VertexCount == Vertices.Length)\n            {\n                Array.Resize(ref Vertices, VertexCount * 2);\n            }\n\n            Vertices[VertexCount++] = new Vector3(x, y, z);\n        }\n\n        public void Add(uint i1, uint i2)\n        {\n            if (IndexCount == Indices.Length)\n            {\n                Array.Resize(ref Indices, IndexCount * 2);\n            }\n\n            Indices[IndexCount++] = new LineVertexIndex(i1, i2);\n        }\n\n        public void Clear()\n        {\n            VertexCount = IndexCount = 0;\n        }\n    }\n\n    private readonly LineBuffer[] buffers = CreateBuffers();\n\n    private static LineBuffer[] CreateBuffers()\n    {\n        var result = new LineBuffer[(int)Color.NumColor];\n        for (int i = 0; i < result.Length; i++)\n            result[i] = new LineBuffer();\n        return result;\n    }\n\n    private VertexArrayObject vao = null!;\n    private LineShader shader = null!;\n    private ArrayBuffer ab = null!;\n    private ElementArrayBuffer eab = null!;\n\n    public void Draw()\n    {\n        Camera camera = RenderWindow.Instance.Camera;\n\n        shader.Use();\n\n        shader.Color.Set(new Vector4(0, 1, 0, 1));\n\n        shader.Projection.Set(camera.ProjectionMatrix);\n        shader.View.Set(camera.ViewMatrix);\n\n        vao.Bind();\n\n        for (int i = 0; i < (int)Color.NumColor; i++)\n        {\n            var lines = buffers[i];\n\n            if (lines.IndexCount == 0) continue;\n\n            eab.SetData(lines.Indices, lines.IndexCount);\n            ab.SetData(lines.Vertices, lines.VertexCount);\n\n            shader.Color.Set(colors[i]);\n            GLDevice.DrawElements(DrawMode.Lines, lines.IndexCount * 2, IndexType.UnsignedInt, 0);\n\n            lines.Clear();\n        }\n\n        GLDevice.Disable(Capability.Blend);\n        GLDevice.Enable(Capability.DepthTest);\n        GLDevice.Enable(Capability.CullFace);\n    }\n\n    public void PushLine(Color color, in Vector3 pointA, in Vector3 pointB)\n    {\n        var list = buffers[(int)color];\n        uint offset = (uint)list.VertexCount;\n\n        list.Add(pointA.X, pointA.Y, pointA.Z);\n        list.Add(pointB.X, pointB.Y, pointB.Z);\n        list.Add(offset + 0, offset + 1);\n    }\n\n    public void PushBox(Color color, in Vector3 min, in Vector3 max)\n    {\n        var list = buffers[(int)color];\n\n        uint offset = (uint)list.VertexCount;\n\n        list.Add(min.X, min.Y, min.Z);\n        list.Add(max.X, min.Y, min.Z);\n        list.Add(min.X, max.Y, min.Z);\n        list.Add(min.X, min.Y, max.Z);\n        list.Add(max.X, max.Y, min.Z);\n        list.Add(min.X, max.Y, max.Z);\n        list.Add(max.X, min.Y, max.Z);\n        list.Add(max.X, max.Y, max.Z);\n\n        list.Add(offset + 0, offset + 1);\n        list.Add(offset + 0, offset + 2);\n        list.Add(offset + 0, offset + 3);\n        list.Add(offset + 1, offset + 4);\n        list.Add(offset + 1, offset + 6);\n        list.Add(offset + 2, offset + 4);\n        list.Add(offset + 2, offset + 5);\n        list.Add(offset + 3, offset + 5);\n        list.Add(offset + 3, offset + 6);\n        list.Add(offset + 4, offset + 7);\n        list.Add(offset + 5, offset + 7);\n        list.Add(offset + 6, offset + 7);\n    }\n\n    public void PushPoint(Color color, in Vector3 pos, float halfSize = 1.0f)\n    {\n        var list = buffers[(int)color];\n        uint offset = (uint)list.VertexCount;\n\n        list.Add(pos.X - halfSize, pos.Y, pos.Z);\n        list.Add(pos.X + halfSize, pos.Y, pos.Z);\n        list.Add(pos.X, pos.Y - halfSize, pos.Z);\n        list.Add(pos.X, pos.Y + halfSize, pos.Z);\n        list.Add(pos.X, pos.Y, pos.Z - halfSize);\n        list.Add(pos.X, pos.Y, pos.Z + halfSize);\n\n        list.Add(offset + 0, offset + 1);\n        list.Add(offset + 2, offset + 3);\n        list.Add(offset + 4, offset + 5);\n    }\n\n    public void Load()\n    {\n        shader = new LineShader();\n\n        vao = new VertexArrayObject();\n\n        ab = new ArrayBuffer();\n        eab = new ElementArrayBuffer();\n\n        int sof = sizeof(float);\n\n        vao.VertexAttributes[0].Set(ab, 3, VertexAttributeType.Float, false, 3 * sof, 0 * sof); // position\n        vao.ElementArrayBuffer = eab;\n    }\n}"
  },
  {
    "path": "src/JitterDemo/Renderer/ImGuiRenderer.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Runtime.CompilerServices;\nusing JitterDemo.Renderer.DearImGui;\nusing JitterDemo.Renderer.OpenGL;\nusing JitterDemo.Renderer.OpenGL.Native;\n\nnamespace JitterDemo.Renderer;\n\npublic class ImGuiShader : BasicShader\n{\n    public UniformMatrix4 Projection { get; }\n\n    public ImGuiShader() : base(vshader, fshader)\n    {\n        Projection = GetUniform<UniformMatrix4>(\"projection_matrix\");\n    }\n\n    private static readonly string vshader = @\"\n            #version 330 core\n\n            uniform mat4 projection_matrix;\n\n            layout (location = 0) in vec2 in_position;\n            layout (location = 1) in vec2 in_texCoord;\n            layout (location = 2) in vec4 in_color;\n\n            out vec4 color;\n            out vec2 texCoord;\n\n            void main()\n            {\n                gl_Position = projection_matrix * vec4(in_position, 0, 1);\n                color = in_color;\n                texCoord = in_texCoord;\n            }\n        \";\n\n    private static readonly string fshader = @\"\n            #version 330 core\n\n            uniform sampler2D FontTexture;\n\n            in vec4 color;\n            in vec2 texCoord;\n\n            out vec4 outputColor;\n\n            void main()\n            {\n                outputColor = color * texture(FontTexture, texCoord);\n            }\n        \";\n}\n\npublic class ImGuiRenderer\n{\n    private ArrayBuffer ab = null!;\n    private VertexArrayObject vao = null!;\n    private ElementArrayBuffer eab = null!;\n    private ImGuiShader shader = null!;\n\n    private readonly List<Texture2D> textures = new();\n\n    public bool WantsCaptureMouse { private set; get; }\n    public bool WantsCaptureKeyboard { private set; get; }\n\n    private unsafe void RebuildFontAtlas()\n    {\n        ImGuiIO* io = ImGuiNative.igGetIO();\n        byte* pixel;\n        int width, height, bpp;\n\n        ImGuiNative.ImFontAtlas_GetTexDataAsRGBA32(io->Fonts, &pixel, &width, &height, &bpp);\n\n        var texture = new Texture2D();\n        texture.LoadImage((IntPtr)pixel, width, height, false);\n        textures.Add(texture);\n\n        ImGuiNative.ImFontAtlas_SetTexID(io->Fonts, textures.Count - 1);\n        ImGuiNative.ImFontAtlas_ClearTexData(io->Fonts);\n    }\n\n    public unsafe void Load()\n    {\n        shader = new ImGuiShader();\n        vao = new VertexArrayObject();\n\n        ImFontAtlas* shared_font_atlas = null;\n        IntPtr ctx = ImGuiNative.igCreateContext(shared_font_atlas);\n        ImGuiNative.igSetCurrentContext(ctx);\n\n        int sof = sizeof(float);\n\n        ab = new ArrayBuffer();\n        eab = new ElementArrayBuffer();\n        vao.ElementArrayBuffer = eab;\n\n        int stride = Unsafe.SizeOf<ImDrawVert>();\n        vao.VertexAttributes[0].Set(ab, 2, VertexAttributeType.Float, false, stride, 0);\n        vao.VertexAttributes[1].Set(ab, 2, VertexAttributeType.Float, false, stride, 2 * sof);\n        vao.VertexAttributes[2].Set(ab, 4, VertexAttributeType.UnsignedByte, true, stride, 4 * sof);\n\n        RebuildFontAtlas();\n\n        ImGuiIO* io = ImGuiNative.igGetIO();\n        io->DeltaTime = 0;\n        (int fbw, int fbh) = RenderWindow.Instance.FramebufferSize;\n        io->DisplaySize = new Vector2(fbw, fbh);\n\n        ImGui.DisableIni();\n    }\n\n    public unsafe void Draw(float deltaTime)\n    {\n        ImGuiIO* pio = ImGuiNative.igGetIO();\n\n        pio->DeltaTime = deltaTime;\n\n        var r = RenderWindow.Instance;\n        var rr = r.FramebufferSize;\n        \n        float scaleX = (float)rr.Width / (float)r.Width;\n        float scaleY = (float)rr.Height / (float)r.Height;\n\n        Mouse m = Mouse.Instance;\n        ImGuiNative.ImGuiIO_AddMousePosEvent(pio, (float)m.Position.X * scaleX, (float)m.Position.Y * scaleY);\n        ImGuiNative.ImGuiIO_AddMouseButtonEvent(pio, 0, Convert.ToByte(m.IsButtonDown(Mouse.Button.Left)));\n        ImGuiNative.ImGuiIO_AddMouseButtonEvent(pio, 1, Convert.ToByte(m.IsButtonDown(Mouse.Button.Right)));\n        ImGuiNative.ImGuiIO_AddMouseButtonEvent(pio, 2, Convert.ToByte(m.IsButtonDown(Mouse.Button.Middle)));\n        ImGuiNative.ImGuiIO_AddMouseWheelEvent(pio, (float)m.ScrollWheel.X, (float)m.ScrollWheel.Y);\n\n        Keyboard k = Keyboard.Instance;\n        foreach (uint inputc in k.CharInput)\n        {\n            ImGuiNative.ImGuiIO_AddInputCharacter(pio, inputc);\n        }\n\n        ImGuiNative.ImGuiIO_AddKeyEvent(pio, ImGuiKey.LeftArrow, Convert.ToByte(k.IsKeyDown(Keyboard.Key.Left)));\n        ImGuiNative.ImGuiIO_AddKeyEvent(pio, ImGuiKey.RightArrow, Convert.ToByte(k.IsKeyDown(Keyboard.Key.Right)));\n        ImGuiNative.ImGuiIO_AddKeyEvent(pio, ImGuiKey.UpArrow, Convert.ToByte(k.IsKeyDown(Keyboard.Key.Up)));\n        ImGuiNative.ImGuiIO_AddKeyEvent(pio, ImGuiKey.DownArrow, Convert.ToByte(k.IsKeyDown(Keyboard.Key.Down)));\n        ImGuiNative.ImGuiIO_AddKeyEvent(pio, ImGuiKey.PageDown, Convert.ToByte(k.IsKeyDown(Keyboard.Key.PageDown)));\n        ImGuiNative.ImGuiIO_AddKeyEvent(pio, ImGuiKey.PageUp, Convert.ToByte(k.IsKeyDown(Keyboard.Key.PageUp)));\n        ImGuiNative.ImGuiIO_AddKeyEvent(pio, ImGuiKey.LeftCtrl, Convert.ToByte(k.IsKeyDown(Keyboard.Key.LeftControl)));\n        ImGuiNative.ImGuiIO_AddKeyEvent(pio, ImGuiKey.LeftAlt, Convert.ToByte(k.IsKeyDown(Keyboard.Key.LeftAlt)));\n        ImGuiNative.ImGuiIO_AddKeyEvent(pio, ImGuiKey.ModAlt, Convert.ToByte(k.IsKeyDown(Keyboard.Key.RightAlt)));\n        ImGuiNative.ImGuiIO_AddKeyEvent(pio, ImGuiKey.Backspace, Convert.ToByte(k.IsKeyDown(Keyboard.Key.Backspace)));\n        ImGuiNative.ImGuiIO_AddKeyEvent(pio, ImGuiKey.Tab, Convert.ToByte(k.IsKeyDown(Keyboard.Key.Tab)));\n        ImGuiNative.ImGuiIO_AddKeyEvent(pio, ImGuiKey.LeftShift, Convert.ToByte(k.IsKeyDown(Keyboard.Key.LeftShift)));\n        ImGuiNative.ImGuiIO_AddKeyEvent(pio, ImGuiKey.RightShift, Convert.ToByte(k.IsKeyDown(Keyboard.Key.RightShift)));\n        ImGuiNative.ImGuiIO_AddKeyEvent(pio, ImGuiKey.Delete, Convert.ToByte(k.IsKeyDown(Keyboard.Key.Delete)));\n        ImGuiNative.ImGuiIO_AddKeyEvent(pio, ImGuiKey.End, Convert.ToByte(k.IsKeyDown(Keyboard.Key.End)));\n        ImGuiNative.ImGuiIO_AddKeyEvent(pio, ImGuiKey.Home, Convert.ToByte(k.IsKeyDown(Keyboard.Key.Home)));\n        ImGuiNative.ImGuiIO_AddKeyEvent(pio, ImGuiKey.Escape, Convert.ToByte(k.IsKeyDown(Keyboard.Key.Escape)));\n\n        WantsCaptureKeyboard = Convert.ToBoolean(pio->WantCaptureKeyboard);\n        WantsCaptureMouse = Convert.ToBoolean(pio->WantCaptureMouse);\n\n        pio->DisplaySize = new Vector2(rr.Width, rr.Height);\n        pio->DisplayFramebufferScale = new Vector2(1, 1);\n\n        vao.Bind();\n        shader.Use();\n\n        Matrix4 pm = MatrixHelper.CreateOrthographicOffCenter(0.0f, rr.Width, rr.Height, 0, -1f, +1f);\n        shader.Projection.Set(pm);\n\n        GLDevice.Enable(Capability.Blend);\n        GLDevice.Enable(Capability.ScissorTest);\n        GLDevice.Disable(Capability.DepthTest);\n        GLDevice.Disable(Capability.CullFace);\n\n        ImDrawData* pdraw_data = ImGuiNative.igGetDrawData();\n\n        ImGuiNative.ImDrawData_ScaleClipRects(pdraw_data, pio->DisplayFramebufferScale);\n\n        for (int i = 0; i < pdraw_data->CmdListsCount; i++)\n        {\n            ImDrawList* pcmdList = (ImDrawList*)pdraw_data->CmdLists.Ref<IntPtr>(i);\n\n            ab.SetData(pcmdList->VtxBuffer.Data, pcmdList->VtxBuffer.Size * Unsafe.SizeOf<ImDrawVert>(), GLC.DYNAMIC_DRAW);\n            eab.SetData(pcmdList->IdxBuffer.Data, pcmdList->IdxBuffer.Size * sizeof(ushort), GLC.DYNAMIC_DRAW);\n\n            for (int pcmdi = 0; pcmdi < pcmdList->CmdBuffer.Size; pcmdi++)\n            {\n                ref ImDrawCmd cmdBufferData = ref pcmdList->CmdBuffer.Ref<ImDrawCmd>(pcmdi);\n\n                textures[(int)cmdBufferData.TextureId].Bind(0);\n                var clip = cmdBufferData.ClipRect;\n                GL.Scissor((int)clip.X, rr.Height - (int)clip.W, (int)(clip.Z - clip.X), (int)(clip.W - clip.Y));\n                GLDevice.DrawElementsBaseVertex(DrawMode.Triangles, (int)cmdBufferData.ElemCount,\n                    IndexType.UnsignedShort, (int)cmdBufferData.IdxOffset * sizeof(ushort),\n                    (int)cmdBufferData.VtxOffset);\n            }\n        }\n\n        GLDevice.Disable(Capability.Blend);\n        GLDevice.Enable(Capability.DepthTest);\n        GLDevice.Enable(Capability.CullFace);\n        GLDevice.Disable(Capability.ScissorTest);\n    }\n}"
  },
  {
    "path": "src/JitterDemo/Renderer/ImportResolver.cs",
    "content": "using System;\nusing System.Runtime.InteropServices;\n\nnamespace JitterDemo.Renderer;\n\n/// <summary>\n/// Resolve native libraries from runtime directory.\n/// </summary>\npublic static class ImportResolver\n{\n    private static string archStr = string.Empty;\n\n    public static void Load()\n    {\n        if (archStr.Length != 0) return;\n\n        archStr = \"_\";\n\n        if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) archStr += \"w\";\n        else if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux)) archStr += \"l\";\n        else if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) archStr += \"o\";\n\n        switch (RuntimeInformation.OSArchitecture)\n        {\n            case Architecture.Arm64:\n                archStr += \"a\";\n                break;\n            case Architecture.X64:\n                archStr += \"x\";\n                break;\n            case Architecture.X86:\n                archStr += \"i\";\n                break;\n        }\n\n        NativeLibrary.SetDllImportResolver(typeof(ImportResolver).Assembly, (libraryName, _, _) =>\n        {\n            switch (libraryName)\n            {\n                case DearImGui.ImGuiNative.LIBCIMGUI:\n                    return archStr switch\n                    {\n                        \"_wa\" => NativeLibrary.Load(\"runtimes/win-arm64/native/cimgui.dll\"),\n                        \"_wx\" => NativeLibrary.Load(\"runtimes/win-x64/native/cimgui.dll\"),\n                        \"_wi\" => NativeLibrary.Load(\"runtimes/win-x86/native/cimgui.dll\"),\n                        \"_la\" => NativeLibrary.Load(\"runtimes/linux-arm64/native/cimgui.so\"),\n                        \"_lx\" => NativeLibrary.Load(\"runtimes/linux-x64/native/cimgui.so\"),\n                        \"_oa\" => NativeLibrary.Load(\"runtimes/osx-arm64/native/cimgui.dylib\"),\n                        \"_ox\" => NativeLibrary.Load(\"runtimes/osx-x64/native/cimgui.dylib\"),\n                        _ => throw new NotSupportedException(\"Operating system/architecture not supported.\")\n                    };\n                case OpenGL.Native.GLFW.LIBGLFW:\n                    return archStr switch\n                    {\n                        \"_wa\" => NativeLibrary.Load(\"runtimes/win-arm64/native/glfw3.dll\"),\n                        \"_wx\" => NativeLibrary.Load(\"runtimes/win-x64/native/glfw3.dll\"),\n                        \"_wi\" => NativeLibrary.Load(\"runtimes/win-x86/native/glfw3.dll\"),\n                        \"_la\" => NativeLibrary.Load(\"runtimes/linux-arm64/native/libglfw.so.3\"),\n                        \"_lx\" => NativeLibrary.Load(\"runtimes/linux-x64/native/libglfw.so.3\"),\n                        \"_oa\" => NativeLibrary.Load(\"runtimes/osx-arm64/native/libglfw.3.dylib\"),\n                        \"_ox\" => NativeLibrary.Load(\"runtimes/osx-x64/native/libglfw.3.dylib\"),\n                        _ => throw new NotSupportedException(\"Operating system/architecture not supported.\")\n                    };\n                default:\n                    throw new InvalidOperationException(\"Unknown library.\");\n            }\n        });\n    }\n}"
  },
  {
    "path": "src/JitterDemo/Renderer/OpenGL/GLDebug.cs",
    "content": "/* Copyright <2022> <Thorben Linneweber>\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n *\n */\n\nusing JitterDemo.Renderer.OpenGL.Native;\n\nnamespace JitterDemo.Renderer.OpenGL;\n\npublic enum GLDebugMessageSeverity : uint\n{\n    Notification = GLC.DEBUG_SEVERITY_NOTIFICATION,\n    Low = GLC.DEBUG_SEVERITY_LOW,\n    Medium = GLC.DEBUG_SEVERITY_MEDIUM,\n    High = GLC.DEBUG_SEVERITY_HIGH\n}\n\npublic enum GLDebugMessageSource : uint\n{\n    API = GLC.DEBUG_SOURCE_API,\n    WindowSystem = GLC.DEBUG_SOURCE_WINDOW_SYSTEM,\n    ShaderCompiler = GLC.DEBUG_SOURCE_SHADER_COMPILER,\n    ThirdParty = GLC.DEBUG_SOURCE_THIRD_PARTY,\n    Application = GLC.DEBUG_SOURCE_APPLICATION,\n    Other = GLC.DEBUG_SOURCE_OTHER\n}\n\npublic enum GLDebugMessageType : uint\n{\n    Error = GLC.DEBUG_TYPE_ERROR,\n    DeprecatedBehavior = GLC.DEBUG_TYPE_DEPRECATED_BEHAVIOR,\n    UndefinedBehavior = GLC.DEBUG_TYPE_UNDEFINED_BEHAVIOR,\n    Portability = GLC.DEBUG_TYPE_PORTABILITY,\n    Performance = GLC.DEBUG_TYPE_PERFORMANCE,\n    Marker = GLC.DEBUG_TYPE_MARKER,\n    PushGroup = GLC.DEBUG_TYPE_PUSH_GROUP,\n    PopGroup = GLC.DEBUG_TYPE_POP_GROUP,\n    Other = GLC.DEBUG_TYPE_OTHER\n}\n\npublic struct GLDebugMessage\n{\n    public GLDebugMessageSeverity Severity;\n    public GLDebugMessageSource Source;\n    public GLDebugMessageType Type;\n    public string Message;\n    public uint Id;\n}"
  },
  {
    "path": "src/JitterDemo/Renderer/OpenGL/GLDevice.cs",
    "content": "/* Copyright <2022> <Thorben Linneweber>\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n *\n */\n\nusing System.Runtime.CompilerServices;\nusing JitterDemo.Renderer.OpenGL.Native;\n\nnamespace JitterDemo.Renderer.OpenGL;\n\npublic enum DrawMode : uint\n{\n    Lines = GLC.LINES,\n    Triangles = GLC.TRIANGLES\n}\n\npublic enum CullMode : uint\n{\n    Front = GLC.FRONT,\n    Back = GLC.BACK,\n    FrontAndBack = GLC.FRONT_AND_BACK\n}\n\npublic enum IndexType : uint\n{\n    UnsignedInt = GLC.UNSIGNED_INT,\n    UnsignedShort = GLC.UNSIGNED_SHORT\n}\n\npublic enum ClearFlags : uint\n{\n    ColorBuffer = GLC.COLOR_BUFFER_BIT,\n    DepthBuffer = GLC.DEPTH_BUFFER_BIT,\n    StencilBuffer = GLC.STENCIL_BUFFER_BIT\n}\n\npublic enum BlendFunction : uint\n{\n    Zero = GLC.ZERO,\n    One = GLC.ONE,\n    SourceColor = GLC.SRC_COLOR,\n    OneMinusSourceColor = GLC.ONE_MINUS_SRC_COLOR,\n    DestinationColor = GLC.DST_COLOR,\n    OneMinusDestinationColor = GLC.ONE_MINUS_DST_COLOR,\n    SourceAlpha = GLC.SRC_ALPHA,\n    OneMinusSourceAlpha = GLC.ONE_MINUS_SRC_ALPHA,\n    DestinationAlpha = GLC.DST_ALPHA,\n    OneMinusDestinationAlpha = GLC.ONE_MINUS_DST_ALPHA,\n    ConstantColor = GLC.CONSTANT_COLOR,\n    OneMinusConstantColor = GLC.ONE_MINUS_CONSTANT_COLOR,\n    ConstantAlpha = GLC.CONSTANT_ALPHA,\n    OneMinusConstantAlpha = GLC.ONE_MINUS_CONSTANT_ALPHA,\n    SourceAlphaSaturate = GLC.SRC_ALPHA_SATURATE,\n    Source1Color = GLC.SRC1_COLOR,\n    OneMinusSource1Color = GLC.ONE_MINUS_SRC1_COLOR,\n    Source1Alpha = GLC.SRC1_ALPHA,\n    OneMinusSource1 = GLC.ONE_MINUS_SRC1_ALPHA\n}\n\npublic enum Capability : uint\n{\n    Blend = GLC.BLEND,\n    DepthTest = GLC.DEPTH_TEST,\n    CullFace = GLC.CULL_FACE,\n    ScissorTest = GLC.SCISSOR_TEST\n}\n\npublic static class GLDevice\n{\n    static GLDevice()\n    {\n        // make sure the \"default\" instances are registered\n        RuntimeHelpers.RunClassConstructor(typeof(FrameBuffer).TypeHandle);\n    }\n\n    public static ShaderProgram ActiveShaderProgram\n    {\n        get\n        {\n            uint active = (uint)GL.GetIntegerv(GLC.CURRENT_PROGRAM);\n            return GLObject.Retrieve<ShaderProgram>(active);\n        }\n    }\n\n    public static FrameBuffer ActiveFrameBuffer\n    {\n        get\n        {\n            uint active = (uint)GL.GetIntegerv(GLC.DRAW_FRAMEBUFFER_BINDING);\n            return GLObject.Retrieve<FrameBuffer>(active);\n        }\n    }\n\n    public static Texture2D ActiveTexture2D\n    {\n        get\n        {\n            uint active = (uint)GL.GetIntegerv(GLC.TEXTURE_BINDING_2D);\n            return GLObject.Retrieve<Texture2D>(active);\n        }\n    }\n\n    public static void DrawElementsInstanced(DrawMode mode, int count, IndexType type, int start, int num)\n    {\n        GL.DrawElementsInstanced((uint)mode, count, (uint)type, start, num);\n    }\n\n    public static void DrawElementsBaseVertex(DrawMode mode, int count, IndexType type, int start, int baseVertex)\n    {\n        GL.DrawElementsBaseVertex((uint)mode, count, (uint)type, start, baseVertex);\n    }\n\n    public static void DrawElements(DrawMode mode, int count, IndexType type, int start)\n    {\n        GL.DrawElements((uint)mode, count, (uint)type, start);\n    }\n\n    public static void DrawArrays(DrawMode mode, int first, int count)\n    {\n        GL.DrawArrays((uint)mode, first, count);\n    }\n\n    public static void Clear(ClearFlags flags)\n    {\n        GL.Clear((uint)flags);\n    }\n\n    public static void SetCullFaceMode(CullMode cullMode)\n    {\n        GL.CullFace((uint)cullMode);\n    }\n\n    public static void SetViewport(int x, int y, int width, int height)\n    {\n        GL.Viewport(x, y, width, height);\n    }\n\n    public static void SetBlendFunction(BlendFunction sfactor, BlendFunction dfactor)\n    {\n        GL.BlendFunc((uint)sfactor, (uint)dfactor);\n    }\n\n    public static void Enable(Capability capability)\n    {\n        GL.Enable((uint)capability);\n    }\n\n    public static void Disable(Capability capability)\n    {\n        GL.Disable((uint)capability);\n    }\n\n    public static void SetClearColor(float r, float g, float b, float a)\n    {\n        GL.ClearColor(r, g, b, a);\n    }\n}"
  },
  {
    "path": "src/JitterDemo/Renderer/OpenGL/GLFWWindow.cs",
    "content": "﻿/* Copyright <2022> <Thorben Linneweber>\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n *\n */\n\nusing System;\nusing System.Diagnostics;\nusing System.Runtime.InteropServices;\nusing System.Text;\nusing System.Threading;\nusing JitterDemo.Renderer.OpenGL.Native;\n\nnamespace JitterDemo.Renderer.OpenGL;\n\npublic struct CreationSettings\n{\n    public int Width;\n    public int Height;\n    public string Title;\n\n    public CreationSettings(int width, int height, string title)\n    {\n        Title = title;\n        Width = width;\n        Height = height;\n    }\n}\n\npublic class OpenGLVersionNotSupportedException : Exception\n{\n    public OpenGLVersionNotSupportedException(string msg) : base(msg)\n    {\n    }\n}\n\npublic class GLFWWindow\n{\n    private string title = string.Empty;\n\n    private GLFW.ErrorDelegate errorFunction = null!;\n\n    public virtual void Draw()\n    {\n    }\n\n    public virtual void Load()\n    {\n    }\n\n    public IntPtr Handle { get; private set; }\n\n    private int width;\n    private int height;\n\n    public (int Width, int Height) FramebufferSize\n    {\n        get\n        {\n            int fbw = 0, fbh = 0;\n            GLFW.GetFramebufferSize(Handle, ref fbw, ref fbh);\n            return (fbw, fbh);\n        }\n    }\n\n    public int Width\n    {\n        get => width;\n        set\n        {\n            width = value;\n            GLFW.SetWindowSize(Handle, width, height);\n        }\n    }\n\n    public int Height\n    {\n        get => height;\n        set\n        {\n            height = value;\n            GLFW.SetWindowSize(Handle, width, height);\n        }\n    }\n\n    public string Title\n    {\n        get => title;\n        set\n        {\n            title = value;\n            GLFW.SetWindowTitle(Handle, value);\n        }\n    }\n\n    public double Time { get; private set; }\n\n    public bool VerticalSync\n    {\n        set\n        {\n            GLFW.MakeContextCurrent(Handle);\n            GLFW.SwapInterval(value ? 1 : 0);\n        }\n    }\n\n    public Keyboard Keyboard { private set; get; } = null!;\n\n    public Mouse Mouse { private set; get; } = null!;\n\n    private static bool Created;\n\n    public GLFWWindow()\n    {\n        callback = DebugMessageCallback;\n\n        if (Created) throw new NotSupportedException(\"There is only support for one GLFW-Window.\");\n        Created = true;\n    }\n\n    public (int, int) OpenGLVersion { get; private set; }\n\n    public (int, int, int) GLFWVersion { get; private set; }\n\n    public void Open(CreationSettings settings)\n    {\n        if (GLFW.Init() == 0)\n        {\n            throw new Exception(\"Unable to initialize GLFW.\");\n        }\n\n        GLFW.GetVersion(out int glfwmajor, out int glfwminor, out int glfwrev);\n        GLFWVersion = (glfwmajor, glfwminor, glfwrev);\n\n        string version = GLFW.GetVersionString();\n        Debug.WriteLine($\"DEBUG: GLFW-Version string: {version}\");\n\n        InitWindow(settings);\n\n        int glmajor = GL.GetIntegerv(GLC.MAJOR_VERSION);\n        int glminor = GL.GetIntegerv(GLC.MINOR_VERSION);\n        OpenGLVersion = (glmajor, glminor);\n\n        Debug.WriteLine($\"DEBUG: Using OpenGL {glmajor}.{glminor}\");\n\n        if (glmajor < 3 || (glmajor == 3 && glminor < 3))\n        {\n            throw new OpenGLVersionNotSupportedException(\n                $\"OpenGL version {glmajor}.{glminor} detected. At least OpenGL 3.3 is required to run this program.\");\n        }\n\n        // https://www.khronos.org/opengl/wiki/Debug_Output\n        GL.DebugMessageCallback(callback, IntPtr.Zero);\n        GL.Enable(GLC.DEBUG_OUTPUT_SYNCHRONOUS);\n\n        int flags = GL.GetIntegerv(GLC.CONTEXT_FLAGS);\n        if ((flags & GLC.CONTEXT_FLAG_DEBUG_BIT) != 0)\n        {\n            Debug.WriteLine(\"DEBUG: OpenGL Debug context enabled.\");\n        }\n\n        InitEvents();\n\n        Keyboard = new Keyboard(Handle);\n        Mouse = new Mouse(Handle);\n\n        GLFW.GetWindowSize(Handle, out width, out height);\n\n        Time = GLFW.GetTime();\n\n        Load();\n\n        Sync();\n    }\n\n    private readonly GL.DebugMessageDelegate callback;\n\n    private readonly StringBuilder messageBuilder = new();\n\n    public virtual void GLDebugMessage(GLDebugMessage message)\n    {\n        messageBuilder.AppendLine($\"[{DateTimeOffset.Now:MM/dd/yyyy hh:mm:ss.fff tt}]: GLDebug Message\");\n        messageBuilder.AppendLine(new string('-', messageBuilder.Length));\n        messageBuilder.AppendLine($\"Source: {message.Source}\");\n        messageBuilder.AppendLine($\"Severity: {message.Severity}\");\n        messageBuilder.AppendLine($\"Type: {message.Type}\");\n        messageBuilder.AppendLine($\"Id: {message.Id}\");\n        messageBuilder.AppendLine($\"{message.Message}\");\n\n        Debug.WriteLine(messageBuilder.ToString());\n\n        if (message.Severity == GLDebugMessageSeverity.High)\n        {\n            throw new Exception(messageBuilder.ToString());\n        }\n\n        messageBuilder.Clear();\n    }\n\n    public virtual void GLFWErrorMessage(int code, string message)\n    {\n        messageBuilder.AppendLine($\"[{DateTimeOffset.Now:MM/dd/yyyy hh:mm:ss.fff tt}]: GLFW Error\");\n        messageBuilder.AppendLine(new string('-', messageBuilder.Length));\n        messageBuilder.AppendLine($\"Id: {code}\");\n        messageBuilder.AppendLine($\"{message}\");\n\n        Debug.WriteLine(messageBuilder.ToString());\n        messageBuilder.Clear();\n    }\n\n    private void DebugMessageCallback(uint source, uint type, uint id, uint severity, int length, IntPtr buf)\n    {\n        // https://learnopengl.com/In-Practice/Debugging\n        // ignore non-significant error/warning codes\n\n        if (id == 131169 || id == 131185 || id == 131218 || id == 131204) return;\n\n        string msg = Marshal.PtrToStringUTF8(buf) ?? string.Empty;\n\n        GLDebugMessage message;\n        message.Id = id;\n        message.Message = msg;\n        message.Source = (GLDebugMessageSource)source;\n        message.Severity = (GLDebugMessageSeverity)severity;\n        message.Type = (GLDebugMessageType)type;\n\n        GLDebugMessage(message);\n    }\n\n    public void Close()\n    {\n        GLFW.SetWindowShouldClose(Handle, 1);\n    }\n\n    private void InitWindow(CreationSettings settings)\n    {\n        GLFW.WindowHint(GLFWC.SAMPLES, 4);\n\n#if DEBUG\n        GLFW.WindowHint(GLFWC.OPENGL_DEBUG_CONTEXT, GLFWC.TRUE);\n#endif\n\n        Handle = GLFW.CreateWindow(settings.Width, settings.Height,\n            settings.Title, IntPtr.Zero, IntPtr.Zero);\n\n        if (Handle == IntPtr.Zero)\n        {\n            GLFW.Terminate();\n            throw new Exception(\"Unable to create window.\");\n        }\n\n        GLFW.MakeContextCurrent(Handle);\n\n        GL.Load();\n        GL.Enable(GLC.MULTISAMPLE);\n    }\n\n    private void InitEvents()\n    {\n        errorFunction = OnErrorFunction;\n        GLFW.SetErrorCallback(errorFunction);\n    }\n\n    private int targetFPS = 100;\n    private double targetTicks = Stopwatch.Frequency / 100.0d;\n\n    public int TargetFPS\n    {\n        get => targetFPS;\n        set\n        {\n            targetFPS = value;\n            targetTicks = Stopwatch.Frequency / (double)targetFPS;\n        }\n    }\n\n    private void Sync()\n    {\n        while (GLFW.WindowShouldClose(Handle) == 0)\n        {\n            long time = Stopwatch.GetTimestamp();\n            GLFW.GetWindowSize(Handle, out width, out height);\n\n            Time = GLFW.GetTime();\n            Draw();\n            GLFW.SwapBuffers(Handle);\n            Keyboard.SwapStates();\n            Mouse.SwapStates();\n            GLFW.PollEvents();\n\n            while (targetTicks - (Stopwatch.GetTimestamp() - time) > 0)\n            {\n                Thread.Sleep(0);\n            }\n        }\n\n        GLFW.DestroyWindow(Handle);\n    }\n\n    private void OnErrorFunction(int errorCode, string description)\n    {\n        GLFWErrorMessage(errorCode, description);\n    }\n\n    public virtual void WindowResize()\n    {\n    }\n}"
  },
  {
    "path": "src/JitterDemo/Renderer/OpenGL/Input/Joystick.cs",
    "content": "using System;\nusing System.Diagnostics;\nusing System.Runtime.InteropServices;\nusing JitterDemo.Renderer.OpenGL.Native;\n\nnamespace JitterDemo.Renderer.OpenGL;\n\npublic class JoystickConnectEventArgs : EventArgs\n{\n    public int Index { get; private set; }\n    public bool Connected { get; private set; }\n\n    public JoystickConnectEventArgs(int index, bool connected)\n    {\n        Index = index;\n        Connected = connected;\n    }\n}\n\n// TODO: add gamepad states\n\npublic static class Joystick\n{\n    private static readonly float[][] axes = new float[GLFWC.JOYSTICK_LAST][];\n    private static readonly byte[][] buttons = new byte[GLFWC.JOYSTICK_LAST][];\n    private static readonly byte[][] hats = new byte[GLFWC.JOYSTICK_LAST][];\n\n    private static readonly GLFW.JoystickDelegate jstdelegate;\n\n    public static event EventHandler<JoystickConnectEventArgs>? Connect;\n\n    static Joystick()\n    {\n        jstdelegate = OnJoystickChange;\n        GLFW.SetJoystickCallback(jstdelegate);\n    }\n\n    private static void OnJoystickChange(int jid, int evt)\n    {\n        Connect?.Invoke(null, new JoystickConnectEventArgs(jid, evt == GLFWC.CONNECTED));\n    }\n\n    public static bool IsPresent(int index)\n    {\n        Debug.Assert(index >= 0 && index < GLFWC.JOYSTICK_LAST);\n        int present = GLFW.JoystickPresent(index);\n\n        return present == GLFWC.TRUE;\n    }\n\n    public static string? GetName(int index)\n    {\n        Debug.Assert(index >= 0 && index < GLFWC.JOYSTICK_LAST);\n        return Marshal.PtrToStringUTF8(GLFW.GetJoystickName(index));\n    }\n\n    public static byte[] GetButtons(int index)\n    {\n        var ptr = GLFW.GetJoystickButtons(index, out int count);\n        if (ptr == IntPtr.Zero) return Array.Empty<byte>();\n\n        if (buttons[index] == null || buttons[index].Length < count)\n            buttons[index] = new byte[count];\n\n        Marshal.Copy(ptr, buttons[index], 0, count);\n\n        return buttons[index];\n    }\n\n    public static float[] GetAxes(int index)\n    {\n        var ptr = GLFW.GetJoystickAxes(index, out int count);\n        if (ptr == IntPtr.Zero) return Array.Empty<float>();\n\n        if (axes[index] == null || axes[index].Length < count)\n            axes[index] = new float[count];\n\n        Marshal.Copy(ptr, axes[index], 0, count);\n\n        return axes[index];\n    }\n\n    public static byte[] GetHats(int index)\n    {\n        var ptr = GLFW.GetJoystickHats(index, out int count);\n        if (ptr == IntPtr.Zero) return Array.Empty<byte>();\n\n        if (hats[index] == null || hats[index].Length < count)\n            hats[index] = new byte[count];\n\n        Marshal.Copy(ptr, hats[index], 0, count);\n\n        return hats[index];\n    }\n}"
  },
  {
    "path": "src/JitterDemo/Renderer/OpenGL/Input/Keyboard.cs",
    "content": "using System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing JitterDemo.Renderer.OpenGL.Native;\n\nnamespace JitterDemo.Renderer.OpenGL;\n\npublic class Keyboard\n{\n    public enum Key\n    {\n        Space = GLFWC.KEY_SPACE,\n        Apostrophe = GLFWC.KEY_APOSTROPHE,\n        Comma = GLFWC.KEY_COMMA,\n        Minus = GLFWC.KEY_MINUS,\n        Period = GLFWC.KEY_PERIOD,\n        Slash = GLFWC.KEY_SLASH,\n        D0 = GLFWC.KEY_0,\n        D1 = GLFWC.KEY_1,\n        D2 = GLFWC.KEY_2,\n        D3 = GLFWC.KEY_3,\n        D4 = GLFWC.KEY_4,\n        D5 = GLFWC.KEY_5,\n        D6 = GLFWC.KEY_6,\n        D7 = GLFWC.KEY_7,\n        D8 = GLFWC.KEY_8,\n        D9 = GLFWC.KEY_9,\n        Semicolon = GLFWC.KEY_SEMICOLON,\n        Equal = GLFWC.KEY_EQUAL,\n        A = GLFWC.KEY_A,\n        B = GLFWC.KEY_B,\n        C = GLFWC.KEY_C,\n        D = GLFWC.KEY_D,\n        E = GLFWC.KEY_E,\n        F = GLFWC.KEY_F,\n        G = GLFWC.KEY_G,\n        H = GLFWC.KEY_H,\n        I = GLFWC.KEY_I,\n        J = GLFWC.KEY_J,\n        K = GLFWC.KEY_K,\n        L = GLFWC.KEY_L,\n        M = GLFWC.KEY_M,\n        N = GLFWC.KEY_N,\n        O = GLFWC.KEY_O,\n        P = GLFWC.KEY_P,\n        Q = GLFWC.KEY_Q,\n        R = GLFWC.KEY_R,\n        S = GLFWC.KEY_S,\n        T = GLFWC.KEY_T,\n        U = GLFWC.KEY_U,\n        V = GLFWC.KEY_V,\n        W = GLFWC.KEY_W,\n        X = GLFWC.KEY_X,\n        Y = GLFWC.KEY_Y,\n        Z = GLFWC.KEY_Z,\n        LeftBracket = GLFWC.KEY_LEFT_BRACKET,\n        Backslash = GLFWC.KEY_BACKSLASH,\n        RightBracket = GLFWC.KEY_RIGHT_BRACKET,\n        GraveAccent = GLFWC.KEY_GRAVE_ACCENT,\n        World1 = GLFWC.KEY_WORLD_1,\n        World2 = GLFWC.KEY_WORLD_2,\n        Escape = GLFWC.KEY_ESCAPE,\n        Enter = GLFWC.KEY_ENTER,\n        Tab = GLFWC.KEY_TAB,\n        Backspace = GLFWC.KEY_BACKSPACE,\n        Insert = GLFWC.KEY_INSERT,\n        Delete = GLFWC.KEY_DELETE,\n        Right = GLFWC.KEY_RIGHT,\n        Left = GLFWC.KEY_LEFT,\n        Down = GLFWC.KEY_DOWN,\n        Up = GLFWC.KEY_UP,\n        PageUp = GLFWC.KEY_PAGE_UP,\n        PageDown = GLFWC.KEY_PAGE_DOWN,\n        Home = GLFWC.KEY_HOME,\n        End = GLFWC.KEY_END,\n        CapsLock = GLFWC.KEY_CAPS_LOCK,\n        ScrollLock = GLFWC.KEY_SCROLL_LOCK,\n        NumLock = GLFWC.KEY_NUM_LOCK,\n        PrintScreen = GLFWC.KEY_PRINT_SCREEN,\n        Pause = GLFWC.KEY_PAUSE,\n        F1 = GLFWC.KEY_F1,\n        F2 = GLFWC.KEY_F2,\n        F3 = GLFWC.KEY_F3,\n        F4 = GLFWC.KEY_F4,\n        F5 = GLFWC.KEY_F5,\n        F6 = GLFWC.KEY_F6,\n        F7 = GLFWC.KEY_F7,\n        F8 = GLFWC.KEY_F8,\n        F9 = GLFWC.KEY_F9,\n        F10 = GLFWC.KEY_F10,\n        F11 = GLFWC.KEY_F11,\n        F12 = GLFWC.KEY_F12,\n        F13 = GLFWC.KEY_F13,\n        F14 = GLFWC.KEY_F14,\n        F15 = GLFWC.KEY_F15,\n        F16 = GLFWC.KEY_F16,\n        F17 = GLFWC.KEY_F17,\n        F18 = GLFWC.KEY_F18,\n        F19 = GLFWC.KEY_F19,\n        F20 = GLFWC.KEY_F20,\n        F21 = GLFWC.KEY_F21,\n        F22 = GLFWC.KEY_F22,\n        F23 = GLFWC.KEY_F23,\n        F24 = GLFWC.KEY_F24,\n        F25 = GLFWC.KEY_F25,\n        Kp0 = GLFWC.KEY_KP_0,\n        Kp1 = GLFWC.KEY_KP_1,\n        Kp2 = GLFWC.KEY_KP_2,\n        Kp3 = GLFWC.KEY_KP_3,\n        Kp4 = GLFWC.KEY_KP_4,\n        Kp5 = GLFWC.KEY_KP_5,\n        Kp6 = GLFWC.KEY_KP_6,\n        Kp7 = GLFWC.KEY_KP_7,\n        Kp8 = GLFWC.KEY_KP_8,\n        Kp9 = GLFWC.KEY_KP_9,\n        KpDecimal = GLFWC.KEY_KP_DECIMAL,\n        KpDivide = GLFWC.KEY_KP_DIVIDE,\n        KpMultiply = GLFWC.KEY_KP_MULTIPLY,\n        KpSubtract = GLFWC.KEY_KP_SUBTRACT,\n        KpAdd = GLFWC.KEY_KP_ADD,\n        KpEnter = GLFWC.KEY_KP_ENTER,\n        KpEqual = GLFWC.KEY_KP_EQUAL,\n        LeftShift = GLFWC.KEY_LEFT_SHIFT,\n        LeftControl = GLFWC.KEY_LEFT_CONTROL,\n        LeftAlt = GLFWC.KEY_LEFT_ALT,\n        LeftSuper = GLFWC.KEY_LEFT_SUPER,\n        RightShift = GLFWC.KEY_RIGHT_SHIFT,\n        RightControl = GLFWC.KEY_RIGHT_CONTROL,\n        RightAlt = GLFWC.KEY_RIGHT_ALT,\n        RightSuper = GLFWC.KEY_RIGHT_SUPER,\n        Menu = GLFWC.KEY_MENU,\n#pragma warning disable CA1069\n        Last = GLFWC.KEY_LAST\n#pragma warning restore CA1069\n    }\n\n    private readonly BitArray currentKeyState = new(512);\n    private readonly BitArray lastKeyState = new(512);\n\n    public static Keyboard Instance { private set; get; } = null!;\n\n    private readonly List<uint> charInput = new();\n\n    private readonly GLFW.KeyDelegate keyfun;\n    private readonly GLFW.CharDelegate charfun;\n\n    public Keyboard(IntPtr window)\n    {\n        keyfun = OnKeyFunction;\n        GLFW.SetKeyCallback(window, keyfun);\n\n        charfun = OnCharDelegate;\n        GLFW.SetCharCallback(window, charfun);\n\n        Instance = this;\n    }\n\n    public IEnumerable<uint> CharInput => charInput;\n\n    private void OnCharDelegate(IntPtr windowHandle, uint codepoint)\n    {\n        charInput.Add(codepoint);\n    }\n\n    private void OnKeyFunction(IntPtr windowHandle, int key, int scanCode, int action, int mods)\n    {\n        if (key == GLFWC.KEY_UNKNOWN)\n        {\n            Debug.WriteLine($\"Key {key} is unknown\");\n            return;\n        }\n\n        currentKeyState.Set(key, action != GLFWC.RELEASE);\n    }\n\n    public void SwapStates()\n    {\n        lastKeyState.SetAll(false);\n        lastKeyState.Xor(currentKeyState);\n        charInput.Clear();\n    }\n\n    public bool KeyPressBegin(Key k)\n    {\n        return currentKeyState[(int)k] && !lastKeyState[(int)k];\n    }\n\n    public bool KeyPressEnded(Key k)\n    {\n        return !currentKeyState[(int)k] && lastKeyState[(int)k];\n    }\n\n    public bool IsKeyDown(Key k)\n    {\n        return currentKeyState[(int)k];\n    }\n}"
  },
  {
    "path": "src/JitterDemo/Renderer/OpenGL/Input/Mouse.cs",
    "content": "using System;\nusing System.Collections;\nusing JitterDemo.Renderer.OpenGL.Native;\n\nnamespace JitterDemo.Renderer.OpenGL;\n\npublic class Mouse\n{\n    private readonly BitArray currentMouseState = new(8);\n    private readonly BitArray lastMouseState = new(8);\n\n    private Coordinate currentMousePos;\n    private Coordinate lastMousePos;\n\n    private Coordinate scrollWheel;\n\n    public enum Button\n    {\n        B1 = GLFWC.MOUSE_BUTTON_1,\n        B2 = GLFWC.MOUSE_BUTTON_2,\n        B3 = GLFWC.MOUSE_BUTTON_3,\n        B4 = GLFWC.MOUSE_BUTTON_4,\n        B5 = GLFWC.MOUSE_BUTTON_5,\n        B6 = GLFWC.MOUSE_BUTTON_6,\n        B7 = GLFWC.MOUSE_BUTTON_7,\n        B8 = GLFWC.MOUSE_BUTTON_8,\n#pragma warning disable CA1069\n        Last = GLFWC.MOUSE_BUTTON_LAST,\n        Left = GLFWC.MOUSE_BUTTON_LEFT,\n        Right = GLFWC.MOUSE_BUTTON_RIGHT,\n        Middle = GLFWC.MOUSE_BUTTON_MIDDLE\n#pragma warning restore CA1069\n    }\n\n    public struct Coordinate\n    {\n        public double X;\n        public double Y;\n\n        public Coordinate(double x, double y)\n        {\n            X = x;\n            Y = y;\n        }\n\n        public void SetZero()\n        {\n            X = Y = 0;\n        }\n    }\n\n    public Coordinate Position => currentMousePos;\n\n    public Coordinate ScrollWheel => scrollWheel;\n\n    public static Mouse Instance { get; private set; } = null!;\n\n    private readonly GLFW.MouseButtonDelegate mousefun;\n    private readonly GLFW.CursorPosDelegate cursorposfun;\n    private readonly GLFW.ScrollDelegate scrollfun;\n\n    public Mouse(IntPtr window)\n    {\n        mousefun = OnMouseButton;\n        cursorposfun = OnMousePos;\n        scrollfun = OnMouseScroll;\n\n        GLFW.SetMouseButtonCallback(window, mousefun);\n        GLFW.SetCursorPosCallback(window, cursorposfun);\n        GLFW.SetScrollCallback(window, scrollfun);\n        Instance = this;\n    }\n\n    private void OnMouseScroll(IntPtr windowHandle, double xoffset, double yoffset)\n    {\n        scrollWheel.X = xoffset;\n        scrollWheel.Y = yoffset;\n    }\n\n    private void OnMousePos(IntPtr windowHandle, double mousex, double mousey)\n    {\n        currentMousePos = new Coordinate(mousex, mousey);\n    }\n\n    private void OnMouseButton(IntPtr windowHandle, int button, int action, int mods)\n    {\n        currentMouseState.Set(button, action != GLFWC.RELEASE);\n    }\n\n    public bool ButtonPressBegin(Button k)\n    {\n        return currentMouseState[(int)k] && !lastMouseState[(int)k];\n    }\n\n    public bool ButtonPressEnd(Button k)\n    {\n        return !currentMouseState[(int)k] && lastMouseState[(int)k];\n    }\n\n    public bool IsButtonDown(Button k)\n    {\n        return currentMouseState[(int)k];\n    }\n\n    public Coordinate DeltaPosition => new(currentMousePos.X - lastMousePos.X, currentMousePos.Y - lastMousePos.Y);\n\n    public void SwapStates()\n    {\n        lastMouseState.SetAll(false);\n        lastMouseState.Xor(currentMouseState);\n\n        lastMousePos = currentMousePos;\n        scrollWheel.SetZero();\n    }\n}"
  },
  {
    "path": "src/JitterDemo/Renderer/OpenGL/LinearMath/Matrix4.cs",
    "content": "using System;\nusing System.Runtime.InteropServices;\n\nnamespace JitterDemo.Renderer.OpenGL;\n\n[StructLayout(LayoutKind.Explicit, Size = 64)]\npublic struct Matrix4\n{\n    public static Matrix4 Identity { get; } = new(\n        1f, 0f, 0f, 0f,\n        0f, 1f, 0f, 0f,\n        0f, 0f, 1f, 0f,\n        0f, 0f, 0f, 1f\n    );\n\n    public Matrix4(float m11, float m12, float m13, float m14,\n        float m21, float m22, float m23, float m24,\n        float m31, float m32, float m33, float m34,\n        float m41, float m42, float m43, float m44)\n    {\n        M11 = m11;\n        M12 = m12;\n        M13 = m13;\n        M14 = m14;\n\n        M21 = m21;\n        M22 = m22;\n        M23 = m23;\n        M24 = m24;\n\n        M31 = m31;\n        M32 = m32;\n        M33 = m33;\n        M34 = m34;\n\n        M41 = m41;\n        M42 = m42;\n        M43 = m43;\n        M44 = m44;\n    }\n\n    // In memory the matrix entries are layed out in column\n    // major format. This implies, that the Matrix entries M{row}{column}\n    //\n    //      M11 M12 M13 M14\n    // M =  M21 M22 M23 M24\n    //      M31 M32 M33 M34\n    //      M41 M42 M43 M44\n    //\n    // are stored column wise in memory, i.e.\n    //\n    // M11 M21 M31 M41 M12 M22 M32 M42 M13 M23 M33 M43 M14 M24 M34 M44\n    //\n    // Vector4 represents a column vector. Multiplication follows the usual convention\n    //\n    //      M11 M12 M13 M14       a      a*M11 + b*M12 + c*M13 + d*M14\n    //      M21 M22 M23 M24   x   b   =  a*M12 + b*M22 + c*M23 + ...\n    //      M31 M32 M33 M34       c      ...\n    //      M41 M42 M43 M44       d      ...\n    //\n    // and\n    //\n    //      A11 A12 A13 A14       B11 B12 B13 B14       A11*B11+A12*B21+A13*B31+A14*B41 ...\n    //      A21 A22 A23 A24   x   B21 B22 B23 B24   =   ...\n    //      A31 A32 A33 A34       B31 B32 B33 B34       ...\n    //      A41 A42 A43 A44       B41 B42 B43 B44       ...\n    //\n\n    public static Matrix4 operator *(in Matrix4 value1, in Matrix4 value2)\n    {\n        return Multiply(value1, value2);\n    }\n\n    public static Matrix4 operator +(in Matrix4 value1, in Matrix4 value2)\n    {\n        return Add(value1, value2);\n    }\n\n    public static Matrix4 operator -(in Matrix4 value1, in Matrix4 value2)\n    {\n        return Subtract(value1, value2);\n    }\n\n    public static Matrix4 Transpose(Matrix4 matrix)\n    {\n        Matrix4 result;\n\n        result.M11 = matrix.M11;\n        result.M12 = matrix.M21;\n        result.M13 = matrix.M31;\n        result.M14 = matrix.M41;\n        result.M21 = matrix.M12;\n        result.M22 = matrix.M22;\n        result.M23 = matrix.M32;\n        result.M24 = matrix.M42;\n        result.M31 = matrix.M13;\n        result.M32 = matrix.M23;\n        result.M33 = matrix.M33;\n        result.M34 = matrix.M43;\n        result.M41 = matrix.M14;\n        result.M42 = matrix.M24;\n        result.M43 = matrix.M34;\n        result.M44 = matrix.M44;\n\n        return result;\n    }\n\n    public static Matrix4 Subtract(in Matrix4 value1, in Matrix4 value2)\n    {\n        Matrix4 result;\n\n        result.M11 = value1.M11 - value2.M11;\n        result.M12 = value1.M12 - value2.M12;\n        result.M13 = value1.M13 - value2.M13;\n        result.M14 = value1.M14 - value2.M14;\n        result.M21 = value1.M21 - value2.M21;\n        result.M22 = value1.M22 - value2.M22;\n        result.M23 = value1.M23 - value2.M23;\n        result.M24 = value1.M24 - value2.M24;\n        result.M31 = value1.M31 - value2.M31;\n        result.M32 = value1.M32 - value2.M32;\n        result.M33 = value1.M33 - value2.M33;\n        result.M34 = value1.M34 - value2.M34;\n        result.M41 = value1.M41 - value2.M41;\n        result.M42 = value1.M42 - value2.M42;\n        result.M43 = value1.M43 - value2.M43;\n        result.M44 = value1.M44 - value2.M44;\n\n        return result;\n    }\n\n    public static Matrix4 Add(in Matrix4 value1, in Matrix4 value2)\n    {\n        Matrix4 result;\n\n        result.M11 = value1.M11 + value2.M11;\n        result.M12 = value1.M12 + value2.M12;\n        result.M13 = value1.M13 + value2.M13;\n        result.M14 = value1.M14 + value2.M14;\n        result.M21 = value1.M21 + value2.M21;\n        result.M22 = value1.M22 + value2.M22;\n        result.M23 = value1.M23 + value2.M23;\n        result.M24 = value1.M24 + value2.M24;\n        result.M31 = value1.M31 + value2.M31;\n        result.M32 = value1.M32 + value2.M32;\n        result.M33 = value1.M33 + value2.M33;\n        result.M34 = value1.M34 + value2.M34;\n        result.M41 = value1.M41 + value2.M41;\n        result.M42 = value1.M42 + value2.M42;\n        result.M43 = value1.M43 + value2.M43;\n        result.M44 = value1.M44 + value2.M44;\n\n        return result;\n    }\n\n    public static Matrix4 Multiply(in Matrix4 value1, in Matrix4 value2)\n    {\n        Matrix4 result;\n\n        // First row\n        result.M11 = value1.M11 * value2.M11 + value1.M12 * value2.M21 + value1.M13 * value2.M31 +\n                     value1.M14 * value2.M41;\n        result.M12 = value1.M11 * value2.M12 + value1.M12 * value2.M22 + value1.M13 * value2.M32 +\n                     value1.M14 * value2.M42;\n        result.M13 = value1.M11 * value2.M13 + value1.M12 * value2.M23 + value1.M13 * value2.M33 +\n                     value1.M14 * value2.M43;\n        result.M14 = value1.M11 * value2.M14 + value1.M12 * value2.M24 + value1.M13 * value2.M34 +\n                     value1.M14 * value2.M44;\n\n        // Second row\n        result.M21 = value1.M21 * value2.M11 + value1.M22 * value2.M21 + value1.M23 * value2.M31 +\n                     value1.M24 * value2.M41;\n        result.M22 = value1.M21 * value2.M12 + value1.M22 * value2.M22 + value1.M23 * value2.M32 +\n                     value1.M24 * value2.M42;\n        result.M23 = value1.M21 * value2.M13 + value1.M22 * value2.M23 + value1.M23 * value2.M33 +\n                     value1.M24 * value2.M43;\n        result.M24 = value1.M21 * value2.M14 + value1.M22 * value2.M24 + value1.M23 * value2.M34 +\n                     value1.M24 * value2.M44;\n\n        // Third row\n        result.M31 = value1.M31 * value2.M11 + value1.M32 * value2.M21 + value1.M33 * value2.M31 +\n                     value1.M34 * value2.M41;\n        result.M32 = value1.M31 * value2.M12 + value1.M32 * value2.M22 + value1.M33 * value2.M32 +\n                     value1.M34 * value2.M42;\n        result.M33 = value1.M31 * value2.M13 + value1.M32 * value2.M23 + value1.M33 * value2.M33 +\n                     value1.M34 * value2.M43;\n        result.M34 = value1.M31 * value2.M14 + value1.M32 * value2.M24 + value1.M33 * value2.M34 +\n                     value1.M34 * value2.M44;\n\n        // Fourth row\n        result.M41 = value1.M41 * value2.M11 + value1.M42 * value2.M21 + value1.M43 * value2.M31 +\n                     value1.M44 * value2.M41;\n        result.M42 = value1.M41 * value2.M12 + value1.M42 * value2.M22 + value1.M43 * value2.M32 +\n                     value1.M44 * value2.M42;\n        result.M43 = value1.M41 * value2.M13 + value1.M42 * value2.M23 + value1.M43 * value2.M33 +\n                     value1.M44 * value2.M43;\n        result.M44 = value1.M41 * value2.M14 + value1.M42 * value2.M24 + value1.M43 * value2.M34 +\n                     value1.M44 * value2.M44;\n\n        return result;\n    }\n\n    public static bool Invert(Matrix4 matrix, out Matrix4 result)\n    {\n        float a = matrix.M11, b = matrix.M12, c = matrix.M13, d = matrix.M14;\n        float e = matrix.M21, f = matrix.M22, g = matrix.M23, h = matrix.M24;\n        float i = matrix.M31, j = matrix.M32, k = matrix.M33, l = matrix.M34;\n        float m = matrix.M41, n = matrix.M42, o = matrix.M43, p = matrix.M44;\n\n        float kp_lo = k * p - l * o;\n        float jp_ln = j * p - l * n;\n        float jo_kn = j * o - k * n;\n        float ip_lm = i * p - l * m;\n        float io_km = i * o - k * m;\n        float in_jm = i * n - j * m;\n\n        float a11 = +(f * kp_lo - g * jp_ln + h * jo_kn);\n        float a12 = -(e * kp_lo - g * ip_lm + h * io_km);\n        float a13 = +(e * jp_ln - f * ip_lm + h * in_jm);\n        float a14 = -(e * jo_kn - f * io_km + g * in_jm);\n\n        float det = a * a11 + b * a12 + c * a13 + d * a14;\n\n        if (Math.Abs(det) < float.Epsilon)\n        {\n            result = new Matrix4(float.NaN, float.NaN, float.NaN, float.NaN,\n                float.NaN, float.NaN, float.NaN, float.NaN,\n                float.NaN, float.NaN, float.NaN, float.NaN,\n                float.NaN, float.NaN, float.NaN, float.NaN);\n            return false;\n        }\n\n        float invDet = 1.0f / det;\n\n        result.M11 = a11 * invDet;\n        result.M21 = a12 * invDet;\n        result.M31 = a13 * invDet;\n        result.M41 = a14 * invDet;\n\n        result.M12 = -(b * kp_lo - c * jp_ln + d * jo_kn) * invDet;\n        result.M22 = +(a * kp_lo - c * ip_lm + d * io_km) * invDet;\n        result.M32 = -(a * jp_ln - b * ip_lm + d * in_jm) * invDet;\n        result.M42 = +(a * jo_kn - b * io_km + c * in_jm) * invDet;\n\n        float gp_ho = g * p - h * o;\n        float fp_hn = f * p - h * n;\n        float fo_gn = f * o - g * n;\n        float ep_hm = e * p - h * m;\n        float eo_gm = e * o - g * m;\n        float en_fm = e * n - f * m;\n\n        result.M13 = +(b * gp_ho - c * fp_hn + d * fo_gn) * invDet;\n        result.M23 = -(a * gp_ho - c * ep_hm + d * eo_gm) * invDet;\n        result.M33 = +(a * fp_hn - b * ep_hm + d * en_fm) * invDet;\n        result.M43 = -(a * fo_gn - b * eo_gm + c * en_fm) * invDet;\n\n        float gl_hk = g * l - h * k;\n        float fl_hj = f * l - h * j;\n        float fk_gj = f * k - g * j;\n        float el_hi = e * l - h * i;\n        float ek_gi = e * k - g * i;\n        float ej_fi = e * j - f * i;\n\n        result.M14 = -(b * gl_hk - c * fl_hj + d * fk_gj) * invDet;\n        result.M24 = +(a * gl_hk - c * el_hi + d * ek_gi) * invDet;\n        result.M34 = -(a * fl_hj - b * el_hi + d * ej_fi) * invDet;\n        result.M44 = +(a * fk_gj - b * ek_gi + c * ej_fi) * invDet;\n\n        return true;\n    }\n\n    [FieldOffset(0)] public float M11;\n    [FieldOffset(4)] public float M21;\n    [FieldOffset(8)] public float M31;\n    [FieldOffset(12)] public float M41;\n\n    [FieldOffset(16)] public float M12;\n    [FieldOffset(20)] public float M22;\n    [FieldOffset(24)] public float M32;\n    [FieldOffset(28)] public float M42;\n\n    [FieldOffset(32)] public float M13;\n    [FieldOffset(36)] public float M23;\n    [FieldOffset(40)] public float M33;\n    [FieldOffset(44)] public float M43;\n\n    [FieldOffset(48)] public float M14;\n    [FieldOffset(52)] public float M24;\n    [FieldOffset(56)] public float M34;\n    [FieldOffset(60)] public float M44;\n}"
  },
  {
    "path": "src/JitterDemo/Renderer/OpenGL/LinearMath/MatrixHelper.cs",
    "content": "using System;\n\nnamespace JitterDemo.Renderer.OpenGL;\n\npublic static class MatrixHelper\n{\n    public static Matrix4 CreateTranslation(float xPosition, float yPosition, float zPosition)\n    {\n        Matrix4 result = Matrix4.Identity;\n\n        result.M14 = xPosition;\n        result.M24 = yPosition;\n        result.M34 = zPosition;\n\n        return result;\n    }\n\n    public static Matrix4 CreateTranslation(in Vector3 position)\n    {\n        Matrix4 result = Matrix4.Identity;\n        result.M14 = position.X;\n        result.M24 = position.Y;\n        result.M34 = position.Z;\n        return result;\n    }\n\n    public static Matrix4 CreatePerspectiveFieldOfView(float fieldOfView, float aspectRatio, float nearPlaneDistance,\n        float farPlaneDistance)\n    {\n        if (fieldOfView <= 0.0f || fieldOfView >= Math.PI)\n            throw new ArgumentOutOfRangeException(nameof(fieldOfView));\n\n        if (nearPlaneDistance <= 0.0f)\n            throw new ArgumentOutOfRangeException(nameof(nearPlaneDistance));\n\n        if (farPlaneDistance <= 0.0f)\n            throw new ArgumentOutOfRangeException(nameof(farPlaneDistance));\n\n        if (nearPlaneDistance >= farPlaneDistance)\n            throw new ArgumentOutOfRangeException(nameof(nearPlaneDistance));\n\n        float yScale = 1.0f / (float)Math.Tan(fieldOfView * 0.5f);\n        float xScale = yScale / aspectRatio;\n\n        Matrix4 result;\n\n        result.M11 = xScale;\n        result.M12 = result.M13 = result.M14 = 0.0f;\n\n        result.M22 = yScale;\n        result.M21 = result.M23 = result.M24 = 0.0f;\n\n        result.M31 = result.M32 = 0.0f;\n        result.M33 = farPlaneDistance / (nearPlaneDistance - farPlaneDistance);\n        result.M34 = -1.0f;\n\n        result.M41 = result.M42 = result.M44 = 0.0f;\n        result.M43 = nearPlaneDistance * farPlaneDistance / (nearPlaneDistance - farPlaneDistance);\n\n        return Matrix4.Transpose(result);\n    }\n\n    public static Matrix4 CreateRotationX(float radians)\n    {\n        Matrix4 result = Matrix4.Identity;\n\n        float c = (float)Math.Cos(radians);\n        float s = (float)Math.Sin(radians);\n\n        // [  1  0  0  0 ]\n        // [  0  c -s  0 ]\n        // [  0  s  c  0 ]\n        // [  0  0  0  1 ]\n        result.M22 = c;\n        result.M23 = -s;\n        result.M32 = s;\n        result.M33 = c;\n\n        return result;\n    }\n\n    public static Matrix4 CreateRotationY(float radians)\n    {\n        Matrix4 result = Matrix4.Identity;\n\n        float c = (float)Math.Cos(radians);\n        float s = (float)Math.Sin(radians);\n\n        // [  c  0  s  0 ]\n        // [  0  1  0  0 ]\n        // [ -s  0  c  0 ]\n        // [  0  0  0  1 ]\n        result.M11 = c;\n        result.M13 = s;\n        result.M31 = -s;\n        result.M33 = c;\n\n        return result;\n    }\n\n    public static Matrix4 CreateRotationZ(float radians)\n    {\n        Matrix4 result = Matrix4.Identity;\n\n        float c = (float)Math.Cos(radians);\n        float s = (float)Math.Sin(radians);\n\n        // [  c -s  0  0 ]\n        // [  s  c  0  0 ]\n        // [  0  0  1  0 ]\n        // [  0  0  0  1 ]\n        result.M11 = c;\n        result.M12 = -s;\n        result.M21 = s;\n        result.M22 = c;\n\n        return result;\n    }\n\n    public static Matrix4 CreateScale(float scale)\n    {\n        Matrix4 result = Matrix4.Identity;\n\n        result.M11 = scale;\n        result.M22 = scale;\n        result.M33 = scale;\n\n        return result;\n    }\n\n    public static Matrix4 CreateScale(float xScale, float yScale, float zScale)\n    {\n        Matrix4 result = Matrix4.Identity;\n\n        result.M11 = xScale;\n        result.M22 = yScale;\n        result.M33 = zScale;\n\n        return result;\n    }\n\n    public static Matrix4 CreateOrthographicOffCenter(float left, float right, float bottom, float top,\n        float zNearPlane, float zFarPlane)\n    {\n        Matrix4 result;\n\n        result.M11 = 2.0f / (right - left);\n        result.M12 = result.M13 = result.M14 = 0.0f;\n\n        result.M22 = 2.0f / (top - bottom);\n        result.M21 = result.M23 = result.M24 = 0.0f;\n\n        result.M33 = 1.0f / (zNearPlane - zFarPlane);\n        result.M31 = result.M32 = result.M34 = 0.0f;\n\n        result.M41 = (left + right) / (left - right);\n        result.M42 = (top + bottom) / (bottom - top);\n        result.M43 = zNearPlane / (zNearPlane - zFarPlane);\n        result.M44 = 1.0f;\n\n        return Matrix4.Transpose(result);\n    }\n\n    public static Matrix4 CreateLookAt(Vector3 cameraPosition, Vector3 cameraTarget, Vector3 cameraUpVector)\n    {\n        Vector3 zaxis = Vector3.Normalize(cameraPosition - cameraTarget);\n        Vector3 xaxis = Vector3.Normalize(Vector3.Cross(cameraUpVector, zaxis));\n        Vector3 yaxis = Vector3.Cross(zaxis, xaxis);\n\n        Matrix4 result;\n\n        result.M11 = xaxis.X;\n        result.M12 = yaxis.X;\n        result.M13 = zaxis.X;\n        result.M14 = 0.0f;\n        result.M21 = xaxis.Y;\n        result.M22 = yaxis.Y;\n        result.M23 = zaxis.Y;\n        result.M24 = 0.0f;\n        result.M31 = xaxis.Z;\n        result.M32 = yaxis.Z;\n        result.M33 = zaxis.Z;\n        result.M34 = 0.0f;\n        result.M41 = -Vector3.Dot(xaxis, cameraPosition);\n        result.M42 = -Vector3.Dot(yaxis, cameraPosition);\n        result.M43 = -Vector3.Dot(zaxis, cameraPosition);\n        result.M44 = 1.0f;\n\n        return Matrix4.Transpose(result);\n    }\n}"
  },
  {
    "path": "src/JitterDemo/Renderer/OpenGL/LinearMath/Vector2.cs",
    "content": "using System;\nusing System.Runtime.InteropServices;\n\nnamespace JitterDemo.Renderer.OpenGL;\n\n[StructLayout(LayoutKind.Explicit, Size = 8)]\npublic struct Vector2\n{\n    [FieldOffset(0)] public float X;\n    [FieldOffset(4)] public float Y;\n\n    public static Vector2 Zero { get; } = new(0, 0);\n\n    public Vector2(float x, float y)\n    {\n        X = x;\n        Y = y;\n    }\n\n    public static Vector2 operator *(Vector2 left, float right)\n    {\n        return Multiply(left, right);\n    }\n\n    public static Vector2 operator *(float left, Vector2 right)\n    {\n        return Multiply(right, left);\n    }\n\n    public static Vector2 operator +(Vector2 left, Vector2 right)\n    {\n        return Add(left, right);\n    }\n\n    public static Vector2 operator -(Vector2 left, Vector2 right)\n    {\n        return Subtract(left, right);\n    }\n\n    public static Vector2 operator -(Vector2 left)\n    {\n        return Multiply(left, -1.0f);\n    }\n\n    public static Vector2 Add(in Vector2 left, in Vector2 right)\n    {\n        Vector2 result;\n        result.X = left.X + right.X;\n        result.Y = left.Y + right.Y;\n        return result;\n    }\n\n    public static Vector2 Subtract(in Vector2 left, in Vector2 right)\n    {\n        Vector2 result;\n        result.X = left.X - right.X;\n        result.Y = left.Y - right.Y;\n        return result;\n    }\n\n    public static Vector2 Normalize(in Vector2 vector)\n    {\n        float ls = vector.X * vector.X + vector.Y * vector.Y;\n        float invNorm = 1.0f / (float)Math.Sqrt(ls);\n\n        return new Vector2(\n            vector.X * invNorm,\n            vector.Y * invNorm);\n    }\n\n    public float LengthSquared()\n    {\n        return X * X + Y * Y;\n    }\n\n    public float Length()\n    {\n        return (float)Math.Sqrt(X * X + Y * Y);\n    }\n\n    public static float Dot(in Vector2 left, in Vector2 right)\n    {\n        return left.X * right.X +\n               left.Y * right.Y;\n    }\n\n    public static Vector2 Multiply(in Vector2 left, float right)\n    {\n        Vector2 result;\n        result.X = left.X * right;\n        result.Y = left.Y * right;\n        return result;\n    }\n\n    public override string ToString()\n    {\n        return $\"X={X} Y={Y}\";\n    }\n}"
  },
  {
    "path": "src/JitterDemo/Renderer/OpenGL/LinearMath/Vector3.cs",
    "content": "using System;\nusing System.Runtime.InteropServices;\n\nnamespace JitterDemo.Renderer.OpenGL;\n\n[StructLayout(LayoutKind.Explicit, Size = 12)]\npublic struct Vector3\n{\n    [FieldOffset(0)] public float X;\n    [FieldOffset(4)] public float Y;\n    [FieldOffset(8)] public float Z;\n\n    public static readonly Vector3 Zero = new(0, 0, 0);\n    public static readonly Vector3 UnitX = new(1, 0, 0);\n    public static readonly Vector3 UnitY = new(0, 1, 0);\n    public static readonly Vector3 UnitZ = new(0, 0, 1);\n\n    public Vector3(float x, float y, float z)\n    {\n        X = x;\n        Y = y;\n        Z = z;\n    }\n\n    public static Vector3 operator *(Vector3 left, float right)\n    {\n        return Multiply(left, right);\n    }\n\n    public static Vector3 operator *(float left, Vector3 right)\n    {\n        return Multiply(right, left);\n    }\n\n    public static Vector3 operator +(Vector3 left, Vector3 right)\n    {\n        return Add(in left, right);\n    }\n\n    public static Vector3 operator -(Vector3 left, Vector3 right)\n    {\n        return Subtract(left, right);\n    }\n\n    public static Vector3 operator %(Vector3 left, Vector3 right)\n    {\n        return Cross(left, right);\n    }\n\n    public static Vector3 operator -(Vector3 left)\n    {\n        return Multiply(left, -1.0f);\n    }\n\n    public static Vector3 operator +(Vector3 left)\n    {\n        return Multiply(left, +1.0f);\n    }\n\n    public static Vector3 Add(in Vector3 left, in Vector3 right)\n    {\n        Vector3 result;\n        result.X = left.X + right.X;\n        result.Y = left.Y + right.Y;\n        result.Z = left.Z + right.Z;\n        return result;\n    }\n\n    public static Vector3 Subtract(in Vector3 left, in Vector3 right)\n    {\n        Vector3 result;\n        result.X = left.X - right.X;\n        result.Y = left.Y - right.Y;\n        result.Z = left.Z - right.Z;\n        return result;\n    }\n\n    public float LengthSquared()\n    {\n        return X * X + Y * Y + Z * Z;\n    }\n\n    public float Length()\n    {\n        return MathF.Sqrt(X * X + Y * Y + Z * Z);\n    }\n\n    public static float Dot(in Vector3 left, in Vector3 right)\n    {\n        return left.X * right.X + left.Y * right.Y + left.Z * right.Z;\n    }\n\n    public static Vector3 Normalize(in Vector3 vector)\n    {\n        float ls = vector.X * vector.X + vector.Y * vector.Y + vector.Z * vector.Z;\n        float invNorm = 1.0f / MathF.Sqrt(ls);\n\n        return new Vector3(\n            vector.X * invNorm,\n            vector.Y * invNorm,\n            vector.Z * invNorm);\n    }\n\n    public static Vector3 Cross(in Vector3 left, in Vector3 right)\n    {\n        return new Vector3(\n            left.Y * right.Z - left.Z * right.Y,\n            left.Z * right.X - left.X * right.Z,\n            left.X * right.Y - left.Y * right.X);\n    }\n\n    public static Vector3 Multiply(in Vector3 left, float right)\n    {\n        Vector3 result;\n        result.X = left.X * right;\n        result.Y = left.Y * right;\n        result.Z = left.Z * right;\n        return result;\n    }\n\n    public static Vector3 Transform(in Vector3 position, in Matrix4 matrix)\n    {\n        // equivalent to matrix * (position, 1) = (result, *)\n        return new Vector3(\n            position.X * matrix.M11 + position.Y * matrix.M12 + position.Z * matrix.M13 + matrix.M14,\n            position.X * matrix.M21 + position.Y * matrix.M22 + position.Z * matrix.M23 + matrix.M24,\n            position.X * matrix.M31 + position.Y * matrix.M32 + position.Z * matrix.M33 + matrix.M34);\n    }\n\n    public override string ToString()\n    {\n        return $\"X={X} Y={Y} Z={Z}\";\n    }\n}"
  },
  {
    "path": "src/JitterDemo/Renderer/OpenGL/LinearMath/Vector4.cs",
    "content": "using System;\nusing System.Runtime.InteropServices;\n\nnamespace JitterDemo.Renderer.OpenGL;\n\n[StructLayout(LayoutKind.Explicit, Size = 16)]\npublic struct Vector4\n{\n    [FieldOffset(0)] public float X;\n    [FieldOffset(4)] public float Y;\n    [FieldOffset(8)] public float Z;\n    [FieldOffset(12)] public float W;\n\n    public static Vector4 Zero { get; } = new(0, 0, 0, 0);\n\n    public Vector4(float x, float y, float z, float w)\n    {\n        X = x;\n        Y = y;\n        Z = z;\n        W = w;\n    }\n\n    public Vector4(Vector3 vec, float w)\n    {\n        X = vec.X;\n        Y = vec.Y;\n        Z = vec.Z;\n        W = w;\n    }\n\n    public static Vector4 operator *(Matrix4 matrix, Vector4 vector)\n    {\n        return Multiply(matrix, vector);\n    }\n\n    public static Vector4 operator *(Vector4 left, float right)\n    {\n        return Multiply(left, right);\n    }\n\n    public static Vector4 operator *(float left, Vector4 right)\n    {\n        return Multiply(right, left);\n    }\n\n    public static Vector4 operator +(Vector4 left, Vector4 right)\n    {\n        return Add(left, right);\n    }\n\n    public static Vector4 operator -(Vector4 left, Vector4 right)\n    {\n        return Subtract(left, right);\n    }\n\n    public static Vector4 operator -(Vector4 left)\n    {\n        return Multiply(left, -1.0f);\n    }\n\n    public static Vector4 Add(in Vector4 left, in Vector4 right)\n    {\n        Vector4 result;\n        result.X = left.X + right.X;\n        result.Y = left.Y + right.Y;\n        result.Z = left.Z + right.Z;\n        result.W = left.W + right.W;\n        return result;\n    }\n\n    public static Vector4 Subtract(in Vector4 left, in Vector4 right)\n    {\n        Vector4 result;\n        result.X = left.X - right.X;\n        result.Y = left.Y - right.Y;\n        result.Z = left.Z - right.Z;\n        result.W = left.W - right.W;\n        return result;\n    }\n\n    public Vector3 XYZ => new(X, Y, Z);\n\n    public static Vector4 Normalize(in Vector4 vector)\n    {\n        float ls = vector.X * vector.X + vector.Y * vector.Y + vector.Z * vector.Z + vector.W * vector.W;\n        float invNorm = 1.0f / (float)Math.Sqrt(ls);\n\n        return new Vector4(\n            vector.X * invNorm,\n            vector.Y * invNorm,\n            vector.Z * invNorm,\n            vector.W * invNorm);\n    }\n\n    public float LengthSquared()\n    {\n        return X * X + Y * Y + Z * Z + W * W;\n    }\n\n    public float Length()\n    {\n        return MathF.Sqrt(X * X + Y * Y + Z * Z + W * W);\n    }\n\n    public static float Dot(in Vector4 left, in Vector4 right)\n    {\n        return left.X * right.X +\n               left.Y * right.Y +\n               left.Z * right.Z +\n               left.W * right.W;\n    }\n\n    public static Vector4 Multiply(in Matrix4 left, in Vector4 right)\n    {\n        Vector4 result = new()\n        {\n            X = left.M11 * right.X + left.M12 * right.Y + left.M13 * right.Z + left.M14 * right.W,\n            Y = left.M21 * right.X + left.M22 * right.Y + left.M23 * right.Z + left.M24 * right.W,\n            Z = left.M31 * right.X + left.M32 * right.Y + left.M33 * right.Z + left.M34 * right.W,\n            W = left.M41 * right.X + left.M42 * right.Y + left.M43 * right.Z + left.M44 * right.W\n        };\n        return result;\n    }\n\n    public static Vector4 Multiply(in Vector4 left, float right)\n    {\n        Vector4 result;\n        result.X = left.X * right;\n        result.Y = left.Y * right;\n        result.Z = left.Z * right;\n        result.W = left.W * right;\n        return result;\n    }\n\n    public override string ToString()\n    {\n        return $\"X={X} Y={Y} Z={Z} W={W}\";\n    }\n}"
  },
  {
    "path": "src/JitterDemo/Renderer/OpenGL/Native/GL.cs",
    "content": "/* Copyright <2022> <Thorben Linneweber>\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n *\n */\n\nusing System;\nusing System.Runtime.InteropServices;\n\n#pragma warning disable CS8618\n\nnamespace JitterDemo.Renderer.OpenGL.Native;\n\n// The opengl-functions can not be directly imported using DllImport.\n//\n// https://registry.khronos.org/OpenGL/ABI/\n// https://www.khronos.org/opengl/wiki/Load_OpenGL_Functions\n// https://stackoverflow.com/questions/36661449/glfw-load-functions\n//\n// We rely on GLFW's GetProcAddress to return the correct function pointer\n// and use Marshal.GetDelegateForFunctionPointer to make the function\n// available in the managed world.\n\npublic static class GL\n{\n    [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n    public delegate void DebugMessageDelegate(uint source, uint type, uint id, uint severity, int length, IntPtr buf);\n\n    private delegate void glDepthMaskDelegate(bool flag);\n\n    private static glDepthMaskDelegate glDepthMask;\n\n    private delegate void glGenerateMipmapDelegate(uint target);\n\n    private static glGenerateMipmapDelegate glGenerateMipmap;\n\n    private delegate void glBindVertexArrayDelegate(uint array);\n\n    private static glBindVertexArrayDelegate glBindVertexArray;\n\n    private delegate void glCompileShaderDelegate(uint shader);\n\n    private static glCompileShaderDelegate glCompileShader;\n\n    private delegate void glScissorDelegate(int x, int y, int width, int height);\n\n    private static glScissorDelegate glScissor;\n\n    private unsafe delegate void glGenBuffersDelegate(int n, uint* ids);\n\n    private static glGenBuffersDelegate glGenBuffers;\n\n    private unsafe delegate void glGenFramebuffersDelegate(int n, uint* ids);\n\n    private static glGenFramebuffersDelegate glGenFramebuffers;\n\n    private unsafe delegate void glGenVertexArraysDelegate(int n, uint* ids);\n\n    private static glGenVertexArraysDelegate glGenVertexArrays;\n\n    private delegate void glBindFramebufferDelegate(uint target, uint framebuffer);\n\n    private static glBindFramebufferDelegate glBindFramebuffer;\n\n    private delegate void glFramebufferTexture2DDelegate(uint target, uint attachment, uint textarget, uint texture,\n        int level);\n\n    private static glFramebufferTexture2DDelegate glFramebufferTexture2D;\n\n    private delegate void glDrawBufferDelegate(uint buf);\n\n    private static glDrawBufferDelegate glDrawBuffer;\n\n    private delegate void glBindBufferDelegate(uint target, uint buffer);\n\n    private static glBindBufferDelegate glBindBuffer;\n\n    private delegate void glBufferDataDelegate(uint target, int size, IntPtr data, uint usage);\n\n    private static glBufferDataDelegate glBufferData;\n\n    private delegate void glEnableVertexAttribArrayDelegate(uint index);\n\n    private static glEnableVertexAttribArrayDelegate glEnableVertexAttribArray;\n\n    private delegate void glVertexAttribPointerDelegate(uint index, int size, uint type, bool normalized, int stride,\n        IntPtr pointer);\n\n    private static glVertexAttribPointerDelegate glVertexAttribPointer;\n\n    private delegate void glVertexAttribDivisorDelegate(uint index, uint divisor);\n\n    private static glVertexAttribDivisorDelegate glVertexAttribDivisor;\n\n    private delegate uint glCreateProgramDelegate();\n\n    private static glCreateProgramDelegate glCreateProgram;\n\n    private delegate uint glCreateShaderDelegate(uint shaderType);\n\n    private static glCreateShaderDelegate glCreateShader;\n\n    private delegate void glShaderSourceDelegate(uint shader, int count, string[] @string, int[]? length);\n\n    private static glShaderSourceDelegate glShaderSource;\n\n    private delegate void glGetActiveUniformDelegate(uint program, uint index, int bufSize, [Out] out int length,\n        [Out] out int size, [Out] out uint type, [Out] IntPtr name);\n\n    private static glGetActiveUniformDelegate glGetActiveUniform;\n\n    private delegate int glGetUniformLocationDelegate(uint program, string name);\n\n    private static glGetUniformLocationDelegate glGetUniformLocation;\n\n    private delegate void glGetShaderivDelegate(uint shader, uint pname, [Out] out int @params);\n\n    private static glGetShaderivDelegate glGetShaderiv;\n\n    private delegate void glAttachShaderDelegate(uint program, uint shader);\n\n    private static glAttachShaderDelegate glAttachShader;\n\n    private delegate void glDeleteShaderDelegate(uint shader);\n\n    private static glDeleteShaderDelegate glDeleteShader;\n\n    private delegate void glLinkProgramDelegate(uint program);\n\n    private static glLinkProgramDelegate glLinkProgram;\n\n    private delegate void glGetProgramivDelegate(uint program, uint pname, [Out] out int @params);\n\n    private static glGetProgramivDelegate glGetProgramiv;\n\n    private delegate void glUseProgramDelegate(uint program);\n\n    private static glUseProgramDelegate glUseProgram;\n\n    private delegate void glDrawArraysInstancedDelegate(uint mode, int first, int count, int instancecount);\n\n    private static glDrawArraysInstancedDelegate glDrawArraysInstanced;\n\n    private delegate void glDrawArraysDelegate(uint mode, int first, int count);\n\n    private static glDrawArraysDelegate glDrawArrays;\n\n    private delegate void glDrawElementsInstancedDelegate(uint mode, int count, uint type, IntPtr indices,\n        int instancecount);\n\n    private static glDrawElementsInstancedDelegate glDrawElementsInstanced;\n\n    private delegate void glUniform1fDelegate(int location, float v0);\n\n    private static glUniform1fDelegate glUniform1f;\n\n    private delegate void glUniform1uiDelegate(int location, uint v0);\n\n    private static glUniform1uiDelegate glUniform1ui;\n\n    private delegate void glUniform1iDelegate(int location, int v0);\n\n    private static glUniform1iDelegate glUniform1i;\n\n    private unsafe delegate void glUniform1uivDelegate(int location, int count, uint* value);\n\n    private static glUniform1uivDelegate glUniform1uiv;\n\n    private unsafe delegate void glUniform1fvDelegate(int location, int count, float* value);\n\n    private static glUniform1fvDelegate glUniform1fv;\n\n    private delegate void glUniform2fDelegate(int location, float v0, float v1);\n\n    private static glUniform2fDelegate glUniform2f;\n\n    private delegate void glUniform3fDelegate(int location, float v0, float v1, float v2);\n\n    private static glUniform3fDelegate glUniform3f;\n\n    private delegate void glUniform4fDelegate(int location, float v0, float v1, float v2, float v3);\n\n    private static glUniform4fDelegate glUniform4f;\n\n    private delegate void glActiveTextureDelegate(uint texture);\n\n    private static glActiveTextureDelegate glActiveTexture;\n\n    private delegate void glTexParameterfDelegate(uint target, uint pname, float param);\n\n    private static glTexParameterfDelegate glTexParameterf;\n\n    private unsafe delegate void glUniform2fvDelegate(int location, int count, float* value);\n\n    private static glUniform2fvDelegate glUniform2fv;\n\n    private unsafe delegate void glUniform3fvDelegate(int location, int count, float* value);\n\n    private static glUniform3fvDelegate glUniform3fv;\n\n    private unsafe delegate void glUniform4fvDelegate(int location, int count, float* value);\n\n    private static glUniform4fvDelegate glUniform4fv;\n\n    private unsafe delegate void glUniformMatrix4fvDelegate(int location, int count, bool transpose, float* value);\n\n    private static glUniformMatrix4fvDelegate glUniformMatrix4fv;\n\n    private delegate void glDebugMessageCallbackDelegate(DebugMessageDelegate callback, IntPtr userParam);\n\n    private static glDebugMessageCallbackDelegate glDebugMessageCallback;\n\n    private unsafe delegate void glTexParameterfvDelegate(uint target, uint pname, float* @params);\n\n    private static glTexParameterfvDelegate glTexParameterfv;\n\n    private delegate void glPolygonModeDelegate(uint face, uint mode);\n\n    private static glPolygonModeDelegate glPolygonMode;\n\n    private unsafe delegate void glGetFloatvDelegate(uint pname, float* @params);\n\n    private static glGetFloatvDelegate glGetFloatv;\n\n    private delegate void glDrawElementsDelegate(uint mode, int count, uint type, IntPtr indices);\n\n    private static glDrawElementsDelegate glDrawElements;\n\n    private delegate void glBlendFuncDelegate(uint sfactor, uint dfactor);\n\n    private static glBlendFuncDelegate glBlendFunc;\n\n    private delegate void glClearColorDelegate(float red, float green, float blue, float alpha);\n\n    private static glClearColorDelegate glClearColor;\n\n    private delegate void glTexParameteriDelegate(uint target, uint pname, int param);\n\n    private static glTexParameteriDelegate glTexParameteri;\n\n    private delegate void glDisableDelegate(uint cap);\n\n    private static glDisableDelegate glDisable;\n\n    private delegate void glEnableDelegate(uint cap);\n\n    private static glEnableDelegate glEnable;\n\n    private delegate void glCullFaceDelegate(uint mode);\n\n    private static glCullFaceDelegate glCullFace;\n\n    private delegate void glClearDelegate(uint mask);\n\n    private static glClearDelegate glClear;\n\n    private delegate void glViewportDelegate(int x, int y, int width, int height);\n\n    private static glViewportDelegate glViewport;\n\n    private delegate void glTexImage2DDelegate(uint target, int level, int internalformat, int width, int height,\n        int border, uint format, uint type, IntPtr data);\n\n    private static glTexImage2DDelegate glTexImage2D;\n\n    private delegate void glBindTextureDelegate(uint target, uint texture);\n\n    private static glBindTextureDelegate glBindTexture;\n\n    private delegate void glDeleteProgramDelegate(uint program);\n\n    private static glDeleteProgramDelegate glDeleteProgram;\n\n    private delegate void glDisableVertexAttribArrayDelegate(uint index);\n\n    private static glDisableVertexAttribArrayDelegate glDisableVertexAttribArray;\n\n    private unsafe delegate void glGenTexturesDelegate(int n, uint* textures);\n\n    private static glGenTexturesDelegate glGenTextures;\n\n    private delegate uint glGetErrorDelegate();\n\n    private static glGetErrorDelegate glGetError;\n\n    private unsafe delegate void glGetIntegervDelegate(uint target, int* data);\n\n    private static glGetIntegervDelegate glGetIntegerv;\n\n    private delegate void glBufferSubDataDelegate(uint target, int offset, int size, IntPtr data);\n\n    private static glBufferSubDataDelegate glBufferSubData;\n\n    private delegate void glGetProgramInfoLogDelegate(uint program, [In] int maxLength, [Out] out int length,\n        [Out] IntPtr infoLog);\n\n    private static glGetProgramInfoLogDelegate glGetProgramInfoLog;\n\n    private delegate void glGetShaderInfoLogDelegate(uint shader, [In] int maxLength, [Out] out int length,\n        [Out] IntPtr infoLog);\n\n    private static glGetShaderInfoLogDelegate glGetShaderInfoLog;\n\n    private static T GetDelegate<T>()\n    {\n        string name = typeof(T).Name.Replace(\"Delegate\", string.Empty);\n\n        IntPtr ptr = GLFW.GetProcAddress(name);\n        return Marshal.GetDelegateForFunctionPointer<T>(ptr);\n    }\n\n    public static void Load()\n    {\n        glActiveTexture = GetDelegate<glActiveTextureDelegate>();\n        glCreateProgram = GetDelegate<glCreateProgramDelegate>();\n        glUseProgram = GetDelegate<glUseProgramDelegate>();\n        glDrawArraysInstanced = GetDelegate<glDrawArraysInstancedDelegate>();\n        glDepthMask = GetDelegate<glDepthMaskDelegate>();\n        glDrawArrays = GetDelegate<glDrawArraysDelegate>();\n        glDrawElementsInstanced = GetDelegate<glDrawElementsInstancedDelegate>();\n        glGenVertexArrays = GetDelegate<glGenVertexArraysDelegate>();\n        glDebugMessageCallback = GetDelegate<glDebugMessageCallbackDelegate>();\n        glGenerateMipmap = GetDelegate<glGenerateMipmapDelegate>();\n        glBindBuffer = GetDelegate<glBindBufferDelegate>();\n        glDrawBuffer = GetDelegate<glDrawBufferDelegate>();\n        glFramebufferTexture2D = GetDelegate<glFramebufferTexture2DDelegate>();\n        glBindFramebuffer = GetDelegate<glBindFramebufferDelegate>();\n        glGenBuffers = GetDelegate<glGenBuffersDelegate>();\n        glBindVertexArray = GetDelegate<glBindVertexArrayDelegate>();\n        glVertexAttribDivisor = GetDelegate<glVertexAttribDivisorDelegate>();\n        glEnableVertexAttribArray = GetDelegate<glEnableVertexAttribArrayDelegate>();\n        glGenFramebuffers = GetDelegate<glGenFramebuffersDelegate>();\n        glGetUniformLocation = GetDelegate<glGetUniformLocationDelegate>();\n        glCompileShader = GetDelegate<glCompileShaderDelegate>();\n        glScissor = GetDelegate<glScissorDelegate>();\n        glCreateShader = GetDelegate<glCreateShaderDelegate>();\n        glAttachShader = GetDelegate<glAttachShaderDelegate>();\n        glDeleteShader = GetDelegate<glDeleteShaderDelegate>();\n        glLinkProgram = GetDelegate<glLinkProgramDelegate>();\n        glGetProgramiv = GetDelegate<glGetProgramivDelegate>();\n        glGetShaderiv = GetDelegate<glGetShaderivDelegate>();\n        glShaderSource = GetDelegate<glShaderSourceDelegate>();\n        glGetActiveUniform = GetDelegate<glGetActiveUniformDelegate>();\n        glUniform1f = GetDelegate<glUniform1fDelegate>();\n        glUniform1ui = GetDelegate<glUniform1uiDelegate>();\n        glUniform1i = GetDelegate<glUniform1iDelegate>();\n        glUniform1uiv = GetDelegate<glUniform1uivDelegate>();\n        glUniform1fv = GetDelegate<glUniform1fvDelegate>();\n        glUniform2f = GetDelegate<glUniform2fDelegate>();\n        glUniform3f = GetDelegate<glUniform3fDelegate>();\n        glUniform4f = GetDelegate<glUniform4fDelegate>();\n        glTexParameterf = GetDelegate<glTexParameterfDelegate>();\n        glUniform2fv = GetDelegate<glUniform2fvDelegate>();\n        glUniform3fv = GetDelegate<glUniform3fvDelegate>();\n        glUniform4fv = GetDelegate<glUniform4fvDelegate>();\n        glUniformMatrix4fv = GetDelegate<glUniformMatrix4fvDelegate>();\n        glBufferData = GetDelegate<glBufferDataDelegate>();\n        glVertexAttribPointer = GetDelegate<glVertexAttribPointerDelegate>();\n        glTexParameterfv = GetDelegate<glTexParameterfvDelegate>();\n        glPolygonMode = GetDelegate<glPolygonModeDelegate>();\n        glGetFloatv = GetDelegate<glGetFloatvDelegate>();\n        glDrawElements = GetDelegate<glDrawElementsDelegate>();\n        glBlendFunc = GetDelegate<glBlendFuncDelegate>();\n        glClearColor = GetDelegate<glClearColorDelegate>();\n        glTexParameteri = GetDelegate<glTexParameteriDelegate>();\n        glDisable = GetDelegate<glDisableDelegate>();\n        glEnable = GetDelegate<glEnableDelegate>();\n        glCullFace = GetDelegate<glCullFaceDelegate>();\n        glClear = GetDelegate<glClearDelegate>();\n        glViewport = GetDelegate<glViewportDelegate>();\n        glTexImage2D = GetDelegate<glTexImage2DDelegate>();\n        glBindTexture = GetDelegate<glBindTextureDelegate>();\n        glDeleteProgram = GetDelegate<glDeleteProgramDelegate>();\n        glDisableVertexAttribArray = GetDelegate<glDisableVertexAttribArrayDelegate>();\n        glGetError = GetDelegate<glGetErrorDelegate>();\n        glGetIntegerv = GetDelegate<glGetIntegervDelegate>();\n        glBufferSubData = GetDelegate<glBufferSubDataDelegate>();\n        glGenTextures = GetDelegate<glGenTexturesDelegate>();\n        glGetShaderInfoLog = GetDelegate<glGetShaderInfoLogDelegate>();\n        glGetProgramInfoLog = GetDelegate<glGetProgramInfoLogDelegate>();\n    }\n\n    public static void DepthMask(bool flag)\n    {\n        glDepthMask(flag);\n    }\n\n    public static unsafe void TexParameterfv(uint target, uint pname, float* @params)\n    {\n        glTexParameterfv(target, pname, @params);\n    }\n\n    public static unsafe void GetFloatv(uint pname, float* @params)\n    {\n        glGetFloatv(pname, @params);\n    }\n\n    public static void PolygonMode(uint face, uint mode)\n    {\n        glPolygonMode(face, mode);\n    }\n\n    public static void DrawElements(uint mode, int count, uint type, IntPtr indices)\n    {\n        glDrawElements(mode, count, type, indices);\n    }\n\n    public static void DrawElementsBaseVertex(uint mode, int count, uint type, IntPtr indices, int basevertex)\n    {\n        glDrawElements(mode, count, type, indices);\n    }\n\n    public static void BlendFunc(uint sfactor, uint dfactor)\n    {\n        glBlendFunc(sfactor, dfactor);\n    }\n\n    public static void ClearColor(float red, float green, float blue, float alpha)\n    {\n        glClearColor(red, green, blue, alpha);\n    }\n\n    public static void TexParameteri(uint target, uint pname, int param)\n    {\n        glTexParameteri(target, pname, param);\n    }\n\n    public static void Disable(uint cap)\n    {\n        glDisable(cap);\n    }\n\n    public static void Enable(uint cap)\n    {\n        glEnable(cap);\n    }\n\n    public static void CullFace(uint mode)\n    {\n        glCullFace(mode);\n    }\n\n    public static void Clear(uint mask)\n    {\n        glClear(mask);\n    }\n\n    public static void Viewport(int x, int y, int width, int height)\n    {\n        glViewport(x, y, width, height);\n    }\n\n    public static void TexImage2D(uint target, int level, int internalformat, int width, int height, int border,\n        uint format, uint type, IntPtr data)\n    {\n        glTexImage2D(target, level, internalformat, width, height, border, format, type, data);\n    }\n\n    public static void BindTexture(uint target, uint texture)\n    {\n        glBindTexture(target, texture);\n    }\n\n    public static void DeleteProgram(uint program)\n    {\n        glDeleteProgram(program);\n    }\n\n    public static void DisableVertexAttribArray(uint index)\n    {\n        glDisableVertexAttribArray(index);\n    }\n\n    public static uint GetError()\n    {\n        return glGetError();\n    }\n\n    public static unsafe void GetIntegerv(uint target, int* data)\n    {\n        glGetIntegerv(target, data);\n    }\n\n    public static void BufferSubData(uint target, int offset, int size, IntPtr data)\n    {\n        glBufferSubData(target, offset, size, data);\n    }\n\n    public static void ActiveTexture(uint texture)\n    {\n        glActiveTexture(texture);\n    }\n\n    public static uint CreateProgram()\n    {\n        return glCreateProgram();\n    }\n\n    public static void UseProgram(uint program)\n    {\n        glUseProgram(program);\n    }\n\n    public static void DrawArraysInstanced(uint mode, int first, int count, int instancecount)\n    {\n        glDrawArraysInstanced(mode, first, count, instancecount);\n    }\n\n    public static void DrawArrays(uint mode, int first, int count)\n    {\n        glDrawArrays(mode, first, count);\n    }\n\n    public static void DrawElementsInstanced(uint mode, int count, uint type, IntPtr indices, int instancecount)\n    {\n        glDrawElementsInstanced(mode, count, type, indices, instancecount);\n    }\n\n    public static void DebugMessageCallback(DebugMessageDelegate callback, IntPtr userParam)\n    {\n        glDebugMessageCallback(callback, userParam);\n    }\n\n    public static void GenerateMipmap(uint target)\n    {\n        glGenerateMipmap(target);\n    }\n\n    public static void BindBuffer(uint target, uint buffer)\n    {\n        glBindBuffer(target, buffer);\n    }\n\n    public static void DrawBuffer(uint buf)\n    {\n        glDrawBuffer(buf);\n    }\n\n    public static void FramebufferTexture2D(uint target, uint attachment, uint textarget, uint texture, int level)\n    {\n        glFramebufferTexture2D(target, attachment, textarget, texture, level);\n    }\n\n    public static void BindFramebuffer(uint target, uint framebuffer)\n    {\n        glBindFramebuffer(target, framebuffer);\n    }\n\n    public static void BindVertexArray(uint array)\n    {\n        glBindVertexArray(array);\n    }\n\n    public static void VertexAttribDivisor(uint index, uint divisor)\n    {\n        glVertexAttribDivisor(index, divisor);\n    }\n\n    public static void EnableVertexAttribArray(uint index)\n    {\n        glEnableVertexAttribArray(index);\n    }\n\n    public static int GetUniformLocation(uint program, string name)\n    {\n        return glGetUniformLocation(program, name);\n    }\n\n    public static void CompileShader(uint shader)\n    {\n        glCompileShader(shader);\n    }\n\n    public static void Scissor(int x, int y, int width, int height)\n    {\n        glScissor(x, y, width, height);\n    }\n\n    public static uint CreateShader(uint shaderType)\n    {\n        return glCreateShader(shaderType);\n    }\n\n    public static void AttachShader(uint program, uint shader)\n    {\n        glAttachShader(program, shader);\n    }\n\n    public static void DeleteShader(uint shader)\n    {\n        glDeleteShader(shader);\n    }\n\n    public static void LinkProgram(uint program)\n    {\n        glLinkProgram(program);\n    }\n\n    public static void GetProgramiv(uint program, uint pname, [Out] out int @params)\n    {\n        glGetProgramiv(program, pname, out @params);\n    }\n\n    public static void GetShaderiv(uint shader, uint pname, [Out] out int @params)\n    {\n        glGetShaderiv(shader, pname, out @params);\n    }\n\n    public static void ShaderSource(uint shader, int count, string[] @string, int[]? length)\n    {\n        glShaderSource(shader, count, @string, length);\n    }\n\n    public static void Uniform1f(int location, float v0)\n    {\n        glUniform1f(location, v0);\n    }\n\n    public static void Uniform1ui(int location, uint v0)\n    {\n        glUniform1ui(location, v0);\n    }\n\n    public static void Uniform1i(int location, int v0)\n    {\n        glUniform1i(location, v0);\n    }\n\n    public static unsafe void Uniform1uiv(int location, int count, uint* value)\n    {\n        glUniform1uiv(location, count, value);\n    }\n\n    public static unsafe void Uniform1fv(int location, int count, float* value)\n    {\n        glUniform1fv(location, count, value);\n    }\n\n    public static void Uniform2f(int location, float v0, float v1)\n    {\n        glUniform2f(location, v0, v1);\n    }\n\n    public static void Uniform3f(int location, float v0, float v1, float v2)\n    {\n        glUniform3f(location, v0, v1, v2);\n    }\n\n    public static void Uniform4f(int location, float v0, float v1, float v2, float v3)\n    {\n        glUniform4f(location, v0, v1, v2, v3);\n    }\n\n    public static void TexParameterf(uint target, uint pname, float param)\n    {\n        glTexParameterf(target, pname, param);\n    }\n\n    public static unsafe void Uniform2fv(int location, int count, float* value)\n    {\n        glUniform2fv(location, count, value);\n    }\n\n    public static unsafe void Uniform3fv(int location, int count, float* value)\n    {\n        glUniform3fv(location, count, value);\n    }\n\n    public static unsafe void Uniform4fv(int location, int count, float* value)\n    {\n        glUniform4fv(location, count, value);\n    }\n\n    public static unsafe void UniformMatrix4fv(int location, int count, bool transpose, float* value)\n    {\n        glUniformMatrix4fv(location, count, transpose, value);\n    }\n\n    public static void BufferData(uint target, int size, IntPtr data, uint usage)\n    {\n        glBufferData(target, size, data, usage);\n    }\n\n    public static void VertexAttribPointer(uint index, int size, uint type, bool normalized, int stride, IntPtr pointer)\n    {\n        glVertexAttribPointer(index, size, type, normalized, stride, pointer);\n    }\n\n    public static void GetShaderInfoLog(uint shader, int maxLength, out int length, out string infoLog)\n    {\n        IntPtr buffer = Marshal.AllocHGlobal(maxLength);\n\n        try\n        {\n            glGetShaderInfoLog(shader, maxLength, out length, buffer);\n            infoLog = Marshal.PtrToStringUTF8(buffer) ?? string.Empty;\n        }\n        finally\n        {\n            Marshal.FreeHGlobal(buffer);\n        }\n    }\n\n    public static void GetProgramInfoLog(uint program, int maxLength, out int length, out string infoLog)\n    {\n        IntPtr buffer = Marshal.AllocHGlobal(maxLength);\n\n        try\n        {\n            glGetProgramInfoLog(program, maxLength, out length, buffer);\n            infoLog = Marshal.PtrToStringUTF8(buffer) ?? string.Empty;\n        }\n        finally\n        {\n            Marshal.FreeHGlobal(buffer);\n        }\n    }\n\n    public static void GetActiveUniform(uint program, uint index, int bufSize, out int length, out int size,\n        out uint type, out string name)\n    {\n        IntPtr buffer = Marshal.AllocHGlobal(bufSize);\n\n        try\n        {\n            glGetActiveUniform(program, index, bufSize, out length, out size, out type, buffer);\n            name = Marshal.PtrToStringUTF8(buffer) ?? string.Empty;\n        }\n        finally\n        {\n            Marshal.FreeHGlobal(buffer);\n        }\n    }\n\n    public static uint GenBuffer()\n    {\n        uint id;\n        unsafe\n        {\n            glGenBuffers(1, &id);\n        }\n\n        return id;\n    }\n\n    public static uint GenVertexArray()\n    {\n        uint id;\n        unsafe\n        {\n            glGenVertexArrays(1, &id);\n        }\n\n        return id;\n    }\n\n    public static int GetIntegerv(uint target)\n    {\n        int result;\n        unsafe\n        {\n            glGetIntegerv(target, &result);\n        }\n\n        return result;\n    }\n\n    public static void GenTextures(int n, out uint[] ids)\n    {\n        ids = new uint[n];\n        unsafe\n        {\n            fixed (uint* first = ids)\n            {\n                glGenTextures(n, first);\n            }\n        }\n    }\n\n    public static uint GenTexture()\n    {\n        uint id;\n        unsafe\n        {\n            glGenTextures(1, &id);\n        }\n\n        return id;\n    }\n\n    public static uint GenFramebuffer()\n    {\n        uint id;\n        unsafe\n        {\n            glGenFramebuffers(1, &id);\n        }\n\n        return id;\n    }\n}\n\npublic static class GLC\n{\n    public const uint DEPTH_BUFFER_BIT = 0x00000100;\n    public const uint STENCIL_BUFFER_BIT = 0x00000400;\n    public const uint COLOR_BUFFER_BIT = 0x00004000;\n    public const uint FALSE = 0;\n    public const uint TRUE = 1;\n    public const uint POINTS = 0x0000;\n    public const uint LINES = 0x0001;\n    public const uint LINE_LOOP = 0x0002;\n    public const uint LINE_STRIP = 0x0003;\n    public const uint TRIANGLES = 0x0004;\n    public const uint TRIANGLE_STRIP = 0x0005;\n    public const uint TRIANGLE_FAN = 0x0006;\n    public const uint QUADS = 0x0007;\n    public const uint NEVER = 0x0200;\n    public const uint LESS = 0x0201;\n    public const uint EQUAL = 0x0202;\n    public const uint LEQUAL = 0x0203;\n    public const uint GREATER = 0x0204;\n    public const uint NOTEQUAL = 0x0205;\n    public const uint GEQUAL = 0x0206;\n    public const uint ALWAYS = 0x0207;\n    public const uint ZERO = 0;\n    public const uint ONE = 1;\n    public const uint SRC_COLOR = 0x0300;\n    public const uint ONE_MINUS_SRC_COLOR = 0x0301;\n    public const uint SRC_ALPHA = 0x0302;\n    public const uint ONE_MINUS_SRC_ALPHA = 0x0303;\n    public const uint DST_ALPHA = 0x0304;\n    public const uint ONE_MINUS_DST_ALPHA = 0x0305;\n    public const uint DST_COLOR = 0x0306;\n    public const uint ONE_MINUS_DST_COLOR = 0x0307;\n    public const uint SRC_ALPHA_SATURATE = 0x0308;\n    public const uint NONE = 0;\n    public const uint FRONT_LEFT = 0x0400;\n    public const uint FRONT_RIGHT = 0x0401;\n    public const uint BACK_LEFT = 0x0402;\n    public const uint BACK_RIGHT = 0x0403;\n    public const uint FRONT = 0x0404;\n    public const uint BACK = 0x0405;\n    public const uint LEFT = 0x0406;\n    public const uint RIGHT = 0x0407;\n    public const uint FRONT_AND_BACK = 0x0408;\n    public const uint NO_ERROR = 0;\n    public const uint INVALID_ENUM = 0x0500;\n    public const uint INVALID_VALUE = 0x0501;\n    public const uint INVALID_OPERATION = 0x0502;\n    public const uint OUT_OF_MEMORY = 0x0505;\n    public const uint CW = 0x0900;\n    public const uint CCW = 0x0901;\n    public const uint POINT_SIZE = 0x0B11;\n    public const uint POINT_SIZE_RANGE = 0x0B12;\n    public const uint POINT_SIZE_GRANULARITY = 0x0B13;\n    public const uint LINE_SMOOTH = 0x0B20;\n    public const uint LINE_WIDTH = 0x0B21;\n    public const uint LINE_WIDTH_RANGE = 0x0B22;\n    public const uint LINE_WIDTH_GRANULARITY = 0x0B23;\n    public const uint POLYGON_MODE = 0x0B40;\n    public const uint POLYGON_SMOOTH = 0x0B41;\n    public const uint CULL_FACE = 0x0B44;\n    public const uint CULL_FACE_MODE = 0x0B45;\n    public const uint FRONT_FACE = 0x0B46;\n    public const uint DEPTH_RANGE = 0x0B70;\n    public const uint DEPTH_TEST = 0x0B71;\n    public const uint DEPTH_WRITEMASK = 0x0B72;\n    public const uint DEPTH_CLEAR_VALUE = 0x0B73;\n    public const uint DEPTH_FUNC = 0x0B74;\n    public const uint STENCIL_TEST = 0x0B90;\n    public const uint STENCIL_CLEAR_VALUE = 0x0B91;\n    public const uint STENCIL_FUNC = 0x0B92;\n    public const uint STENCIL_VALUE_MASK = 0x0B93;\n    public const uint STENCIL_FAIL = 0x0B94;\n    public const uint STENCIL_PASS_DEPTH_FAIL = 0x0B95;\n    public const uint STENCIL_PASS_DEPTH_PASS = 0x0B96;\n    public const uint STENCIL_REF = 0x0B97;\n    public const uint STENCIL_WRITEMASK = 0x0B98;\n    public const uint VIEWPORT = 0x0BA2;\n    public const uint DITHER = 0x0BD0;\n    public const uint BLEND_DST = 0x0BE0;\n    public const uint BLEND_SRC = 0x0BE1;\n    public const uint BLEND = 0x0BE2;\n    public const uint LOGIC_OP_MODE = 0x0BF0;\n    public const uint COLOR_LOGIC_OP = 0x0BF2;\n    public const uint DRAW_BUFFER = 0x0C01;\n    public const uint READ_BUFFER = 0x0C02;\n    public const uint SCISSOR_BOX = 0x0C10;\n    public const uint SCISSOR_TEST = 0x0C11;\n    public const uint COLOR_CLEAR_VALUE = 0x0C22;\n    public const uint COLOR_WRITEMASK = 0x0C23;\n    public const uint DOUBLEBUFFER = 0x0C32;\n    public const uint STEREO = 0x0C33;\n    public const uint LINE_SMOOTH_HINT = 0x0C52;\n    public const uint POLYGON_SMOOTH_HINT = 0x0C53;\n    public const uint UNPACK_SWAP_BYTES = 0x0CF0;\n    public const uint UNPACK_LSB_FIRST = 0x0CF1;\n    public const uint UNPACK_ROW_LENGTH = 0x0CF2;\n    public const uint UNPACK_SKIP_ROWS = 0x0CF3;\n    public const uint UNPACK_SKIP_PIXELS = 0x0CF4;\n    public const uint UNPACK_ALIGNMENT = 0x0CF5;\n    public const uint PACK_SWAP_BYTES = 0x0D00;\n    public const uint PACK_LSB_FIRST = 0x0D01;\n    public const uint PACK_ROW_LENGTH = 0x0D02;\n    public const uint PACK_SKIP_ROWS = 0x0D03;\n    public const uint PACK_SKIP_PIXELS = 0x0D04;\n    public const uint PACK_ALIGNMENT = 0x0D05;\n    public const uint MAX_TEXTURE_SIZE = 0x0D33;\n    public const uint MAX_VIEWPORT_DIMS = 0x0D3A;\n    public const uint SUBPIXEL_BITS = 0x0D50;\n    public const uint TEXTURE_1D = 0x0DE0;\n    public const uint TEXTURE_2D = 0x0DE1;\n    public const uint POLYGON_OFFSET_UNITS = 0x2A00;\n    public const uint POLYGON_OFFSET_POINT = 0x2A01;\n    public const uint POLYGON_OFFSET_LINE = 0x2A02;\n    public const uint POLYGON_OFFSET_FILL = 0x8037;\n    public const uint POLYGON_OFFSET_FACTOR = 0x8038;\n    public const uint TEXTURE_BINDING_1D = 0x8068;\n    public const uint TEXTURE_BINDING_2D = 0x8069;\n    public const uint TEXTURE_WIDTH = 0x1000;\n    public const uint TEXTURE_HEIGHT = 0x1001;\n    public const uint TEXTURE_INTERNAL_FORMAT = 0x1003;\n    public const uint TEXTURE_BORDER_COLOR = 0x1004;\n    public const uint TEXTURE_RED_SIZE = 0x805C;\n    public const uint TEXTURE_GREEN_SIZE = 0x805D;\n    public const uint TEXTURE_BLUE_SIZE = 0x805E;\n    public const uint TEXTURE_ALPHA_SIZE = 0x805F;\n    public const uint DONT_CARE = 0x1100;\n    public const uint FASTEST = 0x1101;\n    public const uint NICEST = 0x1102;\n    public const uint BYTE = 0x1400;\n    public const uint UNSIGNED_BYTE = 0x1401;\n    public const uint SHORT = 0x1402;\n    public const uint UNSIGNED_SHORT = 0x1403;\n    public const uint INT = 0x1404;\n    public const uint UNSIGNED_INT = 0x1405;\n    public const uint FLOAT = 0x1406;\n    public const uint DOUBLE = 0x140A;\n    public const uint STACK_OVERFLOW = 0x0503;\n    public const uint STACK_UNDERFLOW = 0x0504;\n    public const uint CLEAR = 0x1500;\n    public const uint AND = 0x1501;\n    public const uint AND_REVERSE = 0x1502;\n    public const uint COPY = 0x1503;\n    public const uint AND_INVERTED = 0x1504;\n    public const uint NOOP = 0x1505;\n    public const uint XOR = 0x1506;\n    public const uint OR = 0x1507;\n    public const uint NOR = 0x1508;\n    public const uint EQUIV = 0x1509;\n    public const uint INVERT = 0x150A;\n    public const uint OR_REVERSE = 0x150B;\n    public const uint COPY_INVERTED = 0x150C;\n    public const uint OR_INVERTED = 0x150D;\n    public const uint NAND = 0x150E;\n    public const uint SET = 0x150F;\n    public const uint TEXTURE = 0x1702;\n    public const uint COLOR = 0x1800;\n    public const uint DEPTH = 0x1801;\n    public const uint STENCIL = 0x1802;\n    public const uint STENCIL_INDEX = 0x1901;\n    public const uint DEPTH_COMPONENT = 0x1902;\n    public const uint RED = 0x1903;\n    public const uint GREEN = 0x1904;\n    public const uint BLUE = 0x1905;\n    public const uint ALPHA = 0x1906;\n    public const uint RGB = 0x1907;\n    public const uint RGBA = 0x1908;\n    public const uint POINT = 0x1B00;\n    public const uint LINE = 0x1B01;\n    public const uint FILL = 0x1B02;\n    public const uint KEEP = 0x1E00;\n    public const uint REPLACE = 0x1E01;\n    public const uint INCR = 0x1E02;\n    public const uint DECR = 0x1E03;\n    public const uint VENDOR = 0x1F00;\n    public const uint RENDERER = 0x1F01;\n    public const uint VERSION = 0x1F02;\n    public const uint EXTENSIONS = 0x1F03;\n    public const uint NEAREST = 0x2600;\n    public const uint LINEAR = 0x2601;\n    public const uint NEAREST_MIPMAP_NEAREST = 0x2700;\n    public const uint LINEAR_MIPMAP_NEAREST = 0x2701;\n    public const uint NEAREST_MIPMAP_LINEAR = 0x2702;\n    public const uint LINEAR_MIPMAP_LINEAR = 0x2703;\n    public const uint TEXTURE_MAG_FILTER = 0x2800;\n    public const uint TEXTURE_MIN_FILTER = 0x2801;\n    public const uint TEXTURE_WRAP_S = 0x2802;\n    public const uint TEXTURE_WRAP_T = 0x2803;\n    public const uint PROXY_TEXTURE_1D = 0x8063;\n    public const uint PROXY_TEXTURE_2D = 0x8064;\n    public const uint REPEAT = 0x2901;\n    public const uint R3_G3_B2 = 0x2A10;\n    public const uint RGB4 = 0x804F;\n    public const uint RGB5 = 0x8050;\n    public const uint RGB8 = 0x8051;\n    public const uint RGB10 = 0x8052;\n    public const uint RGB12 = 0x8053;\n    public const uint RGB16 = 0x8054;\n    public const uint RGBA2 = 0x8055;\n    public const uint RGBA4 = 0x8056;\n    public const uint RGB5_A1 = 0x8057;\n    public const uint RGBA8 = 0x8058;\n    public const uint RGB10_A2 = 0x8059;\n    public const uint RGBA12 = 0x805A;\n    public const uint RGBA16 = 0x805B;\n    public const uint CURRENT_BIT = 0x00000001;\n    public const uint POINT_BIT = 0x00000002;\n    public const uint LINE_BIT = 0x00000004;\n    public const uint POLYGON_BIT = 0x00000008;\n    public const uint POLYGON_STIPPLE_BIT = 0x00000010;\n    public const uint PIXEL_MODE_BIT = 0x00000020;\n    public const uint LIGHTING_BIT = 0x00000040;\n    public const uint FOG_BIT = 0x00000080;\n    public const uint ACCUM_BUFFER_BIT = 0x00000200;\n    public const uint VIEWPORT_BIT = 0x00000800;\n    public const uint TRANSFORM_BIT = 0x00001000;\n    public const uint ENABLE_BIT = 0x00002000;\n    public const uint HINT_BIT = 0x00008000;\n    public const uint EVAL_BIT = 0x00010000;\n    public const uint LIST_BIT = 0x00020000;\n    public const uint TEXTURE_BIT = 0x00040000;\n    public const uint SCISSOR_BIT = 0x00080000;\n    public const uint ALL_ATTRIB_BITS = 0xFFFFFFFF;\n    public const uint CLIENT_PIXEL_STORE_BIT = 0x00000001;\n    public const uint CLIENT_VERTEX_ARRAY_BIT = 0x00000002;\n    public const uint CLIENT_ALL_ATTRIB_BITS = 0xFFFFFFFF;\n    public const uint QUAD_STRIP = 0x0008;\n    public const uint POLYGON = 0x0009;\n    public const uint ACCUM = 0x0100;\n    public const uint LOAD = 0x0101;\n    public const uint RETURN = 0x0102;\n    public const uint MULT = 0x0103;\n    public const uint ADD = 0x0104;\n    public const uint AUX0 = 0x0409;\n    public const uint AUX1 = 0x040A;\n    public const uint AUX2 = 0x040B;\n    public const uint AUX3 = 0x040C;\n    public const uint _2D = 0x0600;\n    public const uint _3D = 0x0601;\n    public const uint _3D_COLOR = 0x0602;\n    public const uint _3D_COLOR_TEXTURE = 0x0603;\n    public const uint _4D_COLOR_TEXTURE = 0x0604;\n    public const uint PASS_THROUGH_TOKEN = 0x0700;\n    public const uint POINT_TOKEN = 0x0701;\n    public const uint LINE_TOKEN = 0x0702;\n    public const uint POLYGON_TOKEN = 0x0703;\n    public const uint BITMAP_TOKEN = 0x0704;\n    public const uint DRAW_PIXEL_TOKEN = 0x0705;\n    public const uint COPY_PIXEL_TOKEN = 0x0706;\n    public const uint LINE_RESET_TOKEN = 0x0707;\n    public const uint EXP = 0x0800;\n    public const uint EXP2 = 0x0801;\n    public const uint COEFF = 0x0A00;\n    public const uint ORDER = 0x0A01;\n    public const uint DOMAIN = 0x0A02;\n    public const uint PIXEL_MAP_I_TO_I = 0x0C70;\n    public const uint PIXEL_MAP_S_TO_S = 0x0C71;\n    public const uint PIXEL_MAP_I_TO_R = 0x0C72;\n    public const uint PIXEL_MAP_I_TO_G = 0x0C73;\n    public const uint PIXEL_MAP_I_TO_B = 0x0C74;\n    public const uint PIXEL_MAP_I_TO_A = 0x0C75;\n    public const uint PIXEL_MAP_R_TO_R = 0x0C76;\n    public const uint PIXEL_MAP_G_TO_G = 0x0C77;\n    public const uint PIXEL_MAP_B_TO_B = 0x0C78;\n    public const uint PIXEL_MAP_A_TO_A = 0x0C79;\n    public const uint VERTEX_ARRAY_POINTER = 0x808E;\n    public const uint NORMAL_ARRAY_POINTER = 0x808F;\n    public const uint COLOR_ARRAY_POINTER = 0x8090;\n    public const uint INDEX_ARRAY_POINTER = 0x8091;\n    public const uint TEXTURE_COORD_ARRAY_POINTER = 0x8092;\n    public const uint EDGE_FLAG_ARRAY_POINTER = 0x8093;\n    public const uint FEEDBACK_BUFFER_POINTER = 0x0DF0;\n    public const uint SELECTION_BUFFER_POINTER = 0x0DF3;\n    public const uint CURRENT_COLOR = 0x0B00;\n    public const uint CURRENT_INDEX = 0x0B01;\n    public const uint CURRENT_NORMAL = 0x0B02;\n    public const uint CURRENT_TEXTURE_COORDS = 0x0B03;\n    public const uint CURRENT_RASTER_COLOR = 0x0B04;\n    public const uint CURRENT_RASTER_INDEX = 0x0B05;\n    public const uint CURRENT_RASTER_TEXTURE_COORDS = 0x0B06;\n    public const uint CURRENT_RASTER_POSITION = 0x0B07;\n    public const uint CURRENT_RASTER_POSITION_VALID = 0x0B08;\n    public const uint CURRENT_RASTER_DISTANCE = 0x0B09;\n    public const uint POINT_SMOOTH = 0x0B10;\n    public const uint LINE_STIPPLE = 0x0B24;\n    public const uint LINE_STIPPLE_PATTERN = 0x0B25;\n    public const uint LINE_STIPPLE_REPEAT = 0x0B26;\n    public const uint LIST_MODE = 0x0B30;\n    public const uint MAX_LIST_NESTING = 0x0B31;\n    public const uint LIST_BASE = 0x0B32;\n    public const uint LIST_INDEX = 0x0B33;\n    public const uint POLYGON_STIPPLE = 0x0B42;\n    public const uint EDGE_FLAG = 0x0B43;\n    public const uint LIGHTING = 0x0B50;\n    public const uint LIGHT_MODEL_LOCAL_VIEWER = 0x0B51;\n    public const uint LIGHT_MODEL_TWO_SIDE = 0x0B52;\n    public const uint LIGHT_MODEL_AMBIENT = 0x0B53;\n    public const uint SHADE_MODEL = 0x0B54;\n    public const uint COLOR_MATERIAL_FACE = 0x0B55;\n    public const uint COLOR_MATERIAL_PARAMETER = 0x0B56;\n    public const uint COLOR_MATERIAL = 0x0B57;\n    public const uint FOG = 0x0B60;\n    public const uint FOG_INDEX = 0x0B61;\n    public const uint FOG_DENSITY = 0x0B62;\n    public const uint FOG_START = 0x0B63;\n    public const uint FOG_END = 0x0B64;\n    public const uint FOG_MODE = 0x0B65;\n    public const uint FOG_COLOR = 0x0B66;\n    public const uint ACCUM_CLEAR_VALUE = 0x0B80;\n    public const uint MATRIX_MODE = 0x0BA0;\n    public const uint NORMALIZE = 0x0BA1;\n    public const uint MODELVIEW_STACK_DEPTH = 0x0BA3;\n    public const uint PROJECTION_STACK_DEPTH = 0x0BA4;\n    public const uint TEXTURE_STACK_DEPTH = 0x0BA5;\n    public const uint MODELVIEW_MATRIX = 0x0BA6;\n    public const uint PROJECTION_MATRIX = 0x0BA7;\n    public const uint TEXTURE_MATRIX = 0x0BA8;\n    public const uint ATTRIB_STACK_DEPTH = 0x0BB0;\n    public const uint CLIENT_ATTRIB_STACK_DEPTH = 0x0BB1;\n    public const uint ALPHA_TEST = 0x0BC0;\n    public const uint ALPHA_TEST_FUNC = 0x0BC1;\n    public const uint ALPHA_TEST_REF = 0x0BC2;\n    public const uint INDEX_LOGIC_OP = 0x0BF1;\n    public const uint LOGIC_OP = 0x0BF1;\n    public const uint AUX_BUFFERS = 0x0C00;\n    public const uint INDEX_CLEAR_VALUE = 0x0C20;\n    public const uint INDEX_WRITEMASK = 0x0C21;\n    public const uint INDEX_MODE = 0x0C30;\n    public const uint RGBA_MODE = 0x0C31;\n    public const uint RENDER_MODE = 0x0C40;\n    public const uint PERSPECTIVE_CORRECTION_HINT = 0x0C50;\n    public const uint POINT_SMOOTH_HINT = 0x0C51;\n    public const uint FOG_HINT = 0x0C54;\n    public const uint TEXTURE_GEN_S = 0x0C60;\n    public const uint TEXTURE_GEN_T = 0x0C61;\n    public const uint TEXTURE_GEN_R = 0x0C62;\n    public const uint TEXTURE_GEN_Q = 0x0C63;\n    public const uint PIXEL_MAP_I_TO_I_SIZE = 0x0CB0;\n    public const uint PIXEL_MAP_S_TO_S_SIZE = 0x0CB1;\n    public const uint PIXEL_MAP_I_TO_R_SIZE = 0x0CB2;\n    public const uint PIXEL_MAP_I_TO_G_SIZE = 0x0CB3;\n    public const uint PIXEL_MAP_I_TO_B_SIZE = 0x0CB4;\n    public const uint PIXEL_MAP_I_TO_A_SIZE = 0x0CB5;\n    public const uint PIXEL_MAP_R_TO_R_SIZE = 0x0CB6;\n    public const uint PIXEL_MAP_G_TO_G_SIZE = 0x0CB7;\n    public const uint PIXEL_MAP_B_TO_B_SIZE = 0x0CB8;\n    public const uint PIXEL_MAP_A_TO_A_SIZE = 0x0CB9;\n    public const uint MAP_COLOR = 0x0D10;\n    public const uint MAP_STENCIL = 0x0D11;\n    public const uint INDEX_SHIFT = 0x0D12;\n    public const uint INDEX_OFFSET = 0x0D13;\n    public const uint RED_SCALE = 0x0D14;\n    public const uint RED_BIAS = 0x0D15;\n    public const uint ZOOM_X = 0x0D16;\n    public const uint ZOOM_Y = 0x0D17;\n    public const uint GREEN_SCALE = 0x0D18;\n    public const uint GREEN_BIAS = 0x0D19;\n    public const uint BLUE_SCALE = 0x0D1A;\n    public const uint BLUE_BIAS = 0x0D1B;\n    public const uint ALPHA_SCALE = 0x0D1C;\n    public const uint ALPHA_BIAS = 0x0D1D;\n    public const uint DEPTH_SCALE = 0x0D1E;\n    public const uint DEPTH_BIAS = 0x0D1F;\n    public const uint MAX_EVAL_ORDER = 0x0D30;\n    public const uint MAX_LIGHTS = 0x0D31;\n    public const uint MAX_CLIP_PLANES = 0x0D32;\n    public const uint MAX_PIXEL_MAP_TABLE = 0x0D34;\n    public const uint MAX_ATTRIB_STACK_DEPTH = 0x0D35;\n    public const uint MAX_MODELVIEW_STACK_DEPTH = 0x0D36;\n    public const uint MAX_NAME_STACK_DEPTH = 0x0D37;\n    public const uint MAX_PROJECTION_STACK_DEPTH = 0x0D38;\n    public const uint MAX_TEXTURE_STACK_DEPTH = 0x0D39;\n    public const uint MAX_CLIENT_ATTRIB_STACK_DEPTH = 0x0D3B;\n    public const uint INDEX_BITS = 0x0D51;\n    public const uint RED_BITS = 0x0D52;\n    public const uint GREEN_BITS = 0x0D53;\n    public const uint BLUE_BITS = 0x0D54;\n    public const uint ALPHA_BITS = 0x0D55;\n    public const uint DEPTH_BITS = 0x0D56;\n    public const uint STENCIL_BITS = 0x0D57;\n    public const uint ACCUM_RED_BITS = 0x0D58;\n    public const uint ACCUM_GREEN_BITS = 0x0D59;\n    public const uint ACCUM_BLUE_BITS = 0x0D5A;\n    public const uint ACCUM_ALPHA_BITS = 0x0D5B;\n    public const uint NAME_STACK_DEPTH = 0x0D70;\n    public const uint AUTO_NORMAL = 0x0D80;\n    public const uint MAP1_COLOR_4 = 0x0D90;\n    public const uint MAP1_INDEX = 0x0D91;\n    public const uint MAP1_NORMAL = 0x0D92;\n    public const uint MAP1_TEXTURE_COORD_1 = 0x0D93;\n    public const uint MAP1_TEXTURE_COORD_2 = 0x0D94;\n    public const uint MAP1_TEXTURE_COORD_3 = 0x0D95;\n    public const uint MAP1_TEXTURE_COORD_4 = 0x0D96;\n    public const uint MAP1_VERTEX_3 = 0x0D97;\n    public const uint MAP1_VERTEX_4 = 0x0D98;\n    public const uint MAP2_COLOR_4 = 0x0DB0;\n    public const uint MAP2_INDEX = 0x0DB1;\n    public const uint MAP2_NORMAL = 0x0DB2;\n    public const uint MAP2_TEXTURE_COORD_1 = 0x0DB3;\n    public const uint MAP2_TEXTURE_COORD_2 = 0x0DB4;\n    public const uint MAP2_TEXTURE_COORD_3 = 0x0DB5;\n    public const uint MAP2_TEXTURE_COORD_4 = 0x0DB6;\n    public const uint MAP2_VERTEX_3 = 0x0DB7;\n    public const uint MAP2_VERTEX_4 = 0x0DB8;\n    public const uint MAP1_GRID_DOMAIN = 0x0DD0;\n    public const uint MAP1_GRID_SEGMENTS = 0x0DD1;\n    public const uint MAP2_GRID_DOMAIN = 0x0DD2;\n    public const uint MAP2_GRID_SEGMENTS = 0x0DD3;\n    public const uint FEEDBACK_BUFFER_SIZE = 0x0DF1;\n    public const uint FEEDBACK_BUFFER_TYPE = 0x0DF2;\n    public const uint SELECTION_BUFFER_SIZE = 0x0DF4;\n    public const uint VERTEX_ARRAY = 0x8074;\n    public const uint NORMAL_ARRAY = 0x8075;\n    public const uint COLOR_ARRAY = 0x8076;\n    public const uint INDEX_ARRAY = 0x8077;\n    public const uint TEXTURE_COORD_ARRAY = 0x8078;\n    public const uint EDGE_FLAG_ARRAY = 0x8079;\n    public const uint VERTEX_ARRAY_SIZE = 0x807A;\n    public const uint VERTEX_ARRAY_TYPE = 0x807B;\n    public const uint VERTEX_ARRAY_STRIDE = 0x807C;\n    public const uint NORMAL_ARRAY_TYPE = 0x807E;\n    public const uint NORMAL_ARRAY_STRIDE = 0x807F;\n    public const uint COLOR_ARRAY_SIZE = 0x8081;\n    public const uint COLOR_ARRAY_TYPE = 0x8082;\n    public const uint COLOR_ARRAY_STRIDE = 0x8083;\n    public const uint INDEX_ARRAY_TYPE = 0x8085;\n    public const uint INDEX_ARRAY_STRIDE = 0x8086;\n    public const uint TEXTURE_COORD_ARRAY_SIZE = 0x8088;\n    public const uint TEXTURE_COORD_ARRAY_TYPE = 0x8089;\n    public const uint TEXTURE_COORD_ARRAY_STRIDE = 0x808A;\n    public const uint EDGE_FLAG_ARRAY_STRIDE = 0x808C;\n    public const uint TEXTURE_COMPONENTS = 0x1003;\n    public const uint TEXTURE_BORDER = 0x1005;\n    public const uint TEXTURE_LUMINANCE_SIZE = 0x8060;\n    public const uint TEXTURE_INTENSITY_SIZE = 0x8061;\n    public const uint TEXTURE_PRIORITY = 0x8066;\n    public const uint TEXTURE_RESIDENT = 0x8067;\n    public const uint AMBIENT = 0x1200;\n    public const uint DIFFUSE = 0x1201;\n    public const uint SPECULAR = 0x1202;\n    public const uint POSITION = 0x1203;\n    public const uint SPOT_DIRECTION = 0x1204;\n    public const uint SPOT_EXPONENT = 0x1205;\n    public const uint SPOT_CUTOFF = 0x1206;\n    public const uint CONSTANT_ATTENUATION = 0x1207;\n    public const uint LINEAR_ATTENUATION = 0x1208;\n    public const uint QUADRATIC_ATTENUATION = 0x1209;\n    public const uint COMPILE = 0x1300;\n    public const uint COMPILE_AND_EXECUTE = 0x1301;\n    public const uint _2_BYTES = 0x1407;\n    public const uint _3_BYTES = 0x1408;\n    public const uint _4_BYTES = 0x1409;\n    public const uint EMISSION = 0x1600;\n    public const uint SHININESS = 0x1601;\n    public const uint AMBIENT_AND_DIFFUSE = 0x1602;\n    public const uint COLOR_INDEXES = 0x1603;\n    public const uint MODELVIEW = 0x1700;\n    public const uint PROJECTION = 0x1701;\n    public const uint COLOR_INDEX = 0x1900;\n    public const uint LUMINANCE = 0x1909;\n    public const uint LUMINANCE_ALPHA = 0x190A;\n    public const uint BITMAP = 0x1A00;\n    public const uint RENDER = 0x1C00;\n    public const uint FEEDBACK = 0x1C01;\n    public const uint SELECT = 0x1C02;\n    public const uint FLAT = 0x1D00;\n    public const uint SMOOTH = 0x1D01;\n    public const uint S = 0x2000;\n    public const uint T = 0x2001;\n    public const uint R = 0x2002;\n    public const uint Q = 0x2003;\n    public const uint MODULATE = 0x2100;\n    public const uint DECAL = 0x2101;\n    public const uint TEXTURE_ENV_MODE = 0x2200;\n    public const uint TEXTURE_ENV_COLOR = 0x2201;\n    public const uint TEXTURE_ENV = 0x2300;\n    public const uint EYE_LINEAR = 0x2400;\n    public const uint OBJECT_LINEAR = 0x2401;\n    public const uint SPHERE_MAP = 0x2402;\n    public const uint TEXTURE_GEN_MODE = 0x2500;\n    public const uint OBJECT_PLANE = 0x2501;\n    public const uint EYE_PLANE = 0x2502;\n    public const uint CLAMP = 0x2900;\n    public const uint ALPHA4 = 0x803B;\n    public const uint ALPHA8 = 0x803C;\n    public const uint ALPHA12 = 0x803D;\n    public const uint ALPHA16 = 0x803E;\n    public const uint LUMINANCE4 = 0x803F;\n    public const uint LUMINANCE8 = 0x8040;\n    public const uint LUMINANCE12 = 0x8041;\n    public const uint LUMINANCE16 = 0x8042;\n    public const uint LUMINANCE4_ALPHA4 = 0x8043;\n    public const uint LUMINANCE6_ALPHA2 = 0x8044;\n    public const uint LUMINANCE8_ALPHA8 = 0x8045;\n    public const uint LUMINANCE12_ALPHA4 = 0x8046;\n    public const uint LUMINANCE12_ALPHA12 = 0x8047;\n    public const uint LUMINANCE16_ALPHA16 = 0x8048;\n    public const uint INTENSITY = 0x8049;\n    public const uint INTENSITY4 = 0x804A;\n    public const uint INTENSITY8 = 0x804B;\n    public const uint INTENSITY12 = 0x804C;\n    public const uint INTENSITY16 = 0x804D;\n    public const uint V2F = 0x2A20;\n    public const uint V3F = 0x2A21;\n    public const uint C4UB_V2F = 0x2A22;\n    public const uint C4UB_V3F = 0x2A23;\n    public const uint C3F_V3F = 0x2A24;\n    public const uint N3F_V3F = 0x2A25;\n    public const uint C4F_N3F_V3F = 0x2A26;\n    public const uint T2F_V3F = 0x2A27;\n    public const uint T4F_V4F = 0x2A28;\n    public const uint T2F_C4UB_V3F = 0x2A29;\n    public const uint T2F_C3F_V3F = 0x2A2A;\n    public const uint T2F_N3F_V3F = 0x2A2B;\n    public const uint T2F_C4F_N3F_V3F = 0x2A2C;\n    public const uint T4F_C4F_N3F_V4F = 0x2A2D;\n    public const uint CLIP_PLANE0 = 0x3000;\n    public const uint CLIP_PLANE1 = 0x3001;\n    public const uint CLIP_PLANE2 = 0x3002;\n    public const uint CLIP_PLANE3 = 0x3003;\n    public const uint CLIP_PLANE4 = 0x3004;\n    public const uint CLIP_PLANE5 = 0x3005;\n    public const uint LIGHT0 = 0x4000;\n    public const uint LIGHT1 = 0x4001;\n    public const uint LIGHT2 = 0x4002;\n    public const uint LIGHT3 = 0x4003;\n    public const uint LIGHT4 = 0x4004;\n    public const uint LIGHT5 = 0x4005;\n    public const uint LIGHT6 = 0x4006;\n    public const uint LIGHT7 = 0x4007;\n    public const uint UNSIGNED_BYTE_3_3_2 = 0x8032;\n    public const uint UNSIGNED_SHORT_4_4_4_4 = 0x8033;\n    public const uint UNSIGNED_SHORT_5_5_5_1 = 0x8034;\n    public const uint UNSIGNED_INT_8_8_8_8 = 0x8035;\n    public const uint UNSIGNED_INT_10_10_10_2 = 0x8036;\n    public const uint TEXTURE_BINDING_3D = 0x806A;\n    public const uint PACK_SKIP_IMAGES = 0x806B;\n    public const uint PACK_IMAGE_HEIGHT = 0x806C;\n    public const uint UNPACK_SKIP_IMAGES = 0x806D;\n    public const uint UNPACK_IMAGE_HEIGHT = 0x806E;\n    public const uint TEXTURE_3D = 0x806F;\n    public const uint PROXY_TEXTURE_3D = 0x8070;\n    public const uint TEXTURE_DEPTH = 0x8071;\n    public const uint TEXTURE_WRAP_R = 0x8072;\n    public const uint MAX_3D_TEXTURE_SIZE = 0x8073;\n    public const uint UNSIGNED_BYTE_2_3_3_REV = 0x8362;\n    public const uint UNSIGNED_SHORT_5_6_5 = 0x8363;\n    public const uint UNSIGNED_SHORT_5_6_5_REV = 0x8364;\n    public const uint UNSIGNED_SHORT_4_4_4_4_REV = 0x8365;\n    public const uint UNSIGNED_SHORT_1_5_5_5_REV = 0x8366;\n    public const uint UNSIGNED_INT_8_8_8_8_REV = 0x8367;\n    public const uint UNSIGNED_INT_2_10_10_10_REV = 0x8368;\n    public const uint BGR = 0x80E0;\n    public const uint BGRA = 0x80E1;\n    public const uint MAX_ELEMENTS_VERTICES = 0x80E8;\n    public const uint MAX_ELEMENTS_INDICES = 0x80E9;\n    public const uint CLAMP_TO_EDGE = 0x812F;\n    public const uint TEXTURE_MIN_LOD = 0x813A;\n    public const uint TEXTURE_MAX_LOD = 0x813B;\n    public const uint TEXTURE_BASE_LEVEL = 0x813C;\n    public const uint TEXTURE_MAX_LEVEL = 0x813D;\n    public const uint SMOOTH_POINT_SIZE_RANGE = 0x0B12;\n    public const uint SMOOTH_POINT_SIZE_GRANULARITY = 0x0B13;\n    public const uint SMOOTH_LINE_WIDTH_RANGE = 0x0B22;\n    public const uint SMOOTH_LINE_WIDTH_GRANULARITY = 0x0B23;\n    public const uint ALIASED_LINE_WIDTH_RANGE = 0x846E;\n    public const uint RESCALE_NORMAL = 0x803A;\n    public const uint LIGHT_MODEL_COLOR_CONTROL = 0x81F8;\n    public const uint SINGLE_COLOR = 0x81F9;\n    public const uint SEPARATE_SPECULAR_COLOR = 0x81FA;\n    public const uint ALIASED_POINT_SIZE_RANGE = 0x846D;\n    public const uint TEXTURE0 = 0x84C0;\n    public const uint TEXTURE1 = 0x84C1;\n    public const uint TEXTURE2 = 0x84C2;\n    public const uint TEXTURE3 = 0x84C3;\n    public const uint TEXTURE4 = 0x84C4;\n    public const uint TEXTURE5 = 0x84C5;\n    public const uint TEXTURE6 = 0x84C6;\n    public const uint TEXTURE7 = 0x84C7;\n    public const uint TEXTURE8 = 0x84C8;\n    public const uint TEXTURE9 = 0x84C9;\n    public const uint TEXTURE10 = 0x84CA;\n    public const uint TEXTURE11 = 0x84CB;\n    public const uint TEXTURE12 = 0x84CC;\n    public const uint TEXTURE13 = 0x84CD;\n    public const uint TEXTURE14 = 0x84CE;\n    public const uint TEXTURE15 = 0x84CF;\n    public const uint TEXTURE16 = 0x84D0;\n    public const uint TEXTURE17 = 0x84D1;\n    public const uint TEXTURE18 = 0x84D2;\n    public const uint TEXTURE19 = 0x84D3;\n    public const uint TEXTURE20 = 0x84D4;\n    public const uint TEXTURE21 = 0x84D5;\n    public const uint TEXTURE22 = 0x84D6;\n    public const uint TEXTURE23 = 0x84D7;\n    public const uint TEXTURE24 = 0x84D8;\n    public const uint TEXTURE25 = 0x84D9;\n    public const uint TEXTURE26 = 0x84DA;\n    public const uint TEXTURE27 = 0x84DB;\n    public const uint TEXTURE28 = 0x84DC;\n    public const uint TEXTURE29 = 0x84DD;\n    public const uint TEXTURE30 = 0x84DE;\n    public const uint TEXTURE31 = 0x84DF;\n    public const uint ACTIVE_TEXTURE = 0x84E0;\n    public const uint MULTISAMPLE = 0x809D;\n    public const uint SAMPLE_ALPHA_TO_COVERAGE = 0x809E;\n    public const uint SAMPLE_ALPHA_TO_ONE = 0x809F;\n    public const uint SAMPLE_COVERAGE = 0x80A0;\n    public const uint SAMPLE_BUFFERS = 0x80A8;\n    public const uint SAMPLES = 0x80A9;\n    public const uint SAMPLE_COVERAGE_VALUE = 0x80AA;\n    public const uint SAMPLE_COVERAGE_INVERT = 0x80AB;\n    public const uint TEXTURE_CUBE_MAP = 0x8513;\n    public const uint TEXTURE_BINDING_CUBE_MAP = 0x8514;\n    public const uint TEXTURE_CUBE_MAP_POSITIVE_X = 0x8515;\n    public const uint TEXTURE_CUBE_MAP_NEGATIVE_X = 0x8516;\n    public const uint TEXTURE_CUBE_MAP_POSITIVE_Y = 0x8517;\n    public const uint TEXTURE_CUBE_MAP_NEGATIVE_Y = 0x8518;\n    public const uint TEXTURE_CUBE_MAP_POSITIVE_Z = 0x8519;\n    public const uint TEXTURE_CUBE_MAP_NEGATIVE_Z = 0x851A;\n    public const uint PROXY_TEXTURE_CUBE_MAP = 0x851B;\n    public const uint MAX_CUBE_MAP_TEXTURE_SIZE = 0x851C;\n    public const uint COMPRESSED_RGB = 0x84ED;\n    public const uint COMPRESSED_RGBA = 0x84EE;\n    public const uint TEXTURE_COMPRESSION_HINT = 0x84EF;\n    public const uint TEXTURE_COMPRESSED_IMAGE_SIZE = 0x86A0;\n    public const uint TEXTURE_COMPRESSED = 0x86A1;\n    public const uint NUM_COMPRESSED_TEXTURE_FORMATS = 0x86A2;\n    public const uint COMPRESSED_TEXTURE_FORMATS = 0x86A3;\n    public const uint CLAMP_TO_BORDER = 0x812D;\n    public const uint CLIENT_ACTIVE_TEXTURE = 0x84E1;\n    public const uint MAX_TEXTURE_UNITS = 0x84E2;\n    public const uint TRANSPOSE_MODELVIEW_MATRIX = 0x84E3;\n    public const uint TRANSPOSE_PROJECTION_MATRIX = 0x84E4;\n    public const uint TRANSPOSE_TEXTURE_MATRIX = 0x84E5;\n    public const uint TRANSPOSE_COLOR_MATRIX = 0x84E6;\n    public const uint MULTISAMPLE_BIT = 0x20000000;\n    public const uint NORMAL_MAP = 0x8511;\n    public const uint REFLECTION_MAP = 0x8512;\n    public const uint COMPRESSED_ALPHA = 0x84E9;\n    public const uint COMPRESSED_LUMINANCE = 0x84EA;\n    public const uint COMPRESSED_LUMINANCE_ALPHA = 0x84EB;\n    public const uint COMPRESSED_INTENSITY = 0x84EC;\n    public const uint COMBINE = 0x8570;\n    public const uint COMBINE_RGB = 0x8571;\n    public const uint COMBINE_ALPHA = 0x8572;\n    public const uint SOURCE0_RGB = 0x8580;\n    public const uint SOURCE1_RGB = 0x8581;\n    public const uint SOURCE2_RGB = 0x8582;\n    public const uint SOURCE0_ALPHA = 0x8588;\n    public const uint SOURCE1_ALPHA = 0x8589;\n    public const uint SOURCE2_ALPHA = 0x858A;\n    public const uint OPERAND0_RGB = 0x8590;\n    public const uint OPERAND1_RGB = 0x8591;\n    public const uint OPERAND2_RGB = 0x8592;\n    public const uint OPERAND0_ALPHA = 0x8598;\n    public const uint OPERAND1_ALPHA = 0x8599;\n    public const uint OPERAND2_ALPHA = 0x859A;\n    public const uint RGB_SCALE = 0x8573;\n    public const uint ADD_SIGNED = 0x8574;\n    public const uint INTERPOLATE = 0x8575;\n    public const uint SUBTRACT = 0x84E7;\n    public const uint CONSTANT = 0x8576;\n    public const uint PRIMARY_COLOR = 0x8577;\n    public const uint PREVIOUS = 0x8578;\n    public const uint DOT3_RGB = 0x86AE;\n    public const uint DOT3_RGBA = 0x86AF;\n    public const uint BLEND_DST_RGB = 0x80C8;\n    public const uint BLEND_SRC_RGB = 0x80C9;\n    public const uint BLEND_DST_ALPHA = 0x80CA;\n    public const uint BLEND_SRC_ALPHA = 0x80CB;\n    public const uint POINT_FADE_THRESHOLD_SIZE = 0x8128;\n    public const uint DEPTH_COMPONENT16 = 0x81A5;\n    public const uint DEPTH_COMPONENT24 = 0x81A6;\n    public const uint DEPTH_COMPONENT32 = 0x81A7;\n    public const uint MIRRORED_REPEAT = 0x8370;\n    public const uint MAX_TEXTURE_LOD_BIAS = 0x84FD;\n    public const uint TEXTURE_LOD_BIAS = 0x8501;\n    public const uint INCR_WRAP = 0x8507;\n    public const uint DECR_WRAP = 0x8508;\n    public const uint TEXTURE_DEPTH_SIZE = 0x884A;\n    public const uint TEXTURE_COMPARE_MODE = 0x884C;\n    public const uint TEXTURE_COMPARE_FUNC = 0x884D;\n    public const uint POINT_SIZE_MIN = 0x8126;\n    public const uint POINT_SIZE_MAX = 0x8127;\n    public const uint POINT_DISTANCE_ATTENUATION = 0x8129;\n    public const uint GENERATE_MIPMAP = 0x8191;\n    public const uint GENERATE_MIPMAP_HINT = 0x8192;\n    public const uint FOG_COORDINATE_SOURCE = 0x8450;\n    public const uint FOG_COORDINATE = 0x8451;\n    public const uint FRAGMENT_DEPTH = 0x8452;\n    public const uint CURRENT_FOG_COORDINATE = 0x8453;\n    public const uint FOG_COORDINATE_ARRAY_TYPE = 0x8454;\n    public const uint FOG_COORDINATE_ARRAY_STRIDE = 0x8455;\n    public const uint FOG_COORDINATE_ARRAY_POINTER = 0x8456;\n    public const uint FOG_COORDINATE_ARRAY = 0x8457;\n    public const uint COLOR_SUM = 0x8458;\n    public const uint CURRENT_SECONDARY_COLOR = 0x8459;\n    public const uint SECONDARY_COLOR_ARRAY_SIZE = 0x845A;\n    public const uint SECONDARY_COLOR_ARRAY_TYPE = 0x845B;\n    public const uint SECONDARY_COLOR_ARRAY_STRIDE = 0x845C;\n    public const uint SECONDARY_COLOR_ARRAY_POINTER = 0x845D;\n    public const uint SECONDARY_COLOR_ARRAY = 0x845E;\n    public const uint TEXTURE_FILTER_CONTROL = 0x8500;\n    public const uint DEPTH_TEXTURE_MODE = 0x884B;\n    public const uint COMPARE_R_TO_TEXTURE = 0x884E;\n    public const uint FUNC_ADD = 0x8006;\n    public const uint FUNC_SUBTRACT = 0x800A;\n    public const uint FUNC_REVERSE_SUBTRACT = 0x800B;\n    public const uint MIN = 0x8007;\n    public const uint MAX = 0x8008;\n    public const uint CONSTANT_COLOR = 0x8001;\n    public const uint ONE_MINUS_CONSTANT_COLOR = 0x8002;\n    public const uint CONSTANT_ALPHA = 0x8003;\n    public const uint ONE_MINUS_CONSTANT_ALPHA = 0x8004;\n    public const uint BUFFER_SIZE = 0x8764;\n    public const uint BUFFER_USAGE = 0x8765;\n    public const uint QUERY_COUNTER_BITS = 0x8864;\n    public const uint CURRENT_QUERY = 0x8865;\n    public const uint QUERY_RESULT = 0x8866;\n    public const uint QUERY_RESULT_AVAILABLE = 0x8867;\n    public const uint ARRAY_BUFFER = 0x8892;\n    public const uint ELEMENT_ARRAY_BUFFER = 0x8893;\n    public const uint ARRAY_BUFFER_BINDING = 0x8894;\n    public const uint ELEMENT_ARRAY_BUFFER_BINDING = 0x8895;\n    public const uint VERTEX_ATTRIB_ARRAY_BUFFER_BINDING = 0x889F;\n    public const uint READ_ONLY = 0x88B8;\n    public const uint WRITE_ONLY = 0x88B9;\n    public const uint READ_WRITE = 0x88BA;\n    public const uint BUFFER_ACCESS = 0x88BB;\n    public const uint BUFFER_MAPPED = 0x88BC;\n    public const uint BUFFER_MAP_POINTER = 0x88BD;\n    public const uint STREAM_DRAW = 0x88E0;\n    public const uint STREAM_READ = 0x88E1;\n    public const uint STREAM_COPY = 0x88E2;\n    public const uint STATIC_DRAW = 0x88E4;\n    public const uint STATIC_READ = 0x88E5;\n    public const uint STATIC_COPY = 0x88E6;\n    public const uint DYNAMIC_DRAW = 0x88E8;\n    public const uint DYNAMIC_READ = 0x88E9;\n    public const uint DYNAMIC_COPY = 0x88EA;\n    public const uint SAMPLES_PASSED = 0x8914;\n    public const uint SRC1_ALPHA = 0x8589;\n    public const uint VERTEX_ARRAY_BUFFER_BINDING = 0x8896;\n    public const uint NORMAL_ARRAY_BUFFER_BINDING = 0x8897;\n    public const uint COLOR_ARRAY_BUFFER_BINDING = 0x8898;\n    public const uint INDEX_ARRAY_BUFFER_BINDING = 0x8899;\n    public const uint TEXTURE_COORD_ARRAY_BUFFER_BINDING = 0x889A;\n    public const uint EDGE_FLAG_ARRAY_BUFFER_BINDING = 0x889B;\n    public const uint SECONDARY_COLOR_ARRAY_BUFFER_BINDING = 0x889C;\n    public const uint FOG_COORDINATE_ARRAY_BUFFER_BINDING = 0x889D;\n    public const uint WEIGHT_ARRAY_BUFFER_BINDING = 0x889E;\n    public const uint FOG_COORD_SRC = 0x8450;\n    public const uint FOG_COORD = 0x8451;\n    public const uint CURRENT_FOG_COORD = 0x8453;\n    public const uint FOG_COORD_ARRAY_TYPE = 0x8454;\n    public const uint FOG_COORD_ARRAY_STRIDE = 0x8455;\n    public const uint FOG_COORD_ARRAY_POINTER = 0x8456;\n    public const uint FOG_COORD_ARRAY = 0x8457;\n    public const uint FOG_COORD_ARRAY_BUFFER_BINDING = 0x889D;\n    public const uint SRC0_RGB = 0x8580;\n    public const uint SRC1_RGB = 0x8581;\n    public const uint SRC2_RGB = 0x8582;\n    public const uint SRC0_ALPHA = 0x8588;\n    public const uint SRC2_ALPHA = 0x858A;\n    public const uint BLEND_EQUATION_RGB = 0x8009;\n    public const uint VERTEX_ATTRIB_ARRAY_ENABLED = 0x8622;\n    public const uint VERTEX_ATTRIB_ARRAY_SIZE = 0x8623;\n    public const uint VERTEX_ATTRIB_ARRAY_STRIDE = 0x8624;\n    public const uint VERTEX_ATTRIB_ARRAY_TYPE = 0x8625;\n    public const uint CURRENT_VERTEX_ATTRIB = 0x8626;\n    public const uint VERTEX_PROGRAM_POINT_SIZE = 0x8642;\n    public const uint VERTEX_ATTRIB_ARRAY_POINTER = 0x8645;\n    public const uint STENCIL_BACK_FUNC = 0x8800;\n    public const uint STENCIL_BACK_FAIL = 0x8801;\n    public const uint STENCIL_BACK_PASS_DEPTH_FAIL = 0x8802;\n    public const uint STENCIL_BACK_PASS_DEPTH_PASS = 0x8803;\n    public const uint MAX_DRAW_BUFFERS = 0x8824;\n    public const uint DRAW_BUFFER0 = 0x8825;\n    public const uint DRAW_BUFFER1 = 0x8826;\n    public const uint DRAW_BUFFER2 = 0x8827;\n    public const uint DRAW_BUFFER3 = 0x8828;\n    public const uint DRAW_BUFFER4 = 0x8829;\n    public const uint DRAW_BUFFER5 = 0x882A;\n    public const uint DRAW_BUFFER6 = 0x882B;\n    public const uint DRAW_BUFFER7 = 0x882C;\n    public const uint DRAW_BUFFER8 = 0x882D;\n    public const uint DRAW_BUFFER9 = 0x882E;\n    public const uint DRAW_BUFFER10 = 0x882F;\n    public const uint DRAW_BUFFER11 = 0x8830;\n    public const uint DRAW_BUFFER12 = 0x8831;\n    public const uint DRAW_BUFFER13 = 0x8832;\n    public const uint DRAW_BUFFER14 = 0x8833;\n    public const uint DRAW_BUFFER15 = 0x8834;\n    public const uint BLEND_EQUATION_ALPHA = 0x883D;\n    public const uint MAX_VERTEX_ATTRIBS = 0x8869;\n    public const uint VERTEX_ATTRIB_ARRAY_NORMALIZED = 0x886A;\n    public const uint MAX_TEXTURE_IMAGE_UNITS = 0x8872;\n    public const uint FRAGMENT_SHADER = 0x8B30;\n    public const uint VERTEX_SHADER = 0x8B31;\n    public const uint MAX_FRAGMENT_UNIFORM_COMPONENTS = 0x8B49;\n    public const uint MAX_VERTEX_UNIFORM_COMPONENTS = 0x8B4A;\n    public const uint MAX_VARYING_FLOATS = 0x8B4B;\n    public const uint MAX_VERTEX_TEXTURE_IMAGE_UNITS = 0x8B4C;\n    public const uint MAX_COMBINED_TEXTURE_IMAGE_UNITS = 0x8B4D;\n    public const uint SHADER_TYPE = 0x8B4F;\n    public const uint FLOAT_VEC2 = 0x8B50;\n    public const uint FLOAT_VEC3 = 0x8B51;\n    public const uint FLOAT_VEC4 = 0x8B52;\n    public const uint INT_VEC2 = 0x8B53;\n    public const uint INT_VEC3 = 0x8B54;\n    public const uint INT_VEC4 = 0x8B55;\n    public const uint BOOL = 0x8B56;\n    public const uint BOOL_VEC2 = 0x8B57;\n    public const uint BOOL_VEC3 = 0x8B58;\n    public const uint BOOL_VEC4 = 0x8B59;\n    public const uint FLOAT_MAT2 = 0x8B5A;\n    public const uint FLOAT_MAT3 = 0x8B5B;\n    public const uint FLOAT_MAT4 = 0x8B5C;\n    public const uint SAMPLER_1D = 0x8B5D;\n    public const uint SAMPLER_2D = 0x8B5E;\n    public const uint SAMPLER_3D = 0x8B5F;\n    public const uint SAMPLER_CUBE = 0x8B60;\n    public const uint SAMPLER_1D_SHADOW = 0x8B61;\n    public const uint SAMPLER_2D_SHADOW = 0x8B62;\n    public const uint DELETE_STATUS = 0x8B80;\n    public const uint COMPILE_STATUS = 0x8B81;\n    public const uint LINK_STATUS = 0x8B82;\n    public const uint VALIDATE_STATUS = 0x8B83;\n    public const uint INFO_LOG_LENGTH = 0x8B84;\n    public const uint ATTACHED_SHADERS = 0x8B85;\n    public const uint ACTIVE_UNIFORMS = 0x8B86;\n    public const uint ACTIVE_UNIFORM_MAX_LENGTH = 0x8B87;\n    public const uint SHADER_SOURCE_LENGTH = 0x8B88;\n    public const uint ACTIVE_ATTRIBUTES = 0x8B89;\n    public const uint ACTIVE_ATTRIBUTE_MAX_LENGTH = 0x8B8A;\n    public const uint FRAGMENT_SHADER_DERIVATIVE_HINT = 0x8B8B;\n    public const uint SHADING_LANGUAGE_VERSION = 0x8B8C;\n    public const uint CURRENT_PROGRAM = 0x8B8D;\n    public const uint POINT_SPRITE_COORD_ORIGIN = 0x8CA0;\n    public const uint LOWER_LEFT = 0x8CA1;\n    public const uint UPPER_LEFT = 0x8CA2;\n    public const uint STENCIL_BACK_REF = 0x8CA3;\n    public const uint STENCIL_BACK_VALUE_MASK = 0x8CA4;\n    public const uint STENCIL_BACK_WRITEMASK = 0x8CA5;\n    public const uint VERTEX_PROGRAM_TWO_SIDE = 0x8643;\n    public const uint POINT_SPRITE = 0x8861;\n    public const uint COORD_REPLACE = 0x8862;\n    public const uint MAX_TEXTURE_COORDS = 0x8871;\n    public const uint PIXEL_PACK_BUFFER = 0x88EB;\n    public const uint PIXEL_UNPACK_BUFFER = 0x88EC;\n    public const uint PIXEL_PACK_BUFFER_BINDING = 0x88ED;\n    public const uint PIXEL_UNPACK_BUFFER_BINDING = 0x88EF;\n    public const uint FLOAT_MAT2x3 = 0x8B65;\n    public const uint FLOAT_MAT2x4 = 0x8B66;\n    public const uint FLOAT_MAT3x2 = 0x8B67;\n    public const uint FLOAT_MAT3x4 = 0x8B68;\n    public const uint FLOAT_MAT4x2 = 0x8B69;\n    public const uint FLOAT_MAT4x3 = 0x8B6A;\n    public const uint SRGB = 0x8C40;\n    public const uint SRGB8 = 0x8C41;\n    public const uint SRGB_ALPHA = 0x8C42;\n    public const uint SRGB8_ALPHA8 = 0x8C43;\n    public const uint COMPRESSED_SRGB = 0x8C48;\n    public const uint COMPRESSED_SRGB_ALPHA = 0x8C49;\n    public const uint CURRENT_RASTER_SECONDARY_COLOR = 0x845F;\n    public const uint SLUMINANCE_ALPHA = 0x8C44;\n    public const uint SLUMINANCE8_ALPHA8 = 0x8C45;\n    public const uint SLUMINANCE = 0x8C46;\n    public const uint SLUMINANCE8 = 0x8C47;\n    public const uint COMPRESSED_SLUMINANCE = 0x8C4A;\n    public const uint COMPRESSED_SLUMINANCE_ALPHA = 0x8C4B;\n    public const uint COMPARE_REF_TO_TEXTURE = 0x884E;\n    public const uint CLIP_DISTANCE0 = 0x3000;\n    public const uint CLIP_DISTANCE1 = 0x3001;\n    public const uint CLIP_DISTANCE2 = 0x3002;\n    public const uint CLIP_DISTANCE3 = 0x3003;\n    public const uint CLIP_DISTANCE4 = 0x3004;\n    public const uint CLIP_DISTANCE5 = 0x3005;\n    public const uint CLIP_DISTANCE6 = 0x3006;\n    public const uint CLIP_DISTANCE7 = 0x3007;\n    public const uint MAX_CLIP_DISTANCES = 0x0D32;\n    public const uint MAJOR_VERSION = 0x821B;\n    public const uint MINOR_VERSION = 0x821C;\n    public const uint NUM_EXTENSIONS = 0x821D;\n    public const uint CONTEXT_FLAGS = 0x821E;\n    public const uint COMPRESSED_RED = 0x8225;\n    public const uint COMPRESSED_RG = 0x8226;\n    public const uint CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT = 0x00000001;\n    public const uint RGBA32F = 0x8814;\n    public const uint RGB32F = 0x8815;\n    public const uint RGBA16F = 0x881A;\n    public const uint RGB16F = 0x881B;\n    public const uint VERTEX_ATTRIB_ARRAY_INTEGER = 0x88FD;\n    public const uint MAX_ARRAY_TEXTURE_LAYERS = 0x88FF;\n    public const uint MIN_PROGRAM_TEXEL_OFFSET = 0x8904;\n    public const uint MAX_PROGRAM_TEXEL_OFFSET = 0x8905;\n    public const uint CLAMP_READ_COLOR = 0x891C;\n    public const uint FIXED_ONLY = 0x891D;\n    public const uint MAX_VARYING_COMPONENTS = 0x8B4B;\n    public const uint TEXTURE_1D_ARRAY = 0x8C18;\n    public const uint PROXY_TEXTURE_1D_ARRAY = 0x8C19;\n    public const uint TEXTURE_2D_ARRAY = 0x8C1A;\n    public const uint PROXY_TEXTURE_2D_ARRAY = 0x8C1B;\n    public const uint TEXTURE_BINDING_1D_ARRAY = 0x8C1C;\n    public const uint TEXTURE_BINDING_2D_ARRAY = 0x8C1D;\n    public const uint R11F_G11F_B10F = 0x8C3A;\n    public const uint UNSIGNED_INT_10F_11F_11F_REV = 0x8C3B;\n    public const uint RGB9_E5 = 0x8C3D;\n    public const uint UNSIGNED_INT_5_9_9_9_REV = 0x8C3E;\n    public const uint TEXTURE_SHARED_SIZE = 0x8C3F;\n    public const uint TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH = 0x8C76;\n    public const uint TRANSFORM_FEEDBACK_BUFFER_MODE = 0x8C7F;\n    public const uint MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS = 0x8C80;\n    public const uint TRANSFORM_FEEDBACK_VARYINGS = 0x8C83;\n    public const uint TRANSFORM_FEEDBACK_BUFFER_START = 0x8C84;\n    public const uint TRANSFORM_FEEDBACK_BUFFER_SIZE = 0x8C85;\n    public const uint PRIMITIVES_GENERATED = 0x8C87;\n    public const uint TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN = 0x8C88;\n    public const uint RASTERIZER_DISCARD = 0x8C89;\n    public const uint MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS = 0x8C8A;\n    public const uint MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS = 0x8C8B;\n    public const uint INTERLEAVED_ATTRIBS = 0x8C8C;\n    public const uint SEPARATE_ATTRIBS = 0x8C8D;\n    public const uint TRANSFORM_FEEDBACK_BUFFER = 0x8C8E;\n    public const uint TRANSFORM_FEEDBACK_BUFFER_BINDING = 0x8C8F;\n    public const uint RGBA32UI = 0x8D70;\n    public const uint RGB32UI = 0x8D71;\n    public const uint RGBA16UI = 0x8D76;\n    public const uint RGB16UI = 0x8D77;\n    public const uint RGBA8UI = 0x8D7C;\n    public const uint RGB8UI = 0x8D7D;\n    public const uint RGBA32I = 0x8D82;\n    public const uint RGB32I = 0x8D83;\n    public const uint RGBA16I = 0x8D88;\n    public const uint RGB16I = 0x8D89;\n    public const uint RGBA8I = 0x8D8E;\n    public const uint RGB8I = 0x8D8F;\n    public const uint RED_INTEGER = 0x8D94;\n    public const uint GREEN_INTEGER = 0x8D95;\n    public const uint BLUE_INTEGER = 0x8D96;\n    public const uint RGB_INTEGER = 0x8D98;\n    public const uint RGBA_INTEGER = 0x8D99;\n    public const uint BGR_INTEGER = 0x8D9A;\n    public const uint BGRA_INTEGER = 0x8D9B;\n    public const uint SAMPLER_1D_ARRAY = 0x8DC0;\n    public const uint SAMPLER_2D_ARRAY = 0x8DC1;\n    public const uint SAMPLER_1D_ARRAY_SHADOW = 0x8DC3;\n    public const uint SAMPLER_2D_ARRAY_SHADOW = 0x8DC4;\n    public const uint SAMPLER_CUBE_SHADOW = 0x8DC5;\n    public const uint UNSIGNED_INT_VEC2 = 0x8DC6;\n    public const uint UNSIGNED_INT_VEC3 = 0x8DC7;\n    public const uint UNSIGNED_INT_VEC4 = 0x8DC8;\n    public const uint INT_SAMPLER_1D = 0x8DC9;\n    public const uint INT_SAMPLER_2D = 0x8DCA;\n    public const uint INT_SAMPLER_3D = 0x8DCB;\n    public const uint INT_SAMPLER_CUBE = 0x8DCC;\n    public const uint INT_SAMPLER_1D_ARRAY = 0x8DCE;\n    public const uint INT_SAMPLER_2D_ARRAY = 0x8DCF;\n    public const uint UNSIGNED_INT_SAMPLER_1D = 0x8DD1;\n    public const uint UNSIGNED_INT_SAMPLER_2D = 0x8DD2;\n    public const uint UNSIGNED_INT_SAMPLER_3D = 0x8DD3;\n    public const uint UNSIGNED_INT_SAMPLER_CUBE = 0x8DD4;\n    public const uint UNSIGNED_INT_SAMPLER_1D_ARRAY = 0x8DD6;\n    public const uint UNSIGNED_INT_SAMPLER_2D_ARRAY = 0x8DD7;\n    public const uint QUERY_WAIT = 0x8E13;\n    public const uint QUERY_NO_WAIT = 0x8E14;\n    public const uint QUERY_BY_REGION_WAIT = 0x8E15;\n    public const uint QUERY_BY_REGION_NO_WAIT = 0x8E16;\n    public const uint BUFFER_ACCESS_FLAGS = 0x911F;\n    public const uint BUFFER_MAP_LENGTH = 0x9120;\n    public const uint BUFFER_MAP_OFFSET = 0x9121;\n    public const uint DEPTH_COMPONENT32F = 0x8CAC;\n    public const uint DEPTH32F_STENCIL8 = 0x8CAD;\n    public const uint FLOAT_32_UNSIGNED_INT_24_8_REV = 0x8DAD;\n    public const uint INVALID_FRAMEBUFFER_OPERATION = 0x0506;\n    public const uint FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING = 0x8210;\n    public const uint FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE = 0x8211;\n    public const uint FRAMEBUFFER_ATTACHMENT_RED_SIZE = 0x8212;\n    public const uint FRAMEBUFFER_ATTACHMENT_GREEN_SIZE = 0x8213;\n    public const uint FRAMEBUFFER_ATTACHMENT_BLUE_SIZE = 0x8214;\n    public const uint FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE = 0x8215;\n    public const uint FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE = 0x8216;\n    public const uint FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE = 0x8217;\n    public const uint FRAMEBUFFER_DEFAULT = 0x8218;\n    public const uint FRAMEBUFFER_UNDEFINED = 0x8219;\n    public const uint DEPTH_STENCIL_ATTACHMENT = 0x821A;\n    public const uint MAX_RENDERBUFFER_SIZE = 0x84E8;\n    public const uint DEPTH_STENCIL = 0x84F9;\n    public const uint UNSIGNED_INT_24_8 = 0x84FA;\n    public const uint DEPTH24_STENCIL8 = 0x88F0;\n    public const uint TEXTURE_STENCIL_SIZE = 0x88F1;\n    public const uint TEXTURE_RED_TYPE = 0x8C10;\n    public const uint TEXTURE_GREEN_TYPE = 0x8C11;\n    public const uint TEXTURE_BLUE_TYPE = 0x8C12;\n    public const uint TEXTURE_ALPHA_TYPE = 0x8C13;\n    public const uint TEXTURE_DEPTH_TYPE = 0x8C16;\n    public const uint UNSIGNED_NORMALIZED = 0x8C17;\n    public const uint FRAMEBUFFER_BINDING = 0x8CA6;\n    public const uint DRAW_FRAMEBUFFER_BINDING = 0x8CA6;\n    public const uint RENDERBUFFER_BINDING = 0x8CA7;\n    public const uint READ_FRAMEBUFFER = 0x8CA8;\n    public const uint DRAW_FRAMEBUFFER = 0x8CA9;\n    public const uint READ_FRAMEBUFFER_BINDING = 0x8CAA;\n    public const uint RENDERBUFFER_SAMPLES = 0x8CAB;\n    public const uint FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE = 0x8CD0;\n    public const uint FRAMEBUFFER_ATTACHMENT_OBJECT_NAME = 0x8CD1;\n    public const uint FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL = 0x8CD2;\n    public const uint FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE = 0x8CD3;\n    public const uint FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER = 0x8CD4;\n    public const uint FRAMEBUFFER_COMPLETE = 0x8CD5;\n    public const uint FRAMEBUFFER_INCOMPLETE_ATTACHMENT = 0x8CD6;\n    public const uint FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT = 0x8CD7;\n    public const uint FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER = 0x8CDB;\n    public const uint FRAMEBUFFER_INCOMPLETE_READ_BUFFER = 0x8CDC;\n    public const uint FRAMEBUFFER_UNSUPPORTED = 0x8CDD;\n    public const uint MAX_COLOR_ATTACHMENTS = 0x8CDF;\n    public const uint COLOR_ATTACHMENT0 = 0x8CE0;\n    public const uint COLOR_ATTACHMENT1 = 0x8CE1;\n    public const uint COLOR_ATTACHMENT2 = 0x8CE2;\n    public const uint COLOR_ATTACHMENT3 = 0x8CE3;\n    public const uint COLOR_ATTACHMENT4 = 0x8CE4;\n    public const uint COLOR_ATTACHMENT5 = 0x8CE5;\n    public const uint COLOR_ATTACHMENT6 = 0x8CE6;\n    public const uint COLOR_ATTACHMENT7 = 0x8CE7;\n    public const uint COLOR_ATTACHMENT8 = 0x8CE8;\n    public const uint COLOR_ATTACHMENT9 = 0x8CE9;\n    public const uint COLOR_ATTACHMENT10 = 0x8CEA;\n    public const uint COLOR_ATTACHMENT11 = 0x8CEB;\n    public const uint COLOR_ATTACHMENT12 = 0x8CEC;\n    public const uint COLOR_ATTACHMENT13 = 0x8CED;\n    public const uint COLOR_ATTACHMENT14 = 0x8CEE;\n    public const uint COLOR_ATTACHMENT15 = 0x8CEF;\n    public const uint COLOR_ATTACHMENT16 = 0x8CF0;\n    public const uint COLOR_ATTACHMENT17 = 0x8CF1;\n    public const uint COLOR_ATTACHMENT18 = 0x8CF2;\n    public const uint COLOR_ATTACHMENT19 = 0x8CF3;\n    public const uint COLOR_ATTACHMENT20 = 0x8CF4;\n    public const uint COLOR_ATTACHMENT21 = 0x8CF5;\n    public const uint COLOR_ATTACHMENT22 = 0x8CF6;\n    public const uint COLOR_ATTACHMENT23 = 0x8CF7;\n    public const uint COLOR_ATTACHMENT24 = 0x8CF8;\n    public const uint COLOR_ATTACHMENT25 = 0x8CF9;\n    public const uint COLOR_ATTACHMENT26 = 0x8CFA;\n    public const uint COLOR_ATTACHMENT27 = 0x8CFB;\n    public const uint COLOR_ATTACHMENT28 = 0x8CFC;\n    public const uint COLOR_ATTACHMENT29 = 0x8CFD;\n    public const uint COLOR_ATTACHMENT30 = 0x8CFE;\n    public const uint COLOR_ATTACHMENT31 = 0x8CFF;\n    public const uint DEPTH_ATTACHMENT = 0x8D00;\n    public const uint STENCIL_ATTACHMENT = 0x8D20;\n    public const uint FRAMEBUFFER = 0x8D40;\n    public const uint RENDERBUFFER = 0x8D41;\n    public const uint RENDERBUFFER_WIDTH = 0x8D42;\n    public const uint RENDERBUFFER_HEIGHT = 0x8D43;\n    public const uint RENDERBUFFER_INTERNAL_FORMAT = 0x8D44;\n    public const uint STENCIL_INDEX1 = 0x8D46;\n    public const uint STENCIL_INDEX4 = 0x8D47;\n    public const uint STENCIL_INDEX8 = 0x8D48;\n    public const uint STENCIL_INDEX16 = 0x8D49;\n    public const uint RENDERBUFFER_RED_SIZE = 0x8D50;\n    public const uint RENDERBUFFER_GREEN_SIZE = 0x8D51;\n    public const uint RENDERBUFFER_BLUE_SIZE = 0x8D52;\n    public const uint RENDERBUFFER_ALPHA_SIZE = 0x8D53;\n    public const uint RENDERBUFFER_DEPTH_SIZE = 0x8D54;\n    public const uint RENDERBUFFER_STENCIL_SIZE = 0x8D55;\n    public const uint FRAMEBUFFER_INCOMPLETE_MULTISAMPLE = 0x8D56;\n    public const uint MAX_SAMPLES = 0x8D57;\n    public const uint INDEX = 0x8222;\n    public const uint TEXTURE_LUMINANCE_TYPE = 0x8C14;\n    public const uint TEXTURE_INTENSITY_TYPE = 0x8C15;\n    public const uint FRAMEBUFFER_SRGB = 0x8DB9;\n    public const uint HALF_FLOAT = 0x140B;\n    public const uint MAP_READ_BIT = 0x0001;\n    public const uint MAP_WRITE_BIT = 0x0002;\n    public const uint MAP_INVALIDATE_RANGE_BIT = 0x0004;\n    public const uint MAP_INVALIDATE_BUFFER_BIT = 0x0008;\n    public const uint MAP_FLUSH_EXPLICIT_BIT = 0x0010;\n    public const uint MAP_UNSYNCHRONIZED_BIT = 0x0020;\n    public const uint COMPRESSED_RED_RGTC1 = 0x8DBB;\n    public const uint COMPRESSED_SIGNED_RED_RGTC1 = 0x8DBC;\n    public const uint COMPRESSED_RG_RGTC2 = 0x8DBD;\n    public const uint COMPRESSED_SIGNED_RG_RGTC2 = 0x8DBE;\n    public const uint RG = 0x8227;\n    public const uint RG_INTEGER = 0x8228;\n    public const uint R8 = 0x8229;\n    public const uint R16 = 0x822A;\n    public const uint RG8 = 0x822B;\n    public const uint RG16 = 0x822C;\n    public const uint R16F = 0x822D;\n    public const uint R32F = 0x822E;\n    public const uint RG16F = 0x822F;\n    public const uint RG32F = 0x8230;\n    public const uint R8I = 0x8231;\n    public const uint R8UI = 0x8232;\n    public const uint R16I = 0x8233;\n    public const uint R16UI = 0x8234;\n    public const uint R32I = 0x8235;\n    public const uint R32UI = 0x8236;\n    public const uint RG8I = 0x8237;\n    public const uint RG8UI = 0x8238;\n    public const uint RG16I = 0x8239;\n    public const uint RG16UI = 0x823A;\n    public const uint RG32I = 0x823B;\n    public const uint RG32UI = 0x823C;\n    public const uint VERTEX_ARRAY_BINDING = 0x85B5;\n    public const uint CLAMP_VERTEX_COLOR = 0x891A;\n    public const uint CLAMP_FRAGMENT_COLOR = 0x891B;\n    public const uint ALPHA_INTEGER = 0x8D97;\n    public const uint CONTEXT_CORE_PROFILE_BIT = 0x00000001;\n    public const uint CONTEXT_COMPATIBILITY_PROFILE_BIT = 0x00000002;\n    public const uint LINES_ADJACENCY = 0x000A;\n    public const uint LINE_STRIP_ADJACENCY = 0x000B;\n    public const uint TRIANGLES_ADJACENCY = 0x000C;\n    public const uint TRIANGLE_STRIP_ADJACENCY = 0x000D;\n    public const uint PROGRAM_POINT_SIZE = 0x8642;\n    public const uint MAX_GEOMETRY_TEXTURE_IMAGE_UNITS = 0x8C29;\n    public const uint FRAMEBUFFER_ATTACHMENT_LAYERED = 0x8DA7;\n    public const uint FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS = 0x8DA8;\n    public const uint GEOMETRY_SHADER = 0x8DD9;\n    public const uint GEOMETRY_VERTICES_OUT = 0x8916;\n    public const uint GEOMETRY_INPUT_TYPE = 0x8917;\n    public const uint GEOMETRY_OUTPUT_TYPE = 0x8918;\n    public const uint MAX_GEOMETRY_UNIFORM_COMPONENTS = 0x8DDF;\n    public const uint MAX_GEOMETRY_OUTPUT_VERTICES = 0x8DE0;\n    public const uint MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS = 0x8DE1;\n    public const uint MAX_VERTEX_OUTPUT_COMPONENTS = 0x9122;\n    public const uint MAX_GEOMETRY_INPUT_COMPONENTS = 0x9123;\n    public const uint MAX_GEOMETRY_OUTPUT_COMPONENTS = 0x9124;\n    public const uint MAX_FRAGMENT_INPUT_COMPONENTS = 0x9125;\n    public const uint CONTEXT_PROFILE_MASK = 0x9126;\n    public const uint DEPTH_CLAMP = 0x864F;\n    public const uint QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION = 0x8E4C;\n    public const uint FIRST_VERTEX_CONVENTION = 0x8E4D;\n    public const uint LAST_VERTEX_CONVENTION = 0x8E4E;\n    public const uint PROVOKING_VERTEX = 0x8E4F;\n    public const uint TEXTURE_CUBE_MAP_SEAMLESS = 0x884F;\n    public const uint MAX_SERVER_WAIT_TIMEOUT = 0x9111;\n    public const uint OBJECT_TYPE = 0x9112;\n    public const uint SYNC_CONDITION = 0x9113;\n    public const uint SYNC_STATUS = 0x9114;\n    public const uint SYNC_FLAGS = 0x9115;\n    public const uint SYNC_FENCE = 0x9116;\n    public const uint SYNC_GPU_COMMANDS_COMPLETE = 0x9117;\n    public const uint UNSIGNALED = 0x9118;\n    public const uint SIGNALED = 0x9119;\n    public const uint ALREADY_SIGNALED = 0x911A;\n    public const uint TIMEOUT_EXPIRED = 0x911B;\n    public const uint CONDITION_SATISFIED = 0x911C;\n    public const uint WAIT_FAILED = 0x911D;\n    public const uint TIMEOUT_IGNORED = 0xFFFFFFFF;\n    public const uint SYNC_FLUSH_COMMANDS_BIT = 0x00000001;\n    public const uint SAMPLE_POSITION = 0x8E50;\n    public const uint SAMPLE_MASK = 0x8E51;\n    public const uint SAMPLE_MASK_VALUE = 0x8E52;\n    public const uint MAX_SAMPLE_MASK_WORDS = 0x8E59;\n    public const uint TEXTURE_2D_MULTISAMPLE = 0x9100;\n    public const uint PROXY_TEXTURE_2D_MULTISAMPLE = 0x9101;\n    public const uint TEXTURE_2D_MULTISAMPLE_ARRAY = 0x9102;\n    public const uint PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY = 0x9103;\n    public const uint TEXTURE_BINDING_2D_MULTISAMPLE = 0x9104;\n    public const uint TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY = 0x9105;\n    public const uint TEXTURE_SAMPLES = 0x9106;\n    public const uint TEXTURE_FIXED_SAMPLE_LOCATIONS = 0x9107;\n    public const uint SAMPLER_2D_MULTISAMPLE = 0x9108;\n    public const uint INT_SAMPLER_2D_MULTISAMPLE = 0x9109;\n    public const uint UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE = 0x910A;\n    public const uint SAMPLER_2D_MULTISAMPLE_ARRAY = 0x910B;\n    public const uint INT_SAMPLER_2D_MULTISAMPLE_ARRAY = 0x910C;\n    public const uint UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY = 0x910D;\n    public const uint MAX_COLOR_TEXTURE_SAMPLES = 0x910E;\n    public const uint MAX_DEPTH_TEXTURE_SAMPLES = 0x910F;\n    public const uint MAX_INTEGER_SAMPLES = 0x9110;\n    public const uint SAMPLER_2D_RECT = 0x8B63;\n    public const uint SAMPLER_2D_RECT_SHADOW = 0x8B64;\n    public const uint SAMPLER_BUFFER = 0x8DC2;\n    public const uint INT_SAMPLER_2D_RECT = 0x8DCD;\n    public const uint INT_SAMPLER_BUFFER = 0x8DD0;\n    public const uint UNSIGNED_INT_SAMPLER_2D_RECT = 0x8DD5;\n    public const uint UNSIGNED_INT_SAMPLER_BUFFER = 0x8DD8;\n    public const uint TEXTURE_BUFFER = 0x8C2A;\n    public const uint MAX_TEXTURE_BUFFER_SIZE = 0x8C2B;\n    public const uint TEXTURE_BINDING_BUFFER = 0x8C2C;\n    public const uint TEXTURE_BUFFER_DATA_STORE_BINDING = 0x8C2D;\n    public const uint TEXTURE_RECTANGLE = 0x84F5;\n    public const uint TEXTURE_BINDING_RECTANGLE = 0x84F6;\n    public const uint PROXY_TEXTURE_RECTANGLE = 0x84F7;\n    public const uint MAX_RECTANGLE_TEXTURE_SIZE = 0x84F8;\n    public const uint R8_SNORM = 0x8F94;\n    public const uint RG8_SNORM = 0x8F95;\n    public const uint RGB8_SNORM = 0x8F96;\n    public const uint RGBA8_SNORM = 0x8F97;\n    public const uint R16_SNORM = 0x8F98;\n    public const uint RG16_SNORM = 0x8F99;\n    public const uint RGB16_SNORM = 0x8F9A;\n    public const uint RGBA16_SNORM = 0x8F9B;\n    public const uint SIGNED_NORMALIZED = 0x8F9C;\n    public const uint PRIMITIVE_RESTART = 0x8F9D;\n    public const uint PRIMITIVE_RESTART_INDEX = 0x8F9E;\n    public const uint COPY_READ_BUFFER = 0x8F36;\n    public const uint COPY_WRITE_BUFFER = 0x8F37;\n    public const uint UNIFORM_BUFFER = 0x8A11;\n    public const uint UNIFORM_BUFFER_BINDING = 0x8A28;\n    public const uint UNIFORM_BUFFER_START = 0x8A29;\n    public const uint UNIFORM_BUFFER_SIZE = 0x8A2A;\n    public const uint MAX_VERTEX_UNIFORM_BLOCKS = 0x8A2B;\n    public const uint MAX_GEOMETRY_UNIFORM_BLOCKS = 0x8A2C;\n    public const uint MAX_FRAGMENT_UNIFORM_BLOCKS = 0x8A2D;\n    public const uint MAX_COMBINED_UNIFORM_BLOCKS = 0x8A2E;\n    public const uint MAX_UNIFORM_BUFFER_BINDINGS = 0x8A2F;\n    public const uint MAX_UNIFORM_BLOCK_SIZE = 0x8A30;\n    public const uint MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS = 0x8A31;\n    public const uint MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS = 0x8A32;\n    public const uint MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS = 0x8A33;\n    public const uint UNIFORM_BUFFER_OFFSET_ALIGNMENT = 0x8A34;\n    public const uint ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH = 0x8A35;\n    public const uint ACTIVE_UNIFORM_BLOCKS = 0x8A36;\n    public const uint UNIFORM_TYPE = 0x8A37;\n    public const uint UNIFORM_SIZE = 0x8A38;\n    public const uint UNIFORM_NAME_LENGTH = 0x8A39;\n    public const uint UNIFORM_BLOCK_INDEX = 0x8A3A;\n    public const uint UNIFORM_OFFSET = 0x8A3B;\n    public const uint UNIFORM_ARRAY_STRIDE = 0x8A3C;\n    public const uint UNIFORM_MATRIX_STRIDE = 0x8A3D;\n    public const uint UNIFORM_IS_ROW_MAJOR = 0x8A3E;\n    public const uint UNIFORM_BLOCK_BINDING = 0x8A3F;\n    public const uint UNIFORM_BLOCK_DATA_SIZE = 0x8A40;\n    public const uint UNIFORM_BLOCK_NAME_LENGTH = 0x8A41;\n    public const uint UNIFORM_BLOCK_ACTIVE_UNIFORMS = 0x8A42;\n    public const uint UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES = 0x8A43;\n    public const uint UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER = 0x8A44;\n    public const uint UNIFORM_BLOCK_REFERENCED_BY_GEOMETRY_SHADER = 0x8A45;\n    public const uint UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER = 0x8A46;\n    public const uint INVALID_INDEX = 0xFFFFFFFF;\n    public const uint VERTEX_ATTRIB_ARRAY_DIVISOR = 0x88FE;\n    public const uint SRC1_COLOR = 0x88F9;\n    public const uint ONE_MINUS_SRC1_COLOR = 0x88FA;\n    public const uint ONE_MINUS_SRC1_ALPHA = 0x88FB;\n    public const uint MAX_DUAL_SOURCE_DRAW_BUFFERS = 0x88FC;\n    public const uint ANY_SAMPLES_PASSED = 0x8C2F;\n    public const uint SAMPLER_BINDING = 0x8919;\n    public const uint RGB10_A2UI = 0x906F;\n    public const uint TEXTURE_SWIZZLE_R = 0x8E42;\n    public const uint TEXTURE_SWIZZLE_G = 0x8E43;\n    public const uint TEXTURE_SWIZZLE_B = 0x8E44;\n    public const uint TEXTURE_SWIZZLE_A = 0x8E45;\n    public const uint TEXTURE_SWIZZLE_RGBA = 0x8E46;\n    public const uint TIME_ELAPSED = 0x88BF;\n    public const uint TIMESTAMP = 0x8E28;\n    public const uint INT_2_10_10_10_REV = 0x8D9F;\n    public const uint SAMPLE_SHADING = 0x8C36;\n    public const uint MIN_SAMPLE_SHADING_VALUE = 0x8C37;\n    public const uint MIN_PROGRAM_TEXTURE_GATHER_OFFSET = 0x8E5E;\n    public const uint MAX_PROGRAM_TEXTURE_GATHER_OFFSET = 0x8E5F;\n    public const uint TEXTURE_CUBE_MAP_ARRAY = 0x9009;\n    public const uint TEXTURE_BINDING_CUBE_MAP_ARRAY = 0x900A;\n    public const uint PROXY_TEXTURE_CUBE_MAP_ARRAY = 0x900B;\n    public const uint SAMPLER_CUBE_MAP_ARRAY = 0x900C;\n    public const uint SAMPLER_CUBE_MAP_ARRAY_SHADOW = 0x900D;\n    public const uint INT_SAMPLER_CUBE_MAP_ARRAY = 0x900E;\n    public const uint UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY = 0x900F;\n    public const uint DRAW_INDIRECT_BUFFER = 0x8F3F;\n    public const uint DRAW_INDIRECT_BUFFER_BINDING = 0x8F43;\n    public const uint GEOMETRY_SHADER_INVOCATIONS = 0x887F;\n    public const uint MAX_GEOMETRY_SHADER_INVOCATIONS = 0x8E5A;\n    public const uint MIN_FRAGMENT_INTERPOLATION_OFFSET = 0x8E5B;\n    public const uint MAX_FRAGMENT_INTERPOLATION_OFFSET = 0x8E5C;\n    public const uint FRAGMENT_INTERPOLATION_OFFSET_BITS = 0x8E5D;\n    public const uint MAX_VERTEX_STREAMS = 0x8E71;\n    public const uint DOUBLE_VEC2 = 0x8FFC;\n    public const uint DOUBLE_VEC3 = 0x8FFD;\n    public const uint DOUBLE_VEC4 = 0x8FFE;\n    public const uint DOUBLE_MAT2 = 0x8F46;\n    public const uint DOUBLE_MAT3 = 0x8F47;\n    public const uint DOUBLE_MAT4 = 0x8F48;\n    public const uint DOUBLE_MAT2x3 = 0x8F49;\n    public const uint DOUBLE_MAT2x4 = 0x8F4A;\n    public const uint DOUBLE_MAT3x2 = 0x8F4B;\n    public const uint DOUBLE_MAT3x4 = 0x8F4C;\n    public const uint DOUBLE_MAT4x2 = 0x8F4D;\n    public const uint DOUBLE_MAT4x3 = 0x8F4E;\n    public const uint ACTIVE_SUBROUTINES = 0x8DE5;\n    public const uint ACTIVE_SUBROUTINE_UNIFORMS = 0x8DE6;\n    public const uint ACTIVE_SUBROUTINE_UNIFORM_LOCATIONS = 0x8E47;\n    public const uint ACTIVE_SUBROUTINE_MAX_LENGTH = 0x8E48;\n    public const uint ACTIVE_SUBROUTINE_UNIFORM_MAX_LENGTH = 0x8E49;\n    public const uint MAX_SUBROUTINES = 0x8DE7;\n    public const uint MAX_SUBROUTINE_UNIFORM_LOCATIONS = 0x8DE8;\n    public const uint NUM_COMPATIBLE_SUBROUTINES = 0x8E4A;\n    public const uint COMPATIBLE_SUBROUTINES = 0x8E4B;\n    public const uint PATCHES = 0x000E;\n    public const uint PATCH_VERTICES = 0x8E72;\n    public const uint PATCH_DEFAULT_INNER_LEVEL = 0x8E73;\n    public const uint PATCH_DEFAULT_OUTER_LEVEL = 0x8E74;\n    public const uint TESS_CONTROL_OUTPUT_VERTICES = 0x8E75;\n    public const uint TESS_GEN_MODE = 0x8E76;\n    public const uint TESS_GEN_SPACING = 0x8E77;\n    public const uint TESS_GEN_VERTEX_ORDER = 0x8E78;\n    public const uint TESS_GEN_POINT_MODE = 0x8E79;\n    public const uint ISOLINES = 0x8E7A;\n    public const uint FRACTIONAL_ODD = 0x8E7B;\n    public const uint FRACTIONAL_EVEN = 0x8E7C;\n    public const uint MAX_PATCH_VERTICES = 0x8E7D;\n    public const uint MAX_TESS_GEN_LEVEL = 0x8E7E;\n    public const uint MAX_TESS_CONTROL_UNIFORM_COMPONENTS = 0x8E7F;\n    public const uint MAX_TESS_EVALUATION_UNIFORM_COMPONENTS = 0x8E80;\n    public const uint MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS = 0x8E81;\n    public const uint MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS = 0x8E82;\n    public const uint MAX_TESS_CONTROL_OUTPUT_COMPONENTS = 0x8E83;\n    public const uint MAX_TESS_PATCH_COMPONENTS = 0x8E84;\n    public const uint MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS = 0x8E85;\n    public const uint MAX_TESS_EVALUATION_OUTPUT_COMPONENTS = 0x8E86;\n    public const uint MAX_TESS_CONTROL_UNIFORM_BLOCKS = 0x8E89;\n    public const uint MAX_TESS_EVALUATION_UNIFORM_BLOCKS = 0x8E8A;\n    public const uint MAX_TESS_CONTROL_INPUT_COMPONENTS = 0x886C;\n    public const uint MAX_TESS_EVALUATION_INPUT_COMPONENTS = 0x886D;\n    public const uint MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS = 0x8E1E;\n    public const uint MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS = 0x8E1F;\n    public const uint UNIFORM_BLOCK_REFERENCED_BY_TESS_CONTROL_SHADER = 0x84F0;\n    public const uint UNIFORM_BLOCK_REFERENCED_BY_TESS_EVALUATION_SHADER = 0x84F1;\n    public const uint TESS_EVALUATION_SHADER = 0x8E87;\n    public const uint TESS_CONTROL_SHADER = 0x8E88;\n    public const uint TRANSFORM_FEEDBACK = 0x8E22;\n    public const uint TRANSFORM_FEEDBACK_BUFFER_PAUSED = 0x8E23;\n    public const uint TRANSFORM_FEEDBACK_BUFFER_ACTIVE = 0x8E24;\n    public const uint TRANSFORM_FEEDBACK_BINDING = 0x8E25;\n    public const uint MAX_TRANSFORM_FEEDBACK_BUFFERS = 0x8E70;\n    public const uint FIXED = 0x140C;\n    public const uint IMPLEMENTATION_COLOR_READ_TYPE = 0x8B9A;\n    public const uint IMPLEMENTATION_COLOR_READ_FORMAT = 0x8B9B;\n    public const uint LOW_FLOAT = 0x8DF0;\n    public const uint MEDIUM_FLOAT = 0x8DF1;\n    public const uint HIGH_FLOAT = 0x8DF2;\n    public const uint LOW_INT = 0x8DF3;\n    public const uint MEDIUM_INT = 0x8DF4;\n    public const uint HIGH_INT = 0x8DF5;\n    public const uint SHADER_COMPILER = 0x8DFA;\n    public const uint SHADER_BINARY_FORMATS = 0x8DF8;\n    public const uint NUM_SHADER_BINARY_FORMATS = 0x8DF9;\n    public const uint MAX_VERTEX_UNIFORM_VECTORS = 0x8DFB;\n    public const uint MAX_VARYING_VECTORS = 0x8DFC;\n    public const uint MAX_FRAGMENT_UNIFORM_VECTORS = 0x8DFD;\n    public const uint RGB565 = 0x8D62;\n    public const uint PROGRAM_BINARY_RETRIEVABLE_HINT = 0x8257;\n    public const uint PROGRAM_BINARY_LENGTH = 0x8741;\n    public const uint NUM_PROGRAM_BINARY_FORMATS = 0x87FE;\n    public const uint PROGRAM_BINARY_FORMATS = 0x87FF;\n    public const uint VERTEX_SHADER_BIT = 0x00000001;\n    public const uint FRAGMENT_SHADER_BIT = 0x00000002;\n    public const uint GEOMETRY_SHADER_BIT = 0x00000004;\n    public const uint TESS_CONTROL_SHADER_BIT = 0x00000008;\n    public const uint TESS_EVALUATION_SHADER_BIT = 0x00000010;\n    public const uint ALL_SHADER_BITS = 0xFFFFFFFF;\n    public const uint PROGRAM_SEPARABLE = 0x8258;\n    public const uint ACTIVE_PROGRAM = 0x8259;\n    public const uint PROGRAM_PIPELINE_BINDING = 0x825A;\n    public const uint MAX_VIEWPORTS = 0x825B;\n    public const uint VIEWPORT_SUBPIXEL_BITS = 0x825C;\n    public const uint VIEWPORT_BOUNDS_RANGE = 0x825D;\n    public const uint LAYER_PROVOKING_VERTEX = 0x825E;\n    public const uint VIEWPORT_INDEX_PROVOKING_VERTEX = 0x825F;\n    public const uint UNDEFINED_VERTEX = 0x8260;\n    public const uint COPY_READ_BUFFER_BINDING = 0x8F36;\n    public const uint COPY_WRITE_BUFFER_BINDING = 0x8F37;\n    public const uint TRANSFORM_FEEDBACK_ACTIVE = 0x8E24;\n    public const uint TRANSFORM_FEEDBACK_PAUSED = 0x8E23;\n    public const uint UNPACK_COMPRESSED_BLOCK_WIDTH = 0x9127;\n    public const uint UNPACK_COMPRESSED_BLOCK_HEIGHT = 0x9128;\n    public const uint UNPACK_COMPRESSED_BLOCK_DEPTH = 0x9129;\n    public const uint UNPACK_COMPRESSED_BLOCK_SIZE = 0x912A;\n    public const uint PACK_COMPRESSED_BLOCK_WIDTH = 0x912B;\n    public const uint PACK_COMPRESSED_BLOCK_HEIGHT = 0x912C;\n    public const uint PACK_COMPRESSED_BLOCK_DEPTH = 0x912D;\n    public const uint PACK_COMPRESSED_BLOCK_SIZE = 0x912E;\n    public const uint NUM_SAMPLE_COUNTS = 0x9380;\n    public const uint MIN_MAP_BUFFER_ALIGNMENT = 0x90BC;\n    public const uint ATOMIC_COUNTER_BUFFER = 0x92C0;\n    public const uint ATOMIC_COUNTER_BUFFER_BINDING = 0x92C1;\n    public const uint ATOMIC_COUNTER_BUFFER_START = 0x92C2;\n    public const uint ATOMIC_COUNTER_BUFFER_SIZE = 0x92C3;\n    public const uint ATOMIC_COUNTER_BUFFER_DATA_SIZE = 0x92C4;\n    public const uint ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTERS = 0x92C5;\n    public const uint ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTER_INDICES = 0x92C6;\n    public const uint ATOMIC_COUNTER_BUFFER_REFERENCED_BY_VERTEX_SHADER = 0x92C7;\n    public const uint ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_CONTROL_SHADER = 0x92C8;\n    public const uint ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_EVALUATION_SHADER = 0x92C9;\n    public const uint ATOMIC_COUNTER_BUFFER_REFERENCED_BY_GEOMETRY_SHADER = 0x92CA;\n    public const uint ATOMIC_COUNTER_BUFFER_REFERENCED_BY_FRAGMENT_SHADER = 0x92CB;\n    public const uint MAX_VERTEX_ATOMIC_COUNTER_BUFFERS = 0x92CC;\n    public const uint MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS = 0x92CD;\n    public const uint MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS = 0x92CE;\n    public const uint MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS = 0x92CF;\n    public const uint MAX_FRAGMENT_ATOMIC_COUNTER_BUFFERS = 0x92D0;\n    public const uint MAX_COMBINED_ATOMIC_COUNTER_BUFFERS = 0x92D1;\n    public const uint MAX_VERTEX_ATOMIC_COUNTERS = 0x92D2;\n    public const uint MAX_TESS_CONTROL_ATOMIC_COUNTERS = 0x92D3;\n    public const uint MAX_TESS_EVALUATION_ATOMIC_COUNTERS = 0x92D4;\n    public const uint MAX_GEOMETRY_ATOMIC_COUNTERS = 0x92D5;\n    public const uint MAX_FRAGMENT_ATOMIC_COUNTERS = 0x92D6;\n    public const uint MAX_COMBINED_ATOMIC_COUNTERS = 0x92D7;\n    public const uint MAX_ATOMIC_COUNTER_BUFFER_SIZE = 0x92D8;\n    public const uint MAX_ATOMIC_COUNTER_BUFFER_BINDINGS = 0x92DC;\n    public const uint ACTIVE_ATOMIC_COUNTER_BUFFERS = 0x92D9;\n    public const uint UNIFORM_ATOMIC_COUNTER_BUFFER_INDEX = 0x92DA;\n    public const uint UNSIGNED_INT_ATOMIC_COUNTER = 0x92DB;\n    public const uint VERTEX_ATTRIB_ARRAY_BARRIER_BIT = 0x00000001;\n    public const uint ELEMENT_ARRAY_BARRIER_BIT = 0x00000002;\n    public const uint UNIFORM_BARRIER_BIT = 0x00000004;\n    public const uint TEXTURE_FETCH_BARRIER_BIT = 0x00000008;\n    public const uint SHADER_IMAGE_ACCESS_BARRIER_BIT = 0x00000020;\n    public const uint COMMAND_BARRIER_BIT = 0x00000040;\n    public const uint PIXEL_BUFFER_BARRIER_BIT = 0x00000080;\n    public const uint TEXTURE_UPDATE_BARRIER_BIT = 0x00000100;\n    public const uint BUFFER_UPDATE_BARRIER_BIT = 0x00000200;\n    public const uint FRAMEBUFFER_BARRIER_BIT = 0x00000400;\n    public const uint TRANSFORM_FEEDBACK_BARRIER_BIT = 0x00000800;\n    public const uint ATOMIC_COUNTER_BARRIER_BIT = 0x00001000;\n    public const uint ALL_BARRIER_BITS = 0xFFFFFFFF;\n    public const uint MAX_IMAGE_UNITS = 0x8F38;\n    public const uint MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS = 0x8F39;\n    public const uint IMAGE_BINDING_NAME = 0x8F3A;\n    public const uint IMAGE_BINDING_LEVEL = 0x8F3B;\n    public const uint IMAGE_BINDING_LAYERED = 0x8F3C;\n    public const uint IMAGE_BINDING_LAYER = 0x8F3D;\n    public const uint IMAGE_BINDING_ACCESS = 0x8F3E;\n    public const uint IMAGE_1D = 0x904C;\n    public const uint IMAGE_2D = 0x904D;\n    public const uint IMAGE_3D = 0x904E;\n    public const uint IMAGE_2D_RECT = 0x904F;\n    public const uint IMAGE_CUBE = 0x9050;\n    public const uint IMAGE_BUFFER = 0x9051;\n    public const uint IMAGE_1D_ARRAY = 0x9052;\n    public const uint IMAGE_2D_ARRAY = 0x9053;\n    public const uint IMAGE_CUBE_MAP_ARRAY = 0x9054;\n    public const uint IMAGE_2D_MULTISAMPLE = 0x9055;\n    public const uint IMAGE_2D_MULTISAMPLE_ARRAY = 0x9056;\n    public const uint INT_IMAGE_1D = 0x9057;\n    public const uint INT_IMAGE_2D = 0x9058;\n    public const uint INT_IMAGE_3D = 0x9059;\n    public const uint INT_IMAGE_2D_RECT = 0x905A;\n    public const uint INT_IMAGE_CUBE = 0x905B;\n    public const uint INT_IMAGE_BUFFER = 0x905C;\n    public const uint INT_IMAGE_1D_ARRAY = 0x905D;\n    public const uint INT_IMAGE_2D_ARRAY = 0x905E;\n    public const uint INT_IMAGE_CUBE_MAP_ARRAY = 0x905F;\n    public const uint INT_IMAGE_2D_MULTISAMPLE = 0x9060;\n    public const uint INT_IMAGE_2D_MULTISAMPLE_ARRAY = 0x9061;\n    public const uint UNSIGNED_INT_IMAGE_1D = 0x9062;\n    public const uint UNSIGNED_INT_IMAGE_2D = 0x9063;\n    public const uint UNSIGNED_INT_IMAGE_3D = 0x9064;\n    public const uint UNSIGNED_INT_IMAGE_2D_RECT = 0x9065;\n    public const uint UNSIGNED_INT_IMAGE_CUBE = 0x9066;\n    public const uint UNSIGNED_INT_IMAGE_BUFFER = 0x9067;\n    public const uint UNSIGNED_INT_IMAGE_1D_ARRAY = 0x9068;\n    public const uint UNSIGNED_INT_IMAGE_2D_ARRAY = 0x9069;\n    public const uint UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY = 0x906A;\n    public const uint UNSIGNED_INT_IMAGE_2D_MULTISAMPLE = 0x906B;\n    public const uint UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY = 0x906C;\n    public const uint MAX_IMAGE_SAMPLES = 0x906D;\n    public const uint IMAGE_BINDING_FORMAT = 0x906E;\n    public const uint IMAGE_FORMAT_COMPATIBILITY_TYPE = 0x90C7;\n    public const uint IMAGE_FORMAT_COMPATIBILITY_BY_SIZE = 0x90C8;\n    public const uint IMAGE_FORMAT_COMPATIBILITY_BY_CLASS = 0x90C9;\n    public const uint MAX_VERTEX_IMAGE_UNIFORMS = 0x90CA;\n    public const uint MAX_TESS_CONTROL_IMAGE_UNIFORMS = 0x90CB;\n    public const uint MAX_TESS_EVALUATION_IMAGE_UNIFORMS = 0x90CC;\n    public const uint MAX_GEOMETRY_IMAGE_UNIFORMS = 0x90CD;\n    public const uint MAX_FRAGMENT_IMAGE_UNIFORMS = 0x90CE;\n    public const uint MAX_COMBINED_IMAGE_UNIFORMS = 0x90CF;\n    public const uint COMPRESSED_RGBA_BPTC_UNORM = 0x8E8C;\n    public const uint COMPRESSED_SRGB_ALPHA_BPTC_UNORM = 0x8E8D;\n    public const uint COMPRESSED_RGB_BPTC_SIGNED_FLOAT = 0x8E8E;\n    public const uint COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT = 0x8E8F;\n    public const uint TEXTURE_IMMUTABLE_FORMAT = 0x912F;\n    public const uint NUM_SHADING_LANGUAGE_VERSIONS = 0x82E9;\n    public const uint VERTEX_ATTRIB_ARRAY_LONG = 0x874E;\n    public const uint COMPRESSED_RGB8_ETC2 = 0x9274;\n    public const uint COMPRESSED_SRGB8_ETC2 = 0x9275;\n    public const uint COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2 = 0x9276;\n    public const uint COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2 = 0x9277;\n    public const uint COMPRESSED_RGBA8_ETC2_EAC = 0x9278;\n    public const uint COMPRESSED_SRGB8_ALPHA8_ETC2_EAC = 0x9279;\n    public const uint COMPRESSED_R11_EAC = 0x9270;\n    public const uint COMPRESSED_SIGNED_R11_EAC = 0x9271;\n    public const uint COMPRESSED_RG11_EAC = 0x9272;\n    public const uint COMPRESSED_SIGNED_RG11_EAC = 0x9273;\n    public const uint PRIMITIVE_RESTART_FIXED_INDEX = 0x8D69;\n    public const uint ANY_SAMPLES_PASSED_CONSERVATIVE = 0x8D6A;\n    public const uint MAX_ELEMENT_INDEX = 0x8D6B;\n    public const uint COMPUTE_SHADER = 0x91B9;\n    public const uint MAX_COMPUTE_UNIFORM_BLOCKS = 0x91BB;\n    public const uint MAX_COMPUTE_TEXTURE_IMAGE_UNITS = 0x91BC;\n    public const uint MAX_COMPUTE_IMAGE_UNIFORMS = 0x91BD;\n    public const uint MAX_COMPUTE_SHARED_MEMORY_SIZE = 0x8262;\n    public const uint MAX_COMPUTE_UNIFORM_COMPONENTS = 0x8263;\n    public const uint MAX_COMPUTE_ATOMIC_COUNTER_BUFFERS = 0x8264;\n    public const uint MAX_COMPUTE_ATOMIC_COUNTERS = 0x8265;\n    public const uint MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS = 0x8266;\n    public const uint MAX_COMPUTE_WORK_GROUP_INVOCATIONS = 0x90EB;\n    public const uint MAX_COMPUTE_WORK_GROUP_COUNT = 0x91BE;\n    public const uint MAX_COMPUTE_WORK_GROUP_SIZE = 0x91BF;\n    public const uint COMPUTE_WORK_GROUP_SIZE = 0x8267;\n    public const uint UNIFORM_BLOCK_REFERENCED_BY_COMPUTE_SHADER = 0x90EC;\n    public const uint ATOMIC_COUNTER_BUFFER_REFERENCED_BY_COMPUTE_SHADER = 0x90ED;\n    public const uint DISPATCH_INDIRECT_BUFFER = 0x90EE;\n    public const uint DISPATCH_INDIRECT_BUFFER_BINDING = 0x90EF;\n    public const uint COMPUTE_SHADER_BIT = 0x00000020;\n    public const uint DEBUG_OUTPUT_SYNCHRONOUS = 0x8242;\n    public const uint DEBUG_NEXT_LOGGED_MESSAGE_LENGTH = 0x8243;\n    public const uint DEBUG_CALLBACK_FUNCTION = 0x8244;\n    public const uint DEBUG_CALLBACK_USER_PARAM = 0x8245;\n    public const uint DEBUG_SOURCE_API = 0x8246;\n    public const uint DEBUG_SOURCE_WINDOW_SYSTEM = 0x8247;\n    public const uint DEBUG_SOURCE_SHADER_COMPILER = 0x8248;\n    public const uint DEBUG_SOURCE_THIRD_PARTY = 0x8249;\n    public const uint DEBUG_SOURCE_APPLICATION = 0x824A;\n    public const uint DEBUG_SOURCE_OTHER = 0x824B;\n    public const uint DEBUG_TYPE_ERROR = 0x824C;\n    public const uint DEBUG_TYPE_DEPRECATED_BEHAVIOR = 0x824D;\n    public const uint DEBUG_TYPE_UNDEFINED_BEHAVIOR = 0x824E;\n    public const uint DEBUG_TYPE_PORTABILITY = 0x824F;\n    public const uint DEBUG_TYPE_PERFORMANCE = 0x8250;\n    public const uint DEBUG_TYPE_OTHER = 0x8251;\n    public const uint MAX_DEBUG_MESSAGE_LENGTH = 0x9143;\n    public const uint MAX_DEBUG_LOGGED_MESSAGES = 0x9144;\n    public const uint DEBUG_LOGGED_MESSAGES = 0x9145;\n    public const uint DEBUG_SEVERITY_HIGH = 0x9146;\n    public const uint DEBUG_SEVERITY_MEDIUM = 0x9147;\n    public const uint DEBUG_SEVERITY_LOW = 0x9148;\n    public const uint DEBUG_TYPE_MARKER = 0x8268;\n    public const uint DEBUG_TYPE_PUSH_GROUP = 0x8269;\n    public const uint DEBUG_TYPE_POP_GROUP = 0x826A;\n    public const uint DEBUG_SEVERITY_NOTIFICATION = 0x826B;\n    public const uint MAX_DEBUG_GROUP_STACK_DEPTH = 0x826C;\n    public const uint DEBUG_GROUP_STACK_DEPTH = 0x826D;\n    public const uint BUFFER = 0x82E0;\n    public const uint SHADER = 0x82E1;\n    public const uint PROGRAM = 0x82E2;\n    public const uint QUERY = 0x82E3;\n    public const uint PROGRAM_PIPELINE = 0x82E4;\n    public const uint SAMPLER = 0x82E6;\n    public const uint MAX_LABEL_LENGTH = 0x82E8;\n    public const uint DEBUG_OUTPUT = 0x92E0;\n    public const uint CONTEXT_FLAG_DEBUG_BIT = 0x00000002;\n    public const uint MAX_UNIFORM_LOCATIONS = 0x826E;\n    public const uint FRAMEBUFFER_DEFAULT_WIDTH = 0x9310;\n    public const uint FRAMEBUFFER_DEFAULT_HEIGHT = 0x9311;\n    public const uint FRAMEBUFFER_DEFAULT_LAYERS = 0x9312;\n    public const uint FRAMEBUFFER_DEFAULT_SAMPLES = 0x9313;\n    public const uint FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS = 0x9314;\n    public const uint MAX_FRAMEBUFFER_WIDTH = 0x9315;\n    public const uint MAX_FRAMEBUFFER_HEIGHT = 0x9316;\n    public const uint MAX_FRAMEBUFFER_LAYERS = 0x9317;\n    public const uint MAX_FRAMEBUFFER_SAMPLES = 0x9318;\n    public const uint INTERNALFORMAT_SUPPORTED = 0x826F;\n    public const uint INTERNALFORMAT_PREFERRED = 0x8270;\n    public const uint INTERNALFORMAT_RED_SIZE = 0x8271;\n    public const uint INTERNALFORMAT_GREEN_SIZE = 0x8272;\n    public const uint INTERNALFORMAT_BLUE_SIZE = 0x8273;\n    public const uint INTERNALFORMAT_ALPHA_SIZE = 0x8274;\n    public const uint INTERNALFORMAT_DEPTH_SIZE = 0x8275;\n    public const uint INTERNALFORMAT_STENCIL_SIZE = 0x8276;\n    public const uint INTERNALFORMAT_SHARED_SIZE = 0x8277;\n    public const uint INTERNALFORMAT_RED_TYPE = 0x8278;\n    public const uint INTERNALFORMAT_GREEN_TYPE = 0x8279;\n    public const uint INTERNALFORMAT_BLUE_TYPE = 0x827A;\n    public const uint INTERNALFORMAT_ALPHA_TYPE = 0x827B;\n    public const uint INTERNALFORMAT_DEPTH_TYPE = 0x827C;\n    public const uint INTERNALFORMAT_STENCIL_TYPE = 0x827D;\n    public const uint MAX_WIDTH = 0x827E;\n    public const uint MAX_HEIGHT = 0x827F;\n    public const uint MAX_DEPTH = 0x8280;\n    public const uint MAX_LAYERS = 0x8281;\n    public const uint MAX_COMBINED_DIMENSIONS = 0x8282;\n    public const uint COLOR_COMPONENTS = 0x8283;\n    public const uint DEPTH_COMPONENTS = 0x8284;\n    public const uint STENCIL_COMPONENTS = 0x8285;\n    public const uint COLOR_RENDERABLE = 0x8286;\n    public const uint DEPTH_RENDERABLE = 0x8287;\n    public const uint STENCIL_RENDERABLE = 0x8288;\n    public const uint FRAMEBUFFER_RENDERABLE = 0x8289;\n    public const uint FRAMEBUFFER_RENDERABLE_LAYERED = 0x828A;\n    public const uint FRAMEBUFFER_BLEND = 0x828B;\n    public const uint READ_PIXELS = 0x828C;\n    public const uint READ_PIXELS_FORMAT = 0x828D;\n    public const uint READ_PIXELS_TYPE = 0x828E;\n    public const uint TEXTURE_IMAGE_FORMAT = 0x828F;\n    public const uint TEXTURE_IMAGE_TYPE = 0x8290;\n    public const uint GET_TEXTURE_IMAGE_FORMAT = 0x8291;\n    public const uint GET_TEXTURE_IMAGE_TYPE = 0x8292;\n    public const uint MIPMAP = 0x8293;\n    public const uint MANUAL_GENERATE_MIPMAP = 0x8294;\n    public const uint AUTO_GENERATE_MIPMAP = 0x8295;\n    public const uint COLOR_ENCODING = 0x8296;\n    public const uint SRGB_READ = 0x8297;\n    public const uint SRGB_WRITE = 0x8298;\n    public const uint FILTER = 0x829A;\n    public const uint VERTEX_TEXTURE = 0x829B;\n    public const uint TESS_CONTROL_TEXTURE = 0x829C;\n    public const uint TESS_EVALUATION_TEXTURE = 0x829D;\n    public const uint GEOMETRY_TEXTURE = 0x829E;\n    public const uint FRAGMENT_TEXTURE = 0x829F;\n    public const uint COMPUTE_TEXTURE = 0x82A0;\n    public const uint TEXTURE_SHADOW = 0x82A1;\n    public const uint TEXTURE_GATHER = 0x82A2;\n    public const uint TEXTURE_GATHER_SHADOW = 0x82A3;\n    public const uint SHADER_IMAGE_LOAD = 0x82A4;\n    public const uint SHADER_IMAGE_STORE = 0x82A5;\n    public const uint SHADER_IMAGE_ATOMIC = 0x82A6;\n    public const uint IMAGE_TEXEL_SIZE = 0x82A7;\n    public const uint IMAGE_COMPATIBILITY_CLASS = 0x82A8;\n    public const uint IMAGE_PIXEL_FORMAT = 0x82A9;\n    public const uint IMAGE_PIXEL_TYPE = 0x82AA;\n    public const uint SIMULTANEOUS_TEXTURE_AND_DEPTH_TEST = 0x82AC;\n    public const uint SIMULTANEOUS_TEXTURE_AND_STENCIL_TEST = 0x82AD;\n    public const uint SIMULTANEOUS_TEXTURE_AND_DEPTH_WRITE = 0x82AE;\n    public const uint SIMULTANEOUS_TEXTURE_AND_STENCIL_WRITE = 0x82AF;\n    public const uint TEXTURE_COMPRESSED_BLOCK_WIDTH = 0x82B1;\n    public const uint TEXTURE_COMPRESSED_BLOCK_HEIGHT = 0x82B2;\n    public const uint TEXTURE_COMPRESSED_BLOCK_SIZE = 0x82B3;\n    public const uint CLEAR_BUFFER = 0x82B4;\n    public const uint TEXTURE_VIEW = 0x82B5;\n    public const uint VIEW_COMPATIBILITY_CLASS = 0x82B6;\n    public const uint FULL_SUPPORT = 0x82B7;\n    public const uint CAVEAT_SUPPORT = 0x82B8;\n    public const uint IMAGE_CLASS_4_X_32 = 0x82B9;\n    public const uint IMAGE_CLASS_2_X_32 = 0x82BA;\n    public const uint IMAGE_CLASS_1_X_32 = 0x82BB;\n    public const uint IMAGE_CLASS_4_X_16 = 0x82BC;\n    public const uint IMAGE_CLASS_2_X_16 = 0x82BD;\n    public const uint IMAGE_CLASS_1_X_16 = 0x82BE;\n    public const uint IMAGE_CLASS_4_X_8 = 0x82BF;\n    public const uint IMAGE_CLASS_2_X_8 = 0x82C0;\n    public const uint IMAGE_CLASS_1_X_8 = 0x82C1;\n    public const uint IMAGE_CLASS_11_11_10 = 0x82C2;\n    public const uint IMAGE_CLASS_10_10_10_2 = 0x82C3;\n    public const uint VIEW_CLASS_128_BITS = 0x82C4;\n    public const uint VIEW_CLASS_96_BITS = 0x82C5;\n    public const uint VIEW_CLASS_64_BITS = 0x82C6;\n    public const uint VIEW_CLASS_48_BITS = 0x82C7;\n    public const uint VIEW_CLASS_32_BITS = 0x82C8;\n    public const uint VIEW_CLASS_24_BITS = 0x82C9;\n    public const uint VIEW_CLASS_16_BITS = 0x82CA;\n    public const uint VIEW_CLASS_8_BITS = 0x82CB;\n    public const uint VIEW_CLASS_S3TC_DXT1_RGB = 0x82CC;\n    public const uint VIEW_CLASS_S3TC_DXT1_RGBA = 0x82CD;\n    public const uint VIEW_CLASS_S3TC_DXT3_RGBA = 0x82CE;\n    public const uint VIEW_CLASS_S3TC_DXT5_RGBA = 0x82CF;\n    public const uint VIEW_CLASS_RGTC1_RED = 0x82D0;\n    public const uint VIEW_CLASS_RGTC2_RG = 0x82D1;\n    public const uint VIEW_CLASS_BPTC_UNORM = 0x82D2;\n    public const uint VIEW_CLASS_BPTC_FLOAT = 0x82D3;\n    public const uint UNIFORM = 0x92E1;\n    public const uint UNIFORM_BLOCK = 0x92E2;\n    public const uint PROGRAM_INPUT = 0x92E3;\n    public const uint PROGRAM_OUTPUT = 0x92E4;\n    public const uint BUFFER_VARIABLE = 0x92E5;\n    public const uint SHADER_STORAGE_BLOCK = 0x92E6;\n    public const uint VERTEX_SUBROUTINE = 0x92E8;\n    public const uint TESS_CONTROL_SUBROUTINE = 0x92E9;\n    public const uint TESS_EVALUATION_SUBROUTINE = 0x92EA;\n    public const uint GEOMETRY_SUBROUTINE = 0x92EB;\n    public const uint FRAGMENT_SUBROUTINE = 0x92EC;\n    public const uint COMPUTE_SUBROUTINE = 0x92ED;\n    public const uint VERTEX_SUBROUTINE_UNIFORM = 0x92EE;\n    public const uint TESS_CONTROL_SUBROUTINE_UNIFORM = 0x92EF;\n    public const uint TESS_EVALUATION_SUBROUTINE_UNIFORM = 0x92F0;\n    public const uint GEOMETRY_SUBROUTINE_UNIFORM = 0x92F1;\n    public const uint FRAGMENT_SUBROUTINE_UNIFORM = 0x92F2;\n    public const uint COMPUTE_SUBROUTINE_UNIFORM = 0x92F3;\n    public const uint TRANSFORM_FEEDBACK_VARYING = 0x92F4;\n    public const uint ACTIVE_RESOURCES = 0x92F5;\n    public const uint MAX_NAME_LENGTH = 0x92F6;\n    public const uint MAX_NUM_ACTIVE_VARIABLES = 0x92F7;\n    public const uint MAX_NUM_COMPATIBLE_SUBROUTINES = 0x92F8;\n    public const uint NAME_LENGTH = 0x92F9;\n    public const uint TYPE = 0x92FA;\n    public const uint ARRAY_SIZE = 0x92FB;\n    public const uint OFFSET = 0x92FC;\n    public const uint BLOCK_INDEX = 0x92FD;\n    public const uint ARRAY_STRIDE = 0x92FE;\n    public const uint MATRIX_STRIDE = 0x92FF;\n    public const uint IS_ROW_MAJOR = 0x9300;\n    public const uint ATOMIC_COUNTER_BUFFER_INDEX = 0x9301;\n    public const uint BUFFER_BINDING = 0x9302;\n    public const uint BUFFER_DATA_SIZE = 0x9303;\n    public const uint NUM_ACTIVE_VARIABLES = 0x9304;\n    public const uint ACTIVE_VARIABLES = 0x9305;\n    public const uint REFERENCED_BY_VERTEX_SHADER = 0x9306;\n    public const uint REFERENCED_BY_TESS_CONTROL_SHADER = 0x9307;\n    public const uint REFERENCED_BY_TESS_EVALUATION_SHADER = 0x9308;\n    public const uint REFERENCED_BY_GEOMETRY_SHADER = 0x9309;\n    public const uint REFERENCED_BY_FRAGMENT_SHADER = 0x930A;\n    public const uint REFERENCED_BY_COMPUTE_SHADER = 0x930B;\n    public const uint TOP_LEVEL_ARRAY_SIZE = 0x930C;\n    public const uint TOP_LEVEL_ARRAY_STRIDE = 0x930D;\n    public const uint LOCATION = 0x930E;\n    public const uint LOCATION_INDEX = 0x930F;\n    public const uint IS_PER_PATCH = 0x92E7;\n    public const uint SHADER_STORAGE_BUFFER = 0x90D2;\n    public const uint SHADER_STORAGE_BUFFER_BINDING = 0x90D3;\n    public const uint SHADER_STORAGE_BUFFER_START = 0x90D4;\n    public const uint SHADER_STORAGE_BUFFER_SIZE = 0x90D5;\n    public const uint MAX_VERTEX_SHADER_STORAGE_BLOCKS = 0x90D6;\n    public const uint MAX_GEOMETRY_SHADER_STORAGE_BLOCKS = 0x90D7;\n    public const uint MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS = 0x90D8;\n    public const uint MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS = 0x90D9;\n    public const uint MAX_FRAGMENT_SHADER_STORAGE_BLOCKS = 0x90DA;\n    public const uint MAX_COMPUTE_SHADER_STORAGE_BLOCKS = 0x90DB;\n    public const uint MAX_COMBINED_SHADER_STORAGE_BLOCKS = 0x90DC;\n    public const uint MAX_SHADER_STORAGE_BUFFER_BINDINGS = 0x90DD;\n    public const uint MAX_SHADER_STORAGE_BLOCK_SIZE = 0x90DE;\n    public const uint SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT = 0x90DF;\n    public const uint SHADER_STORAGE_BARRIER_BIT = 0x00002000;\n    public const uint MAX_COMBINED_SHADER_OUTPUT_RESOURCES = 0x8F39;\n    public const uint DEPTH_STENCIL_TEXTURE_MODE = 0x90EA;\n    public const uint TEXTURE_BUFFER_OFFSET = 0x919D;\n    public const uint TEXTURE_BUFFER_SIZE = 0x919E;\n    public const uint TEXTURE_BUFFER_OFFSET_ALIGNMENT = 0x919F;\n    public const uint TEXTURE_VIEW_MIN_LEVEL = 0x82DB;\n    public const uint TEXTURE_VIEW_NUM_LEVELS = 0x82DC;\n    public const uint TEXTURE_VIEW_MIN_LAYER = 0x82DD;\n    public const uint TEXTURE_VIEW_NUM_LAYERS = 0x82DE;\n    public const uint TEXTURE_IMMUTABLE_LEVELS = 0x82DF;\n    public const uint VERTEX_ATTRIB_BINDING = 0x82D4;\n    public const uint VERTEX_ATTRIB_RELATIVE_OFFSET = 0x82D5;\n    public const uint VERTEX_BINDING_DIVISOR = 0x82D6;\n    public const uint VERTEX_BINDING_OFFSET = 0x82D7;\n    public const uint VERTEX_BINDING_STRIDE = 0x82D8;\n    public const uint MAX_VERTEX_ATTRIB_RELATIVE_OFFSET = 0x82D9;\n    public const uint MAX_VERTEX_ATTRIB_BINDINGS = 0x82DA;\n    public const uint VERTEX_BINDING_BUFFER = 0x8F4F;\n    public const uint DISPLAY_LIST = 0x82E7;\n    public const uint MAX_VERTEX_ATTRIB_STRIDE = 0x82E5;\n    public const uint PRIMITIVE_RESTART_FOR_PATCHES_SUPPORTED = 0x8221;\n    public const uint TEXTURE_BUFFER_BINDING = 0x8C2A;\n    public const uint MAP_PERSISTENT_BIT = 0x0040;\n    public const uint MAP_COHERENT_BIT = 0x0080;\n    public const uint DYNAMIC_STORAGE_BIT = 0x0100;\n    public const uint CLIENT_STORAGE_BIT = 0x0200;\n    public const uint CLIENT_MAPPED_BUFFER_BARRIER_BIT = 0x00004000;\n    public const uint BUFFER_IMMUTABLE_STORAGE = 0x821F;\n    public const uint BUFFER_STORAGE_FLAGS = 0x8220;\n    public const uint CLEAR_TEXTURE = 0x9365;\n    public const uint LOCATION_COMPONENT = 0x934A;\n    public const uint TRANSFORM_FEEDBACK_BUFFER_INDEX = 0x934B;\n    public const uint TRANSFORM_FEEDBACK_BUFFER_STRIDE = 0x934C;\n    public const uint QUERY_BUFFER = 0x9192;\n    public const uint QUERY_BUFFER_BARRIER_BIT = 0x00008000;\n    public const uint QUERY_BUFFER_BINDING = 0x9193;\n    public const uint QUERY_RESULT_NO_WAIT = 0x9194;\n    public const uint MIRROR_CLAMP_TO_EDGE = 0x8743;\n    public const uint CONTEXT_LOST = 0x0507;\n    public const uint NEGATIVE_ONE_TO_ONE = 0x935E;\n    public const uint ZERO_TO_ONE = 0x935F;\n    public const uint CLIP_ORIGIN = 0x935C;\n    public const uint CLIP_DEPTH_MODE = 0x935D;\n    public const uint QUERY_WAIT_INVERTED = 0x8E17;\n    public const uint QUERY_NO_WAIT_INVERTED = 0x8E18;\n    public const uint QUERY_BY_REGION_WAIT_INVERTED = 0x8E19;\n    public const uint QUERY_BY_REGION_NO_WAIT_INVERTED = 0x8E1A;\n    public const uint MAX_CULL_DISTANCES = 0x82F9;\n    public const uint MAX_COMBINED_CLIP_AND_CULL_DISTANCES = 0x82FA;\n    public const uint TEXTURE_TARGET = 0x1006;\n    public const uint QUERY_TARGET = 0x82EA;\n    public const uint GUILTY_CONTEXT_RESET = 0x8253;\n    public const uint INNOCENT_CONTEXT_RESET = 0x8254;\n    public const uint UNKNOWN_CONTEXT_RESET = 0x8255;\n    public const uint RESET_NOTIFICATION_STRATEGY = 0x8256;\n    public const uint LOSE_CONTEXT_ON_RESET = 0x8252;\n    public const uint NO_RESET_NOTIFICATION = 0x8261;\n    public const uint CONTEXT_FLAG_ROBUST_ACCESS_BIT = 0x00000004;\n    public const uint CONTEXT_RELEASE_BEHAVIOR = 0x82FB;\n    public const uint CONTEXT_RELEASE_BEHAVIOR_FLUSH = 0x82FC;\n}"
  },
  {
    "path": "src/JitterDemo/Renderer/OpenGL/Native/GLFW.cs",
    "content": "/* Copyright <2022> <Thorben Linneweber>\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n *\n */\n\nusing System;\nusing System.Diagnostics.CodeAnalysis;\nusing System.Runtime.InteropServices;\n\nnamespace JitterDemo.Renderer.OpenGL.Native;\n\n[SuppressMessage(\"Usage\", \"CA1401:P/Invokes should not be visible\",\n    Justification = \"Part of the 'Native' namespace.\")]\npublic static class GLFW\n{\n    [StructLayout(LayoutKind.Sequential)]\n    public struct GLFWImage\n    {\n        public int Width;\n        public int Height;\n        public IntPtr Pixels;\n    }\n\n    static GLFW()\n    {\n        ImportResolver.Load();\n    }\n\n    public const string LIBGLFW = \"glfw3\";\n\n    [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n    public delegate void GLProcDelegate();\n\n    [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n    public delegate void ErrorDelegate(int errorcode, string description);\n\n    [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n    public delegate void WindowsPosDelegate(IntPtr window, int posx, int posy);\n\n    [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n    public delegate void WindowSizeDelegate(IntPtr window, int width, int height);\n\n    [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n    public delegate void WindowCloseDelegate(IntPtr window);\n\n    [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n    public delegate void WindowRefreshDelegate(IntPtr window);\n\n    [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n    public delegate void WindowFocusDelegate(IntPtr window, int focused);\n\n    [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n    public delegate void WindowIconifyDelegate(IntPtr window, int iconified);\n\n    [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n    public delegate void FrameBufferDelegate(IntPtr window, int width, int height);\n\n    [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n    public delegate void MouseButtonDelegate(IntPtr window, int button, int action, int mods);\n\n    [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n    public delegate void CursorPosDelegate(IntPtr window, double mousex, double mousey);\n\n    [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n    public delegate void CursorEnterDelegate(IntPtr window, int entered);\n\n    [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n    public delegate void ScrollDelegate(IntPtr window, double xoffset, double yoffset);\n\n    [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n    public delegate void KeyDelegate(IntPtr window, int key, int scancode, int action, int mods);\n\n    [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n    public delegate void CharDelegate(IntPtr window, uint codepoint);\n\n    [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n    public delegate void CharModDelegate(IntPtr window, int codepoint, int mods);\n\n    [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n    public delegate void DropDelegate(IntPtr window, int count, string[] paths);\n\n    [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n    public delegate void MonitorDelegate(IntPtr window, int monitorevent);\n\n    [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n    public delegate void JoystickDelegate(int jid, int ev);\n\n    [DllImport(LIBGLFW, EntryPoint = \"glfwGetJoystickName\", ExactSpelling = true)]\n    public static extern IntPtr GetGamepadName(int jid);\n\n    [DllImport(LIBGLFW, EntryPoint = \"glfwJoystickIsGamepad\", ExactSpelling = true)]\n    public static extern int JoystickIsGamepad(int jid);\n\n    [DllImport(LIBGLFW, EntryPoint = \"glfwGetWindowUserPointer\", ExactSpelling = true)]\n    public static extern IntPtr GetWindowUserPointer(IntPtr window);\n\n    [DllImport(LIBGLFW, EntryPoint = \"glfwGetVersion\", ExactSpelling = true)]\n    public static extern void GetVersion([Out] out int major, [Out] out int minor, [Out] out int rev);\n\n    [DllImport(LIBGLFW, EntryPoint = \"glfwGetMonitorPos\", ExactSpelling = true)]\n    public static extern void GetMonitorPos(IntPtr monitor, ref int xpos, ref int ypos);\n\n    [DllImport(LIBGLFW, EntryPoint = \"glfwGetMonitorPhysicalSize\", ExactSpelling = true)]\n    public static extern void GetMonitorPhysicalSize(IntPtr monitor, ref int widthMM, ref int heightMM);\n\n    [DllImport(LIBGLFW, EntryPoint = \"glfwGetWindowPos\", ExactSpelling = true)]\n    public static extern void GetWindowPos(IntPtr window, ref int xpos, ref int ypos);\n\n    [DllImport(LIBGLFW, EntryPoint = \"glfwGetWindowSize\", ExactSpelling = true)]\n    public static extern void GetWindowSize(IntPtr window, out int width, out int height);\n\n    [DllImport(LIBGLFW, EntryPoint = \"glfwGetFramebufferSize\", ExactSpelling = true)]\n    public static extern void GetFramebufferSize(IntPtr window, ref int width, ref int height);\n\n    [DllImport(LIBGLFW, EntryPoint = \"glfwGetWindowFrameSize\", ExactSpelling = true)]\n    public static extern void GetWindowFrameSize(IntPtr window, ref int left, ref int top, ref int right,\n        ref int bottom);\n\n    [DllImport(LIBGLFW, EntryPoint = \"glfwGetCursorPos\", ExactSpelling = true)]\n    public static extern void GetCursorPos(IntPtr window, ref double xpos, ref double ypos);\n\n    [DllImport(LIBGLFW, EntryPoint = \"glfwSetGamma\", ExactSpelling = true)]\n    public static extern void SetGamma(IntPtr monitor, float gamma);\n\n    [DllImport(LIBGLFW, EntryPoint = \"glfwSetGammaRamp\", ExactSpelling = true)]\n    public static extern void SetGammaRamp(IntPtr monitor, long ramp);\n\n    [DllImport(LIBGLFW, EntryPoint = \"glfwSetWindowShouldClose\", ExactSpelling = true)]\n    public static extern void SetWindowShouldClose(IntPtr window, int value);\n\n    [DllImport(LIBGLFW, EntryPoint = \"glfwSetWindowPos\", ExactSpelling = true)]\n    public static extern void SetWindowPos(IntPtr window, int xpos, int ypos);\n\n    [DllImport(LIBGLFW, EntryPoint = \"glfwSetWindowSize\", ExactSpelling = true)]\n    public static extern void SetWindowSize(IntPtr window, int width, int height);\n\n    [DllImport(LIBGLFW, EntryPoint = \"glfwSetWindowUserPointer\", ExactSpelling = true)]\n    public static extern void SetWindowUserPointer(IntPtr window, IntPtr pointer);\n\n    [DllImport(LIBGLFW, EntryPoint = \"glfwSetCursorPos\", ExactSpelling = true)]\n    public static extern void SetCursorPos(IntPtr window, double xpos, double ypos);\n\n    [DllImport(LIBGLFW, EntryPoint = \"glfwSetCursor\", ExactSpelling = true)]\n    public static extern void SetCursor(IntPtr window, long cursor);\n\n    [DllImport(LIBGLFW, EntryPoint = \"glfwSetClipboardString\", CharSet = CharSet.Unicode, ExactSpelling = true)]\n    public static extern void SetClipboardString(IntPtr window, string @string);\n\n    [DllImport(LIBGLFW, EntryPoint = \"glfwSetTime\", ExactSpelling = true)]\n    public static extern void SetTime(double time);\n\n    [DllImport(LIBGLFW, EntryPoint = \"glfwSetInputMode\", ExactSpelling = true)]\n    public static extern void SetInputMode(IntPtr window, int mode, int value);\n\n    [DllImport(LIBGLFW, EntryPoint = \"glfwTerminate\", ExactSpelling = true)]\n    public static extern void Terminate();\n\n    [DllImport(LIBGLFW, EntryPoint = \"glfwDefaultWindowHints\", ExactSpelling = true)]\n    public static extern void DefaultWindowHints();\n\n    [DllImport(LIBGLFW, EntryPoint = \"glfwWindowHint\", ExactSpelling = true)]\n    public static extern void WindowHint(int target, int hint);\n\n    [DllImport(LIBGLFW, EntryPoint = \"glfwDestroyWindow\", ExactSpelling = true)]\n    public static extern void DestroyWindow(IntPtr window);\n\n    [DllImport(LIBGLFW, EntryPoint = \"glfwIconifyWindow\", ExactSpelling = true)]\n    public static extern void IconifyWindow(IntPtr window);\n\n    [DllImport(LIBGLFW, EntryPoint = \"glfwRestoreWindow\", ExactSpelling = true)]\n    public static extern void RestoreWindow(IntPtr window);\n\n    [DllImport(LIBGLFW, EntryPoint = \"glfwShowWindow\", ExactSpelling = true)]\n    public static extern void ShowWindow(IntPtr window);\n\n    [DllImport(LIBGLFW, EntryPoint = \"glfwHideWindow\", ExactSpelling = true)]\n    public static extern void HideWindow(IntPtr window);\n\n    [DllImport(LIBGLFW, EntryPoint = \"glfwPollEvents\", ExactSpelling = true)]\n    public static extern void PollEvents();\n\n    [DllImport(LIBGLFW, EntryPoint = \"glfwWaitEvents\", ExactSpelling = true)]\n    public static extern void WaitEvents();\n\n    [DllImport(LIBGLFW, EntryPoint = \"glfwPostEmptyEvent\", ExactSpelling = true)]\n    public static extern void PostEmptyEvent();\n\n    [DllImport(LIBGLFW, EntryPoint = \"glfwDestroyCursor\", ExactSpelling = true)]\n    public static extern void DestroyCursor(long cursor);\n\n    [DllImport(LIBGLFW, EntryPoint = \"glfwMakeContextCurrent\", ExactSpelling = true)]\n    public static extern void MakeContextCurrent(IntPtr window);\n\n    [DllImport(LIBGLFW, EntryPoint = \"glfwSwapBuffers\", ExactSpelling = true)]\n    public static extern void SwapBuffers(IntPtr window);\n\n    [DllImport(LIBGLFW, EntryPoint = \"glfwSwapInterval\", ExactSpelling = true)]\n    public static extern void SwapInterval(int interval);\n\n    [DllImport(LIBGLFW, EntryPoint = \"glfwInit\", ExactSpelling = true)]\n    public static extern int Init();\n\n    [DllImport(LIBGLFW, EntryPoint = \"glfwWindowShouldClose\", ExactSpelling = true)]\n    public static extern int WindowShouldClose(IntPtr window);\n\n    [DllImport(LIBGLFW, EntryPoint = \"glfwGetWindowAttrib\", ExactSpelling = true)]\n    public static extern int GetWindowAttrib(IntPtr window, int attrib);\n\n    [DllImport(LIBGLFW, EntryPoint = \"glfwGetInputMode\", ExactSpelling = true)]\n    public static extern int GetInputMode(IntPtr window, int mode);\n\n    [DllImport(LIBGLFW, EntryPoint = \"glfwGetKey\", ExactSpelling = true)]\n    public static extern int GetKey(IntPtr window, int key);\n\n    [DllImport(LIBGLFW, EntryPoint = \"glfwGetMouseButton\", ExactSpelling = true)]\n    public static extern int GetMouseButton(IntPtr window, int button);\n\n    [DllImport(LIBGLFW, EntryPoint = \"glfwJoystickPresent\", ExactSpelling = true)]\n    public static extern int JoystickPresent(int joy);\n\n    [DllImport(LIBGLFW, EntryPoint = \"glfwGetJoystickButtons\", ExactSpelling = true)]\n    public static extern IntPtr GetJoystickButtons(int joy, out int count);\n\n    [DllImport(LIBGLFW, EntryPoint = \"glfwGetMonitorName\", ExactSpelling = true)]\n    public static extern IntPtr GetMonitorName(IntPtr monitor);\n\n    [DllImport(LIBGLFW, EntryPoint = \"glfwGetJoystickName\", ExactSpelling = true)]\n    public static extern IntPtr GetJoystickName(int joy);\n\n    [DllImport(LIBGLFW, EntryPoint = \"glfwGetClipboardString\", ExactSpelling = true)]\n    public static extern IntPtr GetClipboardString(IntPtr window);\n\n    [DllImport(LIBGLFW, EntryPoint = \"glfwGetVideoModes\", ExactSpelling = true)]\n    public static extern long[] GetVideoModes(IntPtr monitor, ref int count);\n\n    [DllImport(LIBGLFW, EntryPoint = \"glfwGetMonitors\", ExactSpelling = true)]\n    public static extern long[] GetMonitors(int count);\n\n    [DllImport(LIBGLFW, EntryPoint = \"glfwGetVideoMode\", ExactSpelling = true)]\n    public static extern long GetVideoMode(IntPtr monitor);\n\n    [DllImport(LIBGLFW, EntryPoint = \"glfwGetGammaRamp\", ExactSpelling = true)]\n    public static extern long GetGammaRamp(IntPtr monitor);\n\n    [DllImport(LIBGLFW, EntryPoint = \"glfwGetPrimaryMonitor\", ExactSpelling = true)]\n    public static extern IntPtr GetPrimaryMonitor();\n\n    [DllImport(LIBGLFW, EntryPoint = \"glfwGetWindowMonitor\", ExactSpelling = true)]\n    public static extern IntPtr GetWindowMonitor(IntPtr window);\n\n    [DllImport(LIBGLFW, EntryPoint = \"glfwCreateCursor\", ExactSpelling = true)]\n    public static extern long CreateCursor(long image, int xhot, int yhot);\n\n    [DllImport(LIBGLFW, EntryPoint = \"glfwCreateStandardCursor\", ExactSpelling = true)]\n    public static extern long CreateStandardCursor(int shape);\n\n    [DllImport(LIBGLFW, EntryPoint = \"glfwGetCurrentContext\", ExactSpelling = true)]\n    public static extern long GetCurrentContext();\n\n    [DllImport(LIBGLFW, EntryPoint = \"glfwGetJoystickAxes\", ExactSpelling = true)]\n    public static extern IntPtr GetJoystickAxes(int joy, out int count);\n\n    [DllImport(LIBGLFW, EntryPoint = \"glfwGetJoystickHats\", ExactSpelling = true)]\n    public static extern IntPtr GetJoystickHats(int joy, out int count);\n\n    [DllImport(LIBGLFW, EntryPoint = \"glfwGetTime\", ExactSpelling = true)]\n    public static extern double GetTime();\n\n    [DllImport(LIBGLFW, EntryPoint = \"glfwSetWindowIcon\", ExactSpelling = true)]\n    public static extern void SetWindowIcon(IntPtr window, int count, GLFWImage[] images);\n\n    [DllImport(LIBGLFW, EntryPoint = \"glfwSetErrorCallback\", ExactSpelling = true)]\n    public static extern ErrorDelegate SetErrorCallback(ErrorDelegate cbfun);\n\n    [DllImport(LIBGLFW, EntryPoint = \"glfwSetMonitorCallback\", ExactSpelling = true)]\n    public static extern MonitorDelegate SetMonitorCallback(MonitorDelegate cbfun);\n\n    [DllImport(LIBGLFW, EntryPoint = \"glfwSetWindowPosCallback\", ExactSpelling = true)]\n    public static extern WindowsPosDelegate SetWindowPosCallback(IntPtr window, WindowsPosDelegate cbfun);\n\n    [DllImport(LIBGLFW, EntryPoint = \"glfwSetWindowSizeCallback\", ExactSpelling = true)]\n    public static extern WindowSizeDelegate SetWindowSizeCallback(IntPtr window, WindowSizeDelegate cbfun);\n\n    [DllImport(LIBGLFW, EntryPoint = \"glfwSetWindowCloseCallback\", ExactSpelling = true)]\n    public static extern WindowCloseDelegate SetWindowCloseCallback(IntPtr window, WindowCloseDelegate cbfun);\n\n    [DllImport(LIBGLFW, EntryPoint = \"glfwSetWindowRefreshCallback\", ExactSpelling = true)]\n    public static extern WindowRefreshDelegate SetWindowRefreshCallback(IntPtr window, WindowRefreshDelegate cbfun);\n\n    [DllImport(LIBGLFW, EntryPoint = \"glfwSetWindowFocusCallback\", ExactSpelling = true)]\n    public static extern WindowFocusDelegate SetWindowFocusCallback(IntPtr window, WindowFocusDelegate cbfun);\n\n    [DllImport(LIBGLFW, EntryPoint = \"glfwSetWindowIconifyCallback\", ExactSpelling = true)]\n    public static extern WindowIconifyDelegate SetWindowIconifyCallback(IntPtr window, WindowIconifyDelegate cbfun);\n\n    [DllImport(LIBGLFW, EntryPoint = \"glfwSetFramebufferSizeCallback\", ExactSpelling = true)]\n    public static extern FrameBufferDelegate SetFramebufferSizeCallback(IntPtr window, FrameBufferDelegate cbfun);\n\n    [DllImport(LIBGLFW, EntryPoint = \"glfwSetKeyCallback\", ExactSpelling = true)]\n    public static extern KeyDelegate SetKeyCallback(IntPtr window, KeyDelegate cbfun);\n\n    [DllImport(LIBGLFW, EntryPoint = \"glfwSetCharCallback\", ExactSpelling = true)]\n    public static extern CharDelegate SetCharCallback(IntPtr window, CharDelegate cbfun);\n\n    [DllImport(LIBGLFW, EntryPoint = \"glfwSetCharModsCallback\", ExactSpelling = true)]\n    public static extern CharModDelegate SetCharModsCallback(IntPtr window, CharModDelegate cbfun);\n\n    [DllImport(LIBGLFW, EntryPoint = \"glfwSetMouseButtonCallback\", ExactSpelling = true)]\n    public static extern MouseButtonDelegate SetMouseButtonCallback(IntPtr window, MouseButtonDelegate cbfun);\n\n    [DllImport(LIBGLFW, EntryPoint = \"glfwSetCursorPosCallback\", ExactSpelling = true)]\n    public static extern CursorPosDelegate SetCursorPosCallback(IntPtr window, CursorPosDelegate cbfun);\n\n    [DllImport(LIBGLFW, EntryPoint = \"glfwSetCursorEnterCallback\", ExactSpelling = true)]\n    public static extern CursorEnterDelegate SetCursorEnterCallback(IntPtr window, CursorEnterDelegate cbfun);\n\n    [DllImport(LIBGLFW, EntryPoint = \"glfwSetScrollCallback\", ExactSpelling = true)]\n    public static extern ScrollDelegate SetScrollCallback(IntPtr window, ScrollDelegate cbfun);\n\n    [DllImport(LIBGLFW, EntryPoint = \"glfwSetDropCallback\", ExactSpelling = true)]\n    public static extern DropDelegate SetDropCallback(IntPtr window, DropDelegate cbfun);\n\n    [DllImport(LIBGLFW, EntryPoint = \"glfwSetJoystickCallback\", ExactSpelling = true)]\n    public static extern JoystickDelegate SetJoystickCallback(JoystickDelegate cbfun);\n\n    public static int ExtensionSupported(string extension)\n    {\n        [DllImport(LIBGLFW, EntryPoint = \"glfwExtensionSupported\", ExactSpelling = true)]\n        static extern int glfwExtensionSupported(IntPtr extension);\n\n        IntPtr ptr = Marshal.StringToHGlobalAnsi(extension);\n\n        try\n        {\n            return glfwExtensionSupported(ptr);\n        }\n        finally\n        {\n            Marshal.FreeHGlobal(ptr);\n        }\n    }\n\n    public static string GetVersionString()\n    {\n        [DllImport(LIBGLFW, EntryPoint = \"glfwGetVersionString\", ExactSpelling = true)]\n        static extern IntPtr glfwGetVersionString();\n\n        return Marshal.PtrToStringAnsi(glfwGetVersionString()) ?? string.Empty;\n    }\n\n    public static IntPtr CreateWindow(int width, int height, string title, IntPtr monitor, IntPtr share)\n    {\n        [DllImport(LIBGLFW, EntryPoint = \"glfwCreateWindow\", ExactSpelling = true)]\n        static extern IntPtr glfwCreateWindow(int width, int height, IntPtr title, IntPtr monitor, IntPtr share);\n\n        IntPtr ptr = Marshal.StringToHGlobalAnsi(title);\n\n        try\n        {\n            return glfwCreateWindow(width, height, ptr, monitor, share);\n        }\n        finally\n        {\n            Marshal.FreeHGlobal(ptr);\n        }\n    }\n\n    public static void SetWindowTitle(IntPtr window, string title)\n    {\n        [DllImport(LIBGLFW, EntryPoint = \"glfwSetWindowTitle\", ExactSpelling = true)]\n        static extern void glfwSetWindowTitle(IntPtr window, IntPtr title);\n\n        IntPtr ptr = Marshal.StringToHGlobalAnsi(title);\n\n        try\n        {\n            glfwSetWindowTitle(window, ptr);\n        }\n        finally\n        {\n            Marshal.FreeHGlobal(ptr);\n        }\n    }\n\n    public static IntPtr GetProcAddress(string procname)\n    {\n        [DllImport(LIBGLFW, EntryPoint = \"glfwGetProcAddress\", ExactSpelling = true)]\n        static extern IntPtr glfwGetProcAddress(IntPtr procname);\n\n        IntPtr ptr = Marshal.StringToHGlobalAnsi(procname);\n\n        try\n        {\n            return glfwGetProcAddress(ptr);\n        }\n        finally\n        {\n            Marshal.FreeHGlobal(ptr);\n        }\n    }\n}\n\npublic static class GLFWC\n{\n    public const int VERSION_MAJOR = 3;\n    public const int VERSION_MINOR = 1;\n    public const int VERSION_REVISION = 2;\n    public const int RELEASE = 0;\n    public const int PRESS = 1;\n    public const int REPEAT = 2;\n    public const int KEY_UNKNOWN = -1;\n    public const int KEY_SPACE = 32;\n    public const int KEY_APOSTROPHE = 39;\n    public const int KEY_COMMA = 44;\n    public const int KEY_MINUS = 45;\n    public const int KEY_PERIOD = 46;\n    public const int KEY_SLASH = 47;\n    public const int KEY_0 = 48;\n    public const int KEY_1 = 49;\n    public const int KEY_2 = 50;\n    public const int KEY_3 = 51;\n    public const int KEY_4 = 52;\n    public const int KEY_5 = 53;\n    public const int KEY_6 = 54;\n    public const int KEY_7 = 55;\n    public const int KEY_8 = 56;\n    public const int KEY_9 = 57;\n    public const int KEY_SEMICOLON = 59;\n    public const int KEY_EQUAL = 61;\n    public const int KEY_A = 65;\n    public const int KEY_B = 66;\n    public const int KEY_C = 67;\n    public const int KEY_D = 68;\n    public const int KEY_E = 69;\n    public const int KEY_F = 70;\n    public const int KEY_G = 71;\n    public const int KEY_H = 72;\n    public const int KEY_I = 73;\n    public const int KEY_J = 74;\n    public const int KEY_K = 75;\n    public const int KEY_L = 76;\n    public const int KEY_M = 77;\n    public const int KEY_N = 78;\n    public const int KEY_O = 79;\n    public const int KEY_P = 80;\n    public const int KEY_Q = 81;\n    public const int KEY_R = 82;\n    public const int KEY_S = 83;\n    public const int KEY_T = 84;\n    public const int KEY_U = 85;\n    public const int KEY_V = 86;\n    public const int KEY_W = 87;\n    public const int KEY_X = 88;\n    public const int KEY_Y = 89;\n    public const int KEY_Z = 90;\n    public const int KEY_LEFT_BRACKET = 91;\n    public const int KEY_BACKSLASH = 92;\n    public const int KEY_RIGHT_BRACKET = 93;\n    public const int KEY_GRAVE_ACCENT = 96;\n    public const int KEY_WORLD_1 = 161;\n    public const int KEY_WORLD_2 = 162;\n    public const int KEY_ESCAPE = 256;\n    public const int KEY_ENTER = 257;\n    public const int KEY_TAB = 258;\n    public const int KEY_BACKSPACE = 259;\n    public const int KEY_INSERT = 260;\n    public const int KEY_DELETE = 261;\n    public const int KEY_RIGHT = 262;\n    public const int KEY_LEFT = 263;\n    public const int KEY_DOWN = 264;\n    public const int KEY_UP = 265;\n    public const int KEY_PAGE_UP = 266;\n    public const int KEY_PAGE_DOWN = 267;\n    public const int KEY_HOME = 268;\n    public const int KEY_END = 269;\n    public const int KEY_CAPS_LOCK = 280;\n    public const int KEY_SCROLL_LOCK = 281;\n    public const int KEY_NUM_LOCK = 282;\n    public const int KEY_PRINT_SCREEN = 283;\n    public const int KEY_PAUSE = 284;\n    public const int KEY_F1 = 290;\n    public const int KEY_F2 = 291;\n    public const int KEY_F3 = 292;\n    public const int KEY_F4 = 293;\n    public const int KEY_F5 = 294;\n    public const int KEY_F6 = 295;\n    public const int KEY_F7 = 296;\n    public const int KEY_F8 = 297;\n    public const int KEY_F9 = 298;\n    public const int KEY_F10 = 299;\n    public const int KEY_F11 = 300;\n    public const int KEY_F12 = 301;\n    public const int KEY_F13 = 302;\n    public const int KEY_F14 = 303;\n    public const int KEY_F15 = 304;\n    public const int KEY_F16 = 305;\n    public const int KEY_F17 = 306;\n    public const int KEY_F18 = 307;\n    public const int KEY_F19 = 308;\n    public const int KEY_F20 = 309;\n    public const int KEY_F21 = 310;\n    public const int KEY_F22 = 311;\n    public const int KEY_F23 = 312;\n    public const int KEY_F24 = 313;\n    public const int KEY_F25 = 314;\n    public const int KEY_KP_0 = 320;\n    public const int KEY_KP_1 = 321;\n    public const int KEY_KP_2 = 322;\n    public const int KEY_KP_3 = 323;\n    public const int KEY_KP_4 = 324;\n    public const int KEY_KP_5 = 325;\n    public const int KEY_KP_6 = 326;\n    public const int KEY_KP_7 = 327;\n    public const int KEY_KP_8 = 328;\n    public const int KEY_KP_9 = 329;\n    public const int KEY_KP_DECIMAL = 330;\n    public const int KEY_KP_DIVIDE = 331;\n    public const int KEY_KP_MULTIPLY = 332;\n    public const int KEY_KP_SUBTRACT = 333;\n    public const int KEY_KP_ADD = 334;\n    public const int KEY_KP_ENTER = 335;\n    public const int KEY_KP_EQUAL = 336;\n    public const int KEY_LEFT_SHIFT = 340;\n    public const int KEY_LEFT_CONTROL = 341;\n    public const int KEY_LEFT_ALT = 342;\n    public const int KEY_LEFT_SUPER = 343;\n    public const int KEY_RIGHT_SHIFT = 344;\n    public const int KEY_RIGHT_CONTROL = 345;\n    public const int KEY_RIGHT_ALT = 346;\n    public const int KEY_RIGHT_SUPER = 347;\n    public const int KEY_MENU = 348;\n    public const int KEY_LAST = KEY_MENU;\n    public const int MOD_SHIFT = 0x0001;\n    public const int MOD_CONTROL = 0x0002;\n    public const int MOD_ALT = 0x0004;\n    public const int MOD_SUPER = 0x0008;\n    public const int MOUSE_BUTTON_1 = 0;\n    public const int MOUSE_BUTTON_2 = 1;\n    public const int MOUSE_BUTTON_3 = 2;\n    public const int MOUSE_BUTTON_4 = 3;\n    public const int MOUSE_BUTTON_5 = 4;\n    public const int MOUSE_BUTTON_6 = 5;\n    public const int MOUSE_BUTTON_7 = 6;\n    public const int MOUSE_BUTTON_8 = 7;\n    public const int MOUSE_BUTTON_LAST = MOUSE_BUTTON_8;\n    public const int MOUSE_BUTTON_LEFT = MOUSE_BUTTON_1;\n    public const int MOUSE_BUTTON_RIGHT = MOUSE_BUTTON_2;\n    public const int MOUSE_BUTTON_MIDDLE = MOUSE_BUTTON_3;\n    public const int JOYSTICK_1 = 0;\n    public const int JOYSTICK_2 = 1;\n    public const int JOYSTICK_3 = 2;\n    public const int JOYSTICK_4 = 3;\n    public const int JOYSTICK_5 = 4;\n    public const int JOYSTICK_6 = 5;\n    public const int JOYSTICK_7 = 6;\n    public const int JOYSTICK_8 = 7;\n    public const int JOYSTICK_9 = 8;\n    public const int JOYSTICK_10 = 9;\n    public const int JOYSTICK_11 = 10;\n    public const int JOYSTICK_12 = 11;\n    public const int JOYSTICK_13 = 12;\n    public const int JOYSTICK_14 = 13;\n    public const int JOYSTICK_15 = 14;\n    public const int JOYSTICK_16 = 15;\n    public const int JOYSTICK_LAST = JOYSTICK_16;\n    public const int TRUE = 1;\n    public const int FALSE = 0;\n    public const int MAXIMIZED = 0x00020008;\n    public const int NOT_INITIALIZED = 0x00010001;\n    public const int NO_CURRENT_CONTEXT = 0x00010002;\n    public const int INVALID_ENUM = 0x00010003;\n    public const int INVALID_VALUE = 0x00010004;\n    public const int OUT_OF_MEMORY = 0x00010005;\n    public const int API_UNAVAILABLE = 0x00010006;\n    public const int VERSION_UNAVAILABLE = 0x00010007;\n    public const int PLATFORM_ERROR = 0x00010008;\n    public const int FORMAT_UNAVAILABLE = 0x00010009;\n    public const int FOCUSED = 0x00020001;\n    public const int ICONIFIED = 0x00020002;\n    public const int RESIZABLE = 0x00020003;\n    public const int VISIBLE = 0x00020004;\n    public const int DECORATED = 0x00020005;\n    public const int AUTO_ICONIFY = 0x00020006;\n    public const int FLOATING = 0x00020007;\n    public const int RED_BITS = 0x00021001;\n    public const int GREEN_BITS = 0x00021002;\n    public const int BLUE_BITS = 0x00021003;\n    public const int ALPHA_BITS = 0x00021004;\n    public const int DEPTH_BITS = 0x00021005;\n    public const int STENCIL_BITS = 0x00021006;\n    public const int ACCUM_RED_BITS = 0x00021007;\n    public const int ACCUM_GREEN_BITS = 0x00021008;\n    public const int ACCUM_BLUE_BITS = 0x00021009;\n    public const int ACCUM_ALPHA_BITS = 0x0002100A;\n    public const int AUX_BUFFERS = 0x0002100B;\n    public const int STEREO = 0x0002100C;\n    public const int SAMPLES = 0x0002100D;\n    public const int SRGB_CAPABLE = 0x0002100E;\n    public const int REFRESH_RATE = 0x0002100F;\n    public const int DOUBLEBUFFER = 0x00021010;\n    public const int CLIENT_API = 0x00022001;\n    public const int CONTEXT_VERSION_MAJOR = 0x00022002;\n    public const int CONTEXT_VERSION_MINOR = 0x00022003;\n    public const int CONTEXT_REVISION = 0x00022004;\n    public const int CONTEXT_ROBUSTNESS = 0x00022005;\n    public const int OPENGL_FORWARD_COMPAT = 0x00022006;\n    public const int OPENGL_DEBUG_CONTEXT = 0x00022007;\n    public const int OPENGL_PROFILE = 0x00022008;\n    public const int CONTEXT_RELEASE_BEHAVIOR = 0x00022009;\n    public const int OPENGL_API = 0x00030001;\n    public const int OPENGL_ES_API = 0x00030002;\n    public const int NO_ROBUSTNESS = 0;\n    public const int NO_RESET_NOTIFICATION = 0x00031001;\n    public const int LOSE_CONTEXT_ON_RESET = 0x00031002;\n    public const int OPENGL_ANY_PROFILE = 0;\n    public const int OPENGL_CORE_PROFILE = 0x00032001;\n    public const int OPENGL_COMPAT_PROFILE = 0x00032002;\n    public const int CURSOR = 0x00033001;\n    public const int STICKY_KEYS = 0x00033002;\n    public const int STICKY_MOUSE_BUTTONS = 0x00033003;\n    public const int CURSOR_NORMAL = 0x00034001;\n    public const int CURSOR_HIDDEN = 0x00034002;\n    public const int CURSOR_DISABLED = 0x00034003;\n    public const int ANY_RELEASE_BEHAVIOR = 0;\n    public const int RELEASE_BEHAVIOR_FLUSH = 0x00035001;\n    public const int RELEASE_BEHAVIOR_NONE = 0x00035002;\n    public const int ARROW_CURSOR = 0x00036001;\n    public const int IBEAM_CURSOR = 0x00036002;\n    public const int CROSSHAIR_CURSOR = 0x00036003;\n    public const int HAND_CURSOR = 0x00036004;\n    public const int HRESIZE_CURSOR = 0x00036005;\n    public const int VRESIZE_CURSOR = 0x00036006;\n    public const int CONNECTED = 0x00040001;\n    public const int DISCONNECTED = 0x00040002;\n}"
  },
  {
    "path": "src/JitterDemo/Renderer/OpenGL/Objects/ArrayBuffer.cs",
    "content": "using JitterDemo.Renderer.OpenGL.Native;\n\nnamespace JitterDemo.Renderer.OpenGL;\n\n[GLObject(GLObjectType.ArrayBuffer)]\npublic sealed class ArrayBuffer : GLBuffer\n{\n    public ArrayBuffer() : base(GLC.ARRAY_BUFFER)\n    {\n    }\n\n    public ArrayBuffer(uint buffer) : base(buffer, GLC.ARRAY_BUFFER)\n    {\n    }\n}"
  },
  {
    "path": "src/JitterDemo/Renderer/OpenGL/Objects/ElementArrayBuffer.cs",
    "content": "using JitterDemo.Renderer.OpenGL.Native;\n\nnamespace JitterDemo.Renderer.OpenGL;\n\n[GLObject(GLObjectType.ElementArrayBuffer)]\npublic sealed class ElementArrayBuffer : GLBuffer\n{\n    public ElementArrayBuffer() : base(GLC.ELEMENT_ARRAY_BUFFER)\n    {\n    }\n\n    public ElementArrayBuffer(uint buffer) : base(buffer, GLC.ELEMENT_ARRAY_BUFFER)\n    {\n    }\n}"
  },
  {
    "path": "src/JitterDemo/Renderer/OpenGL/Objects/Framebuffer.cs",
    "content": "using JitterDemo.Renderer.OpenGL.Native;\n\nnamespace JitterDemo.Renderer.OpenGL;\n\n[GLObject(GLObjectType.FrameBuffer)]\npublic class FrameBuffer : GLObject\n{\n    public static readonly FrameBuffer Default = new(0);\n\n    public FrameBuffer() : base(GL.GenFramebuffer())\n    {\n    }\n\n    private FrameBuffer(uint fbo) : base(fbo)\n    {\n    }\n\n    public void Bind()\n    {\n        GL.BindFramebuffer(GLC.FRAMEBUFFER, Handle);\n    }\n\n    public void AttachDepthTexture(Texture2D texture)\n    {\n        Bind();\n        GL.FramebufferTexture2D(GLC.FRAMEBUFFER, GLC.DEPTH_ATTACHMENT, GLC.TEXTURE_2D, texture.Handle, 0);\n        GL.DrawBuffer(GLC.NONE);\n    }\n}"
  },
  {
    "path": "src/JitterDemo/Renderer/OpenGL/Objects/GLBuffer.cs",
    "content": "using System;\nusing JitterDemo.Renderer.OpenGL.Native;\n\nnamespace JitterDemo.Renderer.OpenGL;\n\n[GLObjectAttribute(GLObjectType.Buffer)]\npublic class GLBuffer : GLObject\n{\n    private readonly uint type;\n\n    private static uint GenBuffer()\n    {\n        VertexArrayObject.Default.Bind();\n        return GL.GenBuffer();\n    }\n\n    public GLBuffer(uint type) : base(GenBuffer())\n    {\n        this.type = type;\n    }\n\n    public GLBuffer(uint buffer, uint type) : base(buffer)\n    {\n        this.type = type;\n    }\n\n    public void Bind()\n    {\n        GL.BindBuffer(type, Handle);\n    }\n\n    public void SetData<T>(T[] vertices, int size, uint usage = GLC.STATIC_DRAW) where T : unmanaged\n    {\n        if (size > vertices.Length) throw new Exception();\n\n        Bind();\n\n        unsafe\n        {\n            fixed (T* first = vertices)\n            {\n                GL.BufferData(type, sizeof(T) * size, (IntPtr)first, usage);\n            }\n        }\n    }\n\n    public void SetData<T>(T[] vertices, uint usage = GLC.STATIC_DRAW) where T : unmanaged\n    {\n        SetData(vertices, vertices.Length, usage);\n    }\n\n    public void SetData(IntPtr data, int size, uint usage = GLC.STATIC_DRAW)\n    {\n        Bind();\n        GL.BufferData(type, size, data, usage);\n    }\n\n    public void SetData(IntPtr data, int offset, int size)\n    {\n        Bind();\n        GL.BufferSubData(type, offset, size, data);\n    }\n}"
  },
  {
    "path": "src/JitterDemo/Renderer/OpenGL/Objects/GLObject.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Reflection;\n\nnamespace JitterDemo.Renderer.OpenGL;\n\npublic enum GLObjectType\n{\n    Unspecified,\n    ArrayBuffer,\n    ElementArrayBuffer,\n    VertexArrayObject,\n    FrameBuffer,\n    Buffer,\n    Shader,\n    ShaderProgram,\n    Texture\n}\n\n[AttributeUsage(AttributeTargets.Class)]\npublic class GLObjectAttribute : Attribute\n{\n    public GLObjectType ObjectType { get; }\n\n    public GLObjectAttribute(GLObjectType type)\n    {\n        ObjectType = type;\n    }\n}\n\n[GLObjectAttribute(GLObjectType.Unspecified)]\npublic class GLObject\n{\n    internal static Dictionary<GLObjectType, Dictionary<uint, GLObject>> GLObjects = new();\n\n    public static T Retrieve<T>(uint handle) where T : GLObject\n    {\n        GLObjectType ot = typeof(T).GetCustomAttribute<GLObjectAttribute>(true)!.ObjectType;\n\n        if (GLObjects.TryGetValue(ot, out var dict) && dict.TryGetValue(handle, out var obj))\n        {\n            return (T)obj;\n        }\n\n        throw new Exception($\"Could not find {typeof(T).Name} with handle {handle}.\");\n    }\n\n    public GLObject(uint handle)\n    {\n        Handle = handle;\n\n        // We keep track of the managed objects which wrap functions around\n        // a particular native handle, c.f. Retrieve<T>(uint handle).\n        GLObjectType ot = GetType().GetCustomAttribute<GLObjectAttribute>(true)!.ObjectType;\n\n        if (!GLObjects.TryGetValue(ot, out Dictionary<uint, GLObject>? dict))\n        {\n            dict = new Dictionary<uint, GLObject>();\n            GLObjects.Add(ot, dict);\n        }\n\n        dict.TryAdd(handle, this);\n    }\n\n    protected void Remove()\n    {\n        GLObjectType ot = GetType().GetCustomAttribute<GLObjectAttribute>(true)!.ObjectType;\n        if (GLObjects.TryGetValue(ot, out var dict))\n        {\n            dict.Remove(Handle);\n        }\n    }\n\n    public uint Handle { get; }\n\n    public bool IsNull => Handle == 0;\n}"
  },
  {
    "path": "src/JitterDemo/Renderer/OpenGL/Objects/Shader.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Collections.ObjectModel;\nusing JitterDemo.Renderer.OpenGL.Native;\n\nnamespace JitterDemo.Renderer.OpenGL;\n\npublic enum ShaderType : uint\n{\n    Vertex = GLC.VERTEX_SHADER,\n    Fragment = GLC.FRAGMENT_SHADER,\n    Geometry = GLC.GEOMETRY_SHADER\n}\n\npublic class BasicShader : ShaderProgram\n{\n    public BasicShader(string vertex, string fragment)\n    {\n        Shaders.Add(new Shader(ShaderType.Vertex, vertex));\n        Shaders.Add(new Shader(ShaderType.Fragment, fragment));\n        Link();\n    }\n}\n\npublic class ShaderCompileException : Exception\n{\n    private static string Embed(string msg)\n    {\n        return $\"An error occured while compiling a shader:{Environment.NewLine}{msg}\";\n    }\n\n    public ShaderCompileException(string msg) : base(Embed(msg))\n    {\n    }\n}\n\npublic class ShaderLinkException : Exception\n{\n    private static string Embed(string msg)\n    {\n        return $\"An error occured while linking a shader:{Environment.NewLine}{msg}\";\n    }\n\n    public ShaderLinkException(string msg) : base(Embed(msg))\n    {\n    }\n}\n\npublic class ShaderException : Exception\n{\n    public ShaderException(string msg) : base(msg)\n    {\n    }\n}\n\n[GLObject(GLObjectType.Shader)]\npublic class Shader : GLObject\n{\n    public string Code { get; }\n    public ShaderType Type { private set; get; }\n\n    public Shader(ShaderType type, string code) : base(GL.CreateShader((uint)type))\n    {\n        Code = code;\n        Type = type;\n\n        CompileShader();\n    }\n\n    private void CompileShader()\n    {\n        GL.ShaderSource(Handle, 1, new[] { Code }, null);\n        GL.CompileShader(Handle);\n        GL.GetShaderiv(Handle, GLC.COMPILE_STATUS, out int success);\n\n        if (success == GLC.FALSE)\n        {\n            GL.GetShaderInfoLog(Handle, 1024, out int length, out string infoLog);\n#if DEBUG\n            System.Diagnostics.Debug.Fail(infoLog);\n#endif\n            throw new ShaderCompileException(infoLog);\n        }\n    }\n\n    // TODO: delete shader\n}\n\n[GLObject(GLObjectType.ShaderProgram)]\npublic class ShaderProgram : GLObject\n{\n    public ReadOnlyDictionary<string, Uniform> Uniforms { get; private set; } = null!;\n\n    public List<Shader> Shaders { get; }\n\n    public ShaderProgram() : base(GL.CreateProgram())\n    {\n        Shaders = new List<Shader>();\n    }\n\n    // TODO: better error handling\n    public T GetUniform<T>(string uniform) where T : Uniform\n    {\n        if (!Uniforms.TryGetValue(uniform, out Uniform? val))\n        {\n            throw new ShaderException(\"Could not find uniform\");\n        }\n\n        if (val is not T result)\n        {\n            throw new ShaderException(\"Uniform is not of type ..\");\n        }\n\n        return result;\n    }\n\n    public void Link()\n    {\n        for (int i = 0; i < Shaders.Count; i++)\n        {\n            GL.AttachShader(Handle, Shaders[i].Handle);\n        }\n\n        GL.LinkProgram(Handle);\n\n        GL.GetProgramiv(Handle, GLC.LINK_STATUS, out int success);\n\n        if (success == GLC.FALSE)\n        {\n            GL.GetProgramInfoLog(Handle, 1024, out int _, out string infoLog);\n#if DEBUG\n            System.Diagnostics.Debug.Fail(infoLog);\n#endif\n            throw new ShaderLinkException(infoLog);\n        }\n\n        // TODO: delete shader\n        PrepareUniforms();\n    }\n\n    public void Use()\n    {\n        // TODO: add bind() to object class?\n        GL.UseProgram(Handle);\n    }\n\n    protected void PrepareUniforms()\n    {\n        const int MaxNameLen = 256;\n\n        Dictionary<string, Uniform> uniforms = new();\n        Uniforms = new ReadOnlyDictionary<string, Uniform>(uniforms);\n\n        GL.GetProgramiv(Handle, GLC.ACTIVE_UNIFORMS, out int count);\n\n        for (uint i = 0; i < count; i++)\n        {\n            GL.GetActiveUniform(Handle, i, MaxNameLen, out int length, out int _, out uint type, out string name);\n\n            if (length + 1 == MaxNameLen)\n            {\n                throw new InvalidOperationException($\"Uniform name longer than {MaxNameLen} characters!\");\n            }\n\n            int location = GL.GetUniformLocation(Handle, name);\n\n            if (location == -1)\n            {\n                throw new InvalidOperationException($\"Could not get uniform location of {name}.\");\n            }\n\n            switch (type)\n            {\n                case GLC.FLOAT:\n                    uniforms.Add(name, new UniformFloat(this, location));\n                    break;\n                case GLC.FLOAT_VEC2:\n                    uniforms.Add(name, new UniformVector2(this, location));\n                    break;\n                case GLC.FLOAT_VEC3:\n                    uniforms.Add(name, new UniformVector3(this, location));\n                    break;\n                case GLC.FLOAT_VEC4:\n                    uniforms.Add(name, new UniformVector4(this, location));\n                    break;\n                case GLC.FLOAT_MAT4:\n                    uniforms.Add(name, new UniformMatrix4(this, location));\n                    break;\n                case GLC.SAMPLER_2D:\n                    uniforms.Add(name, new UniformTexture(this, location));\n                    break;\n                case GLC.BOOL:\n                    uniforms.Add(name, new UniformBool(this, location));\n                    break;\n                case GLC.UNSIGNED_INT:\n                    uniforms.Add(name, new UniformUint(this, location));\n                    break;\n                default:\n                    throw new NotImplementedException($\"Type '{type}' not supported!\");\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/JitterDemo/Renderer/OpenGL/Objects/Texture.cs",
    "content": "using System;\nusing JitterDemo.Renderer.OpenGL.Native;\n\nnamespace JitterDemo.Renderer.OpenGL;\n\n[GLObject(GLObjectType.Texture)]\npublic class Texture : GLObject\n{\n    public enum Format : uint\n    {\n        Depth = GLC.DEPTH_COMPONENT,\n        DepthStencil = GLC.DEPTH_STENCIL,\n        Red = GLC.RED,\n        RedGreen = GLC.RG,\n        RedGreenBlue = GLC.RGB,\n        RedGreenBlueAlpha = GLC.RGBA\n    }\n\n    public enum Type : uint\n    {\n        Float = GLC.FLOAT,\n        UnsignedByte = GLC.UNSIGNED_BYTE\n    }\n\n    public enum Wrap : uint\n    {\n        Repeat = GLC.REPEAT,\n        MirroredRepeat = GLC.MIRRORED_REPEAT,\n        ClampToEdge = GLC.CLAMP_TO_EDGE,\n        ClampToBorder = GLC.CLAMP_TO_BORDER\n    }\n\n    public enum Filter : uint\n    {\n        Nearest = GLC.NEAREST,\n        Linear = GLC.LINEAR,\n        NearestMipmapNearest = GLC.NEAREST_MIPMAP_NEAREST,\n        LinearMipmapNearest = GLC.LINEAR_MIPMAP_NEAREST,\n        NearestMipmapLinear = GLC.NEAREST_MIPMAP_LINEAR,\n        LinearMipmapLinear = GLC.LINEAR_MIPMAP_LINEAR\n    }\n\n    public enum Anisotropy\n    {\n        Filter_1x = 1,\n        Filter_2x = 2,\n        Filter_4x = 4,\n        Filter_8x = 8,\n        Filter_16x = 16\n    }\n\n    public Texture() : base(GL.GenTexture())\n    {\n        // https://stackoverflow.com/questions/30554008/when-binding-an-fbo-do-you-need-to-call-glframebuffertexture2d-every-frame\n        Bind();\n    }\n\n    public virtual void Bind()\n    {\n        GL.BindTexture(GLC.TEXTURE_2D, Handle);\n    }\n\n    public virtual void Bind(uint textureUnit)\n    {\n        GL.ActiveTexture(GLC.TEXTURE0 + textureUnit);\n        GL.BindTexture(GLC.TEXTURE_2D, Handle);\n    }\n}\n\npublic class CubemapTexture : Texture\n{\n    public override void Bind()\n    {\n        GL.BindTexture(GLC.TEXTURE_CUBE_MAP, Handle);\n    }\n\n    public override void Bind(uint textureUnit)\n    {\n        GL.ActiveTexture(GLC.TEXTURE0 + textureUnit);\n        GL.BindTexture(GLC.TEXTURE_CUBE_MAP, Handle);\n    }\n\n    public void LoadBitmaps(IntPtr[] bitmaps, int width, int height)\n    {\n        if (bitmaps.Length != 6) throw new ArgumentException(\"Array length has to be 6.\", nameof(bitmaps));\n\n        GL.BindTexture(GLC.TEXTURE_CUBE_MAP, Handle);\n\n        for (int i = 0; i < 6; i++)\n        {\n            GL.TexImage2D(GLC.TEXTURE_CUBE_MAP_POSITIVE_X + (uint)i,\n                0, (int)GLC.RGBA, width, height, 0,\n                GLC.BGRA, GLC.UNSIGNED_BYTE, bitmaps[i]);\n        }\n\n        GL.TexParameteri(GLC.TEXTURE_CUBE_MAP, GLC.TEXTURE_MIN_FILTER, (int)GLC.LINEAR);\n        GL.TexParameteri(GLC.TEXTURE_CUBE_MAP, GLC.TEXTURE_MIN_FILTER, (int)GLC.LINEAR);\n        GL.TexParameteri(GLC.TEXTURE_CUBE_MAP, GLC.TEXTURE_WRAP_S, (int)GLC.CLAMP_TO_EDGE);\n        GL.TexParameteri(GLC.TEXTURE_CUBE_MAP, GLC.TEXTURE_WRAP_T, (int)GLC.CLAMP_TO_EDGE);\n        GL.TexParameteri(GLC.TEXTURE_CUBE_MAP, GLC.TEXTURE_WRAP_R, (int)GLC.CLAMP_TO_EDGE);\n    }\n}\n\npublic class Texture2D : Texture\n{\n    public static unsafe Texture2D EmptyTexture()\n    {\n        var result = new Texture2D();\n\n        int black = 0;\n\n        result.LoadImage((IntPtr)(&black), 1, 1, false);\n        return result;\n    }\n\n    public void LoadImage(IntPtr data, int width, int height, bool generateMipmap = true)\n    {\n        GL.BindTexture(GLC.TEXTURE_2D, Handle);\n        GL.TexImage2D(GLC.TEXTURE_2D, 0, (int)GLC.RGBA, width, height, 0, GLC.BGRA, GLC.UNSIGNED_BYTE, data);\n\n        if (generateMipmap)\n        {\n            SetMinMagFilter(Filter.LinearMipmapLinear, Filter.Linear);\n            GL.GenerateMipmap(GLC.TEXTURE_2D);\n        }\n        else\n        {\n            SetMinMagFilter(Filter.Linear, Filter.Linear);\n        }\n    }\n\n    public void SetAnisotropicFiltering(Anisotropy anisotropy)\n    {\n        Bind();\n\n        const uint GL_TEXTURE_MAX_ANISOTROPY_EXT = 0x84FE;\n        const uint GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT = 0x84FF;\n\n        unsafe\n        {\n            float largest;\n            GL.GetFloatv(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &largest);\n\n            if ((int)anisotropy < largest) largest = (float)anisotropy;\n            GL.TexParameterfv(GLC.TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, &largest);\n        }\n    }\n\n    public void Specify(Format format, int width, int height, Type type)\n    {\n        Bind();\n        GL.TexImage2D(GLC.TEXTURE_2D, 0, (int)format, width, height, 0, (uint)format, (uint)type, IntPtr.Zero);\n    }\n\n    public void SetBorderColor(Vector4 color)\n    {\n        Bind();\n        unsafe\n        {\n            GL.TexParameterfv(GLC.TEXTURE_2D, GLC.TEXTURE_BORDER_COLOR, &color.X);\n        }\n    }\n\n    public void SetWrap(Wrap wrap)\n    {\n        Bind();\n        GL.TexParameteri(GLC.TEXTURE_2D, GLC.TEXTURE_WRAP_S, (int)wrap);\n        GL.TexParameteri(GLC.TEXTURE_2D, GLC.TEXTURE_WRAP_T, (int)wrap);\n    }\n\n    public void SetMinMagFilter(Filter minFilter, Filter maxFilter)\n    {\n        Bind();\n        GL.TexParameteri(GLC.TEXTURE_2D, GLC.TEXTURE_MIN_FILTER, (int)minFilter);\n        GL.TexParameteri(GLC.TEXTURE_2D, GLC.TEXTURE_MAG_FILTER, (int)maxFilter);\n    }\n}"
  },
  {
    "path": "src/JitterDemo/Renderer/OpenGL/Objects/VertexArrayObject.cs",
    "content": "using JitterDemo.Renderer.OpenGL.Native;\n\nnamespace JitterDemo.Renderer.OpenGL;\n\npublic enum VertexAttributeType : uint\n{\n    Byte = GLC.BYTE,\n    UnsignedByte = GLC.UNSIGNED_BYTE,\n    Short = GLC.SHORT,\n    Int = GLC.INT,\n    UnsignedInt = GLC.UNSIGNED_INT,\n    HalfFloat = GLC.HALF_FLOAT,\n    Float = GLC.FLOAT,\n    Double = GLC.DOUBLE,\n    Fixed = GLC.FIXED\n}\n\npublic class VertexAttribute\n{\n    public VertexArrayObject vao;\n    public uint index;\n\n    public bool Enable\n    {\n        set\n        {\n            vao.Bind();\n            if (value) GL.EnableVertexAttribArray(index);\n            else GL.DisableVertexAttribArray(index);\n        }\n    }\n\n    public uint Divisor\n    {\n        set\n        {\n            vao.Bind();\n            GL.VertexAttribDivisor(index, value);\n        }\n    }\n\n    public VertexAttribute(VertexArrayObject vao, uint index)\n    {\n        this.vao = vao;\n        this.index = index;\n    }\n\n    public void Set(ArrayBuffer arrayBuffer, int size, VertexAttributeType type, bool normalized, int stride,\n        int pointer)\n    {\n        vao.Bind();\n        arrayBuffer.Bind();\n        GL.EnableVertexAttribArray(index);\n        GL.VertexAttribPointer(index, size, (uint)type, normalized, stride, pointer);\n    }\n}\n\npublic class IndexedVertexAttribute\n{\n    private readonly VertexAttribute[] vertexAttributes;\n\n    public IndexedVertexAttribute(VertexArrayObject vao, int count)\n    {\n        vertexAttributes = new VertexAttribute[count];\n        for (int i = 0; i < count; i++) vertexAttributes[i] = new VertexAttribute(vao, (uint)i);\n    }\n\n    public VertexAttribute this[int i] => vertexAttributes[i];\n}\n\n[GLObject(GLObjectType.VertexArrayObject)]\npublic sealed class VertexArrayObject : GLObject\n{\n    public static VertexArrayObject Default = new(0);\n\n    public uint VAO;\n\n    public IndexedVertexAttribute VertexAttributes { get; private set; }\n\n    private ElementArrayBuffer? elementArrayBuffer;\n\n    public ElementArrayBuffer? ElementArrayBuffer\n    {\n        get => elementArrayBuffer;\n        set\n        {\n            elementArrayBuffer = value;\n            Bind();\n            value?.Bind();\n        }\n    }\n\n    public VertexArrayObject(uint vao) : base(vao)\n    {\n        VertexAttributes = new IndexedVertexAttribute(this, 16);\n    }\n\n    public VertexArrayObject() : base(GL.GenVertexArray())\n    {\n        VertexAttributes = new IndexedVertexAttribute(this, 16);\n    }\n\n    public void Bind()\n    {\n        GL.BindVertexArray(Handle);\n    }\n\n    public bool IsActive()\n    {\n        int handle = GL.GetIntegerv(GLC.VERTEX_ARRAY_BINDING);\n        return handle == Handle;\n    }\n}"
  },
  {
    "path": "src/JitterDemo/Renderer/OpenGL/Uniforms.cs",
    "content": "using JitterDemo.Renderer.OpenGL.Native;\n\nnamespace JitterDemo.Renderer.OpenGL;\n\npublic abstract class Uniform\n{\n    protected readonly ShaderProgram Shader;\n    protected readonly int Location;\n\n    protected Uniform(ShaderProgram shader, int location)\n    {\n        Shader = shader;\n        Location = location;\n    }\n}\n\npublic class UniformUint : Uniform\n{\n    public UniformUint(ShaderProgram shader, int location) : base(shader, location)\n    {\n    }\n\n    public void Set(uint value)\n    {\n        GL.Uniform1ui(Location, value);\n    }\n\n    public void Set(uint[] values)\n    {\n        unsafe\n        {\n            fixed (uint* first = values)\n            {\n                GL.Uniform1uiv(Location, values.Length, first);\n            }\n        }\n    }\n}\n\npublic class UniformBool : Uniform\n{\n    public UniformBool(ShaderProgram shader, int location) : base(shader, location)\n    {\n    }\n\n    public void Set(bool value)\n    {\n        GL.Uniform1i(Location, value ? 1 : 0);\n    }\n}\n\npublic class UniformFloat : Uniform\n{\n    public UniformFloat(ShaderProgram shader, int location) : base(shader, location)\n    {\n    }\n\n    public void Set(float value)\n    {\n        GL.Uniform1f(Location, value);\n    }\n\n    public void Set(float[] values)\n    {\n        unsafe\n        {\n            fixed (float* first = values)\n            {\n                GL.Uniform1fv(Location, values.Length, first);\n            }\n        }\n    }\n}\n\npublic class UniformTexture : Uniform\n{\n    public UniformTexture(ShaderProgram shader, int location) : base(shader, location)\n    {\n    }\n\n    public void Set(int value)\n    {\n        GL.Uniform1i(Location, value);\n    }\n}\n\npublic class UniformMatrix4 : Uniform\n{\n    public UniformMatrix4(ShaderProgram shader, int location) : base(shader, location)\n    {\n    }\n\n    public void Set(Matrix4[] value, bool transpose)\n    {\n        unsafe\n        {\n            fixed (float* first = &value[0].M11)\n            {\n                GL.UniformMatrix4fv(Location, value.Length, transpose, first);\n            }\n        }\n    }\n\n    public void Set(in Matrix4 value, bool transpose)\n    {\n        unsafe\n        {\n            fixed (float* first = &value.M11)\n            {\n                GL.UniformMatrix4fv(Location, 1, transpose, first);\n            }\n        }\n    }\n\n    public void Set(in Matrix4 value)\n    {\n        Set(value, false);\n    }\n}\n\npublic class UniformVector2 : Uniform\n{\n    public UniformVector2(ShaderProgram shader, int location) : base(shader, location)\n    {\n    }\n\n    public void Set(in Vector2 value)\n    {\n        unsafe\n        {\n            fixed (float* first = &value.X)\n            {\n                GL.Uniform2fv(Location, 1, first);\n            }\n        }\n    }\n\n    public void Set(Vector2[] value)\n    {\n        unsafe\n        {\n            fixed (float* first = &value[0].X)\n            {\n                GL.Uniform2fv(Location, value.Length, first);\n            }\n        }\n    }\n\n    public void Set(float x, float y)\n    {\n        GL.Uniform2f(Location, x, y);\n    }\n}\n\npublic class UniformVector3 : Uniform\n{\n    public UniformVector3(ShaderProgram shader, int location) : base(shader, location)\n    {\n    }\n\n    public void Set(in Vector3 value)\n    {\n        unsafe\n        {\n            fixed (float* first = &value.X)\n            {\n                GL.Uniform3fv(Location, 1, first);\n            }\n        }\n    }\n\n    public void Set(float x, float y, float z)\n    {\n        GL.Uniform3f(Location, x, y, z);\n    }\n}\n\npublic class UniformVector4 : Uniform\n{\n    public UniformVector4(ShaderProgram shader, int location) : base(shader, location)\n    {\n    }\n\n    public void Set(in Vector4 value)\n    {\n        unsafe\n        {\n            fixed (float* first = &value.X)\n            {\n                GL.Uniform4fv(Location, 1, first);\n            }\n        }\n    }\n\n    public void Set(float x, float y, float z, float w)\n    {\n        GL.Uniform4f(Location, x, y, z, w);\n    }\n}"
  },
  {
    "path": "src/JitterDemo/Renderer/RenderWindow.cs",
    "content": "using JitterDemo.Renderer.OpenGL;\n\nnamespace JitterDemo.Renderer;\n\npublic class RenderWindow : GLFWWindow\n{\n    private TexturedQuad shadowDebug;\n\n    public CSMRenderer CSMRenderer { get; }\n    public Camera Camera { get; set; }\n    public ImGuiRenderer GuiRenderer { get; }\n    public DebugRenderer DebugRenderer { get; }\n\n    private readonly Skybox skybox;\n\n    public bool ShowShadowDebug { set; get; }\n\n    public static RenderWindow Instance { get; private set; } = null!;\n\n    private double lastTime;\n\n    public RenderWindow()\n    {\n        Instance = this;\n\n        Camera = new FreeCamera();\n\n        CSMRenderer = new CSMRenderer();\n        GuiRenderer = new ImGuiRenderer();\n        DebugRenderer = new DebugRenderer();\n\n        skybox = new Skybox();\n\n        shadowDebug = null!;\n\n        lastTime = Time;\n    }\n\n    public override void Draw()\n    {\n        float timeDelta = (float)(Time - lastTime);\n        lastTime = Time;\n\n        GLDevice.Enable(Capability.DepthTest);\n        GLDevice.Enable(Capability.Blend);\n        GLDevice.SetBlendFunction(BlendFunction.SourceAlpha, BlendFunction.OneMinusSourceAlpha);\n\n        GLDevice.SetClearColor(73.0f / 255.0f, 76.0f / 255.0f, 92.0f / 255.0f, 1);\n\n        GLDevice.Clear(ClearFlags.ColorBuffer | ClearFlags.DepthBuffer);\n\n        skybox.Draw();\n\n        CSMRenderer.Draw();\n\n        DebugRenderer.Draw();\n\n        if (ShowShadowDebug)\n        {\n            shadowDebug.Position = new Vector2(10, 10);\n            shadowDebug.Draw();\n        }\n\n        if (Keyboard.IsKeyDown(Keyboard.Key.Escape))\n        {\n            Close();\n        }\n\n        GuiRenderer.Draw(timeDelta);\n\n        Camera.IgnoreKeyboardInput = GuiRenderer.WantsCaptureKeyboard;\n        Camera.IgnoreMouseInput = GuiRenderer.WantsCaptureMouse;\n\n        Camera.Update();\n    }\n\n    public override void Load()\n    {\n        skybox.Load();\n\n        CSMRenderer.Load();\n\n        VerticalSync = true;\n\n        GuiRenderer.Load();\n\n        shadowDebug = new TexturedQuad();\n        shadowDebug.Texture = CSMRenderer.DepthMap[0];\n\n        DebugRenderer.Load();\n\n        Camera.Position = new Vector3(0, 4, 8);\n\n        Camera.Update();\n    }\n}"
  },
  {
    "path": "src/JitterDemo/Renderer/Skybox.cs",
    "content": "using JitterDemo.Renderer.OpenGL;\nusing JitterDemo.Renderer.OpenGL.Native;\n\nnamespace JitterDemo.Renderer;\n\npublic class SkyboxShader : BasicShader\n{\n    public UniformMatrix4 Projection { get; }\n    public UniformMatrix4 View { get; }\n\n    public SkyboxShader() : base(vshader, fshader)\n    {\n        Projection = GetUniform<UniformMatrix4>(\"projection\");\n        View = GetUniform<UniformMatrix4>(\"view\");\n    }\n\n    private static readonly string vshader = @\"\n        #version 330 core\n        layout (location = 0) in vec3 aPos;\n\n        out vec3 TexCoords;\n\n        uniform mat4 projection;\n        uniform mat4 view;\n\n        void main()\n        {\n            TexCoords = aPos;\n            gl_Position = projection * mat4(mat3(view)) * vec4(aPos, 1.0);\n        }  \n        \";\n\n    private static readonly string fshader = @\"\n        #version 330 core\n        out vec4 FragColor;\n\n        in vec3 TexCoords;\n\n        uniform samplerCube skybox;\n\n        void main()\n        {   \n            vec3 blue = vec3(66.0f / 255.0f, 135.0f / 255.0f, 245.0f / 255.0f);\n            float ddot = max(dot(TexCoords/length(TexCoords),vec3(0,1,1))+0.4f,0);\n            FragColor = vec4(blue*0.9+vec3(1,1,1)*ddot*0.1f,1);\n        }\n        \";\n}\n\npublic class Skybox\n{\n    private VertexArrayObject vao = null!;\n    private SkyboxShader shader = null!;\n    private CubemapTexture cmTexture = null!;\n\n    private static float[] VertexBuffer()\n    {\n        return new[]\n        {\n            // positions          \n            -1.0f, 1.0f, -1.0f,\n            -1.0f, -1.0f, -1.0f,\n            1.0f, -1.0f, -1.0f,\n            1.0f, -1.0f, -1.0f,\n            1.0f, 1.0f, -1.0f,\n            -1.0f, 1.0f, -1.0f,\n\n            -1.0f, -1.0f, 1.0f,\n            -1.0f, -1.0f, -1.0f,\n            -1.0f, 1.0f, -1.0f,\n            -1.0f, 1.0f, -1.0f,\n            -1.0f, 1.0f, 1.0f,\n            -1.0f, -1.0f, 1.0f,\n\n            1.0f, -1.0f, -1.0f,\n            1.0f, -1.0f, 1.0f,\n            1.0f, 1.0f, 1.0f,\n            1.0f, 1.0f, 1.0f,\n            1.0f, 1.0f, -1.0f,\n            1.0f, -1.0f, -1.0f,\n\n            -1.0f, -1.0f, 1.0f,\n            -1.0f, 1.0f, 1.0f,\n            1.0f, 1.0f, 1.0f,\n            1.0f, 1.0f, 1.0f,\n            1.0f, -1.0f, 1.0f,\n            -1.0f, -1.0f, 1.0f,\n\n            -1.0f, 1.0f, -1.0f,\n            1.0f, 1.0f, -1.0f,\n            1.0f, 1.0f, 1.0f,\n            1.0f, 1.0f, 1.0f,\n            -1.0f, 1.0f, 1.0f,\n            -1.0f, 1.0f, -1.0f,\n\n            -1.0f, -1.0f, -1.0f,\n            -1.0f, -1.0f, 1.0f,\n            1.0f, -1.0f, -1.0f,\n            1.0f, -1.0f, -1.0f,\n            -1.0f, -1.0f, 1.0f,\n            1.0f, -1.0f, 1.0f\n        };\n    }\n\n    public void Load()\n    {\n        shader = new SkyboxShader();\n\n        vao = new VertexArrayObject();\n\n        ArrayBuffer ab0 = new();\n        ab0.SetData(VertexBuffer());\n\n        int sof = sizeof(float);\n        vao.VertexAttributes[0].Set(ab0, 3, VertexAttributeType.Float, false, 3 * sof, 0);\n\n        cmTexture = new CubemapTexture();\n    }\n\n    public void Draw()\n    {\n        Camera camera = RenderWindow.Instance.Camera;\n\n        GL.DepthMask(false);\n        GLDevice.SetCullFaceMode(CullMode.Back);\n        shader.Use();\n        shader.View.Set(camera.ViewMatrix);\n        shader.Projection.Set(camera.ProjectionMatrix);\n        vao.Bind();\n        cmTexture.Bind();\n        GL.DrawArrays(GLC.TRIANGLES, 0, 36);\n        GL.DepthMask(true);\n    }\n}"
  },
  {
    "path": "src/JitterDemo/Renderer/TextureOverlay.cs",
    "content": "using JitterDemo.Renderer.OpenGL;\n\nnamespace JitterDemo.Renderer;\n\npublic class TexturedQuad\n{\n    private readonly VertexArrayObject vao;\n    private readonly QuadShader shader;\n\n    public Texture2D Texture { get; set; } = null!;\n\n    public TexturedQuad(int width = 200, int height = 200)\n    {\n        vao = new VertexArrayObject();\n\n        ArrayBuffer ab0 = new();\n        vao.ElementArrayBuffer = new ElementArrayBuffer();\n\n        Vector2[] vertices = new Vector2[4];\n        TriangleVertexIndex[] indices = new TriangleVertexIndex[2];\n\n        vertices[0] = new Vector2(0, 0);\n        vertices[1] = new Vector2(1, 0);\n        vertices[2] = new Vector2(1, 1);\n        vertices[3] = new Vector2(0, 1);\n\n        indices[0] = new TriangleVertexIndex(1, 0, 2);\n        indices[1] = new TriangleVertexIndex(2, 0, 3);\n\n        ab0.SetData(vertices);\n\n        vao.ElementArrayBuffer.SetData(indices);\n        vao.VertexAttributes[0].Set(ab0, 2, VertexAttributeType.Float, false, 2 * sizeof(float), 0);\n\n        shader = new QuadShader();\n        shader.Use();\n        shader.Size.Set(width, height);\n    }\n\n    public Vector2 Position { get; set; }\n\n    public void Draw()\n    {\n        Texture.Bind(0);\n\n        vao.Bind();\n        shader.Use();\n\n        (int w, int h) = RenderWindow.Instance.FramebufferSize;\n\n        Matrix4 m = MatrixHelper.CreateOrthographicOffCenter(0.0f, w, h, 0, +1f, -1f);\n\n        shader.Projection.Set(m);\n        shader.Offset.Set(Position);\n\n        GLDevice.Enable(Capability.Blend);\n        GLDevice.Disable(Capability.DepthTest);\n        GLDevice.DrawElements(DrawMode.Triangles, 6, IndexType.UnsignedInt, 0);\n        GLDevice.Disable(Capability.Blend);\n        GLDevice.Enable(Capability.DepthTest);\n    }\n}\n\npublic class QuadShader : BasicShader\n{\n    public UniformVector2 Offset { get; }\n    public UniformMatrix4 Projection { get; }\n    public UniformTexture FontTexture { private set; get; }\n    public UniformVector2 Size { get; }\n\n    public QuadShader() : base(vshader, fshader)\n    {\n        Offset = GetUniform<UniformVector2>(\"offset\");\n        Projection = GetUniform<UniformMatrix4>(\"projection\");\n        Size = GetUniform<UniformVector2>(\"size\");\n        FontTexture = GetUniform<UniformTexture>(\"fontTexture\");\n    }\n\n    private static readonly string vshader = @\"\n        #version 330 core\n        layout (location = 0) in vec2 aPos;\n        uniform vec2 offset;\n        uniform vec2 size;\n        uniform mat4 projection;\n        out vec2 TexCoord;\n        void main()\n        {\n            gl_Position = projection * vec4(vec3(aPos * size + offset, 1 ), 1);\n            TexCoord=vec2(aPos.x , aPos.y) ;\n        }\n        \";\n\n    private static readonly string fshader = @\"\n        #version 330 core\n        uniform sampler2D fontTexture;\n        in vec2 TexCoord;\n        out vec4 FragColor;\n        void main()\n        {\n            vec2 tc = TexCoord;\n            FragColor = texture(fontTexture, tc);\n        }\n        \";\n}"
  },
  {
    "path": "src/JitterDemo/Renderer/VertexDefinitions.cs",
    "content": "using System.Runtime.InteropServices;\nusing JitterDemo.Renderer.OpenGL;\n\nnamespace JitterDemo.Renderer;\n\n[StructLayout(LayoutKind.Sequential)]\npublic struct Vertex\n{\n    public Vector3 Position;\n    public Vector3 Normal;\n    public Vector2 Texture;\n\n    public Vertex(Vector3 position)\n    {\n        Position = position;\n        Normal = Vector3.UnitX;\n        Texture = Vector2.Zero;\n    }\n\n    public Vertex(Vector3 position, Vector3 normal)\n    {\n        Position = position;\n        Normal = normal;\n        Texture = Vector2.Zero;\n    }\n\n    public Vertex(Vector3 position, Vector3 normal, Vector2 texture)\n    {\n        Position = position;\n        Normal = normal;\n        Texture = texture;\n    }\n}\n\n[StructLayout(LayoutKind.Sequential)]\npublic struct TriangleVertexIndex\n{\n    public uint T1;\n    public uint T2;\n    public uint T3;\n\n    public TriangleVertexIndex(uint t1, uint t2, uint t3)\n    {\n        T1 = t1;\n        T2 = t2;\n        T3 = t3;\n    }\n\n    public TriangleVertexIndex(int t1, int t2, int t3)\n    {\n        T1 = (uint)t1;\n        T2 = (uint)t2;\n        T3 = (uint)t3;\n    }\n}\n\n[StructLayout(LayoutKind.Sequential)]\npublic struct LineVertexIndex\n{\n    public uint T1;\n    public uint T2;\n\n    public LineVertexIndex(uint t1, uint t2)\n    {\n        T1 = t1;\n        T2 = t2;\n    }\n\n    public LineVertexIndex(int t1, int t2)\n    {\n        T1 = (uint)t1;\n        T2 = (uint)t2;\n    }\n}"
  },
  {
    "path": "src/JitterDemo/assets/car.LICENSE",
    "content": "The assets for the vehicle (car) are converted from the \nXNA 4.0 Racing Game Starter Kit\nunder the Microsoft Permissive License.\n\n\nMicrosoft Permissive License (Ms-PL)\n\nThis license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software.\n1. Definitions\n\nThe terms “reproduce,” “reproduction,” “derivative works,” and “distribution” have the same meaning here as under U.S. copyright law.\n\nA “contribution” is the original software, or any additions or changes to the software.\n\nA “contributor” is any person that distributes its contribution under this license.\n\n“Licensed patents” are a contributor’s patent claims that read directly on its contribution.\n2. Grant of Rights\n\n(A) Copyright Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create.\n\n(B) Patent Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software.\n3. Conditions and Limitations\n\n(A) No Trademark License- This license does not grant you rights to use any contributors’ name, logo, or trademarks.\n\n(B) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically.\n\n(C) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software.\n\n(D) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license.\n\n(E) The software is licensed “as-is.” You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement.\n"
  },
  {
    "path": "src/JitterDemo/assets/car.obj",
    "content": "# Blender v3.0.1 OBJ File: 'car.blend'\n# www.blender.org\nmtllib car.mtl\no glass_Mesh\nv -0.953061 1.954903 1.632811\nv -0.548240 1.838574 -1.665528\nv -0.554820 1.973133 1.822872\nv -1.154433 1.827031 -0.698049\nv -1.124166 1.878716 1.002782\nv -1.142041 1.876480 0.560061\nv -1.136320 1.804699 -1.118741\nv -1.074734 1.904414 1.475015\nv -0.950875 2.049210 1.431758\nv -0.497479 2.090408 1.543453\nv -0.822508 1.822362 -1.588526\nv -0.778500 1.973397 1.740584\nv -0.738238 2.091710 1.483901\nv -0.280463 1.970592 1.873833\nv -0.272105 1.843454 -1.701050\nv -0.250274 2.086046 1.583057\nv 0.000000 2.083877 1.596976\nv -1.155788 1.846521 -0.276254\nv 0.548240 1.838574 -1.665528\nv 0.822508 1.822363 -1.588526\nv 0.554820 1.973133 1.822872\nv 0.497479 2.090408 1.543453\nv 0.250274 2.086046 1.583057\nv 0.280463 1.970591 1.873833\nv 0.950875 2.049210 1.431758\nv 0.953061 1.954903 1.632811\nv 1.074734 1.904414 1.475015\nv 1.154433 1.827031 -0.698049\nv 1.155788 1.846521 -0.276254\nv 0.000000 1.843990 -1.721336\nv 0.272105 1.843454 -1.701051\nv 0.738238 2.091710 1.483901\nv 0.778500 1.973397 1.740584\nv 1.136320 1.804699 -1.118741\nv 1.142041 1.876480 0.560061\nv 1.124166 1.878716 1.002782\nv 0.000000 1.970744 1.890099\nv -0.720424 2.059641 -1.152186\nv -0.906428 2.042778 -1.110637\nv -1.020408 1.816182 -1.476675\nv -1.133762 1.549377 -1.819397\nv -0.922598 1.570983 -1.985167\nv -0.634889 1.589317 -2.117516\nv -0.317183 1.590616 -2.176089\nv 0.000000 2.083647 -1.230450\nv -0.231705 2.081817 -1.220208\nv -0.468619 2.076309 -1.198172\nv -0.328343 1.753236 2.256424\nv -0.636073 1.754797 2.178433\nv -0.850608 1.762539 2.055459\nv -0.984558 1.774774 1.898539\nv -1.093961 1.763203 1.698092\nv -1.147231 1.742333 1.497960\nv -1.170420 1.725312 1.337411\nv -1.098691 1.892764 1.321973\nv -0.952146 2.077461 1.328439\nv -0.726016 2.124269 1.379344\nv -0.479441 2.119692 1.439146\nv -0.238082 2.115001 1.478549\nv -0.978734 2.121737 -0.195799\nv -0.977960 2.129130 0.142765\nv -1.150744 1.867663 0.086221\nv -1.243168 1.664670 0.065096\nv -1.239812 1.641273 -0.329893\nv -1.234500 1.615820 -0.782818\nv -1.219228 1.597772 -1.271602\nv -1.188907 1.587101 -1.626262\nv -1.111742 1.779325 -1.387942\nv -1.008440 1.997972 -1.005150\nv -0.982130 2.089637 -0.600033\nv -0.977058 2.131871 0.618689\nv -0.977819 2.099117 1.042454\nv -0.984029 2.077827 1.173653\nv -1.103968 1.894987 1.174592\nv -1.180976 1.722747 1.191904\nv -1.202240 1.706771 0.986795\nv -1.226203 1.690763 0.538979\nv -1.237735 1.673522 0.220610\nv -1.158741 1.856804 0.240262\nv -0.976767 2.132907 0.301719\nv 0.468619 2.076309 -1.198172\nv 0.720424 2.059641 -1.152186\nv 0.982130 2.089637 -0.600033\nv 0.978734 2.121737 -0.195799\nv 0.231705 2.081817 -1.220208\nv 1.008440 1.997972 -1.005150\nv 1.158741 1.856804 0.240262\nv 0.976767 2.132907 0.301719\nv 0.977058 2.131871 0.618689\nv 0.977819 2.099117 1.042454\nv 0.634889 1.589317 -2.117516\nv 0.922598 1.570983 -1.985167\nv 0.636073 1.754797 2.178433\nv 0.328343 1.753236 2.256424\nv 1.202240 1.706771 0.986795\nv 1.103968 1.894987 1.174592\nv 1.180976 1.722747 1.191904\nv 1.234500 1.615820 -0.782818\nv 1.239812 1.641273 -0.329893\nv 0.000000 1.590611 -2.205761\nv 0.317183 1.590616 -2.176089\nv 0.984558 1.774774 1.898539\nv 0.850608 1.762539 2.055459\nv 1.188907 1.587101 -1.626262\nv 1.111742 1.779325 -1.387942\nv 1.219228 1.597772 -1.271602\nv 1.226203 1.690763 0.538979\nv 1.237735 1.673522 0.220610\nv 1.093961 1.763203 1.698092\nv 0.479441 2.119692 1.439146\nv 0.238082 2.115001 1.478549\nv 0.952146 2.077461 1.328439\nv 0.726016 2.124269 1.379344\nv 1.098691 1.892764 1.321973\nv 0.906428 2.042778 -1.110637\nv 1.020408 1.816182 -1.476675\nv 1.133762 1.549377 -1.819397\nv 1.147231 1.742333 1.497960\nv 1.170420 1.725312 1.337411\nv 0.984029 2.077827 1.173653\nv 0.000000 1.753285 2.272118\nv 0.000000 2.112630 1.490335\nv 0.977960 2.129130 0.142765\nv 1.150745 1.867663 0.086221\nv 1.243168 1.664670 0.065096\nv -0.644363 1.950544 -1.406940\nv -0.394136 2.043326 1.690282\nv -1.002367 1.985838 1.496957\nv -1.076246 1.967947 -0.439130\nv -0.125630 1.964704 -1.471489\nv -0.859362 2.035408 1.558073\nv -1.073271 1.935253 -0.860678\nv -1.071279 1.995067 0.412930\nv -1.061416 1.992381 0.815347\nv -0.738477 1.706968 -1.848132\nv -0.454026 1.870077 2.033888\nv -1.157460 1.797490 1.111222\nv -1.205374 1.726982 -0.516506\nv -0.146885 1.718411 -1.956002\nv -0.895429 1.875135 1.833763\nv -1.168197 1.690920 -1.367794\nv -1.180367 1.783340 0.778915\nv -1.199340 1.768556 0.372110\nv -1.193748 1.709366 -0.976487\nv -1.085703 1.866447 -1.184689\nv -1.032117 1.857184 1.672945\nv -0.363901 2.108473 1.499803\nv -0.848462 2.102743 1.390414\nv -1.031082 1.993235 1.374797\nv -0.873821 1.936765 -1.335783\nv -0.641568 2.047253 1.633564\nv -0.981335 1.691337 -1.722489\nv -0.712547 1.873162 1.949948\nv -1.128902 1.816805 1.401017\nv -1.052093 1.983636 1.122549\nv -0.608347 2.114908 1.449492\nv -1.112828 1.806707 1.548408\nv -0.131428 2.040991 1.719931\nv -0.377907 1.962288 -1.449757\nv -0.151710 1.869511 2.072915\nv -0.442596 1.717868 -1.920548\nv -0.121531 2.104777 1.525794\nv -1.073182 1.986459 -0.058167\nv -1.204828 1.749574 -0.111863\nv 0.644363 1.950544 -1.406940\nv 0.394136 2.043326 1.690282\nv 1.002367 1.985838 1.496957\nv 1.076246 1.967947 -0.439130\nv 0.125630 1.964704 -1.471489\nv 0.859362 2.035408 1.558073\nv 1.073271 1.935253 -0.860678\nv 1.071279 1.995067 0.412930\nv 1.061416 1.992381 0.815347\nv 0.738477 1.706968 -1.848132\nv 0.454026 1.870077 2.033888\nv 1.157460 1.797490 1.111222\nv 1.205374 1.726982 -0.516506\nv 0.146885 1.718411 -1.956002\nv 0.895429 1.875135 1.833763\nv 1.168197 1.690920 -1.367794\nv 1.180367 1.783340 0.778915\nv 1.199340 1.768556 0.372110\nv 1.193748 1.709366 -0.976487\nv 1.085703 1.866447 -1.184689\nv 1.032117 1.857184 1.672945\nv 0.363901 2.108473 1.499803\nv 0.848462 2.102743 1.390414\nv 1.031082 1.993235 1.374797\nv 0.873821 1.936765 -1.335783\nv 0.641568 2.047253 1.633564\nv 0.981335 1.691337 -1.722489\nv 0.712547 1.873162 1.949948\nv 1.128902 1.816805 1.401017\nv 1.052093 1.983636 1.122549\nv 0.608347 2.114908 1.449492\nv 1.112828 1.806707 1.548408\nv 0.131428 2.040991 1.719931\nv 0.377907 1.962288 -1.449757\nv 0.151710 1.869511 2.072915\nv 0.442596 1.717868 -1.920548\nv 0.121531 2.104776 1.525794\nv 1.073182 1.986459 -0.058167\nv 1.204828 1.749574 -0.111863\nv -0.945934 2.016095 1.522520\nv -0.507844 1.958402 -1.433131\nv -0.521635 2.045274 1.665216\nv -1.075968 1.954051 -0.650145\nv -1.056682 1.984878 1.020645\nv -0.690989 1.830536 -1.632449\nv -0.421292 1.971653 1.852593\nv -1.114249 1.885399 1.113664\nv -1.156857 1.836596 -0.481436\nv -0.135866 1.843929 -1.714717\nv -0.872370 1.967760 1.690645\nv -1.129064 1.784302 -1.275503\nv -1.150459 1.868337 0.385755\nv -1.133354 1.877841 0.791992\nv -1.066285 1.998369 0.586246\nv -0.967085 1.870613 1.761160\nv -0.590979 1.714906 -1.892802\nv -0.593958 1.871371 1.996628\nv -1.202152 1.717142 -0.741537\nv -1.168893 1.788705 0.992815\nv -1.190858 1.777815 0.546391\nv -1.146182 1.817670 -0.918370\nv -1.181862 1.701383 -1.194268\nv -1.074426 1.907427 -1.046828\nv -1.018749 1.932188 1.564615\nv -1.119406 1.819853 1.474155\nv -0.952372 2.067133 1.372278\nv -0.485433 2.111148 1.477377\nv -0.374395 2.087972 1.566253\nv -0.852644 2.079820 1.452509\nv -1.021281 1.991310 1.432472\nv -0.927971 1.818256 -1.535001\nv -0.673271 1.974451 1.785098\nv -0.619304 2.093446 1.515109\nv -0.771632 1.942177 -1.373665\nv -0.754092 2.045289 1.597220\nv -0.872719 1.697848 -1.790155\nv -0.812225 1.874675 1.895207\nv -1.088591 1.902606 1.387775\nv -0.730178 2.114017 1.419415\nv -1.083156 1.835623 1.593801\nv -0.140112 1.970527 1.886162\nv -0.409088 1.842275 -1.686525\nv -0.125340 2.084532 1.593411\nv -0.262819 2.041776 1.708582\nv -0.251515 1.963842 -1.461113\nv -0.303144 1.869412 2.059920\nv -0.294255 1.718242 -1.939053\nv -0.242888 2.106482 1.516149\nv 0.000000 1.964962 -1.476432\nv 0.000000 2.103996 1.528941\nv -1.153556 1.856964 -0.090228\nv -1.075014 1.978299 -0.238262\nv -1.205552 1.738067 -0.305308\nv 0.507844 1.958402 -1.433131\nv 0.771632 1.942177 -1.373665\nv 0.690989 1.830536 -1.632449\nv 0.521635 2.045274 1.665216\nv 0.374395 2.087972 1.566253\nv 0.262819 2.041776 1.708582\nv 0.421292 1.971653 1.852593\nv 0.945934 2.016095 1.522520\nv 1.018749 1.932188 1.564615\nv 1.021281 1.991310 1.432472\nv 1.075968 1.954051 -0.650145\nv 1.075014 1.978299 -0.238262\nv 1.156857 1.836596 -0.481436\nv 0.251515 1.963842 -1.461113\nv 0.135866 1.843929 -1.714717\nv 0.852644 2.079820 1.452509\nv 0.754092 2.045289 1.597220\nv 0.872370 1.967760 1.690645\nv 1.146182 1.817670 -0.918370\nv 1.074426 1.907427 -1.046828\nv 1.066285 1.998369 0.586246\nv 1.150459 1.868337 0.385755\nv 1.056682 1.984878 1.020645\nv 1.133354 1.877841 0.791992\nv 0.590979 1.714906 -1.892802\nv 0.872719 1.697848 -1.790155\nv 0.593958 1.871371 1.996628\nv 0.303144 1.869412 2.059920\nv 1.168893 1.788705 0.992815\nv 1.114249 1.885399 1.113664\nv 1.202152 1.717142 -0.741537\nv 1.205552 1.738067 -0.305308\nv 0.000000 1.718444 -1.964087\nv 0.294255 1.718242 -1.939053\nv 0.967085 1.870613 1.761160\nv 0.812225 1.874675 1.895207\nv 1.129064 1.784302 -1.275503\nv 1.181862 1.701383 -1.194268\nv 1.190858 1.777815 0.546391\nv 1.083156 1.835623 1.593801\nv 0.485433 2.111148 1.477377\nv 0.242888 2.106482 1.516149\nv 0.952372 2.067133 1.372278\nv 0.730178 2.114017 1.419414\nv 1.088591 1.902606 1.387775\nv 0.927971 1.818256 -1.535001\nv 0.619304 2.093446 1.515109\nv 0.673271 1.974451 1.785098\nv 1.119406 1.819853 1.474155\nv 0.125340 2.084532 1.593411\nv 0.000000 2.040790 1.723867\nv 0.140112 1.970527 1.886162\nv 0.409088 1.842275 -1.686525\nv 0.000000 1.869751 2.076153\nv 1.153556 1.856964 -0.090228\nv -0.819277 2.051069 -1.130700\nv -0.963470 1.932830 -1.295599\nv -1.077137 1.686130 -1.649979\nv -1.034304 1.560213 -1.904112\nv -0.786396 1.581620 -2.058903\nv -0.477266 1.591265 -2.153200\nv -0.158294 1.590520 -2.196315\nv -0.115786 2.083107 -1.227288\nv -0.347890 2.080105 -1.211618\nv -0.598167 2.068771 -1.176519\nv -0.164765 1.753219 2.269928\nv -0.489548 1.753547 2.224674\nv -0.755610 1.757630 2.121457\nv -0.923512 1.770020 1.982154\nv -1.043978 1.771503 1.801611\nv -1.126696 1.752871 1.594701\nv -1.160614 1.733416 1.414392\nv -1.139856 1.805658 1.328437\nv -1.036325 1.993387 1.320526\nv -0.845547 2.114922 1.350052\nv -0.603041 2.124004 1.410294\nv -0.358032 2.116899 1.462143\nv -0.118859 2.113375 1.487628\nv -0.978254 2.127007 -0.020892\nv -1.071049 1.993523 0.111542\nv -1.203653 1.761294 0.072707\nv -1.241548 1.653238 -0.128285\nv -1.237842 1.628239 -0.547957\nv -1.228642 1.605702 -1.034817\nv -1.205217 1.591917 -1.460823\nv -1.153643 1.679217 -1.519192\nv -1.056566 1.895416 -1.208329\nv -0.987688 2.057475 -0.803199\nv -0.979586 2.110168 -0.393206\nv -0.977015 2.116940 0.843841\nv -0.980464 2.087036 1.134656\nv -1.047575 1.985523 1.172758\nv -1.146049 1.807984 1.181883\nv -1.191199 1.714744 1.112002\nv -1.214916 1.698858 0.770977\nv -1.233073 1.682248 0.365232\nv -1.206820 1.757427 0.226952\nv -1.076336 1.987120 0.267507\nv -0.976950 2.135271 0.446871\nv 0.598167 2.068771 -1.176519\nv 0.979586 2.110168 -0.393206\nv 0.115786 2.083107 -1.227288\nv 0.987688 2.057475 -0.803199\nv 1.076336 1.987120 0.267507\nv 0.976950 2.135271 0.446871\nv 0.977015 2.116940 0.843841\nv 0.786396 1.581620 -2.058903\nv 0.489548 1.753547 2.224674\nv 1.146049 1.807984 1.181883\nv 1.191199 1.714744 1.112002\nv 1.237842 1.628239 -0.547957\nv 0.158294 1.590520 -2.196315\nv 0.923512 1.770020 1.982154\nv 1.153643 1.679217 -1.519192\nv 1.205217 1.591917 -1.460823\nv 1.214916 1.698858 0.770977\nv 1.206820 1.757427 0.226952\nv 1.233073 1.682248 0.365232\nv 1.228642 1.605702 -1.034817\nv 1.056566 1.895416 -1.208329\nv 1.043978 1.771503 1.801611\nv 0.358032 2.116899 1.462143\nv 0.845547 2.114922 1.350052\nv 1.036325 1.993387 1.320526\nv 0.819277 2.051069 -1.130700\nv 0.963470 1.932830 -1.295599\nv 1.077137 1.686130 -1.649979\nv 1.034304 1.560213 -1.904112\nv 0.755610 1.757630 2.121457\nv 1.160614 1.733416 1.414392\nv 1.139856 1.805658 1.328437\nv 0.980464 2.087036 1.134656\nv 1.047575 1.985523 1.172758\nv 0.603041 2.124004 1.410294\nv 1.126696 1.752871 1.594701\nv 0.347890 2.080105 -1.211618\nv 0.164765 1.753219 2.269928\nv 0.477266 1.591265 -2.153200\nv 0.118859 2.113375 1.487628\nv 0.978254 2.127007 -0.020892\nv 1.071049 1.993523 0.111542\nv 1.203653 1.761294 0.072707\nv 1.241548 1.653238 -0.128285\nv -1.233449 1.004892 -4.361920\nv -1.019258 0.993389 -4.513678\nv -0.873719 1.439584 2.915695\nv -1.068067 1.439166 2.829499\nv 1.233449 1.004892 -4.361920\nv 1.019257 0.993389 -4.513678\nv 1.068067 1.439166 2.829499\nv 0.873719 1.439584 2.915695\nv -1.166623 1.048714 -4.366489\nv -0.981790 1.372095 2.881952\nv -0.898484 1.043249 -4.517933\nv -1.149091 1.372282 2.786212\nv -1.153633 0.948415 -4.459270\nv -0.756833 1.507215 2.925464\nv -0.974229 1.507054 2.859265\nv -1.331337 0.984078 -4.287880\nv -0.894982 0.932628 -4.626105\nv -1.126889 1.505936 2.765738\nv -0.755307 1.372214 2.948658\nv 1.166623 1.048714 -4.366489\nv 0.981790 1.372095 2.881952\nv 0.898484 1.043249 -4.517933\nv 1.149091 1.372282 2.786212\nv 1.153633 0.948415 -4.459270\nv 0.756833 1.507215 2.925464\nv 0.974229 1.507054 2.859265\nv 1.331337 0.984078 -4.287880\nv 0.894982 0.932628 -4.626105\nv 1.126889 1.505936 2.765738\nv 0.755307 1.372214 2.948658\nv -1.147823 1.006389 -4.424119\nv -1.263778 0.964475 -4.365636\nv -0.874040 1.372351 2.921649\nv -0.893041 0.987565 -4.587674\nv -1.030833 1.044458 -4.448213\nv -1.074743 1.371916 2.834997\nv -0.755726 1.439330 2.942636\nv -0.978499 1.439328 2.876304\nv -1.140422 1.439701 2.780318\nv -1.276558 1.035445 -4.302974\nv -0.874017 1.507362 2.898489\nv -1.023250 0.937324 -4.551765\nv -1.058257 1.506507 2.813209\nv 1.147823 1.006389 -4.424119\nv 1.030833 1.044458 -4.448213\nv 1.276558 1.035445 -4.302974\nv 1.074743 1.371916 2.834997\nv 0.978499 1.439328 2.876304\nv 0.874040 1.372351 2.921649\nv 0.893041 0.987565 -4.587674\nv 1.140422 1.439701 2.780318\nv 1.023250 0.937324 -4.551765\nv 1.263778 0.964475 -4.365636\nv 0.874017 1.507362 2.898489\nv 0.755726 1.439330 2.942636\nv 1.058257 1.506507 2.813209\nv -0.768000 0.985329 -4.653887\nv -0.802631 1.087625 -4.499567\nv -1.050192 1.093030 -4.369059\nv -1.317705 1.057984 -4.240022\nv -1.387768 0.949416 -4.235727\nv -1.287380 0.893095 -4.385079\nv -1.035027 0.878761 -4.576162\nv -0.800774 0.891772 -4.690798\nv -1.079852 1.304713 2.835098\nv -1.202819 1.321201 2.751151\nv -1.204172 1.440585 2.729949\nv -1.158827 1.553570 2.717224\nv -1.046882 1.573894 2.791521\nv -0.874624 1.575412 2.875657\nv -0.662961 1.558282 2.924129\nv -0.631127 1.438822 2.963352\nv -0.662094 1.322081 2.964489\nv -0.874672 1.305390 2.921976\nv 1.050192 1.093030 -4.369059\nv 1.317705 1.057984 -4.240022\nv 0.874672 1.305390 2.921976\nv 1.079852 1.304713 2.835098\nv 0.768000 0.985330 -4.653887\nv 0.802631 1.087625 -4.499567\nv 1.202819 1.321201 2.751151\nv 1.204172 1.440585 2.729949\nv 1.035027 0.878761 -4.576162\nv 1.287380 0.893095 -4.385079\nv 0.874624 1.575412 2.875657\nv 0.662961 1.558282 2.924129\nv 0.631127 1.438822 2.963352\nv 1.046882 1.573894 2.791521\nv 1.387768 0.949416 -4.235727\nv 0.800774 0.891772 -4.690798\nv 1.158827 1.553570 2.717224\nv 0.662094 1.322081 2.964489\nv -0.767856 1.043563 -4.581652\nv -0.907619 1.099306 -4.432539\nv -1.197728 1.083216 -4.297620\nv -1.377604 1.005453 -4.218063\nv -1.358540 0.913662 -4.296998\nv -1.171746 0.882616 -4.483181\nv -0.900615 0.878064 -4.648882\nv -0.767771 0.931130 -4.691368\nv -1.155326 1.304271 2.787763\nv -1.214136 1.372920 2.736512\nv -1.187823 1.505354 2.717561\nv -1.110924 1.571579 2.746814\nv -0.969469 1.575027 2.836529\nv -0.758285 1.575485 2.902716\nv -0.631164 1.506841 2.946315\nv -0.631081 1.371881 2.969324\nv -0.755233 1.305482 2.949105\nv -0.984590 1.305110 2.881905\nv 1.197728 1.083216 -4.297620\nv 0.984590 1.305110 2.881905\nv 0.767856 1.043563 -4.581652\nv 0.907619 1.099306 -4.432539\nv 1.155326 1.304271 2.787763\nv 1.214136 1.372920 2.736512\nv 1.171746 0.882616 -4.483181\nv 0.758285 1.575485 2.902716\nv 0.631164 1.506841 2.946315\nv 0.969469 1.575027 2.836529\nv 1.377604 1.005453 -4.218063\nv 1.358540 0.913662 -4.296998\nv 0.767771 0.931130 -4.691368\nv 0.900615 0.878064 -4.648882\nv 1.187823 1.505354 2.717561\nv 1.110924 1.571579 2.746814\nv 0.755233 1.305482 2.949105\nv 0.631081 1.371881 2.969324\nv -1.098691 1.892764 1.321973\nv -1.088591 1.902606 1.387775\nv -1.074734 1.904414 1.475015\nv -1.093961 1.763203 1.698092\nv -1.083156 1.835623 1.593801\nv 1.098691 1.892764 1.321973\nv 1.088591 1.902606 1.387775\nv 1.074734 1.904414 1.475015\nv 1.093961 1.763203 1.698092\nv 1.083156 1.835623 1.593801\nvt 0.479179 -0.818423\nvt 0.505235 -0.900035\nvt 0.465734 -0.893355\nvt 0.520544 -0.826902\nvt 0.452731 -0.968714\nvt 0.490179 -0.974216\nvt 0.525647 -0.980161\nvt 0.542209 -0.908421\nvt 0.558851 -0.838092\nvt 0.485787 -0.489612\nvt 0.439551 -0.451460\nvt 0.476238 -0.444247\nvt 0.447365 -0.498164\nvt 0.469287 -0.409211\nvt 0.433870 -0.415772\nvt 0.398155 -0.420607\nvt 0.401765 -0.456726\nvt 0.406842 -0.504276\nvt 0.599749 -0.377072\nvt 0.614565 -0.395832\nvt 0.598327 -0.403188\nvt 0.620008 -0.377277\nvt 0.600378 -0.434923\nvt 0.619279 -0.415300\nvt 0.635388 -0.389518\nvt 0.279588 -0.069838\nvt 0.355623 -0.107434\nvt 0.294795 -0.105819\nvt 0.341977 -0.070145\nvt 0.310733 -0.144237\nvt 0.370431 -0.147808\nvt 0.427321 -0.148907\nvt 0.413494 -0.108144\nvt 0.401083 -0.070684\nvt 0.322200 -0.801053\nvt 0.356200 -0.881706\nvt 0.320363 -0.879629\nvt 0.360963 -0.803656\nvt 0.318631 -0.958195\nvt 0.351654 -0.959711\nvt 0.384794 -0.962146\nvt 0.392200 -0.885113\nvt 0.399936 -0.808030\nvt 0.573416 -0.413418\nvt 0.577160 -0.451564\nvt 0.571483 -0.383043\nvt 0.538564 -0.392075\nvt 0.543126 -0.424682\nvt 0.550149 -0.465934\nvt 0.193218 -0.122451\nvt 0.234050 -0.102789\nvt 0.251955 -0.137282\nvt 0.180214 -0.096888\nvt 0.216136 -0.069632\nvt 0.158378 -0.068163\nvt 0.675210 -0.524563\nvt 0.726793 -0.569550\nvt 0.684872 -0.568567\nvt 0.717207 -0.526911\nvt 0.696807 -0.618880\nvt 0.738559 -0.617705\nvt 0.787923 -0.614822\nvt 0.776688 -0.569061\nvt 0.767457 -0.528113\nvt 0.842531 -0.565629\nvt 0.852511 -0.608522\nvt 0.909436 -0.601703\nvt 0.901515 -0.562090\nvt 0.894887 -0.526137\nvt 0.834212 -0.527020\nvt 0.508276 -0.670695\nvt 0.536362 -0.755864\nvt 0.493506 -0.744346\nvt 0.552433 -0.685874\nvt 0.575653 -0.770584\nvt 0.592536 -0.704488\nvt 0.509166 -0.591923\nvt 0.456784 -0.550331\nvt 0.497048 -0.539609\nvt 0.467005 -0.605228\nvt 0.413368 -0.557821\nvt 0.420619 -0.614364\nvt 0.888094 -0.472524\nvt 0.925051 -0.499983\nvt 0.890844 -0.497501\nvt 0.924245 -0.474668\nvt 0.926899 -0.527965\nvt 0.944580 -0.531148\nvt 0.945547 -0.503444\nvt 0.947366 -0.477231\nvt 0.252833 -0.010066\nvt 0.330657 -0.039024\nvt 0.265845 -0.038733\nvt 0.320500 -0.010988\nvt 0.391506 -0.039828\nvt 0.383346 -0.012275\nvt 0.326396 -0.643846\nvt 0.366163 -0.725513\nvt 0.324246 -0.722455\nvt 0.371580 -0.647325\nvt 0.408332 -0.730849\nvt 0.417058 -0.653617\nvt 0.609441 -0.511385\nvt 0.583794 -0.492746\nvt 0.604413 -0.471855\nvt 0.591875 -0.535444\nvt 0.559853 -0.510426\nvt 0.570897 -0.556538\nvt 0.010000 -0.011324\nvt 0.085486 -0.038258\nvt 0.041824 -0.036601\nvt 0.057622 -0.010842\nvt 0.080691 -0.063904\nvt 0.113075 -0.064067\nvt 0.135497 -0.039309\nvt 0.112093 -0.010391\nvt 0.759025 -0.470276\nvt 0.829216 -0.496978\nvt 0.762238 -0.496788\nvt 0.825881 -0.471220\nvt 0.667248 -0.468092\nvt 0.711985 -0.495304\nvt 0.670093 -0.493174\nvt 0.708943 -0.469214\nvt 0.198204 -0.039148\nvt 0.180263 -0.010000\nvt 0.140113 -0.086661\nvt 0.133643 -0.095256\nvt 0.623125 -0.446472\nvt 0.637811 -0.423698\nvt 0.626538 -0.483494\nvt 0.640921 -0.453707\nvt 0.430851 -0.396651\nvt 0.465821 -0.390198\nvt 0.464097 -0.379197\nvt 0.429162 -0.385815\nvt 0.394647 -0.390535\nvt 0.396030 -0.401354\nvt 0.570280 -0.365175\nvt 0.600179 -0.359957\nvt 0.600115 -0.347342\nvt 0.569441 -0.353561\nvt 0.535047 -0.361990\nvt 0.536245 -0.373520\nvt 0.622828 -0.360681\nvt 0.639376 -0.364416\nvt 0.642282 -0.345482\nvt 0.624336 -0.345065\nvt 0.571981 -0.918204\nvt 0.554395 -0.985285\nvt 0.579783 -0.990000\nvt 0.598152 -0.928686\nvt 0.616807 -0.867528\nvt 0.589695 -0.852104\nvt 0.510748 -0.435140\nvt 0.504341 -0.401055\nvt 0.519870 -0.478743\nvt 0.607664 -0.787968\nvt 0.636033 -0.806684\nvt 0.655545 -0.745997\nvt 0.625761 -0.724814\nvt 0.531171 -0.526177\nvt 0.543562 -0.575528\nvt 0.866608 -0.096407\nvt 0.847569 -0.123018\nvt 0.847267 -0.095477\nvt 0.868905 -0.124097\nvt 0.821944 -0.097084\nvt 0.826372 -0.124226\nvt 0.822967 -0.148582\nvt 0.847444 -0.148907\nvt 0.869895 -0.148875\nvt 0.930833 -0.561280\nvt 0.945318 -0.561835\nvt 0.935810 -0.597263\nvt 0.946908 -0.594013\nvt 0.501188 -0.382174\nvt 0.499662 -0.370896\nvt 0.763581 -0.145372\nvt 0.805451 -0.130008\nvt 0.794440 -0.147542\nvt 0.790607 -0.120928\nvt 0.363958 -0.459991\nvt 0.362207 -0.423586\nvt 0.326141 -0.424612\nvt 0.326141 -0.461124\nvt 0.326141 -0.508956\nvt 0.366457 -0.507823\nvt 0.428383 -0.888689\nvt 0.418044 -0.964919\nvt 0.439158 -0.812543\nvt 0.369794 -0.561560\nvt 0.326141 -0.562492\nvt 0.326141 -0.618880\nvt 0.373551 -0.618249\nvt 0.450805 -0.736567\nvt 0.462887 -0.660675\nvt 0.361110 -0.404130\nvt 0.360342 -0.393148\nvt 0.326141 -0.393927\nvt 0.326141 -0.405035\nvt 0.465367 -0.108459\nvt 0.477670 -0.148449\nvt 0.524749 -0.147213\nvt 0.514242 -0.108576\nvt 0.505542 -0.072673\nvt 0.454688 -0.071588\nvt 0.447256 -0.040955\nvt 0.500456 -0.042242\nvt 0.497178 -0.014547\nvt 0.441448 -0.013441\nvt 0.167020 -0.811159\nvt 0.138345 -0.891497\nvt 0.127106 -0.817746\nvt 0.176576 -0.886626\nvt 0.090528 -0.827193\nvt 0.102854 -0.898196\nvt 0.115449 -0.970615\nvt 0.149592 -0.966290\nvt 0.185907 -0.962505\nvt 0.166495 -0.489612\nvt 0.212731 -0.451460\nvt 0.204917 -0.498164\nvt 0.176044 -0.444247\nvt 0.245440 -0.504276\nvt 0.250516 -0.456726\nvt 0.254126 -0.420607\nvt 0.218411 -0.415772\nvt 0.182995 -0.409211\nvt 0.052533 -0.377072\nvt 0.037717 -0.395832\nvt 0.032274 -0.377277\nvt 0.053955 -0.403188\nvt 0.016893 -0.389518\nvt 0.033003 -0.415300\nvt 0.051904 -0.434923\nvt 0.281586 -0.256718\nvt 0.358972 -0.221988\nvt 0.343943 -0.258742\nvt 0.298126 -0.221330\nvt 0.403028 -0.260411\nvt 0.416829 -0.223440\nvt 0.432169 -0.183223\nvt 0.375278 -0.182196\nvt 0.315488 -0.183533\nvt 0.284668 -0.880042\nvt 0.283603 -0.801855\nvt 0.245003 -0.804425\nvt 0.248991 -0.881780\nvt 0.252865 -0.959076\nvt 0.285728 -0.958177\nvt 0.078865 -0.413418\nvt 0.075122 -0.451564\nvt 0.102133 -0.465934\nvt 0.109156 -0.424682\nvt 0.113718 -0.392075\nvt 0.080798 -0.383043\nvt 0.197242 -0.200914\nvt 0.237310 -0.222089\nvt 0.183291 -0.225974\nvt 0.256491 -0.188288\nvt 0.160398 -0.253863\nvt 0.218170 -0.254553\nvt 0.952755 -0.895643\nvt 0.901255 -0.940726\nvt 0.910762 -0.898069\nvt 0.943174 -0.939666\nvt 0.860514 -0.899364\nvt 0.851360 -0.940330\nvt 0.840209 -0.986111\nvt 0.889578 -0.988903\nvt 0.931332 -0.990000\nvt 0.785510 -0.937019\nvt 0.775609 -0.979930\nvt 0.793758 -0.898395\nvt 0.733082 -0.897624\nvt 0.726520 -0.933589\nvt 0.718672 -0.973216\nvt 0.146780 -0.662282\nvt 0.115885 -0.746079\nvt 0.104672 -0.675453\nvt 0.157013 -0.736515\nvt 0.067224 -0.692263\nvt 0.078742 -0.759020\nvt 0.143115 -0.591923\nvt 0.195498 -0.550331\nvt 0.185277 -0.605228\nvt 0.155233 -0.539609\nvt 0.231662 -0.614364\nvt 0.238913 -0.557821\nvt 0.739775 -0.843998\nvt 0.702869 -0.871525\nvt 0.703628 -0.846209\nvt 0.737071 -0.868980\nvt 0.680512 -0.848815\nvt 0.682380 -0.875024\nvt 0.683398 -0.902726\nvt 0.701073 -0.899511\nvt 0.252616 -0.315448\nvt 0.331468 -0.289418\nvt 0.320271 -0.317055\nvt 0.266690 -0.287287\nvt 0.383121 -0.318116\nvt 0.392305 -0.290887\nvt 0.282529 -0.723567\nvt 0.281450 -0.645228\nvt 0.236460 -0.649414\nvt 0.240788 -0.726949\nvt 0.042841 -0.511385\nvt 0.068487 -0.492746\nvt 0.060407 -0.535444\nvt 0.047869 -0.471855\nvt 0.081384 -0.556538\nvt 0.092429 -0.510426\nvt 0.010000 -0.305120\nvt 0.086440 -0.281024\nvt 0.057571 -0.307380\nvt 0.042746 -0.281049\nvt 0.111987 -0.309866\nvt 0.136455 -0.281842\nvt 0.114974 -0.256264\nvt 0.082606 -0.255217\nvt 0.868840 -0.841512\nvt 0.798699 -0.868344\nvt 0.801986 -0.842579\nvt 0.865675 -0.868030\nvt 0.960612 -0.839158\nvt 0.915926 -0.866453\nvt 0.918920 -0.840357\nvt 0.957814 -0.864245\nvt 0.199112 -0.284346\nvt 0.180095 -0.312803\nvt 0.142837 -0.234696\nvt 0.136692 -0.225865\nvt 0.029156 -0.446472\nvt 0.014470 -0.423698\nvt 0.011361 -0.453707\nvt 0.025743 -0.483494\nvt 0.221431 -0.396651\nvt 0.186461 -0.390198\nvt 0.256251 -0.401354\nvt 0.257634 -0.390535\nvt 0.223120 -0.385815\nvt 0.188185 -0.379197\nvt 0.082002 -0.365175\nvt 0.052102 -0.359957\nvt 0.116037 -0.373520\nvt 0.117235 -0.361990\nvt 0.082840 -0.353561\nvt 0.052167 -0.347342\nvt 0.029454 -0.360681\nvt 0.012906 -0.364416\nvt 0.027946 -0.345065\nvt 0.010000 -0.345482\nvt 0.074442 -0.906625\nvt 0.087912 -0.974429\nvt 0.061323 -0.839808\nvt 0.035804 -0.854007\nvt 0.049568 -0.915919\nvt 0.063678 -0.977989\nvt 0.141534 -0.435140\nvt 0.147940 -0.401055\nvt 0.132412 -0.478743\nvt 0.048908 -0.774965\nvt 0.036845 -0.711109\nvt 0.010000 -0.730974\nvt 0.022729 -0.792412\nvt 0.121110 -0.526177\nvt 0.108719 -0.575528\nvt 0.820222 -0.267625\nvt 0.839311 -0.294200\nvt 0.817977 -0.295318\nvt 0.839562 -0.266659\nvt 0.817032 -0.320098\nvt 0.839484 -0.320089\nvt 0.863960 -0.319718\nvt 0.860510 -0.295369\nvt 0.864888 -0.268219\nvt 0.697200 -0.932834\nvt 0.682716 -0.933415\nvt 0.681186 -0.965596\nvt 0.692290 -0.968825\nvt 0.151093 -0.382174\nvt 0.152620 -0.370896\nvt 0.923340 -0.316399\nvt 0.881442 -0.301112\nvt 0.896269 -0.292005\nvt 0.892485 -0.318626\nvt 0.288323 -0.459991\nvt 0.290075 -0.423586\nvt 0.285825 -0.507823\nvt 0.213209 -0.883681\nvt 0.219961 -0.960309\nvt 0.206230 -0.807122\nvt 0.282487 -0.561560\nvt 0.278731 -0.618249\nvt 0.198798 -0.730702\nvt 0.191139 -0.654351\nvt 0.291171 -0.404130\nvt 0.291940 -0.393148\nvt 0.468678 -0.225064\nvt 0.482466 -0.185561\nvt 0.456629 -0.261510\nvt 0.507488 -0.262325\nvt 0.517523 -0.226773\nvt 0.529466 -0.188554\nvt 0.448058 -0.291844\nvt 0.441226 -0.319121\nvt 0.496958 -0.320098\nvt 0.501269 -0.292545\nvt 0.801244 -0.407636\nvt 0.782016 -0.420245\nvt 0.776606 -0.408067\nvt 0.813649 -0.416427\nvt 0.739612 -0.404326\nvt 0.742943 -0.419021\nvt 0.748513 -0.432997\nvt 0.790966 -0.430173\nvt 0.825488 -0.422913\nvt 0.778191 -0.736473\nvt 0.747368 -0.755667\nvt 0.746562 -0.736393\nvt 0.778372 -0.755741\nvt 0.719151 -0.736279\nvt 0.720622 -0.755616\nvt 0.722543 -0.774966\nvt 0.748315 -0.775013\nvt 0.778465 -0.775087\nvt 0.704860 -0.418673\nvt 0.703294 -0.402650\nvt 0.667315 -0.402007\nvt 0.667273 -0.418763\nvt 0.677279 -0.431442\nvt 0.707489 -0.434803\nvt 0.699229 -0.755721\nvt 0.697434 -0.736151\nvt 0.683769 -0.741023\nvt 0.680512 -0.755905\nvt 0.683379 -0.775375\nvt 0.701723 -0.775120\nvt 0.744150 -0.371342\nvt 0.778278 -0.391385\nvt 0.740761 -0.388194\nvt 0.783490 -0.372452\nvt 0.809971 -0.396006\nvt 0.816763 -0.375467\nvt 0.812098 -0.794547\nvt 0.778379 -0.794589\nvt 0.812417 -0.775014\nvt 0.778204 -0.814170\nvt 0.811680 -0.814191\nvt 0.839109 -0.809241\nvt 0.848258 -0.794440\nvt 0.848269 -0.774867\nvt 0.749544 -0.794501\nvt 0.725365 -0.794343\nvt 0.728639 -0.813734\nvt 0.750913 -0.814059\nvt 0.829411 -0.401647\nvt 0.837238 -0.381385\nvt 0.842724 -0.407797\nvt 0.845648 -0.391673\nvt 0.676745 -0.375086\nvt 0.703853 -0.386842\nvt 0.667248 -0.386411\nvt 0.705473 -0.371142\nvt 0.705617 -0.794179\nvt 0.688084 -0.794012\nvt 0.696427 -0.807886\nvt 0.710211 -0.813068\nvt 0.839358 -0.741276\nvt 0.812537 -0.755701\nvt 0.812558 -0.736500\nvt 0.848282 -0.755606\nvt 0.620356 -0.278503\nvt 0.637367 -0.294030\nvt 0.600835 -0.290232\nvt 0.650794 -0.277534\nvt 0.581060 -0.300967\nvt 0.619128 -0.309313\nvt 0.665851 -0.314731\nvt 0.682840 -0.293596\nvt 0.695741 -0.273249\nvt 0.628537 -0.071013\nvt 0.661440 -0.090208\nvt 0.628399 -0.090281\nvt 0.662202 -0.070932\nvt 0.628902 -0.109643\nvt 0.661110 -0.109573\nvt 0.689943 -0.109567\nvt 0.691203 -0.090194\nvt 0.692573 -0.070852\nvt 0.725579 -0.295351\nvt 0.737673 -0.272728\nvt 0.710076 -0.320098\nvt 0.745782 -0.317295\nvt 0.766950 -0.298200\nvt 0.778098 -0.274089\nvt 0.716120 -0.090362\nvt 0.717651 -0.070782\nvt 0.714361 -0.109787\nvt 0.736572 -0.110120\nvt 0.738614 -0.090621\nvt 0.734107 -0.075709\nvt 0.701100 -0.236496\nvt 0.654594 -0.258611\nvt 0.653581 -0.238474\nvt 0.700465 -0.254479\nvt 0.610302 -0.244741\nvt 0.613393 -0.265971\nvt 0.596355 -0.129199\nvt 0.594356 -0.109618\nvt 0.630686 -0.129195\nvt 0.558641 -0.109544\nvt 0.560339 -0.129165\nvt 0.571126 -0.143996\nvt 0.599000 -0.148907\nvt 0.633111 -0.148840\nvt 0.661644 -0.129113\nvt 0.688906 -0.129000\nvt 0.662609 -0.148742\nvt 0.687980 -0.148465\nvt 0.584917 -0.275780\nvt 0.579308 -0.256000\nvt 0.562755 -0.270581\nvt 0.562804 -0.286813\nvt 0.775460 -0.244338\nvt 0.742950 -0.254354\nvt 0.744819 -0.238105\nvt 0.783743 -0.256233\nvt 0.712149 -0.128901\nvt 0.733382 -0.128809\nvt 0.709709 -0.147861\nvt 0.725581 -0.142714\nvt 0.566896 -0.075919\nvt 0.593646 -0.090290\nvt 0.558038 -0.090266\nvt 0.593582 -0.071088\nvn -0.1241 0.8846 -0.4494\nvn -0.1547 0.8874 -0.4343\nvn -0.1086 0.8933 -0.4360\nvn -0.1779 0.8768 -0.4467\nvn -0.1021 0.8955 -0.4331\nvn -0.1376 0.8922 -0.4302\nvn -0.1687 0.8855 -0.4329\nvn -0.1894 0.8803 -0.4348\nvn -0.2383 0.8601 -0.4509\nvn -0.1111 0.8900 0.4422\nvn -0.0497 0.9294 0.3655\nvn -0.0703 0.9266 0.3695\nvn -0.0730 0.8968 0.4363\nvn -0.0469 0.9471 0.3174\nvn -0.0333 0.9494 0.3122\nvn -0.0216 0.9504 0.3101\nvn -0.0325 0.9317 0.3617\nvn -0.0482 0.8994 0.4344\nvn -0.4910 0.8257 0.2777\nvn -0.6556 0.6894 0.3080\nvn -0.4513 0.8137 0.3662\nvn -0.7112 0.6754 0.1948\nvn -0.5221 0.7525 0.4013\nvn -0.7010 0.6269 0.3399\nvn -0.7795 0.5803 0.2358\nvn -0.8781 0.4765 -0.0428\nvn -0.8343 0.5504 -0.0317\nvn -0.8272 0.5597 -0.0492\nvn -0.8820 0.4706 -0.0243\nvn -0.8129 0.5802 -0.0512\nvn -0.8210 0.5698 -0.0364\nvn -0.8262 0.5629 -0.0203\nvn -0.8388 0.5440 -0.0195\nvn -0.8794 0.4756 -0.0196\nvn 0.0000 0.8919 -0.4522\nvn -0.0308 0.8976 -0.4397\nvn 0.0000 0.8986 -0.4388\nvn -0.0354 0.8914 -0.4517\nvn 0.0000 0.9002 -0.4354\nvn -0.0263 0.8999 -0.4353\nvn -0.0425 0.8987 -0.4364\nvn -0.0465 0.8965 -0.4405\nvn -0.0521 0.8902 -0.4525\nvn -0.2932 0.8763 0.3822\nvn -0.3560 0.8288 0.4317\nvn -0.2677 0.9024 0.3376\nvn -0.1450 0.9317 0.3331\nvn -0.1827 0.9054 0.3833\nvn -0.2407 0.8634 0.4433\nvn -0.7841 0.6126 -0.0992\nvn -0.8156 0.5738 -0.0737\nvn -0.7986 0.5965 -0.0793\nvn -0.8021 0.5892 -0.0973\nvn -0.8692 0.4902 -0.0638\nvn -0.8590 0.5045 -0.0867\nvn -0.8790 0.4768 0.0098\nvn -0.8389 0.5443 0.0060\nvn -0.8371 0.5471 -0.0008\nvn -0.8749 0.4840 0.0153\nvn -0.8272 0.5618 -0.0066\nvn -0.8298 0.5580 0.0015\nvn -0.8327 0.5532 0.0241\nvn -0.8425 0.5382 0.0229\nvn -0.8748 0.4839 0.0241\nvn -0.8403 0.5409 0.0361\nvn -0.8315 0.5538 0.0420\nvn -0.8264 0.5612 0.0451\nvn -0.8364 0.5465 0.0418\nvn -0.8735 0.4848 0.0434\nvn -0.8740 0.4847 0.0329\nvn -0.1579 0.8729 -0.4615\nvn -0.2226 0.8611 -0.4571\nvn -0.1436 0.8779 -0.4567\nvn -0.2582 0.8550 -0.4498\nvn -0.2941 0.8389 -0.4581\nvn -0.3290 0.8290 -0.4522\nvn -0.1721 0.8469 0.5031\nvn -0.1025 0.8654 0.4905\nvn -0.1514 0.8574 0.4918\nvn -0.1224 0.8570 0.5006\nvn -0.0611 0.8712 0.4870\nvn -0.0671 0.8609 0.5043\nvn -0.9259 0.3744 0.0493\nvn -0.9100 0.4086 0.0698\nvn -0.9124 0.4065 0.0483\nvn -0.9236 0.3772 0.0681\nvn -0.8732 0.4835 0.0603\nvn -0.8693 0.4895 0.0687\nvn -0.9059 0.4150 0.0846\nvn -0.9206 0.3812 0.0848\nvn -0.9462 0.3215 -0.0370\nvn -0.9297 0.3675 -0.0258\nvn -0.9306 0.3641 -0.0371\nvn -0.9467 0.3207 -0.0294\nvn -0.9248 0.3800 -0.0199\nvn -0.9409 0.3379 -0.0209\nvn 0.0000 0.8835 -0.4684\nvn -0.0401 0.8848 -0.4642\nvn 0.0000 0.8860 -0.4636\nvn -0.0433 0.8828 -0.4677\nvn -0.0573 0.8835 -0.4648\nvn -0.0601 0.8814 -0.4684\nvn -0.5572 0.7177 0.4176\nvn -0.4184 0.7846 0.4575\nvn -0.5733 0.7085 0.4115\nvn -0.4395 0.7701 0.4623\nvn -0.3004 0.8230 0.4821\nvn -0.3204 0.8126 0.4868\nvn -0.8854 0.4515 -0.1104\nvn -0.8811 0.4602 -0.1088\nvn -0.8674 0.4827 -0.1207\nvn -0.8997 0.4259 -0.0952\nvn -0.8360 0.5298 -0.1427\nvn -0.8399 0.5276 -0.1272\nvn -0.9035 0.4210 -0.0806\nvn -0.9156 0.3940 -0.0804\nvn -0.9277 0.3723 0.0276\nvn -0.9122 0.4083 0.0352\nvn -0.9127 0.4078 0.0270\nvn -0.9261 0.3754 0.0359\nvn -0.9361 0.3513 0.0168\nvn -0.9162 0.4003 0.0178\nvn -0.9231 0.3842 0.0181\nvn -0.9316 0.3631 0.0131\nvn -0.9209 0.3860 -0.0530\nvn -0.9390 0.3410 -0.0443\nvn -0.7891 0.5995 -0.1333\nvn -0.7576 0.6334 -0.1576\nvn -0.6976 0.6271 0.3466\nvn -0.7356 0.6021 0.3103\nvn -0.6800 0.6376 0.3619\nvn -0.7501 0.5791 0.3193\nvn -0.0228 0.9669 0.2542\nvn -0.0270 0.9665 0.2551\nvn -0.0185 0.9762 0.2161\nvn -0.0162 0.9763 0.2159\nvn -0.0086 0.9756 0.2195\nvn -0.0127 0.9666 0.2559\nvn -0.2579 0.9245 0.2807\nvn -0.5187 0.8253 0.2234\nvn -0.5291 0.8287 0.1825\nvn -0.2613 0.9291 0.2615\nvn -0.1088 0.9650 0.2385\nvn -0.1156 0.9550 0.2731\nvn -0.7590 0.6403 0.1180\nvn -0.8359 0.5424 0.0837\nvn -0.8423 0.5358 0.0590\nvn -0.7861 0.6131 0.0776\nvn -0.2257 0.8682 -0.4418\nvn -0.1786 0.8789 -0.4423\nvn -0.1972 0.8756 -0.4408\nvn -0.2413 0.8574 -0.4545\nvn -0.3065 0.8376 -0.4522\nvn -0.2854 0.8426 -0.4566\nvn -0.1122 0.9188 0.3784\nvn -0.0752 0.9429 0.3244\nvn -0.1639 0.8805 0.4448\nvn -0.3667 0.8082 -0.4606\nvn -0.4014 0.7836 -0.4741\nvn -0.4402 0.7783 -0.4477\nvn -0.4254 0.7881 -0.4449\nvn -0.2187 0.8435 0.4906\nvn -0.2512 0.8308 0.4966\nvn -0.8990 0.4321 0.0717\nvn -0.9095 0.4052 0.0931\nvn -0.8941 0.4359 0.1027\nvn -0.9157 0.3943 0.0776\nvn -0.8749 0.4612 0.1474\nvn -0.8993 0.4190 0.1247\nvn -0.9200 0.3694 0.1305\nvn -0.9254 0.3670 0.0941\nvn -0.9277 0.3641 0.0817\nvn -0.8357 0.5467 0.0505\nvn -0.8345 0.5483 0.0544\nvn -0.8238 0.5643 0.0539\nvn -0.8236 0.5643 0.0567\nvn -0.0518 0.9636 0.2624\nvn -0.0367 0.9745 0.2212\nvn -0.8592 0.4519 0.2396\nvn -0.8792 0.4355 0.1933\nvn -0.8892 0.4076 0.2076\nvn -0.8402 0.4866 0.2392\nvn -0.0169 0.9333 0.3585\nvn -0.0088 0.9519 0.3061\nvn 0.0000 0.9525 0.3044\nvn 0.0000 0.9346 0.3557\nvn 0.0000 0.9011 0.4337\nvn -0.0255 0.9011 0.4329\nvn -0.0669 0.8954 -0.4402\nvn -0.0607 0.8977 -0.4364\nvn -0.0735 0.8892 -0.4516\nvn -0.0267 0.8704 0.4915\nvn 0.0000 0.8693 0.4942\nvn 0.0000 0.8607 0.5090\nvn -0.0245 0.8616 0.5069\nvn -0.0824 0.8819 -0.4641\nvn -0.0890 0.8804 -0.4658\nvn -0.0041 0.9672 0.2539\nvn -0.0011 0.9756 0.2197\nvn 0.0000 0.9758 0.2185\nvn 0.0000 0.9678 0.2516\nvn -0.8369 0.5471 -0.0148\nvn -0.8274 0.5614 -0.0096\nvn -0.8255 0.5643 -0.0095\nvn -0.8320 0.5546 -0.0126\nvn -0.8690 0.4944 -0.0166\nvn -0.8758 0.4824 -0.0159\nvn -0.9175 0.3971 -0.0210\nvn -0.9086 0.4172 -0.0207\nvn -0.9273 0.3736 -0.0216\nvn -0.9323 0.3604 -0.0293\nvn 0.1241 0.8846 -0.4494\nvn 0.1547 0.8874 -0.4343\nvn 0.1779 0.8768 -0.4467\nvn 0.1086 0.8933 -0.4360\nvn 0.2383 0.8601 -0.4509\nvn 0.1894 0.8803 -0.4348\nvn 0.1687 0.8855 -0.4329\nvn 0.1376 0.8922 -0.4302\nvn 0.1021 0.8955 -0.4331\nvn 0.1111 0.8900 0.4422\nvn 0.0497 0.9294 0.3655\nvn 0.0730 0.8968 0.4363\nvn 0.0703 0.9266 0.3695\nvn 0.0482 0.8994 0.4344\nvn 0.0325 0.9317 0.3617\nvn 0.0216 0.9504 0.3101\nvn 0.0333 0.9494 0.3122\nvn 0.0469 0.9471 0.3174\nvn 0.4910 0.8257 0.2777\nvn 0.6556 0.6894 0.3080\nvn 0.7112 0.6754 0.1948\nvn 0.4513 0.8137 0.3662\nvn 0.7795 0.5803 0.2358\nvn 0.7010 0.6269 0.3399\nvn 0.5221 0.7525 0.4013\nvn 0.8781 0.4765 -0.0428\nvn 0.8343 0.5504 -0.0317\nvn 0.8820 0.4706 -0.0243\nvn 0.8272 0.5597 -0.0492\nvn 0.8794 0.4756 -0.0196\nvn 0.8388 0.5440 -0.0195\nvn 0.8262 0.5629 -0.0202\nvn 0.8210 0.5698 -0.0364\nvn 0.8129 0.5802 -0.0512\nvn 0.0308 0.8976 -0.4397\nvn 0.0354 0.8914 -0.4517\nvn 0.0521 0.8902 -0.4525\nvn 0.0465 0.8965 -0.4405\nvn 0.0425 0.8987 -0.4364\nvn 0.0263 0.8999 -0.4353\nvn 0.2932 0.8763 0.3822\nvn 0.3560 0.8288 0.4317\nvn 0.2407 0.8634 0.4433\nvn 0.1827 0.9054 0.3833\nvn 0.1450 0.9317 0.3331\nvn 0.2677 0.9024 0.3376\nvn 0.7841 0.6126 -0.0992\nvn 0.8156 0.5738 -0.0737\nvn 0.8021 0.5892 -0.0973\nvn 0.7986 0.5965 -0.0793\nvn 0.8590 0.5045 -0.0867\nvn 0.8692 0.4902 -0.0638\nvn 0.8790 0.4768 0.0098\nvn 0.8389 0.5443 0.0060\nvn 0.8749 0.4840 0.0153\nvn 0.8371 0.5471 -0.0008\nvn 0.8748 0.4839 0.0241\nvn 0.8425 0.5382 0.0229\nvn 0.8327 0.5532 0.0241\nvn 0.8298 0.5580 0.0015\nvn 0.8272 0.5618 -0.0066\nvn 0.8403 0.5409 0.0361\nvn 0.8315 0.5538 0.0420\nvn 0.8740 0.4847 0.0329\nvn 0.8735 0.4848 0.0434\nvn 0.8364 0.5465 0.0418\nvn 0.8264 0.5612 0.0451\nvn 0.1579 0.8729 -0.4615\nvn 0.2226 0.8611 -0.4571\nvn 0.2582 0.8550 -0.4498\nvn 0.1436 0.8779 -0.4567\nvn 0.3290 0.8290 -0.4522\nvn 0.2941 0.8389 -0.4581\nvn 0.1721 0.8469 0.5031\nvn 0.1025 0.8654 0.4905\nvn 0.1224 0.8570 0.5006\nvn 0.1514 0.8574 0.4918\nvn 0.0671 0.8609 0.5043\nvn 0.0611 0.8712 0.4870\nvn 0.9259 0.3744 0.0493\nvn 0.9100 0.4086 0.0698\nvn 0.9236 0.3772 0.0681\nvn 0.9124 0.4065 0.0483\nvn 0.9206 0.3812 0.0848\nvn 0.9059 0.4150 0.0846\nvn 0.8693 0.4895 0.0687\nvn 0.8732 0.4835 0.0603\nvn 0.9462 0.3215 -0.0370\nvn 0.9297 0.3675 -0.0258\nvn 0.9467 0.3207 -0.0294\nvn 0.9306 0.3641 -0.0371\nvn 0.9409 0.3379 -0.0209\nvn 0.9248 0.3800 -0.0199\nvn 0.0401 0.8848 -0.4642\nvn 0.0433 0.8828 -0.4677\nvn 0.0601 0.8814 -0.4684\nvn 0.0573 0.8835 -0.4648\nvn 0.5572 0.7177 0.4176\nvn 0.4184 0.7846 0.4575\nvn 0.4395 0.7701 0.4623\nvn 0.5733 0.7085 0.4115\nvn 0.3204 0.8126 0.4868\nvn 0.3004 0.8230 0.4821\nvn 0.8854 0.4515 -0.1104\nvn 0.8811 0.4602 -0.1088\nvn 0.8997 0.4259 -0.0952\nvn 0.8674 0.4827 -0.1207\nvn 0.9156 0.3940 -0.0804\nvn 0.9035 0.4210 -0.0806\nvn 0.8399 0.5276 -0.1272\nvn 0.8360 0.5298 -0.1427\nvn 0.9277 0.3723 0.0276\nvn 0.9122 0.4083 0.0352\nvn 0.9261 0.3754 0.0359\nvn 0.9127 0.4078 0.0270\nvn 0.9361 0.3513 0.0168\nvn 0.9162 0.4003 0.0178\nvn 0.9316 0.3631 0.0131\nvn 0.9231 0.3842 0.0181\nvn 0.9209 0.3860 -0.0530\nvn 0.9390 0.3410 -0.0443\nvn 0.7891 0.5995 -0.1333\nvn 0.7576 0.6334 -0.1576\nvn 0.6976 0.6271 0.3466\nvn 0.7356 0.6021 0.3103\nvn 0.7501 0.5791 0.3193\nvn 0.6800 0.6376 0.3619\nvn 0.0228 0.9669 0.2542\nvn 0.0270 0.9665 0.2551\nvn 0.0127 0.9666 0.2559\nvn 0.0086 0.9756 0.2195\nvn 0.0162 0.9763 0.2159\nvn 0.0185 0.9762 0.2161\nvn 0.2579 0.9245 0.2807\nvn 0.5187 0.8253 0.2234\nvn 0.1156 0.9550 0.2731\nvn 0.1088 0.9650 0.2385\nvn 0.2613 0.9291 0.2615\nvn 0.5291 0.8287 0.1824\nvn 0.7590 0.6403 0.1180\nvn 0.8359 0.5424 0.0837\nvn 0.7861 0.6131 0.0776\nvn 0.8423 0.5358 0.0590\nvn 0.2257 0.8682 -0.4418\nvn 0.1786 0.8789 -0.4423\nvn 0.2854 0.8426 -0.4566\nvn 0.3065 0.8376 -0.4522\nvn 0.2413 0.8574 -0.4545\nvn 0.1972 0.8756 -0.4408\nvn 0.1122 0.9188 0.3784\nvn 0.0752 0.9429 0.3244\nvn 0.1639 0.8805 0.4448\nvn 0.3667 0.8082 -0.4606\nvn 0.4254 0.7881 -0.4449\nvn 0.4402 0.7783 -0.4477\nvn 0.4014 0.7836 -0.4741\nvn 0.2187 0.8435 0.4906\nvn 0.2512 0.8308 0.4966\nvn 0.8990 0.4321 0.0717\nvn 0.9095 0.4052 0.0931\nvn 0.9157 0.3943 0.0776\nvn 0.8941 0.4359 0.1027\nvn 0.9277 0.3641 0.0817\nvn 0.9254 0.3670 0.0941\nvn 0.9200 0.3694 0.1305\nvn 0.8993 0.4190 0.1247\nvn 0.8749 0.4612 0.1474\nvn 0.8357 0.5467 0.0505\nvn 0.8345 0.5483 0.0544\nvn 0.8236 0.5643 0.0567\nvn 0.8238 0.5643 0.0539\nvn 0.0518 0.9636 0.2624\nvn 0.0367 0.9745 0.2212\nvn 0.8592 0.4519 0.2396\nvn 0.8792 0.4355 0.1933\nvn 0.8402 0.4866 0.2392\nvn 0.8892 0.4076 0.2076\nvn 0.0169 0.9333 0.3585\nvn 0.0088 0.9519 0.3061\nvn 0.0255 0.9011 0.4329\nvn 0.0669 0.8954 -0.4402\nvn 0.0607 0.8977 -0.4364\nvn 0.0735 0.8892 -0.4516\nvn 0.0267 0.8704 0.4915\nvn 0.0245 0.8616 0.5069\nvn 0.0824 0.8819 -0.4641\nvn 0.0890 0.8804 -0.4658\nvn 0.0041 0.9672 0.2539\nvn 0.0011 0.9756 0.2197\nvn 0.8369 0.5471 -0.0148\nvn 0.8274 0.5614 -0.0096\nvn 0.8758 0.4824 -0.0159\nvn 0.8690 0.4944 -0.0166\nvn 0.8320 0.5546 -0.0126\nvn 0.8255 0.5643 -0.0095\nvn 0.9175 0.3971 -0.0210\nvn 0.9323 0.3604 -0.0293\nvn 0.9273 0.3736 -0.0216\nvn 0.9086 0.4172 -0.0207\nvn -0.5158 0.5380 -0.6667\nvn -0.3821 0.7160 -0.5842\nvn -0.4465 0.5870 -0.6753\nvn -0.5162 0.6071 -0.6041\nvn -0.3905 0.6214 -0.6792\nvn -0.3149 0.7477 -0.5846\nvn -0.2993 0.7811 -0.5479\nvn -0.3883 0.7417 -0.5469\nvn -0.5843 0.5678 -0.5799\nvn -0.2841 0.0082 0.9587\nvn -0.3987 0.0580 0.9152\nvn -0.3936 0.0158 0.9191\nvn -0.2835 0.0466 0.9578\nvn -0.4967 0.0417 0.8668\nvn -0.4985 0.0793 0.8632\nvn -0.5025 0.1945 0.8423\nvn -0.4016 0.1718 0.8995\nvn -0.2840 0.1628 0.9449\nvn -0.2924 0.7616 -0.5783\nvn -0.3604 0.6361 -0.6822\nvn -0.3546 0.6160 -0.7033\nvn -0.2858 0.7611 -0.5822\nvn -0.2644 0.7964 -0.5439\nvn -0.2732 0.7905 -0.5481\nvn -0.5737 0.1068 0.8120\nvn -0.5603 0.0702 0.8253\nvn -0.5990 0.0835 0.7963\nvn -0.6010 0.1319 0.7883\nvn -0.6003 0.2215 0.7685\nvn -0.5759 0.2155 0.7886\nvn -0.4717 0.4136 -0.7787\nvn -0.5134 0.4500 -0.7307\nvn -0.4548 0.4725 -0.7549\nvn -0.5347 0.4147 -0.7362\nvn -0.5881 0.4361 -0.6811\nvn -0.6120 0.3854 -0.6906\nvn -0.1861 0.2732 0.9438\nvn -0.2841 0.2686 0.9204\nvn -0.1899 0.1626 0.9682\nvn -0.2893 0.3064 0.9069\nvn -0.1891 0.3068 0.9328\nvn -0.1548 0.3091 0.9383\nvn -0.1570 0.2664 0.9510\nvn -0.1612 0.1625 0.9734\nvn -0.4076 0.2826 0.8683\nvn -0.5016 0.3061 0.8091\nvn -0.5034 0.3368 0.7956\nvn -0.4257 0.3137 0.8487\nvn -0.6706 0.4192 -0.6120\nvn -0.7117 0.3535 -0.6070\nvn -0.6991 0.4069 -0.5879\nvn -0.7423 0.3379 -0.5786\nvn -0.4202 0.3540 -0.8355\nvn -0.4119 0.4603 -0.7864\nvn -0.4035 0.4496 -0.7969\nvn -0.4194 0.3862 -0.8215\nvn -0.5653 0.3171 0.7614\nvn -0.5897 0.3188 0.7420\nvn -0.5829 0.3540 0.7313\nvn -0.5616 0.3524 0.7486\nvn -0.1641 0.0064 0.9864\nvn -0.1926 0.0466 0.9802\nvn -0.1945 0.0063 0.9809\nvn -0.1637 0.0556 0.9849\nvn 0.5158 0.5380 -0.6667\nvn 0.3821 0.7160 -0.5842\nvn 0.5162 0.6071 -0.6041\nvn 0.4465 0.5870 -0.6753\nvn 0.5843 0.5678 -0.5799\nvn 0.3883 0.7417 -0.5469\nvn 0.2993 0.7811 -0.5479\nvn 0.3149 0.7477 -0.5846\nvn 0.3905 0.6214 -0.6792\nvn 0.2841 0.0082 0.9587\nvn 0.3987 0.0580 0.9152\nvn 0.2835 0.0466 0.9578\nvn 0.3936 0.0158 0.9191\nvn 0.2840 0.1628 0.9449\nvn 0.4016 0.1718 0.8995\nvn 0.5025 0.1945 0.8423\nvn 0.4985 0.0793 0.8632\nvn 0.4967 0.0417 0.8668\nvn 0.2924 0.7616 -0.5783\nvn 0.3604 0.6361 -0.6822\nvn 0.2732 0.7905 -0.5481\nvn 0.2644 0.7964 -0.5439\nvn 0.2858 0.7611 -0.5822\nvn 0.3546 0.6160 -0.7033\nvn 0.5737 0.1068 0.8120\nvn 0.5603 0.0702 0.8253\nvn 0.5759 0.2155 0.7886\nvn 0.6003 0.2215 0.7685\nvn 0.6010 0.1319 0.7883\nvn 0.5990 0.0835 0.7963\nvn 0.4717 0.4136 -0.7787\nvn 0.5134 0.4500 -0.7307\nvn 0.5347 0.4147 -0.7362\nvn 0.4548 0.4725 -0.7549\nvn 0.6120 0.3854 -0.6906\nvn 0.5881 0.4361 -0.6811\nvn 0.1861 0.2732 0.9438\nvn 0.1900 0.1626 0.9682\nvn 0.2841 0.2686 0.9204\nvn 0.1612 0.1625 0.9734\nvn 0.1570 0.2664 0.9510\nvn 0.1548 0.3091 0.9383\nvn 0.1891 0.3068 0.9328\nvn 0.2893 0.3064 0.9069\nvn 0.4076 0.2826 0.8683\nvn 0.5016 0.3061 0.8091\nvn 0.4257 0.3137 0.8487\nvn 0.5034 0.3368 0.7956\nvn 0.6706 0.4192 -0.6120\nvn 0.7117 0.3535 -0.6070\nvn 0.7423 0.3379 -0.5786\nvn 0.6991 0.4069 -0.5879\nvn 0.4202 0.3540 -0.8355\nvn 0.4119 0.4603 -0.7864\nvn 0.4194 0.3862 -0.8215\nvn 0.4035 0.4496 -0.7969\nvn 0.5653 0.3171 0.7614\nvn 0.5897 0.3188 0.7420\nvn 0.5616 0.3524 0.7486\nvn 0.5829 0.3540 0.7313\nvn 0.1641 0.0064 0.9864\nvn 0.1926 0.0466 0.9802\nvn 0.1637 0.0556 0.9849\nvn 0.1945 0.0063 0.9809\nusemtl Standard_19\ns 1\nf 2/1/1 126/2/2 205/3/3\nf 126/2/2 2/1/1 209/4/4\nf 47/5/5 126/2/2 322/6/6\nf 126/2/2 47/5/5 205/3/3\nf 38/7/7 126/2/2 238/8/8\nf 126/2/2 38/7/7 322/6/6\nf 11/9/9 126/2/2 209/4/4\nf 126/2/2 11/9/9 238/8/8\nf 3/10/10 127/11/11 206/12/12\nf 127/11/11 3/10/10 210/13/13\nf 10/14/14 127/11/11 232/15/15\nf 127/11/11 10/14/14 206/12/12\nf 16/16/16 127/11/11 248/17/17\nf 127/11/11 16/16/16 232/15/15\nf 14/18/18 127/11/11 210/13/13\nf 127/11/11 14/18/18 248/17/17\nf 9/19/19 128/20/20 204/21/21\nf 128/20/20 9/19/19 234/22/22\nf 1/23/23 128/20/20 228/24/24\nf 128/20/20 1/23/23 204/21/21\nf 8/25/25 128/20/20 234/22/22\nf 128/20/20 8/25/25 228/24/24\nf 4/26/26 129/27/27 207/28/28\nf 129/27/27 4/26/26 212/29/29\nf 70/30/30 129/27/27 346/31/31\nf 129/27/27 70/30/30 207/28/28\nf 60/32/32 129/27/27 256/33/33\nf 129/27/27 60/32/32 346/31/31\nf 18/34/34 129/27/27 212/29/29\nf 129/27/27 18/34/34 256/33/33\nf 30/35/35 130/36/36 253/37/37\nf 130/36/36 30/35/35 213/38/38\nf 45/39/39 130/36/36 320/40/40\nf 130/36/36 45/39/39 253/37/37\nf 46/41/41 130/36/36 249/42/42\nf 130/36/36 46/41/41 320/40/40\nf 15/43/43 130/36/36 213/38/38\nf 130/36/36 15/43/43 249/42/42\nf 1/23/23 131/44/44 204/21/21\nf 131/44/44 1/23/23 214/45/45\nf 9/19/19 131/44/44 233/46/46\nf 131/44/44 9/19/19 204/21/21\nf 13/47/47 131/44/44 239/48/48\nf 131/44/44 13/47/47 233/46/46\nf 12/49/49 131/44/44 214/45/45\nf 131/44/44 12/49/49 239/48/48\nf 69/50/50 132/51/51 345/52/52\nf 132/51/51 69/50/50 227/53/53\nf 70/30/30 132/51/51 207/28/28\nf 132/51/51 70/30/30 345/52/52\nf 4/26/26 132/51/51 225/54/54\nf 132/51/51 4/26/26 207/28/28\nf 7/55/55 132/51/51 227/53/53\nf 132/51/51 7/55/55 225/54/54\nf 79/56/56 133/57/57 355/58/58\nf 133/57/57 79/56/56 216/59/59\nf 80/60/60 133/57/57 356/61/61\nf 133/57/57 80/60/60 355/58/58\nf 71/62/62 133/57/57 218/63/63\nf 133/57/57 71/62/62 356/61/61\nf 6/64/64 133/57/57 216/59/59\nf 133/57/57 6/64/64 218/63/63\nf 71/62/62 134/65/65 347/66/66\nf 134/65/65 71/62/62 218/63/63\nf 72/67/67 134/65/65 208/68/68\nf 134/65/65 72/67/67 347/66/66\nf 5/69/69 134/65/65 217/70/70\nf 134/65/65 5/69/69 208/68/68\nf 6/64/64 134/65/65 218/63/63\nf 134/65/65 6/64/64 217/70/70\nf 43/71/71 135/72/72 220/73/73\nf 135/72/72 43/71/71 317/74/74\nf 2/1/1 135/72/72 209/4/4\nf 135/72/72 2/1/1 220/73/73\nf 11/9/9 135/72/72 240/75/75\nf 135/72/72 11/9/9 209/4/4\nf 42/76/76 135/72/72 317/74/74\nf 135/72/72 42/76/76 240/75/75\nf 49/77/77 136/78/78 221/79/79\nf 136/78/78 49/77/77 324/80/80\nf 3/10/10 136/78/78 210/13/13\nf 136/78/78 3/10/10 221/79/79\nf 14/18/18 136/78/78 250/81/81\nf 136/78/78 14/18/18 210/13/13\nf 48/82/82 136/78/78 324/80/80\nf 136/78/78 48/82/82 250/81/81\nf 76/83/83 137/84/84 223/85/85\nf 137/84/84 76/83/83 351/86/86\nf 5/69/69 137/84/84 211/87/87\nf 137/84/84 5/69/69 223/85/85\nf 74/88/88 137/84/84 350/89/89\nf 137/84/84 74/88/88 211/87/87\nf 75/90/90 137/84/84 351/86/86\nf 137/84/84 75/90/90 350/89/89\nf 65/91/91 138/92/92 222/93/93\nf 138/92/92 65/91/91 340/94/94\nf 4/26/26 138/92/92 212/29/29\nf 138/92/92 4/26/26 222/93/93\nf 18/34/34 138/92/92 257/95/95\nf 138/92/92 18/34/34 212/29/29\nf 64/96/96 138/92/92 340/94/94\nf 138/92/92 64/96/96 257/95/95\nf 100/97/97 139/98/98 290/99/99\nf 139/98/98 100/97/97 319/100/100\nf 30/35/35 139/98/98 213/38/38\nf 139/98/98 30/35/35 290/99/99\nf 15/43/43 139/98/98 251/101/101\nf 139/98/98 15/43/43 213/38/38\nf 44/102/102 139/98/98 319/100/100\nf 139/98/98 44/102/102 251/101/101\nf 51/103/103 140/104/104 219/105/105\nf 140/104/104 51/103/103 326/106/106\nf 1/23/23 140/104/104 214/45/45\nf 140/104/104 1/23/23 219/105/105\nf 12/49/49 140/104/104 241/107/107\nf 140/104/104 12/49/49 214/45/45\nf 50/108/108 140/104/104 326/106/106\nf 140/104/104 50/108/108 241/107/107\nf 67/109/109 141/110/110 343/111/111\nf 141/110/110 67/109/109 342/112/112\nf 68/113/113 141/110/110 215/114/114\nf 141/110/110 68/113/113 343/111/111\nf 7/55/55 141/110/110 226/115/115\nf 141/110/110 7/55/55 215/114/114\nf 66/116/116 141/110/110 342/112/112\nf 141/110/110 66/116/116 226/115/115\nf 77/117/117 142/118/118 224/119/119\nf 142/118/118 77/117/117 352/120/120\nf 6/64/64 142/118/118 217/70/70\nf 142/118/118 6/64/64 224/119/119\nf 5/69/69 142/118/118 223/85/85\nf 142/118/118 5/69/69 217/70/70\nf 76/83/83 142/118/118 352/120/120\nf 142/118/118 76/83/83 223/85/85\nf 78/121/121 143/122/122 354/123/123\nf 143/122/122 78/121/121 353/124/124\nf 79/56/56 143/122/122 216/59/59\nf 143/122/122 79/56/56 354/123/123\nf 6/64/64 143/122/122 224/119/119\nf 143/122/122 6/64/64 216/59/59\nf 77/117/117 143/122/122 353/124/124\nf 143/122/122 77/117/117 224/119/119\nf 7/55/55 144/125/125 225/54/54\nf 144/125/125 7/55/55 226/115/115\nf 4/26/26 144/125/125 222/93/93\nf 144/125/125 4/26/26 225/54/54\nf 65/91/91 144/125/125 341/126/126\nf 144/125/125 65/91/91 222/93/93\nf 66/116/116 144/125/125 226/115/115\nf 144/125/125 66/116/116 341/126/126\nf 7/55/55 145/127/127 215/114/114\nf 145/127/127 7/55/55 227/53/53\nf 68/113/113 145/127/127 344/128/128\nf 145/127/127 68/113/113 215/114/114\nf 69/50/50 145/127/127 227/53/53\nf 145/127/127 69/50/50 344/128/128\nf 8/25/25 146/129/129 228/24/24\nf 146/129/129 8/25/25 244/130/130\nf 1/23/23 146/129/129 219/105/105\nf 146/129/129 1/23/23 228/24/24\nf 51/103/103 146/129/129 327/131/131\nf 146/129/129 51/103/103 219/105/105\nf 52/132/132 146/129/129 244/130/130\nf 146/129/129 52/132/132 327/131/131\nf 10/14/14 147/133/133 231/134/134\nf 147/133/133 10/14/14 232/15/15\nf 58/135/135 147/133/133 334/136/136\nf 147/133/133 58/135/135 231/134/134\nf 59/137/137 147/133/133 252/138/138\nf 147/133/133 59/137/137 334/136/136\nf 16/16/16 147/133/133 232/15/15\nf 147/133/133 16/16/16 252/138/138\nf 9/19/19 148/139/139 230/140/140\nf 148/139/139 9/19/19 233/46/46\nf 56/141/141 148/139/139 332/142/142\nf 148/139/139 56/141/141 230/140/140\nf 57/143/143 148/139/139 243/144/144\nf 148/139/139 57/143/143 332/142/142\nf 13/47/47 148/139/139 233/46/46\nf 148/139/139 13/47/47 243/144/144\nf 8/25/25 149/145/145 242/146/146\nf 149/145/145 8/25/25 234/22/22\nf 55/147/147 149/145/145 331/148/148\nf 149/145/145 55/147/147 242/146/146\nf 56/141/141 149/145/145 230/140/140\nf 149/145/145 56/141/141 331/148/148\nf 9/19/19 149/145/145 234/22/22\nf 149/145/145 9/19/19 230/140/140\nf 38/7/7 150/149/149 313/150/150\nf 150/149/149 38/7/7 238/8/8\nf 39/151/151 150/149/149 314/152/152\nf 150/149/149 39/151/151 313/150/150\nf 40/153/153 150/149/149 235/154/154\nf 150/149/149 40/153/153 314/152/152\nf 11/9/9 150/149/149 238/8/8\nf 150/149/149 11/9/9 235/154/154\nf 13/47/47 151/155/155 237/156/156\nf 151/155/155 13/47/47 239/48/48\nf 10/14/14 151/155/155 206/12/12\nf 151/155/155 10/14/14 237/156/156\nf 3/10/10 151/155/155 236/157/157\nf 151/155/155 3/10/10 206/12/12\nf 12/49/49 151/155/155 239/48/48\nf 151/155/155 12/49/49 236/157/157\nf 11/9/9 152/158/158 235/154/154\nf 152/158/158 11/9/9 240/75/75\nf 40/153/153 152/158/158 315/159/159\nf 152/158/158 40/153/153 235/154/154\nf 41/160/160 152/158/158 316/161/161\nf 152/158/158 41/160/160 315/159/159\nf 42/76/76 152/158/158 240/75/75\nf 152/158/158 42/76/76 316/161/161\nf 12/49/49 153/162/162 236/157/157\nf 153/162/162 12/49/49 241/107/107\nf 3/10/10 153/162/162 221/79/79\nf 153/162/162 3/10/10 236/157/157\nf 49/77/77 153/162/162 325/163/163\nf 153/162/162 49/77/77 221/79/79\nf 50/108/108 153/162/162 241/107/107\nf 153/162/162 50/108/108 325/163/163\nf 529/164/164 154/165/165 530/166/166\nf 154/165/165 529/164/164 330/167/167\nf 531/168/168 154/165/165 229/169/169\nf 154/165/165 531/168/168 530/166/166\nf 53/170/170 154/165/165 329/171/171\nf 154/165/165 53/170/170 229/169/169\nf 54/172/172 154/165/165 330/167/167\nf 154/165/165 54/172/172 329/171/171\nf 74/88/88 155/173/173 211/87/87\nf 155/173/173 74/88/88 349/174/174\nf 5/69/69 155/173/173 208/68/68\nf 155/173/173 5/69/69 211/87/87\nf 72/67/67 155/173/173 348/175/175\nf 155/173/173 72/67/67 208/68/68\nf 73/176/176 155/173/173 349/174/174\nf 155/173/173 73/176/176 348/175/175\nf 58/135/135 156/177/177 231/134/134\nf 156/177/177 58/135/135 333/178/178\nf 10/14/14 156/177/177 237/156/156\nf 156/177/177 10/14/14 231/134/134\nf 13/47/47 156/177/177 243/144/144\nf 156/177/177 13/47/47 237/156/156\nf 57/143/143 156/177/177 333/178/178\nf 156/177/177 57/143/143 243/144/144\nf 532/179/179 157/180/180 328/181/181\nf 157/180/180 532/179/179 533/182/182\nf 53/170/170 157/180/180 229/169/169\nf 157/180/180 53/170/170 328/181/181\nf 531/168/168 157/180/180 533/182/182\nf 157/180/180 531/168/168 229/169/169\nf 16/16/16 158/183/183 247/184/184\nf 158/183/183 16/16/16 248/17/17\nf 17/185/185 158/183/183 308/186/186\nf 158/183/183 17/185/185 247/184/184\nf 37/187/187 158/183/183 245/188/188\nf 158/183/183 37/187/187 308/186/186\nf 14/18/18 158/183/183 248/17/17\nf 158/183/183 14/18/18 245/188/188\nf 46/41/41 159/189/189 321/190/190\nf 159/189/189 46/41/41 249/42/42\nf 47/5/5 159/189/189 205/3/3\nf 159/189/189 47/5/5 321/190/190\nf 2/1/1 159/189/189 246/191/191\nf 159/189/189 2/1/1 205/3/3\nf 15/43/43 159/189/189 249/42/42\nf 159/189/189 15/43/43 246/191/191\nf 14/18/18 160/192/192 245/188/188\nf 160/192/192 14/18/18 250/81/81\nf 37/187/187 160/192/192 311/193/193\nf 160/192/192 37/187/187 245/188/188\nf 121/194/194 160/192/192 323/195/195\nf 160/192/192 121/194/194 311/193/193\nf 48/82/82 160/192/192 250/81/81\nf 160/192/192 48/82/82 323/195/195\nf 15/43/43 161/196/196 246/191/191\nf 161/196/196 15/43/43 251/101/101\nf 2/1/1 161/196/196 220/73/73\nf 161/196/196 2/1/1 246/191/191\nf 43/71/71 161/196/196 318/197/197\nf 161/196/196 43/71/71 220/73/73\nf 44/102/102 161/196/196 251/101/101\nf 161/196/196 44/102/102 318/197/197\nf 59/137/137 162/198/198 335/199/199\nf 162/198/198 59/137/137 252/138/138\nf 122/200/200 162/198/198 254/201/201\nf 162/198/198 122/200/200 335/199/199\nf 17/185/185 162/198/198 247/184/184\nf 162/198/198 17/185/185 254/201/201\nf 16/16/16 162/198/198 252/138/138\nf 162/198/198 16/16/16 247/184/184\nf 60/32/32 163/202/202 336/203/203\nf 163/202/202 60/32/32 256/33/33\nf 61/204/204 163/202/202 337/205/205\nf 163/202/202 61/204/204 336/203/203\nf 62/206/206 163/202/202 255/207/207\nf 163/202/202 62/206/206 337/205/205\nf 18/34/34 163/202/202 256/33/33\nf 163/202/202 18/34/34 255/207/207\nf 18/34/34 164/208/208 255/207/207\nf 164/208/208 18/34/34 257/95/95\nf 62/206/206 164/208/208 338/209/209\nf 164/208/208 62/206/206 255/207/207\nf 63/210/210 164/208/208 339/211/211\nf 164/208/208 63/210/210 338/209/209\nf 64/96/96 164/208/208 257/95/95\nf 164/208/208 64/96/96 339/211/211\nf 19/212/212 165/213/213 260/214/214\nf 165/213/213 19/212/212 258/215/215\nf 20/216/216 165/213/213 259/217/217\nf 165/213/213 20/216/216 260/214/214\nf 82/218/218 165/213/213 357/219/219\nf 165/213/213 82/218/218 259/217/217\nf 81/220/220 165/213/213 258/215/215\nf 165/213/213 81/220/220 357/219/219\nf 21/221/221 166/222/222 264/223/223\nf 166/222/222 21/221/221 261/224/224\nf 24/225/225 166/222/222 263/226/226\nf 166/222/222 24/225/225 264/223/223\nf 23/227/227 166/222/222 262/228/228\nf 166/222/222 23/227/227 263/226/226\nf 22/229/229 166/222/222 261/224/224\nf 166/222/222 22/229/229 262/228/228\nf 25/230/230 167/231/231 267/232/232\nf 167/231/231 25/230/230 265/233/233\nf 27/234/234 167/231/231 266/235/235\nf 167/231/231 27/234/234 267/232/232\nf 26/236/236 167/231/231 265/233/233\nf 167/231/231 26/236/236 266/235/235\nf 28/237/237 168/238/238 270/239/239\nf 168/238/238 28/237/237 268/240/240\nf 29/241/241 168/238/238 269/242/242\nf 168/238/238 29/241/241 270/239/239\nf 84/243/243 168/238/238 358/244/244\nf 168/238/238 84/243/243 269/242/242\nf 83/245/245 168/238/238 268/240/240\nf 168/238/238 83/245/245 358/244/244\nf 30/35/35 169/246/246 272/247/247\nf 169/246/246 30/35/35 253/37/37\nf 31/248/248 169/246/246 271/249/249\nf 169/246/246 31/248/248 272/247/247\nf 85/250/250 169/246/246 359/251/251\nf 169/246/246 85/250/250 271/249/249\nf 45/39/39 169/246/246 253/37/37\nf 169/246/246 45/39/39 359/251/251\nf 26/236/236 170/252/252 275/253/253\nf 170/252/252 26/236/236 265/233/233\nf 33/254/254 170/252/252 274/255/255\nf 170/252/252 33/254/254 275/253/253\nf 32/256/256 170/252/252 273/257/257\nf 170/252/252 32/256/256 274/255/255\nf 25/230/230 170/252/252 265/233/233\nf 170/252/252 25/230/230 273/257/257\nf 86/258/258 171/259/259 277/260/260\nf 171/259/259 86/258/258 360/261/261\nf 34/262/262 171/259/259 276/263/263\nf 171/259/259 34/262/262 277/260/260\nf 28/237/237 171/259/259 268/240/240\nf 171/259/259 28/237/237 276/263/263\nf 83/245/245 171/259/259 360/261/261\nf 171/259/259 83/245/245 268/240/240\nf 87/264/264 172/265/265 279/266/266\nf 172/265/265 87/264/264 361/267/267\nf 35/268/268 172/265/265 278/269/269\nf 172/265/265 35/268/268 279/266/266\nf 89/270/270 172/265/265 362/271/271\nf 172/265/265 89/270/270 278/269/269\nf 88/272/272 172/265/265 361/267/267\nf 172/265/265 88/272/272 362/271/271\nf 89/270/270 173/273/273 278/269/269\nf 173/273/273 89/270/270 363/274/274\nf 35/268/268 173/273/273 281/275/275\nf 173/273/273 35/268/268 278/269/269\nf 36/276/276 173/273/273 280/277/277\nf 173/273/273 36/276/276 281/275/275\nf 90/278/278 173/273/273 363/274/274\nf 173/273/273 90/278/278 280/277/277\nf 91/279/279 174/280/280 364/281/281\nf 174/280/280 91/279/279 282/282/282\nf 92/283/283 174/280/280 283/284/284\nf 174/280/280 92/283/283 364/281/281\nf 20/216/216 174/280/280 260/214/214\nf 174/280/280 20/216/216 283/284/284\nf 19/212/212 174/280/280 282/282/282\nf 174/280/280 19/212/212 260/214/214\nf 93/285/285 175/286/286 365/287/287\nf 175/286/286 93/285/285 284/288/288\nf 94/289/289 175/286/286 285/290/290\nf 175/286/286 94/289/289 365/287/287\nf 24/225/225 175/286/286 264/223/223\nf 175/286/286 24/225/225 285/290/290\nf 21/221/221 175/286/286 284/288/288\nf 175/286/286 21/221/221 264/223/223\nf 95/291/291 176/292/292 367/293/293\nf 176/292/292 95/291/291 286/294/294\nf 97/295/295 176/292/292 366/296/296\nf 176/292/292 97/295/295 367/293/293\nf 96/297/297 176/292/292 287/298/298\nf 176/292/292 96/297/297 366/296/296\nf 36/276/276 176/292/292 286/294/294\nf 176/292/292 36/276/276 287/298/298\nf 98/299/299 177/300/300 368/301/301\nf 177/300/300 98/299/299 288/302/302\nf 99/303/303 177/300/300 289/304/304\nf 177/300/300 99/303/303 368/301/301\nf 29/241/241 177/300/300 270/239/239\nf 177/300/300 29/241/241 289/304/304\nf 28/237/237 177/300/300 288/302/302\nf 177/300/300 28/237/237 270/239/239\nf 100/97/97 178/305/305 369/306/306\nf 178/305/305 100/97/97 290/99/99\nf 101/307/307 178/305/305 291/308/308\nf 178/305/305 101/307/307 369/306/306\nf 31/248/248 178/305/305 272/247/247\nf 178/305/305 31/248/248 291/308/308\nf 30/35/35 178/305/305 290/99/99\nf 178/305/305 30/35/35 272/247/247\nf 102/309/309 179/310/310 370/311/311\nf 179/310/310 102/309/309 292/312/312\nf 103/313/313 179/310/310 293/314/314\nf 179/310/310 103/313/313 370/311/311\nf 33/254/254 179/310/310 275/253/253\nf 179/310/310 33/254/254 293/314/314\nf 26/236/236 179/310/310 292/312/312\nf 179/310/310 26/236/236 275/253/253\nf 104/315/315 180/316/316 372/317/317\nf 180/316/316 104/315/315 371/318/318\nf 106/319/319 180/316/316 295/320/320\nf 180/316/316 106/319/319 372/317/317\nf 34/262/262 180/316/316 294/321/321\nf 180/316/316 34/262/262 295/320/320\nf 105/322/322 180/316/316 371/318/318\nf 180/316/316 105/322/322 294/321/321\nf 107/323/323 181/324/324 373/325/325\nf 181/324/324 107/323/323 296/326/326\nf 95/291/291 181/324/324 286/294/294\nf 181/324/324 95/291/291 373/325/325\nf 36/276/276 181/324/324 281/275/275\nf 181/324/324 36/276/276 286/294/294\nf 35/268/268 181/324/324 296/326/326\nf 181/324/324 35/268/268 281/275/275\nf 108/327/327 182/328/328 375/329/329\nf 182/328/328 108/327/327 374/330/330\nf 107/323/323 182/328/328 296/326/326\nf 182/328/328 107/323/323 375/329/329\nf 35/268/268 182/328/328 279/266/266\nf 182/328/328 35/268/268 296/326/326\nf 87/264/264 182/328/328 374/330/330\nf 182/328/328 87/264/264 279/266/266\nf 34/262/262 183/331/331 295/320/320\nf 183/331/331 34/262/262 276/263/263\nf 106/319/319 183/331/331 376/332/332\nf 183/331/331 106/319/319 295/320/320\nf 98/299/299 183/331/331 288/302/302\nf 183/331/331 98/299/299 376/332/332\nf 28/237/237 183/331/331 276/263/263\nf 183/331/331 28/237/237 288/302/302\nf 34/262/262 184/333/333 277/260/260\nf 184/333/333 34/262/262 294/321/321\nf 86/258/258 184/333/333 377/334/334\nf 184/333/333 86/258/258 277/260/260\nf 105/322/322 184/333/333 294/321/321\nf 184/333/333 105/322/322 377/334/334\nf 27/234/234 185/335/335 297/336/336\nf 185/335/335 27/234/234 266/235/235\nf 109/337/337 185/335/335 378/338/338\nf 185/335/335 109/337/337 297/336/336\nf 102/309/309 185/335/335 292/312/312\nf 185/335/335 102/309/309 378/338/338\nf 26/236/236 185/335/335 266/235/235\nf 185/335/335 26/236/236 292/312/312\nf 22/229/229 186/339/339 262/228/228\nf 186/339/339 22/229/229 298/340/340\nf 23/227/227 186/339/339 299/341/341\nf 186/339/339 23/227/227 262/228/228\nf 111/342/342 186/339/339 379/343/343\nf 186/339/339 111/342/342 299/341/341\nf 110/344/344 186/339/339 298/340/340\nf 186/339/339 110/344/344 379/343/343\nf 25/230/230 187/345/345 273/257/257\nf 187/345/345 25/230/230 300/346/346\nf 32/256/256 187/345/345 301/347/347\nf 187/345/345 32/256/256 273/257/257\nf 113/348/348 187/345/345 380/349/349\nf 187/345/345 113/348/348 301/347/347\nf 112/350/350 187/345/345 300/346/346\nf 187/345/345 112/350/350 380/349/349\nf 27/234/234 188/351/351 267/232/232\nf 188/351/351 27/234/234 302/352/352\nf 25/230/230 188/351/351 300/346/346\nf 188/351/351 25/230/230 267/232/232\nf 112/350/350 188/351/351 381/353/353\nf 188/351/351 112/350/350 300/346/346\nf 114/354/354 188/351/351 302/352/352\nf 188/351/351 114/354/354 381/353/353\nf 82/218/218 189/355/355 259/217/217\nf 189/355/355 82/218/218 382/356/356\nf 20/216/216 189/355/355 303/357/357\nf 189/355/355 20/216/216 259/217/217\nf 116/358/358 189/355/355 383/359/359\nf 189/355/355 116/358/358 303/357/357\nf 115/360/360 189/355/355 382/356/356\nf 189/355/355 115/360/360 383/359/359\nf 32/256/256 190/361/361 274/255/255\nf 190/361/361 32/256/256 304/362/362\nf 33/254/254 190/361/361 305/363/363\nf 190/361/361 33/254/254 274/255/255\nf 21/221/221 190/361/361 261/224/224\nf 190/361/361 21/221/221 305/363/363\nf 22/229/229 190/361/361 304/362/362\nf 190/361/361 22/229/229 261/224/224\nf 20/216/216 191/364/364 283/284/284\nf 191/364/364 20/216/216 303/357/357\nf 92/283/283 191/364/364 385/365/365\nf 191/364/364 92/283/283 283/284/284\nf 117/366/366 191/364/364 384/367/367\nf 191/364/364 117/366/366 385/365/365\nf 116/358/358 191/364/364 303/357/357\nf 191/364/364 116/358/358 384/367/367\nf 33/254/254 192/368/368 293/314/314\nf 192/368/368 33/254/254 305/363/363\nf 103/313/313 192/368/368 386/369/369\nf 192/368/368 103/313/313 293/314/314\nf 93/285/285 192/368/368 284/288/288\nf 192/368/368 93/285/285 386/369/369\nf 21/221/221 192/368/368 305/363/363\nf 192/368/368 21/221/221 284/288/288\nf 534/370/370 193/371/371 388/372/372\nf 193/371/371 534/370/370 535/373/373\nf 119/374/374 193/371/371 387/375/375\nf 193/371/371 119/374/374 388/372/372\nf 118/376/376 193/371/371 306/377/377\nf 193/371/371 118/376/376 387/375/375\nf 536/378/378 193/371/371 535/373/373\nf 193/371/371 536/378/378 306/377/377\nf 96/297/297 194/379/379 390/380/380\nf 194/379/379 96/297/297 287/298/298\nf 120/381/381 194/379/379 389/382/382\nf 194/379/379 120/381/381 390/380/380\nf 90/278/278 194/379/379 280/277/277\nf 194/379/379 90/278/278 389/382/382\nf 36/276/276 194/379/379 287/298/298\nf 194/379/379 36/276/276 280/277/277\nf 110/344/344 195/383/383 391/384/384\nf 195/383/383 110/344/344 298/340/340\nf 113/348/348 195/383/383 301/347/347\nf 195/383/383 113/348/348 391/384/384\nf 32/256/256 195/383/383 304/362/362\nf 195/383/383 32/256/256 301/347/347\nf 22/229/229 195/383/383 298/340/340\nf 195/383/383 22/229/229 304/362/362\nf 537/385/385 196/386/386 538/387/387\nf 196/386/386 537/385/385 392/388/388\nf 536/378/378 196/386/386 306/377/377\nf 196/386/386 536/378/378 538/387/387\nf 118/376/376 196/386/386 392/388/388\nf 196/386/386 118/376/376 306/377/377\nf 23/227/227 197/389/389 263/226/226\nf 197/389/389 23/227/227 307/390/390\nf 24/225/225 197/389/389 309/391/391\nf 197/389/389 24/225/225 263/226/226\nf 37/187/187 197/389/389 308/186/186\nf 197/389/389 37/187/187 309/391/391\nf 17/185/185 197/389/389 307/390/390\nf 197/389/389 17/185/185 308/186/186\nf 85/250/250 198/392/392 271/249/249\nf 198/392/392 85/250/250 393/393/393\nf 31/248/248 198/392/392 310/394/394\nf 198/392/392 31/248/248 271/249/249\nf 19/212/212 198/392/392 258/215/215\nf 198/392/392 19/212/212 310/394/394\nf 81/220/220 198/392/392 393/393/393\nf 198/392/392 81/220/220 258/215/215\nf 24/225/225 199/395/395 285/290/290\nf 199/395/395 24/225/225 309/391/391\nf 94/289/289 199/395/395 394/396/396\nf 199/395/395 94/289/289 285/290/290\nf 121/194/194 199/395/395 311/193/193\nf 199/395/395 121/194/194 394/396/396\nf 37/187/187 199/395/395 309/391/391\nf 199/395/395 37/187/187 311/193/193\nf 31/248/248 200/397/397 291/308/308\nf 200/397/397 31/248/248 310/394/394\nf 101/307/307 200/397/397 395/398/398\nf 200/397/397 101/307/307 291/308/308\nf 91/279/279 200/397/397 282/282/282\nf 200/397/397 91/279/279 395/398/398\nf 19/212/212 200/397/397 310/394/394\nf 200/397/397 19/212/212 282/282/282\nf 111/342/342 201/399/399 299/341/341\nf 201/399/399 111/342/342 396/400/400\nf 23/227/227 201/399/399 307/390/390\nf 201/399/399 23/227/227 299/341/341\nf 17/185/185 201/399/399 254/201/201\nf 201/399/399 17/185/185 307/390/390\nf 122/200/200 201/399/399 396/400/400\nf 201/399/399 122/200/200 254/201/201\nf 84/243/243 202/401/401 269/242/242\nf 202/401/401 84/243/243 397/402/402\nf 29/241/241 202/401/401 312/403/403\nf 202/401/401 29/241/241 269/242/242\nf 124/404/404 202/401/401 398/405/405\nf 202/401/401 124/404/404 312/403/403\nf 123/406/406 202/401/401 397/402/402\nf 202/401/401 123/406/406 398/405/405\nf 29/241/241 203/407/407 289/304/304\nf 203/407/407 29/241/241 312/403/403\nf 99/303/303 203/407/407 400/408/408\nf 203/407/407 99/303/303 289/304/304\nf 125/409/409 203/407/407 399/410/410\nf 203/407/407 125/409/409 400/408/408\nf 124/404/404 203/407/407 312/403/403\nf 203/407/407 124/404/404 399/410/410\nf 401/411/411 409/412/412 431/413/413\nf 409/412/412 401/411/411 440/414/414\nf 402/415/415 409/412/412 435/416/416\nf 409/412/412 402/415/415 431/413/413\nf 459/417/417 409/412/412 495/418/418\nf 409/412/412 459/417/417 435/416/416\nf 460/419/419 409/412/412 440/414/414\nf 409/412/412 460/419/419 495/418/418\nf 474/420/420 410/421/421 510/422/422\nf 410/421/421 474/420/420 433/423/423\nf 465/424/424 410/421/421 436/425/425\nf 410/421/421 465/424/424 510/422/422\nf 404/426/426 410/421/421 438/427/427\nf 410/421/421 404/426/426 436/425/425\nf 403/428/428 410/421/421 433/423/423\nf 410/421/421 403/428/428 438/427/427\nf 402/415/415 411/429/429 434/430/430\nf 411/429/429 402/415/415 435/416/416\nf 457/431/431 411/429/429 493/432/432\nf 411/429/429 457/431/431 434/430/430\nf 458/433/433 411/429/429 494/434/434\nf 411/429/429 458/433/433 493/432/432\nf 459/417/417 411/429/429 435/416/416\nf 411/429/429 459/417/417 494/434/434\nf 465/424/424 412/435/435 501/436/436\nf 412/435/435 465/424/424 436/425/425\nf 466/437/437 412/435/435 502/438/438\nf 412/435/435 466/437/437 501/436/436\nf 467/439/439 412/435/435 439/440/440\nf 412/435/435 467/439/439 502/438/438\nf 404/426/426 412/435/435 436/425/425\nf 412/435/435 404/426/426 439/440/440\nf 463/441/441 413/442/442 442/443/443\nf 413/442/442 463/441/441 498/444/444\nf 402/415/415 413/442/442 431/413/413\nf 413/442/442 402/415/415 442/443/443\nf 401/411/411 413/442/442 432/445/445\nf 413/442/442 401/411/411 431/413/413\nf 462/446/446 413/442/442 498/444/444\nf 413/442/442 462/446/446 432/445/445\nf 403/428/428 414/447/447 441/448/448\nf 414/447/447 403/428/428 437/449/449\nf 470/450/450 414/447/447 506/451/451\nf 414/447/447 470/450/450 441/448/448\nf 471/452/452 414/447/447 507/453/453\nf 414/447/447 471/452/452 506/451/451\nf 472/454/454 414/447/447 437/449/449\nf 414/447/447 472/454/454 507/453/453\nf 404/426/426 415/455/455 443/456/456\nf 415/455/455 404/426/426 438/427/427\nf 469/457/457 415/455/455 505/458/458\nf 415/455/455 469/457/457 443/456/456\nf 470/450/450 415/455/455 441/448/448\nf 415/455/455 470/450/450 505/458/458\nf 403/428/428 415/455/455 438/427/427\nf 415/455/455 403/428/428 441/448/448\nf 462/446/446 416/459/459 432/445/445\nf 416/459/459 462/446/446 497/460/460\nf 401/411/411 416/459/459 440/414/414\nf 416/459/459 401/411/411 432/445/445\nf 460/419/419 416/459/459 496/461/461\nf 416/459/459 460/419/419 440/414/414\nf 461/462/462 416/459/459 497/460/460\nf 416/459/459 461/462/462 496/461/461\nf 464/463/463 417/464/464 500/465/465\nf 417/464/464 464/463/463 499/466/466\nf 457/431/431 417/464/464 434/430/430\nf 417/464/464 457/431/431 500/465/465\nf 402/415/415 417/464/464 442/443/443\nf 417/464/464 402/415/415 434/430/430\nf 463/441/441 417/464/464 499/466/466\nf 417/464/464 463/441/441 442/443/443\nf 467/439/439 418/467/467 503/468/468\nf 418/467/467 467/439/439 439/440/440\nf 468/469/469 418/467/467 504/470/470\nf 418/467/467 468/469/469 503/468/468\nf 469/457/457 418/467/467 443/456/456\nf 418/467/467 469/457/457 504/470/470\nf 404/426/426 418/467/467 439/440/440\nf 418/467/467 404/426/426 443/456/456\nf 473/471/471 419/472/472 509/473/473\nf 419/472/472 473/471/471 508/474/474\nf 474/420/420 419/472/472 433/423/423\nf 419/472/472 474/420/420 509/473/473\nf 403/428/428 419/472/472 437/449/449\nf 419/472/472 403/428/428 433/423/423\nf 472/454/454 419/472/472 508/474/474\nf 419/472/472 472/454/454 437/449/449\nf 405/475/475 420/476/476 446/477/477\nf 420/476/476 405/475/475 444/478/478\nf 476/479/479 420/476/476 511/480/480\nf 420/476/476 476/479/479 446/477/477\nf 475/481/481 420/476/476 445/482/482\nf 420/476/476 475/481/481 511/480/480\nf 406/483/483 420/476/476 444/478/478\nf 420/476/476 406/483/483 445/482/482\nf 477/484/484 421/485/485 449/486/486\nf 421/485/485 477/484/484 512/487/487\nf 408/488/488 421/485/485 448/489/489\nf 421/485/485 408/488/488 449/486/486\nf 407/490/490 421/485/485 447/491/491\nf 421/485/485 407/490/490 448/489/489\nf 478/492/492 421/485/485 512/487/487\nf 421/485/485 478/492/492 447/491/491\nf 406/483/483 422/493/493 445/482/482\nf 422/493/493 406/483/483 450/494/494\nf 475/481/481 422/493/493 514/495/495\nf 422/493/493 475/481/481 445/482/482\nf 480/496/496 422/493/493 513/497/497\nf 422/493/493 480/496/496 514/495/495\nf 479/498/498 422/493/493 450/494/494\nf 422/493/493 479/498/498 513/497/497\nf 478/492/492 423/499/499 447/491/491\nf 423/499/499 478/492/492 515/500/500\nf 407/490/490 423/499/499 451/501/501\nf 423/499/499 407/490/490 447/491/491\nf 482/502/502 423/499/499 516/503/503\nf 423/499/499 482/502/502 451/501/501\nf 481/504/504 423/499/499 515/500/500\nf 423/499/499 481/504/504 516/503/503\nf 483/505/505 424/506/506 517/507/507\nf 424/506/506 483/505/505 452/508/508\nf 484/509/509 424/506/506 453/510/510\nf 424/506/506 484/509/509 517/507/507\nf 405/475/475 424/506/506 444/478/478\nf 424/506/506 405/475/475 453/510/510\nf 406/483/483 424/506/506 452/508/508\nf 424/506/506 406/483/483 444/478/478\nf 408/488/488 425/511/511 455/512/512\nf 425/511/511 408/488/488 454/513/513\nf 487/514/514 425/511/511 519/515/515\nf 425/511/511 487/514/514 455/512/512\nf 486/516/516 425/511/511 518/517/517\nf 425/511/511 486/516/516 519/515/515\nf 485/518/518 425/511/511 454/513/513\nf 425/511/511 485/518/518 518/517/517\nf 407/490/490 426/519/519 448/489/489\nf 426/519/519 407/490/490 456/520/520\nf 408/488/488 426/519/519 454/513/513\nf 426/519/519 408/488/488 448/489/489\nf 485/518/518 426/519/519 520/521/521\nf 426/519/519 485/518/518 454/513/513\nf 488/522/522 426/519/519 456/520/520\nf 426/519/519 488/522/522 520/521/521\nf 484/509/509 427/523/523 522/524/524\nf 427/523/523 484/509/509 453/510/510\nf 489/525/525 427/523/523 521/526/526\nf 427/523/523 489/525/525 522/524/524\nf 476/479/479 427/523/523 446/477/477\nf 427/523/523 476/479/479 521/526/526\nf 405/475/475 427/523/523 453/510/510\nf 427/523/523 405/475/475 446/477/477\nf 490/527/527 428/528/528 524/529/529\nf 428/528/528 490/527/527 523/530/530\nf 483/505/505 428/528/528 452/508/508\nf 428/528/528 483/505/505 524/529/529\nf 406/483/483 428/528/528 450/494/494\nf 428/528/528 406/483/483 452/508/508\nf 479/498/498 428/528/528 523/530/530\nf 428/528/528 479/498/498 450/494/494\nf 482/502/502 429/531/531 451/501/501\nf 429/531/531 482/502/502 525/532/532\nf 407/490/490 429/531/531 456/520/520\nf 429/531/531 407/490/490 451/501/501\nf 488/522/522 429/531/531 526/533/533\nf 429/531/531 488/522/522 456/520/520\nf 491/534/534 429/531/531 525/532/532\nf 429/531/531 491/534/534 526/533/533\nf 492/535/535 430/536/536 528/537/537\nf 430/536/536 492/535/535 527/538/538\nf 487/514/514 430/536/536 455/512/512\nf 430/536/536 487/514/514 528/537/537\nf 408/488/488 430/536/536 449/486/486\nf 430/536/536 408/488/488 455/512/512\nf 477/484/484 430/536/536 527/538/538\nf 430/536/536 477/484/484 449/486/486\no chassis_Mesh.0001\nv 1.326064 0.105994 -4.330799\nv 1.550043 0.038117 -2.094669\nv 1.528839 0.027034 -0.116067\nv 1.521304 0.225536 2.529991\nv 1.176537 0.199554 2.706995\nv 1.364313 1.459920 -2.045561\nv 0.000000 1.552357 -2.459394\nv 1.404195 1.527994 0.103957\nv 1.295069 1.686903 2.180676\nv 0.000000 1.722355 2.508084\nv 1.225425 1.658707 2.620210\nv 0.000000 1.681440 2.898508\nv 1.354156 0.699527 -4.399408\nv 1.303503 1.194168 2.718198\nv 1.515767 1.116989 2.479697\nv 1.560449 0.840010 -0.023720\nv 1.569262 0.757148 -2.079694\nv 0.954093 2.072201 -1.042729\nv 0.000000 2.201452 1.235985\nv 0.927351 2.172676 1.068916\nv 0.955954 2.186309 0.227510\nv 1.396127 1.355853 -3.321762\nv 1.692547 1.078412 -3.296086\nv 0.736426 0.105994 -4.639240\nv 0.859086 0.218146 2.886802\nv 0.697214 1.001945 -4.686438\nv 0.645894 1.547877 -2.397425\nv 0.461415 2.273453 0.236687\nv 0.722957 1.721693 2.450036\nv 0.847093 1.699548 2.821479\nv 0.777000 0.668090 -4.734299\nv 0.871040 1.183129 2.971509\nv 0.464217 2.139773 -1.079189\nv 0.462379 2.212501 1.186043\nv 0.723607 1.434382 -3.530740\nv 1.537572 0.019059 -0.850568\nv 1.411427 1.477942 -0.806746\nv 1.569098 0.824272 -0.843311\nv 0.928397 2.164381 -0.611175\nv 0.461697 2.223778 -0.619152\nv 1.682657 0.124280 -3.992747\nv 1.692547 0.674376 -3.926337\nv 1.366552 1.153495 -4.019666\nv 0.731884 0.105994 -4.326625\nv 0.717053 1.259933 -4.228269\nv 1.380133 1.420096 -2.587785\nv 1.685446 0.080527 -2.585223\nv 1.692547 0.701983 -2.661592\nv 0.579292 1.513439 -2.896374\nv 1.685151 0.067143 0.884762\nv 1.355025 1.573519 0.959264\nv 1.692547 0.732796 0.996604\nv 1.090420 1.823657 -1.451728\nv 1.173564 1.872830 0.163906\nv 1.528303 0.033508 0.313278\nv 1.554182 0.830642 0.372034\nv 0.926521 2.208808 0.618603\nv 0.461415 2.266407 0.679467\nv 1.379900 1.553845 0.510329\nv 1.208517 1.546349 -1.806284\nv 1.064278 1.742974 1.961072\nv 1.291942 1.625583 0.132239\nv 0.655266 1.574574 -2.205849\nv 0.669445 1.742748 2.265465\nv 1.298965 1.556003 -0.784725\nv 1.264007 1.651315 0.997221\nv 1.289356 1.633631 0.531846\nv 1.262355 0.262336 2.842423\nv 1.461931 0.248584 2.635550\nv 1.468657 1.061878 2.660625\nv 1.303489 1.119235 2.869638\nv 0.865201 1.126991 3.125181\nv 0.861345 0.220451 3.084242\nv 1.534857 0.026830 -1.471730\nv 1.561538 0.789456 -1.456758\nv 1.407408 1.459293 -1.406276\nv 1.285594 1.540295 -1.312217\nv 1.345894 1.628858 1.558812\nv 1.692547 1.082042 1.584790\nv 1.206985 1.698089 1.516985\nv 1.283203 0.645978 2.876607\nv 1.536397 0.589925 2.533818\nv 0.830189 0.693251 3.006964\nv 1.477116 0.619535 2.651779\nv 1.546124 0.461342 -0.073945\nv 1.562804 0.406752 -2.083925\nv 1.555032 0.440216 -0.847636\nv 1.692547 0.387317 -2.582381\nv 1.692547 0.429885 0.907611\nv 1.545412 0.472353 0.322700\nv 1.549289 0.423157 -1.464630\nv 1.449339 0.029754 -2.095919\nv 1.427979 0.019196 -0.096859\nv 1.013649 0.212786 2.826169\nv 1.014563 1.517832 -2.280139\nv 1.101319 1.182714 2.874214\nv 0.719120 2.123509 -1.038367\nv 1.056717 0.105994 -4.509810\nv 0.705832 2.260190 0.232580\nv 1.028818 1.717963 2.361184\nv 1.055056 1.697122 2.729676\nv 1.081842 0.670062 -4.597358\nv 0.706994 2.213979 1.126274\nv 1.065364 1.399835 -3.425699\nv 1.432636 0.011221 -0.848399\nv 0.707690 2.211278 -0.615536\nv 1.051199 0.105994 -4.296532\nv 1.063661 1.223843 -4.115712\nv 1.635435 0.070635 -2.593796\nv 1.030523 1.483271 -2.724616\nv 1.634113 0.057036 0.895944\nv 1.436675 0.026023 0.332891\nv 0.705817 2.259863 0.647832\nv 0.966945 1.551040 -2.066844\nv 0.914355 1.744001 2.135153\nv 1.109161 1.126575 3.014156\nv 1.088959 0.251233 2.989652\nv 1.431188 0.018992 -1.469890\nv 1.117132 0.649858 3.009389\nv 1.342087 0.404621 -4.233677\nv 0.776212 0.407297 -4.699255\nv 1.692547 0.389815 -3.989522\nv 1.038809 0.402380 -4.582524\nv 1.692547 0.968697 -2.900573\nv 1.392384 1.395510 -2.963620\nv 0.671395 1.480201 -3.207159\nv 1.049674 1.449662 -3.084716\nv 1.383845 1.276042 -3.684131\nv 1.692547 0.965076 -3.677497\nv 0.747622 1.362134 -3.874883\nv 1.067505 1.322749 -3.777960\nv 1.692547 0.974311 1.219067\nv 1.115647 1.906810 1.254273\nv 1.222987 1.688186 1.276787\nv 1.348637 1.599464 1.271860\nv 0.958894 2.121384 1.246741\nv 0.469723 2.169980 1.367230\nv 0.716140 2.173181 1.306415\nv 1.338420 1.653150 1.850134\nv 1.692547 1.002362 1.931319\nv 1.160393 1.722418 1.740977\nv 1.692547 0.550143 2.292394\nv 1.685794 0.248381 2.326484\nv 0.000000 0.862397 -4.834357\nv 1.321372 0.847858 -4.401636\nv 1.300462 1.442659 2.654050\nv 1.442448 1.417742 2.343986\nv 1.509102 1.198268 0.045528\nv 1.510484 1.131048 -2.064419\nv 1.548468 1.232937 -3.301346\nv 0.737406 0.848676 -4.753607\nv 1.518156 1.178205 -0.828757\nv 1.513505 0.985691 -3.976706\nv 1.531680 1.162813 -2.577466\nv 1.476508 1.252588 0.921169\nv 1.485074 1.223652 0.445603\nv 1.513558 1.151615 -1.440485\nv 1.480590 1.380759 1.582870\nv 1.052706 0.834672 -4.605454\nv 1.543113 1.210694 -2.925766\nv 1.536199 1.139432 -3.673517\nv 1.477893 1.317029 1.242470\nv 1.480189 1.392952 1.961546\nv 0.000000 0.933110 3.219607\nv 1.293088 0.911196 2.886239\nv 1.541404 0.862919 2.512503\nv 0.862272 0.933062 3.143277\nv 1.483448 0.876655 2.651094\nv 1.101738 0.909216 3.030946\nv 1.692547 0.818579 2.159213\nv 1.672580 0.048313 0.739997\nv 1.669590 0.821161 0.888966\nv 1.669057 1.088880 2.012805\nv 1.670459 1.174909 1.583028\nv 1.677143 0.457831 0.773008\nv 1.670038 1.069813 1.201088\nv 1.676579 0.565573 2.391848\nv 1.664251 0.214327 2.409157\nv 1.677296 0.851500 2.270469\nv 1.657966 0.116299 -4.074936\nv 1.671648 0.722656 -4.006332\nv 1.680218 1.145400 -3.298747\nv 1.677410 0.065505 -2.470015\nv 1.675934 0.777380 -2.565858\nv 1.680047 0.399275 -2.466752\nv 1.676146 0.394804 -4.067647\nv 1.679371 1.045049 -2.887969\nv 1.678468 1.033228 -3.697145\nv 1.403221 0.166413 2.532502\nv 1.637007 0.206004 2.314923\nv 0.372397 0.105994 -4.705466\nv 0.229662 2.281279 0.238412\nv 0.373933 1.722279 2.497054\nv 0.522388 1.684611 2.902563\nv 0.359647 0.661556 -4.719156\nv 0.230158 2.206036 1.222392\nv 0.308273 1.516765 -3.598675\nv 0.520980 0.218831 2.937531\nv 0.370699 1.002851 -4.736413\nv 0.324324 1.552276 -2.444653\nv 0.535193 1.198648 3.019430\nv 0.230158 2.145114 -1.099184\nv 0.229662 2.230017 -0.625440\nv 0.373224 0.105994 -4.364583\nv 0.364125 1.241131 -4.330797\nv 0.317270 1.521517 -2.923665\nv 0.229662 2.267310 0.696349\nv 0.341128 1.743050 2.342721\nv 0.328238 1.577974 -2.265748\nv 0.516549 1.127050 3.184144\nv 0.516616 0.220535 3.141752\nv 0.510907 0.662833 3.058733\nv 0.359735 0.418711 -4.687158\nv 0.301457 1.519355 -3.273170\nv 0.318841 1.503739 -3.957752\nv 0.234025 2.164327 1.406134\nv 0.488003 1.441841 2.997674\nv 0.370293 0.862670 -4.810978\nv 0.515848 0.933110 3.201950\nv 1.574780 0.047134 -2.480176\nv 1.564988 0.034797 0.765369\nv 1.581800 0.152763 2.391207\nv 1.304886 0.105994 -4.142727\nv 0.000000 0.196329 -4.788999\nv 0.735012 0.209495 -4.694183\nv 1.066617 0.209103 -4.545908\nv 1.335199 0.196386 -4.368970\nv 1.692547 0.201519 -3.985838\nv 1.672130 0.197071 -4.072058\nv 0.371278 0.196329 -4.764088\nv 1.371961 0.116302 -4.421684\nv 1.069070 0.116302 -4.640778\nv 0.742617 0.116302 -4.790075\nv 0.377079 0.116302 -4.860282\nv 0.377079 0.178151 -4.868793\nv 0.742957 0.178151 -4.798924\nv 1.071791 0.178151 -4.649825\nv 1.376722 0.178151 -4.430565\nv 1.511544 0.105994 -4.175447\nv 0.000000 1.141283 -4.572249\nv 1.514091 0.676665 -4.224150\nv 0.733343 1.140587 -4.479484\nv 1.340358 1.091584 -4.200935\nv 1.598060 0.116276 -3.992950\nv 1.049353 1.142879 -4.326089\nv 1.529223 0.400574 -4.201533\nv 1.451283 0.919212 -4.199341\nv 0.368082 1.141201 -4.544583\nv 1.496584 0.208876 -4.210937\nv 1.526338 0.116302 -4.240894\nv 1.529096 0.178151 -4.247603\nv 0.722368 2.085497 -1.143062\nv 0.913504 2.040475 -1.151429\nv 1.040575 1.831125 -1.477284\nv 1.116471 1.593827 -1.810127\nv 0.934707 1.578487 -2.006766\nv 0.642431 1.597974 -2.142220\nv 0.321938 1.599812 -2.201885\nv 0.000000 1.599854 -2.233462\nv 0.000000 2.109646 -1.222413\nv 0.232894 2.107662 -1.211419\nv 0.469277 2.102237 -1.189349\nv 0.720424 2.059641 -1.152186\nv 0.898901 2.017364 -1.161893\nv 1.020408 1.816182 -1.476675\nv 1.133762 1.549377 -1.819397\nv 0.922598 1.570983 -1.985167\nv 0.634889 1.589317 -2.117516\nv 0.317183 1.590616 -2.176089\nv 0.231705 2.081817 -1.220208\nv 0.468619 2.076309 -1.198172\nv 0.333738 1.763196 2.281274\nv 0.646607 1.764269 2.201982\nv 0.866034 1.770516 2.074927\nv 1.000247 1.779281 1.913991\nv 1.107784 1.765159 1.710715\nv 1.160961 1.743301 1.506423\nv 1.175038 1.749246 1.347448\nv 1.105976 1.908696 1.310466\nv 0.955361 2.099249 1.316805\nv 0.726397 2.148520 1.368950\nv 0.479763 2.144209 1.428864\nv 0.239539 2.139315 1.468077\nv 0.000000 1.753285 2.272118\nv 0.328343 1.753236 2.256424\nv 0.636073 1.754797 2.178433\nv 0.850608 1.762539 2.055459\nv 0.984558 1.774774 1.898539\nv 1.093961 1.763203 1.698092\nv 1.147231 1.742333 1.497960\nv 1.170420 1.725312 1.337411\nv 1.098691 1.892764 1.321973\nv 0.952146 2.077461 1.328439\nv 0.726016 2.124269 1.379344\nv 0.479441 2.119692 1.439146\nv 0.238082 2.115001 1.478549\nv 0.000000 2.112630 1.490335\nv 1.409643 1.502387 -0.336717\nv 0.926760 2.198615 -0.188376\nv 1.535215 0.022019 -0.469517\nv 1.567250 0.835195 -0.416305\nv 0.461415 2.262508 -0.184328\nv 1.302907 1.582471 -0.321465\nv 1.552926 0.450925 -0.443792\nv 1.431379 0.014181 -0.458432\nv 0.705832 2.249480 -0.185733\nv 1.515862 1.188265 -0.375161\nv 0.229662 2.270102 -0.186484\nv 0.983890 2.148484 -0.194106\nv 1.008226 2.119492 0.113598\nv 1.168313 1.876042 0.105297\nv 1.257436 1.679854 0.033825\nv 1.265294 1.631627 -0.327483\nv 1.260196 1.605581 -0.782965\nv 1.244518 1.589302 -1.279821\nv 1.203015 1.607124 -1.601848\nv 1.118376 1.799111 -1.406586\nv 1.011994 2.023599 -1.014153\nv 0.986539 2.116254 -0.603751\nv 0.982782 2.158309 0.617707\nv 0.983377 2.125241 1.048314\nv 1.006522 2.078793 1.182111\nv 1.118891 1.904951 1.195314\nv 1.197266 1.737623 1.189378\nv 1.227764 1.698656 0.991935\nv 1.252176 1.682103 0.537796\nv 1.254203 1.689327 0.240454\nv 1.174546 1.867505 0.221504\nv 1.008572 2.121584 0.314737\nv 0.978734 2.121737 -0.195799\nv 1.001306 2.094698 0.094045\nv 1.150744 1.867663 0.086221\nv 1.243168 1.664670 0.065096\nv 1.239812 1.641273 -0.329893\nv 1.234500 1.615820 -0.782818\nv 1.219228 1.597772 -1.271602\nv 1.188907 1.587101 -1.626262\nv 1.111742 1.779325 -1.387942\nv 1.008440 1.997972 -1.005150\nv 0.982130 2.089637 -0.600033\nv 0.977058 2.131871 0.618689\nv 0.977819 2.099117 1.042454\nv 0.999025 2.057054 1.163680\nv 1.103968 1.894987 1.174592\nv 1.180976 1.722747 1.191904\nv 1.202240 1.706771 0.986795\nv 1.226203 1.690763 0.538979\nv 1.237735 1.673522 0.220610\nv 1.158741 1.856804 0.240262\nv 1.001705 2.097051 0.329454\nv 0.761835 0.997954 -4.671560\nv 0.795539 1.110860 -4.504749\nv 1.052415 1.116459 -4.368319\nv 1.331817 1.073652 -4.239427\nv 1.412918 0.949055 -4.237143\nv 1.305599 0.888129 -4.398843\nv 1.045633 0.873598 -4.596537\nv 0.797982 0.887991 -4.717112\nv 0.768000 0.985329 -4.653887\nv 0.802631 1.087624 -4.499567\nv 1.050192 1.093030 -4.369059\nv 1.317705 1.057983 -4.240022\nv 1.387768 0.949416 -4.235727\nv 1.287380 0.893095 -4.385079\nv 1.035027 0.878761 -4.576162\nv 0.800774 0.891772 -4.690798\nv 0.000000 0.794547 -4.826179\nv 0.363793 0.794545 -4.806451\nv 0.646451 0.780676 -4.764459\nv 0.685841 0.661590 -4.749203\nv 0.685851 0.413548 -4.715448\nv 0.646605 0.264371 -4.701361\nv 0.364685 0.245482 -4.742065\nv 0.000000 0.661835 -4.737840\nv 0.000000 0.776389 -4.746131\nv 0.359399 0.776379 -4.727590\nv 0.626984 0.764961 -4.688276\nv 0.663908 0.660721 -4.674114\nv 0.663861 0.418097 -4.640915\nv 0.627083 0.283466 -4.628418\nv 0.360467 0.266921 -4.666701\nv 0.000000 0.266847 -4.686984\nv 0.000000 0.418695 -4.706748\nv 1.091712 1.281031 2.850985\nv 1.229331 1.301321 2.756346\nv 1.231774 1.443645 2.731834\nv 1.181055 1.577247 2.717646\nv 1.056409 1.601197 2.801158\nv 0.877082 1.602458 2.889130\nv 0.648458 1.582255 2.941423\nv 0.613910 1.440750 2.985054\nv 0.647765 1.301323 2.986628\nv 0.877977 1.281408 2.941106\nv 1.079852 1.304713 2.835098\nv 1.202819 1.321201 2.751151\nv 1.204172 1.440585 2.729949\nv 1.158827 1.553570 2.717224\nv 1.046882 1.573894 2.791521\nv 0.874624 1.575412 2.875657\nv 0.662961 1.558282 2.924129\nv 0.631127 1.438822 2.963352\nv 0.662094 1.322081 2.964489\nv 0.874672 1.305390 2.921976\nv 1.642243 0.959584 -2.903744\nv 1.642243 0.695401 -2.669829\nv 1.642243 0.385416 -2.593596\nv 1.642243 0.201486 -3.976309\nv 1.642243 0.389124 -3.979786\nv 1.642243 0.669514 -3.917532\nv 1.642243 0.955856 -3.673445\nv 1.642243 1.068910 -3.295678\nv 1.642243 0.963835 1.223228\nv 1.642243 1.070968 1.585176\nv 1.642243 0.993600 1.925071\nv 1.642243 0.813227 2.146734\nv 1.642243 0.548085 2.279090\nv 1.642243 0.425566 0.919180\nv 1.642243 0.725156 1.005945\nv 1.549304 0.178647 -0.103682\nv 1.568097 0.165715 -2.089259\nv 1.558479 0.165051 -0.849815\nv 1.692547 0.163331 -2.587375\nv 1.546949 0.188782 0.310973\nv 1.554599 0.164192 -1.469507\nv 1.692547 0.168431 0.895451\nv 1.682317 0.165495 0.741510\nv 1.686404 0.157571 -2.462320\nv 1.556105 0.171057 -0.461726\nv 1.642243 0.162731 -2.598330\nv 1.642243 0.167442 0.908055\nv 1.668106 0.034185 -1.473114\nv 1.668128 0.045467 -2.095706\nv 1.671513 0.115806 -2.092508\nv 1.672451 0.109974 -1.471748\nv 1.675987 0.107810 -0.851557\nv 1.673565 0.112749 -0.466379\nv 1.666764 0.119438 -0.110351\nv 1.649726 0.129110 0.309833\nv 1.645306 0.043289 0.310012\nv 1.661791 0.035712 -0.118758\nv 1.668592 0.030458 -0.471582\nv 1.671093 0.027215 -0.852130\nv 0.000000 1.520926 -3.616065\nv 0.000000 1.523280 -3.294091\nv 0.511195 1.507543 -3.233307\nv 0.545848 1.497965 -3.557812\nv 0.576700 1.475614 -3.908568\nv 0.588709 1.443333 -4.222913\nv 0.326786 1.478967 -4.279983\nv 0.000000 1.483158 -4.296213\nv 0.355595 1.288550 -4.285846\nv 0.325209 1.444695 -4.307991\nv 0.554425 1.417327 -4.253970\nv 0.603786 1.306058 -4.238980\nv 0.343843 1.302860 -4.170685\nv 0.000000 1.303946 -4.186034\nv 0.000000 1.451525 -4.206171\nv 0.314357 1.448009 -4.192046\nv 0.536435 1.422238 -4.138737\nv 0.582444 1.319059 -4.124672\nv 0.000000 0.303585 3.173644\nv 0.514154 0.303588 3.157584\nv 0.850789 0.303597 3.103985\nv 1.000826 0.350624 3.042610\nv 1.018617 0.650234 3.047204\nv 1.002625 0.802325 3.061893\nv 0.849150 0.820010 3.127146\nv 0.513214 0.820051 3.180267\nv 0.000000 0.820054 3.196138\nv 0.000000 0.322664 3.058445\nv 0.498605 0.322667 3.042656\nv 0.831520 0.322678 2.989890\nv 0.972061 0.367943 2.933341\nv 0.988245 0.655236 2.938200\nv 0.973548 0.795129 2.951682\nv 0.829553 0.811060 3.011961\nv 0.497530 0.811101 3.064151\nv 0.000000 0.811105 3.079725\nv 0.826378 0.630387 2.989908\nv 0.607590 0.599075 3.028692\nv 0.608177 0.410706 3.020359\nv 0.828750 0.379326 2.977998\nv 0.924568 0.410657 2.941545\nv 0.923840 0.598619 2.950681\nv 0.798687 0.627478 2.876380\nv 0.586779 0.598157 2.913766\nv 0.587381 0.421771 2.905950\nv 0.801218 0.392389 2.865109\nv 0.890647 0.421729 2.831527\nv 0.889925 0.597736 2.840124\nv 1.357214 0.629190 -4.376260\nv 1.466308 0.599346 -4.273518\nv 1.472744 0.401940 -4.252886\nv 1.445989 0.262577 -4.256669\nv 1.332215 0.244319 -4.347783\nv 1.142686 0.262853 -4.464826\nv 1.119360 0.403614 -4.499822\nv 1.158648 0.599627 -4.504794\nv 1.353233 0.623824 -4.233678\nv 1.457577 0.594982 -4.233678\nv 1.463652 0.404564 -4.233678\nv 1.438172 0.272117 -4.233678\nv 1.329305 0.254844 -4.233678\nv 1.145125 0.272433 -4.233678\nv 1.122283 0.406476 -4.233678\nv 1.160454 0.595303 -4.233678\nv 0.482244 2.192492 0.167156\nv 0.000000 2.202755 0.215465\nv 0.478512 2.151901 -0.582726\nv 0.485469 2.186187 0.701245\nv 0.000000 2.193324 0.742468\nv 1.606405 1.632976 -1.455512\nv 1.519282 1.623045 -1.513539\nv 1.433660 1.632976 -1.547159\nv 1.613462 1.606120 -1.274918\nv 1.477291 1.582546 -1.352592\nv 1.332981 1.600293 -1.431751\nv 1.606405 1.699899 -1.455512\nv 1.519282 1.707228 -1.513539\nv 1.433660 1.699899 -1.547159\nv 1.613462 1.747565 -1.274918\nv 1.477291 1.771139 -1.352592\nv 1.332981 1.753393 -1.431751\nv 1.631178 1.615073 -1.362563\nv 1.498423 1.595041 -1.433410\nv 1.361056 1.611060 -1.505046\nv 1.498423 1.755300 -1.433409\nv 1.631178 1.735268 -1.362562\nv 1.361056 1.740486 -1.505046\nv 1.475932 1.598528 -1.343914\nv 1.598189 1.618106 -1.273328\nv 1.598189 1.735579 -1.273328\nv 1.475932 1.755157 -1.343914\nv 1.353673 1.735579 -1.414499\nv 1.353673 1.618107 -1.414500\nv 1.487599 1.612403 -1.364124\nv 1.599344 1.628513 -1.299608\nv 1.599344 1.725173 -1.299608\nv 1.487599 1.741283 -1.364124\nv 1.375855 1.725173 -1.428639\nv 1.375855 1.628513 -1.428639\nv 1.330762 1.650071 -1.498829\nv 1.317187 1.646979 -1.458537\nv 1.315820 1.701853 -1.458537\nv 1.329520 1.699391 -1.498829\nv 1.281851 1.631440 -1.538073\nv 1.273808 1.627771 -1.497039\nv 1.260087 1.670022 -1.497163\nv 1.269389 1.669818 -1.538185\nv 1.234613 1.545465 -1.596919\nv 1.236674 1.544390 -1.534356\nv 1.192559 1.595109 -1.535343\nv 1.194543 1.591533 -1.597816\nv -1.326064 0.105994 -4.330799\nv -1.304886 0.105994 -4.142727\nv -1.051199 0.105994 -4.296532\nv -1.056717 0.105994 -4.509810\nv -1.550043 0.038117 -2.094669\nv -1.534857 0.026830 -1.471730\nv -1.431188 0.018992 -1.469890\nv -1.449339 0.029754 -2.095919\nv -1.528839 0.027034 -0.116067\nv -1.528303 0.033508 0.313278\nv -1.436675 0.026023 0.332891\nv -1.427979 0.019196 -0.096859\nv -0.954093 2.072201 -1.042729\nv -0.719119 2.123509 -1.038367\nv -0.707690 2.211278 -0.615536\nv -0.928397 2.164381 -0.611175\nv -0.955954 2.186309 0.227510\nv -0.705832 2.260190 0.232580\nv -0.705818 2.259863 0.647832\nv -0.926521 2.208808 0.618603\nv -1.295069 1.686903 2.180676\nv -1.028818 1.717963 2.361184\nv -1.055056 1.697122 2.729676\nv -1.225425 1.658707 2.620211\nv -1.371961 0.116302 -4.421684\nv -1.069070 0.116302 -4.640778\nv -1.071791 0.178151 -4.649825\nv -1.376722 0.178151 -4.430565\nv -1.354156 0.699527 -4.399408\nv -1.081842 0.670062 -4.597357\nv -1.052706 0.834672 -4.605454\nv -1.321373 0.847858 -4.401636\nv -0.498605 0.322667 3.042656\nv -0.510907 0.662833 3.058733\nv 0.000000 0.656056 3.072963\nv 0.000000 1.201412 3.045899\nv -0.535193 1.198648 3.019430\nv -0.488003 1.441841 2.997674\nv 0.000000 1.441980 3.009868\nv -1.262355 0.262336 2.842423\nv -1.461931 0.248584 2.635550\nv -1.477116 0.619535 2.651779\nv -1.283203 0.645978 2.876607\nv -1.661791 0.035712 -0.118758\nv -1.668592 0.030458 -0.471582\nv -1.673565 0.112749 -0.466379\nv -1.666764 0.119438 -0.110351\nv -1.668128 0.045467 -2.095706\nv -1.677410 0.065505 -2.470015\nv -1.686404 0.157571 -2.462320\nv -1.671513 0.115806 -2.092508\nv -1.303503 1.194168 2.718198\nv -1.515767 1.116989 2.479697\nv -1.442448 1.417742 2.343986\nv -1.300462 1.442659 2.654050\nv -1.669057 1.088880 2.012805\nv -1.480189 1.392952 1.961546\nv -1.560449 0.840010 -0.023720\nv -1.567250 0.835195 -0.416305\nv -1.515862 1.188265 -0.375161\nv -1.509102 1.198268 0.045528\nv -1.569262 0.757148 -2.079694\nv -1.675934 0.777380 -2.565858\nv -1.531680 1.162813 -2.577465\nv -1.510484 1.131049 -2.064418\nv -1.364313 1.459920 -2.045561\nv -1.014563 1.517832 -2.280139\nv -0.966945 1.551040 -2.066844\nv -1.208517 1.546349 -1.806284\nv -0.373933 1.722280 2.497054\nv -0.341128 1.743049 2.342721\nv 0.000000 1.743517 2.359277\nv -1.338420 1.653150 1.850134\nv -1.160393 1.722418 1.740977\nv -1.064278 1.742974 1.961071\nv -1.404195 1.527994 0.103957\nv -1.409643 1.502387 -0.336717\nv -1.302907 1.582471 -0.321465\nv -1.291942 1.625583 0.132239\nv -0.301457 1.519355 -3.273170\nv -0.308273 1.516765 -3.598675\nv -1.692547 1.078412 -3.296086\nv -1.692547 0.965076 -3.677497\nv -1.678468 1.033228 -3.697145\nv -1.680218 1.145400 -3.298747\nv -0.697214 1.001945 -4.686438\nv -0.370699 1.002851 -4.736413\nv -0.368082 1.141201 -4.544583\nv -0.733343 1.140587 -4.479484\nv -0.464217 2.139773 -1.079189\nv -0.230158 2.145115 -1.099184\nv -0.229662 2.230017 -0.625440\nv -0.461697 2.223778 -0.619152\nv -0.461415 2.273453 0.236687\nv -0.229662 2.281279 0.238412\nv -0.229662 2.267310 0.696349\nv -0.461415 2.266407 0.679467\nv -0.722957 1.721693 2.450036\nv -0.522388 1.684611 2.902563\nv -0.847093 1.699548 2.821479\nv -0.742617 0.116302 -4.790075\nv -0.377079 0.116302 -4.860282\nv -0.377079 0.178151 -4.868793\nv -0.742957 0.178151 -4.798924\nv -0.663908 0.660721 -4.674114\nv -0.359647 0.661556 -4.719156\nv -0.359399 0.776379 -4.727590\nv -0.626984 0.764961 -4.688276\nv -0.801218 0.392389 2.865109\nv -0.890647 0.421729 2.831527\nv -0.889925 0.597736 2.840124\nv -0.798687 0.627478 2.876380\nv -0.645894 1.547877 -2.397425\nv -0.324324 1.552276 -2.444653\nv -0.328238 1.577974 -2.265749\nv -0.655266 1.574574 -2.205849\nv -0.914355 1.744001 2.135153\nv -0.669445 1.742748 2.265465\nv -1.030523 1.483271 -2.724616\nv -0.579292 1.513439 -2.896374\nv -1.537572 0.019059 -0.850568\nv -1.535215 0.022019 -0.469517\nv -1.431379 0.014181 -0.458432\nv -1.432636 0.011221 -0.848399\nv -0.461415 2.262508 -0.184328\nv -0.705832 2.249480 -0.185733\nv -1.671093 0.027215 -0.852130\nv -1.668106 0.034185 -1.473114\nv -1.672451 0.109974 -1.471748\nv -1.675987 0.107810 -0.851557\nv -1.569098 0.824272 -0.843311\nv -1.561538 0.789456 -1.456758\nv -1.513558 1.151615 -1.440485\nv -1.518156 1.178205 -0.828757\nv -1.411427 1.477943 -0.806746\nv -1.407408 1.459293 -1.406276\nv -1.285594 1.540295 -1.312217\nv -1.298965 1.556003 -0.784725\nv 0.000000 2.234632 -0.630501\nv 0.000000 2.275922 -0.188546\nv -0.229662 2.270102 -0.186484\nv -0.717053 1.259933 -4.228269\nv -0.747622 1.362134 -3.874883\nv -1.067505 1.322749 -3.777960\nv -1.063661 1.223843 -4.115713\nv -1.682657 0.124280 -3.992747\nv -1.657966 0.116299 -4.074936\nv -1.672130 0.197071 -4.072058\nv -1.692547 0.201519 -3.985838\nv 0.000000 0.105994 -4.366100\nv 0.000000 0.105994 -4.728241\nv -0.372397 0.105994 -4.705466\nv -0.373224 0.105994 -4.364583\nv 0.000000 1.507746 -3.975478\nv -0.318841 1.503739 -3.957752\nv -0.326786 1.478967 -4.279983\nv -1.692547 0.701983 -2.661592\nv -1.692547 0.968698 -2.900573\nv -1.679371 1.045049 -2.887969\nv -1.685446 0.080527 -2.585224\nv -1.574780 0.047134 -2.480176\nv -1.635435 0.070635 -2.593796\nv 0.000000 1.522411 -2.946418\nv -0.317270 1.521517 -2.923665\nv -1.380133 1.420096 -2.587785\nv -1.392384 1.395510 -2.963619\nv -1.049674 1.449662 -3.084716\nv -1.685151 0.067143 0.884762\nv -1.672580 0.048313 0.739997\nv -1.682317 0.165495 0.741510\nv -1.692547 0.168431 0.895451\nv -1.355025 1.573519 0.959264\nv -1.379900 1.553845 0.510329\nv -1.289356 1.633631 0.531846\nv -1.264007 1.651315 0.997221\nv -1.564988 0.034797 0.765369\nv -0.462379 2.212501 1.186043\nv -0.706994 2.213979 1.126274\nv 0.000000 2.268230 0.705632\nv -0.230158 2.206036 1.222392\nv -1.645306 0.043289 0.310012\nv -1.649726 0.129110 0.309833\nv -1.554182 0.830642 0.372034\nv -1.485074 1.223652 0.445603\nv -1.176537 0.199554 2.706995\nv -1.403221 0.166413 2.532502\nv -1.521304 0.225536 2.529991\nv -1.536397 0.589925 2.533818\nv -1.303489 1.119235 2.869638\nv -1.468657 1.061878 2.660625\nv -1.101319 1.182714 2.874214\nv -1.109161 1.126575 3.014156\nv -0.871040 1.183129 2.971509\nv -0.516549 1.127050 3.184144\nv -0.865201 1.126991 3.125181\nv 0.000000 0.218831 2.955486\nv -0.520980 0.218831 2.937531\nv -0.516616 0.220535 3.141752\nv 0.000000 0.220535 3.159435\nv -0.859086 0.218146 2.886802\nv -1.013649 0.212786 2.826169\nv -1.088959 0.251233 2.989652\nv -0.861345 0.220451 3.084242\nv -1.692547 1.082042 1.584790\nv -1.692547 0.974312 1.219067\nv -1.670038 1.069813 1.201088\nv -1.670459 1.174909 1.583028\nv -1.345894 1.628858 1.558812\nv -1.348637 1.599464 1.271860\nv -1.222987 1.688186 1.276787\nv -1.206985 1.698089 1.516986\nv -0.830189 0.693251 3.006964\nv -0.829553 0.811060 3.011961\nv -0.497530 0.811101 3.064151\nv -1.483448 0.876655 2.651093\nv -1.293088 0.911196 2.886239\nv -1.101738 0.909216 3.030946\nv -1.117132 0.649858 3.009389\nv -1.541404 0.862919 2.512504\nv -1.555032 0.440216 -0.847636\nv -1.552925 0.450925 -0.443792\nv -1.692547 0.387317 -2.582381\nv -1.680047 0.399275 -2.466752\nv -1.549289 0.423157 -1.464630\nv -1.545412 0.472353 0.322700\nv -1.669590 0.821161 0.888966\nv -1.677143 0.457831 0.773008\nv -1.546124 0.461342 -0.073945\nv -1.562804 0.406752 -2.083925\nv -0.731884 0.105994 -4.326625\nv -0.736426 0.105994 -4.639240\nv -0.777000 0.668090 -4.734299\nv -0.737406 0.848676 -4.753607\nv -0.926760 2.198614 -0.188376\nv -1.065364 1.399835 -3.425699\nv -1.396127 1.355853 -3.321763\nv -1.383845 1.276042 -3.684131\nv -0.723607 1.434382 -3.530740\nv -0.671395 1.480201 -3.207159\nv -0.927351 2.172676 1.068916\nv -0.862272 0.933062 3.143277\nv -0.469723 2.169980 1.367230\nv -0.716140 2.173181 1.306415\nv -1.122283 0.406476 -4.233678\nv -1.160454 0.595303 -4.233678\nv -1.353233 0.623824 -4.233678\nv -1.342087 0.404621 -4.233677\nv -0.359735 0.418711 -4.687158\nv -1.457577 0.594982 -4.233678\nv -1.463652 0.404564 -4.233678\nv -0.776212 0.407297 -4.699255\nv -1.038809 0.402380 -4.582524\nv -1.692547 0.674376 -3.926337\nv -1.671648 0.722656 -4.006331\nv -1.366552 1.153494 -4.019665\nv -1.692547 0.732796 0.996604\nv -0.234025 2.164327 1.406134\nv -0.958894 2.121384 1.246741\nv -1.692547 1.002362 1.931319\nv -1.677296 0.851500 2.270469\nv -1.692547 0.818579 2.159213\nv -1.664252 0.214327 2.409157\nv -1.676578 0.565573 2.391849\nv -1.581800 0.152763 2.391207\nv -1.637007 0.206004 2.314923\nv -1.685794 0.248381 2.326484\nv -1.536199 1.139432 -3.673518\nv -1.548468 1.232937 -3.301346\nv 0.000000 1.001242 -4.763881\nv -0.370293 0.862670 -4.810978\nv -1.543113 1.210694 -2.925766\nv -1.476508 1.252588 0.921169\nv -1.477893 1.317029 1.242470\nv -1.480590 1.380759 1.582870\nv -1.513505 0.985691 -3.976706\nv -0.515848 0.933110 3.201951\nv -0.988245 0.655236 2.938200\nv -0.973548 0.795129 2.951682\nv -1.692547 0.429885 0.907611\nv -1.692547 0.550143 2.292394\nv -1.692547 0.163331 -2.587375\nv -1.526338 0.116302 -4.240894\nv -1.529096 0.178151 -4.247603\nv -1.514091 0.676665 -4.224150\nv -1.451283 0.919212 -4.199341\nv -1.692547 0.389815 -3.989522\nv -1.676146 0.394804 -4.067647\nv -0.587381 0.421771 2.905950\nv -0.586779 0.598157 2.913767\nv -0.511195 1.507543 -3.233307\nv -0.545848 1.497965 -3.557812\nv 0.000000 2.147852 -1.111296\nv 0.000000 2.287293 0.239407\nv 0.000000 0.116302 -4.886048\nv 0.000000 0.178151 -4.894287\nv 0.000000 1.578126 -2.299299\nv -0.576700 1.475614 -3.908568\nv -0.588709 1.443333 -4.222913\nv 0.000000 1.127050 3.202099\nv -0.663861 0.418097 -4.640915\nv 0.000000 2.160601 1.419981\nv -1.634113 0.057036 0.895944\nv -1.511544 0.105994 -4.175447\nv -1.598060 0.116276 -3.992950\nv -1.145125 0.272433 -4.233678\nv -1.329305 0.254844 -4.233678\nv -0.360467 0.266921 -4.666701\nv -0.627083 0.283466 -4.628418\nv -0.735012 0.209495 -4.694183\nv -1.066617 0.209103 -4.545909\nv -1.438172 0.272117 -4.233678\nv -0.371278 0.196329 -4.764088\nv -1.335199 0.196386 -4.368970\nv -1.496584 0.208876 -4.210937\nv -1.049353 1.142879 -4.326089\nv -1.340358 1.091584 -4.200935\nv -0.364125 1.241131 -4.330798\nv -1.529223 0.400574 -4.201533\nv 0.000000 1.242388 -4.348976\nv -0.913504 2.040475 -1.151429\nv -0.722368 2.085497 -1.143062\nv -1.090420 1.823657 -1.451728\nv -1.040575 1.831125 -1.477284\nv -1.116471 1.593827 -1.810127\nv -0.934707 1.578487 -2.006766\nv -0.642431 1.597974 -2.142220\nv -0.321938 1.599812 -2.201885\nv -0.232894 2.107662 -1.211419\nv -0.469277 2.102237 -1.189349\nv -0.898901 2.017364 -1.161893\nv -0.720424 2.059641 -1.152186\nv -1.020408 1.816182 -1.476675\nv -1.133762 1.549377 -1.819397\nv -0.922598 1.570983 -1.985167\nv -0.634889 1.589317 -2.117516\nv -0.317183 1.590616 -2.176089\nv 0.000000 1.590611 -2.205761\nv -0.231705 2.081817 -1.220208\nv 0.000000 2.083647 -1.230450\nv -0.468619 2.076309 -1.198172\nv -0.333738 1.763196 2.281274\nv 0.000000 1.763370 2.297487\nv -0.646607 1.764269 2.201982\nv -0.866034 1.770516 2.074927\nv -1.000247 1.779281 1.913992\nv -1.107784 1.765159 1.710715\nv -1.160961 1.743301 1.506423\nv -1.175038 1.749246 1.347448\nv -1.115647 1.906810 1.254273\nv -1.105976 1.908695 1.310466\nv -0.955361 2.099249 1.316805\nv -0.726397 2.148520 1.368950\nv -0.479763 2.144209 1.428864\nv -0.239539 2.139314 1.468077\nv 0.000000 2.136648 1.480356\nv -0.328343 1.753236 2.256424\nv -0.636073 1.754797 2.178433\nv -0.850608 1.762539 2.055459\nv -0.984558 1.774774 1.898539\nv -1.093961 1.763203 1.698092\nv -1.147231 1.742333 1.497960\nv -1.170420 1.725312 1.337411\nv -1.098691 1.892764 1.321973\nv -0.952146 2.077461 1.328439\nv -0.726016 2.124269 1.379344\nv -0.479441 2.119692 1.439146\nv -0.238082 2.115001 1.478549\nv -1.008226 2.119492 0.113598\nv -0.983890 2.148483 -0.194106\nv -1.173564 1.872830 0.163906\nv -1.168313 1.876042 0.105297\nv -1.257436 1.679854 0.033825\nv -1.265294 1.631627 -0.327483\nv -1.260196 1.605582 -0.782965\nv -1.244518 1.589303 -1.279821\nv -1.203015 1.607124 -1.601848\nv -1.118376 1.799111 -1.406586\nv -1.011994 2.023599 -1.014153\nv -0.986539 2.116254 -0.603751\nv -0.983377 2.125241 1.048314\nv -0.982782 2.158309 0.617707\nv -1.006522 2.078793 1.182111\nv -1.118891 1.904950 1.195314\nv -1.197266 1.737622 1.189378\nv -1.227764 1.698655 0.991935\nv -1.252176 1.682103 0.537796\nv -1.254202 1.689327 0.240454\nv -1.174546 1.867505 0.221504\nv -1.008572 2.121584 0.314737\nv -1.001306 2.094698 0.094045\nv -0.978734 2.121737 -0.195799\nv -1.150745 1.867663 0.086221\nv -1.243168 1.664670 0.065096\nv -1.239812 1.641273 -0.329893\nv -1.234500 1.615820 -0.782818\nv -1.219228 1.597772 -1.271602\nv -1.188907 1.587101 -1.626262\nv -1.111742 1.779325 -1.387942\nv -1.008440 1.997972 -1.005150\nv -0.982130 2.089637 -0.600033\nv -0.977819 2.099117 1.042454\nv -0.977058 2.131871 0.618689\nv -0.999025 2.057054 1.163680\nv -1.103968 1.894987 1.174592\nv -1.180976 1.722747 1.191904\nv -1.202240 1.706771 0.986795\nv -1.226203 1.690763 0.538979\nv -1.237735 1.673522 0.220610\nv -1.158741 1.856804 0.240262\nv -1.001705 2.097051 0.329454\nv -0.795539 1.110860 -4.504749\nv -0.761835 0.997954 -4.671561\nv -1.052415 1.116459 -4.368319\nv -1.331817 1.073652 -4.239427\nv -1.412918 0.949055 -4.237143\nv -1.305599 0.888129 -4.398843\nv -1.045634 0.873598 -4.596537\nv -0.797982 0.887991 -4.717112\nv -0.802631 1.087624 -4.499567\nv -0.768000 0.985329 -4.653887\nv -1.050192 1.093030 -4.369059\nv -1.317705 1.057983 -4.240022\nv -1.387768 0.949416 -4.235727\nv -1.287380 0.893095 -4.385079\nv -1.035027 0.878761 -4.576162\nv -0.800774 0.891772 -4.690798\nv -0.363793 0.794545 -4.806450\nv -0.646451 0.780676 -4.764459\nv -0.685841 0.661590 -4.749203\nv -0.685851 0.413548 -4.715448\nv -0.646605 0.264371 -4.701362\nv -0.364685 0.245482 -4.742065\nv 0.000000 0.245474 -4.763638\nv -1.229331 1.301321 2.756346\nv -1.091712 1.281031 2.850985\nv -1.231774 1.443645 2.731834\nv -1.181055 1.577247 2.717646\nv -1.056409 1.601197 2.801158\nv -0.877082 1.602458 2.889130\nv -0.648458 1.582256 2.941423\nv -0.613910 1.440750 2.985054\nv -0.647765 1.301323 2.986627\nv -0.877977 1.281408 2.941106\nv -1.202819 1.321201 2.751151\nv -1.079852 1.304713 2.835099\nv -1.204172 1.440585 2.729949\nv -1.158827 1.553570 2.717224\nv -1.046882 1.573894 2.791521\nv -0.874624 1.575412 2.875657\nv -0.662961 1.558282 2.924129\nv -0.631127 1.438822 2.963352\nv -0.662094 1.322081 2.964489\nv -0.874672 1.305390 2.921976\nv -1.642243 0.695401 -2.669829\nv -1.642243 0.959584 -2.903744\nv -1.642243 0.385416 -2.593596\nv -1.642243 0.162731 -2.598330\nv -1.642243 0.201486 -3.976309\nv -1.642243 0.389124 -3.979786\nv -1.642243 0.669514 -3.917532\nv -1.642243 0.955856 -3.673445\nv -1.642243 1.068910 -3.295678\nv -1.642243 1.070968 1.585176\nv -1.642243 0.963835 1.223228\nv -1.642243 0.993600 1.925071\nv -1.642243 0.813227 2.146734\nv -1.642243 0.548085 2.279090\nv -1.642243 0.167442 0.908055\nv -1.642243 0.725156 1.005945\nv -1.642243 0.425566 0.919180\nv -1.556105 0.171057 -0.461726\nv -1.549304 0.178647 -0.103682\nv -1.568097 0.165715 -2.089259\nv -1.554599 0.164192 -1.469507\nv -1.558479 0.165051 -0.849815\nv -1.546949 0.188782 0.310973\nv 0.000000 1.289683 -4.301372\nv -0.355595 1.288550 -4.285846\nv -0.325210 1.444695 -4.307991\nv 0.000000 1.448315 -4.322382\nv -0.554425 1.417327 -4.253970\nv -0.603786 1.306059 -4.238980\nv -0.343843 1.302860 -4.170685\nv -0.314357 1.448009 -4.192046\nv -0.536435 1.422238 -4.138737\nv -0.582444 1.319059 -4.124672\nv -0.514154 0.303588 3.157584\nv -0.850789 0.303597 3.103985\nv -1.000826 0.350624 3.042610\nv -1.018617 0.650234 3.047204\nv -1.002625 0.802325 3.061893\nv -0.849151 0.820010 3.127145\nv -0.513214 0.820051 3.180267\nv -0.831520 0.322678 2.989890\nv -0.972061 0.367943 2.933341\nv -0.607590 0.599075 3.028692\nv -0.826379 0.630387 2.989908\nv -0.608177 0.410706 3.020358\nv -0.828750 0.379326 2.977998\nv -0.924568 0.410657 2.941545\nv -0.923840 0.598619 2.950681\nv -1.466308 0.599346 -4.273518\nv -1.357214 0.629190 -4.376260\nv -1.472744 0.401940 -4.252886\nv -1.445989 0.262577 -4.256669\nv -1.332215 0.244319 -4.347783\nv -1.142686 0.262853 -4.464826\nv -1.119360 0.403614 -4.499822\nv -1.158648 0.599627 -4.504793\nv -0.478512 2.151901 -0.582726\nv 0.000000 2.163419 -0.580788\nv -0.485469 2.186187 0.701245\nv -0.482244 2.192492 0.167156\nv -1.606405 1.632976 -1.455512\nv -1.631178 1.615073 -1.362562\nv -1.498423 1.595041 -1.433409\nv -1.519282 1.623045 -1.513539\nv -1.361056 1.611060 -1.505046\nv -1.433660 1.632976 -1.547159\nv -1.606405 1.699899 -1.455512\nv -1.519282 1.707228 -1.513539\nv -1.498423 1.755300 -1.433410\nv -1.631178 1.735268 -1.362562\nv -1.433660 1.699899 -1.547159\nv -1.361056 1.740486 -1.505046\nv -1.613462 1.606120 -1.274918\nv -1.613462 1.747565 -1.274918\nv -1.477291 1.582546 -1.352592\nv -1.332981 1.600293 -1.431751\nv -1.477291 1.771139 -1.352592\nv -1.332981 1.753393 -1.431751\nv -1.598189 1.618106 -1.273328\nv -1.475932 1.598528 -1.343914\nv -1.598189 1.735579 -1.273328\nv -1.475932 1.755157 -1.343914\nv -1.353673 1.735579 -1.414499\nv -1.353673 1.618107 -1.414499\nv -1.599344 1.628513 -1.299608\nv -1.487599 1.612403 -1.364124\nv -1.599344 1.725173 -1.299608\nv -1.487599 1.741283 -1.364124\nv -1.375855 1.725173 -1.428639\nv -1.375855 1.628513 -1.428639\nv -1.317188 1.646979 -1.458537\nv -1.330762 1.650071 -1.498828\nv -1.315820 1.701854 -1.458537\nv -1.329520 1.699391 -1.498828\nv -1.273808 1.627771 -1.497039\nv -1.281851 1.631440 -1.538073\nv -1.260087 1.670022 -1.497163\nv -1.269389 1.669818 -1.538185\nv -1.236674 1.544390 -1.534356\nv -1.234613 1.545465 -1.596919\nv -1.192559 1.595109 -1.535343\nv -1.194543 1.591533 -1.597816\nv 1.187502 0.105994 -4.331732\nv 1.477519 0.028874 -1.801164\nv 1.465230 0.027471 0.099423\nv 0.836598 2.150377 -0.836875\nv 0.829395 2.240971 0.423734\nv 1.168970 1.709750 2.484627\nv 1.239495 0.147227 -4.551183\nv 1.213542 0.770559 -4.504753\nv 0.260874 0.504203 3.062871\nv 0.273486 1.305518 3.014539\nv 1.385755 0.432509 2.756756\nv 1.689469 0.073279 -0.297590\nv 1.692948 0.091785 -2.324759\nv 1.399665 1.287504 2.563638\nv 1.541764 1.249866 2.205034\nv 1.548461 1.017470 -0.190721\nv 1.575598 0.952759 -2.343223\nv 1.151902 1.519216 -2.051101\nv 0.173783 1.731590 2.404583\nv 1.217547 1.714846 1.918119\nv 1.351089 1.575140 -0.099635\nv 0.157124 1.522253 -3.446912\nv 1.699734 1.078171 -3.503227\nv 0.554090 1.075045 -4.624218\nv 0.344494 2.184758 -0.879217\nv 0.344494 2.276925 0.452601\nv 0.624549 1.717508 2.672868\nv 0.564506 0.147227 -4.854910\nv 0.516326 0.731010 -4.704906\nv 0.862075 0.509833 2.850431\nv 0.490680 1.565691 -2.303716\nv 0.839673 1.730039 2.284847\nv 0.815422 1.517630 -2.564295\nv 1.480510 0.016909 -0.637368\nv 0.582517 2.245888 -0.395289\nv 1.692484 0.067983 -1.142558\nv 1.549689 0.991194 -1.129133\nv 1.347895 1.524973 -1.068147\nv 0.114831 2.259348 -0.399977\nv 0.896466 1.287858 -4.007192\nv 1.699734 0.147176 -4.011024\nv 0.186577 0.105994 -4.560250\nv 0.165102 1.496390 -4.155365\nv 1.699734 0.873415 -2.741887\nv 1.657374 0.059090 -2.562365\nv 0.164707 1.535352 -2.685355\nv 1.235026 1.451145 -2.841822\nv 1.699734 0.095878 0.856215\nv 1.316612 1.621941 0.760510\nv 1.546131 0.034319 0.563495\nv 0.582517 2.244620 0.928395\nv 0.114831 2.237087 0.986976\nv 1.672510 0.080560 0.090385\nv 1.531502 1.023772 0.200504\nv 1.340808 1.601767 0.318680\nv 1.334637 0.192312 2.685936\nv 1.507127 0.406935 2.584111\nv 1.412865 1.132557 2.685871\nv 1.207599 1.161284 2.879874\nv 0.712695 1.162020 3.083592\nv 0.272220 0.211797 3.067498\nv 0.970162 0.210426 2.959393\nv 1.480367 0.019315 -1.140455\nv 1.688269 0.073993 -1.802765\nv 1.541898 0.954665 -1.770151\nv 1.326620 1.510652 -1.652668\nv 1.699734 1.083115 1.386022\nv 1.279925 1.665876 1.407979\nv 0.688020 0.748378 3.038694\nv 1.394113 0.779016 2.764728\nv 1.196099 0.798192 2.962181\nv 1.512236 0.749090 2.586268\nv 1.566314 0.636191 -0.622229\nv 1.699734 0.553882 -2.575720\nv 1.563759 0.616502 -1.137154\nv 1.615211 0.637170 0.592197\nv 1.545939 0.649190 0.135459\nv 1.555235 0.585876 -1.785687\nv 0.900850 0.105994 -4.459547\nv 0.587021 2.176610 -0.861672\nv 0.582517 2.272705 0.440750\nv 0.926115 1.715909 2.608736\nv 0.910034 0.147227 -4.748703\nv 0.905807 0.767953 -4.685857\nv 0.825104 1.550062 -2.218384\nv 1.188819 0.442134 2.947103\nv 1.085176 1.728018 2.140538\nv 1.217965 1.483373 -2.409330\nv 0.829395 2.233516 0.024823\nv 1.244460 1.351214 -3.544787\nv 0.864699 1.442631 -3.317588\nv 0.829148 2.220330 0.877347\nv 0.995754 1.161775 3.002008\nv 1.136706 0.206560 2.855697\nv 0.996234 1.035993 3.094277\nv 0.587039 2.193135 1.279845\nv 1.245723 0.508959 -4.233678\nv 0.184447 0.542914 -4.717933\nv 1.416236 0.508321 -4.233678\nv 0.911016 0.538984 -4.661516\nv 0.161379 1.519963 -3.130252\nv 1.699734 1.076709 -3.084727\nv 1.244980 1.412354 -3.191325\nv 0.820972 1.483285 -2.987585\nv 1.699734 0.852881 -3.843774\nv 0.889347 1.377865 -3.657272\nv 0.160911 1.514627 -3.788293\nv 1.235698 1.252898 -3.904589\nv 1.699734 0.893581 1.068053\nv 1.295172 1.641698 1.144145\nv 0.347468 2.185080 1.332054\nv 0.834536 2.176579 1.214071\nv 1.699734 1.091748 1.776709\nv 1.260698 1.690391 1.662734\nv 1.699734 0.942041 2.088525\nv 1.605811 0.381670 2.472795\nv 1.660518 0.156018 2.351553\nv 1.332595 1.570303 2.463719\nv 1.406993 1.551625 2.083217\nv 1.468492 1.356403 -0.574036\nv 1.462130 1.309548 -2.332000\nv 1.479535 1.264004 -3.489377\nv 0.185645 0.927234 -4.804833\nv 1.468759 1.336812 -1.111843\nv 1.475363 1.313576 -2.767182\nv 1.419077 1.424593 0.716775\nv 1.448585 1.396718 0.276325\nv 1.460999 1.314667 -1.747404\nv 1.407454 1.495026 1.414296\nv 1.484525 1.310056 -3.119736\nv 1.461833 1.144686 -3.840587\nv 1.405334 1.453411 1.112055\nv 1.409687 1.529184 1.740974\nv 0.708896 1.036208 3.183247\nv 1.403036 1.010020 2.768954\nv 1.204798 1.035564 2.972142\nv 1.518122 0.985747 2.573020\nv 0.922086 0.748085 2.976202\nv 1.608518 0.730711 2.438066\nv 1.678496 0.090542 0.555736\nv 1.547760 1.027639 0.658802\nv 1.581793 1.234704 1.392996\nv 1.699734 0.601224 0.906325\nv 1.580111 1.106781 1.068438\nv 1.583475 1.258890 1.782185\nv 1.611460 0.978673 2.323415\nv 1.699734 0.366916 2.353371\nv 1.699734 0.709142 2.278986\nv 1.699734 0.104942 -2.559612\nv 1.619122 1.153759 -3.500674\nv 1.613727 0.147227 -4.150664\nv 1.547771 0.823901 -4.104310\nv 1.615736 1.049212 -2.742498\nv 1.625353 0.570497 -2.322573\nv 1.699734 0.531321 -4.003748\nv 1.620823 1.168825 -3.095382\nv 1.609817 0.971717 -3.848514\nv 0.688814 0.509965 2.892735\nv 0.521348 1.731188 2.368752\nv 0.425624 1.514362 -3.411613\nv 0.184845 1.074645 -4.672473\nv 0.114831 2.189624 -0.891089\nv 0.114831 2.282195 0.459286\nv 0.225510 1.717508 2.702882\nv 0.189417 0.147227 -4.900988\nv 0.184372 0.731387 -4.739104\nv 0.163560 1.565823 -2.340039\nv 0.344494 2.274124 0.025635\nv 0.556247 0.105994 -4.526171\nv 0.468826 1.487795 -4.115202\nv 0.463713 1.535055 -2.652653\nv 0.344494 2.240191 0.966922\nv 0.272220 1.162020 3.120398\nv 0.712695 0.211797 3.030693\nv 0.260635 0.748422 3.073528\nv 0.516392 0.542413 -4.682988\nv 0.426630 1.515652 -3.089464\nv 0.450155 1.506639 -3.752738\nv 0.115823 2.178895 1.358793\nv 0.273486 1.578442 2.980422\nv 0.556498 0.927796 -4.760440\nv 0.270953 1.036208 3.220052\nv 1.559927 0.044845 -2.325367\nv 1.654729 0.041902 0.858209\nv 1.554871 0.161281 2.463856\nv 1.438740 0.105994 -4.161432\nv 1.473289 0.176363 2.563149\nv 1.235278 0.324466 -4.233678\nv 0.516626 0.333071 -4.654058\nv 1.699734 0.282589 -4.019641\nv 0.905668 0.291019 -4.626295\nv 1.404433 0.323829 -4.233678\nv 0.184710 0.333157 -4.690090\nv 1.571024 0.105994 -4.161879\nv 1.217659 0.105994 -4.489186\nv 0.905381 0.105994 -4.671227\nv 0.560759 0.105994 -4.777613\nv 0.187544 0.105994 -4.823932\nv 0.187544 0.188459 -4.835039\nv 0.560760 0.188459 -4.789203\nv 0.907194 0.188459 -4.683173\nv 1.223100 0.188459 -4.501364\nv 1.444270 0.188459 -4.311215\nv 1.217929 1.156365 -4.181351\nv 0.549574 1.196845 -4.395446\nv 0.894175 1.189623 -4.301254\nv 1.608266 0.539150 -4.131876\nv 1.432681 1.041483 -4.102862\nv 1.468410 0.147227 -4.340217\nv 1.424469 0.788309 -4.304268\nv 0.183263 1.197798 -4.442155\nv 1.632285 0.105994 -4.044891\nv 1.600811 0.285972 -4.133234\nv 1.438828 0.105994 -4.300619\nv 1.573442 0.188459 -4.169645\nv 0.834804 2.088964 -1.095784\nv 1.002982 1.957450 -1.271836\nv 1.125628 1.690089 -1.655127\nv 1.071901 1.555514 -1.934750\nv 0.804746 1.579723 -2.104751\nv 0.488854 1.591455 -2.202380\nv 0.162803 1.591292 -2.249863\nv 0.115879 2.123077 -1.197890\nv 0.347189 2.119864 -1.180778\nv 0.595552 2.108965 -1.146121\nv 0.822541 2.063545 -1.129180\nv 0.970115 1.943445 -1.295654\nv 1.085044 1.693824 -1.654100\nv 1.040675 1.566686 -1.911823\nv 0.790058 1.588496 -2.068760\nv 0.479944 1.598433 -2.163531\nv 0.159435 1.597765 -2.207180\nv 0.116357 2.095859 -1.226493\nv 0.348887 2.092835 -1.210668\nv 0.598873 2.081561 -1.175630\nv 0.168777 1.755694 2.320404\nv 0.503407 1.755372 2.273317\nv 0.781986 1.757368 2.163651\nv 0.956294 1.763535 2.014040\nv 1.073696 1.757337 1.825415\nv 1.153381 1.735001 1.613200\nv 1.190572 1.712741 1.407555\nv 1.161721 1.804404 1.295110\nv 1.042757 2.018635 1.283965\nv 0.844364 2.148149 1.315416\nv 0.598281 2.160333 1.377542\nv 0.355550 2.153074 1.428913\nv 0.118648 2.148813 1.455081\nv 0.166144 1.760769 2.279996\nv 0.493134 1.761013 2.234503\nv 0.760979 1.764840 2.130388\nv 0.929809 1.776380 1.989654\nv 1.049839 1.776751 1.807964\nv 1.132110 1.757574 1.600287\nv 1.166481 1.737719 1.416408\nv 1.144593 1.812703 1.326723\nv 1.038908 2.004216 1.318361\nv 0.847052 2.126909 1.348172\nv 0.604021 2.136383 1.408677\nv 0.359345 2.129215 1.460441\nv 0.119671 2.125589 1.485981\nv 1.692884 0.067745 -0.640832\nv 1.551877 1.012129 -0.602656\nv 1.350620 1.546764 -0.552073\nv 1.477949 0.021659 -0.291901\nv 0.582517 2.266336 0.025822\nv 0.114831 2.282589 0.024260\nv 1.562897 0.644946 -0.240912\nv 0.829395 2.214421 -0.398288\nv 1.465174 1.372550 -0.134287\nv 0.344494 2.252295 -0.395852\nv 0.971281 2.177176 0.005304\nv 1.079093 2.022223 0.160930\nv 1.234481 1.750190 0.115282\nv 1.280098 1.622680 -0.107059\nv 1.276278 1.595363 -0.546713\nv 1.268207 1.574072 -1.035456\nv 1.239089 1.561288 -1.525725\nv 1.163898 1.684078 -1.597783\nv 1.047883 1.939090 -1.232570\nv 0.978064 2.105153 -0.815862\nv 0.971783 2.159496 -0.397386\nv 0.970554 2.166383 0.848842\nv 0.975208 2.131854 1.162288\nv 1.053280 2.011923 1.219294\nv 1.170439 1.801519 1.230991\nv 1.227941 1.686918 1.140631\nv 1.254738 1.668603 0.775252\nv 1.273957 1.650025 0.342081\nv 1.235934 1.748327 0.180089\nv 1.081388 2.019403 0.226167\nv 0.970801 2.184348 0.428394\nv 0.983868 2.138554 -0.017303\nv 1.078882 2.001873 0.118409\nv 1.214985 1.763548 0.078505\nv 1.254199 1.652302 -0.125564\nv 1.250605 1.626637 -0.548049\nv 1.241443 1.604501 -1.035354\nv 1.216867 1.591517 -1.470780\nv 1.161567 1.684357 -1.531363\nv 1.061565 1.906379 -1.212753\nv 0.992668 2.068960 -0.805618\nv 0.985035 2.121664 -0.394096\nv 0.982768 2.128271 0.844852\nv 0.986297 2.097842 1.139024\nv 1.055056 1.993573 1.179806\nv 1.156407 1.810982 1.189327\nv 1.203459 1.714453 1.116498\nv 1.227633 1.698188 0.771831\nv 1.245991 1.681188 0.362050\nv 1.218021 1.759753 0.220435\nv 1.083820 1.995852 0.261628\nv 0.982736 2.146573 0.444216\nv 0.750694 1.069298 -4.593602\nv 0.898157 1.133125 -4.428148\nv 1.205882 1.112698 -4.288627\nv 1.406294 1.013773 -4.209884\nv 1.390787 0.902038 -4.302436\nv 1.191295 0.868324 -4.505391\nv 0.901729 0.863194 -4.682053\nv 0.753347 0.932007 -4.723295\nv 0.765376 1.053796 -4.588158\nv 0.906841 1.112100 -4.434439\nv 1.202450 1.093925 -4.298603\nv 1.388687 1.009709 -4.219301\nv 1.370446 0.912846 -4.301738\nv 1.179665 0.881358 -4.492734\nv 0.903300 0.876468 -4.661693\nv 0.766379 0.933869 -4.703719\nv 0.185591 0.819797 -4.834031\nv 0.541266 0.819797 -4.794681\nv 0.711352 0.751765 -4.763772\nv 0.711359 0.540240 -4.740357\nv 0.711364 0.308341 -4.707724\nv 0.541608 0.219935 -4.724569\nv 0.185926 0.219936 -4.766490\nv 0.184892 0.782232 -4.786343\nv 0.520872 0.782226 -4.751388\nv 0.671964 0.733201 -4.724444\nv 0.671961 0.540790 -4.701952\nv 0.671938 0.328303 -4.672048\nv 0.521549 0.259187 -4.688227\nv 0.185588 0.259143 -4.725416\nv 1.189473 1.232005 2.792336\nv 1.268973 1.339890 2.723500\nv 1.235886 1.544816 2.698754\nv 1.135267 1.646305 2.738364\nv 0.974164 1.651265 2.844275\nv 0.736723 1.651605 2.916114\nv 0.584588 1.546403 2.970021\nv 0.584574 1.336908 2.999506\nv 0.735233 1.232625 2.975295\nv 0.993805 1.232406 2.903197\nv 1.164117 1.299981 2.795286\nv 1.225981 1.371683 2.741447\nv 1.198878 1.509434 2.721545\nv 1.118694 1.578197 2.752219\nv 0.973644 1.581566 2.844660\nv 0.757620 1.581895 2.912205\nv 0.626684 1.510602 2.957345\nv 0.626629 1.370090 2.981275\nv 0.754602 1.300839 2.960462\nv 0.989003 1.300556 2.892150\nv 1.670988 0.840602 -2.764729\nv 1.670988 0.537335 -2.616248\nv 1.670988 0.258657 -2.591480\nv 1.670988 0.147125 -3.973249\nv 1.670988 0.282307 -3.980994\nv 1.670988 0.521469 -3.965163\nv 1.670988 0.823428 -3.817304\nv 1.670988 1.039441 -3.494919\nv 1.670988 1.038988 -3.089674\nv 1.670988 1.038581 1.395373\nv 1.670988 1.051026 1.766056\nv 1.670988 0.913539 2.049276\nv 1.670988 0.695049 2.225511\nv 1.670988 0.361416 2.300957\nv 1.670988 0.095747 0.907695\nv 1.670988 0.577166 0.949425\nv 1.670988 0.856703 1.095316\nv 1.541196 0.290518 -0.275698\nv 1.617236 0.264468 -2.312198\nv 1.543424 0.274080 -1.139413\nv 1.699734 0.293309 0.859941\nv 1.524237 0.303341 0.102755\nv 1.537633 0.266695 -1.795352\nv 1.604360 0.307673 0.556936\nv 1.699734 0.262296 -2.546277\nv 1.544611 0.282021 -0.632862\nv 1.670988 0.103311 -2.602573\nv 1.670988 0.283187 0.908637\nv 1.605190 0.029609 -1.803319\nv 1.635438 0.044374 -2.262919\nv 1.638745 0.135162 -2.257444\nv 1.610567 0.127112 -1.800367\nv 1.615199 0.124651 -1.141291\nv 1.615808 0.126581 -0.638287\nv 1.612393 0.132900 -0.291355\nv 1.595434 0.141650 0.094096\nv 1.620034 0.148485 0.472874\nv 1.615614 0.034777 0.473828\nv 1.588804 0.028206 0.088516\nv 1.605763 0.022394 -0.301982\nv 1.609179 0.017644 -0.641536\nv 1.608987 0.020050 -1.141981\nv 0.565035 1.502725 -3.114459\nv 0.601789 1.483126 -3.383644\nv 0.644412 1.445693 -3.719810\nv 0.666376 1.389690 -4.070898\nv 0.183289 1.271409 -4.313863\nv 0.168666 1.462712 -4.337912\nv 0.465971 1.454589 -4.298068\nv 0.639218 1.358970 -4.251733\nv 0.525203 1.270028 -4.273902\nv 0.180645 1.298555 -4.249109\nv 0.166656 1.445680 -4.269945\nv 0.448501 1.438406 -4.232038\nv 0.597697 1.364907 -4.189748\nv 0.496498 1.297374 -4.211893\nv 0.271073 0.260819 3.185404\nv 0.709373 0.260823 3.149375\nv 0.967842 0.260829 3.073667\nv 1.058531 0.470056 3.036166\nv 1.060472 0.770176 3.048675\nv 0.969064 0.861218 3.099528\nv 0.708416 0.861368 3.175822\nv 0.270834 0.861373 3.211560\nv 0.266093 0.319770 3.120938\nv 0.699652 0.319778 3.085686\nv 0.932981 0.319790 3.022974\nv 0.998371 0.500812 2.997238\nv 0.999602 0.744902 3.007599\nv 0.932775 0.808084 3.044539\nv 0.697739 0.808200 3.107584\nv 0.265615 0.808210 3.142252\nv 0.704042 0.653708 3.031826\nv 0.553288 0.504165 3.050598\nv 0.705408 0.354627 3.018377\nv 0.908727 0.354642 2.965712\nv 0.959761 0.503803 2.945968\nv 0.907197 0.653330 2.979861\nv 0.703755 0.624652 2.963006\nv 0.568998 0.507064 2.980426\nv 0.705532 0.389480 2.952187\nv 0.878841 0.389500 2.909571\nv 0.915519 0.506800 2.895818\nv 0.876967 0.624368 2.921013\nv 1.437320 0.652716 -4.320070\nv 1.494442 0.521282 -4.244130\nv 1.481586 0.305007 -4.232617\nv 1.409362 0.220169 -4.291284\nv 1.219262 0.220168 -4.440400\nv 1.095813 0.305643 -4.536612\nv 1.105203 0.521921 -4.567702\nv 1.243754 0.652717 -4.488765\nv 1.422809 0.622346 -4.281838\nv 1.469973 0.506922 -4.250260\nv 1.459170 0.322427 -4.245366\nv 1.399202 0.253363 -4.269665\nv 1.232427 0.253361 -4.334511\nv 1.120860 0.323700 -4.377324\nv 1.128946 0.508199 -4.390633\nv 1.253315 0.622348 -4.355099\nv 1.010018 1.914123 -1.251964\nv 1.115389 1.682674 -1.584586\nv 1.073692 1.990322 0.189524\nv 1.205237 1.759361 0.149829\nv 1.142952 1.806821 1.255160\nv 1.041950 1.989455 1.246642\nv 0.757591 2.077312 -0.945631\nv 0.232638 2.116954 -0.973325\nv 0.775550 2.163086 0.380205\nv 0.236474 2.207067 0.463427\nv 0.775267 2.145177 -0.206188\nv 0.234801 2.188911 -0.174962\nv 0.797372 2.124063 1.093087\nv 0.238033 2.151735 1.152221\nv 0.465542 1.372886 -4.155867\nv 0.170171 1.377113 -4.193429\nv 1.574747 1.603760 -1.444738\nv 1.448609 1.603760 -1.511363\nv 1.574747 1.736547 -1.444738\nv 1.448609 1.736547 -1.511363\nv 1.571839 1.663464 -1.497388\nv 1.475877 1.663464 -1.548594\nv 1.388165 1.670153 -1.542263\nv 1.644981 1.676843 -1.300043\nv 1.565421 1.586323 -1.343774\nv 1.408342 1.586323 -1.430362\nv 1.565421 1.767362 -1.343774\nv 1.408342 1.767363 -1.430362\nv 1.640440 1.670154 -1.409013\nv 1.548402 1.588653 -1.298224\nv 1.622539 1.676843 -1.255420\nv 1.548402 1.765032 -1.298224\nv 1.400128 1.765032 -1.383830\nv 1.325990 1.676843 -1.426633\nv 1.400128 1.588654 -1.383830\nv 1.547536 1.606053 -1.314122\nv 1.614138 1.676842 -1.275668\nv 1.547536 1.747633 -1.314122\nv 1.414329 1.747633 -1.391029\nv 1.347726 1.676843 -1.429482\nv 1.414329 1.606053 -1.391029\nv 1.330824 1.618137 -1.473219\nv 1.319284 1.676843 -1.440319\nv 1.330824 1.735549 -1.473219\nv 1.342364 1.676843 -1.506118\nv 1.304296 1.641332 -1.495075\nv 1.293344 1.666926 -1.470007\nv 1.297336 1.694200 -1.495075\nv 1.308288 1.668606 -1.520144\nv 1.260213 1.584787 -1.541206\nv 1.239582 1.613484 -1.507981\nv 1.225191 1.643026 -1.541834\nv 1.245824 1.614329 -1.575059\nv -1.187502 0.105994 -4.331732\nv -1.477519 0.028874 -1.801164\nv -1.465230 0.027471 0.099423\nv -0.836598 2.150377 -0.836875\nv -0.829395 2.240971 0.423734\nv -1.168970 1.709750 2.484627\nv -1.239495 0.147227 -4.551182\nv -1.213542 0.770559 -4.504753\nv -0.260874 0.504203 3.062871\nv -0.273486 1.305518 3.014539\nv -1.385755 0.432509 2.756756\nv -1.689468 0.073279 -0.297590\nv -1.692948 0.091785 -2.324759\nv -1.399665 1.287504 2.563638\nv -1.541764 1.249866 2.205034\nv -1.548461 1.017470 -0.190721\nv -1.575598 0.952759 -2.343222\nv -1.151902 1.519216 -2.051101\nv -0.173783 1.731590 2.404583\nv -1.217547 1.714846 1.918119\nv -1.351089 1.575140 -0.099635\nv -0.157124 1.522253 -3.446913\nv -1.699734 1.078171 -3.503227\nv -0.554090 1.075045 -4.624218\nv -0.344494 2.184758 -0.879217\nv -0.344494 2.276924 0.452601\nv -0.624549 1.717508 2.672868\nv -0.564506 0.147227 -4.854910\nv -0.516326 0.731010 -4.704906\nv -0.862075 0.509833 2.850431\nv -0.490680 1.565691 -2.303716\nv -0.839673 1.730039 2.284847\nv -0.815422 1.517630 -2.564295\nv -1.480510 0.016909 -0.637368\nv -0.582517 2.245888 -0.395289\nv -1.692484 0.067983 -1.142558\nv -1.549689 0.991194 -1.129133\nv -1.347895 1.524973 -1.068147\nv -0.114831 2.259348 -0.399977\nv -0.896466 1.287858 -4.007192\nv -1.699734 0.147176 -4.011024\nv -0.186577 0.105994 -4.560250\nv -0.165102 1.496390 -4.155365\nv -1.699734 0.873415 -2.741887\nv -1.657374 0.059090 -2.562365\nv -0.164707 1.535352 -2.685355\nv -1.235026 1.451145 -2.841822\nv -1.699734 0.095878 0.856215\nv -1.316612 1.621941 0.760510\nv -1.546131 0.034319 0.563495\nv -0.582517 2.244620 0.928395\nv -0.114831 2.237087 0.986976\nv -1.672510 0.080560 0.090385\nv -1.531502 1.023772 0.200504\nv -1.340808 1.601767 0.318680\nv -1.334637 0.192312 2.685936\nv -1.507127 0.406935 2.584111\nv -1.412865 1.132557 2.685871\nv -1.207599 1.161284 2.879874\nv -0.712695 1.162020 3.083592\nv -0.272220 0.211797 3.067498\nv -0.970162 0.210426 2.959393\nv -1.480367 0.019315 -1.140455\nv -1.688269 0.073993 -1.802765\nv -1.541898 0.954665 -1.770151\nv -1.326620 1.510652 -1.652668\nv -1.699734 1.083115 1.386022\nv -1.279925 1.665876 1.407979\nv -0.688020 0.748378 3.038694\nv -1.394113 0.779016 2.764728\nv -1.196099 0.798192 2.962181\nv -1.512236 0.749090 2.586268\nv -1.566314 0.636191 -0.622229\nv -1.699734 0.553882 -2.575720\nv -1.563759 0.616501 -1.137154\nv -1.615211 0.637170 0.592197\nv -1.545939 0.649190 0.135459\nv -1.555235 0.585876 -1.785687\nv -0.900850 0.105994 -4.459547\nv -0.587021 2.176610 -0.861672\nv -0.582517 2.272705 0.440750\nv -0.926115 1.715909 2.608736\nv -0.910034 0.147227 -4.748703\nv -0.905807 0.767953 -4.685857\nv -0.825104 1.550062 -2.218384\nv -1.188819 0.442134 2.947103\nv -1.085176 1.728018 2.140538\nv -1.217965 1.483373 -2.409330\nv -0.829395 2.233516 0.024823\nv -1.244460 1.351214 -3.544787\nv -0.864699 1.442631 -3.317588\nv -0.829148 2.220330 0.877347\nv -0.995754 1.161775 3.002008\nv -1.136706 0.206560 2.855697\nv -0.996234 1.035993 3.094277\nv -0.587039 2.193135 1.279845\nv -1.245723 0.508959 -4.233678\nv -0.184447 0.542914 -4.717933\nv -1.416236 0.508321 -4.233678\nv -0.911016 0.538984 -4.661516\nv -0.161379 1.519963 -3.130251\nv -1.699734 1.076709 -3.084727\nv -1.244980 1.412354 -3.191325\nv -0.820973 1.483286 -2.987585\nv -1.699734 0.852881 -3.843774\nv -0.889347 1.377865 -3.657271\nv -0.160911 1.514627 -3.788293\nv -1.235698 1.252898 -3.904589\nv -1.699734 0.893581 1.068053\nv -1.295172 1.641698 1.144145\nv -0.347468 2.185080 1.332054\nv -0.834536 2.176579 1.214071\nv -1.699734 1.091748 1.776709\nv -1.260697 1.690391 1.662734\nv -1.699734 0.942041 2.088525\nv -1.605811 0.381670 2.472795\nv -1.660518 0.156018 2.351553\nv -1.332594 1.570303 2.463719\nv -1.406993 1.551625 2.083217\nv -1.468492 1.356403 -0.574036\nv -1.462130 1.309548 -2.332000\nv -1.479535 1.264004 -3.489377\nv -0.185645 0.927234 -4.804833\nv -1.468759 1.336813 -1.111843\nv -1.475363 1.313576 -2.767182\nv -1.419077 1.424593 0.716775\nv -1.448585 1.396718 0.276325\nv -1.460999 1.314667 -1.747404\nv -1.407454 1.495026 1.414296\nv -1.484525 1.310056 -3.119736\nv -1.461833 1.144686 -3.840587\nv -1.405334 1.453411 1.112055\nv -1.409687 1.529184 1.740974\nv -0.708896 1.036208 3.183247\nv -1.403035 1.010020 2.768954\nv -1.204798 1.035564 2.972142\nv -1.518122 0.985747 2.573020\nv -0.922086 0.748085 2.976202\nv -1.608518 0.730711 2.438067\nv -1.678496 0.090542 0.555736\nv -1.547760 1.027639 0.658802\nv -1.581793 1.234704 1.392996\nv -1.699734 0.601224 0.906325\nv -1.580111 1.106781 1.068438\nv -1.583475 1.258890 1.782185\nv -1.611460 0.978673 2.323415\nv -1.699734 0.366916 2.353371\nv -1.699734 0.709142 2.278986\nv -1.699734 0.104942 -2.559612\nv -1.619122 1.153759 -3.500674\nv -1.613727 0.147227 -4.150664\nv -1.547771 0.823901 -4.104310\nv -1.615736 1.049212 -2.742498\nv -1.625353 0.570497 -2.322572\nv -1.699734 0.531321 -4.003748\nv -1.620823 1.168825 -3.095382\nv -1.609817 0.971717 -3.848514\nv -0.688814 0.509965 2.892735\nv -0.521348 1.731189 2.368752\nv -0.425624 1.514362 -3.411613\nv -0.184845 1.074645 -4.672473\nv -0.114831 2.189623 -0.891089\nv -0.114831 2.282195 0.459286\nv -0.225510 1.717508 2.702882\nv -0.189417 0.147227 -4.900988\nv -0.184372 0.731387 -4.739104\nv -0.163560 1.565823 -2.340039\nv -0.344494 2.274124 0.025635\nv -0.556247 0.105994 -4.526171\nv -0.468826 1.487795 -4.115202\nv -0.463713 1.535055 -2.652653\nv -0.344494 2.240191 0.966922\nv -0.272220 1.162020 3.120398\nv -0.712695 0.211797 3.030693\nv -0.260635 0.748422 3.073528\nv -0.516392 0.542413 -4.682987\nv -0.426630 1.515652 -3.089464\nv -0.450155 1.506640 -3.752738\nv -0.115823 2.178895 1.358793\nv -0.273486 1.578443 2.980422\nv -0.556498 0.927796 -4.760440\nv -0.270953 1.036208 3.220052\nv -1.559927 0.044845 -2.325367\nv -1.654729 0.041902 0.858209\nv -1.554871 0.161281 2.463856\nv -1.438740 0.105994 -4.161432\nv -1.473289 0.176363 2.563149\nv -1.235278 0.324466 -4.233678\nv -0.516626 0.333071 -4.654059\nv -1.699734 0.282589 -4.019641\nv -0.905668 0.291019 -4.626295\nv -1.404433 0.323829 -4.233678\nv -0.184710 0.333157 -4.690091\nv -1.571024 0.105994 -4.161879\nv -1.217659 0.105994 -4.489186\nv -0.905381 0.105994 -4.671227\nv -0.560760 0.105994 -4.777613\nv -0.187544 0.105994 -4.823932\nv -0.187544 0.188459 -4.835039\nv -0.560760 0.188459 -4.789202\nv -0.907194 0.188459 -4.683174\nv -1.223100 0.188459 -4.501364\nv -1.444270 0.188459 -4.311215\nv -1.217929 1.156365 -4.181351\nv -0.549573 1.196845 -4.395446\nv -0.894175 1.189623 -4.301254\nv -1.608266 0.539150 -4.131875\nv -1.432681 1.041483 -4.102862\nv -1.468410 0.147227 -4.340217\nv -1.424469 0.788309 -4.304268\nv -0.183263 1.197798 -4.442155\nv -1.632285 0.105994 -4.044891\nv -1.600811 0.285972 -4.133234\nv -1.438828 0.105994 -4.300619\nv -1.573442 0.188459 -4.169646\nv -0.834804 2.088964 -1.095784\nv -1.002982 1.957449 -1.271836\nv -1.125628 1.690089 -1.655127\nv -1.071901 1.555514 -1.934750\nv -0.804746 1.579723 -2.104751\nv -0.488854 1.591455 -2.202380\nv -0.162803 1.591292 -2.249863\nv -0.115879 2.123077 -1.197890\nv -0.347189 2.119864 -1.180778\nv -0.595552 2.108965 -1.146121\nv -0.822541 2.063545 -1.129180\nv -0.970115 1.943445 -1.295654\nv -1.085044 1.693824 -1.654100\nv -1.040676 1.566686 -1.911823\nv -0.790058 1.588496 -2.068760\nv -0.479944 1.598433 -2.163531\nv -0.159435 1.597765 -2.207180\nv -0.116357 2.095859 -1.226493\nv -0.348887 2.092835 -1.210667\nv -0.598873 2.081561 -1.175630\nv -0.168777 1.755694 2.320404\nv -0.503407 1.755372 2.273316\nv -0.781986 1.757368 2.163651\nv -0.956294 1.763535 2.014040\nv -1.073696 1.757337 1.825415\nv -1.153381 1.735001 1.613200\nv -1.190572 1.712741 1.407555\nv -1.161721 1.804404 1.295110\nv -1.042757 2.018635 1.283965\nv -0.844364 2.148149 1.315416\nv -0.598281 2.160333 1.377542\nv -0.355550 2.153074 1.428913\nv -0.118648 2.148813 1.455081\nv -0.166144 1.760769 2.279996\nv -0.493134 1.761013 2.234503\nv -0.760979 1.764840 2.130388\nv -0.929809 1.776380 1.989654\nv -1.049839 1.776751 1.807964\nv -1.132110 1.757574 1.600287\nv -1.166481 1.737719 1.416408\nv -1.144593 1.812703 1.326723\nv -1.038908 2.004216 1.318361\nv -0.847052 2.126909 1.348172\nv -0.604021 2.136383 1.408677\nv -0.359345 2.129215 1.460441\nv -0.119671 2.125589 1.485981\nv -1.692884 0.067745 -0.640832\nv -1.551877 1.012129 -0.602656\nv -1.350620 1.546764 -0.552073\nv -1.477949 0.021659 -0.291901\nv -0.582517 2.266336 0.025822\nv -0.114831 2.282589 0.024260\nv -1.562897 0.644946 -0.240912\nv -0.829395 2.214421 -0.398288\nv -1.465174 1.372550 -0.134287\nv -0.344494 2.252295 -0.395852\nv -0.971281 2.177176 0.005304\nv -1.079093 2.022223 0.160930\nv -1.234481 1.750190 0.115282\nv -1.280098 1.622680 -0.107059\nv -1.276278 1.595363 -0.546713\nv -1.268207 1.574072 -1.035457\nv -1.239089 1.561288 -1.525725\nv -1.163898 1.684078 -1.597783\nv -1.047883 1.939090 -1.232570\nv -0.978064 2.105153 -0.815862\nv -0.971783 2.159496 -0.397386\nv -0.970554 2.166383 0.848842\nv -0.975208 2.131854 1.162288\nv -1.053280 2.011923 1.219294\nv -1.170439 1.801519 1.230990\nv -1.227941 1.686918 1.140631\nv -1.254738 1.668603 0.775252\nv -1.273957 1.650025 0.342081\nv -1.235934 1.748327 0.180089\nv -1.081388 2.019403 0.226167\nv -0.970801 2.184348 0.428394\nv -0.983868 2.138554 -0.017303\nv -1.078882 2.001873 0.118409\nv -1.214985 1.763548 0.078505\nv -1.254199 1.652302 -0.125564\nv -1.250605 1.626637 -0.548049\nv -1.241443 1.604501 -1.035354\nv -1.216867 1.591517 -1.470780\nv -1.161567 1.684357 -1.531363\nv -1.061565 1.906379 -1.212753\nv -0.992668 2.068960 -0.805618\nv -0.985035 2.121664 -0.394096\nv -0.982768 2.128270 0.844852\nv -0.986297 2.097842 1.139024\nv -1.055056 1.993573 1.179806\nv -1.156407 1.810981 1.189327\nv -1.203459 1.714453 1.116498\nv -1.227633 1.698188 0.771831\nv -1.245991 1.681188 0.362050\nv -1.218021 1.759753 0.220435\nv -1.083820 1.995852 0.261628\nv -0.982736 2.146573 0.444216\nv -0.750694 1.069298 -4.593602\nv -0.898157 1.133126 -4.428148\nv -1.205882 1.112698 -4.288627\nv -1.406294 1.013773 -4.209884\nv -1.390787 0.902038 -4.302437\nv -1.191295 0.868323 -4.505391\nv -0.901729 0.863194 -4.682053\nv -0.753347 0.932007 -4.723295\nv -0.765376 1.053796 -4.588158\nv -0.906841 1.112100 -4.434439\nv -1.202450 1.093925 -4.298603\nv -1.388687 1.009709 -4.219301\nv -1.370446 0.912846 -4.301738\nv -1.179665 0.881358 -4.492733\nv -0.903300 0.876468 -4.661694\nv -0.766379 0.933869 -4.703719\nv -0.185591 0.819797 -4.834031\nv -0.541266 0.819797 -4.794681\nv -0.711352 0.751765 -4.763771\nv -0.711359 0.540240 -4.740357\nv -0.711364 0.308341 -4.707724\nv -0.541608 0.219935 -4.724568\nv -0.185926 0.219937 -4.766490\nv -0.184892 0.782232 -4.786343\nv -0.520872 0.782226 -4.751388\nv -0.671964 0.733201 -4.724444\nv -0.671961 0.540790 -4.701952\nv -0.671938 0.328303 -4.672048\nv -0.521549 0.259187 -4.688227\nv -0.185588 0.259143 -4.725417\nv -1.189473 1.232005 2.792336\nv -1.268973 1.339890 2.723500\nv -1.235886 1.544816 2.698754\nv -1.135267 1.646305 2.738364\nv -0.974164 1.651265 2.844275\nv -0.736723 1.651605 2.916114\nv -0.584588 1.546403 2.970021\nv -0.584574 1.336908 2.999506\nv -0.735233 1.232625 2.975295\nv -0.993805 1.232406 2.903197\nv -1.164117 1.299981 2.795286\nv -1.225981 1.371683 2.741447\nv -1.198877 1.509434 2.721545\nv -1.118694 1.578197 2.752219\nv -0.973644 1.581566 2.844660\nv -0.757620 1.581895 2.912205\nv -0.626684 1.510602 2.957345\nv -0.626629 1.370090 2.981275\nv -0.754602 1.300839 2.960462\nv -0.989003 1.300556 2.892150\nv -1.670988 0.840602 -2.764729\nv -1.670988 0.537335 -2.616248\nv -1.670988 0.258657 -2.591480\nv -1.670988 0.147125 -3.973249\nv -1.670988 0.282307 -3.980994\nv -1.670988 0.521469 -3.965163\nv -1.670988 0.823428 -3.817304\nv -1.670988 1.039441 -3.494919\nv -1.670988 1.038988 -3.089674\nv -1.670988 1.038581 1.395373\nv -1.670988 1.051026 1.766056\nv -1.670988 0.913539 2.049276\nv -1.670988 0.695049 2.225511\nv -1.670988 0.361416 2.300957\nv -1.670988 0.095747 0.907695\nv -1.670988 0.577166 0.949425\nv -1.670988 0.856703 1.095316\nv -1.541196 0.290518 -0.275698\nv -1.617236 0.264468 -2.312198\nv -1.543424 0.274080 -1.139413\nv -1.699734 0.293309 0.859941\nv -1.524237 0.303341 0.102755\nv -1.537633 0.266695 -1.795352\nv -1.604360 0.307673 0.556936\nv -1.699734 0.262296 -2.546277\nv -1.544611 0.282021 -0.632862\nv -1.670988 0.103311 -2.602573\nv -1.670988 0.283187 0.908637\nv -1.605190 0.029609 -1.803320\nv -1.635438 0.044374 -2.262919\nv -1.638745 0.135162 -2.257445\nv -1.610566 0.127112 -1.800367\nv -1.615199 0.124651 -1.141291\nv -1.615808 0.126581 -0.638287\nv -1.612393 0.132900 -0.291355\nv -1.595434 0.141650 0.094096\nv -1.620034 0.148485 0.472874\nv -1.615614 0.034777 0.473828\nv -1.588804 0.028206 0.088516\nv -1.605763 0.022394 -0.301982\nv -1.609179 0.017644 -0.641536\nv -1.608987 0.020050 -1.141981\nv -0.565035 1.502725 -3.114459\nv -0.601789 1.483126 -3.383644\nv -0.644412 1.445693 -3.719810\nv -0.666376 1.389690 -4.070898\nv -0.183289 1.271409 -4.313863\nv -0.168666 1.462712 -4.337911\nv -0.465971 1.454589 -4.298067\nv -0.639218 1.358970 -4.251733\nv -0.525203 1.270028 -4.273902\nv -0.180645 1.298555 -4.249109\nv -0.166656 1.445680 -4.269945\nv -0.448501 1.438406 -4.232037\nv -0.597697 1.364907 -4.189748\nv -0.496498 1.297374 -4.211893\nv -0.271073 0.260819 3.185403\nv -0.709373 0.260823 3.149375\nv -0.967842 0.260829 3.073667\nv -1.058531 0.470056 3.036166\nv -1.060472 0.770176 3.048675\nv -0.969064 0.861218 3.099528\nv -0.708416 0.861368 3.175822\nv -0.270834 0.861373 3.211560\nv -0.266093 0.319770 3.120938\nv -0.699652 0.319778 3.085686\nv -0.932981 0.319790 3.022974\nv -0.998371 0.500812 2.997238\nv -0.999602 0.744902 3.007599\nv -0.932775 0.808083 3.044539\nv -0.697739 0.808200 3.107583\nv -0.265615 0.808210 3.142251\nv -0.704042 0.653708 3.031826\nv -0.553288 0.504165 3.050598\nv -0.705408 0.354627 3.018377\nv -0.908727 0.354642 2.965712\nv -0.959761 0.503803 2.945968\nv -0.907197 0.653330 2.979861\nv -0.703755 0.624652 2.963006\nv -0.568998 0.507065 2.980426\nv -0.705532 0.389480 2.952187\nv -0.878841 0.389500 2.909571\nv -0.915519 0.506800 2.895818\nv -0.876967 0.624368 2.921013\nv -1.437320 0.652716 -4.320071\nv -1.494442 0.521282 -4.244130\nv -1.481586 0.305007 -4.232617\nv -1.409362 0.220169 -4.291284\nv -1.219262 0.220168 -4.440400\nv -1.095813 0.305643 -4.536612\nv -1.105203 0.521921 -4.567702\nv -1.243754 0.652717 -4.488765\nv -1.422809 0.622346 -4.281838\nv -1.469973 0.506922 -4.250260\nv -1.459170 0.322427 -4.245366\nv -1.399202 0.253363 -4.269665\nv -1.232427 0.253361 -4.334511\nv -1.120860 0.323700 -4.377324\nv -1.128945 0.508199 -4.390633\nv -1.253315 0.622348 -4.355099\nv -1.010018 1.914123 -1.251964\nv -1.115389 1.682674 -1.584586\nv -1.073692 1.990322 0.189524\nv -1.205237 1.759361 0.149829\nv -1.142952 1.806821 1.255160\nv -1.041950 1.989455 1.246642\nv -0.757591 2.077312 -0.945631\nv -0.232638 2.116954 -0.973325\nv -0.775550 2.163086 0.380205\nv -0.236474 2.207067 0.463427\nv -0.775267 2.145177 -0.206188\nv -0.234801 2.188911 -0.174962\nv -0.797372 2.124063 1.093087\nv -0.238033 2.151736 1.152221\nv -0.465542 1.372886 -4.155867\nv -0.170171 1.377113 -4.193429\nv -1.574747 1.603760 -1.444738\nv -1.448609 1.603760 -1.511363\nv -1.574747 1.736547 -1.444738\nv -1.448609 1.736547 -1.511363\nv -1.571839 1.663464 -1.497388\nv -1.475877 1.663464 -1.548594\nv -1.388165 1.670154 -1.542263\nv -1.644981 1.676843 -1.300043\nv -1.565421 1.586323 -1.343774\nv -1.408342 1.586323 -1.430362\nv -1.565421 1.767362 -1.343774\nv -1.408342 1.767363 -1.430362\nv -1.640440 1.670154 -1.409013\nv -1.548402 1.588653 -1.298224\nv -1.622540 1.676843 -1.255420\nv -1.548402 1.765032 -1.298224\nv -1.400128 1.765032 -1.383830\nv -1.325990 1.676843 -1.426633\nv -1.400128 1.588654 -1.383830\nv -1.547536 1.606053 -1.314122\nv -1.614138 1.676842 -1.275668\nv -1.547536 1.747633 -1.314122\nv -1.414329 1.747633 -1.391029\nv -1.347726 1.676843 -1.429482\nv -1.414329 1.606053 -1.391029\nv -1.330824 1.618137 -1.473219\nv -1.319284 1.676843 -1.440319\nv -1.330824 1.735549 -1.473219\nv -1.342364 1.676843 -1.506118\nv -1.304296 1.641332 -1.495075\nv -1.293344 1.666926 -1.470007\nv -1.297336 1.694200 -1.495075\nv -1.308288 1.668606 -1.520144\nv -1.260213 1.584788 -1.541206\nv -1.239582 1.613484 -1.507981\nv -1.225191 1.643026 -1.541834\nv -1.245823 1.614329 -1.575059\nv 1.597618 0.105994 -4.111082\nv 1.497409 0.035257 -2.097392\nv 0.186366 0.105994 -4.722260\nv 1.533077 0.031610 -1.802320\nv 1.474128 0.024299 -0.107703\nv 1.517715 0.030206 0.091703\nv 0.947819 0.216089 2.860405\nv 0.000000 1.074207 -4.680762\nv 1.195990 1.500929 -2.191227\nv 1.371572 1.431425 -2.344862\nv 0.114831 2.285289 0.239075\nv 1.408482 1.515065 -0.112478\nv 0.188590 1.722329 2.506078\nv 1.327837 1.665126 2.000196\nv 0.000000 1.717508 2.705799\nv 0.261492 1.681440 2.894496\nv 1.267285 1.672608 2.437321\nv 0.184439 0.661769 -4.732796\nv 1.347796 0.508437 -4.233678\nv 1.278216 0.439697 2.868511\nv 1.202287 1.182482 2.808984\nv 0.000000 1.578443 2.984798\nv 1.317220 1.311516 2.672095\nv 1.534179 0.392614 2.534129\nv 1.412098 1.174811 2.612533\nv 1.684374 0.076483 -0.114785\nv 1.548584 0.837099 0.164203\nv 1.688385 0.079943 -2.098315\nv 1.556973 0.770057 -1.779019\nv 1.440307 0.702542 -4.311156\nv 1.484962 1.267179 2.405497\nv 1.543368 1.020380 0.010069\nv 1.548375 0.945057 -2.073673\nv 0.839751 2.110788 -1.015119\nv 0.115079 2.202980 1.232322\nv 0.926220 2.193260 0.857458\nv 0.926709 2.204798 0.019693\nv 1.273548 1.509434 -1.899609\nv 1.168749 1.724188 2.039005\nv 1.348637 1.588891 0.118053\nv 1.391279 1.322500 -3.503012\nv 1.692547 0.848806 -2.759018\nv 0.158915 1.519827 -3.611619\nv 1.699734 1.106921 -3.297311\nv 0.902375 0.105994 -4.582556\nv 0.273486 0.218831 2.951109\nv 0.555638 1.002748 -4.709844\nv 0.481735 1.552222 -2.427359\nv 0.582517 2.270027 0.234832\nv 0.882308 1.720183 2.414251\nv 0.960324 1.699007 2.781133\nv 0.911277 0.668930 -4.677900\nv 0.720228 1.183189 3.004107\nv 0.345167 2.143236 -1.090918\nv 0.583647 2.216621 1.157893\nv 0.880442 1.414075 -3.485070\nv 0.695441 1.073369 -4.600725\nv 0.462541 2.181504 -0.871863\nv 0.461415 2.274551 0.447967\nv 0.786704 1.717108 2.644744\nv 0.743724 0.147227 -4.812375\nv 0.775632 0.763861 -4.742085\nv 0.799952 0.509933 2.870745\nv 0.656066 1.561750 -2.271475\nv 0.687821 1.730801 2.332050\nv 0.618789 1.530624 -2.618731\nv 1.536816 0.019645 -0.640033\nv 1.410974 1.467996 -1.095633\nv 1.568959 0.831725 -0.614272\nv 0.932905 2.128813 -0.825028\nv 0.461415 2.248930 -0.394680\nv 1.481115 0.016323 -0.849506\nv 0.583643 2.220443 -0.617163\nv 1.693638 0.066421 -0.852075\nv 1.552184 1.005559 -0.837260\nv 1.349821 1.534222 -0.794201\nv 0.114831 2.233094 -0.628814\nv 1.692547 1.049124 -3.496996\nv 1.352716 1.114453 -4.131237\nv 0.733944 0.105994 -4.495048\nv 0.753362 1.318483 -4.049319\nv 1.661312 0.116276 -3.990036\nv 0.896711 1.238315 -4.168387\nv 1.692547 0.523932 -3.974809\nv 1.699734 0.688961 -3.952749\nv 0.187483 0.105994 -4.368071\nv 0.182866 1.241931 -4.345264\nv 1.387091 1.408658 -2.786458\nv 1.689144 0.072630 -2.562068\nv 0.000000 1.535427 -2.689874\nv 0.641941 1.496121 -3.055480\nv 1.692547 0.259567 -2.580179\nv 1.699734 0.721731 -2.636883\nv 1.667585 0.071673 -2.593991\nv 1.227689 1.466720 -2.645999\nv 1.365971 1.563732 0.740921\nv 1.692547 1.049714 1.393036\nv 1.666924 0.057450 0.895199\nv 1.692547 0.583181 0.938650\nv 1.699734 0.755715 0.968579\nv 1.304412 1.630748 0.981286\nv 1.027316 1.954554 -1.250082\nv 1.075856 2.027517 0.195066\nv 1.588660 0.036538 0.537622\nv 0.000000 2.236310 0.990502\nv 1.601475 0.821345 0.626377\nv 0.926589 2.211740 0.420645\nv 0.461415 2.242074 0.950788\nv 1.393654 1.541427 0.304784\nv 1.479736 0.030902 0.324737\nv 0.582517 2.266768 0.664848\nv 0.114831 2.267923 0.702662\nv 1.666381 0.085312 0.314899\nv 1.527941 1.026554 0.407707\nv 1.329501 1.613031 0.525185\nv 1.151535 1.682872 -1.639244\nv 1.238926 1.741918 0.146973\nv 0.000000 1.731691 2.406773\nv 0.815348 1.564483 -2.146225\nv 0.511235 1.742774 2.311668\nv 1.250859 1.661991 1.151328\nv 1.301317 1.568377 -0.547339\nv 0.164105 1.578066 -2.288316\nv 0.998608 1.745054 2.054106\nv 1.266258 1.533715 -1.579955\nv 1.277400 1.642480 0.772850\nv 1.298193 1.622910 0.327837\nv 1.370875 0.256958 2.735938\nv 1.474403 0.421334 2.649426\nv 1.407875 1.098406 2.749423\nv 1.207679 1.126337 2.951946\nv 0.709845 1.127050 3.160917\nv 0.271300 0.220535 3.155169\nv 0.980753 0.220195 3.037455\nv 1.224856 0.201751 2.783034\nv 1.497572 0.237379 2.577441\nv 1.493292 1.081614 2.594959\nv 1.307436 1.153980 2.797071\nv 0.867588 1.161959 3.049170\nv 0.861189 0.211454 2.998842\nv 1.536637 0.022050 -1.141140\nv 1.566102 0.808855 -1.134498\nv 1.398695 1.451252 -1.717329\nv 1.295110 1.547184 -1.043412\nv 1.478943 0.024095 -1.470809\nv 1.690377 0.070988 -1.472661\nv 1.545794 0.972930 -1.449642\nv 1.341331 1.517591 -1.359205\nv 1.347372 1.614371 1.415205\nv 1.594779 1.103883 2.253791\nv 1.188140 1.710210 1.629247\nv 1.699734 1.115263 1.583637\nv 1.271375 1.678084 1.536634\nv 1.288081 0.793321 2.882023\nv 1.538839 0.739043 2.527920\nv 0.829911 0.748303 3.009118\nv 1.480173 0.762023 2.652180\nv 0.692265 0.693353 3.035523\nv 1.389945 0.634638 2.761861\nv 1.192109 0.649834 2.956301\nv 1.509500 0.604387 2.586080\nv 1.557804 0.648196 -0.051490\nv 1.570634 0.574375 -2.082042\nv 1.566529 0.629080 -0.846290\nv 1.692547 0.541471 -2.606116\nv 1.692547 0.095779 0.894825\nv 1.555632 0.646119 0.342499\nv 1.559497 0.601189 -1.461421\nv 1.554633 0.446100 -0.627952\nv 1.699734 0.393020 -2.548737\nv 1.552815 0.432215 -1.138371\nv 1.609371 0.468238 0.565854\nv 1.534260 0.468465 0.114800\nv 1.545762 0.414098 -1.790889\nv 1.087535 0.208358 2.775151\nv 0.827350 1.534948 -2.348612\nv 0.994487 1.182950 2.928301\nv 0.591405 2.133184 -1.060698\nv 1.200562 0.105994 -4.421868\nv 0.829395 2.237140 0.230328\nv 1.160472 1.715294 2.281367\nv 1.148093 1.692911 2.665301\nv 1.230363 0.698104 -4.498884\nv 0.830372 2.197106 1.094656\nv 1.246755 1.385192 -3.366743\nv 0.831196 2.190623 -0.613712\nv 0.900065 0.105994 -4.319368\nv 1.229040 1.198300 -4.064003\nv 0.807302 1.499835 -2.799323\nv 0.829333 2.237777 0.630816\nv 1.104329 1.537617 -1.971445\nv 0.804227 1.743195 2.206116\nv 0.996654 1.126812 3.074081\nv 1.174320 0.264554 2.918822\nv 0.918118 0.692950 2.975940\nv 1.053268 0.105994 -4.408748\nv 1.430238 0.023772 -1.799929\nv 1.422046 0.022368 0.109411\nv 0.713262 2.167193 -0.849668\nv 0.705832 2.263978 0.432242\nv 1.050848 1.713570 2.557734\nv 1.072328 0.147227 -4.662202\nv 1.064303 0.768650 -4.603831\nv 0.992235 1.534569 -2.144806\nv 1.116084 0.449145 3.000374\nv 0.973320 1.729060 2.222543\nv 1.024763 1.500428 -2.493207\nv 1.430525 0.016556 -0.282742\nv 0.705832 2.256353 0.025323\nv 1.067631 1.364789 -3.600831\nv 1.508537 0.038140 -2.323812\nv 1.058831 1.427654 -3.254310\nv 1.609724 0.040246 0.861192\nv 0.705771 2.239985 0.902871\nv 1.106117 1.161530 2.944710\nv 1.056404 0.208774 2.911844\nv 1.432137 0.014212 -1.139850\nv 1.108550 1.035778 3.033285\nv 0.710787 2.191477 1.246958\nv 1.335832 0.323947 -4.233678\nv 0.776936 0.540227 -4.718076\nv 1.692547 0.282378 -3.990657\nv 1.043728 0.533790 -4.601213\nv 1.240371 0.405399 -4.233678\nv 0.184501 0.418738 -4.701402\nv 1.411055 0.404443 -4.233678\nv 0.908116 0.404290 -4.642412\nv 1.692547 1.048418 -3.088437\nv 0.157342 1.522200 -3.288385\nv 1.699734 0.996040 -2.891058\nv 1.240587 1.433929 -3.016898\nv 0.844186 1.465159 -3.152525\nv 1.692547 0.830792 -3.823921\nv 1.699734 0.992733 -3.689656\nv 0.893870 1.335345 -3.832032\nv 0.163007 1.506775 -3.971390\nv 1.240105 1.307942 -3.724416\nv 1.692547 0.865922 1.088500\nv 1.222022 1.686385 1.402226\nv 1.350217 1.585637 1.128061\nv 0.931578 2.154639 1.184682\nv 0.465272 2.188640 1.309341\nv 1.170095 1.796010 1.264131\nv 1.699734 1.005741 1.206587\nv 1.287480 1.653753 1.277054\nv 0.350976 2.166846 1.389786\nv 0.839810 2.159883 1.274641\nv 1.046020 2.018750 1.251682\nv 0.592111 2.174320 1.338359\nv 1.343675 1.641423 1.703397\nv 1.692547 1.061206 1.768720\nv 1.118657 1.734384 1.854140\nv 1.699734 1.028648 1.950063\nv 1.244040 1.702683 1.788991\nv 1.692547 0.698572 2.238879\nv 1.607111 0.576882 2.464046\nv 1.692547 0.362791 2.314061\nv 1.592453 0.218621 2.470627\nv 1.338579 0.776254 -4.400829\nv 1.198712 0.837994 -4.506784\nv 1.373765 1.432160 2.520323\nv 1.472481 1.403490 2.155418\nv 1.517558 1.184617 -0.588779\nv 1.520013 1.141929 -2.341276\nv 0.185645 0.862516 -4.827972\nv 1.516561 1.166265 -1.121451\nv 1.403425 0.868611 -4.300873\nv 1.478737 1.235554 0.689070\nv 1.497301 1.210035 0.239499\nv 1.509932 1.137077 -1.759481\nv 1.479238 1.353312 1.406483\nv 0.900621 0.833545 -4.686778\nv 1.547293 1.231330 -3.109272\nv 1.527862 1.059651 -3.835668\nv 1.476605 1.281600 1.093167\nv 1.481899 1.389673 1.769294\nv 1.298465 1.029071 2.890735\nv 1.543990 0.984506 2.483637\nv 0.864225 1.036154 3.146978\nv 1.486818 0.991288 2.648984\nv 1.119714 0.791265 3.014600\nv 1.692547 0.920665 2.059088\nv 0.708776 0.933109 3.178807\nv 1.398422 0.894518 2.766658\nv 1.200444 0.916878 2.966781\nv 1.515167 0.867418 2.582604\nv 0.988901 0.932926 3.092719\nv 1.609983 0.859270 2.392107\nv 1.571602 1.047542 0.897732\nv 1.688483 0.056225 0.856219\nv 1.582634 1.265259 1.584275\nv 1.699734 0.442844 0.872907\nv 1.580952 1.178215 1.217875\nv 1.573468 1.244218 1.988510\nv 1.699734 0.556316 2.332305\nv 1.689929 0.210347 2.355386\nv 1.699734 0.834637 2.196647\nv 1.670249 1.143279 1.383090\nv 1.678603 0.622239 0.806243\nv 1.669828 0.965320 1.054517\nv 1.670670 1.153894 1.783404\nv 1.677665 0.965450 2.166872\nv 1.676254 0.373354 2.409434\nv 1.676930 0.721582 2.345494\nv 1.682871 0.116289 -4.018241\nv 1.621670 1.184817 -3.299791\nv 1.591775 0.871033 -3.986821\nv 1.604500 0.048079 -2.310534\nv 1.615254 0.757220 -2.337200\nv 1.604430 0.985051 -2.569323\nv 1.620985 0.402831 -2.310513\nv 1.699734 0.391888 -4.018727\nv 1.618279 1.119163 -2.904075\nv 1.614673 1.080957 -3.687195\nv 1.681139 0.566309 -2.492168\nv 1.676867 0.538204 -4.055073\nv 1.680006 1.118599 -3.084918\nv 1.677255 0.897316 -3.858193\nv 1.486887 0.167121 2.522538\nv 1.668370 0.206806 2.316612\nv 1.505177 0.156796 2.454783\nv 1.287720 0.183119 2.621342\nv 0.557758 0.105994 -4.679001\nv 0.344494 2.277268 0.237748\nv 0.552777 1.722229 2.478005\nv 0.698565 1.699731 2.852513\nv 0.516393 0.661180 -4.698411\nv 0.345237 2.209091 1.207254\nv 0.438516 1.511979 -3.577625\nv 0.716493 0.218831 2.914304\nv 0.185432 1.001947 -4.755904\nv 0.163112 1.552330 -2.455547\nv 0.273169 1.201412 3.041523\nv 0.115093 2.146947 -1.107286\nv 0.344494 2.226940 -0.622065\nv 0.555480 0.105994 -4.346231\nv 0.542168 1.240557 -4.302245\nv 0.344494 2.266696 0.689293\nv 0.170656 1.743356 2.356618\nv 0.492427 1.577941 -2.241975\nv 0.271270 1.127050 3.197721\nv 0.709965 0.220536 3.118558\nv 0.260755 0.656027 3.069491\nv 0.516432 0.418460 -4.665811\nv 0.419117 1.515137 -3.250346\nv 0.460330 1.498520 -3.933187\nv 0.117025 2.161839 1.416382\nv 0.273486 1.441980 3.005491\nv 0.552948 0.862656 -4.785542\nv 0.270923 0.933110 3.215346\nv 0.464415 0.504174 3.056322\nv 0.488001 1.313365 3.006404\nv 0.347566 1.731389 2.393435\nv 0.369579 1.075184 -4.652121\nv 0.229662 2.187191 -0.885153\nv 0.229662 2.279560 0.455943\nv 0.438025 1.717508 2.692461\nv 0.377899 0.147227 -4.882413\nv 0.359546 0.731242 -4.725558\nv 0.327119 1.565757 -2.323706\nv 0.229662 2.278357 0.024947\nv 0.372283 0.105994 -4.549158\nv 0.321813 1.535204 -2.672662\nv 0.229662 2.238639 0.978437\nv 0.518448 1.162020 3.106819\nv 0.518448 0.211797 3.053921\nv 0.497799 0.748391 3.061356\nv 0.359657 0.542774 -4.704016\nv 0.308381 1.518196 -3.113595\nv 0.313677 1.511610 -3.775142\nv 0.231645 2.181988 1.348400\nv 0.488005 1.570433 2.973445\nv 0.371181 0.927851 -4.786499\nv 0.515916 1.036208 3.206475\nv 1.615013 0.054937 -2.561584\nv 1.626204 0.054002 -2.481541\nv 1.495813 0.030111 0.570406\nv 1.619450 0.037920 0.759913\nv 1.621302 0.152809 2.344796\nv 1.628871 0.157896 2.401922\nv 1.176460 0.105994 -4.230187\nv 1.312883 0.105994 -4.244095\nv 1.429598 0.182448 2.600582\nv 0.775600 0.296323 -4.683673\nv 1.034696 0.293701 -4.566854\nv 1.381526 0.147227 -4.436802\nv 1.692547 0.147137 -3.982693\nv 1.675003 0.283576 -4.067363\nv 0.360043 0.333183 -4.675603\nv 1.212583 0.196387 -4.458169\nv 0.554098 0.196328 -4.737293\nv 1.699734 0.201620 -4.014428\nv 0.904940 0.214099 -4.633203\nv 1.422112 0.196387 -4.289083\nv 0.186203 0.196329 -4.782150\nv 1.602598 0.116302 -4.151668\nv 1.232676 0.116302 -4.532639\nv 0.908418 0.116302 -4.726347\nv 0.563569 0.116302 -4.832689\nv 0.188949 0.116302 -4.878948\nv 0.188949 0.178151 -4.887277\nv 0.563569 0.178151 -4.841381\nv 0.909778 0.178151 -4.735307\nv 1.236756 0.178151 -4.541773\nv 1.463735 0.178151 -4.335615\nv 1.678232 0.147214 -4.064822\nv 1.349615 0.105994 -4.388173\nv 1.062925 0.105994 -4.588568\nv 0.739751 0.105994 -4.734973\nv 0.374620 0.105994 -4.805237\nv 0.000000 0.188459 -4.842034\nv 0.374620 0.188459 -4.816584\nv 0.740204 0.188459 -4.746772\nv 1.066553 0.188459 -4.600630\nv 1.355963 0.188459 -4.400013\nv 1.425376 0.105994 -4.248672\nv 1.594163 0.688171 -4.120677\nv 0.727247 1.194866 -4.354261\nv 1.465513 0.105994 -4.056546\nv 1.055891 1.177871 -4.241818\nv 1.605381 0.398022 -4.136522\nv 1.487731 0.942839 -4.094472\nv 0.366473 1.197257 -4.424760\nv 1.591262 0.212837 -4.138710\nv 1.459653 0.116302 -4.327668\nv 1.604110 0.178151 -4.157210\nv 1.208248 1.127647 -4.256328\nv 0.552015 1.140979 -4.515455\nv 0.893208 1.151366 -4.392328\nv 1.534076 0.533672 -4.204710\nv 1.416152 1.020605 -4.177801\nv 1.534395 0.147227 -4.248984\nv 1.488454 0.804824 -4.207838\nv 0.184063 1.141280 -4.564554\nv 1.550175 0.105994 -4.092209\nv 1.521543 0.292280 -4.195553\nv 1.505798 0.105994 -4.225522\nv 1.509577 0.188459 -4.234561\nv 1.376265 1.213532 -3.863489\nv 1.066857 1.273951 -3.955340\nv 0.323584 1.493247 -4.141743\nv 1.395946 1.379049 -3.142009\nv 0.699910 1.460162 -3.365814\nv 0.302810 1.519113 -3.433108\nv 1.039532 1.467275 -2.914968\nv 1.538645 1.186795 -2.760396\nv 1.678735 0.933771 -2.730618\nv 0.738608 1.401236 -3.701226\nv 1.543919 1.199749 -3.492419\nv 1.679581 1.116433 -3.506743\nv 1.273039 1.566839 2.626608\nv 1.386572 1.562725 2.264463\nv 1.460197 1.382630 0.078303\nv 1.458097 1.308071 -2.052367\nv 1.484993 1.297526 -3.304317\nv 0.698313 0.928653 -4.736194\nv 1.469388 1.347468 -0.818425\nv 1.449903 1.081235 -3.989110\nv 1.469189 1.313311 -2.574280\nv 1.408353 1.437689 0.940452\nv 1.433743 1.411734 0.481806\nv 1.466123 1.325519 -1.429700\nv 1.408654 1.515854 1.574303\nv 1.480520 1.311954 -2.939428\nv 1.470900 1.212166 -3.669831\nv 1.406281 1.472334 1.260399\nv 1.409488 1.539585 1.911536\nv 0.827239 2.076138 -1.120072\nv 0.981655 1.952254 -1.289727\nv 1.099143 1.696737 -1.656418\nv 1.051667 1.567130 -1.921411\nv 0.795562 1.589740 -2.082687\nv 0.483511 1.600272 -2.178408\nv 0.160848 1.599770 -2.223283\nv 0.116523 2.109039 -1.218944\nv 0.348961 2.105958 -1.202720\nv 0.598396 2.094806 -1.167809\nv 0.721832 2.099410 -1.120815\nv 0.930007 2.050639 -1.127351\nv 1.064573 1.830298 -1.468131\nv 1.142589 1.583077 -1.816206\nv 0.947856 1.567648 -2.025888\nv 0.649451 1.588679 -2.165520\nv 0.325718 1.591257 -2.226704\nv 0.000000 1.591368 -2.261152\nv 0.231646 2.121562 -1.189662\nv 0.466994 2.116246 -1.167507\nv 0.819277 2.051069 -1.130700\nv 0.963470 1.932830 -1.295599\nv 1.077137 1.686130 -1.649979\nv 1.034304 1.560213 -1.904112\nv 0.786396 1.581620 -2.058903\nv 0.477266 1.591265 -2.153200\nv 0.158294 1.590520 -2.196315\nv 0.115786 2.083107 -1.227288\nv 0.347890 2.080105 -1.211618\nv 0.598167 2.068771 -1.176519\nv 0.721698 2.072372 -1.151161\nv 0.904362 2.029197 -1.160430\nv 1.027707 1.825313 -1.478871\nv 1.102556 1.592956 -1.804149\nv 0.927233 1.577653 -1.994301\nv 0.638010 1.596370 -2.127678\nv 0.319281 1.597844 -2.186603\nv 0.000000 2.096417 -1.229743\nv 0.232668 2.094544 -1.219286\nv 0.469471 2.089064 -1.197246\nv 0.167491 1.763276 2.295132\nv 0.497496 1.763335 2.249120\nv 0.768915 1.766577 2.143169\nv 0.939579 1.776348 1.999501\nv 1.058735 1.774521 1.815503\nv 1.140135 1.754282 1.606308\nv 1.175436 1.733626 1.415203\nv 1.151243 1.814151 1.317962\nv 1.041162 2.013236 1.308679\nv 0.847132 2.138213 1.339043\nv 0.603076 2.148560 1.400084\nv 0.359052 2.141339 1.451708\nv 0.119820 2.137502 1.477432\nv 0.336823 1.755473 2.306026\nv 0.655978 1.755851 2.224962\nv 0.881925 1.759928 2.092354\nv 1.016436 1.764051 1.925972\nv 1.121528 1.746589 1.718960\nv 1.174612 1.723431 1.509082\nv 1.190021 1.730532 1.329327\nv 1.110892 1.908918 1.286217\nv 0.954764 2.107172 1.292361\nv 0.722040 2.159794 1.346139\nv 0.475359 2.156013 1.406256\nv 0.237198 2.150884 1.445269\nv 0.164765 1.753219 2.269928\nv 0.489548 1.753547 2.224674\nv 0.755610 1.757630 2.121457\nv 0.923512 1.770020 1.982154\nv 1.043978 1.771503 1.801611\nv 1.126696 1.752871 1.594701\nv 1.160614 1.733416 1.414392\nv 1.139856 1.805658 1.328437\nv 1.036325 1.993387 1.320526\nv 0.845547 2.114922 1.350052\nv 0.603041 2.124004 1.410294\nv 0.358032 2.116899 1.462143\nv 0.118859 2.113375 1.487628\nv 0.330963 1.760757 2.266383\nv 0.640518 1.762164 2.187967\nv 0.856685 1.769443 2.063654\nv 0.990733 1.780524 1.905414\nv 1.099506 1.768091 1.704017\nv 1.152738 1.746888 1.502506\nv 1.166157 1.752260 1.353858\nv 1.102079 1.902279 1.319918\nv 0.954194 2.088949 1.326347\nv 0.727116 2.136564 1.377670\nv 0.480515 2.132041 1.437498\nv 0.239424 2.127275 1.476827\nv 1.410804 1.489709 -0.560957\nv 0.926835 2.186395 -0.398812\nv 1.533614 0.024394 -0.299001\nv 1.565543 0.838666 -0.218339\nv 0.461415 2.270061 0.026025\nv 1.304470 1.596452 -0.097311\nv 1.551218 0.455750 -0.259633\nv 1.432233 0.011806 -0.634122\nv 0.705832 2.236582 -0.396788\nv 1.514166 1.191913 -0.161542\nv 0.229662 2.255821 -0.397915\nv 1.691176 0.070512 -0.469211\nv 1.550169 1.014799 -0.396689\nv 1.350855 1.560951 -0.325854\nv 1.479229 0.019284 -0.464635\nv 0.582517 2.259125 -0.184733\nv 0.114831 2.273982 -0.187859\nv 1.564605 0.640568 -0.431570\nv 0.829395 2.226981 -0.186732\nv 1.466833 1.364476 -0.354161\nv 0.344494 2.266222 -0.185109\nv 0.983527 2.153982 -0.009857\nv 1.082850 2.011136 0.132473\nv 1.225525 1.761336 0.090599\nv 1.266999 1.644428 -0.119578\nv 1.263405 1.618019 -0.547761\nv 1.254534 1.596292 -1.035648\nv 1.228248 1.583759 -1.489495\nv 1.166113 1.686857 -1.554054\nv 1.060644 1.920038 -1.219919\nv 0.991507 2.083750 -0.809389\nv 0.984447 2.136869 -0.395364\nv 0.971483 2.171366 -0.191309\nv 0.998158 2.139826 0.140152\nv 1.171922 1.875349 0.131390\nv 1.269596 1.661162 0.055000\nv 1.278239 1.609246 -0.323447\nv 1.273253 1.582987 -0.782251\nv 1.257899 1.567284 -1.289043\nv 1.208760 1.589185 -1.657855\nv 1.108830 1.812026 -1.428393\nv 0.998485 2.043916 -1.023872\nv 0.973528 2.138458 -0.607410\nv 0.982592 2.143464 0.846354\nv 0.986441 2.111748 1.147024\nv 1.058353 2.002185 1.193202\nv 1.165094 1.810115 1.203464\nv 1.215709 1.707424 1.124779\nv 1.240769 1.690457 0.773113\nv 1.259441 1.672868 0.355466\nv 1.228099 1.758060 0.207091\nv 1.086954 2.006105 0.249823\nv 0.982645 2.161668 0.438933\nv 0.970832 2.181258 0.615997\nv 0.971502 2.147366 1.054937\nv 0.997268 2.094991 1.205529\nv 1.119063 1.906236 1.221731\nv 1.206900 1.720752 1.214736\nv 1.241305 1.677155 0.997771\nv 1.266277 1.659986 0.535785\nv 1.267326 1.669286 0.216171\nv 1.175411 1.870563 0.196025\nv 0.998356 2.141710 0.295346\nv 0.978254 2.127007 -0.020892\nv 1.071049 1.993523 0.111542\nv 1.203653 1.761294 0.072707\nv 1.241548 1.653238 -0.128285\nv 1.237842 1.628239 -0.547957\nv 1.228642 1.605702 -1.034817\nv 1.205217 1.591917 -1.460823\nv 1.153643 1.679217 -1.519192\nv 1.056566 1.895416 -1.208329\nv 0.987688 2.057475 -0.803199\nv 0.979586 2.110168 -0.393206\nv 0.984309 2.133208 -0.195343\nv 1.007471 2.105507 0.100466\nv 1.160563 1.872829 0.092448\nv 1.245183 1.686038 0.023521\nv 1.252512 1.639961 -0.329254\nv 1.247306 1.614195 -0.783049\nv 1.231725 1.597093 -1.274689\nv 1.194327 1.612396 -1.573161\nv 1.117632 1.788613 -1.394767\nv 1.013275 2.009284 -1.008608\nv 0.987378 2.101166 -0.601532\nv 0.977015 2.116940 0.843841\nv 0.980464 2.087036 1.134656\nv 1.047575 1.985523 1.172758\nv 1.146049 1.807984 1.181883\nv 1.191199 1.714744 1.112002\nv 1.214916 1.698858 0.770977\nv 1.233073 1.682248 0.365232\nv 1.206820 1.757427 0.226952\nv 1.076336 1.987120 0.267507\nv 0.976950 2.135271 0.446871\nv 0.982882 2.143143 0.618442\nv 0.983528 2.110366 1.044646\nv 1.005373 2.066857 1.170055\nv 1.112888 1.900708 1.181741\nv 1.186352 1.742770 1.176324\nv 1.214846 1.706202 0.988712\nv 1.238967 1.689991 0.538671\nv 1.241434 1.696277 0.252470\nv 1.168051 1.862613 0.234103\nv 1.007868 2.107747 0.324502\nv 0.760466 1.062788 -4.592772\nv 0.904280 1.123753 -4.433817\nv 1.205669 1.103973 -4.296600\nv 1.398631 1.012853 -4.217566\nv 1.381485 0.909735 -4.304284\nv 1.186532 0.877470 -4.500674\nv 0.904250 0.872352 -4.673189\nv 0.762425 0.934773 -4.714788\nv 0.752395 1.000750 -4.676438\nv 0.786520 1.119480 -4.501824\nv 1.049857 1.125708 -4.360955\nv 1.335078 1.080065 -4.231493\nv 1.423530 0.944279 -4.231098\nv 1.312047 0.879302 -4.401375\nv 1.048024 0.864491 -4.602834\nv 0.790730 0.880383 -4.727417\nv 0.767856 1.043563 -4.581652\nv 0.907619 1.099306 -4.432539\nv 1.197728 1.083215 -4.297620\nv 1.377604 1.005453 -4.218063\nv 1.358540 0.913662 -4.296998\nv 1.171746 0.882616 -4.483181\nv 0.900615 0.878064 -4.648882\nv 0.767771 0.931130 -4.691368\nv 0.766189 0.992345 -4.663515\nv 0.800180 1.099842 -4.503262\nv 1.052037 1.105238 -4.370088\nv 1.325520 1.066102 -4.241251\nv 1.400736 0.950154 -4.237786\nv 1.297022 0.891881 -4.392831\nv 1.040913 0.877485 -4.587128\nv 0.800548 0.891025 -4.704525\nv 0.185375 0.794546 -4.820868\nv 0.528294 0.794544 -4.784437\nv 0.685839 0.739074 -4.756147\nv 0.685847 0.540077 -4.733326\nv 0.685848 0.321019 -4.702498\nv 0.528890 0.245486 -4.718917\nv 0.185970 0.245477 -4.757699\nv 0.000000 0.819797 -4.839772\nv 0.367305 0.819797 -4.818451\nv 0.668830 0.802789 -4.773020\nv 0.711353 0.664867 -4.756396\nv 0.711363 0.410519 -4.722013\nv 0.668925 0.242036 -4.705804\nv 0.367810 0.219936 -4.749602\nv 0.000000 0.731438 -4.744102\nv 0.184274 0.776386 -4.741135\nv 0.516225 0.776373 -4.706937\nv 0.663909 0.730736 -4.680703\nv 0.663889 0.541941 -4.658405\nv 0.663832 0.332891 -4.628985\nv 0.516895 0.266964 -4.645017\nv 0.184995 0.266873 -4.681388\nv 0.000000 0.333109 -4.695570\nv 0.000000 0.542928 -4.723114\nv 0.000000 0.782234 -4.791441\nv 0.361333 0.782229 -4.772506\nv 0.634189 0.769968 -4.732273\nv 0.671965 0.660587 -4.717729\nv 0.671952 0.415973 -4.684322\nv 0.634332 0.276476 -4.671295\nv 0.362373 0.259167 -4.710412\nv 0.000000 0.259130 -4.731124\nv 1.174852 1.280841 2.798311\nv 1.242651 1.363117 2.739429\nv 1.213657 1.520319 2.717839\nv 1.126722 1.598533 2.751458\nv 0.975863 1.602260 2.848629\nv 0.752062 1.602527 2.917926\nv 0.613920 1.521432 2.966028\nv 0.613889 1.360899 2.991807\nv 0.749445 1.281464 2.969848\nv 0.992410 1.281242 2.900034\nv 1.096672 1.232197 2.851942\nv 1.253232 1.258885 2.743237\nv 1.256567 1.445156 2.714787\nv 1.198321 1.618617 2.698810\nv 1.057092 1.649860 2.794494\nv 0.872151 1.651515 2.885539\nv 0.622622 1.625309 2.942206\nv 0.584584 1.441423 2.991730\nv 0.622232 1.258696 2.993857\nv 0.875212 1.232570 2.944761\nv 1.155326 1.304271 2.787763\nv 1.214136 1.372920 2.736512\nv 1.187823 1.505354 2.717561\nv 1.110924 1.571579 2.746814\nv 0.969469 1.575027 2.836529\nv 0.758285 1.575485 2.902716\nv 0.631164 1.506841 2.946315\nv 0.631081 1.371881 2.969324\nv 0.755233 1.305482 2.949105\nv 0.984590 1.305110 2.881905\nv 1.085976 1.300271 2.844439\nv 1.213946 1.317760 2.756890\nv 1.215775 1.442119 2.734489\nv 1.168711 1.559502 2.721245\nv 1.052461 1.580543 2.798636\nv 0.877084 1.581828 2.884459\nv 0.659427 1.564055 2.934349\nv 0.626661 1.439844 2.975038\nv 0.658603 1.318151 2.976326\nv 0.877208 1.300768 2.932723\nv 1.642243 0.840602 -2.764729\nv 1.642243 0.537335 -2.616248\nv 1.642243 0.103311 -2.602573\nv 1.642243 0.147125 -3.973249\nv 1.642243 0.282307 -3.980994\nv 1.642243 0.521469 -3.965163\nv 1.642243 0.823428 -3.817304\nv 1.642243 1.039441 -3.494919\nv 1.642243 1.038988 -3.089674\nv 1.670988 0.959584 -2.903744\nv 1.670988 0.695401 -2.669829\nv 1.670988 0.385416 -2.593596\nv 1.670988 0.201486 -3.976309\nv 1.670988 0.389124 -3.979786\nv 1.670988 0.669514 -3.917532\nv 1.670988 0.955856 -3.673445\nv 1.670988 1.068910 -3.295678\nv 1.642243 1.038581 1.395373\nv 1.642243 1.051026 1.766056\nv 1.642243 0.913539 2.049276\nv 1.642243 0.695049 2.225511\nv 1.642243 0.361416 2.300957\nv 1.642243 0.283187 0.908637\nv 1.642243 0.577166 0.949425\nv 1.642243 0.856703 1.095316\nv 1.670988 0.963835 1.223228\nv 1.670988 1.070968 1.585176\nv 1.670988 0.993600 1.925071\nv 1.670988 0.813227 2.146734\nv 1.670988 0.548085 2.279090\nv 1.670988 0.425566 0.919180\nv 1.670988 0.725156 1.005945\nv 1.536102 0.295848 -0.091794\nv 1.556086 0.264292 -2.088548\nv 1.545168 0.277911 -0.848791\nv 1.692547 0.103719 -2.591833\nv 1.536643 0.308711 0.316236\nv 1.540529 0.270387 -1.467383\nv 1.692547 0.285717 0.896463\nv 1.675890 0.301961 0.759843\nv 1.679109 0.264658 -2.465156\nv 1.542904 0.286270 -0.454280\nv 1.642243 0.258657 -2.591480\nv 1.642243 0.095747 0.907695\nv 1.554398 0.174489 -0.286981\nv 1.620893 0.170286 -2.302788\nv 1.557060 0.164192 -1.140362\nv 1.699734 0.171396 0.857641\nv 1.537439 0.184256 0.096721\nv 1.552138 0.164191 -1.798653\nv 1.605980 0.189686 0.535818\nv 1.699734 0.165130 -2.554512\nv 1.557814 0.167625 -0.636470\nv 1.670988 0.162731 -2.598330\nv 1.670988 0.167442 0.908055\nv 1.666155 0.038521 -1.803642\nv 1.677951 0.057631 -2.310842\nv 1.698038 0.102468 -2.479419\nv 1.680017 0.124931 -2.306389\nv 1.670187 0.111648 -1.801427\nv 1.674716 0.108300 -1.142069\nv 1.675272 0.109688 -0.639384\nv 1.671857 0.115811 -0.293375\nv 1.654898 0.124193 0.092708\nv 1.664709 0.133219 0.535057\nv 1.694425 0.094610 0.755355\nv 1.661947 0.048409 0.535222\nv 1.649926 0.039110 0.088523\nv 1.666885 0.032931 -0.301345\nv 1.670300 0.027985 -0.641820\nv 1.670057 0.029849 -1.142586\nv 1.607088 0.024830 -1.472651\nv 1.611803 0.035690 -2.083555\nv 1.616454 0.129739 -2.079406\nv 1.612883 0.125881 -1.470829\nv 1.616510 0.124518 -0.850771\nv 1.614100 0.129741 -0.464821\nv 1.607299 0.136668 -0.108259\nv 1.593958 0.146154 0.294783\nv 1.587881 0.031567 0.295204\nv 1.600670 0.025034 -0.119469\nv 1.607471 0.020019 -0.471759\nv 1.609985 0.017058 -0.851535\nv 0.000000 1.523420 -3.451893\nv 0.165183 1.522145 -2.940059\nv 0.443163 1.520696 -2.899916\nv 0.513168 1.510954 -3.081778\nv 0.525354 1.503775 -3.391952\nv 0.562886 1.488429 -3.730991\nv 0.587524 1.459965 -4.087626\nv 0.471941 1.473480 -4.252317\nv 0.167040 1.482145 -4.293209\nv 0.000000 1.515647 -3.792556\nv 0.578567 1.494571 -3.235447\nv 0.626477 1.467222 -3.548585\nv 0.657182 1.419521 -3.894764\nv 0.663289 1.366179 -4.204469\nv 0.183046 1.289271 -4.298347\nv 0.168898 1.447440 -4.319985\nv 0.456347 1.439954 -4.281594\nv 0.611556 1.360925 -4.238294\nv 0.507154 1.288040 -4.260444\nv 0.360413 1.270600 -4.300838\nv 0.000000 1.463662 -4.340528\nv 0.327325 1.459731 -4.325335\nv 0.573602 1.427573 -4.269178\nv 0.633018 1.292037 -4.251415\nv 0.177166 1.303550 -4.183011\nv 0.163178 1.450676 -4.203847\nv 0.441542 1.443402 -4.165939\nv 0.590739 1.369903 -4.123651\nv 0.489540 1.302370 -4.145795\nv 0.349931 1.297864 -4.236783\nv 0.000000 1.298950 -4.252131\nv 0.000000 1.446529 -4.272269\nv 0.320446 1.443013 -4.258144\nv 0.543393 1.417243 -4.204835\nv 0.589402 1.314063 -4.190771\nv 0.269887 0.303585 3.170044\nv 0.707182 0.303592 3.134599\nv 0.946796 0.303603 3.068637\nv 1.018510 0.491676 3.039961\nv 1.019919 0.749773 3.050858\nv 0.946947 0.819920 3.091276\nv 0.705507 0.820045 3.157634\nv 0.269469 0.820053 3.192569\nv 0.000000 0.260819 3.189336\nv 0.516184 0.260820 3.172464\nv 0.857605 0.260826 3.116366\nv 1.036134 0.313137 3.040519\nv 1.058740 0.649699 3.044316\nv 1.038865 0.838384 3.062621\nv 0.856952 0.861328 3.142795\nv 0.515647 0.861371 3.198710\nv 0.000000 0.861373 3.215474\nv 0.260994 0.322665 3.054957\nv 0.689454 0.322672 3.019706\nv 0.922782 0.322684 2.956992\nv 0.988173 0.503706 2.931258\nv 0.989404 0.747796 2.941618\nv 0.922577 0.810978 2.978558\nv 0.687540 0.811094 3.041603\nv 0.260516 0.811104 3.076271\nv 0.000000 0.748442 3.076991\nv 0.000000 0.319770 3.124425\nv 0.507529 0.319773 3.108637\nv 0.841718 0.319784 3.055871\nv 0.982258 0.365049 2.999321\nv 0.998444 0.652342 3.004180\nv 0.983747 0.792234 3.017663\nv 0.839751 0.808166 3.077941\nv 0.506454 0.808207 3.130131\nv 0.000000 0.808210 3.145705\nv 0.711742 0.630466 3.012641\nv 0.572985 0.504890 3.030399\nv 0.713416 0.379317 3.001164\nv 0.894227 0.379336 2.956036\nv 0.934494 0.504601 2.940785\nv 0.892439 0.630159 2.968155\nv 0.830306 0.653612 3.006188\nv 0.590877 0.616323 3.049165\nv 0.591417 0.392007 3.039283\nv 0.832199 0.354634 2.992360\nv 0.947183 0.391937 2.947294\nv 0.946438 0.615762 2.958050\nv 0.687926 0.627551 2.898145\nv 0.553168 0.509964 2.915565\nv 0.689703 0.392380 2.887326\nv 0.863011 0.392399 2.844711\nv 0.899689 0.509699 2.830957\nv 0.861138 0.627268 2.856153\nv 0.814516 0.624578 2.941241\nv 0.602608 0.595258 2.978627\nv 0.603211 0.418872 2.970809\nv 0.817047 0.389490 2.929970\nv 0.906477 0.418830 2.896388\nv 0.905754 0.594837 2.904984\nv 1.427493 0.629196 -4.315477\nv 1.477147 0.509770 -4.257019\nv 1.465830 0.317330 -4.248023\nv 1.402799 0.244323 -4.293064\nv 1.230192 0.244321 -4.411400\nv 1.115655 0.318443 -4.488968\nv 1.124066 0.510887 -4.513378\nv 1.251981 0.629198 -4.449226\nv 1.358593 0.652713 -4.397820\nv 1.481936 0.619861 -4.265509\nv 1.489454 0.401493 -4.238857\nv 1.458876 0.241380 -4.243922\nv 1.330379 0.220167 -4.361259\nv 1.124808 0.241538 -4.506316\nv 1.100028 0.402449 -4.550628\nv 1.142668 0.620022 -4.557270\nv 1.420696 0.623831 -4.233678\nv 1.467860 0.508407 -4.233678\nv 1.457057 0.323911 -4.233678\nv 1.397089 0.254848 -4.233678\nv 1.230314 0.254846 -4.233678\nv 1.118747 0.325184 -4.233678\nv 1.126832 0.509683 -4.233678\nv 1.251202 0.623832 -4.233678\nv 1.355345 0.622339 -4.314915\nv 1.459689 0.593498 -4.259183\nv 1.465765 0.403079 -4.248009\nv 1.440284 0.270632 -4.250022\nv 1.331418 0.253360 -4.299445\nv 1.147238 0.270948 -4.364069\nv 1.124396 0.404991 -4.383203\nv 1.162567 0.593819 -4.385851\nv 0.917198 2.013427 -1.078192\nv 1.066074 1.797754 -1.432308\nv 1.161334 1.568239 -1.722829\nv 0.950993 2.103862 0.253553\nv 1.154742 1.862233 0.163241\nv 1.240451 1.669096 0.142853\nv 1.175698 1.724030 1.264658\nv 1.101329 1.893875 1.248282\nv 0.946677 2.073029 1.208743\nv 0.000000 2.155099 1.123292\nv 0.496962 2.150671 1.083870\nv 0.487317 2.177626 -0.192112\nv 0.750143 2.161300 0.133300\nv 0.000000 2.189262 -0.165620\nv 0.235767 2.202812 0.199598\nv 0.480462 2.110264 -0.931237\nv 0.745223 2.121637 -0.589349\nv 0.233712 2.161559 -0.589516\nv 0.489480 2.196479 0.427037\nv 0.756039 2.158184 0.678353\nv 0.000000 2.206660 0.479010\nv 0.237152 2.192949 0.739857\nv 0.329100 1.375434 -4.181365\nv 0.000000 1.377735 -4.196102\nv 1.624017 1.620358 -1.417944\nv 1.555049 1.582546 -1.308230\nv 1.486372 1.586323 -1.387287\nv 1.572566 1.623045 -1.484225\nv 1.399789 1.582547 -1.396844\nv 1.350204 1.594277 -1.462504\nv 1.469060 1.623045 -1.539287\nv 1.572566 1.707228 -1.484225\nv 1.510367 1.736547 -1.479257\nv 1.555049 1.771139 -1.308230\nv 1.625090 1.744732 -1.310976\nv 1.469060 1.707228 -1.539287\nv 1.403276 1.719949 -1.534538\nv 1.399789 1.771139 -1.396844\nv 1.522254 1.663464 -1.524966\nv 1.614583 1.665136 -1.460518\nv 1.431562 1.665136 -1.557838\nv 1.319529 1.676843 -1.432817\nv 1.632934 1.676843 -1.263814\nv 1.625090 1.608953 -1.310976\nv 1.510367 1.603760 -1.479257\nv 1.403276 1.620358 -1.534538\nv 1.486372 1.767363 -1.387287\nv 1.624017 1.719949 -1.417944\nv 1.350204 1.759410 -1.462504\nv 1.573870 1.595041 -1.393172\nv 1.424909 1.595041 -1.472497\nv 1.573870 1.755300 -1.393172\nv 1.424909 1.755300 -1.472497\nv 1.355245 1.675170 -1.519235\nv 1.650282 1.675171 -1.352359\nv 1.545793 1.598528 -1.303579\nv 1.615654 1.676842 -1.263245\nv 1.545793 1.755157 -1.303579\nv 1.406070 1.755158 -1.384249\nv 1.336208 1.676843 -1.424583\nv 1.406070 1.598528 -1.384249\nv 1.474265 1.588653 -1.341027\nv 1.604005 1.610701 -1.266121\nv 1.604005 1.742985 -1.266121\nv 1.474265 1.765032 -1.341027\nv 1.344525 1.742985 -1.415932\nv 1.344525 1.610701 -1.415932\nv 1.551453 1.612403 -1.327258\nv 1.615307 1.676842 -1.290392\nv 1.551453 1.741283 -1.327258\nv 1.423746 1.741283 -1.400990\nv 1.359892 1.676843 -1.437856\nv 1.423746 1.612403 -1.400990\nv 1.480932 1.606053 -1.352575\nv 1.597488 1.623750 -1.285282\nv 1.597488 1.729936 -1.285282\nv 1.480932 1.747633 -1.352575\nv 1.364377 1.729936 -1.419869\nv 1.364377 1.623750 -1.419869\nv 1.324192 1.639843 -1.478683\nv 1.314230 1.674364 -1.451822\nv 1.322452 1.709305 -1.478683\nv 1.332414 1.674784 -1.505544\nv 1.339479 1.635478 -1.497893\nv 1.322169 1.630149 -1.448544\nv 1.322169 1.723537 -1.448544\nv 1.339478 1.718209 -1.497893\nv 1.280012 1.622886 -1.517536\nv 1.265502 1.648608 -1.490263\nv 1.262555 1.676639 -1.517693\nv 1.277065 1.650918 -1.544967\nv 1.308905 1.649523 -1.513877\nv 1.297948 1.646358 -1.476274\nv 1.292477 1.687915 -1.476274\nv 1.303935 1.687269 -1.513877\nv 1.242659 1.536862 -1.565480\nv 1.214623 1.569958 -1.524430\nv 1.186535 1.601387 -1.566737\nv 1.214572 1.568290 -1.607787\nv 1.257545 1.593434 -1.566450\nv 1.254127 1.590701 -1.516119\nv 1.226598 1.636478 -1.516613\nv 1.232541 1.635014 -1.566899\nv -1.312883 0.105994 -4.244095\nv -1.176460 0.105994 -4.230187\nv -1.053268 0.105994 -4.408747\nv -1.200562 0.105994 -4.421868\nv -1.533077 0.031610 -1.802320\nv -1.478943 0.024095 -1.470809\nv -1.430238 0.023772 -1.799929\nv -1.497409 0.035257 -2.097392\nv -1.517715 0.030206 0.091703\nv -1.479736 0.030902 0.324737\nv -1.422046 0.022368 0.109411\nv -1.474128 0.024299 -0.107703\nv -0.839751 2.110788 -1.015119\nv -0.713262 2.167193 -0.849668\nv -0.831196 2.190623 -0.613712\nv -0.932905 2.128813 -0.825028\nv -0.829395 2.237140 0.230328\nv -0.705832 2.263978 0.432242\nv -0.829333 2.237777 0.630816\nv -0.926589 2.211740 0.420645\nv -1.160472 1.715294 2.281367\nv -1.050848 1.713570 2.557734\nv -1.148093 1.692911 2.665301\nv -1.267285 1.672608 2.437321\nv -1.232676 0.116302 -4.532639\nv -1.072328 0.147227 -4.662202\nv -1.236756 0.178151 -4.541773\nv -1.381526 0.147227 -4.436802\nv -1.230363 0.698104 -4.498884\nv -1.064303 0.768650 -4.603831\nv -1.198712 0.837994 -4.506784\nv -1.338579 0.776254 -4.400829\nv -0.260994 0.322665 3.054957\nv -0.464415 0.504174 3.056322\nv -0.260755 0.656027 3.069491\nv 0.000000 0.504222 3.066350\nv -0.273169 1.201412 3.041523\nv -0.488001 1.313365 3.006404\nv -0.273486 1.441980 3.005491\nv 0.000000 1.305518 3.018916\nv -1.370875 0.256958 2.735938\nv -1.474403 0.421334 2.649426\nv -1.389945 0.634638 2.761861\nv -1.278216 0.439697 2.868511\nv -1.666885 0.032931 -0.301345\nv -1.691176 0.070512 -0.469211\nv -1.671857 0.115811 -0.293375\nv -1.684374 0.076483 -0.114785\nv -1.677951 0.057631 -2.310842\nv -1.698038 0.102468 -2.479419\nv -1.680017 0.124931 -2.306389\nv -1.688385 0.079943 -2.098315\nv -1.412098 1.174811 2.612533\nv -1.484962 1.267179 2.405497\nv -1.373765 1.432160 2.520323\nv -1.317220 1.311516 2.672095\nv -1.594779 1.103883 2.253791\nv -1.573468 1.244218 1.988510\nv -1.472481 1.403490 2.155418\nv -1.565542 0.838666 -0.218339\nv -1.550169 1.014799 -0.396689\nv -1.514166 1.191913 -0.161542\nv -1.543368 1.020380 0.010069\nv -1.615254 0.757220 -2.337200\nv -1.604430 0.985051 -2.569323\nv -1.520013 1.141929 -2.341276\nv -1.548375 0.945057 -2.073673\nv -1.195990 1.500929 -2.191227\nv -0.992235 1.534569 -2.144806\nv -1.104329 1.537617 -1.971445\nv -1.273548 1.509434 -1.899609\nv -0.188590 1.722329 2.506078\nv -0.347566 1.731389 2.393435\nv -0.170656 1.743356 2.356618\nv -1.327837 1.665126 2.000196\nv -1.244040 1.702683 1.788991\nv -1.118657 1.734384 1.854140\nv -1.168749 1.724188 2.039005\nv -1.408482 1.515064 -0.112478\nv -1.350855 1.560951 -0.325854\nv -1.304470 1.596452 -0.097311\nv -1.348637 1.588891 0.118053\nv -0.157342 1.522200 -3.288385\nv -0.302810 1.519113 -3.433108\nv -0.158915 1.519827 -3.611619\nv -1.692547 1.049124 -3.496996\nv -1.699734 0.992734 -3.689656\nv -1.679581 1.116433 -3.506743\nv -1.699734 1.106921 -3.297311\nv -0.555638 1.002748 -4.709843\nv -0.369579 1.075184 -4.652121\nv -0.552015 1.140979 -4.515455\nv -0.695441 1.073369 -4.600725\nv -0.345167 2.143236 -1.090918\nv -0.229662 2.187191 -0.885153\nv -0.344494 2.226940 -0.622065\nv -0.462541 2.181504 -0.871863\nv -0.344494 2.277268 0.237748\nv -0.229662 2.279560 0.455943\nv -0.344494 2.266696 0.689293\nv -0.461415 2.274551 0.447967\nv -0.552777 1.722229 2.478005\nv -0.438025 1.717508 2.692461\nv -0.698565 1.699731 2.852513\nv -0.786704 1.717108 2.644744\nv -0.563569 0.116302 -4.832689\nv -0.377899 0.147227 -4.882413\nv -0.563569 0.178151 -4.841381\nv -0.743724 0.147227 -4.812375\nv -0.516393 0.661180 -4.698411\nv -0.359546 0.731242 -4.725558\nv -0.516225 0.776373 -4.706937\nv -0.663909 0.730736 -4.680703\nv -0.863011 0.392399 2.844711\nv -0.899689 0.509699 2.830957\nv -0.861138 0.627268 2.856153\nv -0.799952 0.509933 2.870745\nv -0.481735 1.552222 -2.427359\nv -0.327119 1.565757 -2.323706\nv -0.492427 1.577941 -2.241975\nv -0.656066 1.561750 -2.271474\nv -0.882308 1.720183 2.414251\nv -0.973320 1.729060 2.222543\nv -0.804227 1.743195 2.206116\nv -0.687821 1.730801 2.332050\nv -0.827350 1.534948 -2.348612\nv -1.024763 1.500428 -2.493207\nv -0.807302 1.499835 -2.799323\nv -0.618789 1.530624 -2.618731\nv -1.536816 0.019645 -0.640033\nv -1.479229 0.019284 -0.464635\nv -1.432233 0.011806 -0.634122\nv -1.481115 0.016323 -0.849506\nv -0.461415 2.248930 -0.394680\nv -0.582517 2.259125 -0.184733\nv -0.705832 2.236582 -0.396788\nv -0.583643 2.220443 -0.617163\nv -1.670057 0.029849 -1.142586\nv -1.690377 0.070988 -1.472661\nv -1.674716 0.108300 -1.142069\nv -1.693638 0.066421 -0.852075\nv -1.566102 0.808855 -1.134498\nv -1.545794 0.972930 -1.449642\nv -1.516561 1.166265 -1.121451\nv -1.552184 1.005559 -0.837260\nv -1.410974 1.467996 -1.095633\nv -1.341331 1.517591 -1.359205\nv -1.295110 1.547184 -1.043412\nv -1.349821 1.534222 -0.794201\nv 0.000000 2.261112 -0.401008\nv -0.114831 2.273982 -0.187859\nv -0.229662 2.255821 -0.397915\nv -0.114831 2.233094 -0.628814\nv -0.753362 1.318483 -4.049319\nv -0.893870 1.335345 -3.832032\nv -1.066857 1.273951 -3.955340\nv -0.896711 1.238315 -4.168387\nv -1.682871 0.116289 -4.018241\nv -1.678232 0.147214 -4.064822\nv -1.699734 0.201620 -4.014428\nv -1.692547 0.147137 -3.982692\nv 0.000000 0.105994 -4.562823\nv -0.186366 0.105994 -4.722260\nv -0.372283 0.105994 -4.549158\nv -0.187483 0.105994 -4.368071\nv 0.000000 1.497384 -4.158947\nv -0.163007 1.506775 -3.971390\nv -0.323584 1.493248 -4.141743\nv -0.167040 1.482146 -4.293209\nv -1.692547 0.848806 -2.759018\nv -1.699734 0.996040 -2.891058\nv -1.678735 0.933771 -2.730618\nv -1.699734 0.721731 -2.636883\nv -1.689144 0.072630 -2.562068\nv -1.626204 0.054002 -2.481541\nv -1.615013 0.054937 -2.561584\nv -1.667585 0.071673 -2.593991\nv -0.163112 1.552330 -2.455547\nv -0.321813 1.535204 -2.672662\nv -0.165183 1.522145 -2.940059\nv -1.387091 1.408658 -2.786458\nv -1.240587 1.433929 -3.016898\nv -1.039532 1.467275 -2.914968\nv -1.227689 1.466720 -2.645999\nv -1.688483 0.056225 0.856219\nv -1.694425 0.094610 0.755355\nv -1.699734 0.171396 0.857641\nv -1.692547 0.095779 0.894825\nv -1.365971 1.563732 0.740921\nv -1.329501 1.613031 0.525185\nv -1.277400 1.642480 0.772850\nv -1.304412 1.630748 0.981286\nv -1.588660 0.036538 0.537622\nv -1.619450 0.037920 0.759913\nv -1.495813 0.030111 0.570406\nv -0.461415 2.242074 0.950788\nv -0.583647 2.216621 1.157893\nv -0.705771 2.239985 0.902871\nv -0.582517 2.266768 0.664848\nv -0.115079 2.202980 1.232322\nv -0.229662 2.238639 0.978437\nv -0.114831 2.267923 0.702662\nv -1.649926 0.039110 0.088523\nv -1.654898 0.124193 0.092708\nv -1.666381 0.085312 0.314899\nv -1.548584 0.837099 0.164203\nv -1.497301 1.210035 0.239499\nv -1.527941 1.026554 0.407707\nv -1.393654 1.541427 0.304784\nv -1.298193 1.622910 0.327837\nv -1.287720 0.183119 2.621342\nv -1.429598 0.182448 2.600581\nv -1.224856 0.201751 2.783034\nv -1.534179 0.392614 2.534129\nv -1.509500 0.604387 2.586080\nv -1.497572 0.237379 2.577441\nv -1.307436 1.153980 2.797071\nv -1.407875 1.098406 2.749423\nv -1.493292 1.081614 2.594959\nv -1.202287 1.182482 2.808984\nv -1.106117 1.161530 2.944709\nv -1.207679 1.126337 2.951946\nv -0.720228 1.183189 3.004107\nv -0.518448 1.162020 3.106819\nv -0.709845 1.127050 3.160917\nv -0.867588 1.161959 3.049170\nv -0.273486 0.218831 2.951109\nv -0.518448 0.211797 3.053921\nv -0.271300 0.220535 3.155169\nv 0.000000 0.211797 3.071875\nv -0.947819 0.216089 2.860405\nv -1.056404 0.208774 2.911844\nv -0.980753 0.220195 3.037455\nv -0.861189 0.211454 2.998842\nv -1.536637 0.022050 -1.141140\nv -1.432137 0.014212 -1.139850\nv -1.666155 0.038521 -1.803642\nv -1.670187 0.111648 -1.801427\nv -1.556973 0.770057 -1.779019\nv -1.509932 1.137077 -1.759481\nv -1.398695 1.451252 -1.717329\nv -1.266258 1.533715 -1.579955\nv -1.692547 1.049714 1.393036\nv -1.699734 1.005741 1.206587\nv -1.670249 1.143279 1.383090\nv -1.699734 1.115263 1.583637\nv -1.347372 1.614371 1.415205\nv -1.287480 1.653753 1.277054\nv -1.222022 1.686385 1.402226\nv -1.271375 1.678084 1.536634\nv -0.829911 0.748303 3.009118\nv -0.687540 0.811094 3.041603\nv -0.497799 0.748391 3.061357\nv -0.692265 0.693353 3.035523\nv -1.480173 0.762023 2.652180\nv -1.398422 0.894518 2.766658\nv -1.288081 0.793321 2.882023\nv -1.200444 0.916878 2.966781\nv -1.119714 0.791265 3.014600\nv -1.192109 0.649834 2.956301\nv -1.538839 0.739043 2.527920\nv -1.515167 0.867418 2.582604\nv -1.566529 0.629080 -0.846290\nv -1.568959 0.831725 -0.614272\nv -1.564605 0.640568 -0.431570\nv -1.554633 0.446100 -0.627952\nv -1.692547 0.541471 -2.606116\nv -1.681139 0.566309 -2.492168\nv -1.699734 0.393020 -2.548738\nv -1.559497 0.601189 -1.461421\nv -1.552815 0.432215 -1.138371\nv -1.555632 0.646119 0.342499\nv -1.601475 0.821345 0.626377\nv -1.678603 0.622239 0.806243\nv -1.609371 0.468238 0.565854\nv -1.557804 0.648196 -0.051490\nv -1.534260 0.468465 0.114800\nv -1.570634 0.574375 -2.082042\nv -1.545762 0.414098 -1.790889\nv -0.900065 0.105994 -4.319368\nv -0.733944 0.105994 -4.495048\nv -0.902375 0.105994 -4.582555\nv -0.591405 2.133184 -1.060698\nv -0.582517 2.270027 0.234832\nv -0.960324 1.699007 2.781133\nv -0.908418 0.116302 -4.726347\nv -0.909778 0.178151 -4.735307\nv -0.911277 0.668930 -4.677900\nv -0.775632 0.763861 -4.742085\nv -0.900621 0.833545 -4.686778\nv -0.815348 1.564483 -2.146225\nv -1.174320 0.264554 2.918823\nv -1.116084 0.449145 3.000374\nv -0.998608 1.745054 2.054106\nv -1.371572 1.431425 -2.344862\nv -0.926709 2.204798 0.019693\nv -0.829395 2.226981 -0.186732\nv -0.705832 2.256353 0.025323\nv -1.246755 1.385192 -3.366743\nv -1.391279 1.322500 -3.503012\nv -1.240105 1.307942 -3.724416\nv -1.067631 1.364789 -3.600831\nv -0.880442 1.414075 -3.485070\nv -0.699910 1.460162 -3.365814\nv -0.844186 1.465159 -3.152525\nv -1.058831 1.427654 -3.254310\nv -0.830372 2.197106 1.094656\nv -0.926220 2.193260 0.857458\nv -0.994487 1.182950 2.928301\nv -0.996654 1.126812 3.074081\nv -1.087535 0.208358 2.775151\nv -0.864225 1.036154 3.146978\nv -0.988901 0.932926 3.092719\nv -1.108550 1.035778 3.033285\nv -0.465272 2.188640 1.309341\nv -0.592111 2.174320 1.338359\nv -0.710787 2.191477 1.246958\nv -1.126832 0.509683 -4.233678\nv -1.251202 0.623832 -4.233678\nv -1.347796 0.508437 -4.233678\nv -1.240371 0.405399 -4.233678\nv -0.184439 0.661769 -4.732796\nv -0.359657 0.542774 -4.704016\nv -0.184501 0.418738 -4.701402\nv -1.420696 0.623831 -4.233678\nv -1.467860 0.508407 -4.233678\nv -1.411055 0.404443 -4.233678\nv -0.776936 0.540227 -4.718076\nv -1.043728 0.533790 -4.601213\nv -0.908116 0.404290 -4.642412\nv 0.000000 1.520652 -3.136711\nv -0.308381 1.518196 -3.113595\nv -1.692547 1.048418 -3.088437\nv -1.680006 1.118599 -3.084918\nv -1.395946 1.379049 -3.142009\nv -0.641941 1.496121 -3.055480\nv -1.692547 0.830792 -3.823921\nv -1.699734 0.688961 -3.952749\nv -1.677255 0.897316 -3.858193\nv -0.738608 1.401236 -3.701226\nv -0.313677 1.511610 -3.775142\nv -1.376265 1.213532 -3.863489\nv -1.229040 1.198300 -4.064003\nv -1.692547 0.865922 1.088500\nv -1.699734 0.755715 0.968579\nv -1.669828 0.965320 1.054517\nv -1.350217 1.585637 1.128061\nv -1.250859 1.661991 1.151328\nv -0.345237 2.209091 1.207254\nv -0.231645 2.181988 1.348400\nv -0.350976 2.166845 1.389786\nv -0.931578 2.154639 1.184682\nv -0.839810 2.159883 1.274641\nv -1.692547 1.061206 1.768720\nv -1.670670 1.153894 1.783404\nv -1.699734 1.028648 1.950063\nv -1.343675 1.641423 1.703397\nv -1.188140 1.710210 1.629247\nv -1.677665 0.965450 2.166872\nv -1.699734 0.834637 2.196647\nv -1.692547 0.920665 2.059088\nv -1.592453 0.218621 2.470628\nv -1.676254 0.373354 2.409434\nv -1.607111 0.576882 2.464046\nv -1.621302 0.152809 2.344796\nv -1.668370 0.206806 2.316612\nv -1.689929 0.210347 2.355386\nv -1.628871 0.157896 2.401922\nv -1.386572 1.562725 2.264463\nv -1.273039 1.566839 2.626608\nv -1.409488 1.539585 1.911536\nv -1.469388 1.347468 -0.818425\nv -1.410804 1.489709 -0.560957\nv -1.466833 1.364476 -0.354161\nv -1.517558 1.184617 -0.588779\nv -1.469189 1.313311 -2.574280\nv -1.458097 1.308071 -2.052367\nv -1.470900 1.212166 -3.669831\nv -1.484993 1.297526 -3.304317\nv -1.543919 1.199749 -3.492419\nv 0.000000 0.926759 -4.812069\nv -0.185432 1.001947 -4.755904\nv -0.371181 0.927851 -4.786499\nv -0.185645 0.862516 -4.827972\nv -1.466123 1.325519 -1.429700\nv -1.480520 1.311954 -2.939428\nv -1.538645 1.186795 -2.760396\nv -1.433743 1.411734 0.481806\nv -1.408353 1.437689 0.940452\nv -1.478737 1.235554 0.689070\nv -1.460197 1.382630 0.078303\nv -1.406281 1.472334 1.260399\nv -1.408654 1.515854 1.574303\nv -1.479238 1.353312 1.406483\nv -1.547293 1.231330 -3.109272\nv -1.449903 1.081235 -3.989110\nv -1.527862 1.059651 -3.835668\nv -1.476605 1.281600 1.093167\nv -1.481899 1.389673 1.769294\nv -0.515916 1.036208 3.206475\nv -0.708776 0.933109 3.178807\nv -1.486818 0.991288 2.648984\nv -1.298465 1.029071 2.890735\nv -1.543990 0.984506 2.483637\nv -0.918118 0.692950 2.975940\nv -0.989404 0.747796 2.941618\nv -0.922577 0.810978 2.978558\nv -1.676930 0.721582 2.345494\nv -1.609983 0.859270 2.392107\nv -1.661947 0.048409 0.535222\nv -1.664709 0.133219 0.535057\nv -1.571602 1.047542 0.897732\nv -1.580952 1.178215 1.217875\nv -1.582634 1.265259 1.584275\nv -1.692547 0.583181 0.938650\nv -1.699734 0.442844 0.872907\nv -1.692547 0.362791 2.314061\nv -1.699734 0.556316 2.332305\nv -1.692547 0.698572 2.238879\nv -1.692547 0.103719 -2.591833\nv -1.699734 0.165130 -2.554512\nv -1.614673 1.080957 -3.687195\nv -1.621670 1.184817 -3.299791\nv -1.602598 0.116302 -4.151668\nv -1.534395 0.147227 -4.248984\nv -1.604110 0.178151 -4.157210\nv -1.594163 0.688171 -4.120677\nv -1.488454 0.804824 -4.207838\nv -1.487731 0.942839 -4.094472\nv -1.591775 0.871033 -3.986821\nv -1.618279 1.119163 -2.904075\nv -1.620985 0.402831 -2.310513\nv -1.692547 0.523932 -3.974809\nv -1.699734 0.391888 -4.018727\nv -1.676867 0.538204 -4.055073\nv -0.689703 0.392380 2.887326\nv -0.687926 0.627551 2.898145\nv -0.553168 0.509964 2.915565\nv -0.511235 1.742774 2.311668\nv -0.419117 1.515137 -3.250346\nv -0.525354 1.503775 -3.391952\nv -0.438516 1.511979 -3.577625\nv -0.184063 1.141279 -4.564554\nv -0.115093 2.146947 -1.107286\nv 0.000000 2.190840 -0.894057\nv -0.114831 2.285289 0.239075\nv 0.000000 2.283513 0.460957\nv -0.261492 1.681440 2.894496\nv -0.188949 0.116302 -4.878948\nv 0.000000 0.147227 -4.908043\nv -0.188949 0.178151 -4.887277\nv -0.184274 0.776386 -4.741135\nv 0.000000 1.565856 -2.347291\nv -0.164105 1.578066 -2.288316\nv -0.461415 2.270061 0.026025\nv -0.344494 2.266222 -0.185109\nv -0.229662 2.278357 0.024947\nv -0.557759 0.105994 -4.679001\nv -0.555480 0.105994 -4.346231\nv -0.460330 1.498520 -3.933187\nv -0.587524 1.459965 -4.087626\nv -0.471941 1.473480 -4.252317\nv -0.443163 1.520695 -2.899916\nv 0.000000 1.162020 3.124774\nv -0.271270 1.127050 3.197721\nv -0.716493 0.218831 2.914304\nv -0.709965 0.220536 3.118558\nv -0.260516 0.811104 3.076271\nv -0.663889 0.541941 -4.658405\nv -0.516432 0.418460 -4.665811\nv -0.513168 1.510954 -3.081778\nv -0.562886 1.488429 -3.730991\nv 0.000000 2.177350 1.362502\nv -0.117025 2.161838 1.416382\nv -0.488005 1.570433 2.973445\nv -0.698313 0.928653 -4.736193\nv -0.552948 0.862656 -4.785542\nv 0.000000 1.036208 3.224429\nv -0.270923 0.933110 3.215346\nv -1.604500 0.048079 -2.310534\nv -1.508537 0.038140 -2.323812\nv -1.666924 0.057450 0.895199\nv -1.609724 0.040246 0.861192\nv -1.486887 0.167121 2.522538\nv -1.505177 0.156796 2.454783\nv -1.425376 0.105994 -4.248672\nv -1.550175 0.105994 -4.092209\nv -1.465513 0.105994 -4.056546\nv -1.118747 0.325184 -4.233678\nv -1.335832 0.323947 -4.233678\nv -1.230314 0.254846 -4.233678\nv -0.360043 0.333183 -4.675604\nv -0.663832 0.332891 -4.628985\nv -0.516895 0.266964 -4.645017\nv -1.675003 0.283576 -4.067363\nv -1.692547 0.282378 -3.990657\nv -0.775600 0.296323 -4.683673\nv -1.034696 0.293701 -4.566854\nv -0.904940 0.214099 -4.633203\nv -1.457057 0.323911 -4.233678\nv -1.397089 0.254848 -4.233678\nv -0.184995 0.266873 -4.681388\nv -1.597618 0.105994 -4.111082\nv -1.505798 0.105994 -4.225522\nv -1.062925 0.105994 -4.588568\nv -1.349615 0.105994 -4.388173\nv -0.739751 0.105994 -4.734973\nv -0.374620 0.105994 -4.805237\nv 0.000000 0.105994 -4.831048\nv -0.186203 0.196329 -4.782150\nv -0.374620 0.188459 -4.816584\nv -0.554098 0.196328 -4.737293\nv -0.740204 0.188459 -4.746772\nv -1.066553 0.188459 -4.600630\nv -1.212583 0.196387 -4.458169\nv -1.355963 0.188459 -4.400013\nv -1.422112 0.196387 -4.289083\nv -1.509577 0.188459 -4.234561\nv -1.463735 0.178151 -4.335615\nv -1.055891 1.177871 -4.241818\nv -1.352716 1.114453 -4.131237\nv -1.208248 1.127647 -4.256328\nv -0.366473 1.197257 -4.424760\nv -0.542168 1.240557 -4.302245\nv -0.727247 1.194866 -4.354261\nv -0.893208 1.151366 -4.392328\nv -1.605381 0.398022 -4.136522\nv -1.534076 0.533672 -4.204710\nv -1.416152 1.020605 -4.177801\nv -1.459653 0.116302 -4.327668\nv -1.440307 0.702542 -4.311156\nv -1.403425 0.868611 -4.300873\nv 0.000000 1.198101 -4.447873\nv -0.182866 1.241931 -4.345264\nv -1.661312 0.116276 -3.990036\nv -1.591262 0.212837 -4.138710\nv -1.521543 0.292280 -4.195553\nv -0.930007 2.050639 -1.127351\nv -0.827239 2.076138 -1.120072\nv -0.721832 2.099410 -1.120815\nv -1.027316 1.954553 -1.250082\nv -1.064574 1.830298 -1.468131\nv -0.981655 1.952254 -1.289727\nv -1.151535 1.682872 -1.639244\nv -1.142589 1.583077 -1.816206\nv -1.099143 1.696737 -1.656418\nv -0.947856 1.567648 -2.025888\nv -1.051667 1.567130 -1.921411\nv -0.649451 1.588679 -2.165520\nv -0.795562 1.589740 -2.082687\nv -0.325718 1.591257 -2.226704\nv -0.483511 1.600272 -2.178408\nv -0.160848 1.599770 -2.223283\nv -0.231646 2.121562 -1.189662\nv -0.116523 2.109039 -1.218944\nv 0.000000 2.123790 -1.201840\nv -0.466994 2.116246 -1.167507\nv -0.348961 2.105958 -1.202720\nv -0.598396 2.094806 -1.167809\nv -0.904362 2.029197 -1.160430\nv -0.819277 2.051069 -1.130700\nv -0.721697 2.072372 -1.151161\nv -1.027707 1.825313 -1.478871\nv -0.963470 1.932830 -1.295599\nv -1.102556 1.592956 -1.804149\nv -1.077137 1.686130 -1.649979\nv -0.927233 1.577653 -1.994301\nv -1.034304 1.560213 -1.904112\nv -0.638010 1.596370 -2.127678\nv -0.786396 1.581620 -2.058903\nv -0.319281 1.597844 -2.186603\nv -0.477266 1.591265 -2.153200\nv 0.000000 1.597853 -2.216844\nv -0.158294 1.590520 -2.196315\nv -0.232668 2.094544 -1.219286\nv -0.115786 2.083107 -1.227288\nv -0.469471 2.089064 -1.197246\nv -0.347890 2.080105 -1.211618\nv -0.598167 2.068771 -1.176519\nv -0.336823 1.755473 2.306026\nv -0.167491 1.763276 2.295132\nv 0.000000 1.755835 2.323009\nv -0.655978 1.755851 2.224962\nv -0.497496 1.763335 2.249120\nv -0.881925 1.759928 2.092354\nv -0.768915 1.766577 2.143169\nv -1.016436 1.764051 1.925972\nv -0.939579 1.776348 1.999501\nv -1.121528 1.746589 1.718960\nv -1.058735 1.774521 1.815503\nv -1.174612 1.723431 1.509082\nv -1.140135 1.754282 1.606308\nv -1.190021 1.730532 1.329327\nv -1.175436 1.733626 1.415203\nv -1.170095 1.796010 1.264131\nv -1.110892 1.908918 1.286217\nv -1.151243 1.814151 1.317962\nv -1.046020 2.018750 1.251682\nv -0.954764 2.107172 1.292361\nv -1.041162 2.013236 1.308679\nv -0.722040 2.159794 1.346139\nv -0.847132 2.138213 1.339042\nv -0.475359 2.156013 1.406256\nv -0.603076 2.148560 1.400084\nv -0.237198 2.150884 1.445269\nv -0.359052 2.141339 1.451708\nv 0.000000 2.147807 1.458350\nv -0.119820 2.137502 1.477432\nv -0.330963 1.760757 2.266383\nv -0.164765 1.753219 2.269928\nv 0.000000 1.760842 2.282235\nv -0.640518 1.762164 2.187967\nv -0.489548 1.753547 2.224674\nv -0.856685 1.769443 2.063654\nv -0.755610 1.757630 2.121457\nv -0.990733 1.780524 1.905414\nv -0.923512 1.770020 1.982154\nv -1.099506 1.768091 1.704017\nv -1.043978 1.771503 1.801611\nv -1.152738 1.746888 1.502506\nv -1.126696 1.752871 1.594701\nv -1.166157 1.752260 1.353858\nv -1.160614 1.733416 1.414392\nv -1.102079 1.902279 1.319918\nv -1.139856 1.805658 1.328437\nv -0.954194 2.088949 1.326347\nv -1.036325 1.993387 1.320526\nv -0.727116 2.136564 1.377670\nv -0.845547 2.114922 1.350052\nv -0.480515 2.132041 1.437498\nv -0.603041 2.124004 1.410294\nv -0.239424 2.127275 1.476827\nv -0.358032 2.116899 1.462143\nv 0.000000 2.124810 1.488749\nv -0.118859 2.113375 1.487628\nv -1.670300 0.027985 -0.641820\nv -1.675272 0.109688 -0.639384\nv -1.301317 1.568377 -0.547339\nv -1.533614 0.024394 -0.299001\nv -1.430525 0.016556 -0.282742\nv 0.000000 2.284707 0.023916\nv -1.551218 0.455750 -0.259633\nv -0.926835 2.186395 -0.398812\nv -0.998158 2.139826 0.140152\nv -0.983527 2.153982 -0.009857\nv -0.971483 2.171366 -0.191309\nv -1.075856 2.027517 0.195066\nv -1.171922 1.875349 0.131390\nv -1.082850 2.011136 0.132473\nv -1.238926 1.741918 0.146973\nv -1.269596 1.661162 0.055000\nv -1.225525 1.761336 0.090599\nv -1.278239 1.609246 -0.323448\nv -1.266999 1.644428 -0.119578\nv -1.273253 1.582987 -0.782252\nv -1.263405 1.618019 -0.547761\nv -1.257899 1.567284 -1.289043\nv -1.254534 1.596292 -1.035648\nv -1.208760 1.589185 -1.657855\nv -1.228248 1.583759 -1.489495\nv -1.108830 1.812026 -1.428393\nv -1.166113 1.686857 -1.554054\nv -0.998485 2.043916 -1.023872\nv -1.060644 1.920038 -1.219919\nv -0.973528 2.138458 -0.607410\nv -0.991507 2.083750 -0.809389\nv -0.984447 2.136869 -0.395364\nv -0.971502 2.147366 1.054937\nv -0.982592 2.143464 0.846354\nv -0.970832 2.181258 0.615997\nv -0.997268 2.094991 1.205529\nv -0.986441 2.111748 1.147024\nv -1.119063 1.906236 1.221731\nv -1.058353 2.002185 1.193202\nv -1.206900 1.720752 1.214736\nv -1.165094 1.810115 1.203464\nv -1.241305 1.677155 0.997771\nv -1.215709 1.707424 1.124779\nv -1.266277 1.659986 0.535785\nv -1.240769 1.690457 0.773113\nv -1.267326 1.669286 0.216171\nv -1.259441 1.672868 0.355466\nv -1.175411 1.870563 0.196025\nv -1.228099 1.758060 0.207091\nv -0.998356 2.141710 0.295346\nv -1.086954 2.006105 0.249823\nv -0.982644 2.161668 0.438933\nv -1.007471 2.105507 0.100466\nv -0.978254 2.127007 -0.020892\nv -0.984309 2.133208 -0.195343\nv -1.160563 1.872829 0.092448\nv -1.071049 1.993523 0.111542\nv -1.245183 1.686038 0.023521\nv -1.203653 1.761294 0.072707\nv -1.252512 1.639961 -0.329254\nv -1.241548 1.653238 -0.128285\nv -1.247306 1.614195 -0.783049\nv -1.237842 1.628239 -0.547957\nv -1.231725 1.597093 -1.274689\nv -1.228642 1.605702 -1.034817\nv -1.194327 1.612396 -1.573161\nv -1.205217 1.591917 -1.460823\nv -1.117632 1.788613 -1.394767\nv -1.153643 1.679217 -1.519192\nv -1.013275 2.009284 -1.008608\nv -1.056566 1.895416 -1.208329\nv -0.987378 2.101166 -0.601532\nv -0.987688 2.057475 -0.803199\nv -0.979586 2.110168 -0.393206\nv -0.983528 2.110366 1.044646\nv -0.977015 2.116940 0.843841\nv -0.982882 2.143143 0.618442\nv -1.005373 2.066857 1.170055\nv -0.980464 2.087036 1.134656\nv -1.112888 1.900708 1.181741\nv -1.047575 1.985523 1.172758\nv -1.186352 1.742770 1.176324\nv -1.146049 1.807984 1.181883\nv -1.214846 1.706202 0.988712\nv -1.191199 1.714744 1.112002\nv -1.238967 1.689991 0.538671\nv -1.214916 1.698858 0.770977\nv -1.241434 1.696277 0.252470\nv -1.233073 1.682248 0.365232\nv -1.168051 1.862613 0.234103\nv -1.206820 1.757427 0.226952\nv -1.007868 2.107747 0.324502\nv -1.076336 1.987120 0.267507\nv -0.976950 2.135271 0.446871\nv -0.786520 1.119480 -4.501824\nv -0.760466 1.062788 -4.592772\nv -0.752395 1.000750 -4.676438\nv -1.049857 1.125708 -4.360955\nv -0.904280 1.123753 -4.433817\nv -1.335078 1.080065 -4.231493\nv -1.205669 1.103973 -4.296600\nv -1.423530 0.944279 -4.231099\nv -1.398631 1.012853 -4.217566\nv -1.312047 0.879302 -4.401375\nv -1.381485 0.909735 -4.304284\nv -1.048024 0.864491 -4.602834\nv -1.186532 0.877470 -4.500674\nv -0.790730 0.880383 -4.727417\nv -0.904250 0.872352 -4.673189\nv -0.762425 0.934773 -4.714788\nv -0.800180 1.099842 -4.503262\nv -0.767856 1.043563 -4.581652\nv -0.766189 0.992345 -4.663515\nv -1.052037 1.105238 -4.370088\nv -0.907619 1.099306 -4.432539\nv -1.325520 1.066102 -4.241251\nv -1.197728 1.083215 -4.297620\nv -1.400736 0.950154 -4.237786\nv -1.377604 1.005453 -4.218063\nv -1.297022 0.891881 -4.392831\nv -1.358540 0.913662 -4.296998\nv -1.040913 0.877485 -4.587128\nv -1.171746 0.882616 -4.483181\nv -0.800548 0.891025 -4.704525\nv -0.900615 0.878064 -4.648882\nv -0.767771 0.931130 -4.691368\nv -0.367305 0.819797 -4.818451\nv -0.185375 0.794546 -4.820868\nv -0.668830 0.802789 -4.773020\nv -0.528294 0.794544 -4.784437\nv -0.711353 0.664867 -4.756396\nv -0.685839 0.739074 -4.756147\nv -0.711363 0.410519 -4.722013\nv -0.685847 0.540077 -4.733326\nv -0.668925 0.242036 -4.705804\nv -0.685848 0.321019 -4.702499\nv -0.367810 0.219936 -4.749602\nv -0.528890 0.245486 -4.718917\nv 0.000000 0.219937 -4.772898\nv -0.185970 0.245477 -4.757699\nv -0.361333 0.782229 -4.772506\nv -0.634189 0.769968 -4.732273\nv -0.671965 0.660587 -4.717729\nv -0.671952 0.415973 -4.684322\nv -0.634332 0.276476 -4.671295\nv -0.362373 0.259167 -4.710412\nv -1.253232 1.258885 2.743237\nv -1.174852 1.280841 2.798311\nv -1.096672 1.232197 2.851942\nv -1.256567 1.445156 2.714787\nv -1.242651 1.363117 2.739428\nv -1.198321 1.618617 2.698811\nv -1.213657 1.520319 2.717839\nv -1.057092 1.649860 2.794494\nv -1.126722 1.598533 2.751458\nv -0.872151 1.651515 2.885539\nv -0.975863 1.602260 2.848629\nv -0.622622 1.625309 2.942206\nv -0.752062 1.602527 2.917926\nv -0.584584 1.441423 2.991730\nv -0.613920 1.521432 2.966028\nv -0.622232 1.258696 2.993857\nv -0.613889 1.360899 2.991807\nv -0.875212 1.232570 2.944761\nv -0.749445 1.281464 2.969848\nv -0.992410 1.281242 2.900034\nv -1.213946 1.317760 2.756890\nv -1.155326 1.304271 2.787763\nv -1.085976 1.300271 2.844439\nv -1.215775 1.442119 2.734489\nv -1.214136 1.372920 2.736512\nv -1.168711 1.559502 2.721245\nv -1.187823 1.505354 2.717561\nv -1.052461 1.580543 2.798636\nv -1.110924 1.571579 2.746814\nv -0.877084 1.581828 2.884459\nv -0.969469 1.575027 2.836529\nv -0.659427 1.564055 2.934349\nv -0.758285 1.575485 2.902716\nv -0.626661 1.439844 2.975038\nv -0.631164 1.506841 2.946315\nv -0.658603 1.318151 2.976326\nv -0.631081 1.371881 2.969324\nv -0.877208 1.300768 2.932723\nv -0.755233 1.305482 2.949105\nv -0.984590 1.305110 2.881905\nv -1.670988 0.695401 -2.669829\nv -1.642243 0.840602 -2.764729\nv -1.670988 0.959584 -2.903744\nv -1.670988 0.385416 -2.593596\nv -1.642243 0.537335 -2.616248\nv -1.692547 0.259567 -2.580179\nv -1.670988 0.162731 -2.598330\nv -1.642243 0.258657 -2.591480\nv -1.670988 0.201486 -3.976309\nv -1.642243 0.147125 -3.973249\nv -1.670988 0.389124 -3.979786\nv -1.642243 0.282307 -3.980994\nv -1.670988 0.669514 -3.917532\nv -1.642243 0.521469 -3.965163\nv -1.670988 0.955856 -3.673445\nv -1.642243 0.823428 -3.817304\nv -1.670988 1.068910 -3.295678\nv -1.642243 1.039441 -3.494919\nv -1.642243 1.038988 -3.089674\nv -1.670988 1.070968 1.585176\nv -1.642243 1.038581 1.395373\nv -1.670988 0.963835 1.223228\nv -1.670988 0.993600 1.925071\nv -1.642243 1.051026 1.766056\nv -1.670988 0.813227 2.146734\nv -1.642243 0.913539 2.049276\nv -1.670988 0.548085 2.279090\nv -1.642243 0.695049 2.225511\nv -1.642243 0.361416 2.300957\nv -1.670988 0.167442 0.908055\nv -1.642243 0.095747 0.907695\nv -1.670988 0.725156 1.005945\nv -1.642243 0.577166 0.949425\nv -1.670988 0.425566 0.919180\nv -1.642243 0.856703 1.095316\nv -1.542904 0.286270 -0.454280\nv -1.536102 0.295848 -0.091794\nv -1.554398 0.174489 -0.286981\nv -1.679109 0.264658 -2.465156\nv -1.556086 0.264292 -2.088548\nv -1.620893 0.170286 -2.302788\nv -1.540529 0.270387 -1.467383\nv -1.545169 0.277911 -0.848791\nv -1.557060 0.164192 -1.140362\nv -1.675890 0.301961 0.759843\nv -1.692547 0.285717 0.896463\nv -1.536643 0.308711 0.316236\nv -1.537439 0.184256 0.096721\nv -1.552138 0.164191 -1.798653\nv -1.605980 0.189686 0.535818\nv -1.557814 0.167625 -0.636470\nv -1.642243 0.103311 -2.602573\nv -1.642243 0.283187 0.908637\nv -1.611802 0.035690 -2.083555\nv -1.607088 0.024830 -1.472651\nv -1.616454 0.129739 -2.079406\nv -1.612883 0.125881 -1.470829\nv -1.616510 0.124518 -0.850771\nv -1.614100 0.129741 -0.464821\nv -1.607299 0.136668 -0.108259\nv -1.593958 0.146154 0.294783\nv -1.587881 0.031567 0.295204\nv -1.600670 0.025034 -0.119469\nv -1.607471 0.020019 -0.471759\nv -1.609985 0.017058 -0.851535\nv -0.578567 1.494571 -3.235447\nv -0.626477 1.467222 -3.548585\nv -0.657182 1.419521 -3.894764\nv -0.663289 1.366179 -4.204469\nv 0.000000 1.271872 -4.316898\nv -0.183046 1.289271 -4.298347\nv -0.360413 1.270600 -4.300838\nv -0.327325 1.459731 -4.325334\nv -0.168898 1.447440 -4.319985\nv -0.573602 1.427573 -4.269178\nv -0.456347 1.439954 -4.281594\nv -0.633018 1.292037 -4.251415\nv -0.611556 1.360925 -4.238294\nv -0.507154 1.288040 -4.260444\nv -0.177166 1.303550 -4.183011\nv -0.349931 1.297864 -4.236783\nv -0.320446 1.443013 -4.258144\nv -0.163178 1.450676 -4.203847\nv -0.543393 1.417243 -4.204835\nv -0.441542 1.443402 -4.165939\nv -0.589402 1.314063 -4.190771\nv -0.590739 1.369903 -4.123651\nv -0.489540 1.302370 -4.145795\nv -0.516184 0.260820 3.172464\nv -0.269887 0.303585 3.170044\nv -0.857605 0.260826 3.116366\nv -0.707182 0.303592 3.134599\nv -1.036134 0.313137 3.040519\nv -0.946796 0.303603 3.068637\nv -1.058740 0.649699 3.044316\nv -1.018510 0.491676 3.039961\nv -1.038865 0.838384 3.062621\nv -1.019919 0.749773 3.050858\nv -0.856952 0.861328 3.142795\nv -0.946947 0.819920 3.091276\nv -0.515647 0.861371 3.198710\nv -0.705507 0.820045 3.157634\nv -0.269469 0.820053 3.192569\nv -0.507529 0.319773 3.108637\nv -0.841718 0.319784 3.055871\nv -0.689454 0.322672 3.019706\nv -0.982258 0.365049 2.999321\nv -0.922782 0.322684 2.956992\nv -0.998444 0.652342 3.004180\nv -0.988173 0.503706 2.931258\nv -0.983747 0.792234 3.017663\nv -0.839751 0.808166 3.077941\nv -0.506454 0.808207 3.130131\nv -0.590877 0.616323 3.049165\nv -0.711742 0.630466 3.012641\nv -0.830306 0.653612 3.006188\nv -0.591417 0.392007 3.039283\nv -0.572985 0.504890 3.030399\nv -0.832199 0.354634 2.992360\nv -0.713416 0.379317 3.001164\nv -0.947183 0.391937 2.947294\nv -0.894227 0.379336 2.956037\nv -0.946438 0.615762 2.958050\nv -0.934494 0.504601 2.940785\nv -0.892439 0.630159 2.968155\nv -0.602608 0.595258 2.978627\nv -0.814516 0.624578 2.941241\nv -0.603211 0.418872 2.970809\nv -0.817047 0.389490 2.929970\nv -0.906477 0.418830 2.896388\nv -0.905754 0.594837 2.904984\nv -1.481936 0.619861 -4.265509\nv -1.427493 0.629196 -4.315477\nv -1.358593 0.652713 -4.397820\nv -1.489454 0.401493 -4.238857\nv -1.477147 0.509770 -4.257019\nv -1.458876 0.241380 -4.243922\nv -1.465830 0.317330 -4.248023\nv -1.330379 0.220167 -4.361259\nv -1.402799 0.244323 -4.293064\nv -1.124808 0.241538 -4.506316\nv -1.230192 0.244321 -4.411400\nv -1.100028 0.402449 -4.550628\nv -1.115655 0.318443 -4.488969\nv -1.142668 0.620022 -4.557270\nv -1.124066 0.510887 -4.513378\nv -1.251981 0.629198 -4.449226\nv -1.459689 0.593498 -4.259183\nv -1.355345 0.622339 -4.314915\nv -1.465765 0.403079 -4.248009\nv -1.440284 0.270632 -4.250021\nv -1.331418 0.253360 -4.299445\nv -1.147238 0.270948 -4.364069\nv -1.124396 0.404991 -4.383203\nv -1.162567 0.593819 -4.385851\nv -0.917198 2.013427 -1.078192\nv -1.066074 1.797754 -1.432308\nv -1.161334 1.568239 -1.722829\nv -0.950993 2.103862 0.253553\nv -1.154742 1.862233 0.163241\nv -1.240451 1.669096 0.142853\nv -1.175698 1.724030 1.264658\nv -1.101329 1.893875 1.248282\nv -0.946677 2.073029 1.208743\nv -0.745223 2.121637 -0.589349\nv -0.480462 2.110264 -0.931237\nv 0.000000 2.122464 -0.946581\nv -0.233712 2.161559 -0.589516\nv -0.756039 2.158184 0.678353\nv -0.489480 2.196479 0.427037\nv -0.750143 2.161300 0.133300\nv -0.237152 2.192949 0.739857\nv -0.235767 2.202812 0.199598\nv -0.487317 2.177626 -0.192112\nv -0.496962 2.150671 1.083870\nv -0.329100 1.375434 -4.181365\nv -1.624017 1.620358 -1.417944\nv -1.573870 1.595041 -1.393172\nv -1.510367 1.603760 -1.479257\nv -1.572566 1.623045 -1.484225\nv -1.424909 1.595041 -1.472497\nv -1.403276 1.620358 -1.534538\nv -1.469060 1.623045 -1.539287\nv -1.572566 1.707228 -1.484225\nv -1.510367 1.736547 -1.479257\nv -1.573870 1.755300 -1.393172\nv -1.624017 1.719949 -1.417944\nv -1.469060 1.707228 -1.539287\nv -1.403276 1.719949 -1.534538\nv -1.424909 1.755300 -1.472497\nv -1.522254 1.663464 -1.524966\nv -1.614583 1.665136 -1.460518\nv -1.431562 1.665136 -1.557838\nv -1.355245 1.675171 -1.519235\nv -1.625090 1.608953 -1.310976\nv -1.650282 1.675171 -1.352359\nv -1.625090 1.744732 -1.310976\nv -1.632934 1.676843 -1.263814\nv -1.555049 1.582546 -1.308230\nv -1.486372 1.586323 -1.387287\nv -1.399789 1.582547 -1.396844\nv -1.350204 1.594277 -1.462504\nv -1.486372 1.767363 -1.387287\nv -1.555049 1.771139 -1.308230\nv -1.350204 1.759410 -1.462504\nv -1.399789 1.771139 -1.396844\nv -1.604005 1.610701 -1.266121\nv -1.545793 1.598528 -1.303579\nv -1.474265 1.588653 -1.341027\nv -1.604005 1.742985 -1.266121\nv -1.615654 1.676842 -1.263245\nv -1.474265 1.765032 -1.341027\nv -1.545793 1.755157 -1.303579\nv -1.344525 1.742985 -1.415932\nv -1.406070 1.755158 -1.384249\nv -1.319529 1.676843 -1.432817\nv -1.344525 1.610701 -1.415932\nv -1.336208 1.676843 -1.424583\nv -1.406070 1.598528 -1.384249\nv -1.597488 1.623750 -1.285282\nv -1.551453 1.612403 -1.327258\nv -1.480932 1.606053 -1.352575\nv -1.597488 1.729936 -1.285282\nv -1.615307 1.676842 -1.290392\nv -1.480932 1.747633 -1.352575\nv -1.551453 1.741283 -1.327258\nv -1.364377 1.729936 -1.419869\nv -1.423746 1.741283 -1.400990\nv -1.364377 1.623750 -1.419869\nv -1.359892 1.676843 -1.437856\nv -1.423746 1.612403 -1.400990\nv -1.322169 1.630149 -1.448544\nv -1.324192 1.639842 -1.478683\nv -1.339479 1.635478 -1.497893\nv -1.322169 1.723537 -1.448544\nv -1.314230 1.674364 -1.451822\nv -1.339479 1.718209 -1.497893\nv -1.322452 1.709305 -1.478683\nv -1.332414 1.674784 -1.505544\nv -1.297948 1.646358 -1.476274\nv -1.280012 1.622886 -1.517536\nv -1.308905 1.649523 -1.513877\nv -1.292477 1.687915 -1.476274\nv -1.265502 1.648608 -1.490263\nv -1.303935 1.687269 -1.513877\nv -1.262555 1.676639 -1.517693\nv -1.277065 1.650918 -1.544967\nv -1.254127 1.590701 -1.516119\nv -1.242659 1.536862 -1.565480\nv -1.257545 1.593434 -1.566450\nv -1.226598 1.636479 -1.516613\nv -1.214623 1.569958 -1.524430\nv -1.232541 1.635014 -1.566899\nv -1.186535 1.601387 -1.566737\nv -1.214572 1.568290 -1.607787\nv 1.104620 1.902169 2.469069\nv 0.695537 1.912129 2.525556\nv -0.198355 1.918168 2.559800\nv -1.104620 1.902169 2.469069\nv 1.104620 1.957090 2.780539\nv 0.695491 1.967051 2.837031\nv -0.198355 1.973088 2.871269\nv -1.104620 1.957090 2.780539\nv 1.104620 1.949804 2.470156\nv 0.198356 1.965803 2.560886\nv -0.695521 1.959765 2.526644\nv -1.104620 1.949804 2.470156\nv 1.104620 2.038843 2.766124\nv 0.695475 2.048805 2.822618\nv -0.198355 2.054841 2.856853\nv -1.104620 2.038843 2.766124\nv 1.184567 1.880194 2.374176\nv 1.184567 1.918482 2.835675\nv 1.184567 2.096155 2.801421\nv 1.184567 1.945783 2.378585\nv 1.104620 1.918482 2.835675\nv 1.104620 1.880194 2.374176\nv 1.104620 1.945783 2.378585\nv 1.104620 2.096155 2.801421\nv -1.104620 1.880194 2.374176\nv -1.104620 1.918482 2.835675\nv -1.104620 2.096155 2.801421\nv -1.104620 1.945783 2.378585\nv -1.184567 1.918482 2.835675\nv -1.184567 1.880194 2.374176\nv -1.184567 1.945783 2.378585\nv -1.184567 2.096155 2.801421\nv 0.198356 1.918168 2.559800\nv -0.695537 1.912129 2.525556\nv 0.198356 1.973088 2.871269\nv -0.695491 1.967051 2.837031\nv 0.695521 1.959765 2.526644\nv -0.198355 1.965803 2.560886\nv 0.198356 2.054841 2.856853\nv -0.695474 2.048805 2.822618\nv 0.512391 1.933878 2.594110\nv 0.439651 1.933878 2.594110\nv 0.512391 1.967950 2.803298\nv 0.439651 1.967950 2.803298\nv 0.512391 1.748214 2.589961\nv 0.439651 1.748214 2.589961\nv 0.439651 1.730978 2.786973\nv 0.512391 1.730978 2.786973\nv 0.512391 1.835964 2.600771\nv 0.439651 1.835964 2.600771\nv 0.439651 1.835964 2.798537\nv 0.512391 1.835964 2.798537\nv 0.546368 1.697335 2.818856\nv 0.546663 1.719596 2.553778\nv 0.405380 1.719596 2.553778\nv 0.405675 1.697335 2.818856\nv 0.405675 1.750737 2.555780\nv 0.546368 1.750737 2.555780\nv 0.546663 1.728477 2.820859\nv 0.405380 1.728477 2.820859\nv -0.439651 1.933878 2.594110\nv -0.512392 1.933878 2.594110\nv -0.439651 1.967950 2.803298\nv -0.512392 1.967950 2.803298\nv -0.439651 1.748214 2.589961\nv -0.512392 1.748214 2.589961\nv -0.512392 1.730978 2.786973\nv -0.439651 1.730978 2.786973\nv -0.439651 1.835964 2.600771\nv -0.512392 1.835964 2.600771\nv -0.512392 1.835964 2.798537\nv -0.439651 1.835964 2.798537\nv -0.405675 1.697335 2.818856\nv -0.405380 1.719596 2.553778\nv -0.546663 1.719596 2.553778\nv -0.546368 1.697335 2.818856\nv -0.546368 1.750737 2.555780\nv -0.405675 1.750737 2.555780\nv -0.405380 1.728477 2.820859\nv -0.546663 1.728477 2.820859\nv 0.874672 1.305390 2.920254\nv 1.079852 1.304713 2.833377\nv 1.046816 1.448265 2.648669\nv 0.852468 1.448683 2.648669\nv 1.202819 1.321201 2.749429\nv 1.204172 1.440585 2.728228\nv 0.874624 1.575412 2.873935\nv 0.662961 1.558282 2.922408\nv 0.631127 1.438822 2.961632\nv 1.046882 1.573894 2.789799\nv 1.158827 1.553570 2.715503\nv 0.662094 1.322081 2.962767\nv 0.853421 1.314489 2.648669\nv 1.058601 1.313812 2.648669\nv 1.181568 1.330300 2.648669\nv 1.182921 1.449684 2.648669\nv 1.137576 1.562670 2.648669\nv 1.025630 1.582993 2.648669\nv 0.853373 1.584511 2.648669\nv 0.641711 1.567381 2.648669\nv 0.609876 1.447921 2.648669\nv 0.640844 1.331180 2.648669\nv 0.960539 1.381194 2.648669\nv 1.127839 1.381381 2.648669\nv 0.735582 1.516314 2.648669\nv 0.952978 1.516153 2.648669\nv 1.105639 1.515035 2.648669\nv 0.734056 1.381313 2.648669\nv 0.973965 1.309659 2.764426\nv 1.144701 1.308820 2.717355\nv 1.203510 1.377469 2.691730\nv 1.177197 1.509904 2.682255\nv 1.100299 1.576129 2.696882\nv 0.958844 1.579576 2.741739\nv 0.747660 1.580034 2.774832\nv 0.620538 1.511391 2.796631\nv 0.620456 1.376431 2.808136\nv 0.744608 1.310032 2.798027\nv 0.984590 1.305110 2.880183\nv 1.053492 1.381015 2.648669\nv 0.957248 1.448427 2.648669\nv 0.852790 1.381450 2.648669\nv 1.155326 1.304271 2.786042\nv 1.214136 1.372920 2.734792\nv 1.119172 1.448800 2.648669\nv 0.852766 1.516461 2.648669\nv 0.758285 1.575485 2.900995\nv 0.631164 1.506841 2.944593\nv 0.734474 1.448429 2.648669\nv 1.037006 1.515606 2.648669\nv 0.969469 1.575027 2.834809\nv 1.187823 1.505354 2.715840\nv 1.110924 1.571579 2.745094\nv 0.755233 1.305482 2.947383\nv 0.631081 1.371881 2.967603\nv 0.963339 1.314209 2.648669\nv 1.134075 1.313370 2.648669\nv 1.192884 1.382019 2.648669\nv 1.166572 1.514453 2.648669\nv 1.089672 1.580679 2.648669\nv 0.948218 1.584126 2.648669\nv 0.737034 1.584584 2.648669\nv 0.609913 1.515940 2.648669\nv 0.609830 1.380980 2.648669\nv 0.733981 1.314582 2.648669\nv 0.864047 1.309939 2.784462\nv 1.069227 1.309262 2.741023\nv 1.192193 1.325750 2.699049\nv 1.193547 1.445135 2.688448\nv 1.148201 1.558120 2.682086\nv 1.036256 1.578444 2.719234\nv 0.863998 1.579962 2.761302\nv 0.652336 1.562831 2.785539\nv 0.620501 1.443371 2.805151\nv 0.651469 1.326631 2.805718\nv -0.874672 1.305390 2.920254\nv -1.079852 1.304713 2.833377\nv -1.046816 1.448265 2.648669\nv -0.852468 1.448683 2.648669\nv -1.202819 1.321201 2.749429\nv -1.204172 1.440585 2.728228\nv -0.874624 1.575412 2.873935\nv -0.662961 1.558282 2.922408\nv -0.631127 1.438822 2.961632\nv -1.046882 1.573894 2.789799\nv -1.158827 1.553570 2.715503\nv -0.662094 1.322081 2.962767\nv -0.853421 1.314489 2.648669\nv -1.058601 1.313812 2.648669\nv -1.181568 1.330300 2.648669\nv -1.182921 1.449684 2.648669\nv -1.137576 1.562670 2.648669\nv -1.025630 1.582993 2.648669\nv -0.853373 1.584511 2.648669\nv -0.641711 1.567381 2.648669\nv -0.609876 1.447921 2.648669\nv -0.640844 1.331180 2.648669\nv -0.960539 1.381194 2.648669\nv -1.127839 1.381381 2.648669\nv -0.735582 1.516314 2.648669\nv -0.952978 1.516153 2.648669\nv -1.105639 1.515035 2.648669\nv -0.734056 1.381313 2.648669\nv -0.973965 1.309659 2.764426\nv -1.144701 1.308820 2.717355\nv -1.203510 1.377469 2.691730\nv -1.177197 1.509904 2.682255\nv -1.100299 1.576129 2.696882\nv -0.958844 1.579576 2.741739\nv -0.747660 1.580034 2.774832\nv -0.620538 1.511391 2.796631\nv -0.620456 1.376431 2.808136\nv -0.744608 1.310032 2.798027\nv -0.984590 1.305110 2.880183\nv -1.053492 1.381015 2.648669\nv -0.957248 1.448427 2.648669\nv -0.852790 1.381450 2.648669\nv -1.155326 1.304271 2.786042\nv -1.214136 1.372920 2.734792\nv -1.119172 1.448800 2.648669\nv -0.852766 1.516461 2.648669\nv -0.758285 1.575485 2.900995\nv -0.631164 1.506841 2.944593\nv -0.734474 1.448429 2.648669\nv -1.037006 1.515606 2.648669\nv -0.969469 1.575027 2.834809\nv -1.187823 1.505354 2.715840\nv -1.110924 1.571579 2.745094\nv -0.755233 1.305482 2.947383\nv -0.631081 1.371881 2.967603\nv -0.963339 1.314209 2.648669\nv -1.134075 1.313370 2.648669\nv -1.192884 1.382019 2.648669\nv -1.166572 1.514453 2.648669\nv -1.089672 1.580679 2.648669\nv -0.948218 1.584126 2.648669\nv -0.737034 1.584584 2.648669\nv -0.609913 1.515940 2.648669\nv -0.609830 1.380980 2.648669\nv -0.733981 1.314582 2.648669\nv -0.864047 1.309939 2.784462\nv -1.069227 1.309262 2.741023\nv -1.192193 1.325750 2.699049\nv -1.193547 1.445135 2.688448\nv -1.148201 1.558120 2.682086\nv -1.036256 1.578444 2.719234\nv -0.863998 1.579962 2.761302\nv -0.652336 1.562831 2.785539\nv -0.620501 1.443371 2.805151\nv -0.651469 1.326631 2.805718\nv 1.050192 1.092986 -4.369306\nv 1.317705 1.057940 -4.240270\nv 0.768000 0.985286 -4.654135\nv 0.802631 1.087581 -4.499815\nv 1.035027 0.878717 -4.576410\nv 1.287380 0.893051 -4.385328\nv 1.387768 0.949372 -4.235975\nv 0.800774 0.891728 -4.691046\nv 1.051682 1.059504 -4.175900\nv 1.265166 1.038101 -4.171591\nv 1.306572 0.965081 -4.167566\nv 1.244181 0.912691 -4.187708\nv 1.040668 0.903886 -4.188844\nv 0.807906 0.912509 -4.221677\nv 0.763980 0.981671 -4.193701\nv 0.810223 1.058223 -4.200428\nv 1.051179 1.081819 -4.266156\nv 1.299752 1.050954 -4.201637\nv 1.363402 0.957191 -4.199490\nv 1.272202 0.901156 -4.274166\nv 1.037401 0.887161 -4.369708\nv 0.789234 0.898981 -4.427026\nv 0.743453 0.983976 -4.408570\nv 0.790921 1.076908 -4.331410\nv 1.048455 0.973507 -4.163006\nv 1.194242 1.078037 -4.264152\nv 1.365886 1.005781 -4.204484\nv 1.347695 0.918190 -4.263685\nv 1.169448 0.886618 -4.403324\nv 0.899637 0.882274 -4.527599\nv 0.757600 0.932911 -4.559464\nv 0.757681 1.040200 -4.477176\nv 0.906321 1.093392 -4.365341\nv 1.194358 1.014004 -4.163005\nv 1.187269 1.067769 -4.196721\nv 1.342451 1.006524 -4.176832\nv 1.326005 0.927334 -4.196566\nv 1.164853 0.894708 -4.243112\nv 0.897683 0.890781 -4.284536\nv 0.737260 0.936562 -4.295158\nv 0.737333 1.033560 -4.267729\nv 0.903726 1.081651 -4.230451\nv 0.892572 1.025677 -4.163005\nv 1.183746 0.932064 -4.163005\nv 0.889710 0.935304 -4.163005\nv 1.197728 1.083172 -4.297868\nv 0.767856 1.043520 -4.581899\nv 0.907619 1.099262 -4.432786\nv 1.171746 0.882572 -4.483429\nv 1.377604 1.005409 -4.218311\nv 1.358540 0.913618 -4.297245\nv 0.767771 0.931086 -4.691616\nv 0.900615 0.878021 -4.649130\nv 1.187299 1.051761 -4.171434\nv 1.299569 1.008580 -4.166462\nv 1.285017 0.930803 -4.171396\nv 1.168427 0.906070 -4.183032\nv 0.895201 0.904039 -4.193388\nv 0.770287 0.937160 -4.196044\nv 0.771056 1.029929 -4.189187\nv 0.900288 1.064722 -4.179867\nv 1.050686 1.087402 -4.317731\nv 1.308728 1.054447 -4.220953\nv 1.375585 0.953282 -4.217732\nv 1.279791 0.897104 -4.329747\nv 1.036214 0.882939 -4.473059\nv 0.795004 0.895355 -4.559036\nv 0.755727 0.984631 -4.531353\nv 0.796776 1.082245 -4.415613\nv 1.051672 1.076236 -4.214581\nv 1.290776 1.047461 -4.182322\nv 1.351220 0.961101 -4.181248\nv 1.264614 0.905209 -4.218586\nv 1.038589 0.891382 -4.266356\nv 0.783464 0.902607 -4.295016\nv 0.731179 0.983321 -4.285788\nv 0.785066 1.071573 -4.247208\nv 1.190755 1.072903 -4.230437\nv 1.354169 1.006153 -4.190658\nv 1.336850 0.922763 -4.230125\nv 1.167150 0.890663 -4.323217\nv 0.898660 0.886528 -4.406067\nv 0.747430 0.934737 -4.427311\nv 0.747508 1.036880 -4.372453\nv 0.905023 1.087521 -4.297896\nv 1.044530 0.932952 -4.163005\nv 1.050725 1.020476 -4.163005\nv 1.196993 0.969204 -4.163005\nv 0.886928 0.978032 -4.163005\nv -1.050195 1.092986 -4.369306\nv -1.317708 1.057940 -4.240270\nv -0.768003 0.985286 -4.654135\nv -0.802634 1.087581 -4.499815\nv -1.035030 0.878717 -4.576410\nv -1.287383 0.893051 -4.385328\nv -1.387771 0.949372 -4.235975\nv -0.800776 0.891728 -4.691046\nv -1.051685 1.059504 -4.175900\nv -1.265169 1.038101 -4.171591\nv -1.306574 0.965081 -4.167566\nv -1.244184 0.912691 -4.187708\nv -1.040671 0.903886 -4.188844\nv -0.807909 0.912509 -4.221677\nv -0.763982 0.981671 -4.193701\nv -0.810226 1.058223 -4.200428\nv -1.051182 1.081819 -4.266156\nv -1.299755 1.050954 -4.201637\nv -1.363405 0.957191 -4.199490\nv -1.272205 0.901156 -4.274166\nv -1.037404 0.887161 -4.369708\nv -0.789236 0.898981 -4.427026\nv -0.743456 0.983976 -4.408570\nv -0.790924 1.076908 -4.331410\nv -1.048458 0.973507 -4.163006\nv -1.194245 1.078037 -4.264152\nv -1.365889 1.005781 -4.204484\nv -1.347698 0.918190 -4.263685\nv -1.169451 0.886618 -4.403324\nv -0.899640 0.882274 -4.527599\nv -0.757604 0.932911 -4.559464\nv -0.757685 1.040200 -4.477176\nv -0.906323 1.093392 -4.365341\nv -1.194361 1.014004 -4.163005\nv -1.187272 1.067769 -4.196721\nv -1.342454 1.006524 -4.176832\nv -1.326007 0.927334 -4.196566\nv -1.164856 0.894708 -4.243112\nv -0.897686 0.890781 -4.284536\nv -0.737262 0.936562 -4.295158\nv -0.737336 1.033560 -4.267729\nv -0.903728 1.081651 -4.230451\nv -0.892574 1.025677 -4.163005\nv -1.183748 0.932064 -4.163005\nv -0.889713 0.935304 -4.163005\nv -1.197731 1.083172 -4.297868\nv -0.767859 1.043520 -4.581899\nv -0.907622 1.099262 -4.432786\nv -1.171749 0.882572 -4.483429\nv -1.377607 1.005409 -4.218311\nv -1.358543 0.913618 -4.297245\nv -0.767774 0.931086 -4.691616\nv -0.900617 0.878021 -4.649130\nv -1.187301 1.051761 -4.171434\nv -1.299572 1.008580 -4.166462\nv -1.285020 0.930803 -4.171396\nv -1.168430 0.906070 -4.183032\nv -0.895204 0.904039 -4.193388\nv -0.770290 0.937160 -4.196044\nv -0.771058 1.029929 -4.189187\nv -0.900291 1.064722 -4.179867\nv -1.050689 1.087402 -4.317731\nv -1.308731 1.054447 -4.220953\nv -1.375588 0.953282 -4.217732\nv -1.279794 0.897104 -4.329747\nv -1.036217 0.882939 -4.473059\nv -0.795007 0.895355 -4.559036\nv -0.755729 0.984631 -4.531353\nv -0.796779 1.082245 -4.415613\nv -1.051675 1.076236 -4.214581\nv -1.290778 1.047461 -4.182322\nv -1.351223 0.961101 -4.181248\nv -1.264616 0.905209 -4.218586\nv -1.038592 0.891382 -4.266356\nv -0.783467 0.902607 -4.295016\nv -0.731183 0.983321 -4.285788\nv -0.785069 1.071573 -4.247208\nv -1.190758 1.072903 -4.230437\nv -1.354172 1.006153 -4.190658\nv -1.336853 0.922763 -4.230125\nv -1.167153 0.890663 -4.323217\nv -0.898663 0.886528 -4.406067\nv -0.747433 0.934737 -4.427311\nv -0.747510 1.036880 -4.372453\nv -0.905026 1.087521 -4.297896\nv -1.044533 0.932952 -4.163005\nv -1.050727 1.020476 -4.163005\nv -1.196996 0.969204 -4.163005\nv -0.886931 0.978032 -4.163005\nv 1.139631 0.447392 -4.073302\nv 1.151739 0.508263 -4.073302\nv 1.186219 0.559867 -4.073302\nv 1.237823 0.594347 -4.073302\nv 1.298694 0.606455 -4.073302\nv 1.359565 0.594347 -4.073302\nv 1.411170 0.559867 -4.073302\nv 1.445650 0.508263 -4.073302\nv 1.457758 0.447392 -4.073302\nv 1.445650 0.386521 -4.073302\nv 1.411170 0.334917 -4.073302\nv 1.359565 0.300436 -4.073302\nv 1.298694 0.288328 -4.073302\nv 1.237823 0.300436 -4.073302\nv 1.186219 0.334917 -4.073302\nv 1.151739 0.386521 -4.073302\nv 1.139631 0.447392 -4.328740\nv 1.151739 0.508263 -4.328740\nv 1.186219 0.559867 -4.328740\nv 1.237823 0.594347 -4.328740\nv 1.298694 0.606455 -4.328740\nv 1.359565 0.594347 -4.328740\nv 1.411170 0.559867 -4.328740\nv 1.445650 0.508263 -4.328740\nv 1.457758 0.447392 -4.328740\nv 1.445650 0.386521 -4.328740\nv 1.411170 0.334917 -4.328740\nv 1.359565 0.300436 -4.328740\nv 1.298694 0.288328 -4.328740\nv 1.237823 0.300436 -4.328740\nv 1.186219 0.334917 -4.328740\nv 1.151739 0.386521 -4.328740\nv 1.076067 0.990526 -4.105963\nv 1.087713 1.033986 -4.105963\nv 1.119527 1.065800 -4.105963\nv 1.162987 1.077446 -4.105963\nv 1.206447 1.065800 -4.105963\nv 1.238262 1.033986 -4.105963\nv 1.249907 0.990526 -4.105963\nv 1.238262 0.947065 -4.105963\nv 1.206447 0.915250 -4.105963\nv 1.162987 0.903605 -4.105963\nv 1.119527 0.915250 -4.105963\nv 1.087713 0.947065 -4.105963\nv 1.076067 0.990526 -4.279731\nv 1.087713 1.033986 -4.279731\nv 1.119527 1.065800 -4.279731\nv 1.162987 1.077446 -4.279731\nv 1.206447 1.065800 -4.279731\nv 1.238262 1.033986 -4.279731\nv 1.249907 0.990526 -4.279731\nv 1.238262 0.947065 -4.279731\nv 1.206447 0.915250 -4.279731\nv 1.162987 0.903605 -4.279731\nv 1.119527 0.915250 -4.279731\nv 1.087713 0.947065 -4.279731\nv 0.997702 0.930370 -4.093235\nv 1.005600 0.954679 -4.093235\nv 1.026278 0.969702 -4.093235\nv 1.051838 0.969702 -4.093235\nv 1.072516 0.954679 -4.093235\nv 1.080415 0.930370 -4.093235\nv 1.072516 0.906061 -4.093235\nv 1.051838 0.891038 -4.093235\nv 1.026278 0.891038 -4.093235\nv 1.005600 0.906061 -4.093235\nv 0.997702 0.930370 -4.348673\nv 1.005600 0.954679 -4.348673\nv 1.026278 0.969702 -4.348673\nv 1.051838 0.969702 -4.348673\nv 1.072516 0.954679 -4.348673\nv 1.080415 0.930370 -4.348673\nv 1.072516 0.906061 -4.348673\nv 1.051838 0.891038 -4.348673\nv 1.026278 0.891038 -4.348673\nv 1.005600 0.906061 -4.348673\nv 0.787407 0.987655 -4.144662\nv 0.801614 1.040676 -4.144662\nv 0.840428 1.079490 -4.144662\nv 0.893450 1.093698 -4.144662\nv 0.946471 1.079490 -4.144662\nv 0.985286 1.040676 -4.144662\nv 0.999493 0.987655 -4.144662\nv 0.985286 0.934634 -4.144662\nv 0.946471 0.895819 -4.144662\nv 0.893449 0.881612 -4.144662\nv 0.840428 0.895819 -4.144662\nv 0.801614 0.934634 -4.144662\nv 0.787407 0.987655 -4.400100\nv 0.801614 1.040676 -4.400100\nv 0.840428 1.079490 -4.400100\nv 0.893450 1.093698 -4.400100\nv 0.946471 1.079490 -4.400100\nv 0.985286 1.040676 -4.400100\nv 0.999493 0.987655 -4.400100\nv 0.985286 0.934634 -4.400100\nv 0.946471 0.895819 -4.400100\nv 0.893449 0.881612 -4.400100\nv 0.840428 0.895819 -4.400100\nv 0.801614 0.934634 -4.400100\nv 1.024083 1.395188 2.550508\nv 1.034742 1.355408 2.550508\nv 1.063864 1.326288 2.550508\nv 1.103643 1.315629 2.550508\nv 1.143422 1.326288 2.550508\nv 1.172543 1.355408 2.550508\nv 1.183202 1.395188 2.550508\nv 1.172543 1.434968 2.550508\nv 1.143422 1.464088 2.550508\nv 1.103643 1.474747 2.550508\nv 1.063864 1.464088 2.550508\nv 1.034742 1.434967 2.550508\nv 1.024083 1.395188 2.741831\nv 1.034742 1.355408 2.741831\nv 1.063864 1.326288 2.741831\nv 1.103643 1.315629 2.741831\nv 1.143422 1.326288 2.741831\nv 1.172543 1.355408 2.741831\nv 1.183202 1.395188 2.741831\nv 1.172543 1.434967 2.741831\nv 1.143422 1.464088 2.741831\nv 1.103643 1.474747 2.741831\nv 1.063864 1.464088 2.741831\nv 1.034742 1.434967 2.741831\nv 0.759710 1.440507 2.550508\nv 0.769884 1.389357 2.550508\nv 0.798858 1.345995 2.550508\nv 0.842220 1.317021 2.550508\nv 0.893369 1.306847 2.550508\nv 0.944519 1.317021 2.550508\nv 0.987881 1.345995 2.550508\nv 1.016855 1.389357 2.550508\nv 1.027029 1.440507 2.550508\nv 1.016855 1.491656 2.550508\nv 0.987881 1.535018 2.550508\nv 0.944519 1.563992 2.550508\nv 0.893369 1.574166 2.550508\nv 0.842220 1.563992 2.550508\nv 0.798858 1.535018 2.550508\nv 0.769884 1.491656 2.550508\nv 0.759710 1.440507 2.807662\nv 0.769884 1.389357 2.807662\nv 0.798858 1.345995 2.807662\nv 0.842220 1.317021 2.807662\nv 0.893369 1.306847 2.807662\nv 0.944519 1.317021 2.807662\nv 0.987881 1.345995 2.807662\nv 1.016855 1.389357 2.807662\nv 1.027029 1.440507 2.807662\nv 1.016855 1.491656 2.807662\nv 0.987881 1.535018 2.807662\nv 0.944519 1.563992 2.807662\nv 0.893369 1.574166 2.807662\nv 0.842220 1.563992 2.807662\nv 0.798858 1.535018 2.807662\nv 0.769884 1.491656 2.807662\nv 0.634234 1.499817 2.550508\nv 0.647003 1.460520 2.550508\nv 0.680431 1.436233 2.550508\nv 0.721750 1.436233 2.550508\nv 0.755179 1.460520 2.550508\nv 0.767947 1.499817 2.550508\nv 0.755179 1.539114 2.550508\nv 0.721750 1.563401 2.550508\nv 0.680431 1.563401 2.550508\nv 0.647003 1.539114 2.550508\nv 0.634234 1.499817 2.859092\nv 0.647003 1.460520 2.859092\nv 0.680431 1.436233 2.859092\nv 0.721750 1.436233 2.859092\nv 0.755179 1.460520 2.859092\nv 0.767947 1.499817 2.859092\nv 0.755179 1.539114 2.859092\nv 0.721750 1.563401 2.859092\nv 0.680431 1.563401 2.859092\nv 0.647003 1.539114 2.859092\nv 0.651567 0.506490 2.763301\nv 0.665779 0.453446 2.763301\nv 0.704611 0.414615 2.763301\nv 0.757654 0.400402 2.763301\nv 0.810698 0.414615 2.763301\nv 0.849529 0.453446 2.763301\nv 0.863742 0.506490 2.763301\nv 0.849529 0.559534 2.763301\nv 0.810698 0.598364 2.763301\nv 0.757654 0.612577 2.763301\nv 0.704611 0.598364 2.763301\nv 0.665779 0.559533 2.763301\nv 0.651567 0.506490 3.066190\nv 0.665779 0.453446 3.066190\nv 0.704611 0.414615 3.066190\nv 0.757654 0.400402 3.066190\nv 0.810698 0.414615 3.066190\nv 0.849529 0.453446 3.066190\nv 0.863742 0.506490 3.066190\nv 0.849529 0.559533 3.066190\nv 0.810698 0.598364 3.066190\nv 0.757654 0.612577 3.066190\nv 0.704611 0.598364 3.066190\nv 0.665779 0.559533 3.066190\nv 0.677205 0.506490 3.090955\nv 0.687983 0.466265 3.090955\nv 0.717430 0.436819 3.090955\nv 0.757654 0.426040 3.090955\nv 0.797879 0.436819 3.090955\nv 0.827326 0.466265 3.090955\nv 0.838103 0.506490 3.090955\nv 0.827326 0.546714 3.090955\nv 0.797879 0.576161 3.090955\nv 0.757654 0.586939 3.090955\nv 0.717430 0.576161 3.090955\nv 0.687983 0.546714 3.090955\nv 0.690353 0.506490 3.090955\nv 0.699369 0.472839 3.090955\nv 0.724003 0.448205 3.090955\nv 0.757654 0.439188 3.090955\nv 0.791305 0.448205 3.090955\nv 0.815939 0.472839 3.090955\nv 0.824956 0.506490 3.090955\nv 0.815939 0.540140 3.090955\nv 0.791305 0.564774 3.090955\nv 0.757654 0.573791 3.090955\nv 0.724003 0.564774 3.090955\nv 0.699369 0.540140 3.090955\nv 0.690353 0.506490 2.921791\nv 0.699369 0.472839 2.921791\nv 0.724003 0.448205 2.921791\nv 0.757654 0.439188 2.921791\nv 0.791305 0.448205 2.921791\nv 0.815939 0.472839 2.921791\nv 0.824956 0.506490 2.921791\nv 0.815939 0.540140 2.921791\nv 0.791305 0.564774 2.921791\nv 0.757654 0.573791 2.921791\nv 0.724003 0.564774 2.921791\nv 0.699369 0.540140 2.921791\nv -1.139631 0.447392 -4.073302\nv -1.151739 0.508263 -4.073302\nv -1.186219 0.559867 -4.073302\nv -1.237823 0.594347 -4.073302\nv -1.298694 0.606455 -4.073302\nv -1.359565 0.594347 -4.073302\nv -1.411170 0.559867 -4.073302\nv -1.445650 0.508263 -4.073302\nv -1.457758 0.447392 -4.073302\nv -1.445650 0.386521 -4.073302\nv -1.411170 0.334917 -4.073302\nv -1.359565 0.300436 -4.073302\nv -1.298694 0.288328 -4.073302\nv -1.237823 0.300436 -4.073302\nv -1.186219 0.334917 -4.073302\nv -1.151739 0.386521 -4.073302\nv -1.139631 0.447392 -4.328740\nv -1.151739 0.508263 -4.328740\nv -1.186219 0.559867 -4.328740\nv -1.237823 0.594347 -4.328740\nv -1.298694 0.606455 -4.328740\nv -1.359565 0.594347 -4.328740\nv -1.411170 0.559867 -4.328740\nv -1.445650 0.508263 -4.328740\nv -1.457758 0.447392 -4.328740\nv -1.445650 0.386521 -4.328740\nv -1.411170 0.334917 -4.328740\nv -1.359565 0.300436 -4.328740\nv -1.298694 0.288328 -4.328740\nv -1.237823 0.300436 -4.328740\nv -1.186219 0.334917 -4.328740\nv -1.151739 0.386521 -4.328740\nv -1.076067 0.990526 -4.105963\nv -1.087713 1.033986 -4.105963\nv -1.119527 1.065800 -4.105963\nv -1.162987 1.077446 -4.105963\nv -1.206447 1.065800 -4.105963\nv -1.238262 1.033986 -4.105963\nv -1.249907 0.990526 -4.105963\nv -1.238262 0.947065 -4.105963\nv -1.206447 0.915250 -4.105963\nv -1.162987 0.903605 -4.105963\nv -1.119527 0.915250 -4.105963\nv -1.087713 0.947065 -4.105963\nv -1.076067 0.990526 -4.279731\nv -1.087713 1.033986 -4.279731\nv -1.119527 1.065800 -4.279731\nv -1.162987 1.077446 -4.279731\nv -1.206447 1.065800 -4.279731\nv -1.238262 1.033986 -4.279731\nv -1.249907 0.990526 -4.279731\nv -1.238262 0.947065 -4.279731\nv -1.206447 0.915250 -4.279731\nv -1.162987 0.903605 -4.279731\nv -1.119527 0.915250 -4.279731\nv -1.087713 0.947065 -4.279731\nv -0.997702 0.930370 -4.093235\nv -1.005600 0.954679 -4.093235\nv -1.026278 0.969702 -4.093235\nv -1.051838 0.969702 -4.093235\nv -1.072516 0.954679 -4.093235\nv -1.080415 0.930370 -4.093235\nv -1.072516 0.906061 -4.093235\nv -1.051838 0.891038 -4.093235\nv -1.026278 0.891038 -4.093235\nv -1.005600 0.906061 -4.093235\nv -0.997702 0.930370 -4.348673\nv -1.005600 0.954679 -4.348673\nv -1.026278 0.969702 -4.348673\nv -1.051838 0.969702 -4.348673\nv -1.072516 0.954679 -4.348673\nv -1.080415 0.930370 -4.348673\nv -1.072516 0.906061 -4.348673\nv -1.051838 0.891038 -4.348673\nv -1.026278 0.891038 -4.348673\nv -1.005600 0.906061 -4.348673\nv -0.787407 0.987655 -4.144662\nv -0.801614 1.040676 -4.144662\nv -0.840428 1.079490 -4.144662\nv -0.893450 1.093698 -4.144662\nv -0.946471 1.079490 -4.144662\nv -0.985286 1.040676 -4.144662\nv -0.999493 0.987655 -4.144662\nv -0.985286 0.934634 -4.144662\nv -0.946471 0.895819 -4.144662\nv -0.893449 0.881612 -4.144662\nv -0.840428 0.895819 -4.144662\nv -0.801614 0.934634 -4.144662\nv -0.787407 0.987655 -4.400100\nv -0.801614 1.040676 -4.400100\nv -0.840428 1.079490 -4.400100\nv -0.893450 1.093698 -4.400100\nv -0.946471 1.079490 -4.400100\nv -0.985286 1.040676 -4.400100\nv -0.999493 0.987655 -4.400100\nv -0.985286 0.934634 -4.400100\nv -0.946471 0.895819 -4.400100\nv -0.893449 0.881612 -4.400100\nv -0.840428 0.895819 -4.400100\nv -0.801614 0.934634 -4.400100\nv -1.024083 1.395188 2.550508\nv -1.034742 1.355408 2.550508\nv -1.063863 1.326288 2.550508\nv -1.103642 1.315629 2.550508\nv -1.143422 1.326288 2.550508\nv -1.172543 1.355408 2.550508\nv -1.183202 1.395188 2.550508\nv -1.172543 1.434968 2.550508\nv -1.143422 1.464088 2.550508\nv -1.103642 1.474747 2.550508\nv -1.063863 1.464088 2.550508\nv -1.034742 1.434967 2.550508\nv -1.024083 1.395188 2.741831\nv -1.034742 1.355408 2.741831\nv -1.063863 1.326288 2.741831\nv -1.103642 1.315629 2.741831\nv -1.143422 1.326288 2.741831\nv -1.172543 1.355408 2.741831\nv -1.183202 1.395188 2.741831\nv -1.172543 1.434967 2.741831\nv -1.143422 1.464088 2.741831\nv -1.103642 1.474747 2.741831\nv -1.063863 1.464088 2.741831\nv -1.034742 1.434967 2.741831\nv -0.759710 1.440507 2.550508\nv -0.769884 1.389357 2.550508\nv -0.798858 1.345995 2.550508\nv -0.842220 1.317021 2.550508\nv -0.893369 1.306847 2.550508\nv -0.944519 1.317021 2.550508\nv -0.987881 1.345995 2.550508\nv -1.016855 1.389357 2.550508\nv -1.027029 1.440507 2.550508\nv -1.016855 1.491656 2.550508\nv -0.987881 1.535018 2.550508\nv -0.944519 1.563992 2.550508\nv -0.893369 1.574166 2.550508\nv -0.842220 1.563992 2.550508\nv -0.798858 1.535018 2.550508\nv -0.769884 1.491656 2.550508\nv -0.759710 1.440507 2.807662\nv -0.769884 1.389357 2.807662\nv -0.798858 1.345995 2.807662\nv -0.842220 1.317021 2.807662\nv -0.893369 1.306847 2.807662\nv -0.944519 1.317021 2.807662\nv -0.987881 1.345995 2.807662\nv -1.016855 1.389357 2.807662\nv -1.027029 1.440507 2.807662\nv -1.016855 1.491656 2.807662\nv -0.987881 1.535018 2.807662\nv -0.944519 1.563992 2.807662\nv -0.893369 1.574166 2.807662\nv -0.842220 1.563992 2.807662\nv -0.798858 1.535018 2.807662\nv -0.769884 1.491656 2.807662\nv -0.634234 1.499817 2.550508\nv -0.647003 1.460520 2.550508\nv -0.680431 1.436233 2.550508\nv -0.721750 1.436233 2.550508\nv -0.755179 1.460520 2.550508\nv -0.767947 1.499817 2.550508\nv -0.755179 1.539114 2.550508\nv -0.721750 1.563401 2.550508\nv -0.680431 1.563401 2.550508\nv -0.647003 1.539114 2.550508\nv -0.634234 1.499817 2.859092\nv -0.647003 1.460520 2.859092\nv -0.680431 1.436233 2.859092\nv -0.721750 1.436233 2.859092\nv -0.755179 1.460520 2.859092\nv -0.767947 1.499817 2.859092\nv -0.755179 1.539114 2.859092\nv -0.721750 1.563401 2.859092\nv -0.680431 1.563401 2.859092\nv -0.647003 1.539114 2.859092\nv -0.651566 0.506490 2.763301\nv -0.665779 0.453446 2.763301\nv -0.704611 0.414615 2.763301\nv -0.757654 0.400402 2.763301\nv -0.810698 0.414615 2.763301\nv -0.849528 0.453446 2.763301\nv -0.863742 0.506490 2.763301\nv -0.849528 0.559534 2.763301\nv -0.810698 0.598364 2.763301\nv -0.757654 0.612577 2.763301\nv -0.704611 0.598364 2.763301\nv -0.665779 0.559533 2.763301\nv -0.651566 0.506490 3.066190\nv -0.665779 0.453446 3.066190\nv -0.704611 0.414615 3.066190\nv -0.757654 0.400402 3.066190\nv -0.810698 0.414615 3.066190\nv -0.849528 0.453446 3.066190\nv -0.863742 0.506490 3.066190\nv -0.849528 0.559533 3.066190\nv -0.810698 0.598364 3.066190\nv -0.757654 0.612577 3.066190\nv -0.704611 0.598364 3.066190\nv -0.665779 0.559533 3.066190\nv -0.677205 0.506490 3.090955\nv -0.687983 0.466265 3.090955\nv -0.717430 0.436819 3.090955\nv -0.757654 0.426040 3.090955\nv -0.797879 0.436819 3.090955\nv -0.827325 0.466265 3.090955\nv -0.838103 0.506490 3.090955\nv -0.827325 0.546714 3.090955\nv -0.797879 0.576161 3.090955\nv -0.757654 0.586939 3.090955\nv -0.717430 0.576161 3.090955\nv -0.687983 0.546714 3.090955\nv -0.690353 0.506490 3.090955\nv -0.699369 0.472839 3.090955\nv -0.724003 0.448205 3.090955\nv -0.757654 0.439188 3.090955\nv -0.791305 0.448205 3.090955\nv -0.815938 0.472839 3.090955\nv -0.824956 0.506490 3.090955\nv -0.815938 0.540140 3.090955\nv -0.791305 0.564774 3.090955\nv -0.757654 0.573791 3.090955\nv -0.724003 0.564774 3.090955\nv -0.699369 0.540140 3.090955\nv -0.690353 0.506490 2.921791\nv -0.699369 0.472839 2.921791\nv -0.724003 0.448205 2.921791\nv -0.757654 0.439188 2.921791\nv -0.791305 0.448205 2.921791\nv -0.815938 0.472839 2.921791\nv -0.824956 0.506490 2.921791\nv -0.815938 0.540140 2.921791\nv -0.791305 0.564774 2.921791\nv -0.757654 0.573791 2.921791\nv -0.724003 0.564774 2.921791\nv -0.699369 0.540140 2.921791\nv 1.072839 1.513785 -2.116637\nv -0.281393 1.544533 -2.374328\nv -1.072839 1.513785 -2.116637\nv 1.218333 1.581962 -1.466137\nv -0.337658 1.572131 -1.879372\nv -1.144109 1.391959 -1.420729\nv 1.277479 1.438530 0.097518\nv -0.365674 0.776311 -0.017931\nv -1.277479 1.438530 0.097518\nv 1.147732 1.496639 1.202896\nv 0.314602 1.545424 1.342996\nv -1.149845 1.739922 1.466616\nv 0.841127 1.730018 2.208756\nv 0.307021 1.722415 2.408905\nv -0.841127 1.730018 2.208756\nv 1.045816 0.887217 -1.426071\nv -0.363712 0.887874 -1.738139\nv -1.045816 0.887217 -1.426071\nv -1.147686 0.824084 0.024238\nv -1.046397 0.945397 0.796320\nv -0.366001 0.906552 0.808831\nv 1.046397 0.945397 0.796320\nv 1.147686 0.824084 0.024238\nv 0.281393 1.544533 -2.374328\nv 0.337658 1.572131 -1.879372\nv 0.365674 0.776311 -0.017931\nv -0.142949 1.649680 1.418521\nv -0.307021 1.722415 2.408905\nv 0.363712 0.887874 -1.738139\nv 0.366001 0.906552 0.808831\nv 0.226724 1.125998 0.783302\nv 0.227680 1.065531 -0.060579\nv 0.223983 1.118188 -1.381127\nv 0.135588 1.584332 -1.667073\nv -0.218665 1.485781 -1.641838\nv -0.223983 1.118188 -1.381128\nv -0.227680 1.065531 -0.060579\nv -0.226724 1.125998 0.783302\nv -0.137843 1.629743 1.092982\nv 0.221667 1.525743 1.048840\nv 1.144109 1.391959 -1.420729\nv -0.311511 1.481355 -1.809752\nv -0.140721 1.587646 -1.798925\nv -1.234373 1.581962 -1.466137\nv 1.273685 1.646057 0.116236\nv -1.273685 1.646057 0.116236\nv 1.149845 1.739922 1.466616\nv 0.142949 1.649680 1.418521\nv 0.346153 1.654296 1.595759\nv -1.147732 1.496639 1.202896\nv 0.140721 1.587646 -1.798925\nv 0.311511 1.481355 -1.809752\nv -0.314602 1.545424 1.342996\nv -0.346153 1.654296 1.595759\nv 0.137843 1.179445 0.688940\nv 0.137843 1.264241 0.857647\nv 0.138212 1.158571 -0.075366\nv 0.135612 1.217306 -1.417753\nv 0.135946 1.140349 -1.172744\nv 0.135591 1.503353 -1.569967\nv 0.218665 1.485781 -1.641838\nv -0.135591 1.503353 -1.569967\nv -0.135588 1.584332 -1.667073\nv -0.135946 1.140349 -1.172744\nv -0.135612 1.217306 -1.417753\nv -0.138212 1.158571 -0.075366\nv -0.137843 1.264241 0.857647\nv -0.137843 1.179445 0.688940\nv -0.137843 1.543638 0.974570\nv -0.221667 1.525743 1.048840\nv 0.137843 1.543638 0.974570\nv 0.137843 1.629743 1.092982\nv 0.696208 1.543651 -2.003504\nv -0.696208 1.543651 -2.003504\nv -0.756120 0.725073 -0.920284\nv 0.756867 0.745896 0.512741\nv -0.756867 0.745896 0.512741\nv 0.756845 1.661884 1.927801\nv -0.756845 1.661884 1.927801\nv 0.756120 0.725073 -0.920284\nv 0.755369 1.116827 -1.867453\nv -0.755369 1.116827 -1.867453\nv -1.278021 1.102399 -0.774495\nv -1.278021 1.156385 0.649842\nv -0.756867 1.188226 1.112579\nv 0.756867 1.188226 1.112579\nv 1.278021 1.156385 0.649842\nv 1.278021 1.102399 -0.774495\nv 0.000000 1.578452 -2.020354\nv 0.000000 1.176641 0.379442\nv 0.000000 1.666735 1.795658\nv 0.000000 1.151590 -0.661902\nv 0.000000 1.365927 -1.487078\nv 0.000000 1.412645 0.913760\nv 0.235712 0.923030 0.468020\nv 0.234219 0.922818 -0.852088\nv 0.232717 1.235115 -1.772522\nv 0.000000 1.596660 -1.728137\nv -0.232717 1.235115 -1.772522\nv -0.234219 0.922818 -0.852088\nv -0.235712 0.923030 0.468020\nv -0.235712 1.262166 1.023442\nv 0.000000 1.649554 1.250168\nv 0.235712 1.262166 1.023442\nv -0.212379 1.574494 -1.823544\nv 0.215282 1.639353 1.451375\nv 0.212379 1.574494 -1.823544\nv -0.215282 1.639353 1.451375\nv 0.194855 1.173694 0.818088\nv 0.191913 1.139864 -1.388125\nv 0.191850 1.559425 -1.625494\nv -0.191850 1.559425 -1.625494\nv -0.191913 1.139864 -1.388125\nv -0.194855 1.173694 0.818088\nv -0.194855 1.600942 1.023095\nv 0.194855 1.600942 1.023095\nv 0.746766 1.528145 -1.716273\nv -0.746766 1.528145 -1.716273\nv 1.269348 1.527650 -0.712986\nv -1.269348 1.527650 -0.712986\nv 1.278021 1.595855 0.825040\nv 0.756866 1.629535 1.468530\nv -0.756866 1.629535 1.468530\nv -1.278021 1.595855 0.825040\nv 0.000000 1.161420 -1.355580\nv 0.000000 1.214300 0.812231\nv 0.205069 1.138403 0.401370\nv 0.203610 1.126944 -0.690056\nv 0.202074 1.341355 -1.516672\nv 0.000000 1.570728 -1.618581\nv -0.202074 1.341355 -1.516672\nv -0.203610 1.126944 -0.690056\nv -0.205069 1.138403 0.401370\nv -0.205069 1.374352 0.924017\nv 0.000000 1.611595 1.015270\nv 0.205069 1.374352 0.924017\nv 0.202064 1.566797 -1.729076\nv -0.202064 1.566797 -1.729076\nv -0.205069 1.620082 1.235933\nv 0.205069 1.620082 1.235933\nv 1.158084 1.534519 -1.873248\nv 0.753216 1.411415 -1.740645\nv 0.291219 1.565468 -2.072844\nv 0.654249 1.531355 -2.263889\nv -0.753216 1.411415 -1.740645\nv -1.158084 1.534519 -1.873248\nv -0.654249 1.531355 -2.263889\nv 1.275852 1.406507 -0.719065\nv -1.275852 1.406507 -0.719065\nv 0.756680 0.726159 0.000569\nv -0.756680 0.726159 0.000569\nv 1.278021 1.471498 0.762192\nv 0.756866 1.505188 1.347570\nv 0.366001 0.790179 0.501560\nv -0.756866 1.505188 1.347570\nv -1.278021 1.471498 0.762192\nv 1.072927 1.739707 1.884168\nv 0.756826 1.709261 2.323127\nv 0.307045 1.667850 1.916582\nv -0.756826 1.709261 2.323127\nv -1.072927 1.739707 1.884168\nv -0.364694 0.783642 -0.936076\nv 0.755559 0.827131 -1.719672\nv -0.755559 0.827131 -1.719672\nv -1.147546 0.810272 -0.850995\nv -1.147732 0.848518 0.547016\nv -0.756867 0.871009 0.816616\nv 0.756867 0.871009 0.816616\nv 1.147732 0.848518 0.547016\nv 1.147546 0.810272 -0.850995\nv 1.147358 1.094911 -1.528550\nv 0.363380 1.164709 -1.909383\nv -1.147358 1.094911 -1.528550\nv -1.278021 1.126991 0.062405\nv -1.147732 1.180243 0.996879\nv -0.366001 1.206733 1.090310\nv 1.147732 1.180243 0.996879\nv 1.278021 1.126991 0.062405\nv 0.000000 1.548925 -2.411141\nv 0.000000 1.591573 -1.833893\nv 0.000000 1.166291 -0.076799\nv 0.000000 1.657786 1.483509\nv 0.000000 1.726800 2.437498\nv 0.000000 1.145609 -1.160089\nv 0.000000 1.278628 0.858103\nv -0.291219 1.565468 -2.072844\nv -0.366001 0.790179 0.501560\nv -0.307045 1.667850 1.916582\nv 0.364694 0.783642 -0.936076\nv -0.363380 1.164709 -1.909383\nv 0.366001 1.206733 1.090310\nv 0.138481 1.167081 0.384924\nv 0.137403 1.145428 -0.668941\nv 0.136234 1.359784 -1.494477\nv 0.000000 1.506027 -1.563630\nv -0.136234 1.359784 -1.494477\nv -0.137403 1.145428 -0.668941\nv -0.138481 1.167081 0.384924\nv -0.138481 1.403072 0.916324\nv 0.000000 1.546813 0.969413\nv 0.138481 1.403072 0.916324\nv 0.235712 1.013159 0.785459\nv 0.235338 0.917632 -0.040591\nv 0.233097 1.006131 -1.563666\nv 0.225049 1.468946 -1.740408\nv -0.136227 1.589194 -1.728371\nv -0.233097 1.006131 -1.563666\nv -0.235338 0.917632 -0.040591\nv -0.235712 1.013159 0.785459\nv -0.228051 1.515867 1.175692\nv 0.138481 1.642186 1.246609\nv 1.134366 1.510121 -1.404315\nv -0.356214 1.557633 -1.804227\nv -0.204643 1.568483 -1.791719\nv -0.154201 1.584845 -1.873454\nv -1.134366 1.510121 -1.404315\nv 1.275852 1.562356 0.112028\nv -1.275852 1.562356 0.112028\nv 1.147732 1.620725 1.314418\nv 0.207622 1.629611 1.384016\nv 0.156354 1.655641 1.549127\nv 0.360891 1.632380 1.457481\nv -1.147732 1.620725 1.314418\nv 0.154201 1.584845 -1.873454\nv 0.204643 1.568483 -1.791719\nv 0.356214 1.557633 -1.804227\nv -0.207622 1.629611 1.384016\nv -0.360891 1.632380 1.457481\nv -0.156354 1.655641 1.549127\nv 0.202516 1.147349 0.705128\nv 0.135927 1.204149 0.813695\nv 0.202516 1.221079 0.856279\nv 0.204704 1.135415 -0.071065\nv 0.199538 1.191524 -1.439434\nv 0.133732 1.156031 -1.363716\nv 0.199956 1.124568 -1.210708\nv 0.133674 1.567902 -1.620310\nv 0.199514 1.495331 -1.588979\nv 0.199511 1.565192 -1.664155\nv -0.199514 1.495331 -1.588979\nv -0.133674 1.567902 -1.620310\nv -0.199511 1.565192 -1.664155\nv -0.199956 1.124568 -1.210708\nv -0.133732 1.156031 -1.363716\nv -0.199538 1.191524 -1.439434\nv -0.204704 1.135415 -0.071065\nv -0.202516 1.221079 0.856279\nv -0.135927 1.204149 0.813695\nv -0.202516 1.147349 0.705128\nv -0.135927 1.608932 1.017227\nv -0.202516 1.534109 0.990042\nv -0.202516 1.610585 1.088501\nv 0.202516 1.534109 0.990042\nv 0.135927 1.608932 1.017227\nv 0.202516 1.610585 1.088501\nv 0.729828 1.545922 -1.801503\nv -0.729828 1.545922 -1.801503\nv 1.252655 1.610065 -0.731582\nv -1.268695 1.610065 -0.731582\nv 1.205727 1.688750 0.863137\nv 0.756859 1.651642 1.615320\nv -0.756859 1.651642 1.615320\nv -1.205727 1.688750 0.863137\nv 0.000000 1.225901 -1.410527\nv 0.000000 1.190143 0.683544\nv 0.228051 1.065441 0.428997\nv 0.226566 1.063589 -0.744640\nv 0.225056 1.302510 -1.595432\nv 0.000000 1.590711 -1.668046\nv -0.225056 1.302510 -1.595432\nv -0.226566 1.063589 -0.744640\nv -0.228051 1.065441 0.428997\nv -0.228051 1.327160 0.954002\nv 0.000000 1.636128 1.094475\nv 0.228051 1.327160 0.954002\nv 0.136227 1.589194 -1.728371\nv -0.225049 1.468946 -1.740408\nv -0.138481 1.642186 1.246609\nv 0.228051 1.515867 1.175692\nv 0.904848 0.713134 -1.209311\nv 0.379604 0.713134 -1.209311\nv 0.904848 0.874533 -1.195191\nv 0.379604 0.874533 -1.195191\nv 0.904848 0.815478 -0.520198\nv 0.379604 0.815478 -0.520198\nv 0.379604 0.640881 -0.383468\nv 0.904848 0.640881 -0.383468\nv 0.904848 0.802280 -0.369347\nv 0.379604 0.802280 -0.369347\nv 0.904848 1.436212 -0.283283\nv 0.379604 1.436212 -0.283283\nv 0.379604 1.423015 -0.132433\nv 0.904848 1.423015 -0.132433\nv 0.904848 1.869475 -0.245377\nv 0.379604 1.869475 -0.245377\nv 0.379604 1.856278 -0.094527\nv 0.904848 1.856278 -0.094527\nv 0.273587 0.713134 -1.209311\nv 0.273587 0.654079 -0.534319\nv 0.273587 0.640881 -0.383468\nv 0.311543 0.802280 -0.369347\nv 0.311543 1.423015 -0.132433\nv 0.311543 1.897398 -0.129031\nv 0.311543 1.907288 -0.242069\nv 0.273587 1.436212 -0.283283\nv 0.273587 0.815478 -0.520198\nv 0.273587 0.874533 -1.195191\nv 1.010865 0.654079 -0.534319\nv 1.010865 0.713134 -1.209311\nv 1.010865 0.874533 -1.195191\nv 1.010865 0.815478 -0.520198\nv 1.010865 1.436212 -0.283283\nv 0.972909 1.907288 -0.242069\nv 0.972909 1.856278 -0.094527\nv 0.972909 1.423015 -0.132433\nv 0.972909 0.802280 -0.369347\nv 1.010865 0.640881 -0.383468\nv 0.379604 0.889062 -0.566276\nv 0.379604 0.961022 -1.187624\nv 0.273587 0.961022 -1.187624\nv 0.273587 0.847871 -0.540482\nv 0.273587 1.447090 -0.330606\nv 0.311543 1.911546 -0.290747\nv 0.379604 1.877036 -0.331798\nv 0.379604 1.455662 -0.367896\nv 0.904848 0.961022 -1.187624\nv 0.904848 0.889062 -0.566276\nv 0.904848 1.455662 -0.367896\nv 0.942805 1.911546 -0.290747\nv 1.010865 1.873729 -0.293986\nv 1.010865 1.447090 -0.330606\nv 1.010865 0.847871 -0.540482\nv 1.010865 0.961022 -1.187624\nv 0.904848 1.903980 -0.204257\nv 0.942805 1.907288 -0.242069\nv 0.341648 1.907288 -0.242069\nv 0.379604 1.903980 -0.204257\nv 0.379604 1.897398 -0.129031\nv 0.904848 1.897398 -0.129031\nv 0.273587 0.805720 -0.408662\nv 0.273587 0.764468 -0.372655\nv 0.273587 1.426387 -0.170981\nv 0.273587 1.859586 -0.132339\nv 0.311543 1.856278 -0.094527\nv 0.273587 1.869475 -0.245377\nv 1.010865 1.869475 -0.245377\nv 1.010865 1.859586 -0.132339\nv 0.972909 1.897398 -0.129031\nv 1.010865 1.426387 -0.170981\nv 1.010865 0.764468 -0.372655\nv 1.010865 0.805720 -0.408662\nv 0.311543 0.889062 -0.566276\nv 0.273587 0.893428 -0.603980\nv 0.311543 1.455662 -0.367896\nv 0.311543 1.877037 -0.331798\nv 0.273587 1.873729 -0.293986\nv 0.341648 1.911546 -0.290747\nv 0.904848 1.877036 -0.331798\nv 0.972909 1.877037 -0.331798\nv 0.972909 1.911546 -0.290747\nv 0.972909 1.455662 -0.367896\nv 1.010865 0.893428 -0.603980\nv 0.972909 0.889062 -0.566276\nv 0.904848 0.751269 0.071159\nv 0.379604 0.751269 0.071159\nv 0.904848 0.912668 0.085280\nv 0.379604 0.912668 0.085280\nv 0.904848 0.853614 0.760273\nv 0.379604 0.853614 0.760273\nv 0.379604 0.679017 0.897003\nv 0.904848 0.679017 0.897003\nv 0.904848 0.840416 0.911123\nv 0.379604 0.840416 0.911123\nv 0.904848 1.474347 0.997188\nv 0.379604 1.474347 0.997188\nv 0.379604 1.461150 1.148038\nv 0.904848 1.461150 1.148038\nv 0.904848 1.907611 1.035093\nv 0.379604 1.907611 1.035093\nv 0.379604 1.894413 1.185943\nv 0.904848 1.894413 1.185943\nv 0.273587 0.751269 0.071159\nv 0.273587 0.692215 0.746152\nv 0.273587 0.679017 0.897003\nv 0.311543 0.840416 0.911123\nv 0.311543 1.461150 1.148038\nv 0.311543 1.935534 1.151440\nv 0.311543 1.945423 1.038401\nv 0.273587 1.474347 0.997188\nv 0.273587 0.853614 0.760273\nv 0.273587 0.912668 0.085280\nv 1.010865 0.692215 0.746152\nv 1.010865 0.751269 0.071159\nv 1.010865 0.912668 0.085280\nv 1.010865 0.853614 0.760273\nv 1.010865 1.474347 0.997188\nv 0.972909 1.945423 1.038401\nv 0.972909 1.894413 1.185943\nv 0.972909 1.461150 1.148038\nv 0.972909 0.840416 0.911123\nv 1.010865 0.679017 0.897003\nv 0.379604 0.927197 0.714195\nv 0.379604 0.999157 0.092847\nv 0.273587 0.999157 0.092847\nv 0.273587 0.886006 0.739989\nv 0.273587 1.485226 0.949864\nv 0.311543 1.949682 0.989724\nv 0.379604 1.915172 0.948672\nv 0.379604 1.493797 0.912574\nv 0.904848 0.999157 0.092847\nv 0.904848 0.927197 0.714195\nv 0.904848 1.493797 0.912574\nv 0.942805 1.949682 0.989724\nv 1.010865 1.911864 0.986484\nv 1.010865 1.485226 0.949864\nv 1.010865 0.886006 0.739989\nv 1.010865 0.999157 0.092847\nv 0.904848 1.942115 1.076213\nv 0.942805 1.945423 1.038401\nv 0.341648 1.945423 1.038401\nv 0.379604 1.942115 1.076213\nv 0.379604 1.935534 1.151440\nv 0.904848 1.935534 1.151440\nv 0.273587 0.843855 0.871809\nv 0.273587 0.802604 0.907815\nv 0.273587 1.464522 1.109489\nv 0.273587 1.897722 1.148131\nv 0.311543 1.894413 1.185943\nv 0.273587 1.907611 1.035093\nv 1.010865 1.907611 1.035093\nv 1.010865 1.897722 1.148131\nv 0.972909 1.935534 1.151440\nv 1.010865 1.464522 1.109489\nv 1.010865 0.802604 0.907815\nv 1.010865 0.843855 0.871809\nv 0.311543 0.927197 0.714195\nv 0.273587 0.931564 0.676490\nv 0.311543 1.493797 0.912574\nv 0.311543 1.915172 0.948672\nv 0.273587 1.911864 0.986484\nv 0.341648 1.949682 0.989724\nv 0.904848 1.915172 0.948672\nv 0.972909 1.915172 0.948672\nv 0.972909 1.949682 0.989724\nv 0.972909 1.493797 0.912574\nv 1.010865 0.931564 0.676490\nv 0.972909 0.927197 0.714195\nv -0.379608 0.751269 0.071159\nv -0.904851 0.751269 0.071159\nv -0.379608 0.912668 0.085280\nv -0.904851 0.912668 0.085280\nv -0.379608 0.853614 0.760273\nv -0.904851 0.853614 0.760273\nv -0.904851 0.679017 0.897003\nv -0.379608 0.679017 0.897003\nv -0.379608 0.840416 0.911123\nv -0.904851 0.840416 0.911123\nv -0.379608 1.474347 0.997188\nv -0.904851 1.474347 0.997188\nv -0.904851 1.461150 1.148038\nv -0.379608 1.461150 1.148038\nv -0.379608 1.907611 1.035093\nv -0.904851 1.907611 1.035093\nv -0.904851 1.894413 1.185943\nv -0.379608 1.894413 1.185943\nv -1.010869 0.751269 0.071159\nv -1.010869 0.692215 0.746152\nv -1.010869 0.679017 0.897003\nv -0.972912 0.840416 0.911123\nv -0.972912 1.461150 1.148038\nv -0.972912 1.935534 1.151440\nv -0.972912 1.945423 1.038401\nv -1.010869 1.474347 0.997188\nv -1.010869 0.853614 0.760273\nv -1.010869 0.912668 0.085280\nv -0.273590 0.692215 0.746152\nv -0.273590 0.751269 0.071159\nv -0.273590 0.912668 0.085280\nv -0.273590 0.853614 0.760273\nv -0.273590 1.474347 0.997188\nv -0.311547 1.945423 1.038401\nv -0.311547 1.894413 1.185943\nv -0.311547 1.461150 1.148038\nv -0.311547 0.840416 0.911123\nv -0.273590 0.679017 0.897003\nv -0.904851 0.927197 0.714195\nv -0.904851 0.999157 0.092847\nv -1.010869 0.999157 0.092847\nv -1.010869 0.886006 0.739989\nv -1.010869 1.485226 0.949864\nv -0.972912 1.949682 0.989724\nv -0.904851 1.915172 0.948672\nv -0.904851 1.493797 0.912574\nv -0.379608 0.999157 0.092847\nv -0.379608 0.927197 0.714195\nv -0.379608 1.493797 0.912574\nv -0.341651 1.949682 0.989724\nv -0.273590 1.911864 0.986484\nv -0.273590 1.485226 0.949864\nv -0.273590 0.886006 0.739989\nv -0.273590 0.999157 0.092847\nv -0.379608 1.942115 1.076213\nv -0.341651 1.945423 1.038401\nv -0.942807 1.945423 1.038401\nv -0.904851 1.942115 1.076213\nv -0.904851 1.935534 1.151440\nv -0.379608 1.935534 1.151440\nv -1.010869 0.843855 0.871809\nv -1.010869 0.802604 0.907815\nv -1.010869 1.464522 1.109489\nv -1.010869 1.897722 1.148131\nv -0.972912 1.894413 1.185943\nv -1.010869 1.907611 1.035093\nv -0.273590 1.907611 1.035093\nv -0.273590 1.897722 1.148131\nv -0.311547 1.935534 1.151440\nv -0.273590 1.464522 1.109489\nv -0.273590 0.802604 0.907815\nv -0.273590 0.843855 0.871809\nv -0.972912 0.927197 0.714195\nv -1.010869 0.931564 0.676490\nv -0.972912 1.493797 0.912574\nv -0.972912 1.915172 0.948672\nv -1.010869 1.911864 0.986484\nv -0.942807 1.949682 0.989724\nv -0.379608 1.915172 0.948672\nv -0.311547 1.915172 0.948672\nv -0.311547 1.949682 0.989724\nv -0.311547 1.493797 0.912574\nv -0.273590 0.931564 0.676490\nv -0.311547 0.927197 0.714195\nv -0.443344 0.904814 -0.929860\nv -0.361174 0.954467 -0.652881\nv -0.638991 0.933712 -0.560950\nv -0.517484 1.654938 -0.672776\nv -0.424452 1.658931 -0.425840\nv -0.638991 1.301697 -0.788748\nv -0.344939 1.428782 -0.630823\nv -0.469721 1.302467 -0.773412\nv -0.477170 1.147894 -0.904317\nv -0.368822 1.111392 -0.612096\nv -0.360597 1.302727 -0.549518\nv -0.454324 1.488783 -0.348329\nv -0.339729 0.933180 -0.815874\nv -0.456991 0.953045 -0.554999\nv -0.441251 1.693727 -0.579892\nv -0.518790 1.670613 -0.338100\nv -0.464768 1.479944 -0.751371\nv -0.362474 1.298016 -0.667550\nv -0.367976 1.117977 -0.794793\nv -0.473945 1.106473 -0.486302\nv -0.466507 1.300400 -0.417922\nv -0.332063 1.496045 -0.466510\nv -0.427561 0.919633 -1.216175\nv -0.576891 0.943045 -1.188755\nv -0.584567 1.065448 -1.188829\nv -0.461914 1.084195 -1.229529\nv -0.382472 1.061204 -1.172356\nv -0.343673 0.941630 -1.130436\nv -0.372239 1.656280 -0.683432\nv -0.310399 1.619461 -0.594039\nv -0.267578 1.513443 -0.609222\nv -0.313908 1.446034 -0.694615\nv -0.411063 1.499014 -0.768428\nv -0.427781 1.612731 -0.738409\nv -0.354014 1.553103 -1.364655\nv -0.295762 1.562294 -1.319691\nv -0.258018 1.456859 -1.319691\nv -0.302143 1.423708 -1.364655\nv -0.378762 1.431614 -1.301700\nv -0.398442 1.511264 -1.301700\nv -0.354510 1.570128 -0.981329\nv -0.291222 1.548828 -0.965012\nv -0.253386 1.445488 -0.966796\nv -0.295417 1.402397 -0.982230\nv -0.380574 1.425274 -0.992796\nv -0.401296 1.529060 -0.989133\nv -0.570364 2.084272 -0.600159\nv -0.576385 2.082670 -0.389163\nv -0.536115 2.083113 -0.453781\nv -0.535040 2.083551 -0.532093\nv -0.577754 1.753137 -0.625951\nv -0.579084 1.756407 -0.392703\nv -0.524128 1.755851 -0.454584\nv -0.523867 1.755384 -0.536222\nv -0.528110 2.001146 -0.651075\nv -0.472870 2.001851 -0.547956\nv -0.477206 2.002058 -0.436013\nv -0.552465 2.002604 -0.337774\nv -0.529824 1.764836 -0.665854\nv -0.558083 1.785810 -0.336982\nv -0.481595 1.785038 -0.435974\nv -0.476611 1.782044 -0.549783\nv -0.575264 1.726160 -0.610798\nv -0.559015 1.728855 -0.391238\nv -0.509395 1.725958 -0.454256\nv -0.512102 1.728441 -0.541362\nv -0.518040 1.879974 -0.666937\nv -0.549681 1.891442 -0.320848\nv -0.460554 1.888467 -0.431932\nv -0.454966 1.886831 -0.551490\nv -0.260245 1.445097 -1.457740\nv -0.307781 1.559636 -1.457740\nv -0.261510 1.575691 -1.453295\nv -0.223802 1.469934 -1.453295\nv -0.287440 1.464814 -1.517856\nv -0.321196 1.548356 -1.517856\nv -0.288108 1.561550 -1.517856\nv -0.258720 1.481911 -1.517856\nv -0.638991 2.001446 -0.684446\nv -0.638991 2.003095 -0.319277\nv -0.638991 1.762395 -0.709437\nv -0.638991 1.786365 -0.317684\nv -0.638991 1.729109 -0.620459\nv -0.638991 1.892300 -0.299319\nv -0.834638 0.904814 -0.929860\nv -0.938253 0.933180 -0.815874\nv -0.916807 0.954467 -0.652881\nv -0.820991 0.953045 -0.554999\nv -0.638991 0.919201 -0.903920\nv -0.742941 2.083551 -0.532093\nv -0.707617 2.084272 -0.600159\nv -0.638991 2.095015 -0.596108\nv -0.638991 2.093040 -0.396087\nv -0.701596 2.082670 -0.389163\nv -0.741867 2.083113 -0.453781\nv -0.638991 1.124678 -0.917885\nv -0.808261 1.302467 -0.773412\nv -0.800812 1.147894 -0.904317\nv -0.804036 1.106473 -0.486302\nv -0.811476 1.300400 -0.417922\nv -0.638991 1.299839 -0.398296\nv -0.638991 1.105798 -0.468172\nv -0.910006 1.117977 -0.794793\nv -0.915508 1.298016 -0.667550\nv -0.917384 1.302727 -0.549518\nv -0.909160 1.111392 -0.612096\nv -0.638991 1.474255 -0.758732\nv -0.638991 1.665335 -0.678109\nv -0.760498 1.654938 -0.672776\nv -0.813214 1.479944 -0.751371\nv -0.816068 1.084195 -1.229529\nv -0.850421 0.919633 -1.216175\nv -0.701091 0.943045 -1.188755\nv -0.693415 1.065448 -1.188829\nv -0.823658 1.488783 -0.348329\nv -0.759192 1.670613 -0.338100\nv -0.638991 1.673967 -0.327351\nv -0.638991 1.487360 -0.332731\nv -0.990542 1.464814 -1.517856\nv -0.956786 1.548356 -1.517856\nv -0.989874 1.561550 -1.517856\nv -1.019262 1.481911 -1.517856\nv -0.933043 1.428782 -0.630823\nv -0.945919 1.496045 -0.466510\nv -0.879540 1.511264 -1.301700\nv -0.923968 1.553103 -1.364655\nv -0.975839 1.423708 -1.364655\nv -0.899220 1.431614 -1.301700\nv -0.895509 1.061204 -1.172356\nv -0.934309 0.941630 -1.130436\nv -0.853530 1.658931 -0.425840\nv -0.836730 1.693727 -0.579892\nv -0.967583 1.619461 -0.594039\nv -0.905743 1.656280 -0.683432\nv -1.010404 1.513443 -0.609222\nv -0.964074 1.446034 -0.694615\nv -0.866920 1.499014 -0.768428\nv -0.850200 1.612731 -0.738409\nv -0.986760 1.548828 -0.965012\nv -0.923472 1.570128 -0.981329\nv -1.024596 1.445488 -0.966796\nv -0.982565 1.402397 -0.982230\nv -0.897408 1.425274 -0.992796\nv -0.876686 1.529060 -0.989133\nv -0.982220 1.562294 -1.319691\nv -1.019964 1.456859 -1.319691\nv -0.702718 1.726160 -0.610798\nv -0.768588 1.725958 -0.454256\nv -0.718967 1.728855 -0.391238\nv -0.765879 1.728441 -0.541362\nv -0.719899 1.785810 -0.336982\nv -0.728300 1.891442 -0.320848\nv -0.796386 1.785038 -0.435974\nv -0.817428 1.888467 -0.431932\nv -0.801370 1.782044 -0.549783\nv -0.823017 1.886831 -0.551490\nv -0.748158 1.764836 -0.665854\nv -0.759942 1.879974 -0.666937\nv -0.805112 2.001851 -0.547956\nv -0.749872 2.001146 -0.651075\nv -0.800775 2.002058 -0.436013\nv -0.725516 2.002604 -0.337774\nv -0.700227 1.753137 -0.625951\nv -0.638991 1.753485 -0.643070\nv -0.698898 1.756407 -0.392703\nv -0.753853 1.755851 -0.454584\nv -0.754115 1.755384 -0.536222\nv -0.638991 1.757223 -0.383312\nv -0.638991 1.730211 -0.382648\nv -0.970200 1.559636 -1.457740\nv -1.017737 1.445097 -1.457740\nv -1.016472 1.575691 -1.453295\nv -1.054180 1.469934 -1.453295\nv -0.638991 1.879206 -0.711673\nv -0.460990 0.909106 -0.706034\nv -0.586883 2.106426 -0.494357\nv -0.552963 1.216119 -0.828092\nv -0.552963 1.203747 -0.434669\nv -0.355556 1.210181 -0.648701\nv -0.564736 1.575570 -0.722071\nv -0.549281 1.387846 -0.773293\nv -0.523736 0.999954 -1.277215\nv -0.556904 1.589696 -0.320751\nv -0.541448 1.392532 -0.361449\nv -0.544849 1.007531 -0.496414\nv -0.299912 1.514158 -1.535573\nv -0.336964 1.384869 -0.573612\nv -0.339328 1.013331 -0.702016\nv -0.370135 1.478594 -1.397178\nv -0.395018 1.009281 -0.567844\nv -0.400485 1.379669 -0.707041\nv -0.411245 1.214300 -0.768720\nv -0.387118 0.998135 -1.264253\nv -0.411245 1.205814 -0.511361\nv -0.388217 1.398179 -0.433942\nv -0.423807 1.586767 -0.372668\nv -0.522779 0.899449 -1.078197\nv -0.628434 1.009611 -1.078264\nv -0.545807 1.119774 -1.078331\nv -0.420702 1.116137 -1.063781\nv -0.341985 1.005974 -1.008026\nv -0.361434 0.899449 -1.022508\nv -0.379364 1.670424 -0.547874\nv -0.321437 1.582682 -0.488609\nv -0.300290 1.473235 -0.574960\nv -0.380601 1.463654 -0.703462\nv -0.458760 1.571316 -0.728209\nv -0.436376 1.668640 -0.658973\nv -0.324371 1.606068 -0.784932\nv -0.266002 1.531742 -0.760080\nv -0.268366 1.440733 -0.790212\nv -0.349411 1.431337 -0.838648\nv -0.411021 1.515933 -0.850937\nv -0.388346 1.599655 -0.827354\nv -0.326627 1.564610 -1.170499\nv -0.270791 1.498761 -1.158646\nv -0.269222 1.415054 -1.170499\nv -0.341074 1.398103 -1.182352\nv -0.401931 1.465231 -1.182352\nv -0.385916 1.548030 -1.182352\nv -0.595987 1.704514 -0.641642\nv -0.504440 1.704604 -0.391923\nv -0.470340 1.706234 -0.496067\nv -0.511662 1.705505 -0.602153\nv -0.596366 1.833136 -0.304304\nv -0.504088 1.831495 -0.371109\nv -0.454176 1.830161 -0.491736\nv -0.482343 1.820928 -0.615341\nv -0.522731 2.055130 -0.590848\nv -0.499938 2.054852 -0.492084\nv -0.531870 2.054485 -0.395548\nv -0.601331 2.054573 -0.344677\nv -0.594578 1.750819 -0.672061\nv -0.533689 1.765079 -0.399790\nv -0.495596 1.764864 -0.492088\nv -0.522816 1.757604 -0.599586\nv -0.605186 1.744695 -0.392993\nv -0.544882 1.743772 -0.425209\nv -0.518382 1.743487 -0.495581\nv -0.552103 1.743772 -0.578041\nv -0.594437 1.948768 -0.306967\nv -0.500108 1.947141 -0.372226\nv -0.450072 1.945809 -0.491733\nv -0.480096 1.943869 -0.611121\nv -0.304715 1.494254 -1.426513\nv -0.306284 1.581317 -1.414660\nv -0.251024 1.521516 -1.402807\nv -0.249454 1.434453 -1.414660\nv -0.302872 1.500527 -1.495711\nv -0.303473 1.587590 -1.495711\nv -0.247245 1.527789 -1.495711\nv -0.246644 1.440726 -1.495711\nv -0.588766 1.713320 -0.354375\nv -0.574880 1.812003 -0.705016\nv -0.592323 2.055872 -0.650091\nv -0.605322 1.765769 -0.352732\nv -0.612408 1.744694 -0.622346\nv -0.574687 1.942237 -0.692082\nv -0.816992 0.909106 -0.706034\nv -0.691099 2.106426 -0.494357\nv -0.725019 1.216119 -0.828092\nv -0.725019 1.203747 -0.434669\nv -0.922426 1.210181 -0.648701\nv -0.713246 1.575570 -0.722071\nv -0.728701 1.387846 -0.773293\nv -0.754245 0.999954 -1.277215\nv -0.721078 1.589696 -0.320751\nv -0.736534 1.392532 -0.361449\nv -0.733132 1.007531 -0.496414\nv -0.978070 1.514158 -1.535573\nv -0.941018 1.384869 -0.573612\nv -0.938654 1.013331 -0.702016\nv -0.907846 1.478594 -1.397178\nv -0.882964 1.009281 -0.567844\nv -0.877496 1.379669 -0.707041\nv -0.866736 1.214300 -0.768720\nv -0.890864 0.998135 -1.264253\nv -0.866736 1.205814 -0.511361\nv -0.889765 1.398179 -0.433942\nv -0.854175 1.586767 -0.372668\nv -0.755203 0.899449 -1.078197\nv -0.649547 1.009611 -1.078264\nv -0.732175 1.119774 -1.078331\nv -0.857279 1.116137 -1.063781\nv -0.935997 1.005974 -1.008026\nv -0.916548 0.899449 -1.022508\nv -0.898618 1.670424 -0.547874\nv -0.956545 1.582682 -0.488609\nv -0.977692 1.473235 -0.574960\nv -0.897380 1.463654 -0.703462\nv -0.819221 1.571316 -0.728209\nv -0.841605 1.668639 -0.658973\nv -0.953610 1.606068 -0.784932\nv -1.011980 1.531742 -0.760080\nv -1.009616 1.440733 -0.790212\nv -0.928571 1.431337 -0.838648\nv -0.866961 1.515933 -0.850937\nv -0.889636 1.599655 -0.827354\nv -0.951355 1.564610 -1.170499\nv -1.007190 1.498761 -1.158646\nv -1.008759 1.415054 -1.170499\nv -0.936907 1.398103 -1.182352\nv -0.876050 1.465231 -1.182352\nv -0.892066 1.548030 -1.182352\nv -0.681995 1.704514 -0.641642\nv -0.773542 1.704604 -0.391923\nv -0.807642 1.706234 -0.496067\nv -0.766321 1.705505 -0.602153\nv -0.681616 1.833136 -0.304304\nv -0.773894 1.831495 -0.371109\nv -0.823807 1.830161 -0.491736\nv -0.795640 1.820928 -0.615341\nv -0.755252 2.055130 -0.590848\nv -0.778044 2.054852 -0.492084\nv -0.746112 2.054485 -0.395548\nv -0.676651 2.054573 -0.344677\nv -0.683403 1.750819 -0.672061\nv -0.744292 1.765079 -0.399790\nv -0.782386 1.764864 -0.492088\nv -0.755166 1.757604 -0.599586\nv -0.672796 1.744695 -0.392993\nv -0.733100 1.743772 -0.425209\nv -0.759600 1.743487 -0.495581\nv -0.725879 1.743772 -0.578041\nv -0.683545 1.948768 -0.306967\nv -0.777874 1.947141 -0.372226\nv -0.827910 1.945809 -0.491733\nv -0.797886 1.943870 -0.611121\nv -0.973267 1.494254 -1.426513\nv -0.971698 1.581317 -1.414660\nv -1.026958 1.521516 -1.402807\nv -1.028527 1.434453 -1.414660\nv -0.975110 1.500527 -1.495711\nv -0.974509 1.587590 -1.495711\nv -1.030737 1.527789 -1.495711\nv -1.031338 1.440726 -1.495711\nv -0.689216 1.713320 -0.354375\nv -0.703102 1.812003 -0.705016\nv -0.685660 2.055872 -0.650091\nv -0.672660 1.765769 -0.352732\nv -0.665574 1.744694 -0.622346\nv -0.703296 1.942237 -0.692082\nv -0.358229 0.935163 -0.710428\nv -0.518128 0.933712 -0.561624\nv -0.638991 0.909106 -0.703335\nv -0.512609 0.906692 -0.885681\nv -0.580418 1.659148 -0.678109\nv -0.576654 1.673686 -0.327351\nv -0.427073 1.685608 -0.507690\nv -0.501114 1.572734 -0.723606\nv -0.460321 1.007969 -0.514272\nv -0.638991 1.216119 -0.828092\nv -0.467227 1.388592 -0.756730\nv -0.474519 1.215665 -0.813249\nv -0.442511 0.999500 -1.273974\nv -0.474519 1.204263 -0.453842\nv -0.454369 1.393944 -0.379572\nv -0.482587 1.588803 -0.333730\nv -0.553003 1.477298 -0.758732\nv -0.550342 1.302395 -0.788748\nv -0.552874 1.148690 -0.916296\nv -0.541255 1.487321 -0.332731\nv -0.548384 1.299839 -0.398296\nv -0.552634 1.105798 -0.468172\nv -0.321900 1.447993 -0.555655\nv -0.347508 1.300166 -0.610679\nv -0.354899 1.114656 -0.681279\nv -0.391600 0.906692 -0.843914\nv -0.399996 0.934150 -0.615425\nv -0.474822 1.684112 -0.630665\nv -0.469874 1.662516 -0.370345\nv -0.393535 1.439097 -0.701203\nv -0.405155 1.299896 -0.727403\nv -0.417010 1.145507 -0.868383\nv -0.410589 1.108502 -0.540690\nv -0.402088 1.302084 -0.476797\nv -0.389001 1.493330 -0.395123\nv -0.334418 1.487203 -1.404512\nv -0.353251 1.011168 -0.637102\nv -0.355063 1.374092 -0.640557\nv -0.369478 1.212361 -0.709029\nv -0.339992 1.012642 -0.809889\nv -0.369478 1.207939 -0.584042\nv -0.347559 1.397676 -0.505107\nv -0.372710 1.584442 -0.427611\nv -0.517740 0.919746 -1.227427\nv -0.596982 1.002368 -1.227477\nv -0.535011 1.084991 -1.227527\nv -0.413634 1.081807 -1.235533\nv -0.354596 0.999186 -1.193717\nv -0.362576 0.919292 -1.182420\nv -0.429615 0.899449 -1.064275\nv -0.602021 0.926990 -1.078214\nv -0.607778 1.092234 -1.078314\nv -0.473217 1.118865 -1.074693\nv -0.379784 1.086777 -1.042568\nv -0.328727 0.926080 -0.991042\nv -0.340652 1.648103 -0.634371\nv -0.281898 1.569209 -0.588489\nv -0.279867 1.468261 -0.647741\nv -0.364841 1.459136 -0.740412\nv -0.430965 1.557117 -0.761960\nv -0.404745 1.645137 -0.715172\nv -0.402582 1.679685 -0.614423\nv -0.355918 1.638780 -0.494283\nv -0.296151 1.521158 -0.519338\nv -0.329794 1.450280 -0.641120\nv -0.430871 1.506339 -0.739865\nv -0.461513 1.633709 -0.693058\nv -0.325202 1.574003 -1.333026\nv -0.270282 1.512691 -1.315246\nv -0.268229 1.426466 -1.333026\nv -0.351804 1.421329 -1.343471\nv -0.397447 1.470559 -1.343471\nv -0.385147 1.533095 -1.343471\nv -0.357800 1.611016 -0.810872\nv -0.292345 1.580936 -0.763385\nv -0.254842 1.478379 -0.770521\nv -0.301559 1.423491 -0.814479\nv -0.392404 1.462680 -0.853780\nv -0.408567 1.568967 -0.839126\nv -0.357617 1.559852 -1.179389\nv -0.296501 1.548761 -1.161610\nv -0.258649 1.444297 -1.161610\nv -0.298151 1.402500 -1.179389\nv -0.381249 1.414726 -1.182352\nv -0.403396 1.519654 -1.182352\nv -0.322403 1.569757 -0.972621\nv -0.265162 1.498766 -0.963445\nv -0.265060 1.414911 -0.973941\nv -0.339694 1.403309 -0.989013\nv -0.400739 1.475919 -0.992086\nv -0.383347 1.558512 -0.986190\nv -0.601649 2.092727 -0.396227\nv -0.560103 2.092829 -0.429600\nv -0.542840 2.093356 -0.492829\nv -0.557818 2.093815 -0.558055\nv -0.553403 1.700040 -0.631770\nv -0.542571 1.710821 -0.363762\nv -0.478865 1.700973 -0.436733\nv -0.480670 1.710906 -0.555886\nv -0.519690 1.814079 -0.670298\nv -0.551983 1.832572 -0.323358\nv -0.466783 1.830493 -0.432315\nv -0.461087 1.827854 -0.551902\nv -0.608404 1.753186 -0.641487\nv -0.547897 1.756054 -0.418732\nv -0.516184 1.755784 -0.493136\nv -0.546983 1.754186 -0.585679\nv -0.493023 2.001455 -0.604586\nv -0.466305 2.001981 -0.491820\nv -0.509450 2.002290 -0.380368\nv -0.595679 2.002930 -0.321119\nv -0.580285 1.762218 -0.698445\nv -0.514880 1.785380 -0.380033\nv -0.470349 1.784925 -0.491825\nv -0.495851 1.773396 -0.612046\nv -0.551591 2.055454 -0.631167\nv -0.505570 2.054923 -0.540648\nv -0.507987 2.054760 -0.444077\nv -0.565136 2.054323 -0.358435\nv -0.554431 1.752277 -0.647609\nv -0.570580 1.765358 -0.365723\nv -0.505184 1.764917 -0.445168\nv -0.502337 1.763050 -0.542807\nv -0.584040 1.744145 -0.611270\nv -0.573207 1.744145 -0.401047\nv -0.525007 1.743558 -0.458910\nv -0.526812 1.743558 -0.535274\nv -0.597017 1.729892 -0.382648\nv -0.528958 1.727023 -0.417009\nv -0.502873 1.727221 -0.497274\nv -0.539791 1.727249 -0.581818\nv -0.518887 1.942491 -0.661764\nv -0.548578 1.948215 -0.325449\nv -0.462712 1.946141 -0.432564\nv -0.457447 1.945325 -0.550872\nv -0.595402 1.892149 -0.301576\nv -0.499701 1.889917 -0.369635\nv -0.447331 1.887985 -0.491735\nv -0.478390 1.883365 -0.613643\nv -0.290906 1.498959 -1.458480\nv -0.291749 1.586022 -1.455517\nv -0.235763 1.526220 -1.452554\nv -0.234920 1.439157 -1.455517\nv -0.274235 1.440393 -1.423550\nv -0.321772 1.554931 -1.423550\nv -0.276589 1.570987 -1.405771\nv -0.238881 1.465229 -1.405771\nv -0.314559 1.503935 -1.525607\nv -0.315010 1.569232 -1.525607\nv -0.272839 1.524381 -1.525607\nv -0.272388 1.459084 -1.525607\nv -0.272150 1.446665 -1.495711\nv -0.319687 1.561204 -1.495711\nv -0.273052 1.577260 -1.495711\nv -0.235344 1.471502 -1.495711\nv -0.599396 2.094701 -0.594960\nv -0.609284 1.756924 -0.383618\nv -0.579480 2.001273 -0.676785\nv -0.599087 1.786188 -0.319804\nv -0.607849 1.727690 -0.620459\nv -0.574350 1.879051 -0.700114\nv -0.638991 1.709236 -0.641642\nv -0.638991 1.833289 -0.301951\nv -0.638991 1.766008 -0.351506\nv -0.638991 1.942392 -0.702160\nv -0.638991 1.948915 -0.304799\nv -0.886382 0.906692 -0.843914\nv -0.919752 0.935163 -0.710428\nv -0.877985 0.934150 -0.615425\nv -0.759854 0.933712 -0.561624\nv -0.765372 0.906692 -0.885681\nv -0.720164 2.093815 -0.558055\nv -0.678586 2.094701 -0.594960\nv -0.638991 2.106827 -0.494837\nv -0.676333 2.092727 -0.396227\nv -0.717879 2.092829 -0.429600\nv -0.735142 2.093356 -0.492829\nv -0.727640 1.302395 -0.788748\nv -0.803463 1.215665 -0.813249\nv -0.725107 1.148690 -0.916296\nv -0.803463 1.204263 -0.453842\nv -0.729598 1.299839 -0.398296\nv -0.638991 1.203747 -0.434669\nv -0.725347 1.105798 -0.468172\nv -0.908503 1.212361 -0.709029\nv -0.930475 1.300166 -0.610679\nv -0.908503 1.207939 -0.584042\nv -0.923082 1.114656 -0.681279\nv -0.638991 1.577345 -0.722071\nv -0.697564 1.659148 -0.678109\nv -0.776868 1.572734 -0.723606\nv -0.724978 1.477298 -0.758732\nv -0.638991 1.385057 -0.773293\nv -0.810755 1.388592 -0.756730\nv -0.835471 0.999500 -1.273974\nv -0.760242 0.919746 -1.227427\nv -0.681000 1.002368 -1.227477\nv -0.742971 1.084991 -1.227527\nv -0.795395 1.588803 -0.333730\nv -0.701328 1.673686 -0.327351\nv -0.638991 1.589856 -0.320751\nv -0.736726 1.487321 -0.332731\nv -0.823613 1.393944 -0.379572\nv -0.638991 1.392532 -0.361449\nv -0.638991 1.007531 -0.496414\nv -0.817662 1.007969 -0.514272\nv -0.963423 1.503935 -1.525607\nv -0.962973 1.569232 -1.525607\nv -1.005144 1.524381 -1.525607\nv -1.005594 1.459084 -1.525607\nv -0.922919 1.374092 -0.640557\nv -0.956082 1.447993 -0.555655\nv -0.930423 1.397675 -0.505107\nv -0.924731 1.011168 -0.637102\nv -0.937989 1.012642 -0.809889\nv -0.892834 1.533095 -1.343471\nv -0.943564 1.487203 -1.404512\nv -0.926178 1.421329 -1.343471\nv -0.880535 1.470559 -1.343471\nv -0.867393 1.108502 -0.540690\nv -0.884447 1.439097 -0.701203\nv -0.872827 1.299896 -0.727403\nv -0.860972 1.145507 -0.868383\nv -0.864348 1.081807 -1.235533\nv -0.923387 0.999186 -1.193717\nv -0.915406 0.919292 -1.182420\nv -0.875894 1.302084 -0.476797\nv -0.888981 1.493330 -0.395123\nv -0.905272 1.584442 -0.427611\nv -0.808108 1.662516 -0.370345\nv -0.675961 0.926990 -1.078214\nv -0.848368 0.899449 -1.064275\nv -0.638991 1.014441 -0.978789\nv -0.670204 1.092234 -1.078314\nv -0.804765 1.118865 -1.074693\nv -0.898198 1.086777 -1.042568\nv -0.949256 0.926080 -0.991042\nv -0.850909 1.685608 -0.507690\nv -0.922064 1.638780 -0.494283\nv -0.937330 1.648103 -0.634371\nv -0.875400 1.679685 -0.614423\nv -0.981831 1.521158 -0.519338\nv -0.996083 1.569209 -0.588489\nv -0.948188 1.450280 -0.641120\nv -0.998115 1.468261 -0.647741\nv -0.847111 1.506339 -0.739865\nv -0.913141 1.459136 -0.740412\nv -0.816468 1.633709 -0.693058\nv -0.847017 1.557117 -0.761960\nv -0.803160 1.684112 -0.630665\nv -0.873237 1.645137 -0.715172\nv -0.985637 1.580936 -0.763385\nv -0.955579 1.569757 -0.972621\nv -0.920183 1.611016 -0.810872\nv -1.023139 1.478379 -0.770521\nv -1.012820 1.498766 -0.963445\nv -0.976422 1.423491 -0.814479\nv -1.012922 1.414911 -0.973941\nv -0.885578 1.462680 -0.853780\nv -0.938288 1.403309 -0.989013\nv -0.869415 1.568967 -0.839126\nv -0.877242 1.475919 -0.992086\nv -0.894634 1.558512 -0.986190\nv -0.981481 1.548761 -1.161610\nv -0.952780 1.574003 -1.333026\nv -0.920364 1.559852 -1.179389\nv -1.019333 1.444297 -1.161610\nv -1.007700 1.512691 -1.315246\nv -0.979831 1.402500 -1.179389\nv -1.009753 1.426466 -1.333026\nv -0.896733 1.414726 -1.182352\nv -0.874586 1.519654 -1.182352\nv -0.670133 1.727690 -0.620459\nv -0.724578 1.700040 -0.631770\nv -0.799117 1.700973 -0.436733\nv -0.749024 1.727023 -0.417009\nv -0.735411 1.710821 -0.363762\nv -0.797311 1.710906 -0.555886\nv -0.775109 1.727221 -0.497274\nv -0.738191 1.727249 -0.581818\nv -0.725998 1.832572 -0.323358\nv -0.682580 1.892149 -0.301576\nv -0.678895 1.786188 -0.319804\nv -0.811198 1.830493 -0.432315\nv -0.778280 1.889917 -0.369635\nv -0.763102 1.785380 -0.380033\nv -0.816894 1.827854 -0.551902\nv -0.830651 1.887985 -0.491735\nv -0.807633 1.784925 -0.491825\nv -0.758292 1.814079 -0.670298\nv -0.799592 1.883365 -0.613643\nv -0.782130 1.773396 -0.612046\nv -0.772412 2.054923 -0.540648\nv -0.784959 2.001455 -0.604586\nv -0.726391 2.055454 -0.631167\nv -0.769995 2.054760 -0.444077\nv -0.811677 2.001981 -0.491820\nv -0.712846 2.054322 -0.358435\nv -0.768531 2.002290 -0.380368\nv -0.638991 2.054800 -0.343637\nv -0.682303 2.002930 -0.321119\nv -0.669578 1.753186 -0.641487\nv -0.638991 1.751058 -0.678395\nv -0.697696 1.762218 -0.698445\nv -0.723550 1.752278 -0.647609\nv -0.730085 1.756054 -0.418732\nv -0.772798 1.764917 -0.445168\nv -0.707403 1.765358 -0.365723\nv -0.761798 1.755784 -0.493136\nv -0.775645 1.763050 -0.542807\nv -0.730998 1.754186 -0.585679\nv -0.704774 1.744145 -0.401047\nv -0.668698 1.756924 -0.383618\nv -0.638991 1.745015 -0.392993\nv -0.680965 1.729892 -0.382648\nv -0.752975 1.743558 -0.458910\nv -0.751170 1.743558 -0.535274\nv -0.693942 1.744145 -0.611270\nv -0.729403 1.948215 -0.325449\nv -0.815270 1.946141 -0.432564\nv -0.820535 1.945325 -0.550872\nv -0.759095 1.942491 -0.661764\nv -0.956210 1.554931 -1.423550\nv -0.987076 1.498959 -1.458480\nv -1.003747 1.440393 -1.423550\nv -1.001393 1.570987 -1.405771\nv -0.986233 1.586022 -1.455517\nv -1.039101 1.465229 -1.405771\nv -1.042219 1.526220 -1.452554\nv -1.043062 1.439157 -1.455517\nv -0.958295 1.561204 -1.495711\nv -1.005831 1.446665 -1.495711\nv -1.004930 1.577260 -1.495711\nv -1.042637 1.471502 -1.495711\nv -0.638991 1.713640 -0.354375\nv -0.703632 1.879051 -0.700114\nv -0.638991 1.812159 -0.717315\nv -0.698502 2.001273 -0.676785\nv -0.638991 2.056104 -0.654203\nv -0.638991 1.745013 -0.622346\nv -0.379608 0.713134 -1.209311\nv -0.904851 0.713134 -1.209311\nv -0.379608 0.874533 -1.195191\nv -0.904851 0.874533 -1.195191\nv -0.379608 0.815478 -0.520198\nv -0.904851 0.815478 -0.520198\nv -0.904851 0.640881 -0.383468\nv -0.379608 0.640881 -0.383468\nv -0.379608 0.802280 -0.369347\nv -0.904851 0.802280 -0.369347\nv -0.379608 1.436212 -0.283283\nv -0.904851 1.436212 -0.283283\nv -0.904851 1.423015 -0.132433\nv -0.379608 1.423015 -0.132433\nv -0.379608 1.869475 -0.245377\nv -0.904851 1.869475 -0.245377\nv -0.904851 1.856278 -0.094527\nv -0.379608 1.856278 -0.094527\nv -1.010869 0.713134 -1.209311\nv -1.010869 0.654079 -0.534319\nv -1.010869 0.640881 -0.383468\nv -0.972912 0.802280 -0.369347\nv -0.972912 1.423015 -0.132433\nv -0.972912 1.897398 -0.129031\nv -0.972912 1.907288 -0.242069\nv -1.010869 1.436212 -0.283283\nv -1.010869 0.815478 -0.520198\nv -1.010869 0.874533 -1.195191\nv -0.273590 0.654079 -0.534319\nv -0.273590 0.713134 -1.209311\nv -0.273590 0.874533 -1.195191\nv -0.273590 0.815478 -0.520198\nv -0.273590 1.436212 -0.283283\nv -0.311547 1.907288 -0.242069\nv -0.311547 1.856278 -0.094527\nv -0.311547 1.423015 -0.132433\nv -0.311547 0.802280 -0.369347\nv -0.273590 0.640881 -0.383468\nv -0.904851 0.889062 -0.566276\nv -0.904851 0.961022 -1.187624\nv -1.010869 0.961022 -1.187624\nv -1.010869 0.847871 -0.540482\nv -1.010869 1.447090 -0.330606\nv -0.972912 1.911546 -0.290747\nv -0.904851 1.877036 -0.331798\nv -0.904851 1.455662 -0.367896\nv -0.379608 0.961022 -1.187624\nv -0.379608 0.889062 -0.566276\nv -0.379608 1.455662 -0.367896\nv -0.341651 1.911546 -0.290747\nv -0.273590 1.873729 -0.293986\nv -0.273590 1.447090 -0.330606\nv -0.273590 0.847871 -0.540482\nv -0.273590 0.961022 -1.187624\nv -0.379608 1.903980 -0.204257\nv -0.341651 1.907288 -0.242069\nv -0.942807 1.907288 -0.242069\nv -0.904851 1.903980 -0.204257\nv -0.904851 1.897398 -0.129031\nv -0.379608 1.897398 -0.129031\nv -1.010869 0.805720 -0.408662\nv -1.010869 0.764468 -0.372655\nv -1.010869 1.426387 -0.170981\nv -1.010869 1.859586 -0.132339\nv -0.972912 1.856278 -0.094527\nv -1.010869 1.869475 -0.245377\nv -0.273590 1.869475 -0.245377\nv -0.273590 1.859586 -0.132339\nv -0.311547 1.897398 -0.129031\nv -0.273590 1.426387 -0.170981\nv -0.273590 0.764468 -0.372655\nv -0.273590 0.805720 -0.408662\nv -0.972912 0.889062 -0.566276\nv -1.010869 0.893428 -0.603980\nv -0.972912 1.455662 -0.367896\nv -0.972912 1.877037 -0.331798\nv -1.010869 1.873729 -0.293986\nv -0.942807 1.911546 -0.290747\nv -0.379608 1.877036 -0.331798\nv -0.311547 1.877037 -0.331798\nv -0.311547 1.911546 -0.290747\nv -0.311547 1.455662 -0.367896\nv -0.273590 0.893428 -0.603980\nv -0.311547 0.889062 -0.566276\nv -0.632123 0.972400 -1.293894\nv -0.632123 1.005919 -1.257315\nv -0.632123 1.055485 -1.255151\nv -0.632123 1.092064 -1.288669\nv -0.632123 1.094228 -1.338236\nv -0.632123 1.060710 -1.374815\nv -0.632123 1.011143 -1.376979\nv -0.632123 0.974564 -1.343460\nv -0.786824 1.001316 -1.304418\nv -0.779558 1.033476 -1.267345\nv -0.762017 1.079764 -1.263988\nv -0.744475 1.113065 -1.296313\nv -0.737210 1.113871 -1.345385\nv -0.744475 1.081710 -1.382458\nv -0.762017 1.035423 -1.385816\nv -0.779558 1.002122 -1.353491\nv -0.917973 1.083663 -1.334390\nv -0.904548 1.111956 -1.295909\nv -0.872136 1.148906 -1.289153\nv -0.839724 1.172869 -1.318080\nv -0.826298 1.169808 -1.365744\nv -0.839724 1.141515 -1.404225\nv -0.872136 1.104564 -1.410982\nv -0.904548 1.080601 -1.382055\nv -1.005604 1.206903 -1.379246\nv -0.988063 1.229407 -1.338658\nv -0.945715 1.252384 -1.326816\nv -0.903367 1.262373 -1.350657\nv -0.885826 1.253524 -1.396214\nv -0.903367 1.231019 -1.436803\nv -0.945715 1.208042 -1.448645\nv -0.988063 1.198053 -1.424803\nv -1.036376 1.352274 -1.432157\nv -1.017390 1.367951 -1.389084\nv -0.971552 1.374445 -1.371242\nv -0.925716 1.367951 -1.389084\nv -0.906729 1.352274 -1.432157\nv -0.925716 1.336597 -1.475230\nv -0.971552 1.330103 -1.493071\nv -1.017390 1.336597 -1.475230\nv -1.005604 1.497645 -1.485067\nv -0.988063 1.506495 -1.439509\nv -0.945715 1.496506 -1.415669\nv -0.903367 1.473529 -1.427511\nv -0.885826 1.451024 -1.468099\nv -0.903367 1.442174 -1.513656\nv -0.945715 1.452164 -1.537497\nv -0.988063 1.475141 -1.525655\nv -0.917973 1.620885 -1.529923\nv -0.904548 1.623947 -1.482258\nv -0.872136 1.599984 -1.453332\nv -0.839724 1.563033 -1.460088\nv -0.826298 1.534740 -1.498569\nv -0.839724 1.531678 -1.546233\nv -0.872136 1.555642 -1.575160\nv -0.904548 1.592592 -1.568404\nv -0.786824 1.703232 -1.559895\nv -0.779558 1.702426 -1.510822\nv -0.762017 1.669125 -1.478497\nv -0.744475 1.622838 -1.481855\nv -0.737210 1.590677 -1.518928\nv -0.744475 1.591483 -1.568000\nv -0.762017 1.624783 -1.600326\nv -0.779558 1.671071 -1.596968\nv -0.632123 1.732148 -1.570419\nv -0.632123 1.729984 -1.520853\nv -0.632123 1.693405 -1.487334\nv -0.632123 1.643838 -1.489498\nv -0.632123 1.610320 -1.526077\nv -0.632123 1.612484 -1.575644\nv -0.632123 1.649063 -1.609163\nv -0.632123 1.698629 -1.606998\nv -0.477421 1.703232 -1.559895\nv -0.484688 1.702426 -1.510822\nv -0.502228 1.669125 -1.478497\nv -0.519769 1.622838 -1.481855\nv -0.527035 1.590677 -1.518928\nv -0.519769 1.591483 -1.568000\nv -0.502228 1.624783 -1.600326\nv -0.484688 1.671071 -1.596968\nv -0.346272 1.620885 -1.529923\nv -0.359697 1.623947 -1.482258\nv -0.392110 1.599984 -1.453332\nv -0.424521 1.563033 -1.460088\nv -0.437946 1.534740 -1.498569\nv -0.424521 1.531678 -1.546233\nv -0.392110 1.555642 -1.575160\nv -0.359697 1.592592 -1.568404\nv -0.258641 1.497645 -1.485067\nv -0.276183 1.506495 -1.439509\nv -0.318530 1.496506 -1.415669\nv -0.360878 1.473529 -1.427511\nv -0.378419 1.451024 -1.468099\nv -0.360878 1.442174 -1.513656\nv -0.318530 1.452164 -1.537497\nv -0.276183 1.475141 -1.525655\nv -0.227869 1.352274 -1.432157\nv -0.246855 1.367951 -1.389084\nv -0.292693 1.374445 -1.371242\nv -0.338530 1.367951 -1.389084\nv -0.357516 1.352274 -1.432157\nv -0.338530 1.336597 -1.475230\nv -0.292693 1.330103 -1.493071\nv -0.246855 1.336597 -1.475230\nv -0.258641 1.206903 -1.379246\nv -0.276183 1.229407 -1.338658\nv -0.318530 1.252384 -1.326816\nv -0.360878 1.262373 -1.350657\nv -0.378419 1.253524 -1.396214\nv -0.360878 1.231019 -1.436803\nv -0.318530 1.208042 -1.448645\nv -0.276183 1.198053 -1.424803\nv -0.346272 1.083663 -1.334390\nv -0.359698 1.111956 -1.295909\nv -0.392110 1.148906 -1.289153\nv -0.424522 1.172869 -1.318080\nv -0.437946 1.169808 -1.365744\nv -0.424522 1.141515 -1.404225\nv -0.392110 1.104564 -1.410982\nv -0.359698 1.080601 -1.382055\nv -0.477421 1.001316 -1.304418\nv -0.484688 1.033476 -1.267345\nv -0.502228 1.079764 -1.263988\nv -0.519769 1.113065 -1.296313\nv -0.527035 1.113871 -1.345385\nv -0.519769 1.081710 -1.382458\nv -0.502228 1.035423 -1.385816\nv -0.484688 1.002122 -1.353491\nv 0.745829 0.123110 -4.500280\nv 1.558454 0.123110 -4.174855\nv 0.000000 0.123110 -4.061416\nv 0.745829 0.123110 -4.152602\nv 1.643894 0.244304 -4.048578\nv 0.000000 0.123110 -2.535697\nv 0.654642 0.123110 -2.535697\nv 1.664362 0.121834 -2.433731\nv 0.000000 0.076038 0.836260\nv 0.745829 0.077311 0.745083\nv 1.628291 0.166501 0.847717\nv 0.000000 0.186064 2.364636\nv 0.654642 0.186064 2.364636\nv 1.531600 0.186064 2.455822\nv 0.745829 0.262584 3.005141\nv 1.491657 0.186064 2.499304\nv 0.837014 0.774504 -3.999007\nv 1.592141 0.931298 -3.866776\nv 1.630108 0.869246 -2.652233\nv 0.745828 0.895334 -2.747944\nv 0.837014 0.727890 0.918814\nv 1.655835 0.864035 1.009189\nv 1.625103 0.847924 2.250129\nv 0.745828 0.869278 2.153893\nv 0.745829 0.214296 -3.251163\nv 1.673585 1.107053 -3.309518\nv 0.836307 1.223983 -3.309518\nv 0.745829 0.246034 1.554484\nv 1.627501 1.176182 1.548452\nv 0.837014 1.176182 1.548452\nv 0.836948 0.216592 -4.048750\nv 0.745829 0.214296 -3.960975\nv 0.654642 0.123110 -4.061416\nv 1.579139 0.129950 -4.149961\nv 0.745829 0.214296 -2.642143\nv 0.837014 0.213009 -2.549894\nv 0.745829 0.121837 -2.444513\nv 1.661227 0.213005 -2.540242\nv 0.837014 0.166501 0.847717\nv 0.745829 0.179239 0.941244\nv 0.654642 0.076038 0.836260\nv 1.625021 0.077315 0.745083\nv 0.745829 0.273135 2.257031\nv 0.837014 0.275915 2.349092\nv 0.745829 0.196881 2.455178\nv 1.616691 0.275915 2.349092\nv 0.836056 0.894761 -3.899934\nv 0.745828 0.803621 -3.903922\nv 1.588120 0.813691 -3.967386\nv 1.632455 0.979610 -2.756444\nv 0.836012 0.982112 -2.753962\nv 0.837008 0.869237 -2.650487\nv 0.837014 0.864035 1.009189\nv 0.745828 0.762071 1.015057\nv 1.655584 0.727890 0.918814\nv 1.626559 0.967704 2.148448\nv 0.837014 0.967704 2.148448\nv 0.837014 0.847924 2.250129\nv 0.654642 0.123110 -3.245959\nv 0.745828 1.135214 -3.303730\nv 0.654642 0.154587 1.555077\nv 0.745828 1.075490 1.549106\nv 0.000000 0.123110 -4.500280\nv -0.745829 0.123110 -4.500280\nv -0.745829 0.123110 -4.152602\nv -0.654642 0.123110 -4.061416\nv -1.558454 0.123110 -4.174855\nv -1.579139 0.129949 -4.149961\nv 0.000000 0.123110 -3.245959\nv -0.654642 0.123110 -3.245959\nv -0.654642 0.123110 -2.535697\nv -0.836012 0.982111 -2.753962\nv -0.836308 1.223983 -3.309518\nv -1.673586 1.107052 -3.309518\nv -1.632455 0.979609 -2.756444\nv -0.745829 0.121837 -2.444513\nv -0.745829 0.077310 0.745083\nv -0.654642 0.076038 0.836260\nv -1.664362 0.121833 -2.433731\nv -1.625021 0.077314 0.745083\nv 0.000000 0.154587 1.555077\nv -0.654642 0.154587 1.555077\nv -0.654642 0.186064 2.364636\nv -0.837014 0.967703 2.148448\nv -0.837014 1.176182 1.548452\nv -1.627502 1.176181 1.548452\nv -1.626560 0.967703 2.148448\nv 0.000000 0.262583 3.005141\nv -0.745829 0.196881 2.455178\nv -0.745829 0.262583 3.005141\nv -1.531600 0.186064 2.455822\nv -1.491657 0.186064 2.499304\nv -0.836948 0.216592 -4.048750\nv -1.643894 0.244303 -4.048578\nv -1.588120 0.813690 -3.967386\nv -0.837014 0.774504 -3.999007\nv -1.661227 0.213005 -2.540242\nv -0.837014 0.213009 -2.549894\nv -0.837008 0.869237 -2.650487\nv -1.630108 0.869246 -2.652233\nv -0.745829 0.214296 -2.642143\nv -0.745829 0.214296 -3.251163\nv -0.745829 1.135214 -3.303730\nv -0.745829 0.895333 -2.747944\nv -0.837014 0.166501 0.847717\nv -1.628291 0.166501 0.847717\nv -1.655584 0.727890 0.918814\nv -0.837014 0.727890 0.918814\nv -1.616691 0.275915 2.349092\nv -0.837014 0.275915 2.349092\nv -0.837014 0.847923 2.250129\nv -1.625103 0.847923 2.250129\nv -0.745829 0.273135 2.257031\nv -0.745829 0.246034 1.554484\nv -0.745829 1.075490 1.549106\nv -0.745829 0.869278 2.153893\nv -0.836057 0.894761 -3.899934\nv -1.592142 0.931298 -3.866776\nv -0.745829 0.214296 -3.960975\nv -0.745829 0.803621 -3.903922\nv -0.837014 0.864035 1.009189\nv -1.655835 0.864035 1.009189\nv -0.745829 0.179239 0.941244\nv -0.745829 0.762071 1.015057\nv -0.329927 0.717267 3.084439\nv -0.329927 0.387340 3.084439\nv 0.329928 0.387340 3.084439\nv 0.329928 0.717267 3.084439\nv 0.329927 0.588040 -4.752471\nv 0.329927 0.258113 -4.752471\nv -0.329928 0.258113 -4.752471\nv -0.329928 0.588040 -4.752471\nv 0.000000 0.121837 -2.444513\nv 0.000000 0.077310 0.745083\nv 0.000000 0.196881 2.455178\nv 0.000000 0.123110 -4.152602\nv 1.515767 1.116989 2.479697\nv 1.412098 1.174811 2.612533\nv 1.303503 1.194168 2.718198\nv 1.536397 0.589925 2.533818\nv 1.534179 0.392614 2.534129\nv 1.521304 0.225536 2.529991\nv 1.295069 1.686903 2.180676\nv 1.267285 1.672608 2.437321\nv 1.225425 1.658707 2.620210\nv 1.338420 1.653150 1.850134\nv 1.327837 1.665126 2.000196\nv 1.411427 1.477942 -0.806746\nv 1.409643 1.502387 -0.336717\nv 1.380133 1.420096 -2.587785\nv 1.371572 1.431425 -2.344862\nv 1.364313 1.459920 -2.045561\nv 1.383845 1.276042 -3.684131\nv 1.391279 1.322500 -3.503012\nv 1.396127 1.355853 -3.321762\nv 1.407408 1.459293 -1.406276\nv 1.410974 1.467996 -1.095633\nv 1.392384 1.395510 -2.963620\nv 1.387091 1.408658 -2.786458\nv 1.379900 1.553845 0.510329\nv 1.365971 1.563732 0.740921\nv 1.355025 1.573519 0.959264\nv 1.404195 1.527994 0.103957\nv 1.393654 1.541427 0.304784\nv 1.398695 1.451252 -1.717329\nv 1.348637 1.599464 1.271860\nv 1.347372 1.614371 1.415205\nv 1.345894 1.628858 1.558812\nv 1.395946 1.379049 -3.142009\nv 1.366552 1.153495 -4.019666\nv 1.376265 1.213532 -3.863489\nv 1.350217 1.585637 1.128061\nv 1.343675 1.641423 1.703397\nv 1.515767 1.116989 2.479697\nv 1.493292 1.081614 2.594959\nv 1.541404 0.862919 2.512503\nv 1.538839 0.739043 2.527920\nv 1.543990 0.984506 2.483637\nv 0.522388 1.684611 2.902563\nv 0.261492 1.681440 2.894496\nv 0.000000 1.681440 2.898508\nv 1.403221 0.166413 2.532502\nv 1.486887 0.167121 2.522538\nv 1.672130 0.197071 -4.072058\nv 1.699734 0.201620 -4.014428\nv 1.692547 0.201519 -3.985838\nv 1.657966 0.116299 -4.074936\nv 1.602598 0.116302 -4.151668\nv 1.526338 0.116302 -4.240894\nv 1.069070 0.116302 -4.640778\nv 1.232676 0.116302 -4.532639\nv 1.371961 0.116302 -4.421684\nv 0.742617 0.116302 -4.790075\nv 0.908418 0.116302 -4.726347\nv 0.377079 0.116302 -4.860282\nv 0.563569 0.116302 -4.832689\nv 0.000000 0.116302 -4.886048\nv 0.188949 0.116302 -4.878948\nv 0.377079 0.178151 -4.868793\nv 0.188949 0.178151 -4.887277\nv 0.000000 0.178151 -4.894287\nv 0.735012 0.209495 -4.694183\nv 0.742957 0.178151 -4.798924\nv 0.563569 0.178151 -4.841381\nv 0.904940 0.214099 -4.633203\nv 1.066617 0.209103 -4.545908\nv 1.071791 0.178151 -4.649825\nv 0.909778 0.178151 -4.735307\nv 1.376722 0.178151 -4.430565\nv 1.236756 0.178151 -4.541773\nv 1.529096 0.178151 -4.247603\nv 1.063661 1.223843 -4.115712\nv 1.229040 1.198300 -4.064003\nv 1.366552 1.153495 -4.019666\nv 0.717053 1.259933 -4.228269\nv 0.896711 1.238315 -4.168387\nv 1.340358 1.091584 -4.200935\nv 1.352716 1.114453 -4.131237\nv 1.463735 0.178151 -4.335615\nv 1.514091 0.676665 -4.224150\nv 1.488454 0.804824 -4.207838\nv 1.451283 0.919212 -4.199341\nv 1.682871 0.116289 -4.018241\nv 1.682657 0.124280 -3.992747\nv 1.496584 0.208876 -4.210937\nv 1.459653 0.116302 -4.327668\nv 1.591262 0.212837 -4.138710\nv 1.672130 0.197071 -4.072058\nv 1.604110 0.178151 -4.157210\nv 1.090420 1.823657 -1.451728\nv 1.064573 1.830298 -1.468131\nv 1.040575 1.831125 -1.477284\nv 1.027707 1.825313 -1.478871\nv 1.020408 1.816182 -1.476675\nv 1.115647 1.906810 1.254273\nv 1.110892 1.908918 1.286217\nv 1.105976 1.908696 1.310466\nv 1.102079 1.902279 1.319918\nv 1.098691 1.892764 1.321973\nv 1.410804 1.489709 -0.560957\nv 1.408482 1.515065 -0.112478\nv 1.173564 1.872830 0.163906\nv 1.171922 1.875349 0.131390\nv 1.168313 1.876042 0.105297\nv 1.108830 1.812026 -1.428393\nv 1.118376 1.799111 -1.406586\nv 1.119063 1.906236 1.221731\nv 1.118891 1.904951 1.195314\nv 1.175411 1.870563 0.196025\nv 1.174546 1.867505 0.221504\nv 1.160563 1.872829 0.092448\nv 1.150744 1.867663 0.086221\nv 1.117632 1.788613 -1.394767\nv 1.111742 1.779325 -1.387942\nv 1.112888 1.900708 1.181741\nv 1.103968 1.894987 1.174592\nv 1.168051 1.862613 0.234103\nv 1.158741 1.856804 0.240262\nv 1.416152 1.020605 -4.177801\nv 0.554098 0.196328 -4.737293\nv 0.371278 0.196329 -4.764088\nv 0.186203 0.196329 -4.782150\nv 0.000000 0.196329 -4.788999\nv 0.359399 0.776379 -4.727590\nv 0.184274 0.776386 -4.741135\nv 0.000000 0.776389 -4.746131\nv 0.626984 0.764961 -4.688276\nv 0.516225 0.776373 -4.706937\nv 0.663908 0.660721 -4.674114\nv 0.663909 0.730736 -4.680703\nv 0.663861 0.418097 -4.640915\nv 0.663889 0.541941 -4.658405\nv 0.627083 0.283466 -4.628418\nv 0.663832 0.332891 -4.628985\nv 0.360467 0.266921 -4.666701\nv 0.516895 0.266964 -4.645017\nv 0.000000 0.266847 -4.686984\nv 0.184995 0.266873 -4.681388\nv 1.317220 1.311516 2.672095\nv 1.300462 1.442659 2.654050\nv 1.273039 1.566839 2.626608\nv 1.225425 1.658707 2.620210\nv 1.148093 1.692911 2.665301\nv 1.055056 1.697122 2.729676\nv 0.960324 1.699007 2.781133\nv 0.847093 1.699548 2.821479\nv 0.698565 1.699731 2.852513\nv 1.682657 0.124280 -3.992747\nv 1.692547 0.147137 -3.982693\nv 1.661312 0.116276 -3.990036\nv 1.598060 0.116276 -3.992950\nv 1.668370 0.206806 2.316612\nv 1.637007 0.206004 2.314923\nv 1.666924 0.057450 0.895199\nv 1.634113 0.057036 0.895944\nv 1.667585 0.071673 -2.593991\nv 1.635435 0.070635 -2.593796\nv 0.364125 1.241131 -4.330797\nv 0.182866 1.241931 -4.345264\nv 0.000000 1.242388 -4.348976\nv 0.663289 1.366179 -4.204469\nv 0.717053 1.259933 -4.228269\nv 0.542168 1.240557 -4.302245\nv 0.355595 1.288550 -4.285846\nv 0.183046 1.289271 -4.298347\nv 0.000000 1.289683 -4.301372\nv 0.000000 1.448315 -4.322382\nv 0.168898 1.447440 -4.319985\nv 0.325209 1.444695 -4.307991\nv 0.456347 1.439954 -4.281594\nv 0.554425 1.417327 -4.253970\nv 0.611556 1.360925 -4.238294\nv 0.603786 1.306058 -4.238980\nv 0.507154 1.288040 -4.260444\nv 0.498605 0.322667 3.042656\nv 0.260994 0.322665 3.054957\nv 0.000000 0.322664 3.058445\nv 0.988245 0.655236 2.938200\nv 0.973548 0.795129 2.951682\nv 0.989404 0.747796 2.941618\nv 0.829553 0.811060 3.011961\nv 0.922577 0.810978 2.978558\nv 0.497530 0.811101 3.064151\nv 0.687540 0.811094 3.041603\nv 0.000000 0.811105 3.079725\nv 0.260516 0.811104 3.076271\nv 0.689454 0.322672 3.019706\nv 0.831520 0.322678 2.989890\nv 0.922782 0.322684 2.956992\nv 0.972061 0.367943 2.933341\nv 0.988173 0.503706 2.931258\nv 0.826378 0.630387 2.989908\nv 0.711742 0.630466 3.012641\nv 0.607590 0.599075 3.028692\nv 0.572985 0.504890 3.030399\nv 0.608177 0.410706 3.020359\nv 0.587381 0.421771 2.905950\nv 0.553168 0.509964 2.915565\nv 0.608177 0.410706 3.020359\nv 0.713416 0.379317 3.001164\nv 0.603211 0.418872 2.970809\nv 0.828750 0.379326 2.977998\nv 0.801218 0.392389 2.865109\nv 0.689703 0.392380 2.887326\nv 0.587381 0.421771 2.905950\nv 0.894227 0.379336 2.956036\nv 0.924568 0.410657 2.941545\nv 0.890647 0.421729 2.831527\nv 0.863011 0.392399 2.844711\nv 0.934494 0.504601 2.940785\nv 0.923840 0.598619 2.950681\nv 0.899689 0.509699 2.830957\nv 0.892439 0.630159 2.968155\nv 1.534076 0.533672 -4.204710\nv 1.529223 0.400574 -4.201533\nv 1.521543 0.292280 -4.195553\nv 1.496584 0.208876 -4.210937\nv 1.422112 0.196387 -4.289083\nv 1.335199 0.196386 -4.368970\nv 1.212583 0.196387 -4.458169\nv 1.357214 0.629190 -4.376260\nv 1.427493 0.629196 -4.315477\nv 1.466308 0.599346 -4.273518\nv 1.457577 0.594982 -4.233678\nv 1.420696 0.623831 -4.233678\nv 1.353233 0.623824 -4.233678\nv 1.477147 0.509770 -4.257019\nv 1.472744 0.401940 -4.252886\nv 1.463652 0.404564 -4.233678\nv 1.467860 0.508407 -4.233678\nv 1.465830 0.317330 -4.248023\nv 1.445989 0.262577 -4.256669\nv 1.438172 0.272117 -4.233678\nv 1.457057 0.323911 -4.233678\nv 1.445989 0.262577 -4.256669\nv 1.402799 0.244323 -4.293064\nv 1.440284 0.270632 -4.250022\nv 1.332215 0.244319 -4.347783\nv 1.329305 0.254844 -4.233678\nv 1.397089 0.254848 -4.233678\nv 1.438172 0.272117 -4.233678\nv 1.230192 0.244321 -4.411400\nv 1.142686 0.262853 -4.464826\nv 1.230314 0.254846 -4.233678\nv 1.115655 0.318443 -4.488968\nv 1.119360 0.403614 -4.499822\nv 1.124066 0.510887 -4.513378\nv 1.158648 0.599627 -4.504794\nv 1.251981 0.629198 -4.449226\nv 1.251202 0.623832 -4.233678\nv 1.111742 1.779325 -1.387942\nv 1.056566 1.895416 -1.208329\nv 1.008440 1.997972 -1.005150\nv 0.898901 2.017364 -1.161893\nv 0.963470 1.932830 -1.295599\nv 1.020408 1.816182 -1.476675\nv 1.188907 1.587101 -1.626262\nv 1.153643 1.679217 -1.519192\nv 1.077137 1.686130 -1.649979\nv 1.133762 1.549377 -1.819397\nv 1.158741 1.856804 0.240262\nv 1.076336 1.987120 0.267507\nv 1.001705 2.097051 0.329454\nv 1.001306 2.094698 0.094045\nv 1.071049 1.993523 0.111542\nv 1.150744 1.867663 0.086221\nv 1.237735 1.673522 0.220610\nv 1.206820 1.757427 0.226952\nv 1.203653 1.761294 0.072707\nv 1.243168 1.664670 0.065096\nv 1.103968 1.894987 1.174592\nv 1.146049 1.807984 1.181883\nv 1.180976 1.722747 1.191904\nv 1.170420 1.725312 1.337411\nv 1.139856 1.805658 1.328437\nv 1.098691 1.892764 1.321973\nv 0.999025 2.057054 1.163680\nv 1.047575 1.985523 1.172758\nv 1.036325 1.993387 1.320526\nv 0.952146 2.077461 1.328439\nv 0.468619 2.076309 -1.198172\nv 0.598167 2.068771 -1.176519\nv 0.720424 2.059641 -1.152186\nv 0.819277 2.051069 -1.130700\nv 0.987688 2.057475 -0.803199\nv 0.982130 2.089637 -0.600033\nv 0.000000 2.083647 -1.230450\nv 0.115786 2.083107 -1.227288\nv 0.231705 2.081817 -1.220208\nv 0.347890 2.080105 -1.211618\nv 0.976950 2.135271 0.446871\nv 0.977058 2.131871 0.618689\nv 0.979586 2.110168 -0.393206\nv 0.978734 2.121737 -0.195799\nv 0.978254 2.127007 -0.020892\nv 0.977015 2.116940 0.843841\nv 0.977819 2.099117 1.042454\nv 0.980464 2.087036 1.134656\nv 0.845547 2.114922 1.350052\nv 0.726016 2.124269 1.379344\nv 0.603041 2.124004 1.410294\nv 0.479441 2.119692 1.439146\nv 0.358032 2.116899 1.462143\nv 0.238082 2.115001 1.478549\nv 0.118859 2.113375 1.487628\nv 0.000000 2.112630 1.490335\nv 0.590739 1.369903 -4.123651\nv 0.582444 1.319059 -4.124672\nv 0.489540 1.302370 -4.145795\nv 0.343843 1.302860 -4.170685\nv 0.177166 1.303550 -4.183011\nv 0.000000 1.303946 -4.186034\nv 1.625090 1.608953 -1.310976\nv 1.613462 1.606120 -1.274918\nv 1.613462 1.747565 -1.274918\nv 1.625090 1.744732 -1.310976\nv 1.632934 1.676843 -1.263814\nv 1.613462 1.747565 -1.274918\nv 1.555049 1.771139 -1.308230\nv 1.477291 1.771139 -1.352592\nv 1.399789 1.771139 -1.396844\nv 1.332981 1.753393 -1.431751\nv 1.350204 1.594277 -1.462504\nv 1.332981 1.600293 -1.431751\nv 1.319529 1.676843 -1.432817\nv 1.332981 1.753393 -1.431751\nv 1.350204 1.759410 -1.462504\nv 1.330762 1.650071 -1.498829\nv 1.324192 1.639843 -1.478683\nv 1.317187 1.646979 -1.458537\nv 1.314230 1.674364 -1.451822\nv 1.315820 1.701853 -1.458537\nv 1.322452 1.709305 -1.478683\nv 1.329520 1.699391 -1.498829\nv 1.332414 1.674784 -1.505544\nv 1.330762 1.650071 -1.498829\nv 1.308905 1.649523 -1.513877\nv 1.281851 1.631440 -1.538073\nv 1.257545 1.593434 -1.566450\nv 1.234613 1.545465 -1.596919\nv -1.515767 1.116989 2.479697\nv -1.412098 1.174811 2.612533\nv -1.303503 1.194168 2.718198\nv -1.536397 0.589925 2.533818\nv -1.534179 0.392614 2.534129\nv -1.521304 0.225536 2.529991\nv -1.225425 1.658707 2.620211\nv -1.267285 1.672608 2.437321\nv -1.295069 1.686903 2.180676\nv -1.327837 1.665126 2.000196\nv -1.338420 1.653150 1.850134\nv -1.409643 1.502387 -0.336717\nv -1.411427 1.477943 -0.806746\nv -1.364313 1.459920 -2.045561\nv -1.371572 1.431425 -2.344862\nv -1.380133 1.420096 -2.587785\nv -1.396127 1.355853 -3.321763\nv -1.391279 1.322500 -3.503012\nv -1.383845 1.276042 -3.684131\nv -1.410974 1.467996 -1.095633\nv -1.407408 1.459293 -1.406276\nv -1.387091 1.408658 -2.786458\nv -1.392384 1.395510 -2.963619\nv -1.355025 1.573519 0.959264\nv -1.365971 1.563732 0.740921\nv -1.379900 1.553845 0.510329\nv -1.393654 1.541427 0.304784\nv -1.404195 1.527994 0.103957\nv -1.398695 1.451252 -1.717329\nv -1.345894 1.628858 1.558812\nv -1.347372 1.614371 1.415205\nv -1.348637 1.599464 1.271860\nv -1.395946 1.379049 -3.142009\nv -1.376265 1.213532 -3.863489\nv -1.366552 1.153494 -4.019665\nv -1.350217 1.585637 1.128061\nv -1.343675 1.641423 1.703397\nv -1.493292 1.081614 2.594959\nv -1.515767 1.116989 2.479697\nv -1.541404 0.862919 2.512504\nv -1.538839 0.739043 2.527920\nv -1.543990 0.984506 2.483637\nv -0.522388 1.684611 2.902563\nv -0.261492 1.681440 2.894496\nv -1.403221 0.166413 2.532502\nv -1.486887 0.167121 2.522538\nv -1.672130 0.197071 -4.072058\nv -1.699734 0.201620 -4.014428\nv -1.692547 0.201519 -3.985838\nv -1.657966 0.116299 -4.074936\nv -1.602598 0.116302 -4.151668\nv -1.526338 0.116302 -4.240894\nv -1.371961 0.116302 -4.421684\nv -1.232676 0.116302 -4.532639\nv -1.069070 0.116302 -4.640778\nv -0.908418 0.116302 -4.726347\nv -0.742617 0.116302 -4.790075\nv -0.563569 0.116302 -4.832689\nv -0.377079 0.116302 -4.860282\nv -0.188949 0.116302 -4.878948\nv -0.188949 0.178151 -4.887277\nv -0.377079 0.178151 -4.868793\nv -0.563569 0.178151 -4.841381\nv -0.742957 0.178151 -4.798924\nv -0.735012 0.209495 -4.694183\nv -0.904940 0.214099 -4.633203\nv -0.909778 0.178151 -4.735307\nv -1.071791 0.178151 -4.649825\nv -1.066617 0.209103 -4.545909\nv -1.236756 0.178151 -4.541773\nv -1.376722 0.178151 -4.430565\nv -1.529096 0.178151 -4.247603\nv -1.366552 1.153494 -4.019665\nv -1.229040 1.198300 -4.064003\nv -1.063661 1.223843 -4.115713\nv -0.717053 1.259933 -4.228269\nv -0.896711 1.238315 -4.168387\nv -1.340358 1.091584 -4.200935\nv -1.352716 1.114453 -4.131237\nv -1.463735 0.178151 -4.335615\nv -1.514091 0.676665 -4.224150\nv -1.488454 0.804824 -4.207838\nv -1.451283 0.919212 -4.199341\nv -1.682657 0.124280 -3.992747\nv -1.682871 0.116289 -4.018241\nv -1.496584 0.208876 -4.210937\nv -1.459653 0.116302 -4.327668\nv -1.591262 0.212837 -4.138710\nv -1.604110 0.178151 -4.157210\nv -1.672130 0.197071 -4.072058\nv -1.090420 1.823657 -1.451728\nv -1.064574 1.830298 -1.468131\nv -1.040575 1.831125 -1.477284\nv -1.027707 1.825313 -1.478871\nv -1.020408 1.816182 -1.476675\nv -1.115647 1.906810 1.254273\nv -1.110892 1.908918 1.286217\nv -1.105976 1.908695 1.310466\nv -1.102079 1.902279 1.319918\nv -1.098691 1.892764 1.321973\nv -1.410804 1.489709 -0.560957\nv -1.408482 1.515064 -0.112478\nv -1.173564 1.872830 0.163906\nv -1.171922 1.875349 0.131390\nv -1.168313 1.876042 0.105297\nv -1.108830 1.812026 -1.428393\nv -1.118376 1.799111 -1.406586\nv -1.119063 1.906236 1.221731\nv -1.118891 1.904950 1.195314\nv -1.175411 1.870563 0.196025\nv -1.174546 1.867505 0.221504\nv -1.160563 1.872829 0.092448\nv -1.150745 1.867663 0.086221\nv -1.117632 1.788613 -1.394767\nv -1.111742 1.779325 -1.387942\nv -1.112888 1.900708 1.181741\nv -1.103968 1.894987 1.174592\nv -1.168051 1.862613 0.234103\nv -1.158741 1.856804 0.240262\nv -1.416152 1.020605 -4.177801\nv -0.554098 0.196328 -4.737293\nv -0.371278 0.196329 -4.764088\nv -0.186203 0.196329 -4.782150\nv -0.184274 0.776386 -4.741135\nv -0.359399 0.776379 -4.727590\nv -0.516225 0.776373 -4.706937\nv -0.626984 0.764961 -4.688276\nv -0.663909 0.730736 -4.680703\nv -0.663908 0.660721 -4.674114\nv -0.663889 0.541941 -4.658405\nv -0.663861 0.418097 -4.640915\nv -0.663832 0.332891 -4.628985\nv -0.627083 0.283466 -4.628418\nv -0.516895 0.266964 -4.645017\nv -0.360467 0.266921 -4.666701\nv -0.184995 0.266873 -4.681388\nv -1.317220 1.311516 2.672095\nv -1.300462 1.442659 2.654050\nv -1.273039 1.566839 2.626608\nv -1.225425 1.658707 2.620211\nv -1.148093 1.692911 2.665301\nv -1.055056 1.697122 2.729676\nv -0.960324 1.699007 2.781133\nv -0.847093 1.699548 2.821479\nv -0.698565 1.699731 2.852513\nv -1.682657 0.124280 -3.992747\nv -1.661312 0.116276 -3.990036\nv -1.692547 0.147137 -3.982692\nv -1.598060 0.116276 -3.992950\nv -1.637007 0.206004 2.314923\nv -1.668370 0.206806 2.316612\nv -1.666924 0.057450 0.895199\nv -1.634113 0.057036 0.895944\nv -1.635435 0.070635 -2.593796\nv -1.667585 0.071673 -2.593991\nv -0.364125 1.241131 -4.330798\nv -0.182866 1.241931 -4.345264\nv -0.663289 1.366179 -4.204469\nv -0.717053 1.259933 -4.228269\nv -0.542168 1.240557 -4.302245\nv -0.355595 1.288550 -4.285846\nv -0.183046 1.289271 -4.298347\nv 0.000000 1.303946 -4.186034\nv 0.000000 1.298950 -4.252131\nv 0.000000 1.289683 -4.301372\nv -0.168898 1.447440 -4.319985\nv -0.325210 1.444695 -4.307991\nv -0.456347 1.439954 -4.281594\nv -0.554425 1.417327 -4.253970\nv -0.611556 1.360925 -4.238294\nv -0.603786 1.306059 -4.238980\nv -0.507154 1.288040 -4.260444\nv -0.260994 0.322665 3.054957\nv -0.498605 0.322667 3.042656\nv -0.988245 0.655236 2.938200\nv -0.989404 0.747796 2.941618\nv -0.973548 0.795129 2.951682\nv -0.922577 0.810978 2.978558\nv -0.829553 0.811060 3.011961\nv -0.687540 0.811094 3.041603\nv -0.497530 0.811101 3.064151\nv -0.260516 0.811104 3.076271\nv -0.689454 0.322672 3.019706\nv -0.831520 0.322678 2.989890\nv -0.922782 0.322684 2.956992\nv -0.972061 0.367943 2.933341\nv -0.988173 0.503706 2.931258\nv -0.826379 0.630387 2.989908\nv -0.711742 0.630466 3.012641\nv -0.607590 0.599075 3.028692\nv -0.572985 0.504890 3.030399\nv -0.553168 0.509964 2.915565\nv -0.587381 0.421771 2.905950\nv -0.608177 0.410706 3.020358\nv -0.608177 0.410706 3.020358\nv -0.603211 0.418872 2.970809\nv -0.713416 0.379317 3.001164\nv -0.587381 0.421771 2.905950\nv -0.689703 0.392380 2.887326\nv -0.801218 0.392389 2.865109\nv -0.828750 0.379326 2.977998\nv -0.894227 0.379336 2.956037\nv -0.863011 0.392399 2.844711\nv -0.890647 0.421729 2.831527\nv -0.924568 0.410657 2.941545\nv -0.934494 0.504601 2.940785\nv -0.899689 0.509699 2.830957\nv -0.923840 0.598619 2.950681\nv -0.892439 0.630159 2.968155\nv -1.534076 0.533672 -4.204710\nv -1.529223 0.400574 -4.201533\nv -1.521543 0.292280 -4.195553\nv -1.496584 0.208876 -4.210937\nv -1.422112 0.196387 -4.289083\nv -1.335199 0.196386 -4.368970\nv -1.212583 0.196387 -4.458169\nv -1.357214 0.629190 -4.376260\nv -1.427493 0.629196 -4.315477\nv -1.353233 0.623824 -4.233678\nv -1.420696 0.623831 -4.233678\nv -1.457577 0.594982 -4.233678\nv -1.466308 0.599346 -4.273518\nv -1.477147 0.509770 -4.257019\nv -1.467860 0.508407 -4.233678\nv -1.463652 0.404564 -4.233678\nv -1.472744 0.401940 -4.252886\nv -1.465830 0.317330 -4.248023\nv -1.457057 0.323911 -4.233678\nv -1.438172 0.272117 -4.233678\nv -1.445989 0.262577 -4.256669\nv -1.445989 0.262577 -4.256669\nv -1.440284 0.270632 -4.250021\nv -1.402799 0.244323 -4.293064\nv -1.438172 0.272117 -4.233678\nv -1.397089 0.254848 -4.233678\nv -1.329305 0.254844 -4.233678\nv -1.332215 0.244319 -4.347783\nv -1.230192 0.244321 -4.411400\nv -1.230314 0.254846 -4.233678\nv -1.142686 0.262853 -4.464826\nv -1.115655 0.318443 -4.488969\nv -1.119360 0.403614 -4.499822\nv -1.124066 0.510887 -4.513378\nv -1.158648 0.599627 -4.504793\nv -1.251981 0.629198 -4.449226\nv -1.251202 0.623832 -4.233678\nv -1.111742 1.779325 -1.387942\nv -1.056566 1.895416 -1.208329\nv -1.020408 1.816182 -1.476675\nv -0.963470 1.932830 -1.295599\nv -0.898901 2.017364 -1.161893\nv -1.008440 1.997972 -1.005150\nv -1.188907 1.587101 -1.626262\nv -1.153643 1.679217 -1.519192\nv -1.133762 1.549377 -1.819397\nv -1.077137 1.686130 -1.649979\nv -1.158741 1.856804 0.240262\nv -1.076336 1.987120 0.267507\nv -1.150745 1.867663 0.086221\nv -1.071049 1.993523 0.111542\nv -1.001306 2.094698 0.094045\nv -1.001705 2.097051 0.329454\nv -1.237735 1.673522 0.220610\nv -1.206820 1.757427 0.226952\nv -1.243168 1.664670 0.065096\nv -1.203653 1.761294 0.072707\nv -1.103968 1.894987 1.174592\nv -1.146049 1.807984 1.181883\nv -1.098691 1.892764 1.321973\nv -1.139856 1.805658 1.328437\nv -1.170420 1.725312 1.337411\nv -1.180976 1.722747 1.191904\nv -0.999025 2.057054 1.163680\nv -1.047575 1.985523 1.172758\nv -0.952146 2.077461 1.328439\nv -1.036325 1.993387 1.320526\nv -0.468619 2.076309 -1.198172\nv -0.598167 2.068771 -1.176519\nv -0.982130 2.089637 -0.600033\nv -0.987688 2.057475 -0.803199\nv -0.819277 2.051069 -1.130700\nv -0.720424 2.059641 -1.152186\nv -0.347890 2.080105 -1.211618\nv -0.231705 2.081817 -1.220208\nv -0.115786 2.083107 -1.227288\nv -0.977058 2.131871 0.618689\nv -0.976950 2.135271 0.446871\nv -0.979586 2.110168 -0.393206\nv -0.978254 2.127007 -0.020892\nv -0.978734 2.121737 -0.195799\nv -0.977015 2.116940 0.843841\nv -0.479441 2.119692 1.439146\nv -0.603041 2.124004 1.410294\nv -0.726016 2.124269 1.379344\nv -0.845547 2.114922 1.350052\nv -0.980464 2.087036 1.134656\nv -0.977819 2.099117 1.042454\nv -0.118859 2.113375 1.487628\nv -0.238082 2.115001 1.478549\nv -0.358032 2.116899 1.462143\nv -0.343843 1.302860 -4.170685\nv -0.489540 1.302370 -4.145795\nv -0.582444 1.319059 -4.124672\nv -0.590739 1.369903 -4.123651\nv -0.177166 1.303550 -4.183011\nv -1.625090 1.608953 -1.310976\nv -1.613462 1.606120 -1.274918\nv -1.625090 1.744732 -1.310976\nv -1.613462 1.747565 -1.274918\nv -1.632934 1.676843 -1.263814\nv -1.613462 1.747565 -1.274918\nv -1.555049 1.771139 -1.308230\nv -1.477291 1.771139 -1.352592\nv -1.399789 1.771139 -1.396844\nv -1.332981 1.753393 -1.431751\nv -1.350204 1.594277 -1.462504\nv -1.332981 1.600293 -1.431751\nv -1.319529 1.676843 -1.432817\nv -1.332981 1.753393 -1.431751\nv -1.350204 1.759410 -1.462504\nv -1.330762 1.650071 -1.498828\nv -1.324192 1.639842 -1.478683\nv -1.317188 1.646979 -1.458537\nv -1.314230 1.674364 -1.451822\nv -1.315820 1.701854 -1.458537\nv -1.322452 1.709305 -1.478683\nv -1.329520 1.699391 -1.498828\nv -1.332414 1.674784 -1.505544\nv -1.281851 1.631440 -1.538073\nv -1.308905 1.649523 -1.513877\nv -1.330762 1.650071 -1.498828\nv -1.234613 1.545465 -1.596919\nv -1.257545 1.593434 -1.566450\nv 1.104620 1.945783 2.378585\nv 1.104620 1.880194 2.374176\nv 1.104620 1.902169 2.469069\nv 0.695521 1.959765 2.526644\nv 0.695537 1.912129 2.525556\nv 1.104620 1.949804 2.470156\nv 0.198356 1.918168 2.559800\nv -0.198355 1.965803 2.560886\nv -0.198355 1.918168 2.559800\nv 0.198356 1.965803 2.560886\nv -0.695537 1.912129 2.525556\nv -1.104620 1.949804 2.470156\nv -1.104620 1.902169 2.469069\nv -0.695521 1.959765 2.526644\nv -1.104620 1.880194 2.374176\nv -1.104620 1.945783 2.378585\nv -1.104620 2.096155 2.801421\nv -1.104620 1.918482 2.835675\nv -1.104620 1.957090 2.780539\nv -0.695474 2.048805 2.822618\nv -0.695491 1.967051 2.837031\nv -1.104620 2.038843 2.766124\nv -0.198355 1.973088 2.871269\nv 0.198356 2.054841 2.856853\nv 0.198356 1.973088 2.871269\nv -0.198355 2.054841 2.856853\nv 0.695491 1.967051 2.837031\nv 1.104620 2.038843 2.766124\nv 1.104620 1.957090 2.780539\nv 0.695475 2.048805 2.822618\nv 1.104620 1.918482 2.835675\nv 1.104620 2.096155 2.801421\nv 1.104620 1.957090 2.780539\nv 1.104620 1.880194 2.374176\nv 1.104620 1.902169 2.469069\nv 1.104620 1.918482 2.835675\nv 1.104620 1.949804 2.470156\nv 1.104620 2.038843 2.766124\nv -1.104620 1.902169 2.469069\nv -1.104620 1.918482 2.835675\nv -1.104620 1.957090 2.780539\nv -1.104620 1.880194 2.374176\nv -1.104620 2.038843 2.766124\nv -1.104620 1.949804 2.470156\nv 0.405380 1.719596 2.553778\nv 0.439651 1.748214 2.589961\nv 0.439651 1.835964 2.600771\nv 0.439651 1.933878 2.594110\nv 0.405675 1.697335 2.818856\nv 0.546368 1.697335 2.818856\nv 0.546663 1.719596 2.553778\nv 0.439651 1.748214 2.589961\nv 0.512391 1.748214 2.589961\nv 0.512391 1.730978 2.786973\nv 0.439651 1.730978 2.786973\nv -0.546663 1.719596 2.553778\nv -0.546368 1.697335 2.818856\nv -0.405675 1.697335 2.818856\nv -0.405380 1.719596 2.553778\nv -0.439651 1.835964 2.600771\nv -0.439651 1.748214 2.589961\nv -0.439651 1.933878 2.594110\nv -0.512392 1.748214 2.589961\nv -0.439651 1.748214 2.589961\nv -0.439651 1.730978 2.786973\nv -0.512392 1.730978 2.786973\nv 1.186219 0.334917 -4.073302\nv 1.186219 0.334917 -4.328740\nv 1.237823 0.300436 -4.328740\nv 1.151739 0.386521 -4.328740\nv 1.186219 0.334917 -4.328740\nv 1.151739 0.508263 -4.328740\nv 1.139631 0.447392 -4.328740\nv 1.237823 0.594347 -4.328740\nv 1.186219 0.559867 -4.328740\nv 1.359565 0.594347 -4.328740\nv 1.298694 0.606455 -4.328740\nv 1.445650 0.508263 -4.328740\nv 1.411170 0.559867 -4.328740\nv 1.445650 0.386521 -4.328740\nv 1.457758 0.447392 -4.328740\nv 1.359565 0.300436 -4.328740\nv 1.411170 0.334917 -4.328740\nv 1.298694 0.288328 -4.328740\nv 1.119527 0.915250 -4.105963\nv 1.119527 0.915250 -4.279731\nv 1.162987 0.903605 -4.279731\nv 1.087713 0.947065 -4.279731\nv 1.119527 0.915250 -4.279731\nv 1.087713 1.033986 -4.279731\nv 1.076067 0.990526 -4.279731\nv 1.162987 1.077446 -4.279731\nv 1.119527 1.065800 -4.279731\nv 1.238262 1.033986 -4.279731\nv 1.206447 1.065800 -4.279731\nv 1.238262 0.947065 -4.279731\nv 1.249907 0.990526 -4.279731\nv 1.206447 0.915250 -4.279731\nv 1.072516 0.906061 -4.093235\nv 1.072516 0.906061 -4.348673\nv 1.051838 0.891038 -4.348673\nv 1.005600 0.906061 -4.348673\nv 1.026278 0.891038 -4.348673\nv 1.005600 0.954679 -4.348673\nv 0.997702 0.930370 -4.348673\nv 1.051838 0.969702 -4.348673\nv 1.026278 0.969702 -4.348673\nv 1.080415 0.930370 -4.348673\nv 1.072516 0.954679 -4.348673\nv 1.072516 0.906061 -4.348673\nv 0.840428 0.895819 -4.144662\nv 0.840428 0.895819 -4.400100\nv 0.893449 0.881612 -4.400100\nv 0.801614 0.934634 -4.400100\nv 0.840428 0.895819 -4.400100\nv 0.801614 1.040676 -4.400100\nv 0.787407 0.987655 -4.400100\nv 0.893450 1.093698 -4.400100\nv 0.840428 1.079490 -4.400100\nv 0.985286 1.040676 -4.400100\nv 0.946471 1.079490 -4.400100\nv 0.985286 0.934634 -4.400100\nv 0.999493 0.987655 -4.400100\nv 0.946471 0.895819 -4.400100\nv 1.103643 1.474747 2.550508\nv 1.103643 1.474747 2.741831\nv 1.103643 1.474747 2.741831\nv 1.034742 1.434967 2.741831\nv 1.063864 1.464088 2.741831\nv 1.034742 1.355408 2.741831\nv 1.024083 1.395188 2.741831\nv 1.103643 1.315629 2.741831\nv 1.063864 1.326288 2.741831\nv 1.172543 1.355408 2.741831\nv 1.143422 1.326288 2.741831\nv 1.172543 1.434967 2.741831\nv 1.183202 1.395188 2.741831\nv 1.143422 1.464088 2.741831\nv 0.798858 1.535018 2.550508\nv 0.798858 1.535018 2.807662\nv 0.842220 1.563992 2.807662\nv 0.769884 1.491656 2.807662\nv 0.798858 1.535018 2.807662\nv 0.769884 1.389357 2.807662\nv 0.759710 1.440507 2.807662\nv 0.842220 1.317021 2.807662\nv 0.798858 1.345995 2.807662\nv 0.944519 1.317021 2.807662\nv 0.893369 1.306847 2.807662\nv 1.016855 1.389357 2.807662\nv 0.987881 1.345995 2.807662\nv 1.016855 1.491656 2.807662\nv 1.027029 1.440507 2.807662\nv 0.944519 1.563992 2.807662\nv 0.987881 1.535018 2.807662\nv 0.893369 1.574166 2.807662\nv 0.647003 1.539114 2.550508\nv 0.647003 1.539114 2.859092\nv 0.721750 1.563401 2.859092\nv 0.647003 1.539114 2.859092\nv 0.680431 1.563401 2.859092\nv 0.647003 1.460520 2.859092\nv 0.634234 1.499817 2.859092\nv 0.721750 1.436233 2.859092\nv 0.680431 1.436233 2.859092\nv 0.767947 1.499817 2.859092\nv 0.755179 1.460520 2.859092\nv 0.755179 1.539114 2.859092\nv 0.704611 0.598364 2.763301\nv 0.704611 0.598364 3.066190\nv 0.665779 0.453446 3.066190\nv 0.651567 0.506490 3.066190\nv 0.704611 0.414615 3.066190\nv 0.757654 0.400402 3.066190\nv 0.810698 0.414615 3.066190\nv 0.849529 0.453446 3.066190\nv 0.863742 0.506490 3.066190\nv 0.849529 0.559533 3.066190\nv 0.810698 0.598364 3.066190\nv 0.757654 0.612577 3.066190\nv 0.704611 0.598364 3.066190\nv 0.665779 0.559533 3.066190\nv 0.677205 0.506490 3.090955\nv 0.687983 0.466265 3.090955\nv 0.717430 0.436819 3.090955\nv 0.757654 0.426040 3.090955\nv 0.797879 0.436819 3.090955\nv 0.827326 0.466265 3.090955\nv 0.838103 0.506490 3.090955\nv 0.827326 0.546714 3.090955\nv 0.797879 0.576161 3.090955\nv 0.757654 0.586939 3.090955\nv 0.717430 0.576161 3.090955\nv 0.687983 0.546714 3.090955\nv 0.699369 0.472839 2.921791\nv 0.690353 0.506490 3.090955\nv 0.690353 0.506490 2.921791\nv 0.699369 0.472839 3.090955\nv 0.724003 0.448205 2.921791\nv 0.724003 0.448205 3.090955\nv 0.757654 0.439188 2.921791\nv 0.757654 0.439188 3.090955\nv 0.791305 0.448205 2.921791\nv 0.791305 0.448205 3.090955\nv 0.815939 0.472839 2.921791\nv 0.815939 0.472839 3.090955\nv 0.824956 0.506490 2.921791\nv 0.824956 0.506490 3.090955\nv 0.815939 0.540140 2.921791\nv 0.815939 0.540140 3.090955\nv 0.791305 0.564774 2.921791\nv 0.791305 0.564774 3.090955\nv 0.757654 0.573791 2.921791\nv 0.757654 0.573791 3.090955\nv 0.724003 0.564774 2.921791\nv 0.724003 0.564774 3.090955\nv 0.699369 0.540140 2.921791\nv 0.699369 0.540140 3.090955\nv 0.699369 0.540140 3.090955\nv 0.699369 0.540140 2.921791\nv -1.186219 0.334917 -4.073302\nv -1.186219 0.334917 -4.328740\nv -1.151739 0.386521 -4.328740\nv -1.237823 0.300436 -4.328740\nv -1.186219 0.334917 -4.328740\nv -1.359565 0.300436 -4.328740\nv -1.298694 0.288328 -4.328740\nv -1.445650 0.386521 -4.328740\nv -1.411170 0.334917 -4.328740\nv -1.445650 0.508263 -4.328740\nv -1.457758 0.447392 -4.328740\nv -1.359565 0.594347 -4.328740\nv -1.411170 0.559867 -4.328740\nv -1.237823 0.594347 -4.328740\nv -1.298694 0.606455 -4.328740\nv -1.151739 0.508263 -4.328740\nv -1.186219 0.559867 -4.328740\nv -1.139631 0.447392 -4.328740\nv -1.119527 0.915250 -4.105963\nv -1.119527 0.915250 -4.279731\nv -1.087713 0.947065 -4.279731\nv -1.162987 0.903605 -4.279731\nv -1.119527 0.915250 -4.279731\nv -1.238262 0.947065 -4.279731\nv -1.206447 0.915250 -4.279731\nv -1.238262 1.033986 -4.279731\nv -1.249907 0.990526 -4.279731\nv -1.162987 1.077446 -4.279731\nv -1.206447 1.065800 -4.279731\nv -1.087713 1.033986 -4.279731\nv -1.119527 1.065800 -4.279731\nv -1.076067 0.990526 -4.279731\nv -1.072516 0.906061 -4.093235\nv -1.072516 0.906061 -4.348673\nv -1.005600 0.906061 -4.348673\nv -1.051838 0.891038 -4.348673\nv -1.026278 0.891038 -4.348673\nv -1.080415 0.930370 -4.348673\nv -1.072516 0.906061 -4.348673\nv -1.051838 0.969702 -4.348673\nv -1.072516 0.954679 -4.348673\nv -1.005600 0.954679 -4.348673\nv -1.026278 0.969702 -4.348673\nv -0.997702 0.930370 -4.348673\nv -0.840428 0.895819 -4.144662\nv -0.840428 0.895819 -4.400100\nv -0.801614 0.934634 -4.400100\nv -0.893449 0.881612 -4.400100\nv -0.840428 0.895819 -4.400100\nv -0.985286 0.934634 -4.400100\nv -0.946471 0.895819 -4.400100\nv -0.985286 1.040676 -4.400100\nv -0.999493 0.987655 -4.400100\nv -0.893450 1.093698 -4.400100\nv -0.946471 1.079490 -4.400100\nv -0.801614 1.040676 -4.400100\nv -0.840428 1.079490 -4.400100\nv -0.787407 0.987655 -4.400100\nv -1.103642 1.474747 2.550508\nv -1.103642 1.474747 2.741831\nv -1.034742 1.434967 2.741831\nv -1.103642 1.474747 2.741831\nv -1.063863 1.464088 2.741831\nv -1.172543 1.434967 2.741831\nv -1.143422 1.464088 2.741831\nv -1.172543 1.355408 2.741831\nv -1.183202 1.395188 2.741831\nv -1.103642 1.315629 2.741831\nv -1.143422 1.326288 2.741831\nv -1.034742 1.355408 2.741831\nv -1.063863 1.326288 2.741831\nv -1.024083 1.395188 2.741831\nv -0.798858 1.535018 2.550508\nv -0.798858 1.535018 2.807662\nv -0.769884 1.491656 2.807662\nv -0.842220 1.563992 2.807662\nv -0.798858 1.535018 2.807662\nv -0.944519 1.563992 2.807662\nv -0.893369 1.574166 2.807662\nv -1.016855 1.491656 2.807662\nv -0.987881 1.535018 2.807662\nv -1.016855 1.389357 2.807662\nv -1.027029 1.440507 2.807662\nv -0.944519 1.317021 2.807662\nv -0.987881 1.345995 2.807662\nv -0.842220 1.317021 2.807662\nv -0.893369 1.306847 2.807662\nv -0.769884 1.389357 2.807662\nv -0.798858 1.345995 2.807662\nv -0.759710 1.440507 2.807662\nv -0.647003 1.539114 2.550508\nv -0.647003 1.539114 2.859092\nv -0.647003 1.539114 2.859092\nv -0.721750 1.563401 2.859092\nv -0.680431 1.563401 2.859092\nv -0.767947 1.499817 2.859092\nv -0.755179 1.539114 2.859092\nv -0.721750 1.436233 2.859092\nv -0.755179 1.460520 2.859092\nv -0.647003 1.460520 2.859092\nv -0.680431 1.436233 2.859092\nv -0.634234 1.499817 2.859092\nv -0.704611 0.598364 2.763301\nv -0.704611 0.598364 3.066190\nv -0.665779 0.453446 3.066190\nv -0.651566 0.506490 3.066190\nv -0.704611 0.414615 3.066190\nv -0.757654 0.400402 3.066190\nv -0.810698 0.414615 3.066190\nv -0.849528 0.453446 3.066190\nv -0.863742 0.506490 3.066190\nv -0.849528 0.559533 3.066190\nv -0.810698 0.598364 3.066190\nv -0.757654 0.612577 3.066190\nv -0.704611 0.598364 3.066190\nv -0.665779 0.559533 3.066190\nv -0.677205 0.506490 3.090955\nv -0.687983 0.466265 3.090955\nv -0.717430 0.436819 3.090955\nv -0.757654 0.426040 3.090955\nv -0.797879 0.436819 3.090955\nv -0.827325 0.466265 3.090955\nv -0.838103 0.506490 3.090955\nv -0.827325 0.546714 3.090955\nv -0.797879 0.576161 3.090955\nv -0.757654 0.586939 3.090955\nv -0.717430 0.576161 3.090955\nv -0.687983 0.546714 3.090955\nv -0.690353 0.506490 3.090955\nv -0.699369 0.472839 2.921791\nv -0.690353 0.506490 2.921791\nv -0.699369 0.472839 3.090955\nv -0.724003 0.448205 2.921791\nv -0.724003 0.448205 3.090955\nv -0.757654 0.439188 2.921791\nv -0.757654 0.439188 3.090955\nv -0.791305 0.448205 2.921791\nv -0.791305 0.448205 3.090955\nv -0.815938 0.472839 2.921791\nv -0.815938 0.472839 3.090955\nv -0.824956 0.506490 2.921791\nv -0.824956 0.506490 3.090955\nv -0.815938 0.540140 2.921791\nv -0.815938 0.540140 3.090955\nv -0.791305 0.564774 2.921791\nv -0.791305 0.564774 3.090955\nv -0.757654 0.573791 2.921791\nv -0.757654 0.573791 3.090955\nv -0.724003 0.564774 2.921791\nv -0.724003 0.564774 3.090955\nv -0.699369 0.540140 2.921791\nv -0.699369 0.540140 3.090955\nv -0.699369 0.540140 3.090955\nv -0.699369 0.540140 2.921791\nv 0.363712 0.887874 -1.738139\nv 0.755559 0.827131 -1.719672\nv 1.147358 1.094911 -1.528550\nv 0.755559 0.827131 -1.719672\nv 0.755369 1.116827 -1.867453\nv 1.045816 0.887217 -1.426071\nv -0.755369 1.116827 -1.867453\nv -1.045816 0.887217 -1.426071\nv -1.147358 1.094911 -1.528550\nv -0.755559 0.827131 -1.719672\nv -0.363380 1.164709 -1.909383\nv -0.363712 0.887874 -1.738139\nv -1.144109 1.391959 -1.420729\nv -1.147358 1.094911 -1.528550\nv -1.147686 0.824084 0.024238\nv -1.147546 0.810272 -0.850995\nv -1.045816 0.887217 -1.426071\nv -1.046397 0.945397 0.796320\nv -1.147732 0.848518 0.547016\nv -1.147732 1.496639 1.202896\nv -1.147732 1.180243 0.996879\nv -0.366001 0.906552 0.808831\nv -0.756867 0.871009 0.816616\nv -1.046397 0.945397 0.796320\nv 1.147732 1.496639 1.202896\nv 1.147732 1.180243 0.996879\nv 1.147686 0.824084 0.024238\nv 1.147732 0.848518 0.547016\nv 1.046397 0.945397 0.796320\nv 1.147358 1.094911 -1.528550\nv 1.144109 1.391959 -1.420729\nv 1.045816 0.887217 -1.426071\nv 1.147546 0.810272 -0.850995\nv 0.000000 1.546813 0.969413\nv 0.000000 1.412645 0.913760\nv 0.000000 1.278628 0.858103\nv 0.366001 0.906552 0.808831\nv 0.366001 0.790179 0.501560\nv 0.365674 0.776311 -0.017931\nv 0.364694 0.783642 -0.936076\nv 0.363712 0.887874 -1.738139\nv 0.363712 0.887874 -1.738139\nv 0.233097 1.006131 -1.563666\nv 0.363380 1.164709 -1.909383\nv 0.232717 1.235115 -1.772522\nv 0.225049 1.468946 -1.740408\nv 0.223983 1.118188 -1.381127\nv -0.311511 1.481355 -1.809752\nv -0.363380 1.164709 -1.909383\nv -0.363712 0.887874 -1.738139\nv -0.232717 1.235115 -1.772522\nv -0.233097 1.006131 -1.563666\nv -0.225049 1.468946 -1.740408\nv -0.233097 1.006131 -1.563666\nv -0.234219 0.922818 -0.852088\nv -0.235338 0.917632 -0.040591\nv -0.235712 0.923030 0.468020\nv -0.235712 1.013159 0.785459\nv -0.235712 1.013159 0.785459\nv -0.235712 1.262166 1.023442\nv -0.228051 1.515867 1.175692\nv 0.314602 1.545424 1.342996\nv 0.366001 1.206733 1.090310\nv -0.356214 1.557633 -1.804227\nv -0.212379 1.574494 -1.823544\nv -0.204643 1.568483 -1.791719\nv 0.314602 1.545424 1.342996\nv 0.212379 1.574494 -1.823544\nv 0.204643 1.568483 -1.791719\nv 0.356214 1.557633 -1.804227\nv -0.314602 1.545424 1.342996\nv 0.202516 1.147349 0.705128\nv 0.194855 1.173694 0.818088\nv 0.194855 1.173694 0.818088\nv 0.137843 1.264241 0.857647\nv 0.135927 1.204149 0.813695\nv 0.202516 1.221079 0.856279\nv 0.223983 1.118188 -1.381127\nv 0.199538 1.191524 -1.439434\nv 0.191913 1.139864 -1.388125\nv 0.133732 1.156031 -1.363716\nv 0.133674 1.567902 -1.620310\nv 0.191850 1.559425 -1.625494\nv 0.191850 1.559425 -1.625494\nv 0.199514 1.495331 -1.588979\nv 0.199511 1.565192 -1.664155\nv -0.199514 1.495331 -1.588979\nv -0.191850 1.559425 -1.625494\nv -0.191850 1.559425 -1.625494\nv -0.133674 1.567902 -1.620310\nv -0.199511 1.565192 -1.664155\nv -0.223983 1.118188 -1.381128\nv -0.191913 1.139864 -1.388125\nv -0.133732 1.156031 -1.363716\nv -0.199538 1.191524 -1.439434\nv -0.226724 1.125998 0.783302\nv -0.194855 1.173694 0.818088\nv -0.135927 1.204149 0.813695\nv -0.202516 1.147349 0.705128\nv -0.135927 1.608932 1.017227\nv -0.194855 1.600942 1.023095\nv -0.194855 1.600942 1.023095\nv -0.202516 1.534109 0.990042\nv -0.202516 1.610585 1.088501\nv 0.202516 1.534109 0.990042\nv 0.194855 1.600942 1.023095\nv 0.137843 1.543638 0.974570\nv 0.194855 1.600942 1.023095\nv 0.135927 1.608932 1.017227\nv 0.202516 1.610585 1.088501\nv 1.134366 1.510121 -1.404315\nv 0.746766 1.528145 -1.716273\nv -0.746766 1.528145 -1.716273\nv -1.134366 1.510121 -1.404315\nv 1.218333 1.581962 -1.466137\nv 1.134366 1.510121 -1.404315\nv -1.134366 1.510121 -1.404315\nv -1.234373 1.581962 -1.466137\nv 1.149845 1.739922 1.466616\nv 0.756866 1.505188 1.347570\nv 1.147732 1.620725 1.314418\nv 1.147732 1.620725 1.314418\nv 0.756866 1.629535 1.468530\nv -1.147732 1.620725 1.314418\nv -0.756866 1.629535 1.468530\nv -0.756866 1.505188 1.347570\nv -1.149845 1.739922 1.466616\nv -1.147732 1.620725 1.314418\nv 0.000000 1.161420 -1.355580\nv 0.000000 1.214300 0.812231\nv 0.205069 1.138403 0.401370\nv 0.204704 1.135415 -0.071065\nv 0.203610 1.126944 -0.690056\nv 0.199956 1.124568 -1.210708\nv 0.225056 1.302510 -1.595432\nv 0.199538 1.191524 -1.439434\nv 0.202074 1.341355 -1.516672\nv 0.202074 1.341355 -1.516672\nv 0.000000 1.570728 -1.618581\nv -0.202074 1.341355 -1.516672\nv -0.199538 1.191524 -1.439434\nv -0.199956 1.124568 -1.210708\nv -0.203610 1.126944 -0.690056\nv -0.204704 1.135415 -0.071065\nv -0.205069 1.138403 0.401370\nv -0.202516 1.147349 0.705128\nv -0.228051 1.327160 0.954002\nv -0.205069 1.374352 0.924017\nv 0.000000 1.611595 1.015270\nv 0.202516 1.534109 0.990042\nv 0.205069 1.374352 0.924017\nv 0.226724 1.125998 0.783302\nv 0.228051 1.327160 0.954002\nv 0.202516 1.221079 0.856279\nv 0.311511 1.481355 -1.809752\nv 0.204643 1.568483 -1.791719\nv 0.202064 1.566797 -1.729076\nv -0.204643 1.568483 -1.791719\nv -0.202064 1.566797 -1.729076\nv -0.202064 1.566797 -1.729076\nv -0.207622 1.629611 1.384016\nv -0.205069 1.620082 1.235933\nv -0.205069 1.620082 1.235933\nv 0.207622 1.629611 1.384016\nv 0.205069 1.620082 1.235933\nv 0.379604 0.874533 -1.195191\nv 0.904848 0.874533 -1.195191\nv 0.904848 0.815478 -0.520198\nv 0.379604 0.815478 -0.520198\nv 0.273587 0.764468 -0.372655\nv 0.273587 0.640881 -0.383468\nv 0.379604 0.889062 -0.566276\nv 0.311543 0.889062 -0.566276\nv 0.273587 0.713134 -1.209311\nv 0.273587 0.874533 -1.195191\nv 1.010865 0.874533 -1.195191\nv 1.010865 0.713134 -1.209311\nv 0.904848 0.889062 -0.566276\nv 0.972909 0.889062 -0.566276\nv 1.010865 0.640881 -0.383468\nv 1.010865 0.764468 -0.372655\nv 0.379604 0.815478 -0.520198\nv 0.379604 0.961022 -1.187624\nv 0.379604 0.874533 -1.195191\nv 0.379604 0.889062 -0.566276\nv 0.273587 0.961022 -1.187624\nv 0.379604 0.961022 -1.187624\nv 0.273587 0.893428 -0.603980\nv 0.273587 0.961022 -1.187624\nv 0.379604 1.869475 -0.245377\nv 0.379604 1.455662 -0.367896\nv 0.379604 1.436212 -0.283283\nv 0.379604 1.877036 -0.331798\nv 0.904848 0.874533 -1.195191\nv 0.904848 0.889062 -0.566276\nv 0.904848 0.815478 -0.520198\nv 0.904848 0.961022 -1.187624\nv 0.904848 1.455662 -0.367896\nv 0.904848 1.436212 -0.283283\nv 0.904848 1.877036 -0.331798\nv 0.904848 1.869475 -0.245377\nv 1.010865 0.961022 -1.187624\nv 1.010865 0.893428 -0.603980\nv 0.904848 0.961022 -1.187624\nv 1.010865 0.961022 -1.187624\nv 0.942805 1.907288 -0.242069\nv 0.904848 1.903980 -0.204257\nv 0.379604 1.903980 -0.204257\nv 0.341648 1.907288 -0.242069\nv 0.311543 0.802280 -0.369347\nv 0.273587 0.764468 -0.372655\nv 0.273587 0.805720 -0.408662\nv 0.311543 1.897398 -0.129031\nv 0.311543 1.856278 -0.094527\nv 0.273587 1.859586 -0.132339\nv 0.972909 1.856278 -0.094527\nv 0.972909 1.897398 -0.129031\nv 1.010865 1.859586 -0.132339\nv 0.972909 0.802280 -0.369347\nv 1.010865 0.805720 -0.408662\nv 1.010865 0.764468 -0.372655\nv 0.273587 0.847871 -0.540482\nv 0.311543 1.911546 -0.290747\nv 0.273587 1.873729 -0.293986\nv 0.311543 1.877037 -0.331798\nv 1.010865 1.873729 -0.293986\nv 0.972909 1.911546 -0.290747\nv 0.972909 1.877037 -0.331798\nv 1.010865 0.847871 -0.540482\nv 0.379604 1.869475 -0.245377\nv 0.904848 1.869475 -0.245377\nv 0.379604 1.897398 -0.129031\nv 0.904848 1.897398 -0.129031\nv 0.273587 0.805720 -0.408662\nv 0.311543 1.423015 -0.132433\nv 0.311543 0.802280 -0.369347\nv 0.273587 1.426387 -0.170981\nv 0.311543 1.856278 -0.094527\nv 0.311543 1.423015 -0.132433\nv 0.311543 1.907288 -0.242069\nv 0.273587 1.869475 -0.245377\nv 0.311543 1.897398 -0.129031\nv 1.010865 1.869475 -0.245377\nv 0.972909 1.907288 -0.242069\nv 0.972909 1.423015 -0.132433\nv 0.972909 1.856278 -0.094527\nv 1.010865 1.426387 -0.170981\nv 0.972909 0.802280 -0.369347\nv 0.972909 1.423015 -0.132433\nv 1.010865 0.805720 -0.408662\nv 0.972909 1.897398 -0.129031\nv 0.311543 0.889062 -0.566276\nv 0.311543 1.455662 -0.367896\nv 0.311543 1.455662 -0.367896\nv 0.273587 1.447090 -0.330606\nv 0.311543 1.877037 -0.331798\nv 0.379604 1.877036 -0.331798\nv 0.311543 1.911546 -0.290747\nv 0.311543 1.907288 -0.242069\nv 0.341648 1.907288 -0.242069\nv 0.341648 1.911546 -0.290747\nv 0.904848 1.877036 -0.331798\nv 0.972909 1.877037 -0.331798\nv 1.010865 1.447090 -0.330606\nv 0.972909 1.455662 -0.367896\nv 0.972909 1.455662 -0.367896\nv 0.972909 0.889062 -0.566276\nv 0.942805 1.911546 -0.290747\nv 0.942805 1.907288 -0.242069\nv 0.972909 1.907288 -0.242069\nv 0.972909 1.911546 -0.290747\nv 0.379604 0.912668 0.085280\nv 0.904848 0.912668 0.085280\nv 0.904848 0.853614 0.760273\nv 0.379604 0.853614 0.760273\nv 0.273587 0.802604 0.907815\nv 0.273587 0.679017 0.897003\nv 0.379604 0.927197 0.714195\nv 0.311543 0.927197 0.714195\nv 0.273587 0.751269 0.071159\nv 0.273587 0.912668 0.085280\nv 1.010865 0.912668 0.085280\nv 1.010865 0.751269 0.071159\nv 0.904848 0.927197 0.714195\nv 0.972909 0.927197 0.714195\nv 1.010865 0.679017 0.897003\nv 1.010865 0.802604 0.907815\nv 0.379604 0.853614 0.760273\nv 0.379604 0.999157 0.092847\nv 0.379604 0.912668 0.085280\nv 0.379604 0.927197 0.714195\nv 0.273587 0.999157 0.092847\nv 0.379604 0.999157 0.092847\nv 0.273587 0.931564 0.676490\nv 0.273587 0.999157 0.092847\nv 0.379604 1.907611 1.035093\nv 0.379604 1.493797 0.912574\nv 0.379604 1.474347 0.997188\nv 0.379604 1.915172 0.948672\nv 0.904848 0.912668 0.085280\nv 0.904848 0.927197 0.714195\nv 0.904848 0.853614 0.760273\nv 0.904848 0.999157 0.092847\nv 0.904848 1.493797 0.912574\nv 0.904848 1.474347 0.997188\nv 0.904848 1.915172 0.948672\nv 0.904848 1.907611 1.035093\nv 1.010865 0.999157 0.092847\nv 1.010865 0.931564 0.676490\nv 0.904848 0.999157 0.092847\nv 1.010865 0.999157 0.092847\nv 0.942805 1.945423 1.038401\nv 0.904848 1.942115 1.076213\nv 0.379604 1.942115 1.076213\nv 0.341648 1.945423 1.038401\nv 0.311543 0.840416 0.911123\nv 0.273587 0.802604 0.907815\nv 0.273587 0.843855 0.871809\nv 0.311543 1.935534 1.151440\nv 0.311543 1.894413 1.185943\nv 0.273587 1.897722 1.148131\nv 0.972909 1.894413 1.185943\nv 0.972909 1.935534 1.151440\nv 1.010865 1.897722 1.148131\nv 0.972909 0.840416 0.911123\nv 1.010865 0.843855 0.871809\nv 1.010865 0.802604 0.907815\nv 0.273587 0.886006 0.739989\nv 0.311543 1.949682 0.989724\nv 0.273587 1.911864 0.986484\nv 0.311543 1.915172 0.948672\nv 1.010865 1.911864 0.986484\nv 0.972909 1.949682 0.989724\nv 0.972909 1.915172 0.948672\nv 1.010865 0.886006 0.739989\nv 0.379604 1.907611 1.035093\nv 0.904848 1.907611 1.035093\nv 0.379604 1.935534 1.151440\nv 0.904848 1.935534 1.151440\nv 0.273587 0.843855 0.871809\nv 0.311543 1.461150 1.148038\nv 0.311543 0.840416 0.911123\nv 0.273587 1.464522 1.109489\nv 0.311543 1.894413 1.185943\nv 0.311543 1.461150 1.148038\nv 0.311543 1.945423 1.038401\nv 0.311543 1.935534 1.151440\nv 0.311543 1.935534 1.151440\nv 0.972909 1.935534 1.151440\nv 0.972909 1.945423 1.038401\nv 0.972909 1.461150 1.148038\nv 0.972909 1.894413 1.185943\nv 1.010865 1.464522 1.109489\nv 0.972909 0.840416 0.911123\nv 0.972909 1.461150 1.148038\nv 1.010865 0.843855 0.871809\nv 0.972909 1.935534 1.151440\nv 0.311543 0.927197 0.714195\nv 0.311543 1.493797 0.912574\nv 0.311543 1.493797 0.912574\nv 0.273587 1.485226 0.949864\nv 0.311543 1.915172 0.948672\nv 0.379604 1.915172 0.948672\nv 0.311543 1.949682 0.989724\nv 0.341648 1.945423 1.038401\nv 0.341648 1.949682 0.989724\nv 0.904848 1.915172 0.948672\nv 0.972909 1.915172 0.948672\nv 1.010865 1.485226 0.949864\nv 0.972909 1.493797 0.912574\nv 0.972909 1.493797 0.912574\nv 0.972909 0.927197 0.714195\nv 0.942805 1.949682 0.989724\nv 0.942805 1.945423 1.038401\nv 0.972909 1.949682 0.989724\nv -0.904851 0.912668 0.085280\nv -0.379608 0.912668 0.085280\nv -0.379608 0.853614 0.760273\nv -0.904851 0.853614 0.760273\nv -1.010869 0.802604 0.907815\nv -1.010869 0.679017 0.897003\nv -0.904851 0.927197 0.714195\nv -0.972912 0.927197 0.714195\nv -1.010869 0.751269 0.071159\nv -1.010869 0.912668 0.085280\nv -0.273590 0.912668 0.085280\nv -0.273590 0.751269 0.071159\nv -0.379608 0.927197 0.714195\nv -0.311547 0.927197 0.714195\nv -0.273590 0.679017 0.897003\nv -0.273590 0.802604 0.907815\nv -0.904851 0.853614 0.760273\nv -0.904851 0.999157 0.092847\nv -0.904851 0.912668 0.085280\nv -0.904851 0.927197 0.714195\nv -1.010869 0.999157 0.092847\nv -0.904851 0.999157 0.092847\nv -1.010869 0.931564 0.676490\nv -1.010869 0.999157 0.092847\nv -0.904851 1.907611 1.035093\nv -0.904851 1.493797 0.912574\nv -0.904851 1.474347 0.997188\nv -0.904851 1.915172 0.948672\nv -0.379608 0.912668 0.085280\nv -0.379608 0.927197 0.714195\nv -0.379608 0.853614 0.760273\nv -0.379608 0.999157 0.092847\nv -0.379608 1.493797 0.912574\nv -0.379608 1.474347 0.997188\nv -0.379608 1.915172 0.948672\nv -0.379608 1.907611 1.035093\nv -0.273590 0.999157 0.092847\nv -0.273590 0.931564 0.676490\nv -0.379608 0.999157 0.092847\nv -0.273590 0.999157 0.092847\nv -0.341651 1.945423 1.038401\nv -0.379608 1.942115 1.076213\nv -0.904851 1.942115 1.076213\nv -0.942807 1.945423 1.038401\nv -0.972912 0.840416 0.911123\nv -1.010869 0.802604 0.907815\nv -1.010869 0.843855 0.871809\nv -0.972912 1.935534 1.151440\nv -0.972912 1.894413 1.185943\nv -1.010869 1.897722 1.148131\nv -0.311547 1.894413 1.185943\nv -0.311547 1.935534 1.151440\nv -0.273590 1.897722 1.148131\nv -0.311547 0.840416 0.911123\nv -0.273590 0.843855 0.871809\nv -0.273590 0.802604 0.907815\nv -1.010869 0.886006 0.739989\nv -0.972912 1.949682 0.989724\nv -1.010869 1.911864 0.986484\nv -0.972912 1.915172 0.948672\nv -0.273590 1.911864 0.986484\nv -0.311547 1.949682 0.989724\nv -0.311547 1.915172 0.948672\nv -0.273590 0.886006 0.739989\nv -0.904851 1.907611 1.035093\nv -0.379608 1.907611 1.035093\nv -0.904851 1.935534 1.151440\nv -0.379608 1.935534 1.151440\nv -1.010869 0.843855 0.871809\nv -0.972912 1.461150 1.148038\nv -0.972912 0.840416 0.911123\nv -1.010869 1.464522 1.109489\nv -0.972912 1.894413 1.185943\nv -0.972912 1.461150 1.148038\nv -0.972912 1.945423 1.038401\nv -0.972912 1.935534 1.151440\nv -0.972912 1.935534 1.151440\nv -0.311547 1.935534 1.151440\nv -0.311547 1.945423 1.038401\nv -0.311547 1.461150 1.148038\nv -0.311547 1.894413 1.185943\nv -0.273590 1.464522 1.109489\nv -0.311547 0.840416 0.911123\nv -0.311547 1.461150 1.148038\nv -0.273590 0.843855 0.871809\nv -0.311547 1.935534 1.151440\nv -0.972912 0.927197 0.714195\nv -0.972912 1.493797 0.912574\nv -0.972912 1.493797 0.912574\nv -1.010869 1.485226 0.949864\nv -0.972912 1.915172 0.948672\nv -0.904851 1.915172 0.948672\nv -0.972912 1.949682 0.989724\nv -0.942807 1.945423 1.038401\nv -0.904851 1.915172 0.948672\nv -0.904851 1.907611 1.035093\nv -0.942807 1.949682 0.989724\nv -0.379608 1.915172 0.948672\nv -0.311547 1.915172 0.948672\nv -0.273590 1.485226 0.949864\nv -0.311547 1.493797 0.912574\nv -0.311547 1.493797 0.912574\nv -0.311547 0.927197 0.714195\nv -0.341651 1.949682 0.989724\nv -0.341651 1.945423 1.038401\nv -0.311547 1.949682 0.989724\nv -0.442511 0.999500 -1.273974\nv -0.523736 0.999954 -1.277215\nv -0.596982 1.002368 -1.227477\nv -0.518128 0.933712 -0.561624\nv -0.638991 0.933712 -0.560950\nv -0.456991 0.953045 -0.554999\nv -0.299912 1.514158 -1.535573\nv -0.315010 1.569232 -1.525607\nv -0.272388 1.459084 -1.525607\nv -0.358229 0.935163 -0.710428\nv -0.361174 0.954467 -0.652881\nv -0.339729 0.933180 -0.815874\nv -0.385147 1.533095 -1.343471\nv -0.370135 1.478594 -1.397178\nv -0.370135 1.478594 -1.397178\nv -0.334418 1.487203 -1.404512\nv -0.397447 1.470559 -1.343471\nv -0.456991 0.953045 -0.554999\nv -0.460321 1.007969 -0.514272\nv -0.399996 0.934150 -0.615425\nv -0.353251 1.011168 -0.637102\nv -0.361174 0.954467 -0.652881\nv -0.395018 1.009281 -0.567844\nv -0.410589 1.108502 -0.540690\nv -0.395018 1.009281 -0.567844\nv -0.464768 1.479944 -0.751371\nv -0.467227 1.388592 -0.756730\nv -0.393535 1.439097 -0.701203\nv -0.400485 1.379669 -0.707041\nv -0.467227 1.388592 -0.756730\nv -0.469721 1.302467 -0.773412\nv -0.469721 1.302467 -0.773412\nv -0.474519 1.215665 -0.813249\nv -0.405155 1.299896 -0.727403\nv -0.411245 1.214300 -0.768720\nv -0.417010 1.145507 -0.868383\nv -0.411245 1.214300 -0.768720\nv -0.413634 1.081807 -1.235533\nv -0.387118 0.998135 -1.264253\nv -0.362576 0.919292 -1.182420\nv -0.387118 0.998135 -1.264253\nv -0.411245 1.205814 -0.511361\nv -0.474519 1.204263 -0.453842\nv -0.402088 1.302084 -0.476797\nv -0.411245 1.205814 -0.511361\nv -0.466507 1.300400 -0.417922\nv -0.454369 1.393944 -0.379572\nv -0.347559 1.397676 -0.505107\nv -0.360597 1.302727 -0.549518\nv -0.332063 1.496045 -0.466510\nv -0.389001 1.493330 -0.395123\nv -0.388217 1.398179 -0.433942\nv -0.423807 1.586767 -0.372668\nv -0.423807 1.586767 -0.372668\nv -0.372710 1.584442 -0.427611\nv -0.469874 1.662516 -0.370345\nv -0.576891 0.943045 -1.188755\nv -0.517740 0.919746 -1.227427\nv -0.427561 0.919633 -1.216175\nv -0.638991 0.919201 -0.903920\nv -0.602021 0.926990 -1.078214\nv -0.638991 1.124678 -0.917885\nv -0.584567 1.065448 -1.188829\nv -0.596982 1.002368 -1.227477\nv -0.576891 0.943045 -1.188755\nv -0.607778 1.092234 -1.078314\nv -0.420702 1.116137 -1.063781\nv -0.328727 0.926080 -0.991042\nv -0.362576 0.919292 -1.182420\nv -0.361434 0.899449 -1.022508\nv -0.424452 1.658931 -0.425840\nv -0.355918 1.638780 -0.494283\nv -0.321437 1.582682 -0.488609\nv -0.321437 1.582682 -0.488609\nv -0.296151 1.521158 -0.519338\nv -0.355918 1.638780 -0.494283\nv -0.310399 1.619461 -0.594039\nv -0.321900 1.447993 -0.555655\nv -0.300290 1.473235 -0.574960\nv -0.344939 1.428782 -0.630823\nv -0.300290 1.473235 -0.574960\nv -0.329794 1.450280 -0.641120\nv -0.279867 1.468261 -0.647741\nv -0.344939 1.428782 -0.630823\nv -0.329794 1.450280 -0.641120\nv -0.380601 1.463654 -0.703462\nv -0.430871 1.506339 -0.739865\nv -0.430871 1.506339 -0.739865\nv -0.430871 1.506339 -0.739865\nv -0.430965 1.557117 -0.761960\nv -0.458760 1.571316 -0.728209\nv -0.411063 1.499014 -0.768428\nv -0.517484 1.654938 -0.672776\nv -0.461513 1.633709 -0.693058\nv -0.427781 1.612731 -0.738409\nv -0.340652 1.648103 -0.634371\nv -0.324371 1.606068 -0.784932\nv -0.292345 1.580936 -0.763385\nv -0.291222 1.548828 -0.965012\nv -0.268366 1.440733 -0.790212\nv -0.265060 1.414911 -0.973941\nv -0.392404 1.462680 -0.853780\nv -0.427781 1.612731 -0.738409\nv -0.380574 1.425274 -0.992796\nv -0.408567 1.568967 -0.839126\nv -0.404745 1.645137 -0.715172\nv -0.388346 1.599655 -0.827354\nv -0.383347 1.558512 -0.986190\nv -0.388346 1.599655 -0.827354\nv -0.354014 1.553103 -1.364655\nv -0.295762 1.562294 -1.319691\nv -0.296501 1.548761 -1.161610\nv -0.302143 1.423708 -1.364655\nv -0.269222 1.415054 -1.170499\nv -0.268229 1.426466 -1.333026\nv -0.351804 1.421329 -1.343471\nv -0.378762 1.431614 -1.301700\nv -0.378762 1.431614 -1.301700\nv -0.381249 1.414726 -1.182352\nv -0.385147 1.533095 -1.343471\nv -0.385916 1.548030 -1.182352\nv -0.595987 1.704514 -0.641642\nv -0.638991 1.709236 -0.641642\nv -0.553403 1.700040 -0.631770\nv -0.518790 1.670613 -0.338100\nv -0.469874 1.662516 -0.370345\nv -0.504440 1.704604 -0.391923\nv -0.542571 1.710821 -0.363762\nv -0.504088 1.831495 -0.371109\nv -0.499701 1.889917 -0.369635\nv -0.551983 1.832572 -0.323358\nv -0.558083 1.785810 -0.336982\nv -0.454966 1.886831 -0.551490\nv -0.461087 1.827854 -0.551902\nv -0.495851 1.773396 -0.612046\nv -0.482343 1.820928 -0.615341\nv -0.531870 2.054485 -0.395548\nv -0.565136 2.054323 -0.358435\nv -0.507987 2.054760 -0.444077\nv -0.509450 2.002290 -0.380368\nv -0.531870 2.054485 -0.395548\nv -0.477206 2.002058 -0.436013\nv -0.601331 2.054573 -0.344677\nv -0.638991 2.054800 -0.343637\nv -0.565136 2.054323 -0.358435\nv -0.552465 2.002604 -0.337774\nv -0.529824 1.764836 -0.665854\nv -0.481595 1.785038 -0.435974\nv -0.514880 1.785380 -0.380033\nv -0.558083 1.785810 -0.336982\nv -0.476611 1.782044 -0.549783\nv -0.470349 1.784925 -0.491825\nv -0.495851 1.773396 -0.612046\nv -0.559015 1.728855 -0.391238\nv -0.573207 1.744145 -0.401047\nv -0.605186 1.744695 -0.392993\nv -0.579084 1.756407 -0.392703\nv -0.638991 1.745015 -0.392993\nv -0.509395 1.725958 -0.454256\nv -0.528958 1.727023 -0.417009\nv -0.547897 1.756054 -0.418732\nv -0.524128 1.755851 -0.454584\nv -0.579084 1.756407 -0.392703\nv -0.573207 1.744145 -0.401047\nv -0.544882 1.743772 -0.425209\nv -0.512102 1.728441 -0.541362\nv -0.502873 1.727221 -0.497274\nv -0.516184 1.755784 -0.493136\nv -0.526812 1.743558 -0.535274\nv -0.518382 1.743487 -0.495581\nv -0.523867 1.755384 -0.536222\nv -0.524128 1.755851 -0.454584\nv -0.525007 1.743558 -0.458910\nv -0.502873 1.727221 -0.497274\nv -0.518382 1.743487 -0.495581\nv -0.575264 1.726160 -0.610798\nv -0.539791 1.727249 -0.581818\nv -0.584040 1.744145 -0.611270\nv -0.552103 1.743772 -0.578041\nv -0.552103 1.743772 -0.578041\nv -0.546983 1.754186 -0.585679\nv -0.477206 2.002058 -0.436013\nv -0.548578 1.948215 -0.325449\nv -0.500108 1.947141 -0.372226\nv -0.466305 2.001981 -0.491820\nv -0.457447 1.945325 -0.550872\nv -0.450072 1.945809 -0.491733\nv -0.472870 2.001851 -0.547956\nv -0.466305 2.001981 -0.491820\nv -0.493023 2.001455 -0.604586\nv -0.528110 2.001146 -0.651075\nv -0.334418 1.487203 -1.404512\nv -0.304715 1.494254 -1.426513\nv -0.354014 1.553103 -1.364655\nv -0.290906 1.498959 -1.458480\nv -0.321772 1.554931 -1.423550\nv -0.291749 1.586022 -1.455517\nv -0.306284 1.581317 -1.414660\nv -0.276589 1.570987 -1.405771\nv -0.261510 1.575691 -1.453295\nv -0.274235 1.440393 -1.423550\nv -0.249454 1.434453 -1.414660\nv -0.260245 1.445097 -1.457740\nv -0.234920 1.439157 -1.455517\nv -0.260245 1.445097 -1.457740\nv -0.290906 1.498959 -1.458480\nv -0.307781 1.559636 -1.457740\nv -0.321196 1.548356 -1.517856\nv -0.314559 1.503935 -1.525607\nv -0.287440 1.464814 -1.517856\nv -0.307781 1.559636 -1.457740\nv -0.319687 1.561204 -1.495711\nv -0.291749 1.586022 -1.455517\nv -0.303473 1.587590 -1.495711\nv -0.288108 1.561550 -1.517856\nv -0.315010 1.569232 -1.525607\nv -0.315010 1.569232 -1.525607\nv -0.321196 1.548356 -1.517856\nv -0.273052 1.577260 -1.495711\nv -0.258720 1.481911 -1.517856\nv -0.272839 1.524381 -1.525607\nv -0.288108 1.561550 -1.517856\nv -0.272150 1.446665 -1.495711\nv -0.246644 1.440726 -1.495711\nv -0.287440 1.464814 -1.517856\nv -0.272388 1.459084 -1.525607\nv -0.272388 1.459084 -1.525607\nv -0.542571 1.710821 -0.363762\nv -0.588766 1.713320 -0.354375\nv -0.597017 1.729892 -0.382648\nv -0.638991 1.713640 -0.354375\nv -0.638991 1.730211 -0.382648\nv -0.574350 1.879051 -0.700114\nv -0.574880 1.812003 -0.705016\nv -0.580285 1.762218 -0.698445\nv -0.580285 1.762218 -0.698445\nv -0.638991 1.762395 -0.709437\nv -0.592323 2.055872 -0.650091\nv -0.528110 2.001146 -0.651075\nv -0.551591 2.055454 -0.631167\nv -0.638991 2.056104 -0.654203\nv -0.638991 1.757223 -0.383312\nv -0.609284 1.756924 -0.383618\nv -0.599087 1.786188 -0.319804\nv -0.638991 1.786365 -0.317684\nv -0.612408 1.744694 -0.622346\nv -0.575264 1.726160 -0.610798\nv -0.584040 1.744145 -0.611270\nv -0.607849 1.727690 -0.620459\nv -0.638991 1.745013 -0.622346\nv -0.638991 1.729109 -0.620459\nv -0.579480 2.001273 -0.676785\nv -0.574687 1.942237 -0.692082\nv -0.754245 0.999954 -1.277215\nv -0.681000 1.002368 -1.227477\nv -0.835471 0.999500 -1.273974\nv -0.820991 0.953045 -0.554999\nv -0.759854 0.933712 -0.561624\nv -1.005594 1.459084 -1.525607\nv -0.978070 1.514158 -1.535573\nv -0.962973 1.569232 -1.525607\nv -0.938253 0.933180 -0.815874\nv -0.919752 0.935163 -0.710428\nv -0.916807 0.954467 -0.652881\nv -0.880535 1.470559 -1.343471\nv -0.907846 1.478594 -1.397178\nv -0.892834 1.533095 -1.343471\nv -0.943564 1.487203 -1.404512\nv -0.907846 1.478594 -1.397178\nv -0.820991 0.953045 -0.554999\nv -0.877985 0.934150 -0.615425\nv -0.817662 1.007969 -0.514272\nv -0.882964 1.009281 -0.567844\nv -0.882964 1.009281 -0.567844\nv -0.867393 1.108502 -0.540690\nv -0.924731 1.011168 -0.637102\nv -0.916807 0.954467 -0.652881\nv -0.813214 1.479944 -0.751371\nv -0.810755 1.388592 -0.756730\nv -0.810755 1.388592 -0.756730\nv -0.877496 1.379669 -0.707041\nv -0.808261 1.302467 -0.773412\nv -0.884447 1.439097 -0.701203\nv -0.872827 1.299896 -0.727403\nv -0.866736 1.214300 -0.768720\nv -0.860972 1.145507 -0.868383\nv -0.835471 0.999500 -1.273974\nv -0.890864 0.998135 -1.264253\nv -0.850421 0.919633 -1.216175\nv -0.890864 0.998135 -1.264253\nv -0.915406 0.919292 -1.182420\nv -0.864348 1.081807 -1.235533\nv -0.803463 1.204263 -0.453842\nv -0.866736 1.205814 -0.511361\nv -0.811476 1.300400 -0.417922\nv -0.866736 1.205814 -0.511361\nv -0.875894 1.302084 -0.476797\nv -0.823613 1.393944 -0.379572\nv -0.889765 1.398179 -0.433942\nv -0.945919 1.496045 -0.466510\nv -0.888981 1.493330 -0.395123\nv -0.930423 1.397675 -0.505107\nv -0.917384 1.302727 -0.549518\nv -0.854175 1.586767 -0.372668\nv -0.808108 1.662516 -0.370345\nv -0.905272 1.584442 -0.427611\nv -0.854175 1.586767 -0.372668\nv -0.760242 0.919746 -1.227427\nv -0.850421 0.919633 -1.216175\nv -0.701091 0.943045 -1.188755\nv -0.638991 0.919201 -0.903920\nv -0.638991 1.014441 -0.978789\nv -0.675961 0.926990 -1.078214\nv -0.649547 1.009611 -1.078264\nv -0.693415 1.065448 -1.188829\nv -0.681000 1.002368 -1.227477\nv -0.638991 1.014441 -0.978789\nv -0.638991 1.124678 -0.917885\nv -0.670204 1.092234 -1.078314\nv -0.857279 1.116137 -1.063781\nv -0.898198 1.086777 -1.042568\nv -0.910006 1.117977 -0.794793\nv -0.949256 0.926080 -0.991042\nv -0.916548 0.899449 -1.022508\nv -0.915406 0.919292 -1.182420\nv -0.853530 1.658931 -0.425840\nv -0.922064 1.638780 -0.494283\nv -0.922064 1.638780 -0.494283\nv -0.956545 1.582682 -0.488609\nv -0.967583 1.619461 -0.594039\nv -0.981831 1.521158 -0.519338\nv -0.956545 1.582682 -0.488609\nv -0.977692 1.473235 -0.574960\nv -0.998115 1.468261 -0.647741\nv -0.956082 1.447993 -0.555655\nv -0.948188 1.450280 -0.641120\nv -0.977692 1.473235 -0.574960\nv -0.933043 1.428782 -0.630823\nv -0.933043 1.428782 -0.630823\nv -0.948188 1.450280 -0.641120\nv -0.897380 1.463654 -0.703462\nv -0.847111 1.506339 -0.739865\nv -0.847111 1.506339 -0.739865\nv -0.847111 1.506339 -0.739865\nv -0.819221 1.571316 -0.728209\nv -0.866920 1.499014 -0.768428\nv -0.819221 1.571316 -0.728209\nv -0.847017 1.557117 -0.761960\nv -0.816468 1.633709 -0.693058\nv -0.760498 1.654938 -0.672776\nv -0.816468 1.633709 -0.693058\nv -0.850200 1.612731 -0.738409\nv -0.937330 1.648103 -0.634371\nv -0.985637 1.580936 -0.763385\nv -0.953610 1.606068 -0.784932\nv -0.986760 1.548828 -0.965012\nv -1.009616 1.440733 -0.790212\nv -1.012922 1.414911 -0.973941\nv -0.885578 1.462680 -0.853780\nv -0.897408 1.425274 -0.992796\nv -0.850200 1.612731 -0.738409\nv -0.873237 1.645137 -0.715172\nv -0.869415 1.568967 -0.839126\nv -0.889636 1.599655 -0.827354\nv -0.889636 1.599655 -0.827354\nv -0.894634 1.558512 -0.986190\nv -0.923968 1.553103 -1.364655\nv -0.981481 1.548761 -1.161610\nv -0.982220 1.562294 -1.319691\nv -1.008759 1.415054 -1.170499\nv -1.009753 1.426466 -1.333026\nv -0.975839 1.423708 -1.364655\nv -0.926178 1.421329 -1.343471\nv -0.899220 1.431614 -1.301700\nv -0.896733 1.414726 -1.182352\nv -0.899220 1.431614 -1.301700\nv -0.892066 1.548030 -1.182352\nv -0.892834 1.533095 -1.343471\nv -0.724578 1.700040 -0.631770\nv -0.681995 1.704514 -0.641642\nv -0.759192 1.670613 -0.338100\nv -0.735411 1.710821 -0.363762\nv -0.773542 1.704604 -0.391923\nv -0.808108 1.662516 -0.370345\nv -0.725998 1.832572 -0.323358\nv -0.719899 1.785810 -0.336982\nv -0.773894 1.831495 -0.371109\nv -0.778280 1.889917 -0.369635\nv -0.782130 1.773396 -0.612046\nv -0.795640 1.820928 -0.615341\nv -0.823017 1.886831 -0.551490\nv -0.816894 1.827854 -0.551902\nv -0.707617 2.084272 -0.600159\nv -0.720164 2.093815 -0.558055\nv -0.726391 2.055454 -0.631167\nv -0.755252 2.055130 -0.590848\nv -0.784959 2.001455 -0.604586\nv -0.742941 2.083551 -0.532093\nv -0.735142 2.093356 -0.492829\nv -0.741867 2.083113 -0.453781\nv -0.717879 2.092829 -0.429600\nv -0.769995 2.054760 -0.444077\nv -0.746112 2.054485 -0.395548\nv -0.800775 2.002058 -0.436013\nv -0.746112 2.054485 -0.395548\nv -0.768531 2.002290 -0.380368\nv -0.717879 2.092829 -0.429600\nv -0.712846 2.054322 -0.358435\nv -0.701596 2.082670 -0.389163\nv -0.676333 2.092727 -0.396227\nv -0.712846 2.054322 -0.358435\nv -0.676651 2.054573 -0.344677\nv -0.725516 2.002604 -0.337774\nv -0.676333 2.092727 -0.396227\nv -0.638991 2.054800 -0.343637\nv -0.676651 2.054573 -0.344677\nv -0.638991 2.093040 -0.396087\nv -0.748158 1.764836 -0.665854\nv -0.763102 1.785380 -0.380033\nv -0.719899 1.785810 -0.336982\nv -0.796386 1.785038 -0.435974\nv -0.807633 1.784925 -0.491825\nv -0.801370 1.782044 -0.549783\nv -0.782130 1.773396 -0.612046\nv -0.718967 1.728855 -0.391238\nv -0.680965 1.729892 -0.382648\nv -0.672796 1.744695 -0.392993\nv -0.672796 1.744695 -0.392993\nv -0.704774 1.744145 -0.401047\nv -0.698898 1.756407 -0.392703\nv -0.768588 1.725958 -0.454256\nv -0.749024 1.727023 -0.417009\nv -0.704774 1.744145 -0.401047\nv -0.733100 1.743772 -0.425209\nv -0.698898 1.756407 -0.392703\nv -0.730085 1.756054 -0.418732\nv -0.753853 1.755851 -0.454584\nv -0.765879 1.728441 -0.541362\nv -0.775109 1.727221 -0.497274\nv -0.775109 1.727221 -0.497274\nv -0.759600 1.743487 -0.495581\nv -0.759600 1.743487 -0.495581\nv -0.753853 1.755851 -0.454584\nv -0.752975 1.743558 -0.458910\nv -0.761798 1.755784 -0.493136\nv -0.751170 1.743558 -0.535274\nv -0.754115 1.755384 -0.536222\nv -0.702718 1.726160 -0.610798\nv -0.738191 1.727249 -0.581818\nv -0.751170 1.743558 -0.535274\nv -0.765879 1.728441 -0.541362\nv -0.725879 1.743772 -0.578041\nv -0.730998 1.754186 -0.585679\nv -0.693942 1.744145 -0.611270\nv -0.725879 1.743772 -0.578041\nv -0.777874 1.947141 -0.372226\nv -0.729403 1.948215 -0.325449\nv -0.800775 2.002058 -0.436013\nv -0.811677 2.001981 -0.491820\nv -0.820535 1.945325 -0.550872\nv -0.811677 2.001981 -0.491820\nv -0.827910 1.945809 -0.491733\nv -0.805112 2.001851 -0.547956\nv -0.923968 1.553103 -1.364655\nv -0.956210 1.554931 -1.423550\nv -0.956210 1.554931 -1.423550\nv -0.971698 1.581317 -1.414660\nv -0.970200 1.559636 -1.457740\nv -0.986233 1.586022 -1.455517\nv -1.001393 1.570987 -1.405771\nv -1.016472 1.575691 -1.453295\nv -1.028527 1.434453 -1.414660\nv -1.017737 1.445097 -1.457740\nv -1.043062 1.439157 -1.455517\nv -1.003747 1.440393 -1.423550\nv -0.963423 1.503935 -1.525607\nv -0.990542 1.464814 -1.517856\nv -0.975110 1.500527 -1.495711\nv -0.956786 1.548356 -1.517856\nv -0.963423 1.503935 -1.525607\nv -0.987076 1.498959 -1.458480\nv -0.970200 1.559636 -1.457740\nv -0.986233 1.586022 -1.455517\nv -0.962973 1.569232 -1.525607\nv -0.974509 1.587590 -1.495711\nv -0.989874 1.561550 -1.517856\nv -0.962973 1.569232 -1.525607\nv -1.004930 1.577260 -1.495711\nv -1.005144 1.524381 -1.525607\nv -0.989874 1.561550 -1.517856\nv -1.019262 1.481911 -1.517856\nv -1.005594 1.459084 -1.525607\nv -1.031338 1.440726 -1.495711\nv -0.990542 1.464814 -1.517856\nv -1.005594 1.459084 -1.525607\nv -1.005831 1.446665 -1.495711\nv -0.680965 1.729892 -0.382648\nv -0.689216 1.713320 -0.354375\nv -0.735411 1.710821 -0.363762\nv -0.697696 1.762218 -0.698445\nv -0.703102 1.812003 -0.705016\nv -0.697696 1.762218 -0.698445\nv -0.758292 1.814079 -0.670298\nv -0.759942 1.879974 -0.666937\nv -0.685660 2.055872 -0.650091\nv -0.749872 2.001146 -0.651075\nv -0.726391 2.055454 -0.631167\nv -0.678586 2.094701 -0.594960\nv -0.685660 2.055872 -0.650091\nv -0.668698 1.756924 -0.383618\nv -0.678895 1.786188 -0.319804\nv -0.670133 1.727690 -0.620459\nv -0.665574 1.744694 -0.622346\nv -0.702718 1.726160 -0.610798\nv -0.693942 1.744145 -0.611270\nv -0.759095 1.942491 -0.661764\nv -0.904851 0.874533 -1.195191\nv -0.379608 0.874533 -1.195191\nv -0.379608 0.815478 -0.520198\nv -0.904851 0.815478 -0.520198\nv -1.010869 0.764468 -0.372655\nv -1.010869 0.640881 -0.383468\nv -0.904851 0.889062 -0.566276\nv -0.972912 0.889062 -0.566276\nv -1.010869 0.713134 -1.209311\nv -1.010869 0.874533 -1.195191\nv -0.273590 0.874533 -1.195191\nv -0.273590 0.713134 -1.209311\nv -0.379608 0.889062 -0.566276\nv -0.311547 0.889062 -0.566276\nv -0.273590 0.640881 -0.383468\nv -0.273590 0.764468 -0.372655\nv -0.904851 0.815478 -0.520198\nv -0.904851 0.961022 -1.187624\nv -0.904851 0.874533 -1.195191\nv -0.904851 0.889062 -0.566276\nv -1.010869 0.961022 -1.187624\nv -0.904851 0.961022 -1.187624\nv -1.010869 0.893428 -0.603980\nv -1.010869 0.961022 -1.187624\nv -0.904851 1.869475 -0.245377\nv -0.904851 1.455662 -0.367896\nv -0.904851 1.436212 -0.283283\nv -0.904851 1.877036 -0.331798\nv -0.379608 0.874533 -1.195191\nv -0.379608 0.889062 -0.566276\nv -0.379608 0.815478 -0.520198\nv -0.379608 0.961022 -1.187624\nv -0.379608 1.455662 -0.367896\nv -0.379608 1.436212 -0.283283\nv -0.379608 1.877036 -0.331798\nv -0.379608 1.869475 -0.245377\nv -0.273590 0.961022 -1.187624\nv -0.273590 0.893428 -0.603980\nv -0.379608 0.961022 -1.187624\nv -0.273590 0.961022 -1.187624\nv -0.341651 1.907288 -0.242069\nv -0.379608 1.903980 -0.204257\nv -0.904851 1.903980 -0.204257\nv -0.942807 1.907288 -0.242069\nv -0.972912 0.802280 -0.369347\nv -1.010869 0.764468 -0.372655\nv -1.010869 0.805720 -0.408662\nv -0.972912 1.897398 -0.129031\nv -0.972912 1.856278 -0.094527\nv -1.010869 1.859586 -0.132339\nv -0.311547 1.856278 -0.094527\nv -0.311547 1.897398 -0.129031\nv -0.273590 1.859586 -0.132339\nv -0.311547 0.802280 -0.369347\nv -0.273590 0.805720 -0.408662\nv -0.273590 0.764468 -0.372655\nv -1.010869 0.847871 -0.540482\nv -0.972912 1.911546 -0.290747\nv -1.010869 1.873729 -0.293986\nv -0.972912 1.877037 -0.331798\nv -0.273590 1.873729 -0.293986\nv -0.311547 1.911546 -0.290747\nv -0.311547 1.877037 -0.331798\nv -0.273590 0.847871 -0.540482\nv -0.904851 1.869475 -0.245377\nv -0.379608 1.869475 -0.245377\nv -0.904851 1.897398 -0.129031\nv -0.379608 1.897398 -0.129031\nv -1.010869 0.805720 -0.408662\nv -0.972912 1.423015 -0.132433\nv -0.972912 0.802280 -0.369347\nv -1.010869 1.426387 -0.170981\nv -0.972912 1.856278 -0.094527\nv -0.972912 1.423015 -0.132433\nv -0.972912 1.907288 -0.242069\nv -1.010869 1.869475 -0.245377\nv -0.972912 1.897398 -0.129031\nv -0.273590 1.869475 -0.245377\nv -0.311547 1.907288 -0.242069\nv -0.311547 1.423015 -0.132433\nv -0.311547 1.856278 -0.094527\nv -0.273590 1.426387 -0.170981\nv -0.311547 0.802280 -0.369347\nv -0.311547 1.423015 -0.132433\nv -0.273590 0.805720 -0.408662\nv -0.311547 1.897398 -0.129031\nv -0.972912 0.889062 -0.566276\nv -0.972912 1.455662 -0.367896\nv -0.972912 1.455662 -0.367896\nv -1.010869 1.447090 -0.330606\nv -0.972912 1.877037 -0.331798\nv -0.904851 1.877036 -0.331798\nv -0.972912 1.911546 -0.290747\nv -0.972912 1.907288 -0.242069\nv -0.942807 1.907288 -0.242069\nv -0.904851 1.877036 -0.331798\nv -0.904851 1.869475 -0.245377\nv -0.942807 1.911546 -0.290747\nv -0.379608 1.877036 -0.331798\nv -0.311547 1.877037 -0.331798\nv -0.273590 1.447090 -0.330606\nv -0.311547 1.455662 -0.367896\nv -0.311547 1.455662 -0.367896\nv -0.311547 0.889062 -0.566276\nv -0.341651 1.911546 -0.290747\nv -0.341651 1.907288 -0.242069\nv -0.311547 1.907288 -0.242069\nv -0.311547 1.911546 -0.290747\nv -0.632123 1.005919 -1.257315\nv -0.779558 1.033476 -1.267345\nv -0.632123 1.092064 -1.288669\nv -0.744475 1.113065 -1.296313\nv -0.632123 1.060710 -1.374815\nv -0.744475 1.081710 -1.382458\nv -0.632123 1.011143 -1.376979\nv -0.762017 1.035423 -1.385816\nv -0.632123 0.974564 -1.343460\nv -0.779558 1.002122 -1.353491\nv -0.786824 1.001316 -1.304418\nv -0.779558 1.033476 -1.267345\nv -0.904548 1.111956 -1.295909\nv -0.839724 1.172869 -1.318080\nv -0.737210 1.113871 -1.345385\nv -0.744475 1.081710 -1.382458\nv -0.826298 1.169808 -1.365744\nv -0.839724 1.141515 -1.404225\nv -0.779558 1.002122 -1.353491\nv -0.917973 1.083663 -1.334390\nv -0.904548 1.080601 -1.382055\nv -0.988063 1.229407 -1.338658\nv -0.903367 1.262373 -1.350657\nv -0.885826 1.253524 -1.396214\nv -0.903367 1.231019 -1.436803\nv -0.904548 1.080601 -1.382055\nv -1.005604 1.206903 -1.379246\nv -0.917973 1.083663 -1.334390\nv -0.988063 1.198053 -1.424803\nv -1.017390 1.367951 -1.389084\nv -0.903367 1.262373 -1.350657\nv -0.885826 1.253524 -1.396214\nv -0.925716 1.367951 -1.389084\nv -0.906729 1.352274 -1.432157\nv -0.925716 1.336597 -1.475230\nv -1.036376 1.352274 -1.432157\nv -1.017390 1.336597 -1.475230\nv -1.036376 1.352274 -1.432157\nv -1.017390 1.367951 -1.389084\nv -0.988063 1.506495 -1.439509\nv -0.903367 1.473529 -1.427511\nv -0.906729 1.352274 -1.432157\nv -0.925716 1.336597 -1.475230\nv -0.885826 1.451024 -1.468099\nv -0.903367 1.442174 -1.513656\nv -1.005604 1.497645 -1.485067\nv -0.988063 1.475141 -1.525655\nv -0.904548 1.623947 -1.482258\nv -0.839724 1.563033 -1.460088\nv -0.826298 1.534740 -1.498569\nv -0.839724 1.531678 -1.546233\nv -0.988063 1.475141 -1.525655\nv -0.917973 1.620885 -1.529923\nv -1.005604 1.497645 -1.485067\nv -0.904548 1.592592 -1.568404\nv -0.779558 1.702426 -1.510822\nv -0.839724 1.563033 -1.460088\nv -0.826298 1.534740 -1.498569\nv -0.744475 1.622838 -1.481855\nv -0.826298 1.534740 -1.498569\nv -0.839724 1.531678 -1.546233\nv -0.737210 1.590677 -1.518928\nv -0.744475 1.591483 -1.568000\nv -0.786824 1.703232 -1.559895\nv -0.779558 1.671071 -1.596968\nv -0.786824 1.703232 -1.559895\nv -0.779558 1.702426 -1.510822\nv -0.632123 1.729984 -1.520853\nv -0.744475 1.622838 -1.481855\nv -0.632123 1.643838 -1.489498\nv -0.632123 1.612484 -1.575644\nv -0.632123 1.732148 -1.570419\nv -0.632123 1.698629 -1.606998\nv -0.484688 1.702426 -1.510822\nv -0.519769 1.622838 -1.481855\nv -0.632123 1.612484 -1.575644\nv -0.632123 1.649063 -1.609163\nv -0.519769 1.591483 -1.568000\nv -0.502228 1.624783 -1.600326\nv -0.477421 1.703232 -1.559895\nv -0.632123 1.732148 -1.570419\nv -0.359697 1.623947 -1.482258\nv -0.519769 1.622838 -1.481855\nv -0.527035 1.590677 -1.518928\nv -0.424521 1.563033 -1.460088\nv -0.437946 1.534740 -1.498569\nv -0.519769 1.591483 -1.568000\nv -0.424521 1.531678 -1.546233\nv -0.484688 1.671071 -1.596968\nv -0.346272 1.620885 -1.529923\nv -0.477421 1.703232 -1.559895\nv -0.359697 1.592592 -1.568404\nv -0.346272 1.620885 -1.529923\nv -0.359697 1.623947 -1.482258\nv -0.276183 1.506495 -1.439509\nv -0.360878 1.473529 -1.427511\nv -0.437946 1.534740 -1.498569\nv -0.424521 1.531678 -1.546233\nv -0.378419 1.451024 -1.468099\nv -0.360878 1.442174 -1.513656\nv -0.258641 1.497645 -1.485067\nv -0.276183 1.475141 -1.525655\nv -0.246855 1.367951 -1.389084\nv -0.338530 1.367951 -1.389084\nv -0.357516 1.352274 -1.432157\nv -0.338530 1.336597 -1.475230\nv -0.227869 1.352274 -1.432157\nv -0.246855 1.336597 -1.475230\nv -0.276183 1.229407 -1.338658\nv -0.338530 1.367951 -1.389084\nv -0.357516 1.352274 -1.432157\nv -0.360878 1.262373 -1.350657\nv -0.378419 1.253524 -1.396214\nv -0.360878 1.231019 -1.436803\nv -0.246855 1.336597 -1.475230\nv -0.258641 1.206903 -1.379246\nv -0.227869 1.352274 -1.432157\nv -0.276183 1.198053 -1.424803\nv -0.258641 1.206903 -1.379246\nv -0.276183 1.229407 -1.338658\nv -0.359698 1.111956 -1.295909\nv -0.424522 1.172869 -1.318080\nv -0.378419 1.253524 -1.396214\nv -0.360878 1.231019 -1.436803\nv -0.437946 1.169808 -1.365744\nv -0.424522 1.141515 -1.404225\nv -0.346272 1.083663 -1.334390\nv -0.359698 1.080601 -1.382055\nv -0.484688 1.033476 -1.267345\nv -0.424522 1.172869 -1.318080\nv -0.437946 1.169808 -1.365744\nv -0.519769 1.113065 -1.296313\nv -0.527035 1.113871 -1.345385\nv -0.519769 1.081710 -1.382458\nv -0.359698 1.080601 -1.382055\nv -0.477421 1.001316 -1.304418\nv -0.346272 1.083663 -1.334390\nv -0.484688 1.002122 -1.353491\nv -0.484688 1.033476 -1.267345\nv -0.527035 1.113871 -1.345385\nv -0.632123 1.060710 -1.374815\nv -0.519769 1.081710 -1.382458\nv -0.632123 1.094228 -1.338236\nv -0.632123 0.974564 -1.343460\nv 0.745829 0.214296 -3.960975\nv 0.836948 0.216592 -4.048750\nv 0.837014 0.213009 -2.549894\nv 0.745829 0.214296 -2.642143\nv 0.745829 0.179239 0.941244\nv 0.837014 0.166501 0.847717\nv 0.837014 0.275915 2.349092\nv 0.745829 0.273135 2.257031\nv 0.837014 0.774504 -3.999007\nv 0.745828 0.803621 -3.903922\nv 0.836056 0.894761 -3.899934\nv 0.745828 0.895334 -2.747944\nv 0.836012 0.982112 -2.753962\nv 0.837014 0.727890 0.918814\nv 0.745828 0.762071 1.015057\nv 0.837014 0.864035 1.009189\nv 0.745828 0.869278 2.153893\nv 0.837014 0.967704 2.148448\nv 1.643894 0.244304 -4.048578\nv 0.745829 0.214296 -2.642143\nv 0.654642 0.123110 -3.245959\nv 0.654642 0.123110 -2.535697\nv 0.745829 0.214296 -3.251163\nv 1.661227 0.213005 -2.540242\nv 1.628291 0.166501 0.847717\nv 0.654642 0.154587 1.555077\nv 0.654642 0.186064 2.364636\nv 1.616691 0.275915 2.349092\nv 0.836056 0.894761 -3.899934\nv 1.592141 0.931298 -3.866776\nv 1.632455 0.979610 -2.756444\nv 0.836012 0.982112 -2.753962\nv 0.745828 1.135214 -3.303730\nv 0.745828 0.895334 -2.747944\nv 0.836307 1.223983 -3.309518\nv 0.745829 0.214296 -3.960975\nv 0.745828 0.803621 -3.903922\nv 0.837014 0.213009 -2.549894\nv 0.837008 0.869237 -2.650487\nv 0.837014 0.864035 1.009189\nv 1.655835 0.864035 1.009189\nv 1.626559 0.967704 2.148448\nv 0.837014 0.967704 2.148448\nv 0.837014 1.176182 1.548452\nv 0.837014 0.727890 0.918814\nv 0.837014 0.166501 0.847717\nv 0.837014 0.275915 2.349092\nv 0.837014 0.847924 2.250129\nv 0.745829 0.214296 -3.251163\nv 0.836307 1.223983 -3.309518\nv 0.745828 1.135214 -3.303730\nv 0.745829 0.246034 1.554484\nv 0.654642 0.076038 0.836260\nv 0.654642 0.154587 1.555077\nv 0.745829 0.179239 0.941244\nv 0.837014 1.176182 1.548452\nv 0.745828 1.075490 1.549106\nv -0.745829 0.214296 -3.960975\nv -0.836948 0.216592 -4.048750\nv -0.837014 0.213009 -2.549894\nv -0.745829 0.214296 -2.642143\nv -0.745829 0.179239 0.941244\nv -0.837014 0.166501 0.847717\nv -0.837014 0.275915 2.349092\nv -0.745829 0.273135 2.257031\nv -0.837014 0.774504 -3.999007\nv -0.836057 0.894761 -3.899934\nv -0.745829 0.803621 -3.903922\nv -0.745829 0.895333 -2.747944\nv -0.836012 0.982111 -2.753962\nv -0.837014 0.727890 0.918814\nv -0.837014 0.864035 1.009189\nv -0.745829 0.762071 1.015057\nv -0.745829 0.869278 2.153893\nv -0.837014 0.967703 2.148448\nv -1.643894 0.244303 -4.048578\nv -0.654642 0.123110 -3.245959\nv -0.654642 0.123110 -2.535697\nv -1.661227 0.213005 -2.540242\nv -1.628291 0.166501 0.847717\nv -0.654642 0.154587 1.555077\nv -0.654642 0.186064 2.364636\nv -1.616691 0.275915 2.349092\nv -0.836057 0.894761 -3.899934\nv -1.592142 0.931298 -3.866776\nv -1.632455 0.979609 -2.756444\nv -0.836012 0.982111 -2.753962\nv -0.745829 1.135214 -3.303730\nv -0.836308 1.223983 -3.309518\nv -0.745829 0.895333 -2.747944\nv -0.745829 0.214296 -3.960975\nv -0.745829 0.803621 -3.903922\nv -0.837014 0.213009 -2.549894\nv -0.837008 0.869237 -2.650487\nv -0.837014 0.864035 1.009189\nv -1.655835 0.864035 1.009189\nv -1.626560 0.967703 2.148448\nv -0.837014 0.967703 2.148448\nv -0.837014 1.176182 1.548452\nv -0.837014 0.727890 0.918814\nv -0.837014 0.166501 0.847717\nv -0.837014 0.275915 2.349092\nv -0.837014 0.847923 2.250129\nv -0.745829 0.214296 -3.251163\nv -0.836308 1.223983 -3.309518\nv -0.745829 1.135214 -3.303730\nv -0.745829 0.246034 1.554484\nv -0.654642 0.076038 0.836260\nv -0.745829 0.179239 0.941244\nv -0.654642 0.154587 1.555077\nv -0.837014 1.176182 1.548452\nv -0.745829 1.075490 1.549106\nv -1.562096 1.676842 -1.321114\nv -1.487599 1.676842 -1.364124\nv -1.413104 1.676842 -1.407134\nv 1.414624 1.676843 -1.406256\nv 1.487599 1.676843 -1.364124\nv 1.560575 1.676843 -1.321991\nvt 0.553545 -0.309991\nvt 0.554675 -0.317868\nvt 0.565944 -0.310232\nvt 0.564837 -0.302058\nvt 0.555306 -0.327051\nvt 0.566864 -0.319450\nvt 0.577891 -0.313615\nvt 0.577842 -0.303440\nvt 0.577621 -0.294258\nvt 0.215653 -0.569444\nvt 0.240860 -0.563684\nvt 0.240291 -0.558733\nvt 0.214739 -0.564797\nvt 0.269785 -0.559762\nvt 0.269254 -0.554740\nvt 0.268844 -0.550443\nvt 0.239815 -0.554425\nvt 0.214177 -0.560427\nvt 0.389153 -0.551097\nvt 0.407511 -0.550353\nvt 0.408132 -0.545599\nvt 0.389790 -0.546170\nvt 0.427079 -0.551739\nvt 0.428034 -0.547302\nvt 0.428775 -0.543385\nvt 0.409017 -0.541736\nvt 0.390719 -0.542031\nvt 0.727791 -0.792130\nvt 0.730346 -0.802942\nvt 0.746596 -0.803682\nvt 0.747656 -0.794725\nvt 0.728192 -0.813888\nvt 0.745380 -0.814897\nvt 0.766515 -0.815900\nvt 0.766696 -0.804698\nvt 0.766876 -0.795638\nvt 0.841379 -0.792535\nvt 0.841728 -0.804930\nvt 0.858871 -0.805035\nvt 0.858625 -0.795904\nvt 0.841944 -0.816265\nvt 0.859622 -0.816316\nvt 0.878741 -0.816422\nvt 0.877261 -0.805237\nvt 0.876263 -0.796188\nvt 0.608942 -0.751207\nvt 0.618452 -0.763339\nvt 0.636809 -0.762172\nvt 0.632425 -0.752839\nvt 0.626119 -0.774960\nvt 0.643829 -0.772569\nvt 0.659348 -0.771633\nvt 0.653182 -0.763422\nvt 0.649166 -0.755805\nvt 0.602627 -0.119629\nvt 0.618624 -0.119058\nvt 0.619005 -0.115795\nvt 0.602748 -0.116439\nvt 0.636207 -0.118631\nvt 0.636887 -0.115320\nvt 0.636312 -0.112395\nvt 0.618606 -0.112919\nvt 0.602509 -0.113601\nvt 0.940872 -0.472815\nvt 0.927762 -0.468736\nvt 0.925386 -0.474722\nvt 0.938616 -0.478818\nvt 0.913065 -0.463118\nvt 0.910534 -0.471690\nvt 0.908898 -0.477266\nvt 0.923359 -0.480166\nvt 0.936205 -0.484508\nvt 0.349657 -0.827939\nvt 0.326584 -0.827549\nvt 0.326361 -0.843933\nvt 0.349492 -0.844345\nvt 0.305560 -0.827087\nvt 0.308317 -0.843667\nvt 0.304168 -0.858031\nvt 0.326248 -0.857598\nvt 0.349354 -0.858066\nvt 0.808905 -0.683025\nvt 0.787943 -0.683136\nvt 0.788134 -0.692160\nvt 0.809051 -0.691861\nvt 0.767617 -0.683563\nvt 0.771639 -0.693102\nvt 0.772138 -0.703197\nvt 0.788422 -0.703032\nvt 0.809210 -0.702798\nvt 0.703625 -0.599540\nvt 0.692274 -0.600569\nvt 0.693450 -0.614655\nvt 0.704952 -0.614018\nvt 0.682252 -0.601075\nvt 0.683042 -0.614769\nvt 0.683886 -0.630218\nvt 0.694407 -0.630453\nvt 0.706098 -0.630213\nvt 0.389162 -0.563925\nvt 0.373223 -0.564477\nvt 0.373774 -0.569417\nvt 0.389665 -0.568902\nvt 0.358399 -0.565093\nvt 0.358919 -0.570091\nvt 0.359530 -0.575326\nvt 0.374438 -0.574569\nvt 0.390277 -0.573994\nvt 0.217333 -0.580522\nvt 0.199012 -0.585057\nvt 0.198238 -0.589170\nvt 0.217679 -0.584951\nvt 0.185377 -0.588078\nvt 0.185003 -0.592707\nvt 0.186893 -0.598327\nvt 0.200198 -0.592903\nvt 0.218704 -0.589161\nvt 0.655875 -0.674749\nvt 0.643166 -0.670043\nvt 0.638125 -0.679881\nvt 0.649709 -0.684649\nvt 0.629771 -0.662399\nvt 0.622573 -0.675289\nvt 0.616475 -0.688618\nvt 0.633119 -0.692600\nvt 0.646409 -0.696553\nvt 0.609075 -0.658125\nvt 0.604249 -0.671465\nvt 0.587227 -0.653179\nvt 0.584945 -0.669440\nvt 0.582505 -0.685103\nvt 0.599565 -0.686180\nvt 0.404210 -0.647308\nvt 0.387140 -0.648638\nvt 0.390890 -0.664150\nvt 0.408552 -0.662900\nvt 0.369829 -0.649708\nvt 0.372838 -0.665391\nvt 0.376004 -0.680916\nvt 0.394775 -0.679692\nvt 0.413010 -0.678693\nvt 0.223632 -0.652411\nvt 0.200440 -0.653212\nvt 0.201375 -0.670779\nvt 0.225290 -0.668895\nvt 0.179468 -0.655110\nvt 0.181404 -0.674547\nvt 0.182768 -0.691471\nvt 0.203296 -0.688066\nvt 0.227454 -0.685476\nvt 0.231715 -0.743512\nvt 0.218989 -0.759046\nvt 0.231425 -0.763147\nvt 0.244844 -0.752113\nvt 0.210896 -0.775249\nvt 0.222996 -0.777471\nvt 0.230035 -0.779929\nvt 0.238537 -0.767531\nvt 0.253399 -0.758236\nvt 0.640692 -0.866773\nvt 0.640580 -0.849888\nvt 0.631295 -0.851216\nvt 0.631420 -0.866678\nvt 0.639697 -0.833296\nvt 0.630253 -0.835749\nvt 0.625500 -0.836379\nvt 0.626756 -0.851501\nvt 0.626915 -0.866633\nvt 0.592268 -0.748303\nvt 0.585338 -0.759438\nvt 0.596412 -0.763391\nvt 0.578628 -0.747551\nvt 0.573607 -0.757366\nvt 0.569557 -0.765260\nvt 0.579869 -0.768715\nvt 0.589676 -0.773235\nvt 0.423534 -0.735293\nvt 0.404166 -0.733736\nvt 0.405199 -0.741199\nvt 0.424647 -0.742580\nvt 0.384009 -0.732804\nvt 0.384969 -0.740236\nvt 0.385281 -0.744948\nvt 0.405277 -0.745775\nvt 0.425725 -0.748365\nvt 0.090443 -0.864531\nvt 0.105036 -0.864673\nvt 0.105609 -0.850502\nvt 0.090970 -0.850225\nvt 0.119048 -0.864817\nvt 0.119687 -0.850627\nvt 0.121128 -0.837614\nvt 0.106902 -0.837333\nvt 0.092166 -0.836740\nvt 0.116898 -0.685683\nvt 0.098926 -0.686900\nvt 0.099056 -0.689852\nvt 0.117314 -0.688443\nvt 0.081446 -0.684363\nvt 0.081181 -0.687382\nvt 0.081672 -0.691620\nvt 0.099645 -0.693708\nvt 0.117912 -0.692302\nvt 0.876103 -0.490774\nvt 0.864240 -0.490587\nvt 0.864687 -0.500190\nvt 0.876788 -0.500266\nvt 0.848593 -0.490057\nvt 0.848819 -0.499617\nvt 0.849265 -0.510505\nvt 0.865456 -0.511002\nvt 0.881543 -0.511067\nvt 0.724308 -0.836928\nvt 0.723136 -0.847638\nvt 0.742383 -0.847976\nvt 0.743139 -0.837425\nvt 0.722317 -0.857961\nvt 0.741795 -0.858216\nvt 0.765280 -0.858423\nvt 0.765621 -0.848243\nvt 0.765960 -0.837837\nvt 0.842278 -0.838110\nvt 0.842361 -0.848474\nvt 0.861473 -0.848490\nvt 0.861050 -0.838127\nvt 0.842408 -0.858626\nvt 0.861771 -0.858643\nvt 0.883210 -0.858653\nvt 0.882564 -0.848499\nvt 0.881651 -0.838145\nvt 0.634988 -0.802138\nvt 0.637803 -0.817311\nvt 0.655325 -0.810606\nvt 0.652481 -0.796068\nvt 0.657301 -0.827392\nvt 0.676340 -0.819683\nvt 0.671459 -0.803707\nvt 0.668332 -0.790270\nvt 0.668413 -0.118744\nvt 0.684832 -0.119361\nvt 0.685265 -0.115980\nvt 0.668987 -0.115381\nvt 0.701597 -0.120141\nvt 0.701938 -0.116753\nvt 0.702014 -0.113727\nvt 0.685241 -0.112958\nvt 0.668765 -0.112375\nvt 0.171252 -0.576953\nvt 0.157972 -0.577208\nvt 0.157970 -0.583446\nvt 0.171254 -0.583236\nvt 0.143938 -0.577437\nvt 0.143936 -0.583649\nvt 0.143949 -0.587662\nvt 0.157987 -0.587483\nvt 0.167947 -0.586337\nvt 0.479226 -0.056085\nvt 0.482832 -0.056307\nvt 0.482996 -0.045987\nvt 0.477185 -0.045666\nvt 0.486438 -0.056530\nvt 0.486703 -0.046376\nvt 0.485949 -0.038621\nvt 0.483160 -0.035666\nvt 0.477271 -0.035243\nvt 0.199891 -0.808129\nvt 0.196965 -0.822738\nvt 0.208082 -0.822135\nvt 0.211234 -0.807439\nvt 0.195220 -0.836760\nvt 0.206087 -0.836679\nvt 0.211374 -0.836679\nvt 0.213703 -0.822102\nvt 0.217210 -0.807662\nvt 0.631364 -0.787958\nvt 0.619703 -0.792087\nvt 0.624312 -0.805525\nvt 0.613685 -0.780314\nvt 0.605878 -0.785927\nvt 0.612579 -0.795501\nvt 0.618208 -0.807332\nvt 0.204526 -0.791957\nvt 0.185183 -0.792641\nvt 0.179996 -0.810181\nvt 0.191903 -0.773964\nvt 0.171318 -0.772927\nvt 0.164135 -0.792836\nvt 0.155032 -0.813139\nvt 0.324391 -0.554344\nvt 0.342923 -0.553059\nvt 0.342845 -0.547986\nvt 0.324073 -0.549280\nvt 0.357955 -0.552282\nvt 0.358152 -0.547163\nvt 0.358535 -0.542819\nvt 0.342896 -0.543645\nvt 0.323860 -0.544967\nvt 0.786070 -0.838056\nvt 0.786108 -0.827339\nvt 0.766263 -0.826988\nvt 0.804831 -0.838138\nvt 0.804858 -0.827442\nvt 0.804814 -0.816529\nvt 0.786042 -0.816387\nvt 0.325367 -0.567169\nvt 0.300069 -0.569416\nvt 0.300579 -0.574273\nvt 0.325818 -0.572081\nvt 0.271288 -0.572520\nvt 0.271879 -0.577209\nvt 0.272521 -0.581980\nvt 0.301138 -0.579269\nvt 0.326338 -0.577244\nvt 0.332625 -0.651515\nvt 0.307097 -0.651946\nvt 0.308660 -0.667950\nvt 0.334303 -0.667454\nvt 0.278746 -0.652105\nvt 0.280429 -0.668112\nvt 0.282304 -0.684060\nvt 0.310418 -0.683688\nvt 0.336183 -0.683005\nvt 0.341442 -0.731846\nvt 0.315404 -0.733777\nvt 0.318528 -0.741124\nvt 0.342986 -0.739231\nvt 0.287786 -0.736486\nvt 0.292671 -0.743959\nvt 0.297187 -0.749034\nvt 0.321010 -0.746085\nvt 0.343985 -0.744146\nvt 0.764827 -0.878754\nvt 0.785413 -0.878817\nvt 0.785505 -0.868681\nvt 0.764974 -0.868592\nvt 0.804375 -0.878856\nvt 0.804442 -0.868728\nvt 0.804572 -0.858595\nvt 0.785695 -0.858540\nvt 0.033187 -0.791082\nvt 0.050332 -0.791226\nvt 0.054916 -0.777899\nvt 0.039999 -0.775975\nvt 0.066609 -0.793211\nvt 0.071047 -0.779738\nvt 0.076838 -0.764168\nvt 0.060477 -0.762659\nvt 0.045499 -0.761414\nvt 0.553953 -0.123656\nvt 0.556440 -0.123855\nvt 0.555134 -0.120982\nvt 0.552640 -0.121542\nvt 0.562174 -0.123281\nvt 0.560219 -0.120467\nvt 0.560582 -0.115941\nvt 0.554774 -0.116171\nvt 0.552119 -0.116608\nvt 0.671048 -0.309418\nvt 0.671078 -0.291608\nvt 0.654593 -0.291591\nvt 0.654500 -0.308957\nvt 0.671145 -0.276601\nvt 0.654754 -0.276982\nvt 0.638326 -0.278034\nvt 0.638194 -0.292218\nvt 0.638097 -0.308964\nvt 0.029242 -0.863887\nvt 0.041768 -0.864044\nvt 0.042255 -0.849458\nvt 0.029703 -0.849253\nvt 0.058311 -0.864225\nvt 0.058823 -0.849693\nvt 0.060035 -0.835729\nvt 0.043463 -0.835381\nvt 0.030895 -0.835257\nvt 0.170181 -0.647957\nvt 0.162278 -0.661049\nvt 0.164064 -0.663437\nvt 0.172620 -0.649945\nvt 0.150540 -0.672121\nvt 0.151692 -0.674713\nvt 0.152601 -0.679540\nvt 0.165744 -0.669237\nvt 0.175157 -0.591768\nvt 0.177593 -0.590984\nvt 0.177227 -0.587576\nvt 0.174541 -0.589390\nvt 0.183638 -0.583169\nvt 0.182908 -0.578433\nvt 0.176625 -0.583700\nvt 0.174005 -0.586396\nvt 0.149997 -0.865151\nvt 0.172954 -0.865418\nvt 0.173499 -0.850696\nvt 0.150708 -0.850328\nvt 0.193636 -0.865673\nvt 0.194106 -0.851130\nvt 0.174779 -0.836662\nvt 0.152305 -0.836687\nvt 0.184243 -0.741149\nvt 0.166865 -0.740096\nvt 0.161611 -0.754159\nvt 0.178846 -0.755373\nvt 0.151323 -0.739068\nvt 0.146175 -0.753005\nvt 0.139371 -0.770005\nvt 0.154430 -0.771554\nvt 0.478159 -0.567672\nvt 0.475352 -0.566873\nvt 0.475383 -0.570911\nvt 0.478707 -0.570783\nvt 0.464978 -0.565437\nvt 0.466519 -0.570646\nvt 0.465716 -0.577834\nvt 0.476128 -0.577842\nvt 0.479581 -0.577321\nvt 0.499696 -0.744675\nvt 0.480417 -0.742126\nvt 0.481782 -0.749034\nvt 0.501358 -0.751579\nvt 0.459895 -0.739449\nvt 0.460889 -0.746443\nvt 0.461295 -0.750452\nvt 0.482698 -0.753014\nvt 0.502611 -0.755654\nvt 0.446901 -0.557569\nvt 0.449119 -0.553565\nvt 0.466546 -0.560301\nvt 0.466988 -0.555392\nvt 0.449745 -0.548957\nvt 0.905909 -0.838105\nvt 0.903809 -0.827368\nvt 0.880290 -0.827402\nvt 0.927036 -0.837884\nvt 0.924379 -0.827113\nvt 0.921453 -0.816149\nvt 0.901468 -0.816417\nvt 0.884028 -0.878945\nvt 0.909586 -0.878982\nvt 0.909272 -0.868810\nvt 0.883775 -0.868800\nvt 0.931702 -0.879020\nvt 0.931365 -0.868778\nvt 0.930435 -0.858537\nvt 0.908487 -0.858639\nvt 0.426885 -0.563340\nvt 0.407368 -0.563268\nvt 0.407636 -0.568640\nvt 0.427388 -0.568855\nvt 0.408021 -0.574003\nvt 0.427114 -0.574206\nvt 0.439073 -0.643005\nvt 0.420755 -0.645524\nvt 0.425371 -0.661748\nvt 0.443673 -0.660295\nvt 0.430129 -0.678347\nvt 0.448329 -0.678158\nvt 0.441508 -0.737049\nvt 0.442542 -0.744249\nvt 0.443161 -0.748498\nvt 0.700723 -0.584636\nvt 0.689871 -0.586843\nvt 0.691086 -0.593133\nvt 0.702288 -0.591760\nvt 0.678838 -0.589252\nvt 0.681495 -0.594445\nvt 0.673487 -0.599567\nvt 0.673521 -0.612975\nvt 0.677664 -0.613992\nvt 0.677340 -0.600489\nvt 0.674007 -0.628578\nvt 0.678420 -0.629473\nvt 0.675791 -0.676057\nvt 0.689580 -0.677340\nvt 0.692764 -0.671868\nvt 0.682539 -0.669156\nvt 0.702088 -0.679764\nvt 0.704980 -0.673261\nvt 0.708159 -0.667621\nvt 0.695987 -0.667503\nvt 0.687403 -0.665481\nvt 0.712393 -0.679556\nvt 0.714651 -0.673590\nvt 0.721633 -0.679657\nvt 0.723616 -0.673674\nvt 0.725583 -0.667276\nvt 0.717258 -0.667434\nvt 0.741207 -0.680761\nvt 0.753204 -0.681721\nvt 0.754943 -0.674632\nvt 0.743065 -0.674094\nvt 0.769617 -0.675205\nvt 0.770414 -0.667814\nvt 0.756210 -0.667469\nvt 0.744715 -0.667176\nvt 0.804056 -0.568632\nvt 0.781846 -0.569403\nvt 0.782703 -0.578440\nvt 0.803931 -0.577714\nvt 0.761565 -0.571145\nvt 0.763396 -0.579954\nvt 0.765029 -0.586838\nvt 0.783557 -0.585582\nvt 0.804058 -0.585019\nvt 0.732485 -0.576321\nvt 0.724062 -0.578967\nvt 0.726765 -0.586715\nvt 0.736002 -0.584448\nvt 0.717224 -0.580999\nvt 0.718924 -0.588774\nvt 0.720782 -0.596779\nvt 0.729426 -0.592709\nvt 0.738926 -0.590625\nvt 0.298805 -0.556548\nvt 0.298355 -0.551486\nvt 0.298016 -0.547211\nvt 0.242562 -0.576235\nvt 0.243227 -0.580774\nvt 0.243925 -0.585313\nvt 0.250287 -0.652127\nvt 0.252126 -0.668190\nvt 0.254231 -0.684363\nvt 0.260289 -0.738904\nvt 0.266653 -0.746678\nvt 0.273404 -0.752118\nvt 0.549297 -0.650501\nvt 0.532139 -0.649043\nvt 0.531575 -0.652191\nvt 0.549157 -0.653799\nvt 0.516276 -0.644077\nvt 0.515252 -0.647136\nvt 0.515027 -0.653482\nvt 0.531453 -0.658203\nvt 0.549118 -0.659850\nvt 0.552364 -0.747446\nvt 0.539571 -0.747527\nvt 0.539291 -0.755164\nvt 0.550839 -0.755558\nvt 0.526995 -0.747266\nvt 0.527612 -0.754597\nvt 0.527538 -0.761203\nvt 0.538838 -0.760740\nvt 0.549243 -0.761700\nvt 0.275340 -0.859908\nvt 0.275264 -0.864867\nvt 0.288108 -0.865059\nvt 0.287859 -0.860064\nvt 0.275248 -0.870534\nvt 0.288048 -0.870727\nvt 0.304987 -0.871236\nvt 0.305081 -0.865624\nvt 0.684624 -0.641277\nvt 0.695184 -0.641634\nvt 0.685227 -0.650210\nvt 0.695854 -0.650660\nvt 0.707744 -0.650793\nvt 0.706994 -0.641634\nvt 0.716004 -0.641165\nvt 0.714976 -0.629601\nvt 0.716818 -0.650413\nvt 0.725431 -0.649212\nvt 0.722771 -0.640048\nvt 0.721609 -0.628988\nvt 0.674432 -0.640293\nvt 0.679239 -0.640719\nvt 0.674244 -0.649940\nvt 0.679795 -0.649872\nvt 0.329797 -0.617591\nvt 0.331132 -0.634389\nvt 0.350580 -0.633578\nvt 0.348776 -0.616686\nvt 0.352595 -0.650713\nvt 0.367094 -0.632735\nvt 0.364640 -0.615935\nvt 0.176269 -0.620033\nvt 0.174499 -0.633734\nvt 0.177462 -0.635057\nvt 0.179519 -0.620697\nvt 0.185093 -0.636347\nvt 0.186910 -0.621376\nvt 0.276108 -0.620045\nvt 0.277313 -0.635725\nvt 0.305731 -0.635122\nvt 0.304530 -0.618785\nvt 0.431158 -0.611844\nvt 0.434758 -0.626999\nvt 0.457170 -0.623148\nvt 0.452985 -0.608458\nvt 0.461779 -0.639178\nvt 0.485536 -0.635419\nvt 0.476457 -0.618760\nvt 0.471768 -0.604635\nvt 0.396622 -0.614429\nvt 0.400192 -0.630765\nvt 0.416595 -0.629299\nvt 0.413068 -0.613549\nvt 0.221928 -0.621660\nvt 0.222615 -0.636398\nvt 0.248802 -0.636121\nvt 0.247623 -0.621088\nvt 0.591357 -0.312197\nvt 0.591473 -0.299487\nvt 0.606373 -0.311789\nvt 0.606203 -0.296487\nvt 0.606111 -0.283343\nvt 0.591484 -0.288322\nvt 0.726088 -0.825454\nvt 0.744183 -0.826268\nvt 0.842130 -0.827333\nvt 0.860391 -0.827357\nvt 0.648854 -0.783632\nvt 0.664341 -0.780084\nvt 0.652517 -0.118565\nvt 0.653224 -0.115223\nvt 0.652754 -0.112247\nvt 0.896913 -0.461284\nvt 0.895566 -0.469894\nvt 0.884638 -0.460291\nvt 0.883697 -0.468659\nvt 0.879712 -0.475841\nvt 0.894575 -0.475603\nvt 0.216236 -0.792395\nvt 0.222795 -0.793454\nvt 0.712387 -0.598484\nvt 0.713656 -0.613225\nvt 0.720214 -0.613123\nvt 0.605897 -0.770549\nvt 0.598286 -0.778730\nvt 0.199721 -0.756738\nvt 0.205512 -0.742229\nvt 0.823517 -0.805300\nvt 0.823568 -0.816440\nvt 0.822997 -0.796367\nvt 0.804500 -0.796645\nvt 0.804709 -0.805481\nvt 0.108899 -0.766875\nvt 0.115036 -0.750697\nvt 0.098947 -0.749753\nvt 0.093037 -0.765520\nvt 0.119525 -0.737138\nvt 0.103124 -0.736417\nvt 0.086403 -0.735610\nvt 0.082483 -0.748759\nvt 0.102777 -0.783450\nvt 0.117863 -0.785776\nvt 0.124267 -0.768405\nvt 0.098181 -0.797709\nvt 0.113060 -0.800652\nvt 0.127290 -0.803867\nvt 0.132629 -0.788364\nvt 0.918658 -0.805039\nvt 0.899237 -0.805295\nvt 0.916485 -0.796086\nvt 0.897583 -0.796318\nvt 0.730990 -0.680023\nvt 0.732868 -0.673833\nvt 0.734625 -0.667127\nvt 0.709668 -0.582818\nvt 0.711168 -0.590464\nvt 0.734870 -0.659399\nvt 0.725761 -0.659470\nvt 0.745079 -0.659561\nvt 0.745004 -0.651504\nvt 0.734993 -0.651065\nvt 0.935411 -0.826635\nvt 0.932327 -0.815599\nvt 0.938220 -0.837492\nvt 0.943627 -0.836996\nvt 0.940852 -0.826045\nvt 0.937802 -0.814945\nvt 0.592376 -0.388107\nvt 0.600547 -0.384061\nvt 0.596184 -0.374519\nvt 0.588032 -0.378661\nvt 0.606243 -0.378297\nvt 0.605245 -0.369961\nvt 0.600901 -0.360339\nvt 0.592447 -0.366324\nvt 0.584302 -0.370519\nvt 0.112004 -0.555863\nvt 0.111994 -0.567026\nvt 0.128357 -0.566965\nvt 0.128379 -0.555823\nvt 0.111984 -0.577708\nvt 0.128346 -0.577617\nvt 0.143957 -0.566801\nvt 0.143986 -0.555675\nvt 0.589963 -0.360824\nvt 0.581799 -0.364984\nvt 0.599087 -0.356302\nvt 0.597273 -0.352266\nvt 0.588105 -0.356671\nvt 0.578936 -0.361077\nvt 0.885971 -0.437342\nvt 0.885509 -0.449143\nvt 0.897880 -0.449958\nvt 0.898304 -0.438103\nvt 0.910544 -0.450650\nvt 0.910590 -0.439134\nvt 0.133036 -0.864966\nvt 0.133749 -0.850438\nvt 0.135344 -0.837201\nvt 0.134736 -0.680571\nvt 0.135436 -0.683183\nvt 0.136072 -0.687402\nvt 0.135556 -0.738052\nvt 0.130714 -0.751815\nvt 0.140851 -0.807052\nvt 0.147330 -0.791061\nvt 0.064986 -0.678070\nvt 0.064058 -0.680906\nvt 0.050819 -0.669410\nvt 0.049129 -0.672024\nvt 0.045935 -0.677618\nvt 0.064281 -0.685806\nvt 0.082615 -0.795315\nvt 0.087099 -0.781507\nvt 0.074703 -0.864384\nvt 0.075220 -0.849953\nvt 0.076412 -0.836199\nvt 0.069382 -0.734411\nvt 0.065671 -0.747512\nvt 0.054384 -0.733476\nvt 0.050599 -0.746538\nvt 0.503881 -0.636143\nvt 0.502174 -0.638980\nvt 0.494529 -0.625694\nvt 0.492155 -0.628226\nvt 0.501297 -0.646119\nvt 0.514469 -0.746320\nvt 0.515806 -0.753352\nvt 0.516312 -0.757679\nvt 0.940348 -0.848010\nvt 0.945735 -0.847634\nvt 0.929022 -0.848299\nvt 0.941868 -0.858355\nvt 0.947241 -0.858109\nvt 0.932676 -0.792422\nvt 0.926835 -0.795435\nvt 0.929372 -0.804430\nvt 0.934863 -0.803770\nvt 0.580351 -0.643838\nvt 0.565640 -0.648400\nvt 0.566246 -0.651511\nvt 0.581891 -0.646672\nvt 0.566730 -0.657900\nvt 0.565361 -0.747345\nvt 0.562199 -0.756177\nvt 0.559412 -0.763061\nvt 0.594857 -0.640180\nvt 0.592328 -0.637646\nvt 0.601871 -0.643508\nvt 0.612332 -0.634976\nvt 0.605549 -0.631991\nvt 0.602257 -0.629732\nvt 0.644958 -0.619849\nvt 0.650078 -0.602805\nvt 0.642105 -0.599638\nvt 0.636451 -0.616255\nvt 0.655039 -0.588271\nvt 0.647086 -0.585547\nvt 0.639091 -0.583234\nvt 0.633917 -0.596486\nvt 0.627654 -0.612501\nvt 0.645598 -0.575247\nvt 0.640120 -0.573651\nvt 0.637986 -0.576481\nvt 0.642445 -0.578116\nvt 0.634659 -0.572207\nvt 0.632942 -0.576006\nvt 0.630151 -0.581310\nvt 0.634695 -0.580921\nvt 0.608986 -0.702088\nvt 0.627161 -0.705149\nvt 0.601668 -0.716014\nvt 0.624689 -0.716050\nvt 0.641513 -0.717081\nvt 0.642529 -0.707841\nvt 0.578179 -0.699815\nvt 0.593055 -0.700540\nvt 0.572959 -0.712061\nvt 0.585834 -0.713109\nvt 0.338267 -0.698819\nvt 0.359825 -0.698017\nvt 0.357258 -0.682033\nvt 0.340189 -0.711746\nvt 0.361989 -0.711138\nvt 0.381849 -0.710665\nvt 0.379210 -0.697236\nvt 0.184830 -0.705696\nvt 0.205715 -0.703612\nvt 0.185227 -0.718107\nvt 0.205957 -0.717209\nvt 0.231761 -0.717667\nvt 0.229887 -0.701752\nvt 0.085866 -0.706970\nvt 0.088157 -0.715209\nvt 0.104875 -0.714923\nvt 0.102894 -0.707226\nvt 0.088440 -0.724710\nvt 0.105171 -0.724305\nvt 0.121574 -0.723165\nvt 0.121503 -0.713663\nvt 0.120110 -0.705908\nvt 0.817478 -0.475789\nvt 0.817428 -0.481409\nvt 0.833000 -0.481751\nvt 0.833023 -0.476080\nvt 0.817366 -0.488910\nvt 0.832984 -0.489357\nvt 0.848575 -0.482238\nvt 0.848561 -0.476391\nvt 0.284291 -0.700134\nvt 0.312334 -0.699575\nvt 0.287115 -0.713115\nvt 0.314535 -0.712480\nvt 0.152793 -0.698822\nvt 0.153364 -0.709325\nvt 0.168235 -0.707491\nvt 0.167000 -0.695056\nvt 0.153070 -0.720310\nvt 0.168287 -0.719129\nvt 0.452812 -0.695631\nvt 0.473481 -0.695450\nvt 0.469787 -0.677605\nvt 0.456482 -0.709287\nvt 0.476686 -0.708846\nvt 0.495761 -0.708549\nvt 0.493130 -0.695406\nvt 0.490273 -0.677669\nvt 0.417342 -0.695665\nvt 0.434757 -0.695556\nvt 0.420826 -0.709641\nvt 0.438489 -0.709449\nvt 0.256421 -0.700673\nvt 0.259986 -0.713940\nvt 0.518874 -0.681400\nvt 0.521217 -0.696783\nvt 0.534800 -0.697956\nvt 0.533553 -0.683557\nvt 0.522877 -0.709397\nvt 0.535388 -0.710116\nvt 0.547897 -0.710788\nvt 0.548856 -0.698962\nvt 0.549222 -0.685014\nvt 0.137700 -0.711598\nvt 0.136923 -0.702817\nvt 0.137511 -0.721745\nvt 0.055782 -0.703424\nvt 0.057349 -0.713463\nvt 0.071746 -0.714341\nvt 0.069860 -0.705092\nvt 0.056478 -0.723468\nvt 0.071402 -0.724079\nvt 0.508166 -0.695899\nvt 0.505531 -0.679206\nvt 0.510398 -0.708801\nvt 0.563408 -0.699421\nvt 0.565633 -0.685124\nvt 0.560394 -0.711357\nvt 0.756576 -0.659805\nvt 0.756483 -0.651759\nvt 0.770650 -0.659977\nvt 0.770612 -0.651750\nvt 0.685699 -0.659358\nvt 0.696578 -0.659908\nvt 0.708595 -0.660057\nvt 0.717627 -0.659793\nvt 0.672841 -0.659367\nvt 0.679692 -0.659112\nvt 0.673498 -0.669658\nvt 0.682120 -0.666664\nvt 0.266567 -0.864783\nvt 0.266495 -0.870445\nvt 0.267028 -0.859870\nvt 0.259937 -0.856298\nvt 0.259777 -0.864626\nvt 0.261370 -0.868922\nvt 0.636636 -0.642333\nvt 0.640848 -0.632406\nvt 0.630910 -0.628805\nvt 0.624586 -0.638790\nvt 0.620733 -0.624981\nvt 0.446805 -0.564896\nvt 0.448735 -0.569639\nvt 0.447107 -0.574531\nvt 0.465886 -0.658057\nvt 0.487181 -0.657513\nvt 0.516402 -0.665973\nvt 0.532234 -0.669505\nvt 0.549257 -0.671104\nvt 0.485171 -0.615457\nvt 0.487979 -0.613314\nvt 0.483597 -0.600249\nvt 0.480547 -0.601928\nvt 0.502656 -0.661118\nvt 0.566686 -0.670199\nvt 0.616574 -0.647814\nvt 0.631505 -0.651509\nvt 0.628467 -0.593698\nvt 0.625034 -0.591469\nvt 0.618133 -0.607724\nvt 0.621798 -0.609696\nvt 0.614413 -0.622138\nvt 0.610774 -0.620092\nvt 0.178043 -0.594165\nvt 0.174955 -0.594325\nvt 0.175552 -0.599874\nvt 0.178696 -0.599794\nvt 0.083405 -0.698574\nvt 0.101017 -0.699725\nvt 0.118881 -0.698390\nvt 0.570749 -0.122293\nvt 0.569791 -0.119514\nvt 0.581262 -0.121283\nvt 0.581107 -0.118335\nvt 0.581018 -0.115520\nvt 0.570505 -0.116642\nvt 0.034046 -0.682007\nvt 0.040188 -0.693237\nvt 0.051892 -0.691621\nvt 0.023783 -0.687960\nvt 0.030335 -0.697527\nvt 0.034947 -0.706879\nvt 0.044571 -0.704202\nvt 0.152825 -0.688222\nvt 0.166525 -0.681033\nvt 0.200844 -0.636731\nvt 0.201466 -0.621754\nvt 0.038344 -0.662074\nvt 0.034197 -0.665557\nvt 0.040476 -0.659875\nvt 0.032930 -0.650498\nvt 0.030606 -0.652322\nvt 0.026452 -0.655482\nvt 0.136506 -0.694333\nvt 0.066707 -0.694735\nvt 0.454996 -0.055680\nvt 0.467111 -0.055882\nvt 0.467167 -0.045483\nvt 0.455044 -0.045368\nvt 0.467222 -0.035084\nvt 0.458113 -0.037641\nvt 0.627881 -0.820296\nvt 0.622585 -0.821306\nvt 0.123222 -0.826967\nvt 0.108844 -0.826188\nvt 0.124785 -0.818590\nvt 0.110610 -0.817053\nvt 0.095759 -0.815034\nvt 0.094030 -0.824917\nvt 0.833013 -0.498910\nvt 0.817253 -0.498422\nvt 0.817073 -0.509468\nvt 0.833132 -0.509914\nvt 0.721591 -0.868273\nvt 0.741259 -0.868442\nvt 0.721260 -0.878584\nvt 0.741003 -0.878660\nvt 0.842456 -0.868765\nvt 0.862058 -0.868783\nvt 0.842472 -0.878897\nvt 0.862191 -0.878917\nvt 0.658358 -0.846585\nvt 0.658553 -0.866965\nvt 0.676175 -0.867150\nvt 0.675874 -0.843347\nvt 0.718376 -0.121053\nvt 0.718663 -0.117666\nvt 0.735148 -0.122069\nvt 0.735375 -0.118682\nvt 0.735577 -0.115661\nvt 0.718796 -0.114641\nvt 0.128347 -0.583833\nvt 0.111979 -0.583951\nvt 0.111976 -0.587964\nvt 0.128359 -0.587837\nvt 0.204511 -0.851236\nvt 0.203761 -0.865803\nvt 0.208228 -0.865870\nvt 0.209278 -0.851270\nvt 0.823489 -0.848476\nvt 0.823409 -0.858616\nvt 0.823554 -0.838137\nvt 0.804718 -0.848461\nvt 0.621959 -0.280278\nvt 0.621940 -0.294051\nvt 0.621990 -0.310314\nvt 0.062080 -0.822935\nvt 0.045566 -0.822282\nvt 0.064050 -0.812129\nvt 0.047516 -0.811193\nvt 0.034216 -0.810928\nvt 0.033163 -0.822388\nvt 0.176736 -0.824001\nvt 0.154554 -0.825402\nvt 0.907417 -0.848466\nvt 0.788224 -0.675404\nvt 0.808753 -0.675345\nvt 0.808596 -0.667852\nvt 0.788517 -0.667892\nvt 0.745036 -0.573490\nvt 0.748010 -0.582013\nvt 0.750465 -0.588569\nvt 0.326052 -0.871511\nvt 0.326145 -0.865880\nvt 0.349212 -0.872076\nvt 0.349269 -0.866416\nvt 0.158001 -0.566554\nvt 0.171287 -0.566264\nvt 0.171316 -0.555110\nvt 0.158032 -0.555420\nvt 0.137588 -0.826548\nvt 0.138341 -0.818711\nvt 0.078347 -0.823826\nvt 0.080184 -0.813390\nvt 0.942846 -0.868698\nvt 0.943188 -0.879040\nvt 0.948521 -0.879050\nvt 0.948201 -0.868580\nvt 0.768734 -0.723265\nvt 0.788940 -0.724710\nvt 0.788498 -0.714001\nvt 0.772341 -0.713289\nvt 0.809345 -0.724348\nvt 0.809314 -0.713770\nvt 0.864199 -0.482705\nvt 0.876089 -0.483096\nvt 0.864018 -0.476661\nvt 0.788564 -0.659974\nvt 0.808435 -0.659855\nvt 0.808300 -0.651473\nvt 0.788504 -0.651604\nvt 0.197854 -0.578087\nvt 0.195953 -0.574213\nvt 0.195280 -0.569541\nvt 0.475354 -0.563634\nvt 0.479037 -0.565369\nvt 0.478957 -0.562051\nvt 0.475497 -0.559628\nvt 0.650776 -0.580271\nvt 0.658526 -0.582889\nvt 0.665705 -0.580673\nvt 0.654436 -0.577714\nvt 0.544711 -0.317323\nvt 0.543398 -0.325256\nvt 0.536948 -0.323851\nvt 0.533255 -0.331276\nvt 0.528617 -0.340145\nvt 0.540827 -0.334744\nvt 0.674346 -0.593971\nvt 0.677364 -0.595074\nvt 0.580749 -0.391063\nvt 0.585947 -0.391293\nvt 0.581697 -0.381971\nvt 0.576272 -0.384866\nvt 0.578038 -0.373923\nvt 0.572154 -0.375684\nvt 0.144068 -0.542064\nvt 0.144024 -0.548005\nvt 0.158058 -0.547750\nvt 0.158083 -0.541816\nvt 0.171323 -0.547436\nvt 0.168010 -0.543067\nvt 0.016381 -0.640839\nvt 0.021039 -0.647165\nvt 0.025155 -0.644222\nvt 0.021491 -0.637892\nvt 0.027523 -0.642564\nvt 0.023786 -0.636349\nvt 0.883130 -0.418669\nvt 0.886308 -0.427254\nvt 0.898645 -0.428010\nvt 0.898867 -0.420972\nvt 0.910606 -0.429832\nvt 0.914423 -0.423552\nvt 0.575557 -0.368421\nvt 0.570276 -0.371496\nvt 0.573667 -0.364192\nvt 0.568397 -0.367308\nvt 0.112015 -0.542229\nvt 0.112010 -0.548174\nvt 0.128408 -0.548145\nvt 0.128444 -0.542201\nvt 0.523377 -0.332578\nvt 0.528904 -0.329285\nvt 0.531381 -0.324751\nvt 0.528293 -0.325472\nvt 0.537569 -0.319349\nvt 0.535613 -0.317793\nvt 0.563393 -0.295985\nvt 0.551421 -0.304711\nvt 0.577121 -0.287062\nvt 0.576544 -0.282202\nvt 0.562022 -0.291982\nvt 0.549284 -0.301544\nvt 0.591342 -0.280281\nvt 0.605940 -0.274598\nvt 0.605723 -0.269485\nvt 0.591110 -0.275205\nvt 0.621844 -0.271391\nvt 0.638255 -0.268974\nvt 0.638102 -0.263881\nvt 0.621664 -0.266329\nvt 0.654781 -0.267809\nvt 0.671303 -0.267229\nvt 0.671401 -0.262138\nvt 0.654736 -0.262753\nvt 0.584005 -0.234696\nvt 0.567577 -0.234132\nvt 0.567447 -0.239148\nvt 0.584005 -0.239728\nvt 0.551237 -0.232552\nvt 0.550927 -0.237527\nvt 0.550690 -0.242514\nvt 0.567306 -0.244143\nvt 0.584006 -0.244726\nvt 0.535028 -0.230218\nvt 0.534486 -0.235082\nvt 0.518992 -0.226738\nvt 0.518474 -0.232026\nvt 0.518272 -0.237009\nvt 0.534281 -0.240068\nvt 0.504166 -0.220965\nvt 0.503774 -0.226214\nvt 0.489506 -0.213933\nvt 0.489373 -0.219339\nvt 0.488895 -0.224042\nvt 0.503553 -0.231205\nvt 0.476551 -0.206079\nvt 0.475545 -0.210210\nvt 0.465374 -0.198493\nvt 0.463401 -0.201476\nvt 0.461379 -0.204446\nvt 0.474219 -0.214124\nvt 0.457753 -0.191296\nvt 0.455730 -0.193364\nvt 0.451460 -0.183847\nvt 0.449878 -0.186469\nvt 0.447944 -0.187890\nvt 0.453784 -0.195758\nvt 0.911042 -0.514690\nvt 0.913626 -0.522097\nvt 0.928731 -0.520815\nvt 0.926018 -0.514368\nvt 0.917715 -0.532845\nvt 0.933157 -0.530550\nvt 0.946019 -0.527732\nvt 0.941492 -0.518736\nvt 0.938916 -0.512909\nvt 0.849978 -0.521901\nvt 0.866629 -0.522223\nvt 0.850446 -0.530788\nvt 0.867170 -0.531111\nvt 0.884308 -0.534600\nvt 0.882960 -0.522554\nvt 0.898475 -0.522616\nvt 0.896515 -0.514403\nvt 0.901826 -0.534169\nvt 0.026473 -0.671068\nvt 0.018337 -0.676100\nvt 0.019033 -0.660919\nvt 0.011506 -0.666130\nvt 0.039401 -0.724425\nvt 0.045947 -0.723834\nvt 0.046629 -0.713959\nvt 0.039760 -0.715027\nvt 0.591068 -0.120411\nvt 0.591178 -0.117330\nvt 0.590877 -0.114521\nvt 0.960263 -0.476920\nvt 0.950808 -0.476409\nvt 0.948680 -0.483433\nvt 0.957289 -0.488376\nvt 0.945767 -0.490056\nvt 0.952276 -0.498465\nvt 0.816829 -0.521348\nvt 0.833371 -0.521589\nvt 0.816539 -0.530672\nvt 0.833544 -0.530722\nvt 0.525714 -0.335264\nvt 0.521135 -0.337723\nvt 0.520890 -0.340014\nvt 0.522933 -0.340236\nvt 0.013543 -0.652431\nvt 0.006132 -0.657821\nvt 0.009223 -0.647301\nvt 0.000000 -0.652818\nvt 0.543558 -0.312607\nvt 0.541595 -0.310101\nvt 0.442833 -0.177016\nvt 0.443739 -0.180878\nvt 0.434406 -0.171911\nvt 0.440620 -0.180091\nvt 0.722803 -0.803072\nvt 0.720602 -0.813397\nvt 0.719873 -0.793775\nvt 0.717374 -0.795034\nvt 0.720207 -0.803569\nvt 0.718330 -0.813218\nvt 0.708162 -0.781859\nvt 0.706246 -0.784078\nvt 0.688106 -0.772421\nvt 0.686665 -0.774980\nvt 0.685641 -0.777150\nvt 0.704384 -0.785772\nvt 0.289905 -0.778632\nvt 0.270758 -0.768373\nvt 0.269401 -0.770765\nvt 0.288364 -0.781244\nvt 0.253004 -0.764814\nvt 0.253549 -0.767063\nvt 0.269153 -0.773234\nvt 0.287259 -0.783482\nvt 0.241905 -0.770679\nvt 0.233871 -0.781894\nvt 0.235721 -0.783286\nvt 0.243153 -0.772687\nvt 0.226706 -0.794621\nvt 0.221016 -0.808345\nvt 0.223246 -0.809084\nvt 0.228834 -0.795602\nvt 0.217441 -0.822542\nvt 0.215068 -0.836998\nvt 0.217435 -0.837400\nvt 0.219732 -0.823102\nvt 0.212942 -0.851461\nvt 0.211887 -0.865926\nvt 0.214524 -0.865966\nvt 0.215471 -0.851687\nvt 0.713214 -0.868146\nvt 0.712943 -0.878560\nvt 0.713945 -0.857722\nvt 0.711612 -0.857544\nvt 0.710931 -0.868048\nvt 0.710778 -0.878547\nvt 0.714847 -0.847303\nvt 0.716194 -0.836490\nvt 0.713920 -0.836176\nvt 0.712525 -0.847054\nvt 0.718242 -0.824863\nvt 0.716005 -0.824484\nvt 0.718728 -0.803829\nvt 0.717000 -0.813109\nvt 0.716003 -0.795703\nvt 0.714975 -0.796224\nvt 0.717569 -0.803954\nvt 0.715881 -0.812954\nvt 0.703342 -0.786703\nvt 0.685024 -0.778326\nvt 0.684485 -0.779265\nvt 0.702559 -0.787502\nvt 0.269186 -0.774629\nvt 0.286681 -0.784758\nvt 0.253609 -0.767923\nvt 0.252939 -0.768994\nvt 0.269047 -0.775697\nvt 0.286111 -0.785697\nvt 0.243796 -0.773731\nvt 0.236837 -0.784000\nvt 0.237832 -0.784473\nvt 0.244152 -0.773993\nvt 0.230102 -0.796122\nvt 0.224570 -0.809506\nvt 0.225670 -0.809847\nvt 0.231168 -0.796516\nvt 0.221091 -0.823453\nvt 0.218837 -0.837668\nvt 0.219983 -0.837900\nvt 0.222215 -0.823748\nvt 0.216952 -0.851839\nvt 0.216058 -0.865990\nvt 0.217257 -0.866003\nvt 0.218130 -0.851971\nvt 0.709542 -0.868018\nvt 0.709502 -0.878538\nvt 0.710225 -0.857487\nvt 0.709074 -0.857474\nvt 0.708382 -0.868022\nvt 0.708401 -0.878535\nvt 0.711151 -0.846948\nvt 0.712577 -0.836014\nvt 0.711448 -0.835882\nvt 0.710007 -0.846891\nvt 0.714686 -0.824273\nvt 0.713571 -0.824076\nvt 0.623263 -0.851678\nvt 0.623409 -0.866602\nvt 0.621984 -0.836817\nvt 0.619640 -0.837128\nvt 0.620860 -0.851800\nvt 0.620980 -0.866581\nvt 0.618940 -0.822106\nvt 0.614403 -0.808685\nvt 0.612234 -0.809623\nvt 0.616650 -0.822701\nvt 0.608641 -0.797701\nvt 0.601956 -0.789124\nvt 0.600279 -0.790756\nvt 0.606703 -0.799011\nvt 0.594648 -0.782933\nvt 0.586535 -0.778050\nvt 0.585281 -0.780038\nvt 0.593189 -0.784776\nvt 0.577347 -0.773362\nvt 0.567654 -0.769469\nvt 0.566805 -0.771569\nvt 0.576300 -0.775418\nvt 0.558061 -0.766988\nvt 0.548620 -0.765465\nvt 0.548392 -0.767691\nvt 0.557398 -0.769146\nvt 0.539387 -0.764350\nvt 0.532272 -0.766016\nvt 0.533890 -0.768171\nvt 0.540103 -0.766633\nvt 0.525995 -0.771950\nvt 0.528768 -0.773040\nvt 0.524379 -0.782948\nvt 0.527264 -0.783416\nvt 0.529464 -0.783739\nvt 0.530749 -0.774342\nvt 0.938159 -0.769244\nvt 0.935253 -0.780668\nvt 0.938066 -0.781474\nvt 0.941040 -0.770336\nvt 0.936951 -0.792614\nvt 0.939234 -0.792530\nvt 0.940347 -0.781732\nvt 0.943282 -0.771160\nvt 0.938587 -0.803267\nvt 0.941487 -0.814289\nvt 0.943711 -0.813772\nvt 0.940826 -0.802903\nvt 0.944527 -0.825381\nvt 0.947308 -0.836408\nvt 0.949568 -0.835936\nvt 0.946765 -0.824846\nvt 0.949423 -0.847172\nvt 0.950921 -0.857796\nvt 0.953192 -0.857556\nvt 0.951699 -0.846806\nvt 0.951845 -0.868424\nvt 0.952119 -0.879057\nvt 0.954305 -0.879061\nvt 0.954085 -0.868305\nvt 0.619463 -0.851924\nvt 0.619568 -0.866569\nvt 0.618277 -0.837394\nvt 0.617163 -0.837668\nvt 0.618328 -0.852058\nvt 0.618426 -0.866561\nvt 0.615321 -0.823123\nvt 0.610977 -0.810215\nvt 0.609945 -0.810727\nvt 0.614236 -0.823520\nvt 0.605579 -0.799781\nvt 0.599306 -0.791664\nvt 0.598484 -0.792409\nvt 0.604639 -0.800421\nvt 0.592335 -0.785737\nvt 0.584524 -0.780996\nvt 0.583857 -0.781743\nvt 0.591613 -0.786518\nvt 0.575631 -0.776329\nvt 0.566207 -0.772433\nvt 0.565617 -0.773074\nvt 0.575001 -0.777015\nvt 0.556861 -0.770004\nvt 0.548085 -0.768566\nvt 0.547650 -0.769197\nvt 0.556308 -0.770634\nvt 0.540393 -0.767400\nvt 0.534542 -0.768814\nvt 0.535207 -0.769208\nvt 0.540411 -0.767968\nvt 0.531507 -0.774694\nvt 0.530499 -0.783521\nvt 0.531211 -0.782991\nvt 0.531858 -0.774457\nvt 0.941531 -0.781542\nvt 0.944464 -0.771220\nvt 0.940453 -0.792289\nvt 0.941436 -0.791926\nvt 0.942445 -0.781135\nvt 0.945353 -0.770916\nvt 0.942080 -0.802637\nvt 0.944994 -0.813496\nvt 0.946081 -0.813282\nvt 0.943129 -0.802360\nvt 0.948069 -0.824599\nvt 0.950885 -0.835746\nvt 0.951996 -0.835648\nvt 0.949173 -0.824439\nvt 0.953023 -0.846692\nvt 0.954513 -0.857511\nvt 0.955623 -0.857539\nvt 0.954137 -0.846666\nvt 0.955409 -0.868291\nvt 0.955562 -0.879063\nvt 0.956629 -0.879064\nvt 0.956523 -0.868326\nvt 0.343633 -0.565899\nvt 0.344099 -0.570867\nvt 0.344646 -0.576081\nvt 0.354831 -0.666539\nvt 0.363776 -0.731908\nvt 0.364699 -0.739314\nvt 0.365140 -0.744123\nvt 0.372994 -0.551698\nvt 0.373454 -0.546614\nvt 0.374185 -0.542322\nvt 0.823579 -0.827409\nvt 0.823298 -0.878880\nvt 0.823338 -0.868751\nvt 0.383669 -0.631851\nvt 0.380541 -0.615184\nvt 0.785803 -0.796248\nvt 0.785900 -0.805255\nvt 0.401703 -0.710119\nvt 0.398605 -0.696347\nvt 0.785907 -0.848395\nvt 0.821646 -0.791993\nvt 0.804164 -0.792229\nvt 0.833343 -0.787104\nvt 0.830887 -0.785064\nvt 0.820246 -0.789857\nvt 0.803836 -0.790146\nvt 0.837782 -0.774880\nvt 0.834664 -0.774288\nvt 0.835286 -0.758505\nvt 0.832750 -0.758671\nvt 0.830622 -0.758743\nvt 0.832071 -0.773182\nvt 0.428226 -0.772920\nvt 0.426948 -0.759797\nvt 0.424200 -0.760655\nvt 0.425139 -0.773227\nvt 0.418954 -0.752007\nvt 0.417196 -0.753893\nvt 0.421966 -0.761933\nvt 0.422678 -0.773452\nvt 0.404410 -0.748967\nvt 0.385130 -0.748218\nvt 0.384806 -0.750564\nvt 0.403336 -0.751213\nvt 0.365274 -0.747421\nvt 0.344341 -0.747492\nvt 0.344393 -0.749875\nvt 0.365255 -0.749779\nvt 0.321915 -0.749471\nvt 0.299490 -0.752336\nvt 0.300513 -0.754598\nvt 0.322057 -0.751875\nvt 0.278467 -0.754965\nvt 0.266908 -0.759322\nvt 0.271886 -0.760067\nvt 0.281898 -0.756823\nvt 0.274324 -0.767187\nvt 0.291779 -0.776187\nvt 0.293419 -0.774155\nvt 0.278033 -0.766598\nvt 0.709401 -0.779338\nvt 0.689974 -0.770075\nvt 0.729210 -0.787012\nvt 0.729843 -0.784503\nvt 0.710184 -0.777087\nvt 0.691698 -0.768194\nvt 0.748330 -0.789978\nvt 0.767085 -0.790880\nvt 0.767276 -0.788463\nvt 0.748727 -0.787529\nvt 0.785837 -0.791575\nvt 0.785918 -0.789245\nvt 0.896958 -0.791715\nvt 0.876131 -0.791540\nvt 0.915431 -0.791507\nvt 0.915006 -0.789248\nvt 0.896865 -0.789441\nvt 0.876378 -0.789250\nvt 0.925095 -0.790874\nvt 0.929523 -0.787686\nvt 0.927651 -0.785580\nvt 0.923970 -0.788606\nvt 0.932531 -0.779161\nvt 0.935195 -0.768350\nvt 0.932779 -0.767707\nvt 0.930392 -0.777668\nvt 0.522969 -0.772305\nvt 0.521407 -0.782691\nvt 0.521771 -0.764300\nvt 0.519467 -0.765962\nvt 0.520417 -0.773187\nvt 0.518971 -0.782575\nvt 0.515223 -0.760643\nvt 0.502516 -0.758695\nvt 0.501858 -0.760934\nvt 0.513672 -0.762707\nvt 0.482765 -0.756093\nvt 0.461508 -0.753552\nvt 0.461609 -0.755883\nvt 0.482461 -0.758404\nvt 0.444293 -0.751684\nvt 0.432959 -0.752787\nvt 0.434931 -0.754759\nvt 0.445389 -0.754091\nvt 0.429817 -0.760416\nvt 0.431207 -0.772628\nvt 0.433572 -0.772388\nvt 0.432149 -0.761487\nvt 0.840535 -0.773991\nvt 0.837794 -0.758279\nvt 0.847408 -0.786904\nvt 0.849126 -0.784775\nvt 0.842610 -0.772631\nvt 0.839744 -0.758052\nvt 0.859372 -0.791187\nvt 0.860367 -0.788829\nvt 0.819489 -0.788653\nvt 0.803652 -0.788943\nvt 0.829571 -0.783958\nvt 0.828616 -0.783225\nvt 0.819003 -0.787622\nvt 0.803570 -0.787861\nvt 0.830616 -0.772596\nvt 0.829301 -0.758807\nvt 0.828184 -0.758890\nvt 0.829449 -0.772317\nvt 0.420594 -0.762718\nvt 0.421309 -0.773625\nvt 0.416387 -0.754847\nvt 0.418397 -0.755466\nvt 0.419458 -0.763178\nvt 0.420166 -0.773694\nvt 0.402689 -0.752424\nvt 0.384625 -0.751960\nvt 0.384531 -0.753115\nvt 0.402396 -0.752818\nvt 0.365246 -0.751189\nvt 0.344426 -0.751303\nvt 0.344474 -0.752474\nvt 0.365234 -0.752353\nvt 0.322149 -0.753314\nvt 0.301076 -0.755945\nvt 0.301424 -0.757065\nvt 0.322262 -0.754483\nvt 0.283775 -0.757777\nvt 0.274337 -0.760388\nvt 0.271369 -0.757840\nvt 0.284805 -0.758680\nvt 0.279802 -0.766338\nvt 0.294244 -0.772854\nvt 0.294752 -0.771758\nvt 0.280203 -0.766536\nvt 0.710657 -0.775762\nvt 0.692667 -0.767040\nvt 0.730220 -0.783026\nvt 0.730512 -0.781873\nvt 0.711068 -0.774683\nvt 0.693347 -0.766065\nvt 0.748961 -0.786079\nvt 0.767391 -0.787030\nvt 0.767470 -0.785867\nvt 0.749119 -0.784916\nvt 0.785964 -0.787880\nvt 0.786016 -0.786744\nvt 0.896813 -0.788110\nvt 0.876527 -0.787907\nvt 0.914751 -0.787922\nvt 0.914593 -0.786797\nvt 0.896790 -0.786984\nvt 0.876622 -0.786779\nvt 0.923295 -0.787299\nvt 0.926570 -0.784429\nvt 0.925694 -0.783636\nvt 0.922785 -0.786248\nvt 0.929126 -0.776852\nvt 0.931358 -0.767335\nvt 0.930219 -0.767058\nvt 0.928065 -0.776328\nvt 0.518923 -0.773704\nvt 0.517529 -0.782512\nvt 0.518281 -0.766712\nvt 0.518238 -0.766954\nvt 0.517751 -0.773929\nvt 0.516375 -0.782347\nvt 0.512774 -0.763852\nvt 0.501488 -0.762276\nvt 0.501259 -0.763408\nvt 0.512457 -0.764308\nvt 0.482296 -0.759781\nvt 0.461693 -0.757266\nvt 0.461687 -0.758416\nvt 0.482155 -0.760925\nvt 0.446154 -0.755476\nvt 0.435787 -0.755729\nvt 0.435835 -0.755625\nvt 0.446604 -0.756620\nvt 0.433403 -0.762070\nvt 0.434960 -0.772185\nvt 0.436083 -0.771918\nvt 0.433752 -0.762136\nvt 0.843839 -0.771841\nvt 0.840830 -0.757882\nvt 0.850081 -0.783626\nvt 0.850825 -0.782751\nvt 0.844870 -0.771305\nvt 0.841851 -0.757717\nvt 0.860939 -0.787438\nvt 0.861311 -0.786315\nvt 0.881378 -0.499628\nvt 0.880325 -0.490660\nvt 0.885997 -0.507255\nvt 0.886910 -0.506213\nvt 0.881882 -0.499162\nvt 0.880748 -0.490626\nvt 0.896468 -0.510620\nvt 0.910459 -0.511355\nvt 0.910772 -0.510318\nvt 0.897141 -0.509353\nvt 0.925211 -0.511818\nvt 0.937828 -0.510628\nvt 0.937604 -0.510061\nvt 0.925245 -0.511103\nvt 0.947633 -0.507975\nvt 0.945658 -0.505912\nvt 0.948162 -0.499228\nvt 0.946856 -0.499519\nvt 0.944880 -0.505553\nvt 0.944109 -0.492692\nvt 0.935027 -0.486977\nvt 0.934656 -0.487632\nvt 0.943228 -0.493348\nvt 0.922487 -0.482557\nvt 0.908299 -0.479746\nvt 0.908304 -0.480370\nvt 0.922305 -0.483188\nvt 0.894462 -0.478190\nvt 0.884238 -0.479047\nvt 0.885103 -0.480240\nvt 0.894858 -0.479248\nvt 0.880568 -0.483529\nvt 0.881517 -0.484037\nvt 0.882327 -0.498831\nvt 0.881072 -0.490756\nvt 0.887721 -0.505217\nvt 0.888568 -0.504473\nvt 0.883277 -0.498602\nvt 0.881654 -0.491104\nvt 0.897713 -0.508248\nvt 0.911046 -0.509441\nvt 0.911284 -0.508515\nvt 0.898283 -0.507250\nvt 0.925262 -0.510435\nvt 0.937353 -0.509505\nvt 0.937118 -0.508498\nvt 0.925307 -0.509445\nvt 0.944092 -0.505140\nvt 0.945648 -0.499712\nvt 0.944456 -0.499712\nvt 0.943316 -0.504488\nvt 0.942339 -0.493939\nvt 0.934212 -0.488290\nvt 0.933612 -0.489004\nvt 0.941314 -0.494482\nvt 0.922100 -0.483703\nvt 0.908304 -0.480846\nvt 0.908209 -0.481705\nvt 0.921763 -0.484471\nvt 0.895185 -0.480249\nvt 0.885904 -0.481582\nvt 0.886478 -0.482837\nvt 0.895446 -0.481339\nvt 0.882466 -0.484716\nvt 0.883022 -0.485528\nvt 0.833078 -0.472777\nvt 0.817537 -0.472438\nvt 0.848401 -0.473058\nvt 0.848251 -0.471314\nvt 0.833154 -0.470897\nvt 0.817598 -0.470350\nvt 0.863195 -0.473053\nvt 0.874100 -0.471424\nvt 0.872390 -0.468987\nvt 0.862324 -0.470967\nvt 0.878092 -0.467094\nvt 0.879003 -0.459565\nvt 0.877278 -0.458837\nvt 0.876013 -0.465435\nvt 0.879863 -0.448696\nvt 0.880145 -0.437199\nvt 0.878191 -0.437145\nvt 0.878188 -0.448308\nvt 0.880026 -0.427839\nvt 0.876590 -0.421085\nvt 0.873759 -0.423079\nvt 0.877225 -0.428704\nvt 0.867335 -0.414049\nvt 0.865889 -0.416113\nvt 0.851613 -0.409764\nvt 0.851054 -0.411394\nvt 0.850394 -0.412952\nvt 0.864197 -0.417773\nvt 0.835619 -0.405916\nvt 0.835329 -0.407847\nvt 0.819246 -0.403796\nvt 0.819046 -0.406017\nvt 0.818938 -0.407938\nvt 0.835091 -0.409541\nvt 0.833283 -0.468364\nvt 0.817727 -0.467396\nvt 0.848244 -0.469128\nvt 0.848256 -0.465989\nvt 0.833548 -0.464989\nvt 0.818016 -0.463633\nvt 0.861759 -0.468451\nvt 0.870911 -0.466048\nvt 0.869042 -0.462818\nvt 0.861084 -0.465290\nvt 0.873756 -0.463308\nvt 0.875068 -0.457707\nvt 0.871888 -0.456451\nvt 0.870868 -0.461108\nvt 0.875986 -0.447693\nvt 0.875752 -0.437020\nvt 0.872270 -0.437240\nvt 0.872695 -0.447112\nvt 0.874124 -0.429670\nvt 0.870953 -0.425220\nvt 0.868365 -0.427783\nvt 0.870731 -0.431149\nvt 0.862579 -0.420035\nvt 0.849634 -0.415285\nvt 0.848635 -0.418861\nvt 0.860824 -0.423309\nvt 0.834720 -0.412091\nvt 0.818793 -0.410516\nvt 0.818645 -0.414074\nvt 0.834220 -0.415693\nvt 0.712840 -0.683971\nvt 0.721354 -0.684246\nvt 0.706835 -0.685775\nvt 0.709490 -0.689227\nvt 0.714317 -0.687805\nvt 0.721794 -0.688151\nvt 0.700346 -0.690192\nvt 0.706342 -0.691911\nvt 0.703547 -0.700933\nvt 0.708996 -0.699744\nvt 0.711021 -0.699492\nvt 0.709066 -0.693666\nvt 0.706691 -0.710892\nvt 0.711735 -0.707405\nvt 0.710530 -0.717960\nvt 0.715190 -0.713048\nvt 0.716434 -0.709634\nvt 0.713264 -0.705347\nvt 0.717331 -0.720232\nvt 0.720979 -0.714878\nvt 0.725757 -0.720525\nvt 0.728115 -0.715089\nvt 0.728135 -0.711443\nvt 0.721548 -0.711111\nvt 0.733818 -0.721170\nvt 0.735162 -0.715510\nvt 0.742852 -0.722415\nvt 0.743164 -0.716417\nvt 0.743079 -0.713164\nvt 0.735136 -0.712089\nvt 0.754432 -0.724192\nvt 0.753314 -0.717926\nvt 0.762073 -0.717019\nvt 0.760336 -0.713674\nvt 0.752559 -0.714411\nvt 0.765209 -0.711307\nvt 0.764837 -0.703311\nvt 0.762680 -0.703318\nvt 0.763037 -0.709385\nvt 0.764099 -0.695235\nvt 0.760591 -0.689053\nvt 0.758316 -0.692757\nvt 0.761682 -0.697265\nvt 0.751465 -0.686601\nvt 0.740209 -0.685570\nvt 0.739753 -0.689669\nvt 0.750084 -0.690716\nvt 0.730343 -0.684742\nvt 0.730321 -0.688761\nvt 0.715025 -0.689345\nvt 0.722009 -0.689556\nvt 0.710918 -0.690832\nvt 0.711734 -0.691539\nvt 0.715297 -0.689841\nvt 0.722071 -0.690041\nvt 0.710465 -0.694475\nvt 0.712008 -0.699510\nvt 0.712877 -0.699551\nvt 0.711541 -0.694851\nvt 0.714136 -0.704562\nvt 0.717201 -0.708105\nvt 0.717927 -0.707240\nvt 0.714943 -0.704243\nvt 0.721922 -0.709401\nvt 0.728193 -0.709876\nvt 0.728378 -0.708900\nvt 0.722319 -0.708283\nvt 0.735120 -0.710812\nvt 0.742961 -0.712272\nvt 0.742931 -0.711979\nvt 0.735199 -0.710162\nvt 0.752117 -0.713083\nvt 0.759310 -0.711946\nvt 0.758761 -0.711241\nvt 0.751957 -0.712826\nvt 0.761858 -0.708491\nvt 0.761631 -0.703292\nvt 0.760755 -0.703238\nvt 0.761000 -0.708006\nvt 0.760343 -0.698139\nvt 0.757008 -0.694509\nvt 0.756054 -0.695499\nvt 0.759297 -0.698534\nvt 0.749324 -0.692568\nvt 0.739516 -0.691396\nvt 0.739315 -0.692477\nvt 0.748796 -0.693796\nvt 0.730314 -0.690408\nvt 0.730263 -0.691243\nvt 0.160732 -0.659302\nvt 0.149497 -0.670171\nvt 0.168193 -0.646574\nvt 0.165724 -0.645280\nvt 0.158814 -0.657570\nvt 0.148139 -0.668086\nvt 0.172266 -0.632850\nvt 0.173788 -0.619585\nvt 0.170772 -0.619242\nvt 0.169424 -0.632058\nvt 0.176352 -0.608594\nvt 0.173827 -0.608469\nvt 0.173301 -0.599958\nvt 0.170585 -0.600069\nvt 0.170860 -0.608418\nvt 0.020608 -0.629962\nvt 0.021351 -0.632179\nvt 0.023146 -0.631187\nvt 0.021819 -0.628363\nvt 0.025655 -0.635207\nvt 0.027808 -0.633817\nvt 0.025138 -0.629717\nvt 0.026085 -0.624676\nvt 0.029385 -0.641310\nvt 0.034666 -0.649147\nvt 0.036581 -0.647617\nvt 0.031479 -0.639875\nvt 0.042092 -0.658261\nvt 0.052190 -0.667525\nvt 0.053621 -0.665599\nvt 0.043787 -0.656560\nvt 0.065891 -0.676030\nvt 0.081939 -0.682075\nvt 0.082637 -0.679607\nvt 0.066991 -0.673848\nvt 0.099010 -0.684617\nvt 0.116638 -0.683518\nvt 0.116347 -0.681079\nvt 0.099219 -0.682066\nvt 0.134157 -0.678614\nvt 0.133367 -0.676339\nvt 0.532747 -0.646781\nvt 0.517305 -0.642008\nvt 0.549464 -0.648080\nvt 0.549592 -0.645275\nvt 0.533467 -0.644195\nvt 0.518525 -0.639836\nvt 0.565282 -0.646068\nvt 0.579446 -0.641669\nvt 0.578522 -0.639156\nvt 0.564852 -0.643384\nvt 0.590888 -0.635668\nvt 0.600411 -0.627991\nvt 0.598664 -0.625997\nvt 0.589529 -0.633406\nvt 0.608634 -0.618515\nvt 0.616081 -0.606475\nvt 0.613632 -0.604948\nvt 0.606461 -0.616710\nvt 0.623623 -0.590824\nvt 0.628847 -0.577384\nvt 0.625651 -0.576438\nvt 0.621013 -0.589695\nvt 0.481122 -0.570625\nvt 0.480699 -0.567063\nvt 0.481868 -0.576953\nvt 0.484452 -0.576546\nvt 0.483771 -0.570271\nvt 0.483853 -0.566595\nvt 0.489953 -0.612141\nvt 0.485719 -0.599344\nvt 0.496292 -0.624268\nvt 0.498156 -0.623005\nvt 0.491975 -0.611214\nvt 0.488014 -0.598619\nvt 0.505267 -0.634435\nvt 0.506898 -0.632711\nvt 0.360963 -0.589744\nvt 0.362505 -0.600935\nvt 0.377858 -0.600192\nvt 0.375953 -0.588951\nvt 0.393684 -0.599503\nvt 0.391698 -0.588193\nvt 0.186885 -0.608927\nvt 0.201159 -0.609188\nvt 0.201807 -0.600363\nvt 0.221224 -0.609009\nvt 0.220724 -0.600073\nvt 0.274110 -0.595843\nvt 0.275029 -0.606192\nvt 0.303441 -0.604337\nvt 0.302559 -0.593570\nvt 0.328596 -0.602728\nvt 0.327661 -0.591677\nvt 0.468788 -0.590705\nvt 0.477660 -0.588815\nvt 0.480959 -0.587706\nvt 0.410442 -0.598802\nvt 0.408898 -0.587653\nvt 0.428816 -0.597288\nvt 0.427259 -0.586348\nvt 0.246631 -0.607930\nvt 0.245727 -0.598225\nvt 0.450317 -0.594088\nvt 0.447134 -0.583218\nvt 0.179579 -0.608812\nvt 0.347184 -0.601683\nvt 0.345995 -0.590524\nvt 0.172971 -0.594522\nvt 0.172918 -0.591314\nvt 0.169687 -0.591803\nvt 0.170410 -0.594775\nvt 0.483191 -0.587078\nvt 0.485690 -0.586529\nvt 0.241731 -0.570265\nvt 0.270561 -0.566447\nvt 0.217519 -0.574835\nvt 0.202439 -0.579994\nvt 0.205198 -0.595963\nvt 0.220712 -0.594283\nvt 0.244813 -0.591391\nvt 0.273327 -0.588534\nvt 0.301849 -0.586042\nvt 0.326978 -0.584072\nvt 0.345252 -0.582922\nvt 0.360121 -0.582140\nvt 0.375015 -0.581334\nvt 0.390779 -0.580597\nvt 0.408328 -0.580399\nvt 0.425781 -0.580192\nvt 0.441439 -0.578872\nvt 0.441316 -0.560053\nvt 0.425533 -0.557332\nvt 0.407307 -0.557026\nvt 0.388990 -0.557825\nvt 0.372971 -0.558400\nvt 0.358071 -0.558980\nvt 0.343235 -0.559788\nvt 0.324881 -0.561063\nvt 0.299457 -0.563268\nvt 0.135449 -0.813892\nvt 0.124621 -0.812328\nvt 0.111362 -0.809808\nvt 0.096542 -0.807098\nvt 0.081040 -0.804915\nvt 0.065047 -0.803118\nvt 0.048834 -0.801538\nvt 0.036566 -0.801035\nvt 0.003268 -0.830932\nvt 0.001073 -0.847431\nvt 0.004922 -0.847639\nvt 0.006941 -0.831718\nvt 0.000000 -0.864083\nvt 0.003884 -0.864119\nvt 0.005983 -0.864139\nvt 0.007031 -0.847803\nvt 0.008940 -0.832411\nvt 0.025191 -0.849047\nvt 0.024737 -0.863830\nvt 0.026334 -0.835208\nvt 0.024238 -0.834895\nvt 0.023035 -0.848811\nvt 0.022539 -0.863799\nvt 0.028760 -0.823199\nvt 0.030070 -0.813487\nvt 0.028316 -0.814756\nvt 0.026582 -0.823300\nvt 0.024592 -0.804794\nvt 0.023006 -0.808438\nvt 0.016108 -0.799873\nvt 0.016377 -0.808052\nvt 0.017371 -0.811078\nvt 0.022563 -0.811033\nvt 0.007906 -0.815042\nvt 0.011283 -0.817161\nvt 0.012955 -0.819141\nvt 0.759735 -0.162824\nvt 0.776035 -0.163499\nvt 0.776181 -0.158796\nvt 0.760098 -0.158122\nvt 0.793217 -0.163787\nvt 0.793189 -0.159083\nvt 0.793158 -0.152860\nvt 0.776400 -0.152572\nvt 0.760435 -0.151885\nvt 0.672780 -0.162105\nvt 0.688132 -0.161917\nvt 0.688084 -0.157228\nvt 0.672812 -0.157397\nvt 0.702358 -0.161701\nvt 0.702237 -0.156996\nvt 0.702075 -0.150719\nvt 0.687959 -0.151054\nvt 0.672875 -0.151174\nvt 0.714509 -0.160304\nvt 0.714279 -0.155641\nvt 0.723860 -0.158767\nvt 0.723688 -0.154036\nvt 0.723596 -0.147644\nvt 0.714149 -0.149524\nvt 0.731194 -0.158742\nvt 0.731237 -0.153980\nvt 0.736071 -0.159539\nvt 0.736551 -0.154760\nvt 0.736845 -0.148472\nvt 0.731531 -0.147708\nvt 0.745325 -0.160981\nvt 0.745970 -0.156307\nvt 0.746266 -0.150082\nvt 0.783971 -0.590095\nvt 0.804133 -0.589622\nvt 0.765789 -0.591114\nvt 0.766210 -0.594964\nvt 0.784235 -0.594281\nvt 0.804185 -0.593983\nvt 0.751521 -0.592597\nvt 0.740460 -0.594510\nvt 0.741190 -0.597584\nvt 0.751980 -0.596033\nvt 0.731833 -0.596535\nvt 0.726563 -0.601791\nvt 0.729743 -0.604933\nvt 0.733645 -0.600036\nvt 0.725242 -0.614519\nvt 0.726405 -0.628603\nvt 0.728909 -0.628408\nvt 0.727976 -0.616143\nvt 0.727841 -0.637952\nvt 0.730585 -0.643172\nvt 0.733579 -0.639758\nvt 0.730878 -0.635941\nvt 0.736602 -0.645349\nvt 0.745447 -0.646067\nvt 0.745990 -0.642800\nvt 0.738381 -0.641880\nvt 0.756492 -0.646346\nvt 0.770572 -0.646185\nvt 0.770608 -0.642604\nvt 0.756580 -0.642978\nvt 0.788434 -0.645806\nvt 0.808199 -0.645508\nvt 0.808114 -0.641508\nvt 0.788400 -0.641962\nvt 0.784509 -0.598808\nvt 0.804215 -0.598629\nvt 0.766665 -0.599109\nvt 0.766982 -0.604215\nvt 0.784708 -0.604268\nvt 0.804212 -0.604002\nvt 0.752419 -0.599641\nvt 0.741651 -0.600699\nvt 0.742475 -0.604740\nvt 0.752776 -0.604042\nvt 0.735184 -0.603451\nvt 0.732643 -0.607529\nvt 0.736585 -0.609449\nvt 0.737742 -0.607009\nvt 0.730912 -0.617104\nvt 0.731775 -0.628023\nvt 0.736392 -0.626893\nvt 0.735673 -0.617471\nvt 0.733940 -0.633970\nvt 0.736164 -0.636441\nvt 0.738263 -0.632254\nvt 0.737716 -0.631314\nvt 0.739652 -0.638134\nvt 0.746407 -0.639037\nvt 0.746688 -0.633884\nvt 0.740532 -0.633266\nvt 0.756740 -0.639047\nvt 0.770723 -0.638474\nvt 0.770878 -0.633157\nvt 0.756898 -0.633740\nvt 0.788436 -0.637595\nvt 0.808052 -0.637043\nvt 0.808090 -0.631732\nvt 0.788562 -0.632302\nvt 0.286916 -0.856449\nvt 0.275430 -0.856347\nvt 0.297375 -0.853852\nvt 0.295476 -0.851987\nvt 0.285976 -0.853813\nvt 0.275430 -0.853774\nvt 0.300468 -0.843615\nvt 0.297436 -0.833309\nvt 0.295471 -0.835159\nvt 0.297969 -0.843607\nvt 0.288413 -0.827550\nvt 0.286943 -0.830428\nvt 0.275520 -0.827139\nvt 0.275396 -0.830024\nvt 0.275237 -0.832607\nvt 0.285874 -0.833029\nvt 0.266871 -0.826532\nvt 0.268185 -0.829494\nvt 0.261628 -0.830350\nvt 0.264121 -0.832585\nvt 0.266039 -0.834437\nvt 0.269051 -0.832068\nvt 0.260530 -0.842656\nvt 0.263415 -0.842734\nvt 0.264241 -0.852935\nvt 0.266210 -0.851218\nvt 0.265743 -0.842785\nvt 0.268194 -0.856387\nvt 0.269212 -0.853914\nvt 0.479728 -0.023113\nvt 0.467778 -0.023238\nvt 0.467500 -0.029161\nvt 0.477457 -0.029289\nvt 0.455829 -0.023363\nvt 0.455884 -0.029036\nvt 0.445477 -0.022701\nvt 0.445113 -0.028562\nvt 0.435126 -0.022039\nvt 0.434766 -0.027914\nvt 0.434406 -0.033789\nvt 0.444749 -0.034423\nvt 0.539169 -0.025188\nvt 0.527026 -0.024096\nvt 0.526927 -0.029981\nvt 0.539062 -0.031073\nvt 0.514883 -0.023004\nvt 0.516932 -0.029375\nvt 0.514704 -0.034775\nvt 0.526829 -0.035867\nvt 0.538954 -0.036958\nvt 0.511284 -0.023853\nvt 0.511215 -0.029738\nvt 0.507685 -0.024701\nvt 0.505947 -0.030355\nvt 0.507591 -0.036472\nvt 0.511147 -0.035624\nvt 0.497311 -0.024668\nvt 0.497295 -0.030507\nvt 0.486938 -0.024635\nvt 0.488612 -0.030284\nvt 0.497279 -0.036347\nvt 0.483333 -0.023874\nvt 0.483247 -0.029770\nvt 0.950916 -0.472490\nvt 0.941916 -0.469500\nvt 0.956754 -0.471208\nvt 0.955596 -0.469275\nvt 0.951004 -0.470734\nvt 0.943466 -0.467963\nvt 0.963180 -0.464698\nvt 0.958208 -0.463332\nvt 0.961872 -0.453108\nvt 0.956686 -0.453398\nvt 0.954303 -0.453435\nvt 0.955941 -0.462226\nvt 0.960504 -0.443803\nvt 0.955605 -0.445162\nvt 0.957948 -0.436604\nvt 0.953597 -0.439367\nvt 0.951698 -0.441071\nvt 0.953287 -0.446174\nvt 0.949445 -0.434095\nvt 0.948282 -0.435886\nvt 0.940232 -0.430808\nvt 0.939959 -0.432155\nvt 0.940260 -0.434030\nvt 0.947301 -0.437611\nvt 0.928265 -0.426454\nvt 0.929045 -0.428309\nvt 0.919554 -0.427730\nvt 0.922683 -0.430031\nvt 0.930788 -0.430277\nvt 0.916246 -0.432003\nvt 0.916598 -0.439884\nvt 0.921435 -0.439872\nvt 0.920571 -0.433375\nvt 0.916865 -0.450231\nvt 0.919933 -0.459377\nvt 0.924764 -0.457205\nvt 0.922086 -0.449040\nvt 0.929848 -0.465131\nvt 0.933148 -0.463161\nvt 0.634806 -0.383275\nvt 0.636684 -0.376716\nvt 0.634777 -0.372922\nvt 0.630564 -0.378022\nvt 0.638562 -0.370158\nvt 0.639269 -0.368649\nvt 0.636890 -0.367297\nvt 0.632871 -0.369126\nvt 0.628852 -0.370956\nvt 0.647597 -0.365492\nvt 0.646848 -0.364220\nvt 0.656633 -0.360827\nvt 0.655039 -0.360116\nvt 0.655307 -0.358598\nvt 0.646098 -0.362948\nvt 0.661925 -0.357712\nvt 0.661369 -0.356817\nvt 0.667218 -0.354598\nvt 0.666768 -0.353922\nvt 0.666318 -0.353246\nvt 0.660812 -0.355922\nvt 0.554419 -0.408647\nvt 0.560660 -0.410888\nvt 0.559420 -0.407963\nvt 0.554241 -0.407862\nvt 0.566902 -0.413130\nvt 0.565935 -0.407662\nvt 0.562298 -0.402998\nvt 0.558180 -0.405038\nvt 0.554063 -0.407078\nvt 0.578895 -0.414592\nvt 0.575119 -0.406557\nvt 0.590889 -0.416055\nvt 0.584447 -0.404841\nvt 0.571343 -0.398523\nvt 0.596836 -0.414115\nvt 0.591391 -0.402704\nvt 0.602783 -0.412175\nvt 0.598039 -0.399993\nvt 0.612405 -0.409055\nvt 0.606476 -0.396558\nvt 0.622027 -0.405935\nvt 0.615478 -0.391753\nvt 0.628416 -0.394605\nvt 0.623819 -0.384937\nvt 0.619221 -0.375270\nvt 0.451434 -0.156945\nvt 0.457781 -0.153250\nvt 0.456314 -0.151593\nvt 0.449953 -0.155339\nvt 0.464759 -0.150019\nvt 0.462097 -0.147086\nvt 0.459308 -0.146536\nvt 0.454839 -0.149997\nvt 0.448478 -0.153772\nvt 0.442631 -0.162705\nvt 0.446640 -0.159983\nvt 0.444406 -0.158853\nvt 0.439271 -0.162261\nvt 0.442179 -0.157734\nvt 0.435914 -0.161810\nvt 0.506235 -0.156552\nvt 0.506983 -0.151296\nvt 0.504385 -0.151192\nvt 0.503693 -0.156400\nvt 0.508936 -0.146776\nvt 0.506195 -0.145335\nvt 0.500985 -0.147103\nvt 0.501858 -0.151191\nvt 0.501178 -0.156265\nvt 0.505745 -0.163334\nvt 0.505885 -0.160318\nvt 0.503335 -0.160311\nvt 0.503164 -0.163573\nvt 0.500789 -0.160288\nvt 0.500582 -0.163787\nvt 0.538524 -0.151188\nvt 0.539215 -0.154374\nvt 0.541598 -0.154000\nvt 0.540875 -0.150789\nvt 0.539981 -0.157373\nvt 0.542366 -0.156904\nvt 0.544743 -0.156405\nvt 0.543987 -0.153603\nvt 0.543267 -0.150401\nvt 0.536904 -0.144852\nvt 0.537882 -0.147642\nvt 0.540203 -0.146979\nvt 0.538229 -0.142854\nvt 0.542601 -0.146411\nvt 0.542251 -0.142352\nvt 0.456890 -0.132109\nvt 0.458006 -0.136412\nvt 0.466118 -0.141082\nvt 0.465838 -0.131741\nvt 0.459178 -0.140407\nvt 0.460168 -0.143636\nvt 0.471483 -0.148331\nvt 0.478117 -0.147570\nvt 0.477892 -0.139690\nvt 0.477432 -0.130784\nvt 0.476238 -0.114910\nvt 0.464030 -0.115677\nvt 0.463746 -0.123554\nvt 0.476549 -0.122680\nvt 0.454532 -0.116291\nvt 0.454940 -0.120258\nvt 0.455490 -0.124144\nvt 0.456079 -0.128042\nvt 0.509897 -0.138679\nvt 0.501730 -0.138341\nvt 0.512775 -0.145129\nvt 0.518401 -0.144676\nvt 0.519755 -0.137264\nvt 0.519772 -0.128125\nvt 0.510737 -0.128898\nvt 0.502203 -0.129243\nvt 0.511353 -0.120359\nvt 0.502671 -0.120957\nvt 0.520454 -0.119690\nvt 0.519994 -0.111765\nvt 0.511317 -0.112476\nvt 0.502632 -0.113133\nvt 0.484892 -0.147071\nvt 0.490612 -0.139881\nvt 0.491416 -0.146743\nvt 0.497146 -0.146343\nvt 0.490380 -0.130206\nvt 0.490299 -0.121781\nvt 0.490022 -0.114011\nvt 0.525884 -0.144319\nvt 0.533719 -0.137816\nvt 0.532533 -0.144174\nvt 0.535638 -0.144005\nvt 0.542420 -0.138460\nvt 0.543004 -0.134390\nvt 0.543463 -0.130196\nvt 0.544115 -0.126043\nvt 0.532464 -0.127598\nvt 0.534096 -0.118680\nvt 0.544644 -0.121958\nvt 0.544930 -0.117919\nvt 0.544983 -0.113924\nvt 0.544837 -0.109890\nvt 0.532621 -0.110746\nvt 0.716243 -0.142924\nvt 0.703347 -0.143784\nvt 0.728358 -0.142266\nvt 0.727299 -0.137449\nvt 0.718328 -0.136218\nvt 0.704645 -0.136874\nvt 0.688642 -0.144134\nvt 0.672997 -0.144185\nvt 0.689302 -0.137175\nvt 0.673102 -0.137197\nvt 0.050887 -0.055764\nvt 0.052543 -0.059048\nvt 0.054249 -0.054163\nvt 0.051407 -0.052052\nvt 0.055054 -0.063396\nvt 0.057693 -0.056668\nvt 0.058208 -0.048407\nvt 0.054413 -0.047648\nvt 0.051295 -0.047072\nvt 0.053856 -0.041496\nvt 0.051094 -0.042541\nvt 0.057256 -0.040432\nvt 0.054278 -0.033456\nvt 0.051966 -0.037230\nvt 0.050469 -0.039647\nvt 0.045007 -0.055997\nvt 0.044361 -0.052268\nvt 0.041041 -0.054517\nvt 0.043097 -0.059414\nvt 0.044190 -0.047191\nvt 0.040570 -0.047890\nvt 0.036503 -0.048820\nvt 0.037408 -0.057129\nvt 0.040505 -0.063796\nvt 0.044313 -0.042546\nvt 0.040959 -0.041598\nvt 0.044840 -0.039604\nvt 0.042857 -0.037188\nvt 0.039996 -0.033551\nvt 0.037210 -0.040721\nvt 0.048010 -0.051464\nvt 0.048072 -0.056052\nvt 0.047883 -0.046924\nvt 0.047858 -0.042858\nvt 0.047780 -0.039409\nvt 0.047459 -0.035859\nvt 0.047147 -0.032792\nvt 0.054991 -0.072499\nvt 0.054701 -0.068859\nvt 0.047816 -0.069744\nvt 0.047941 -0.073283\nvt 0.047797 -0.065327\nvt 0.040884 -0.069325\nvt 0.040852 -0.072990\nvt 0.061620 -0.064827\nvt 0.061894 -0.057946\nvt 0.066665 -0.064745\nvt 0.065237 -0.058142\nvt 0.065356 -0.049715\nvt 0.062209 -0.049165\nvt 0.061227 -0.040564\nvt 0.064344 -0.041340\nvt 0.064528 -0.034123\nvt 0.060193 -0.034234\nvt 0.032390 -0.049804\nvt 0.033262 -0.058724\nvt 0.029217 -0.050606\nvt 0.029960 -0.059675\nvt 0.031277 -0.066514\nvt 0.034895 -0.065515\nvt 0.034637 -0.034615\nvt 0.033217 -0.040973\nvt 0.031277 -0.034100\nvt 0.030036 -0.041559\nvt 0.047926 -0.060774\nvt 0.066379 -0.057751\nvt 0.066592 -0.049830\nvt 0.067744 -0.063799\nvt 0.068322 -0.062915\nvt 0.067321 -0.057103\nvt 0.067599 -0.049696\nvt 0.074517 -0.063623\nvt 0.074203 -0.062486\nvt 0.080548 -0.059412\nvt 0.079526 -0.058701\nvt 0.078746 -0.057979\nvt 0.074113 -0.061643\nvt 0.082497 -0.052804\nvt 0.081255 -0.052656\nvt 0.082352 -0.044338\nvt 0.081145 -0.044695\nvt 0.080185 -0.044758\nvt 0.080292 -0.052220\nvt 0.081668 -0.035929\nvt 0.080715 -0.036744\nvt 0.078687 -0.029095\nvt 0.078141 -0.030975\nvt 0.077762 -0.031762\nvt 0.079868 -0.037323\nvt 0.071360 -0.031012\nvt 0.071614 -0.031784\nvt 0.066279 -0.035669\nvt 0.067345 -0.036388\nvt 0.071890 -0.032630\nvt 0.065614 -0.041938\nvt 0.066703 -0.042303\nvt 0.068480 -0.056587\nvt 0.068798 -0.049602\nvt 0.068793 -0.062112\nvt 0.069292 -0.061306\nvt 0.069878 -0.056314\nvt 0.070194 -0.049541\nvt 0.073863 -0.060646\nvt 0.077816 -0.057224\nvt 0.076668 -0.056427\nvt 0.073282 -0.059477\nvt 0.079156 -0.051835\nvt 0.079031 -0.044820\nvt 0.077651 -0.044863\nvt 0.077800 -0.051467\nvt 0.078828 -0.037857\nvt 0.077392 -0.032531\nvt 0.076905 -0.033439\nvt 0.077504 -0.038282\nvt 0.072251 -0.033595\nvt 0.068414 -0.037102\nvt 0.069634 -0.037801\nvt 0.072834 -0.034756\nvt 0.067946 -0.042621\nvt 0.069365 -0.042851\nvt 0.055543 -0.028718\nvt 0.052613 -0.029068\nvt 0.051201 -0.031602\nvt 0.054533 -0.025199\nvt 0.051495 -0.026574\nvt 0.049840 -0.027438\nvt 0.050478 -0.029315\nvt 0.049655 -0.031056\nvt 0.047053 -0.025263\nvt 0.047043 -0.025919\nvt 0.039610 -0.025101\nvt 0.042561 -0.026578\nvt 0.044684 -0.027446\nvt 0.047264 -0.027068\nvt 0.038494 -0.028746\nvt 0.041427 -0.029066\nvt 0.042872 -0.031654\nvt 0.044789 -0.030948\nvt 0.044000 -0.029256\nvt 0.047023 -0.031494\nvt 0.047212 -0.030631\nvt 0.538339 -0.217340\nvt 0.538946 -0.215287\nvt 0.535844 -0.215267\nvt 0.535403 -0.217483\nvt 0.539553 -0.213234\nvt 0.536437 -0.213036\nvt 0.532840 -0.213194\nvt 0.532358 -0.215687\nvt 0.532467 -0.217625\nvt 0.540686 -0.211086\nvt 0.537334 -0.210774\nvt 0.541818 -0.208938\nvt 0.538055 -0.208490\nvt 0.534248 -0.208143\nvt 0.533635 -0.210661\nvt 0.541607 -0.206554\nvt 0.538116 -0.206194\nvt 0.541396 -0.204169\nvt 0.537842 -0.203926\nvt 0.533851 -0.203326\nvt 0.534184 -0.205700\nvt 0.541006 -0.201926\nvt 0.537555 -0.201721\nvt 0.540616 -0.199682\nvt 0.537263 -0.199548\nvt 0.533910 -0.199415\nvt 0.533656 -0.201018\nvt 0.528104 -0.216985\nvt 0.527786 -0.219904\nvt 0.528547 -0.214015\nvt 0.523904 -0.215169\nvt 0.523466 -0.218722\nvt 0.523105 -0.222184\nvt 0.529240 -0.210947\nvt 0.529681 -0.207884\nvt 0.524734 -0.207668\nvt 0.524496 -0.211432\nvt 0.529369 -0.204934\nvt 0.528897 -0.202083\nvt 0.523461 -0.200520\nvt 0.524112 -0.204033\nvt 0.528859 -0.199318\nvt 0.529038 -0.196596\nvt 0.524166 -0.193777\nvt 0.523613 -0.197120\nvt 0.787828 -0.313773\nvt 0.776762 -0.305502\nvt 0.775490 -0.313672\nvt 0.786489 -0.321671\nvt 0.764109 -0.297477\nvt 0.763722 -0.306623\nvt 0.763507 -0.316785\nvt 0.774456 -0.322877\nvt 0.785740 -0.330894\nvt 0.450231 -0.379631\nvt 0.451161 -0.375051\nvt 0.425629 -0.369009\nvt 0.425031 -0.373988\nvt 0.451784 -0.370851\nvt 0.426200 -0.364744\nvt 0.397161 -0.360716\nvt 0.396673 -0.365025\nvt 0.396130 -0.370117\nvt 0.276827 -0.361815\nvt 0.276182 -0.356806\nvt 0.257862 -0.356237\nvt 0.258486 -0.361075\nvt 0.275284 -0.352614\nvt 0.256982 -0.352266\nvt 0.237214 -0.353971\nvt 0.237971 -0.357925\nvt 0.238938 -0.362440\nvt 0.726965 -0.964661\nvt 0.746898 -0.962339\nvt 0.746033 -0.953447\nvt 0.729787 -0.953940\nvt 0.766164 -0.961628\nvt 0.766176 -0.952676\nvt 0.766175 -0.941545\nvt 0.745011 -0.942288\nvt 0.727801 -0.943033\nvt 0.840916 -0.965273\nvt 0.858162 -0.961926\nvt 0.858501 -0.952803\nvt 0.841338 -0.952946\nvt 0.875829 -0.961591\nvt 0.876922 -0.952610\nvt 0.878485 -0.941467\nvt 0.859341 -0.941549\nvt 0.841638 -0.941626\nvt 0.606899 -0.981760\nvt 0.630404 -0.980534\nvt 0.634882 -0.971217\nvt 0.616582 -0.969811\nvt 0.647161 -0.977762\nvt 0.651268 -0.970186\nvt 0.657515 -0.962085\nvt 0.642013 -0.960934\nvt 0.624349 -0.958272\nvt 0.868122 -0.127355\nvt 0.867813 -0.124197\nvt 0.851563 -0.124250\nvt 0.852044 -0.127497\nvt 0.867874 -0.121363\nvt 0.851874 -0.121363\nvt 0.834278 -0.121198\nvt 0.833698 -0.124123\nvt 0.834374 -0.127432\nvt 0.694487 -0.468520\nvt 0.696451 -0.474903\nvt 0.709693 -0.471189\nvt 0.707590 -0.464802\nvt 0.698575 -0.480690\nvt 0.711595 -0.476744\nvt 0.726149 -0.474364\nvt 0.724653 -0.468695\nvt 0.722653 -0.460167\nvt 0.372629 -0.844398\nvt 0.372734 -0.828010\nvt 0.372464 -0.858063\nvt 0.394524 -0.858944\nvt 0.390682 -0.844493\nvt 0.393769 -0.827969\nvt 0.830042 -0.691708\nvt 0.829902 -0.682823\nvt 0.830012 -0.702570\nvt 0.846326 -0.702404\nvt 0.846565 -0.692252\nvt 0.850252 -0.682512\nvt 0.905890 -0.595582\nvt 0.906474 -0.610082\nvt 0.917950 -0.609434\nvt 0.917368 -0.595256\nvt 0.907363 -0.626316\nvt 0.918876 -0.625263\nvt 0.929271 -0.623910\nvt 0.928267 -0.608427\nvt 0.927437 -0.594701\nvt 0.276867 -0.374563\nvt 0.276380 -0.379526\nvt 0.292250 -0.380067\nvt 0.292797 -0.375099\nvt 0.275761 -0.384646\nvt 0.291588 -0.385226\nvt 0.306485 -0.385953\nvt 0.307088 -0.380723\nvt 0.307595 -0.375701\nvt 0.448641 -0.390717\nvt 0.448289 -0.395124\nvt 0.467731 -0.399346\nvt 0.466952 -0.395235\nvt 0.447263 -0.399273\nvt 0.465749 -0.402976\nvt 0.479101 -0.408404\nvt 0.481031 -0.402575\nvt 0.480681 -0.397965\nvt 0.011415 -0.483237\nvt 0.016958 -0.493010\nvt 0.028746 -0.489056\nvt 0.024090 -0.479716\nvt 0.019331 -0.504988\nvt 0.032884 -0.501932\nvt 0.049707 -0.498388\nvt 0.044290 -0.484837\nvt 0.036745 -0.472565\nvt 0.062256 -0.481553\nvt 0.057225 -0.468038\nvt 0.066553 -0.496409\nvt 0.083689 -0.495899\nvt 0.081417 -0.480334\nvt 0.079093 -0.464156\nvt 0.261915 -0.458007\nvt 0.257565 -0.473561\nvt 0.275237 -0.474796\nvt 0.278999 -0.459306\nvt 0.253072 -0.489290\nvt 0.271340 -0.490302\nvt 0.290128 -0.491547\nvt 0.293302 -0.476034\nvt 0.296298 -0.460352\nvt 0.442383 -0.462724\nvt 0.440816 -0.479367\nvt 0.464702 -0.481118\nvt 0.465496 -0.463425\nvt 0.438766 -0.496104\nvt 0.462992 -0.498508\nvt 0.483581 -0.501772\nvt 0.484726 -0.484760\nvt 0.486336 -0.465247\nvt 0.228880 -0.988867\nvt 0.242326 -0.980724\nvt 0.229128 -0.969254\nvt 0.216570 -0.972975\nvt 0.251000 -0.974754\nvt 0.236429 -0.965012\nvt 0.228099 -0.952457\nvt 0.221010 -0.954698\nvt 0.208865 -0.956547\nvt 0.631034 -0.882134\nvt 0.640265 -0.883651\nvt 0.626531 -0.881762\nvt 0.624977 -0.896858\nvt 0.629680 -0.897576\nvt 0.639035 -0.900219\nvt 0.594577 -0.969411\nvt 0.583475 -0.973315\nvt 0.590377 -0.984422\nvt 0.587921 -0.959532\nvt 0.578077 -0.963989\nvt 0.567750 -0.967415\nvt 0.571783 -0.975343\nvt 0.576806 -0.985162\nvt 0.421697 -0.998146\nvt 0.422737 -0.990876\nvt 0.403217 -0.992225\nvt 0.402106 -0.999725\nvt 0.423866 -0.985168\nvt 0.403354 -0.987533\nvt 0.383296 -0.987906\nvt 0.382903 -0.992607\nvt 0.381707 -1.000000\nvt 0.090612 -0.878831\nvt 0.105280 -0.878841\nvt 0.091470 -0.892303\nvt 0.106262 -0.892001\nvt 0.120527 -0.892023\nvt 0.119377 -0.879009\nvt 0.549381 -0.495420\nvt 0.548936 -0.498226\nvt 0.567231 -0.499416\nvt 0.567404 -0.496403\nvt 0.548365 -0.502153\nvt 0.566646 -0.503315\nvt 0.584638 -0.501177\nvt 0.585187 -0.496896\nvt 0.584994 -0.493866\nvt 0.758484 -0.488900\nvt 0.757547 -0.498141\nvt 0.769770 -0.498614\nvt 0.770439 -0.489045\nvt 0.752513 -0.508711\nvt 0.768627 -0.509305\nvt 0.784847 -0.509506\nvt 0.785636 -0.498647\nvt 0.786131 -0.489036\nvt 0.724209 -0.920115\nvt 0.743030 -0.919846\nvt 0.742338 -0.909319\nvt 0.723110 -0.909456\nvt 0.765846 -0.919666\nvt 0.765564 -0.909266\nvt 0.765254 -0.899087\nvt 0.741782 -0.899095\nvt 0.722317 -0.899173\nvt 0.842124 -0.919748\nvt 0.860897 -0.919745\nvt 0.861365 -0.909371\nvt 0.842256 -0.909360\nvt 0.881505 -0.919766\nvt 0.882458 -0.909406\nvt 0.883141 -0.899244\nvt 0.861701 -0.899204\nvt 0.842344 -0.899187\nvt 0.633624 -0.931247\nvt 0.651002 -0.937648\nvt 0.654144 -0.923212\nvt 0.636770 -0.916151\nvt 0.666740 -0.943743\nvt 0.670120 -0.930435\nvt 0.675351 -0.914624\nvt 0.656489 -0.906485\nvt 0.802005 -0.126442\nvt 0.801659 -0.123052\nvt 0.785409 -0.122197\nvt 0.785516 -0.125604\nvt 0.802083 -0.120065\nvt 0.785723 -0.119191\nvt 0.769038 -0.118173\nvt 0.768763 -0.121187\nvt 0.768707 -0.124592\nvt 0.052718 -0.576850\nvt 0.052705 -0.583133\nvt 0.065989 -0.583366\nvt 0.065998 -0.577128\nvt 0.056006 -0.586240\nvt 0.065965 -0.587403\nvt 0.080003 -0.587606\nvt 0.080022 -0.583593\nvt 0.080032 -0.577381\nvt 0.393969 -0.910842\nvt 0.396009 -0.921261\nvt 0.390199 -0.920940\nvt 0.390363 -0.910620\nvt 0.395923 -0.931684\nvt 0.390035 -0.931261\nvt 0.387245 -0.928306\nvt 0.386492 -0.920551\nvt 0.386757 -0.910397\nvt 0.198690 -0.923352\nvt 0.210009 -0.924368\nvt 0.207217 -0.909576\nvt 0.196106 -0.908670\nvt 0.215982 -0.924330\nvt 0.212846 -0.909776\nvt 0.210850 -0.895130\nvt 0.205542 -0.894976\nvt 0.194661 -0.894611\nvt 0.622994 -0.927651\nvt 0.618157 -0.941016\nvt 0.629758 -0.945351\nvt 0.616895 -0.925716\nvt 0.611070 -0.937471\nvt 0.604262 -0.946989\nvt 0.611994 -0.952723\nvt 0.178849 -0.920745\nvt 0.183611 -0.938391\nvt 0.202920 -0.939653\nvt 0.153943 -0.917111\nvt 0.162576 -0.937571\nvt 0.169267 -0.957611\nvt 0.189855 -0.957232\nvt 0.341544 -0.364851\nvt 0.341863 -0.359673\nvt 0.323099 -0.358504\nvt 0.323025 -0.363629\nvt 0.342127 -0.355272\nvt 0.323077 -0.354092\nvt 0.307447 -0.353410\nvt 0.307806 -0.357758\nvt 0.308008 -0.362844\nvt 0.766057 -0.930495\nvt 0.785908 -0.930354\nvt 0.785950 -0.919619\nvt 0.785727 -0.941319\nvt 0.804500 -0.941388\nvt 0.804651 -0.930402\nvt 0.804698 -0.919655\nvt 0.340606 -0.377687\nvt 0.340159 -0.382623\nvt 0.365393 -0.384712\nvt 0.365901 -0.379823\nvt 0.339654 -0.387785\nvt 0.364846 -0.389726\nvt 0.393464 -0.392309\nvt 0.394086 -0.387524\nvt 0.394676 -0.382849\nvt 0.333506 -0.462119\nvt 0.331852 -0.478064\nvt 0.357511 -0.478530\nvt 0.359040 -0.462503\nvt 0.329991 -0.493618\nvt 0.355787 -0.494298\nvt 0.383905 -0.494747\nvt 0.385745 -0.478706\nvt 0.387382 -0.462616\nvt 0.339294 -0.999479\nvt 0.340802 -0.992082\nvt 0.316239 -0.991181\nvt 0.313328 -0.998631\nvt 0.341819 -0.987174\nvt 0.318699 -0.986166\nvt 0.294722 -0.984412\nvt 0.290209 -0.989546\nvt 0.285419 -0.997100\nvt 0.764964 -0.888916\nvt 0.785490 -0.888955\nvt 0.785658 -0.899105\nvt 0.804526 -0.899136\nvt 0.804421 -0.888990\nvt 0.031467 -0.936977\nvt 0.038183 -0.952403\nvt 0.053153 -0.950597\nvt 0.048748 -0.937286\nvt 0.043670 -0.967052\nvt 0.058640 -0.965873\nvt 0.074977 -0.964461\nvt 0.069297 -0.948849\nvt 0.064966 -0.935330\nvt 0.917139 -0.123852\nvt 0.918004 -0.121515\nvt 0.915448 -0.121470\nvt 0.914748 -0.124548\nvt 0.917509 -0.116578\nvt 0.914825 -0.116695\nvt 0.909119 -0.117636\nvt 0.910367 -0.121997\nvt 0.909012 -0.125147\nvt 0.687577 -0.309488\nvt 0.687521 -0.292093\nvt 0.703933 -0.310029\nvt 0.703876 -0.293321\nvt 0.703964 -0.279199\nvt 0.687554 -0.277503\nvt 0.029228 -0.878545\nvt 0.041800 -0.878645\nvt 0.029985 -0.892618\nvt 0.042587 -0.892768\nvt 0.059214 -0.892739\nvt 0.058397 -0.878761\nvt 0.495564 -0.458197\nvt 0.493071 -0.460110\nvt 0.501819 -0.473599\nvt 0.503689 -0.471224\nvt 0.500257 -0.479374\nvt 0.513540 -0.489662\nvt 0.514350 -0.484864\nvt 0.515565 -0.482224\nvt 0.490777 -0.401694\nvt 0.491808 -0.399679\nvt 0.488892 -0.397586\nvt 0.488600 -0.400590\nvt 0.492145 -0.396437\nvt 0.489357 -0.393818\nvt 0.482941 -0.388676\nvt 0.482310 -0.393254\nvt 0.150408 -0.879979\nvt 0.173210 -0.880144\nvt 0.151724 -0.893628\nvt 0.174208 -0.894192\nvt 0.193831 -0.880221\nvt 0.181288 -0.989707\nvt 0.176327 -0.975335\nvt 0.159131 -0.975994\nvt 0.163998 -0.990178\nvt 0.152378 -0.958474\nvt 0.137329 -0.959613\nvt 0.143778 -0.976701\nvt 0.148597 -0.990738\nvt 0.187800 -0.378506\nvt 0.186937 -0.381458\nvt 0.190573 -0.381675\nvt 0.190826 -0.377998\nvt 0.186388 -0.388088\nvt 0.189927 -0.388606\nvt 0.200360 -0.388646\nvt 0.199595 -0.381411\nvt 0.201163 -0.376379\nvt 0.497817 -0.988111\nvt 0.499515 -0.981214\nvt 0.479917 -0.983672\nvt 0.478549 -0.990580\nvt 0.500796 -0.977133\nvt 0.480846 -0.979690\nvt 0.459427 -0.982316\nvt 0.459019 -0.986335\nvt 0.458077 -0.993341\nvt 0.216922 -0.364314\nvt 0.219125 -0.368288\nvt 0.216267 -0.359716\nvt 0.199093 -0.366215\nvt 0.199559 -0.371174\nvt 0.880097 -0.930505\nvt 0.903633 -0.930632\nvt 0.905773 -0.919886\nvt 0.901235 -0.941593\nvt 0.921248 -0.941933\nvt 0.924224 -0.930962\nvt 0.926911 -0.920182\nvt 0.883740 -0.889091\nvt 0.909237 -0.889156\nvt 0.908418 -0.899333\nvt 0.930366 -0.899508\nvt 0.931331 -0.889263\nvt 0.239173 -0.374164\nvt 0.238668 -0.379712\nvt 0.258421 -0.379327\nvt 0.258672 -0.373997\nvt 0.239000 -0.385006\nvt 0.258060 -0.384628\nvt 0.227118 -0.453739\nvt 0.222417 -0.470946\nvt 0.240733 -0.472414\nvt 0.245380 -0.456244\nvt 0.217608 -0.488626\nvt 0.235880 -0.488896\nvt 0.440676 -0.988853\nvt 0.439739 -0.996042\nvt 0.441321 -0.984660\nvt 0.907082 -0.580445\nvt 0.906256 -0.587719\nvt 0.917593 -0.587836\nvt 0.918144 -0.581416\nvt 0.927325 -0.588042\nvt 0.929408 -0.582706\nvt 0.936168 -0.592308\nvt 0.932313 -0.593615\nvt 0.933566 -0.607060\nvt 0.937748 -0.605682\nvt 0.934526 -0.622582\nvt 0.938683 -0.621320\nvt 0.942020 -0.668620\nvt 0.934098 -0.663717\nvt 0.924677 -0.667453\nvt 0.928534 -0.673763\nvt 0.929427 -0.659745\nvt 0.921023 -0.662067\nvt 0.909198 -0.663457\nvt 0.913111 -0.668946\nvt 0.916071 -0.676061\nvt 0.903109 -0.669886\nvt 0.905641 -0.675234\nvt 0.899927 -0.664254\nvt 0.891590 -0.664816\nvt 0.893951 -0.670925\nvt 0.896219 -0.676586\nvt 0.876597 -0.678932\nvt 0.874463 -0.672388\nvt 0.862559 -0.673255\nvt 0.864605 -0.680188\nvt 0.872436 -0.665633\nvt 0.860909 -0.666250\nvt 0.846730 -0.666969\nvt 0.847874 -0.674349\nvt 0.825157 -0.578108\nvt 0.826285 -0.569097\nvt 0.824552 -0.585311\nvt 0.843083 -0.586423\nvt 0.844409 -0.579448\nvt 0.846570 -0.570723\nvt 0.875432 -0.575550\nvt 0.871778 -0.583272\nvt 0.881153 -0.585145\nvt 0.883683 -0.577632\nvt 0.869394 -0.589642\nvt 0.879179 -0.591241\nvt 0.888424 -0.594578\nvt 0.889307 -0.586496\nvt 0.890380 -0.578877\nvt 0.367572 -0.361829\nvt 0.367113 -0.366976\nvt 0.367982 -0.357483\nvt 0.422744 -0.390993\nvt 0.423406 -0.386492\nvt 0.422060 -0.395514\nvt 0.414018 -0.478762\nvt 0.415793 -0.462568\nvt 0.411991 -0.495098\nvt 0.264088 -0.986717\nvt 0.257607 -0.994506\nvt 0.270917 -0.981439\nvt 0.116864 -0.461680\nvt 0.116951 -0.464956\nvt 0.134512 -0.462977\nvt 0.133990 -0.459712\nvt 0.117043 -0.470984\nvt 0.134636 -0.469008\nvt 0.151055 -0.464108\nvt 0.150866 -0.457716\nvt 0.149933 -0.454604\nvt 0.550651 -0.985440\nvt 0.549088 -0.977337\nvt 0.537540 -0.977889\nvt 0.537835 -0.985505\nvt 0.547496 -0.971211\nvt 0.537131 -0.972413\nvt 0.525801 -0.971939\nvt 0.525818 -0.978485\nvt 0.525164 -0.985784\nvt 0.423314 -0.861403\nvt 0.410793 -0.861305\nvt 0.410445 -0.866294\nvt 0.423291 -0.866362\nvt 0.393463 -0.866516\nvt 0.393445 -0.872129\nvt 0.410391 -0.871963\nvt 0.423193 -0.872028\nvt 0.919479 -0.636538\nvt 0.929860 -0.635067\nvt 0.907861 -0.637783\nvt 0.908035 -0.646956\nvt 0.919838 -0.645645\nvt 0.930368 -0.644183\nvt 0.898516 -0.626647\nvt 0.898929 -0.638218\nvt 0.891978 -0.626655\nvt 0.892237 -0.637721\nvt 0.890562 -0.646980\nvt 0.899086 -0.647428\nvt 0.934971 -0.633974\nvt 0.939431 -0.633082\nvt 0.935544 -0.643328\nvt 0.940818 -0.642723\nvt 0.336263 -0.428159\nvt 0.317306 -0.427294\nvt 0.315528 -0.444201\nvt 0.334967 -0.444985\nvt 0.301455 -0.426574\nvt 0.299020 -0.443370\nvt 0.313531 -0.461338\nvt 0.489447 -0.430176\nvt 0.486344 -0.430738\nvt 0.488247 -0.445178\nvt 0.491064 -0.443968\nvt 0.478956 -0.431382\nvt 0.480665 -0.446366\nvt 0.389904 -0.430452\nvt 0.361510 -0.429277\nvt 0.360358 -0.445652\nvt 0.388751 -0.446170\nvt 0.235041 -0.422598\nvt 0.213291 -0.419299\nvt 0.209138 -0.433924\nvt 0.231477 -0.437734\nvt 0.194544 -0.415453\nvt 0.189912 -0.429606\nvt 0.180798 -0.446153\nvt 0.204479 -0.449954\nvt 0.269522 -0.425166\nvt 0.253107 -0.424288\nvt 0.249565 -0.440044\nvt 0.265929 -0.441511\nvt 0.443973 -0.431808\nvt 0.418344 -0.431398\nvt 0.417221 -0.446469\nvt 0.443340 -0.446631\nvt 0.750345 -0.301923\nvt 0.750250 -0.314616\nvt 0.750537 -0.290811\nvt 0.735985 -0.285497\nvt 0.735688 -0.298572\nvt 0.735475 -0.313827\nvt 0.743966 -0.930967\nvt 0.725859 -0.931531\nvt 0.860181 -0.930519\nvt 0.841909 -0.930547\nvt 0.647172 -0.949978\nvt 0.662599 -0.953774\nvt 0.817390 -0.123666\nvt 0.817980 -0.127029\nvt 0.817965 -0.120706\nvt 0.739757 -0.467468\nvt 0.738796 -0.459033\nvt 0.740551 -0.473125\nvt 0.755440 -0.473818\nvt 0.751743 -0.466635\nvt 0.751164 -0.458443\nvt 0.214621 -0.939570\nvt 0.221185 -0.938720\nvt 0.891166 -0.610758\nvt 0.897721 -0.610235\nvt 0.897046 -0.595471\nvt 0.604099 -0.962395\nvt 0.596591 -0.954115\nvt 0.197208 -0.974673\nvt 0.202568 -0.989340\nvt 0.823249 -0.941517\nvt 0.823069 -0.952736\nvt 0.804251 -0.952549\nvt 0.803884 -0.961552\nvt 0.822414 -0.961751\nvt 0.106928 -0.962109\nvt 0.091124 -0.963252\nvt 0.096891 -0.979065\nvt 0.112862 -0.978339\nvt 0.080526 -0.979905\nvt 0.084356 -0.993091\nvt 0.100944 -0.992438\nvt 0.117169 -0.991946\nvt 0.122252 -0.960863\nvt 0.116140 -0.943443\nvt 0.101024 -0.945491\nvt 0.130957 -0.941191\nvt 0.125930 -0.925658\nvt 0.111605 -0.928550\nvt 0.096632 -0.931213\nvt 0.898922 -0.952735\nvt 0.918362 -0.953053\nvt 0.897170 -0.961754\nvt 0.916084 -0.962049\nvt 0.884660 -0.671671\nvt 0.886839 -0.677811\nvt 0.882499 -0.665213\nvt 0.897294 -0.587349\nvt 0.898035 -0.579740\nvt 0.890914 -0.657093\nvt 0.881843 -0.657549\nvt 0.881307 -0.649362\nvt 0.871422 -0.650153\nvt 0.871697 -0.658162\nvt 0.932175 -0.942509\nvt 0.935292 -0.931473\nvt 0.937728 -0.943187\nvt 0.940782 -0.932083\nvt 0.943538 -0.921119\nvt 0.938110 -0.920607\nvt 0.191241 -0.149732\nvt 0.186897 -0.140285\nvt 0.195050 -0.136143\nvt 0.199413 -0.145685\nvt 0.183168 -0.132143\nvt 0.191313 -0.127949\nvt 0.199766 -0.121963\nvt 0.204111 -0.131585\nvt 0.205109 -0.139921\nvt 0.095628 -0.555795\nvt 0.095630 -0.566936\nvt 0.080021 -0.555620\nvt 0.080031 -0.566745\nvt 0.095623 -0.577589\nvt 0.180665 -0.126609\nvt 0.188829 -0.122449\nvt 0.177802 -0.122701\nvt 0.186970 -0.118295\nvt 0.196139 -0.113890\nvt 0.197953 -0.117927\nvt 0.751005 -0.435586\nvt 0.738771 -0.435716\nvt 0.738533 -0.447622\nvt 0.750848 -0.447346\nvt 0.726652 -0.435969\nvt 0.726182 -0.447690\nvt 0.133446 -0.879498\nvt 0.134757 -0.892742\nvt 0.530748 -0.493193\nvt 0.531477 -0.490533\nvt 0.530181 -0.497423\nvt 0.128420 -0.977518\nvt 0.133015 -0.991349\nvt 0.145726 -0.938876\nvt 0.139598 -0.922817\nvt 0.602494 -0.490703\nvt 0.601693 -0.487915\nvt 0.602174 -0.495612\nvt 0.620683 -0.487835\nvt 0.617670 -0.482247\nvt 0.616101 -0.479654\nvt 0.085343 -0.947220\nvt 0.081024 -0.933382\nvt 0.074828 -0.878812\nvt 0.075653 -0.892560\nvt 0.063774 -0.981056\nvt 0.067431 -0.994175\nvt 0.048725 -0.981971\nvt 0.052446 -0.995039\nvt 0.164117 -0.449596\nvt 0.162532 -0.446730\nvt 0.164856 -0.456735\nvt 0.174273 -0.438939\nvt 0.171974 -0.436343\nvt 0.513974 -0.979502\nvt 0.512592 -0.986544\nvt 0.514509 -0.975095\nvt 0.945645 -0.910471\nvt 0.940252 -0.910079\nvt 0.947175 -0.899992\nvt 0.941800 -0.899728\nvt 0.928924 -0.909755\nvt 0.932284 -0.965607\nvt 0.934698 -0.954328\nvt 0.929120 -0.953654\nvt 0.926448 -0.962603\nvt 0.085924 -0.455486\nvt 0.084390 -0.458116\nvt 0.099912 -0.462994\nvt 0.100546 -0.459983\nvt 0.099484 -0.469253\nvt 0.560414 -0.976583\nvt 0.563617 -0.985407\nvt 0.557627 -0.969681\nvt 0.074086 -0.449101\nvt 0.071532 -0.451496\nvt 0.064249 -0.440986\nvt 0.060901 -0.443194\nvt 0.054112 -0.446052\nvt 0.064521 -0.454533\nvt 0.021349 -0.431238\nvt 0.029821 -0.427443\nvt 0.023791 -0.411023\nvt 0.015726 -0.414388\nvt 0.038477 -0.423653\nvt 0.031975 -0.407692\nvt 0.026599 -0.394368\nvt 0.018610 -0.397015\nvt 0.010751 -0.399743\nvt 0.020420 -0.385844\nvt 0.023237 -0.389233\nvt 0.028047 -0.387398\nvt 0.026430 -0.384812\nvt 0.031267 -0.391848\nvt 0.035211 -0.393219\nvt 0.033630 -0.388169\nvt 0.032682 -0.384742\nvt 0.038182 -0.514793\nvt 0.056633 -0.511974\nvt 0.022478 -0.516901\nvt 0.023520 -0.526670\nvt 0.040556 -0.525637\nvt 0.063713 -0.525747\nvt 0.072718 -0.510780\nvt 0.087752 -0.510540\nvt 0.079659 -0.523304\nvt 0.092664 -0.522834\nvt 0.308894 -0.492666\nvt 0.306317 -0.508636\nvt 0.327912 -0.509407\nvt 0.286909 -0.507858\nvt 0.284205 -0.521286\nvt 0.304109 -0.521739\nvt 0.325934 -0.522274\nvt 0.460700 -0.514159\nvt 0.481651 -0.516083\nvt 0.436453 -0.512533\nvt 0.434842 -0.528632\nvt 0.460728 -0.527786\nvt 0.481504 -0.528448\nvt 0.580362 -0.516678\nvt 0.563432 -0.517069\nvt 0.561491 -0.524726\nvt 0.578092 -0.525005\nvt 0.546253 -0.515846\nvt 0.544932 -0.523534\nvt 0.544905 -0.532941\nvt 0.561122 -0.534085\nvt 0.577723 -0.534600\nvt 0.801962 -0.475546\nvt 0.801909 -0.481319\nvt 0.786464 -0.475346\nvt 0.786327 -0.481322\nvt 0.801769 -0.488963\nvt 0.353881 -0.510212\nvt 0.381949 -0.510926\nvt 0.351591 -0.523105\nvt 0.379077 -0.524072\nvt 0.513609 -0.508962\nvt 0.499385 -0.505259\nvt 0.498273 -0.517765\nvt 0.513117 -0.519479\nvt 0.498444 -0.529372\nvt 0.513620 -0.530412\nvt 0.196072 -0.488078\nvt 0.192389 -0.505861\nvt 0.213079 -0.505962\nvt 0.175597 -0.488244\nvt 0.172766 -0.506050\nvt 0.170350 -0.519285\nvt 0.189370 -0.519255\nvt 0.209512 -0.519537\nvt 0.231203 -0.505949\nvt 0.248705 -0.506149\nvt 0.227489 -0.519732\nvt 0.245152 -0.520024\nvt 0.409852 -0.511571\nvt 0.406362 -0.525091\nvt 0.147253 -0.492246\nvt 0.132680 -0.494573\nvt 0.131409 -0.509004\nvt 0.144940 -0.507738\nvt 0.117031 -0.496156\nvt 0.117318 -0.510103\nvt 0.118203 -0.521971\nvt 0.130805 -0.521203\nvt 0.143312 -0.520430\nvt 0.529465 -0.512889\nvt 0.528766 -0.521631\nvt 0.529088 -0.531660\nvt 0.610254 -0.513133\nvt 0.596248 -0.514730\nvt 0.594308 -0.524061\nvt 0.608539 -0.523068\nvt 0.594640 -0.533953\nvt 0.609468 -0.533045\nvt 0.160451 -0.489904\nvt 0.157859 -0.506733\nvt 0.155762 -0.519760\nvt 0.100609 -0.496250\nvt 0.102679 -0.510511\nvt 0.105480 -0.522503\nvt 0.860017 -0.650760\nvt 0.860239 -0.658728\nvt 0.845927 -0.651103\nvt 0.846173 -0.659227\nvt 0.920020 -0.654822\nvt 0.931056 -0.653555\nvt 0.908042 -0.656199\nvt 0.899004 -0.656821\nvt 0.936706 -0.652771\nvt 0.943459 -0.652075\nvt 0.934709 -0.660914\nvt 0.943999 -0.662636\nvt 0.431946 -0.872116\nvt 0.431988 -0.866453\nvt 0.437100 -0.870696\nvt 0.438780 -0.866433\nvt 0.438788 -0.858104\nvt 0.431626 -0.861532\nvt 0.029637 -0.453092\nvt 0.041856 -0.449689\nvt 0.035574 -0.439833\nvt 0.025732 -0.443456\nvt 0.045630 -0.436086\nvt 0.217358 -0.380585\nvt 0.219307 -0.375721\nvt 0.219009 -0.385458\nvt 0.178847 -0.468107\nvt 0.200165 -0.468678\nvt 0.133939 -0.480430\nvt 0.149670 -0.476691\nvt 0.117014 -0.482255\nvt 0.181285 -0.426255\nvt 0.185870 -0.412732\nvt 0.182754 -0.411009\nvt 0.178546 -0.424040\nvt 0.163350 -0.471735\nvt 0.099619 -0.481407\nvt 0.049647 -0.458373\nvt 0.034415 -0.462105\nvt 0.037114 -0.405134\nvt 0.044156 -0.421017\nvt 0.047700 -0.419189\nvt 0.039771 -0.403510\nvt 0.051885 -0.433352\nvt 0.055576 -0.431309\nvt 0.487949 -0.404022\nvt 0.487188 -0.409822\nvt 0.490204 -0.409938\nvt 0.490666 -0.404392\nvt 0.565271 -0.509463\nvt 0.582811 -0.508191\nvt 0.547437 -0.508283\nvt 0.900813 -0.122985\nvt 0.900388 -0.125901\nvt 0.899576 -0.120296\nvt 0.889144 -0.121095\nvt 0.889487 -0.123889\nvt 0.889784 -0.126822\nvt 0.614367 -0.501597\nvt 0.626019 -0.503395\nvt 0.632367 -0.492389\nvt 0.621491 -0.514042\nvt 0.631183 -0.516850\nvt 0.635861 -0.507682\nvt 0.642350 -0.498338\nvt 0.499675 -0.491199\nvt 0.513473 -0.498340\nvt 0.465020 -0.446784\nvt 0.464361 -0.431782\nvt 0.632709 -0.476116\nvt 0.628665 -0.472629\nvt 0.640600 -0.466190\nvt 0.636447 -0.463002\nvt 0.634047 -0.461081\nvt 0.626546 -0.470354\nvt 0.529821 -0.504362\nvt 0.599538 -0.504450\nvt 0.418198 -0.911247\nvt 0.418150 -0.921559\nvt 0.406028 -0.921444\nvt 0.406084 -0.911045\nvt 0.415081 -0.929286\nvt 0.405972 -0.931844\nvt 0.626916 -0.912966\nvt 0.621644 -0.911851\nvt 0.107935 -0.903136\nvt 0.122374 -0.902672\nvt 0.093042 -0.904110\nvt 0.094545 -0.913965\nvt 0.109483 -0.912244\nvt 0.123743 -0.911025\nvt 0.801459 -0.498492\nvt 0.800987 -0.509462\nvt 0.741256 -0.888877\nvt 0.721593 -0.888885\nvt 0.862025 -0.889055\nvt 0.842425 -0.889034\nvt 0.657954 -0.887335\nvt 0.675399 -0.890945\nvt 0.752068 -0.119932\nvt 0.751914 -0.123327\nvt 0.752327 -0.116916\nvt 0.095611 -0.583804\nvt 0.095592 -0.587809\nvt 0.204250 -0.880383\nvt 0.209034 -0.880490\nvt 0.823353 -0.899165\nvt 0.823394 -0.909333\nvt 0.804636 -0.909295\nvt 0.823408 -0.919710\nvt 0.720067 -0.295591\nvt 0.720282 -0.281762\nvt 0.719968 -0.311887\nvt 0.044334 -0.905935\nvt 0.060930 -0.905555\nvt 0.031875 -0.905622\nvt 0.032679 -0.917193\nvt 0.046042 -0.917062\nvt 0.062671 -0.916377\nvt 0.175901 -0.906874\nvt 0.153735 -0.904915\nvt 0.907315 -0.909515\nvt 0.829288 -0.675101\nvt 0.828651 -0.667622\nvt 0.859766 -0.581208\nvt 0.863003 -0.572967\nvt 0.857729 -0.587949\nvt 0.372399 -0.866347\nvt 0.372379 -0.871979\nvt 0.065987 -0.566473\nvt 0.065976 -0.555340\nvt 0.052692 -0.555007\nvt 0.052702 -0.566160\nvt 0.136764 -0.903399\nvt 0.137338 -0.911196\nvt 0.077275 -0.904928\nvt 0.078869 -0.915349\nvt 0.942813 -0.889384\nvt 0.948173 -0.889521\nvt 0.849925 -0.722169\nvt 0.846482 -0.712357\nvt 0.830171 -0.713406\nvt 0.829691 -0.723708\nvt 0.770681 -0.481286\nvt 0.771069 -0.475151\nvt 0.758758 -0.481161\nvt 0.828271 -0.659651\nvt 0.828063 -0.651335\nvt 0.469888 -0.384495\nvt 0.468053 -0.388195\nvt 0.470574 -0.379974\nvt 0.190862 -0.374469\nvt 0.190607 -0.370360\nvt 0.187269 -0.372797\nvt 0.187385 -0.375947\nvt 0.014891 -0.391476\nvt 0.011246 -0.388381\nvt 0.000000 -0.392037\nvt 0.007229 -0.394188\nvt 0.797551 -0.329375\nvt 0.796355 -0.321528\nvt 0.800025 -0.338790\nvt 0.811760 -0.344834\nvt 0.807490 -0.335760\nvt 0.804029 -0.328197\nvt 0.931588 -0.588223\nvt 0.934467 -0.586896\nvt 0.179615 -0.152687\nvt 0.175137 -0.146490\nvt 0.180563 -0.143596\nvt 0.184812 -0.152917\nvt 0.171020 -0.137308\nvt 0.176903 -0.135547\nvt 0.079963 -0.542008\nvt 0.065948 -0.541736\nvt 0.065963 -0.547670\nvt 0.079996 -0.547950\nvt 0.056019 -0.542970\nvt 0.052698 -0.547333\nvt 0.650456 -0.451654\nvt 0.645366 -0.448607\nvt 0.641773 -0.454908\nvt 0.645980 -0.457937\nvt 0.643016 -0.446945\nvt 0.639338 -0.453163\nvt 0.754523 -0.417185\nvt 0.739087 -0.419696\nvt 0.738911 -0.425860\nvt 0.751323 -0.425629\nvt 0.723276 -0.420347\nvt 0.726683 -0.426627\nvt 0.169142 -0.133120\nvt 0.174423 -0.130045\nvt 0.167263 -0.128932\nvt 0.172533 -0.125816\nvt 0.095587 -0.542173\nvt 0.095612 -0.548116\nvt 0.817168 -0.337496\nvt 0.812492 -0.330258\nvt 0.809448 -0.329419\nvt 0.811745 -0.334063\nvt 0.805516 -0.322242\nvt 0.803520 -0.323697\nvt 0.790080 -0.308610\nvt 0.778412 -0.299407\nvt 0.792274 -0.305561\nvt 0.779927 -0.295404\nvt 0.765456 -0.285526\nvt 0.764761 -0.290341\nvt 0.750922 -0.282777\nvt 0.751314 -0.277674\nvt 0.736740 -0.271764\nvt 0.736403 -0.276825\nvt 0.720646 -0.272839\nvt 0.720974 -0.267765\nvt 0.704550 -0.265136\nvt 0.704261 -0.270195\nvt 0.687796 -0.268396\nvt 0.688025 -0.263360\nvt 0.600563 -0.239035\nvt 0.600431 -0.234017\nvt 0.600706 -0.244032\nvt 0.617328 -0.242324\nvt 0.617083 -0.237328\nvt 0.616764 -0.232346\nvt 0.633527 -0.234867\nvt 0.632934 -0.229923\nvt 0.633788 -0.239870\nvt 0.649724 -0.236414\nvt 0.649480 -0.231491\nvt 0.648950 -0.226320\nvt 0.664160 -0.225597\nvt 0.663679 -0.220308\nvt 0.664433 -0.230632\nvt 0.678988 -0.223262\nvt 0.678460 -0.218567\nvt 0.678306 -0.213114\nvt 0.692316 -0.209449\nvt 0.691317 -0.205395\nvt 0.693647 -0.213333\nvt 0.706421 -0.203554\nvt 0.704345 -0.200567\nvt 0.702318 -0.197563\nvt 0.712009 -0.192454\nvt 0.709884 -0.190310\nvt 0.713955 -0.194828\nvt 0.719756 -0.186955\nvt 0.717827 -0.185567\nvt 0.716346 -0.182910\nvt 0.722888 -0.512210\nvt 0.707636 -0.511759\nvt 0.704821 -0.517405\nvt 0.720171 -0.518945\nvt 0.694643 -0.509219\nvt 0.691681 -0.515348\nvt 0.687820 -0.524962\nvt 0.700640 -0.526965\nvt 0.715806 -0.529109\nvt 0.767096 -0.520539\nvt 0.783709 -0.520883\nvt 0.750823 -0.520167\nvt 0.748631 -0.531966\nvt 0.765943 -0.529345\nvt 0.782625 -0.529834\nvt 0.737467 -0.511855\nvt 0.735390 -0.519792\nvt 0.731408 -0.530845\nvt 0.648050 -0.486757\nvt 0.640266 -0.481644\nvt 0.655355 -0.477116\nvt 0.647993 -0.471652\nvt 0.626258 -0.533921\nvt 0.626141 -0.524700\nvt 0.619202 -0.523516\nvt 0.619847 -0.533191\nvt 0.879394 -0.124248\nvt 0.879822 -0.127310\nvt 0.879396 -0.121407\nvt 0.675498 -0.471740\nvt 0.676928 -0.483242\nvt 0.686202 -0.479327\nvt 0.684703 -0.472217\nvt 0.681523 -0.493759\nvt 0.688801 -0.486001\nvt 0.800283 -0.521141\nvt 0.799519 -0.530322\nvt 0.814794 -0.340112\nvt 0.817431 -0.345130\nvt 0.819364 -0.345103\nvt 0.819365 -0.342657\nvt 0.661111 -0.468805\nvt 0.653591 -0.463241\nvt 0.667218 -0.463364\nvt 0.657757 -0.458086\nvt 0.797638 -0.316848\nvt 0.799721 -0.314358\nvt 0.724024 -0.179982\nvt 0.724897 -0.176172\nvt 0.727130 -0.179178\nvt 0.733246 -0.170923\nvt 0.720189 -0.943388\nvt 0.722297 -0.953626\nvt 0.717888 -0.943515\nvt 0.719763 -0.953048\nvt 0.716499 -0.961316\nvt 0.719027 -0.962692\nvt 0.704878 -0.971439\nvt 0.706881 -0.973910\nvt 0.702898 -0.969533\nvt 0.684470 -0.978755\nvt 0.685283 -0.980398\nvt 0.686448 -0.982399\nvt 0.288930 -0.957025\nvt 0.287499 -0.954288\nvt 0.267807 -0.963342\nvt 0.269035 -0.965779\nvt 0.286464 -0.951971\nvt 0.267712 -0.960941\nvt 0.251619 -0.965638\nvt 0.250982 -0.967971\nvt 0.239832 -0.962018\nvt 0.241196 -0.959989\nvt 0.233835 -0.949291\nvt 0.231970 -0.950618\nvt 0.225105 -0.937684\nvt 0.227241 -0.936774\nvt 0.222033 -0.923111\nvt 0.219794 -0.923774\nvt 0.216604 -0.909455\nvt 0.218916 -0.908972\nvt 0.216974 -0.894599\nvt 0.214576 -0.894925\nvt 0.212719 -0.880411\nvt 0.215268 -0.880263\nvt 0.713218 -0.888961\nvt 0.710933 -0.889032\nvt 0.711641 -0.899495\nvt 0.713961 -0.899349\nvt 0.714842 -0.909709\nvt 0.712540 -0.909920\nvt 0.713839 -0.920720\nvt 0.716105 -0.920448\nvt 0.717997 -0.932000\nvt 0.715742 -0.932333\nvt 0.716534 -0.943590\nvt 0.718324 -0.952738\nvt 0.715406 -0.943731\nvt 0.717186 -0.952577\nvt 0.714069 -0.959989\nvt 0.715090 -0.960576\nvt 0.701759 -0.968471\nvt 0.700939 -0.967624\nvt 0.683475 -0.977172\nvt 0.683998 -0.977951\nvt 0.285859 -0.950683\nvt 0.267749 -0.959719\nvt 0.285274 -0.949737\nvt 0.267735 -0.959250\nvt 0.249901 -0.964442\nvt 0.251818 -0.964619\nvt 0.241944 -0.958874\nvt 0.242658 -0.958085\nvt 0.235917 -0.948107\nvt 0.234937 -0.948591\nvt 0.228508 -0.936291\nvt 0.229578 -0.935923\nvt 0.224468 -0.922425\nvt 0.223361 -0.922733\nvt 0.220289 -0.908666\nvt 0.221422 -0.908405\nvt 0.219553 -0.894175\nvt 0.218396 -0.894376\nvt 0.216763 -0.880157\nvt 0.217948 -0.880052\nvt 0.709543 -0.889044\nvt 0.708383 -0.889036\nvt 0.709114 -0.899539\nvt 0.710261 -0.899532\nvt 0.711178 -0.910001\nvt 0.710038 -0.910046\nvt 0.711372 -0.920966\nvt 0.712501 -0.920853\nvt 0.714407 -0.932514\nvt 0.713284 -0.932690\nvt 0.623065 -0.881522\nvt 0.620684 -0.881359\nvt 0.619191 -0.896004\nvt 0.621504 -0.896356\nvt 0.618016 -0.910977\nvt 0.615739 -0.910335\nvt 0.610908 -0.923286\nvt 0.613086 -0.924277\nvt 0.607146 -0.935193\nvt 0.605210 -0.933839\nvt 0.598725 -0.942078\nvt 0.600378 -0.943733\nvt 0.593004 -0.949872\nvt 0.591571 -0.948017\nvt 0.583600 -0.952686\nvt 0.584829 -0.954688\nvt 0.575584 -0.959304\nvt 0.574550 -0.957221\nvt 0.565015 -0.961026\nvt 0.565862 -0.963167\nvt 0.556279 -0.965723\nvt 0.555615 -0.963530\nvt 0.546658 -0.965208\nvt 0.546887 -0.967450\nvt 0.537730 -0.968789\nvt 0.538463 -0.966543\nvt 0.532284 -0.965407\nvt 0.530672 -0.967412\nvt 0.527845 -0.960166\nvt 0.524980 -0.961120\nvt 0.529999 -0.958975\nvt 0.529626 -0.949529\nvt 0.527400 -0.949721\nvt 0.524508 -0.950019\nvt 0.937155 -0.988880\nvt 0.939996 -0.987796\nvt 0.937068 -0.976647\nvt 0.934393 -0.977416\nvt 0.942193 -0.986959\nvt 0.939174 -0.976423\nvt 0.938721 -0.965581\nvt 0.936483 -0.965475\nvt 0.938483 -0.954871\nvt 0.940777 -0.955275\nvt 0.943787 -0.944421\nvt 0.941492 -0.943872\nvt 0.944512 -0.932766\nvt 0.946801 -0.933320\nvt 0.949526 -0.922200\nvt 0.947243 -0.921718\nvt 0.949339 -0.910944\nvt 0.951621 -0.911317\nvt 0.953128 -0.900565\nvt 0.950856 -0.900317\nvt 0.951824 -0.889691\nvt 0.954073 -0.889818\nvt 0.619300 -0.881210\nvt 0.618171 -0.881059\nvt 0.616747 -0.895416\nvt 0.617849 -0.895715\nvt 0.614418 -0.909886\nvt 0.613344 -0.909460\nvt 0.608616 -0.922125\nvt 0.609644 -0.922662\nvt 0.604085 -0.933042\nvt 0.603149 -0.932388\nvt 0.596948 -0.940402\nvt 0.597763 -0.941155\nvt 0.590732 -0.947046\nvt 0.590020 -0.946259\nvt 0.582199 -0.950965\nvt 0.582857 -0.951719\nvt 0.573888 -0.956291\nvt 0.573263 -0.955595\nvt 0.563828 -0.959489\nvt 0.564420 -0.960138\nvt 0.555078 -0.962652\nvt 0.554515 -0.962022\nvt 0.545865 -0.963699\nvt 0.546332 -0.964320\nvt 0.538704 -0.965793\nvt 0.538601 -0.965404\nvt 0.532646 -0.964797\nvt 0.532883 -0.964926\nvt 0.530923 -0.958638\nvt 0.531563 -0.958806\nvt 0.531324 -0.950335\nvt 0.530645 -0.949782\nvt 0.943347 -0.986883\nvt 0.940226 -0.976625\nvt 0.944233 -0.987169\nvt 0.941085 -0.977050\nvt 0.940844 -0.966236\nvt 0.939897 -0.965834\nvt 0.942064 -0.955569\nvt 0.943117 -0.955878\nvt 0.946221 -0.944948\nvt 0.945118 -0.944721\nvt 0.948140 -0.933581\nvt 0.949256 -0.933741\nvt 0.951975 -0.922492\nvt 0.950859 -0.922396\nvt 0.952951 -0.911435\nvt 0.954066 -0.911461\nvt 0.955561 -0.900590\nvt 0.954450 -0.900614\nvt 0.955404 -0.889836\nvt 0.956520 -0.889805\nvt 0.321894 -0.381446\nvt 0.322352 -0.376473\nvt 0.321357 -0.386674\nvt 0.311310 -0.477171\nvt 0.362555 -0.992539\nvt 0.361427 -0.999910\nvt 0.363065 -0.987748\nvt 0.292496 -0.357245\nvt 0.292974 -0.362317\nvt 0.291806 -0.352962\nvt 0.823359 -0.930486\nvt 0.823312 -0.889014\nvt 0.282453 -0.442536\nvt 0.285563 -0.425870\nvt 0.785425 -0.952455\nvt 0.785143 -0.961447\nvt 0.267488 -0.506924\nvt 0.264302 -0.520643\nvt 0.785839 -0.909264\nvt 0.803415 -0.966182\nvt 0.820923 -0.966376\nvt 0.802986 -0.968466\nvt 0.819419 -0.968681\nvt 0.830489 -0.972308\nvt 0.832883 -0.970422\nvt 0.833766 -0.983255\nvt 0.836956 -0.982874\nvt 0.831027 -0.984157\nvt 0.827549 -0.998197\nvt 0.829614 -0.998412\nvt 0.832213 -0.998754\nvt 0.426912 -0.960661\nvt 0.423984 -0.960349\nvt 0.422637 -0.972882\nvt 0.425420 -0.973756\nvt 0.421608 -0.960076\nvt 0.420468 -0.971576\nvt 0.415492 -0.979547\nvt 0.417179 -0.981408\nvt 0.402535 -0.984305\nvt 0.401482 -0.981959\nvt 0.382862 -0.982279\nvt 0.383182 -0.984630\nvt 0.363228 -0.984458\nvt 0.363220 -0.982104\nvt 0.342263 -0.981492\nvt 0.342199 -0.983849\nvt 0.319621 -0.982799\nvt 0.319767 -0.980439\nvt 0.298062 -0.978848\nvt 0.297049 -0.981100\nvt 0.276052 -0.978504\nvt 0.279449 -0.976755\nvt 0.269430 -0.973785\nvt 0.264489 -0.974405\nvt 0.272581 -0.967177\nvt 0.276371 -0.968095\nvt 0.292300 -0.961769\nvt 0.290709 -0.959619\nvt 0.688028 -0.984289\nvt 0.708140 -0.976677\nvt 0.689501 -0.985873\nvt 0.708883 -0.979124\nvt 0.728813 -0.972364\nvt 0.728248 -0.969816\nvt 0.747438 -0.966995\nvt 0.747743 -0.969373\nvt 0.766329 -0.968554\nvt 0.766236 -0.966256\nvt 0.785035 -0.966083\nvt 0.785015 -0.968374\nvt 0.875609 -0.966156\nvt 0.896464 -0.966424\nvt 0.875788 -0.968373\nvt 0.896311 -0.968767\nvt 0.914474 -0.969062\nvt 0.914953 -0.966714\nvt 0.924620 -0.967203\nvt 0.923443 -0.969498\nvt 0.927219 -0.972356\nvt 0.929035 -0.970269\nvt 0.931860 -0.978860\nvt 0.929815 -0.980299\nvt 0.931833 -0.990337\nvt 0.934223 -0.989739\nvt 0.521532 -0.950090\nvt 0.521965 -0.960588\nvt 0.519077 -0.950075\nvt 0.519513 -0.959583\nvt 0.517895 -0.966743\nvt 0.520200 -0.968525\nvt 0.513488 -0.972081\nvt 0.511973 -0.969971\nvt 0.500090 -0.971843\nvt 0.500732 -0.974083\nvt 0.480927 -0.976608\nvt 0.480624 -0.974293\nvt 0.459734 -0.976855\nvt 0.459650 -0.979202\nvt 0.442482 -0.981442\nvt 0.443576 -0.979048\nvt 0.433177 -0.978849\nvt 0.431170 -0.980815\nvt 0.428280 -0.973124\nvt 0.430667 -0.972069\nvt 0.432396 -0.961226\nvt 0.429946 -0.960944\nvt 0.834804 -0.999157\nvt 0.839742 -0.983969\nvt 0.836876 -0.999517\nvt 0.841762 -0.985429\nvt 0.848552 -0.973314\nvt 0.846816 -0.971105\nvt 0.858806 -0.966507\nvt 0.859720 -0.968793\nvt 0.802741 -0.969807\nvt 0.818603 -0.970017\nvt 0.802618 -0.970937\nvt 0.818142 -0.971123\nvt 0.828318 -0.973979\nvt 0.829217 -0.973293\nvt 0.829459 -0.984635\nvt 0.828251 -0.984811\nvt 0.825335 -0.997933\nvt 0.826382 -0.998103\nvt 0.420195 -0.959943\nvt 0.419270 -0.970818\nvt 0.419034 -0.959946\nvt 0.418917 -0.970688\nvt 0.415005 -0.977697\nvt 0.414847 -0.978623\nvt 0.400705 -0.980627\nvt 0.400160 -0.979537\nvt 0.382525 -0.979734\nvt 0.382640 -0.980887\nvt 0.363202 -0.980698\nvt 0.363208 -0.979535\nvt 0.342340 -0.978916\nvt 0.342299 -0.980081\nvt 0.319851 -0.979030\nvt 0.319926 -0.977869\nvt 0.298842 -0.976377\nvt 0.298568 -0.977506\nvt 0.281111 -0.975926\nvt 0.281811 -0.975845\nvt 0.267641 -0.972257\nvt 0.271898 -0.973506\nvt 0.278347 -0.968626\nvt 0.279476 -0.969317\nvt 0.293730 -0.964175\nvt 0.293178 -0.963091\nvt 0.690313 -0.986843\nvt 0.709324 -0.980582\nvt 0.690856 -0.987802\nvt 0.709668 -0.981727\nvt 0.729401 -0.975041\nvt 0.729137 -0.973873\nvt 0.747916 -0.970772\nvt 0.748052 -0.971917\nvt 0.766419 -0.971035\nvt 0.766379 -0.969902\nvt 0.784991 -0.969717\nvt 0.784984 -0.970849\nvt 0.875896 -0.969665\nvt 0.896220 -0.970147\nvt 0.875965 -0.970775\nvt 0.896171 -0.971290\nvt 0.914032 -0.971606\nvt 0.914191 -0.970455\nvt 0.922762 -0.970832\nvt 0.922278 -0.971895\nvt 0.925321 -0.974302\nvt 0.926179 -0.973499\nvt 0.928616 -0.981086\nvt 0.927573 -0.981583\nvt 0.929289 -0.990917\nvt 0.930429 -0.990680\nvt 0.517627 -0.950105\nvt 0.518164 -0.959013\nvt 0.516465 -0.950253\nvt 0.517639 -0.958859\nvt 0.516254 -0.966110\nvt 0.516675 -0.965844\nvt 0.511048 -0.968782\nvt 0.510417 -0.967785\nvt 0.499437 -0.969391\nvt 0.499702 -0.970513\nvt 0.480442 -0.972916\nvt 0.480289 -0.971773\nvt 0.459704 -0.974311\nvt 0.459766 -0.975463\nvt 0.444188 -0.977710\nvt 0.444475 -0.977181\nvt 0.432315 -0.977974\nvt 0.434148 -0.977892\nvt 0.432114 -0.971477\nvt 0.433296 -0.971232\nvt 0.434889 -0.961536\nvt 0.433764 -0.961362\nvt 0.838083 -0.999740\nvt 0.842897 -0.986244\nvt 0.839137 -1.000000\nvt 0.843876 -0.986837\nvt 0.850340 -0.975504\nvt 0.849564 -0.974584\nvt 0.860249 -0.970102\nvt 0.860627 -0.971182\nvt 0.754184 -0.488544\nvt 0.752718 -0.497364\nvt 0.753769 -0.488449\nvt 0.751875 -0.496751\nvt 0.747037 -0.503743\nvt 0.748115 -0.504962\nvt 0.737613 -0.508296\nvt 0.737045 -0.507280\nvt 0.723463 -0.508685\nvt 0.723595 -0.509308\nvt 0.708748 -0.509273\nvt 0.708885 -0.508650\nvt 0.696545 -0.506310\nvt 0.696141 -0.506918\nvt 0.688450 -0.501628\nvt 0.686080 -0.503385\nvt 0.689553 -0.501290\nvt 0.687789 -0.495338\nvt 0.686239 -0.495003\nvt 0.690474 -0.488685\nvt 0.691320 -0.489191\nvt 0.699801 -0.483304\nvt 0.699550 -0.482916\nvt 0.712316 -0.478992\nvt 0.712417 -0.479449\nvt 0.726653 -0.477801\nvt 0.726670 -0.476938\nvt 0.740568 -0.475875\nvt 0.740148 -0.477189\nvt 0.749951 -0.477962\nvt 0.750784 -0.476832\nvt 0.754387 -0.481379\nvt 0.753626 -0.481792\nvt 0.753220 -0.488371\nvt 0.751084 -0.496172\nvt 0.752269 -0.488164\nvt 0.750291 -0.495504\nvt 0.745682 -0.501900\nvt 0.746295 -0.502891\nvt 0.736657 -0.506661\nvt 0.736400 -0.505903\nvt 0.723398 -0.507471\nvt 0.723369 -0.508155\nvt 0.709045 -0.507946\nvt 0.709361 -0.507178\nvt 0.697814 -0.504775\nvt 0.697081 -0.505498\nvt 0.690701 -0.500876\nvt 0.691992 -0.500563\nvt 0.690532 -0.496001\nvt 0.689114 -0.495595\nvt 0.691999 -0.489598\nvt 0.692826 -0.490445\nvt 0.700216 -0.484548\nvt 0.700020 -0.483681\nvt 0.712494 -0.479919\nvt 0.712447 -0.480633\nvt 0.726389 -0.479051\nvt 0.726570 -0.478431\nvt 0.739755 -0.478363\nvt 0.739318 -0.479163\nvt 0.748385 -0.480251\nvt 0.749191 -0.479265\nvt 0.752776 -0.482304\nvt 0.751656 -0.482765\nvt 0.802028 -0.472104\nvt 0.802110 -0.469918\nvt 0.787158 -0.469525\nvt 0.786789 -0.471758\nvt 0.772111 -0.471282\nvt 0.773325 -0.468875\nvt 0.763368 -0.467219\nvt 0.761316 -0.469603\nvt 0.757452 -0.465434\nvt 0.759739 -0.464102\nvt 0.758375 -0.457624\nvt 0.756737 -0.458028\nvt 0.756371 -0.447197\nvt 0.757870 -0.447052\nvt 0.758711 -0.435885\nvt 0.756782 -0.435685\nvt 0.757437 -0.426301\nvt 0.760182 -0.427473\nvt 0.763743 -0.421688\nvt 0.761089 -0.419305\nvt 0.771760 -0.414006\nvt 0.770159 -0.411330\nvt 0.773293 -0.416128\nvt 0.787212 -0.411373\nvt 0.786716 -0.409379\nvt 0.786167 -0.406881\nvt 0.802653 -0.406472\nvt 0.802623 -0.404124\nvt 0.802705 -0.408514\nvt 0.802250 -0.466807\nvt 0.802458 -0.462702\nvt 0.787797 -0.462271\nvt 0.787520 -0.466428\nvt 0.774286 -0.465845\nvt 0.774921 -0.461845\nvt 0.766525 -0.461144\nvt 0.765196 -0.464528\nvt 0.762131 -0.462400\nvt 0.764406 -0.459902\nvt 0.763125 -0.455851\nvt 0.760312 -0.456949\nvt 0.759915 -0.446843\nvt 0.763148 -0.446571\nvt 0.764803 -0.436726\nvt 0.761285 -0.436226\nvt 0.763289 -0.428957\nvt 0.766837 -0.430510\nvt 0.769396 -0.427087\nvt 0.766408 -0.424352\nvt 0.774627 -0.418698\nvt 0.776435 -0.421924\nvt 0.788452 -0.417093\nvt 0.787637 -0.413760\nvt 0.802757 -0.410990\nvt 0.802997 -0.414469\nvt 0.896635 -0.681303\nvt 0.905022 -0.680246\nvt 0.896349 -0.685416\nvt 0.903661 -0.684489\nvt 0.908394 -0.685395\nvt 0.910740 -0.681591\nvt 0.911352 -0.687941\nvt 0.916732 -0.686573\nvt 0.909139 -0.689811\nvt 0.907429 -0.695845\nvt 0.909144 -0.696042\nvt 0.914185 -0.696990\nvt 0.906793 -0.703866\nvt 0.911877 -0.707024\nvt 0.905239 -0.701787\nvt 0.902072 -0.706181\nvt 0.903363 -0.709581\nvt 0.908383 -0.714302\nvt 0.897598 -0.711668\nvt 0.901564 -0.716919\nvt 0.896951 -0.707947\nvt 0.890361 -0.708649\nvt 0.890461 -0.712259\nvt 0.893043 -0.717747\nvt 0.883443 -0.713087\nvt 0.884988 -0.718967\nvt 0.883350 -0.709596\nvt 0.875486 -0.710908\nvt 0.875534 -0.714426\nvt 0.875861 -0.720784\nvt 0.865496 -0.716399\nvt 0.864189 -0.722955\nvt 0.866134 -0.712567\nvt 0.858398 -0.712474\nvt 0.856816 -0.715991\nvt 0.853516 -0.710318\nvt 0.855505 -0.708372\nvt 0.855722 -0.702252\nvt 0.853580 -0.702287\nvt 0.854103 -0.694198\nvt 0.856628 -0.696168\nvt 0.859891 -0.691538\nvt 0.857515 -0.687877\nvt 0.866529 -0.685107\nvt 0.868084 -0.689145\nvt 0.878406 -0.687676\nvt 0.877771 -0.683698\nvt 0.887656 -0.682444\nvt 0.887868 -0.686494\nvt 0.896140 -0.687213\nvt 0.902920 -0.686366\nvt 0.895989 -0.688334\nvt 0.902427 -0.687527\nvt 0.906335 -0.687676\nvt 0.907225 -0.686965\nvt 0.908124 -0.690551\nvt 0.907488 -0.690640\nvt 0.905969 -0.695633\nvt 0.906494 -0.695760\nvt 0.904212 -0.700849\nvt 0.903366 -0.700356\nvt 0.900452 -0.703725\nvt 0.901202 -0.704537\nvt 0.896568 -0.706366\nvt 0.896209 -0.705598\nvt 0.890200 -0.706703\nvt 0.890288 -0.707302\nvt 0.883337 -0.708290\nvt 0.883318 -0.707587\nvt 0.875640 -0.708662\nvt 0.875571 -0.709570\nvt 0.866581 -0.710928\nvt 0.866942 -0.709799\nvt 0.860172 -0.710154\nvt 0.859311 -0.710938\nvt 0.856516 -0.707675\nvt 0.857323 -0.707646\nvt 0.857179 -0.702609\nvt 0.856711 -0.702345\nvt 0.858083 -0.697101\nvt 0.858871 -0.697613\nvt 0.862174 -0.694221\nvt 0.861333 -0.693340\nvt 0.868898 -0.690850\nvt 0.869361 -0.691716\nvt 0.878849 -0.690032\nvt 0.878700 -0.689236\nvt 0.887917 -0.688161\nvt 0.887930 -0.689142\nvt 0.516843 -0.480425\nvt 0.505448 -0.469622\nvt 0.518474 -0.478577\nvt 0.507273 -0.468339\nvt 0.499555 -0.456166\nvt 0.497473 -0.457078\nvt 0.493149 -0.443300\nvt 0.495320 -0.442781\nvt 0.494030 -0.429636\nvt 0.491705 -0.429860\nvt 0.491838 -0.418608\nvt 0.489517 -0.418671\nvt 0.494388 -0.418619\nvt 0.495152 -0.410217\nvt 0.492531 -0.410057\nvt 0.646244 -0.440485\nvt 0.644984 -0.438857\nvt 0.643678 -0.441770\nvt 0.645453 -0.442753\nvt 0.640459 -0.435463\nvt 0.641692 -0.440392\nvt 0.638916 -0.444295\nvt 0.641099 -0.445761\nvt 0.637335 -0.451774\nvt 0.634977 -0.450113\nvt 0.629776 -0.457633\nvt 0.632109 -0.459490\nvt 0.624817 -0.468483\nvt 0.622718 -0.466387\nvt 0.613129 -0.475211\nvt 0.614794 -0.477560\nvt 0.600979 -0.485759\nvt 0.599912 -0.483297\nvt 0.584243 -0.488914\nvt 0.584748 -0.491515\nvt 0.567556 -0.494070\nvt 0.567604 -0.491370\nvt 0.550510 -0.490596\nvt 0.549877 -0.493267\nvt 0.532239 -0.488726\nvt 0.533471 -0.486318\nvt 0.149206 -0.452480\nvt 0.133604 -0.457372\nvt 0.148258 -0.450165\nvt 0.133224 -0.455062\nvt 0.116927 -0.456793\nvt 0.116870 -0.459291\nvt 0.101044 -0.457781\nvt 0.101555 -0.455355\nvt 0.087843 -0.451245\nvt 0.086910 -0.453506\nvt 0.075591 -0.447304\nvt 0.076917 -0.445238\nvt 0.067793 -0.437508\nvt 0.066118 -0.439379\nvt 0.057773 -0.429794\nvt 0.059805 -0.428073\nvt 0.052281 -0.416321\nvt 0.050016 -0.417823\nvt 0.042108 -0.402409\nvt 0.044460 -0.401199\nvt 0.039034 -0.388084\nvt 0.036448 -0.389243\nvt 0.185611 -0.377532\nvt 0.184918 -0.381328\nvt 0.182292 -0.377317\nvt 0.182390 -0.380990\nvt 0.181369 -0.387242\nvt 0.184069 -0.387705\nvt 0.180383 -0.409953\nvt 0.176399 -0.422643\nvt 0.177538 -0.409063\nvt 0.173833 -0.421414\nvt 0.168100 -0.433017\nvt 0.170294 -0.434698\nvt 0.161371 -0.444888\nvt 0.159751 -0.442779\nvt 0.305077 -0.400336\nvt 0.290095 -0.399567\nvt 0.288234 -0.410847\nvt 0.303560 -0.411553\nvt 0.274371 -0.398893\nvt 0.272447 -0.410237\nvt 0.464229 -0.410417\nvt 0.464741 -0.419272\nvt 0.479043 -0.419006\nvt 0.445257 -0.410211\nvt 0.444696 -0.419118\nvt 0.391864 -0.406175\nvt 0.363438 -0.403981\nvt 0.362561 -0.414796\nvt 0.390947 -0.416544\nvt 0.338349 -0.402182\nvt 0.337428 -0.413269\nvt 0.188578 -0.399623\nvt 0.197405 -0.401533\nvt 0.185189 -0.398474\nvt 0.257192 -0.398434\nvt 0.255712 -0.409586\nvt 0.238844 -0.397055\nvt 0.237349 -0.408006\nvt 0.420232 -0.408517\nvt 0.419313 -0.418166\nvt 0.218918 -0.394005\nvt 0.215902 -0.404869\nvt 0.486304 -0.418856\nvt 0.320030 -0.401086\nvt 0.318863 -0.412271\nvt 0.492949 -0.404713\nvt 0.495620 -0.404931\nvt 0.496281 -0.401901\nvt 0.493195 -0.401758\nvt 0.182762 -0.397780\nvt 0.179845 -0.397150\nvt 0.395394 -0.376789\nvt 0.424219 -0.380547\nvt 0.448457 -0.384973\nvt 0.463520 -0.390133\nvt 0.460792 -0.405927\nvt 0.445240 -0.404623\nvt 0.421155 -0.401760\nvt 0.392670 -0.398853\nvt 0.364151 -0.396443\nvt 0.339028 -0.394585\nvt 0.320762 -0.393485\nvt 0.305901 -0.392752\nvt 0.291013 -0.391963\nvt 0.275253 -0.391316\nvt 0.257744 -0.391235\nvt 0.240324 -0.391015\nvt 0.224650 -0.389562\nvt 0.224744 -0.370877\nvt 0.240472 -0.368022\nvt 0.258691 -0.367705\nvt 0.277010 -0.368468\nvt 0.293036 -0.369018\nvt 0.307903 -0.369577\nvt 0.322731 -0.370364\nvt 0.341076 -0.371583\nvt 0.366497 -0.373702\nvt 0.134335 -0.915902\nvt 0.123442 -0.917208\nvt 0.110080 -0.919426\nvt 0.095161 -0.921843\nvt 0.079574 -0.923791\nvt 0.063512 -0.925397\nvt 0.047224 -0.926737\nvt 0.035060 -0.927301\nvt 0.002661 -0.897239\nvt 0.006339 -0.896524\nvt 0.004620 -0.880606\nvt 0.000768 -0.880741\nvt 0.008352 -0.895901\nvt 0.006732 -0.880485\nvt 0.024702 -0.878639\nvt 0.022536 -0.878815\nvt 0.023300 -0.892814\nvt 0.025410 -0.892558\nvt 0.027460 -0.904719\nvt 0.025279 -0.904551\nvt 0.026608 -0.913253\nvt 0.028403 -0.914580\nvt 0.021370 -0.919799\nvt 0.023474 -0.924019\nvt 0.020981 -0.917205\nvt 0.015975 -0.917475\nvt 0.015183 -0.920554\nvt 0.013544 -0.928353\nvt 0.010193 -0.911177\nvt 0.007501 -0.912915\nvt 0.011920 -0.909302\nvt 0.585702 -0.159808\nvt 0.585506 -0.155098\nvt 0.569404 -0.155247\nvt 0.569334 -0.159955\nvt 0.585389 -0.148854\nvt 0.569472 -0.149018\nvt 0.552783 -0.148309\nvt 0.552404 -0.154520\nvt 0.552119 -0.159215\nvt 0.657515 -0.157138\nvt 0.657326 -0.161850\nvt 0.657819 -0.150856\nvt 0.643761 -0.149763\nvt 0.643369 -0.156029\nvt 0.643047 -0.160727\nvt 0.631383 -0.154186\nvt 0.630978 -0.158834\nvt 0.631735 -0.148084\nvt 0.622357 -0.145862\nvt 0.622038 -0.152246\nvt 0.621698 -0.156967\nvt 0.614494 -0.151930\nvt 0.614372 -0.156691\nvt 0.614420 -0.145651\nvt 0.609082 -0.146230\nvt 0.609156 -0.152525\nvt 0.609468 -0.157317\nvt 0.599687 -0.153740\nvt 0.600171 -0.158433\nvt 0.599605 -0.147510\nvt 0.824297 -0.589854\nvt 0.824149 -0.594060\nvt 0.842214 -0.594537\nvt 0.842522 -0.590678\nvt 0.856895 -0.591974\nvt 0.856482 -0.595484\nvt 0.867279 -0.596940\nvt 0.868133 -0.593574\nvt 0.877026 -0.595343\nvt 0.874887 -0.599057\nvt 0.879593 -0.603548\nvt 0.882937 -0.600237\nvt 0.886166 -0.612628\nvt 0.883546 -0.614312\nvt 0.885008 -0.626498\nvt 0.887303 -0.626664\nvt 0.887243 -0.636011\nvt 0.884371 -0.634108\nvt 0.882286 -0.638109\nvt 0.885181 -0.641320\nvt 0.879500 -0.643756\nvt 0.877692 -0.640571\nvt 0.870144 -0.641866\nvt 0.870776 -0.644888\nvt 0.859785 -0.645473\nvt 0.859546 -0.642304\nvt 0.845549 -0.642087\nvt 0.845745 -0.645585\nvt 0.827927 -0.645482\nvt 0.827795 -0.641594\nvt 0.823947 -0.598559\nvt 0.823685 -0.603813\nvt 0.841335 -0.604054\nvt 0.841820 -0.598828\nvt 0.855966 -0.599485\nvt 0.855356 -0.604752\nvt 0.865420 -0.605727\nvt 0.866365 -0.600654\nvt 0.872840 -0.602719\nvt 0.871055 -0.607223\nvt 0.872806 -0.609661\nvt 0.876399 -0.606289\nvt 0.880711 -0.615300\nvt 0.876437 -0.616914\nvt 0.878385 -0.626130\nvt 0.882500 -0.626115\nvt 0.881650 -0.632342\nvt 0.877915 -0.630878\nvt 0.877153 -0.631688\nvt 0.879938 -0.635166\nvt 0.876520 -0.637203\nvt 0.875237 -0.632800\nvt 0.869257 -0.633889\nvt 0.869660 -0.638450\nvt 0.859263 -0.638638\nvt 0.859164 -0.633798\nvt 0.845257 -0.632940\nvt 0.845305 -0.638030\nvt 0.827640 -0.637206\nvt 0.827639 -0.631962\nvt 0.423295 -0.857840\nvt 0.411804 -0.857702\nvt 0.423347 -0.855268\nvt 0.412790 -0.855086\nvt 0.403305 -0.853107\nvt 0.401380 -0.854920\nvt 0.398552 -0.844603\nvt 0.401066 -0.844653\nvt 0.403698 -0.836251\nvt 0.401764 -0.834366\nvt 0.412311 -0.831689\nvt 0.410899 -0.828790\nvt 0.413328 -0.834313\nvt 0.423970 -0.834109\nvt 0.423863 -0.831524\nvt 0.423797 -0.828637\nvt 0.431082 -0.831139\nvt 0.432456 -0.828205\nvt 0.430165 -0.833695\nvt 0.433128 -0.836125\nvt 0.435084 -0.834311\nvt 0.437621 -0.832127\nvt 0.435585 -0.844472\nvt 0.438471 -0.844453\nvt 0.433256 -0.844476\nvt 0.432619 -0.852899\nvt 0.434553 -0.854655\nvt 0.430530 -0.858026\nvt 0.429563 -0.855534\nvt 0.393466 -0.943814\nvt 0.395738 -0.937638\nvt 0.405694 -0.937766\nvt 0.405416 -0.943689\nvt 0.417311 -0.937891\nvt 0.417366 -0.943563\nvt 0.428081 -0.938365\nvt 0.427717 -0.944226\nvt 0.428445 -0.932504\nvt 0.438788 -0.933138\nvt 0.438428 -0.939013\nvt 0.438068 -0.944888\nvt 0.334026 -0.941739\nvt 0.334133 -0.935854\nvt 0.346267 -0.936945\nvt 0.346169 -0.942831\nvt 0.334240 -0.929969\nvt 0.346365 -0.931060\nvt 0.358491 -0.932152\nvt 0.356262 -0.937552\nvt 0.358312 -0.943923\nvt 0.361979 -0.937189\nvt 0.361911 -0.943074\nvt 0.362047 -0.931303\nvt 0.365604 -0.930455\nvt 0.367248 -0.936572\nvt 0.365510 -0.942226\nvt 0.375899 -0.936419\nvt 0.375883 -0.942259\nvt 0.375915 -0.930580\nvt 0.384582 -0.936643\nvt 0.386256 -0.942292\nvt 0.389948 -0.937157\nvt 0.389861 -0.943053\nvt 0.693734 -0.464538\nvt 0.685232 -0.467727\nvt 0.692263 -0.462132\nvt 0.685389 -0.465409\nvt 0.681147 -0.465280\nvt 0.679939 -0.467067\nvt 0.678466 -0.459450\nvt 0.674354 -0.459924\nvt 0.679553 -0.458636\nvt 0.681537 -0.449734\nvt 0.680327 -0.449590\nvt 0.676471 -0.449172\nvt 0.682181 -0.441461\nvt 0.677766 -0.440548\nvt 0.683746 -0.442560\nvt 0.686341 -0.437657\nvt 0.684603 -0.435888\nvt 0.679720 -0.433972\nvt 0.689833 -0.432681\nvt 0.688121 -0.430498\nvt 0.690916 -0.435024\nvt 0.697882 -0.432226\nvt 0.697906 -0.429286\nvt 0.697166 -0.426527\nvt 0.708220 -0.424814\nvt 0.709085 -0.422058\nvt 0.706862 -0.428357\nvt 0.714395 -0.426308\nvt 0.717412 -0.423376\nvt 0.721175 -0.427801\nvt 0.717381 -0.429159\nvt 0.717327 -0.435948\nvt 0.721265 -0.436172\nvt 0.720324 -0.446891\nvt 0.715892 -0.445237\nvt 0.711760 -0.453216\nvt 0.716101 -0.455928\nvt 0.705803 -0.460855\nvt 0.702643 -0.458053\nvt 0.233672 -0.144899\nvt 0.229429 -0.139647\nvt 0.233643 -0.134546\nvt 0.235550 -0.138341\nvt 0.227718 -0.132580\nvt 0.231737 -0.130751\nvt 0.235755 -0.128921\nvt 0.238135 -0.130273\nvt 0.237428 -0.131782\nvt 0.245714 -0.125844\nvt 0.246463 -0.127116\nvt 0.244964 -0.124572\nvt 0.254172 -0.120223\nvt 0.253905 -0.121740\nvt 0.255499 -0.122451\nvt 0.260235 -0.118442\nvt 0.260791 -0.119336\nvt 0.259678 -0.117546\nvt 0.265184 -0.114870\nvt 0.265634 -0.115546\nvt 0.266084 -0.116222\nvt 0.153285 -0.170271\nvt 0.153107 -0.169487\nvt 0.158286 -0.169587\nvt 0.159526 -0.172513\nvt 0.152928 -0.168702\nvt 0.157046 -0.166662\nvt 0.161163 -0.164622\nvt 0.164800 -0.169286\nvt 0.165768 -0.174754\nvt 0.173985 -0.168182\nvt 0.177761 -0.176216\nvt 0.170209 -0.160147\nvt 0.183313 -0.166465\nvt 0.189754 -0.177679\nvt 0.190257 -0.164328\nvt 0.195701 -0.175739\nvt 0.196904 -0.161618\nvt 0.201649 -0.173799\nvt 0.205342 -0.158182\nvt 0.211271 -0.170679\nvt 0.214344 -0.153377\nvt 0.220892 -0.167559\nvt 0.222684 -0.146561\nvt 0.227282 -0.156229\nvt 0.218087 -0.136894\nvt 0.448327 -0.073698\nvt 0.446756 -0.074977\nvt 0.452592 -0.079581\nvt 0.454062 -0.078059\nvt 0.445116 -0.076231\nvt 0.450971 -0.081025\nvt 0.455349 -0.084955\nvt 0.458220 -0.084378\nvt 0.460770 -0.081256\nvt 0.441075 -0.066237\nvt 0.437746 -0.065906\nvt 0.441982 -0.070410\nvt 0.444312 -0.069800\nvt 0.434406 -0.065614\nvt 0.439653 -0.071008\nvt 0.499194 -0.070213\nvt 0.496744 -0.070789\nvt 0.498368 -0.075720\nvt 0.500880 -0.075205\nvt 0.494254 -0.071369\nvt 0.495819 -0.076148\nvt 0.495795 -0.080206\nvt 0.501267 -0.081054\nvt 0.503705 -0.079222\nvt 0.497571 -0.063665\nvt 0.494986 -0.063878\nvt 0.495711 -0.067043\nvt 0.498219 -0.066594\nvt 0.492402 -0.064109\nvt 0.493193 -0.067513\nvt 0.529980 -0.070649\nvt 0.532410 -0.070250\nvt 0.532059 -0.067044\nvt 0.529649 -0.067457\nvt 0.534834 -0.069858\nvt 0.534467 -0.066631\nvt 0.534245 -0.063753\nvt 0.531843 -0.064073\nvt 0.529439 -0.064388\nvt 0.530609 -0.076882\nvt 0.532500 -0.078342\nvt 0.533014 -0.073959\nvt 0.530527 -0.074109\nvt 0.536418 -0.077736\nvt 0.535476 -0.073800\nvt 0.454608 -0.100232\nvt 0.463516 -0.099504\nvt 0.462647 -0.090166\nvt 0.455096 -0.095706\nvt 0.475171 -0.099134\nvt 0.474513 -0.090385\nvt 0.473861 -0.082527\nvt 0.467333 -0.082366\nvt 0.456395 -0.088022\nvt 0.455718 -0.091466\nvt 0.475422 -0.107203\nvt 0.462608 -0.107900\nvt 0.454399 -0.104417\nvt 0.454372 -0.108355\nvt 0.454364 -0.112292\nvt 0.498241 -0.088582\nvt 0.506077 -0.087023\nvt 0.499985 -0.097406\nvt 0.508417 -0.096457\nvt 0.517428 -0.095825\nvt 0.515923 -0.087009\nvt 0.513313 -0.079969\nvt 0.507758 -0.080202\nvt 0.501579 -0.105423\nvt 0.510243 -0.104710\nvt 0.519340 -0.103905\nvt 0.487085 -0.088745\nvt 0.480467 -0.082438\nvt 0.488133 -0.098124\nvt 0.492350 -0.081457\nvt 0.486810 -0.082016\nvt 0.489191 -0.106331\nvt 0.529499 -0.084159\nvt 0.520543 -0.079410\nvt 0.530103 -0.094219\nvt 0.541907 -0.093728\nvt 0.540594 -0.089550\nvt 0.539228 -0.085429\nvt 0.537681 -0.081495\nvt 0.529694 -0.077829\nvt 0.526890 -0.078386\nvt 0.533023 -0.102676\nvt 0.544479 -0.105821\nvt 0.543876 -0.101792\nvt 0.543011 -0.097797\nvt 0.642730 -0.142775\nvt 0.629880 -0.141411\nvt 0.641694 -0.135817\nvt 0.628041 -0.134633\nvt 0.619028 -0.135537\nvt 0.617795 -0.140317\nvt 0.657379 -0.143799\nvt 0.656958 -0.136788\nvt 0.217327 -0.076127\nvt 0.217847 -0.079843\nvt 0.220691 -0.077727\nvt 0.218983 -0.072845\nvt 0.217736 -0.084822\nvt 0.220855 -0.084246\nvt 0.224650 -0.083486\nvt 0.224133 -0.075225\nvt 0.221494 -0.068497\nvt 0.217536 -0.089356\nvt 0.220295 -0.090394\nvt 0.216899 -0.092242\nvt 0.218412 -0.094650\nvt 0.220728 -0.098438\nvt 0.223722 -0.091470\nvt 0.211448 -0.075895\nvt 0.209537 -0.072477\nvt 0.207482 -0.077375\nvt 0.210802 -0.079622\nvt 0.206945 -0.068095\nvt 0.203849 -0.074762\nvt 0.202944 -0.083069\nvt 0.207011 -0.083998\nvt 0.210633 -0.084698\nvt 0.207397 -0.090286\nvt 0.210761 -0.089337\nvt 0.203669 -0.091159\nvt 0.206442 -0.098321\nvt 0.209311 -0.094687\nvt 0.211293 -0.092282\nvt 0.214515 -0.075840\nvt 0.214453 -0.080429\nvt 0.214325 -0.084970\nvt 0.214302 -0.089043\nvt 0.214219 -0.092512\nvt 0.213906 -0.096066\nvt 0.213583 -0.099114\nvt 0.221431 -0.059393\nvt 0.214380 -0.058609\nvt 0.214255 -0.062148\nvt 0.221141 -0.063032\nvt 0.207292 -0.058902\nvt 0.207325 -0.062568\nvt 0.214237 -0.066565\nvt 0.228334 -0.073946\nvt 0.228058 -0.067065\nvt 0.228650 -0.082726\nvt 0.231797 -0.082172\nvt 0.231676 -0.073748\nvt 0.233105 -0.067146\nvt 0.227667 -0.091324\nvt 0.226675 -0.097655\nvt 0.230910 -0.097769\nvt 0.230834 -0.090546\nvt 0.199702 -0.073168\nvt 0.198830 -0.082087\nvt 0.201333 -0.066376\nvt 0.197717 -0.065378\nvt 0.196399 -0.072218\nvt 0.195656 -0.081289\nvt 0.199653 -0.090917\nvt 0.201114 -0.097272\nvt 0.196516 -0.090336\nvt 0.197667 -0.097770\nvt 0.214361 -0.071118\nvt 0.233034 -0.082060\nvt 0.232819 -0.074140\nvt 0.234040 -0.082196\nvt 0.233761 -0.074789\nvt 0.234762 -0.068977\nvt 0.234184 -0.068093\nvt 0.240643 -0.069406\nvt 0.240957 -0.068269\nvt 0.240554 -0.070249\nvt 0.245186 -0.073913\nvt 0.245966 -0.073191\nvt 0.246988 -0.072480\nvt 0.247695 -0.079237\nvt 0.248937 -0.079089\nvt 0.246732 -0.079672\nvt 0.246627 -0.087133\nvt 0.247588 -0.087199\nvt 0.248797 -0.087558\nvt 0.247140 -0.095147\nvt 0.248164 -0.095985\nvt 0.246298 -0.094568\nvt 0.244209 -0.100134\nvt 0.244600 -0.100922\nvt 0.245054 -0.102791\nvt 0.238048 -0.100109\nvt 0.237782 -0.100878\nvt 0.238335 -0.099264\nvt 0.233794 -0.095502\nvt 0.232740 -0.096228\nvt 0.232035 -0.089952\nvt 0.233132 -0.089588\nvt 0.235239 -0.082290\nvt 0.234920 -0.075305\nvt 0.236634 -0.082352\nvt 0.236318 -0.075578\nvt 0.235732 -0.070586\nvt 0.235232 -0.069781\nvt 0.240303 -0.071245\nvt 0.239722 -0.072415\nvt 0.243108 -0.075465\nvt 0.244256 -0.074668\nvt 0.245597 -0.080057\nvt 0.244241 -0.080424\nvt 0.244092 -0.087028\nvt 0.245472 -0.087071\nvt 0.245261 -0.094033\nvt 0.243938 -0.093609\nvt 0.243348 -0.098455\nvt 0.243837 -0.099363\nvt 0.238696 -0.098298\nvt 0.239277 -0.097137\nvt 0.236078 -0.094090\nvt 0.234860 -0.094789\nvt 0.234378 -0.089271\nvt 0.235800 -0.089040\nvt 0.217620 -0.100265\nvt 0.219042 -0.102825\nvt 0.221984 -0.103145\nvt 0.216085 -0.100832\nvt 0.216904 -0.102578\nvt 0.216284 -0.104456\nvt 0.217944 -0.105290\nvt 0.220906 -0.106754\nvt 0.213475 -0.105979\nvt 0.213469 -0.106634\nvt 0.213705 -0.104824\nvt 0.211126 -0.104448\nvt 0.209013 -0.105337\nvt 0.205982 -0.106721\nvt 0.207855 -0.102820\nvt 0.204943 -0.103161\nvt 0.210430 -0.102634\nvt 0.211218 -0.100946\nvt 0.209295 -0.100253\nvt 0.213462 -0.100407\nvt 0.213646 -0.101263\nvt 0.697072 -0.706283\nvt 0.694136 -0.706426\nvt 0.694577 -0.704211\nvt 0.697679 -0.704231\nvt 0.691200 -0.706569\nvt 0.691091 -0.704630\nvt 0.691574 -0.702137\nvt 0.695170 -0.701980\nvt 0.698286 -0.702178\nvt 0.696068 -0.699717\nvt 0.699419 -0.700030\nvt 0.692369 -0.699604\nvt 0.692981 -0.697087\nvt 0.696788 -0.697433\nvt 0.700551 -0.697882\nvt 0.696849 -0.695138\nvt 0.700340 -0.695497\nvt 0.692917 -0.694643\nvt 0.692584 -0.692269\nvt 0.696575 -0.692869\nvt 0.700129 -0.693112\nvt 0.696289 -0.690665\nvt 0.699739 -0.690869\nvt 0.692389 -0.689961\nvt 0.692643 -0.688358\nvt 0.695996 -0.688492\nvt 0.699349 -0.688626\nvt 0.686520 -0.708848\nvt 0.686837 -0.705928\nvt 0.681839 -0.711127\nvt 0.682200 -0.707665\nvt 0.682638 -0.704112\nvt 0.687280 -0.702959\nvt 0.687973 -0.699890\nvt 0.683229 -0.700375\nvt 0.683468 -0.696612\nvt 0.688414 -0.696828\nvt 0.688102 -0.693878\nvt 0.682845 -0.692977\nvt 0.682194 -0.689463\nvt 0.687630 -0.691027\nvt 0.687592 -0.688262\nvt 0.682346 -0.686064\nvt 0.682899 -0.682721\nvt 0.687771 -0.685539\nvt 0.560310 -0.061692\nvt 0.608408 -0.060974\nvt 0.608285 -0.052669\nvt 0.560185 -0.053387\nvt 0.674354 -0.354236\nvt 0.674354 -0.387090\nvt 0.716860 -0.393049\nvt 0.716855 -0.360194\nvt 0.768519 -0.363806\nvt 0.768519 -0.396661\nvt 0.809749 -0.396661\nvt 0.809749 -0.363806\nvt 0.861412 -0.360194\nvt 0.861408 -0.393049\nvt 0.903914 -0.387090\nvt 0.903914 -0.354236\nvt 0.921754 -0.340719\nvt 0.969657 -0.345130\nvt 0.970419 -0.336859\nvt 0.922515 -0.332448\nvt 0.561423 -0.068434\nvt 0.559419 -0.076506\nvt 0.604659 -0.087756\nvt 0.606665 -0.079691\nvt 0.740444 -0.244726\nvt 0.782934 -0.238726\nvt 0.782892 -0.206619\nvt 0.740382 -0.212620\nvt 0.834579 -0.235089\nvt 0.875794 -0.235089\nvt 0.875809 -0.202983\nvt 0.834563 -0.202983\nvt 0.927438 -0.238726\nvt 0.969928 -0.244726\nvt 0.969991 -0.212620\nvt 0.927480 -0.206619\nvt 0.922771 -0.317625\nvt 0.924156 -0.325818\nvt 0.970122 -0.318063\nvt 0.968740 -0.309870\nvt 0.552119 -0.063034\nvt 0.553223 -0.069773\nvt 0.672841 -0.561496\nvt 0.715765 -0.561461\nvt 0.715867 -0.556513\nvt 0.672971 -0.556548\nvt 0.767566 -0.561470\nvt 0.808803 -0.561470\nvt 0.808769 -0.556520\nvt 0.767600 -0.556520\nvt 0.860603 -0.561461\nvt 0.903528 -0.561496\nvt 0.903397 -0.556548\nvt 0.860502 -0.556513\nvt 0.914452 -0.330438\nvt 0.916103 -0.323812\nvt 0.978722 -0.336728\nvt 0.978426 -0.317934\nvt 0.683475 -0.750581\nvt 0.726389 -0.750581\nvt 0.726391 -0.741958\nvt 0.683475 -0.741958\nvt 0.778152 -0.750581\nvt 0.819355 -0.750581\nvt 0.819355 -0.741958\nvt 0.778152 -0.741958\nvt 0.871118 -0.750581\nvt 0.914032 -0.750581\nvt 0.914032 -0.741958\nvt 0.871116 -0.741958\nvt 0.616677 -0.061744\nvt 0.614934 -0.080460\nvt 0.594874 -0.098604\nvt 0.564753 -0.085481\nvt 0.555276 -0.081937\nvt 0.597434 -0.105111\nvt 0.567579 -0.081416\nvt 0.598314 -0.090695\nvt 0.928772 -0.309088\nvt 0.959808 -0.298308\nvt 0.962857 -0.292016\nvt 0.919051 -0.311897\nvt 0.962638 -0.306455\nvt 0.931282 -0.313355\nvt 0.699023 -0.330424\nvt 0.699023 -0.315747\nvt 0.695782 -0.315778\nvt 0.695782 -0.330393\nvt 0.589327 -0.566417\nvt 0.596764 -0.566562\nvt 0.596912 -0.557532\nvt 0.589259 -0.557103\nvt 0.597859 -0.547535\nvt 0.590440 -0.546847\nvt 0.695722 -0.312538\nvt 0.668089 -0.312507\nvt 0.668149 -0.315748\nvt 0.540321 -0.565603\nvt 0.561023 -0.566355\nvt 0.561369 -0.555424\nvt 0.540937 -0.556401\nvt 0.561326 -0.541736\nvt 0.539761 -0.546230\nvt 0.664907 -0.315778\nvt 0.664907 -0.330393\nvt 0.668149 -0.330424\nvt 0.568826 -0.566389\nvt 0.568751 -0.555463\nvt 0.569003 -0.541792\nvt 0.668089 -0.333664\nvt 0.695722 -0.333634\nvt 0.692222 -0.319308\nvt 0.692222 -0.326864\nvt 0.671678 -0.326864\nvt 0.671678 -0.319308\nvt 0.180473 -0.189066\nvt 0.180473 -0.203743\nvt 0.183714 -0.203712\nvt 0.183714 -0.189097\nvt 0.028574 -0.614186\nvt 0.035984 -0.614193\nvt 0.036271 -0.604907\nvt 0.028588 -0.605125\nvt 0.035398 -0.594636\nvt 0.027969 -0.595073\nvt 0.183774 -0.206953\nvt 0.211407 -0.206983\nvt 0.211347 -0.203742\nvt 0.056550 -0.614931\nvt 0.056854 -0.604015\nvt 0.056853 -0.590342\nvt 0.214588 -0.203712\nvt 0.214588 -0.189097\nvt 0.211347 -0.189066\nvt 0.064390 -0.614980\nvt 0.064240 -0.604043\nvt 0.064486 -0.590358\nvt 0.211407 -0.185826\nvt 0.183773 -0.185856\nvt 0.085037 -0.614785\nvt 0.084631 -0.605555\nvt 0.086022 -0.595400\nvt 0.187274 -0.200182\nvt 0.187274 -0.192626\nvt 0.207817 -0.192627\nvt 0.207817 -0.200183\nvt 0.138643 -0.074638\nvt 0.146334 -0.074019\nvt 0.147722 -0.068750\nvt 0.139222 -0.069019\nvt 0.131883 -0.075530\nvt 0.131782 -0.069924\nvt 0.132184 -0.081308\nvt 0.138458 -0.080387\nvt 0.145788 -0.079263\nvt 0.126502 -0.076544\nvt 0.126256 -0.071252\nvt 0.121675 -0.077222\nvt 0.123181 -0.073321\nvt 0.122357 -0.082830\nvt 0.127051 -0.082112\nvt 0.156571 -0.081212\nvt 0.154275 -0.077607\nvt 0.148372 -0.083833\nvt 0.159675 -0.084450\nvt 0.151451 -0.088428\nvt 0.164385 -0.079174\nvt 0.165072 -0.076544\nvt 0.164100 -0.074181\nvt 0.141234 -0.085504\nvt 0.135050 -0.086478\nvt 0.144124 -0.090560\nvt 0.137963 -0.091503\nvt 0.129854 -0.087078\nvt 0.125078 -0.087846\nvt 0.132913 -0.091621\nvt 0.128885 -0.090686\nvt 0.154620 -0.073320\nvt 0.163555 -0.072035\nvt 0.161943 -0.071085\nvt 0.156376 -0.069214\nvt 0.138640 -0.059307\nvt 0.149203 -0.057810\nvt 0.148676 -0.046143\nvt 0.136343 -0.049483\nvt 0.129803 -0.062384\nvt 0.126249 -0.055214\nvt 0.123341 -0.066639\nvt 0.119231 -0.062490\nvt 0.120062 -0.071113\nvt 0.116082 -0.069522\nvt 0.118625 -0.076434\nvt 0.114986 -0.076413\nvt 0.119450 -0.083215\nvt 0.116275 -0.084288\nvt 0.122748 -0.089045\nvt 0.120477 -0.090901\nvt 0.127049 -0.092771\nvt 0.125608 -0.095499\nvt 0.131695 -0.095563\nvt 0.131255 -0.100064\nvt 0.138106 -0.097808\nvt 0.139267 -0.104338\nvt 0.146147 -0.098721\nvt 0.149556 -0.106754\nvt 0.155721 -0.097434\nvt 0.162013 -0.105682\nvt 0.166036 -0.092336\nvt 0.175118 -0.098855\nvt 0.172756 -0.085619\nvt 0.184072 -0.088668\nvt 0.175887 -0.080131\nvt 0.188521 -0.078677\nvt 0.176688 -0.073252\nvt 0.188461 -0.066885\nvt 0.174417 -0.066700\nvt 0.183105 -0.056500\nvt 0.169719 -0.062252\nvt 0.174765 -0.049996\nvt 0.160745 -0.058742\nvt 0.162597 -0.046237\nvt 0.354483 -0.181224\nvt 0.348863 -0.180645\nvt 0.348595 -0.172145\nvt 0.353863 -0.173533\nvt 0.355375 -0.187984\nvt 0.349768 -0.188086\nvt 0.360232 -0.181409\nvt 0.361152 -0.187684\nvt 0.359107 -0.174080\nvt 0.356388 -0.193366\nvt 0.351096 -0.193611\nvt 0.357066 -0.198193\nvt 0.353165 -0.196687\nvt 0.361956 -0.192816\nvt 0.362675 -0.197510\nvt 0.361057 -0.163297\nvt 0.363677 -0.171496\nvt 0.357451 -0.165593\nvt 0.364294 -0.160192\nvt 0.368273 -0.168417\nvt 0.356389 -0.154796\nvt 0.359018 -0.155483\nvt 0.354025 -0.155767\nvt 0.365349 -0.178633\nvt 0.366323 -0.184817\nvt 0.370404 -0.175743\nvt 0.371347 -0.181905\nvt 0.366923 -0.190014\nvt 0.367690 -0.194789\nvt 0.371465 -0.186955\nvt 0.370531 -0.190983\nvt 0.353165 -0.165247\nvt 0.349059 -0.163492\nvt 0.350929 -0.157924\nvt 0.351880 -0.156312\nvt 0.339151 -0.181228\nvt 0.329328 -0.183525\nvt 0.325988 -0.171191\nvt 0.337654 -0.170664\nvt 0.342228 -0.190065\nvt 0.335058 -0.193618\nvt 0.346483 -0.196526\nvt 0.342335 -0.200637\nvt 0.350957 -0.199805\nvt 0.349366 -0.203786\nvt 0.356279 -0.201243\nvt 0.356258 -0.204882\nvt 0.363059 -0.200418\nvt 0.364133 -0.203592\nvt 0.368889 -0.197120\nvt 0.370746 -0.199391\nvt 0.372616 -0.192819\nvt 0.375343 -0.194260\nvt 0.375408 -0.188172\nvt 0.379908 -0.188613\nvt 0.377653 -0.181762\nvt 0.384183 -0.180600\nvt 0.378565 -0.173720\nvt 0.386599 -0.170312\nvt 0.377279 -0.164147\nvt 0.385526 -0.157854\nvt 0.372180 -0.153831\nvt 0.378699 -0.144750\nvt 0.365464 -0.147112\nvt 0.368512 -0.135796\nvt 0.359975 -0.143981\nvt 0.358522 -0.131347\nvt 0.353097 -0.143179\nvt 0.346729 -0.131407\nvt 0.346544 -0.145451\nvt 0.336344 -0.136763\nvt 0.342096 -0.150148\nvt 0.329840 -0.145103\nvt 0.338586 -0.159122\nvt 0.326082 -0.157270\nvt 0.544261 -0.363977\nvt 0.547904 -0.374917\nvt 0.551167 -0.375083\nvt 0.546289 -0.363273\nvt 0.539117 -0.356319\nvt 0.539713 -0.355180\nvt 0.538485 -0.356986\nvt 0.542332 -0.364191\nvt 0.544942 -0.374285\nvt 0.533999 -0.353840\nvt 0.533646 -0.352766\nvt 0.529794 -0.353287\nvt 0.528706 -0.352266\nvt 0.530542 -0.353974\nvt 0.534141 -0.354414\nvt 0.525016 -0.354575\nvt 0.522565 -0.353705\nvt 0.519274 -0.359234\nvt 0.514983 -0.359270\nvt 0.523142 -0.359666\nvt 0.527004 -0.355448\nvt 0.513961 -0.368060\nvt 0.508105 -0.370176\nvt 0.511231 -0.379983\nvt 0.505111 -0.385045\nvt 0.517642 -0.376814\nvt 0.519604 -0.367067\nvt 0.512929 -0.392836\nvt 0.508165 -0.400493\nvt 0.518459 -0.402820\nvt 0.515955 -0.411920\nvt 0.522322 -0.395863\nvt 0.518712 -0.387501\nvt 0.524996 -0.407524\nvt 0.525235 -0.416868\nvt 0.532847 -0.407908\nvt 0.535657 -0.415875\nvt 0.531960 -0.400867\nvt 0.526602 -0.399778\nvt 0.539808 -0.403568\nvt 0.543922 -0.409051\nvt 0.544120 -0.396619\nvt 0.548530 -0.399604\nvt 0.540944 -0.393734\nvt 0.537226 -0.398531\nvt 0.547693 -0.386848\nvt 0.551684 -0.388113\nvt 0.544503 -0.385308\nvt 0.535706 -0.363592\nvt 0.538315 -0.364123\nvt 0.537125 -0.359321\nvt 0.535094 -0.357021\nvt 0.532855 -0.363509\nvt 0.532307 -0.356637\nvt 0.533406 -0.372851\nvt 0.536481 -0.372713\nvt 0.539156 -0.372900\nvt 0.540221 -0.364222\nvt 0.537725 -0.357643\nvt 0.541788 -0.373369\nvt 0.534405 -0.354829\nvt 0.531260 -0.354408\nvt 0.528886 -0.356059\nvt 0.526821 -0.360045\nvt 0.530386 -0.358243\nvt 0.528866 -0.361078\nvt 0.524925 -0.366633\nvt 0.524072 -0.375144\nvt 0.528836 -0.365906\nvt 0.528793 -0.373984\nvt 0.525364 -0.384555\nvt 0.527706 -0.391529\nvt 0.530645 -0.382993\nvt 0.529506 -0.388455\nvt 0.530616 -0.394326\nvt 0.533348 -0.394836\nvt 0.530922 -0.389528\nvt 0.532054 -0.390029\nvt 0.535797 -0.393735\nvt 0.538058 -0.390836\nvt 0.534077 -0.389854\nvt 0.536594 -0.388302\nvt 0.541284 -0.383592\nvt 0.538841 -0.382879\nvt 0.536847 -0.382867\nvt 0.534414 -0.382955\nvt 0.530686 -0.364612\nvt 0.530918 -0.373317\nvt 0.532376 -0.382869\nvt 0.413459 -0.076116\nvt 0.414163 -0.078144\nvt 0.402353 -0.083022\nvt 0.402519 -0.079759\nvt 0.421117 -0.070973\nvt 0.422256 -0.071568\nvt 0.413245 -0.074188\nvt 0.420450 -0.070341\nvt 0.403151 -0.076797\nvt 0.423596 -0.065854\nvt 0.424669 -0.065501\nvt 0.424149 -0.061649\nvt 0.425170 -0.060561\nvt 0.423021 -0.065996\nvt 0.423462 -0.062397\nvt 0.422860 -0.056872\nvt 0.423731 -0.054420\nvt 0.418202 -0.051130\nvt 0.418166 -0.046838\nvt 0.421988 -0.058859\nvt 0.417770 -0.054997\nvt 0.409376 -0.045816\nvt 0.407259 -0.039960\nvt 0.397453 -0.043087\nvt 0.392390 -0.036967\nvt 0.410369 -0.051459\nvt 0.400622 -0.049498\nvt 0.384600 -0.044785\nvt 0.376942 -0.040020\nvt 0.374615 -0.050314\nvt 0.365515 -0.047810\nvt 0.389935 -0.050567\nvt 0.381573 -0.054178\nvt 0.369912 -0.056851\nvt 0.360568 -0.057090\nvt 0.369527 -0.064703\nvt 0.361561 -0.067512\nvt 0.377658 -0.058458\nvt 0.376569 -0.063816\nvt 0.373868 -0.071663\nvt 0.368385 -0.075777\nvt 0.380817 -0.075975\nvt 0.377832 -0.080385\nvt 0.378905 -0.069082\nvt 0.383702 -0.072799\nvt 0.390588 -0.079548\nvt 0.389323 -0.083540\nvt 0.392128 -0.076358\nvt 0.413844 -0.067562\nvt 0.420414 -0.066950\nvt 0.418115 -0.068981\nvt 0.413313 -0.070171\nvt 0.413927 -0.064710\nvt 0.420798 -0.064163\nvt 0.404723 -0.068337\nvt 0.404585 -0.065261\nvt 0.404536 -0.071011\nvt 0.413214 -0.072076\nvt 0.419793 -0.069580\nvt 0.404067 -0.073644\nvt 0.422607 -0.066260\nvt 0.423028 -0.063115\nvt 0.421376 -0.060741\nvt 0.417391 -0.058677\nvt 0.419193 -0.062242\nvt 0.416358 -0.060721\nvt 0.410803 -0.056780\nvt 0.402292 -0.055927\nvt 0.411530 -0.060691\nvt 0.403452 -0.060648\nvt 0.392881 -0.057219\nvt 0.385907 -0.059562\nvt 0.394443 -0.062500\nvt 0.388981 -0.061361\nvt 0.383110 -0.062471\nvt 0.382600 -0.065203\nvt 0.387908 -0.062777\nvt 0.387406 -0.063909\nvt 0.383701 -0.067652\nvt 0.386600 -0.069914\nvt 0.387582 -0.065933\nvt 0.389134 -0.068449\nvt 0.393844 -0.073139\nvt 0.394557 -0.070697\nvt 0.394569 -0.068702\nvt 0.394480 -0.066270\nvt 0.412824 -0.062541\nvt 0.404119 -0.062774\nvt 0.394566 -0.064231\nvt 0.710672 -0.103792\nvt 0.899130 -0.103792\nvt 0.899130 -0.009563\nvt 0.710672 -0.009563\nvt 0.710672 -0.103792\nvt 0.899130 -0.103792\nvt 0.899130 -0.009563\nvt 0.710672 -0.009563\nvt 0.239897 -0.078341\nvt 0.239931 -0.084733\nvt 0.239594 -0.091114\nvt 0.073155 -0.040778\nvt 0.073490 -0.047159\nvt 0.073457 -0.053551\nvt 0.557209 -0.896496\nvt 0.557482 -0.898139\nvt 0.561456 -0.900867\nvt 0.560966 -0.897555\nvt 0.556868 -0.894378\nvt 0.560272 -0.895576\nvt 0.553835 -0.893480\nvt 0.553915 -0.895932\nvt 0.554293 -0.897505\nvt 0.545884 -0.896496\nvt 0.545610 -0.898139\nvt 0.548800 -0.897505\nvt 0.549178 -0.895932\nvt 0.546225 -0.894378\nvt 0.549258 -0.893480\nvt 0.542821 -0.895576\nvt 0.542127 -0.897555\nvt 0.541507 -0.900867\nvt 0.486891 -0.856413\nvt 0.486706 -0.853197\nvt 0.480128 -0.853182\nvt 0.480337 -0.856404\nvt 0.487359 -0.859455\nvt 0.482641 -0.858628\nvt 0.494405 -0.859315\nvt 0.494319 -0.856285\nvt 0.494120 -0.853082\nvt 0.496486 -0.871230\nvt 0.499156 -0.871152\nvt 0.499166 -0.868717\nvt 0.496965 -0.867967\nvt 0.492608 -0.871022\nvt 0.492993 -0.867762\nvt 0.492744 -0.874022\nvt 0.496657 -0.874243\nvt 0.499325 -0.874182\nvt 0.498430 -0.856191\nvt 0.500752 -0.856002\nvt 0.500655 -0.852816\nvt 0.498297 -0.852995\nvt 0.498597 -0.859213\nvt 0.500509 -0.858249\nvt 0.557015 -0.909042\nvt 0.557014 -0.912258\nvt 0.557700 -0.911327\nvt 0.559585 -0.908687\nvt 0.557015 -0.906501\nvt 0.560211 -0.905291\nvt 0.553674 -0.906342\nvt 0.553356 -0.908951\nvt 0.553356 -0.912955\nvt 0.544703 -0.909042\nvt 0.544703 -0.912258\nvt 0.548362 -0.912955\nvt 0.548362 -0.908951\nvt 0.544703 -0.906501\nvt 0.548044 -0.906342\nvt 0.541507 -0.905291\nvt 0.542132 -0.908687\nvt 0.544018 -0.911327\nvt 0.485748 -0.870590\nvt 0.485931 -0.873579\nvt 0.486431 -0.867370\nvt 0.482428 -0.867765\nvt 0.480128 -0.870032\nvt 0.480299 -0.873020\nvt 0.533832 -0.840696\nvt 0.530639 -0.840643\nvt 0.530760 -0.843056\nvt 0.533943 -0.843090\nvt 0.537033 -0.840961\nvt 0.537555 -0.843518\nvt 0.536942 -0.838711\nvt 0.533738 -0.838342\nvt 0.502847 -0.842566\nvt 0.502902 -0.838358\nvt 0.500409 -0.839194\nvt 0.500811 -0.842551\nvt 0.526294 -0.852360\nvt 0.523118 -0.852939\nvt 0.522960 -0.855666\nvt 0.526569 -0.854952\nvt 0.529956 -0.852804\nvt 0.530193 -0.855363\nvt 0.537304 -0.868385\nvt 0.533131 -0.868926\nvt 0.533380 -0.870947\nvt 0.536762 -0.870958\nvt 0.539879 -0.868628\nvt 0.539200 -0.871184\nvt 0.513292 -0.881313\nvt 0.507162 -0.881492\nvt 0.508133 -0.883872\nvt 0.513840 -0.883767\nvt 0.520102 -0.881246\nvt 0.520487 -0.883767\nvt 0.519695 -0.878796\nvt 0.512578 -0.878963\nvt 0.507928 -0.879772\nvt 0.524885 -0.881297\nvt 0.525899 -0.883823\nvt 0.527713 -0.881381\nvt 0.529489 -0.883886\nvt 0.526008 -0.879536\nvt 0.523951 -0.878828\nvt 0.502822 -0.882724\nvt 0.502044 -0.885779\nvt 0.504610 -0.885316\nvt 0.505605 -0.882273\nvt 0.502606 -0.879583\nvt 0.505577 -0.878695\nvt 0.499531 -0.879982\nvt 0.499584 -0.883146\nvt 0.499757 -0.885298\nvt 0.502394 -0.870730\nvt 0.502399 -0.873784\nvt 0.505399 -0.873710\nvt 0.505177 -0.870280\nvt 0.501396 -0.867593\nvt 0.503962 -0.867129\nvt 0.486944 -0.862216\nvt 0.484116 -0.862305\nvt 0.482345 -0.864814\nvt 0.485935 -0.864743\nvt 0.491727 -0.862156\nvt 0.491347 -0.864677\nvt 0.492130 -0.859706\nvt 0.487873 -0.859745\nvt 0.485817 -0.860457\nvt 0.498537 -0.862210\nvt 0.497994 -0.864665\nvt 0.504668 -0.862379\nvt 0.503701 -0.864760\nvt 0.503898 -0.860659\nvt 0.499247 -0.859859\nvt 0.551547 -0.896359\nvt 0.551547 -0.893180\nvt 0.550292 -0.897554\nvt 0.551547 -0.897875\nvt 0.550402 -0.898160\nvt 0.552691 -0.898160\nvt 0.552801 -0.897554\nvt 0.556300 -0.891108\nvt 0.556345 -0.889981\nvt 0.552601 -0.889983\nvt 0.552590 -0.891108\nvt 0.556345 -0.892234\nvt 0.552601 -0.892232\nvt 0.558817 -0.892229\nvt 0.558774 -0.891108\nvt 0.558817 -0.889987\nvt 0.550859 -0.907968\nvt 0.552131 -0.905962\nvt 0.550859 -0.905429\nvt 0.552021 -0.904900\nvt 0.549696 -0.904900\nvt 0.549587 -0.905962\nvt 0.550859 -0.913188\nvt 0.547831 -0.891108\nvt 0.547773 -0.892225\nvt 0.547773 -0.889990\nvt 0.543676 -0.890002\nvt 0.543779 -0.891108\nvt 0.543676 -0.892213\nvt 0.520970 -0.862024\nvt 0.519860 -0.862016\nvt 0.519875 -0.863335\nvt 0.520979 -0.863322\nvt 0.522072 -0.862000\nvt 0.522077 -0.863320\nvt 0.522057 -0.860684\nvt 0.520962 -0.860726\nvt 0.519855 -0.860700\nvt 0.501859 -0.876234\nvt 0.501886 -0.877349\nvt 0.502778 -0.877122\nvt 0.502711 -0.876022\nvt 0.558995 -0.871081\nvt 0.559037 -0.872209\nvt 0.560219 -0.872232\nvt 0.560233 -0.871110\nvt 0.557770 -0.871063\nvt 0.557857 -0.872186\nvt 0.501008 -0.876445\nvt 0.500996 -0.877563\nvt 0.549416 -0.881887\nvt 0.552068 -0.882291\nvt 0.552225 -0.880921\nvt 0.549612 -0.880364\nvt 0.545383 -0.882029\nvt 0.545481 -0.880462\nvt 0.545448 -0.882918\nvt 0.549321 -0.882752\nvt 0.552217 -0.882984\nvt 0.538971 -0.882337\nvt 0.538228 -0.880816\nvt 0.533470 -0.883054\nvt 0.532044 -0.881681\nvt 0.535079 -0.883680\nvt 0.540032 -0.883143\nvt 0.525088 -0.861648\nvt 0.527554 -0.862153\nvt 0.527722 -0.860148\nvt 0.525082 -0.860012\nvt 0.538254 -0.843389\nvt 0.538117 -0.841491\nvt 0.523594 -0.862601\nvt 0.523887 -0.863260\nvt 0.525358 -0.862929\nvt 0.527535 -0.863611\nvt 0.551547 -0.898736\nvt 0.552654 -0.898734\nvt 0.550439 -0.898734\nvt 0.550444 -0.899232\nvt 0.551547 -0.899224\nvt 0.552649 -0.899232\nvt 0.496798 -0.883591\nvt 0.494946 -0.883080\nvt 0.494704 -0.883953\nvt 0.497137 -0.885196\nvt 0.498674 -0.882724\nvt 0.499388 -0.884596\nvt 0.531626 -0.875349\nvt 0.529928 -0.873485\nvt 0.528442 -0.874397\nvt 0.530184 -0.875897\nvt 0.531362 -0.877251\nvt 0.530560 -0.877389\nvt 0.487240 -0.851973\nvt 0.481414 -0.851968\nvt 0.493792 -0.851872\nvt 0.524143 -0.872802\nvt 0.517547 -0.872753\nvt 0.517707 -0.873958\nvt 0.523268 -0.873948\nvt 0.497889 -0.851797\nvt 0.500357 -0.851647\nvt 0.513412 -0.872793\nvt 0.510832 -0.873523\nvt 0.510847 -0.874443\nvt 0.513727 -0.873953\nvt 0.502252 -0.878421\nvt 0.499668 -0.878749\nvt 0.504210 -0.877982\nvt 0.508897 -0.875546\nvt 0.507657 -0.877609\nvt 0.508687 -0.877692\nvt 0.509459 -0.876077\nvt 0.550859 -0.903531\nvt 0.549733 -0.903502\nvt 0.551985 -0.903502\nvt 0.551980 -0.902252\nvt 0.550859 -0.902265\nvt 0.549738 -0.902252\nvt 0.554339 -0.883622\nvt 0.555932 -0.885053\nvt 0.557393 -0.884660\nvt 0.554920 -0.882527\nvt 0.553883 -0.884058\nvt 0.554937 -0.885189\nvt 0.549819 -0.897960\nvt 0.548649 -0.898117\nvt 0.522163 -0.856468\nvt 0.522175 -0.856419\nvt 0.523347 -0.856223\nvt 0.549882 -0.898218\nvt 0.552610 -0.905167\nvt 0.553794 -0.905217\nvt 0.553418 -0.904286\nvt 0.552548 -0.904619\nvt 0.553274 -0.897960\nvt 0.554444 -0.898117\nvt 0.553211 -0.898218\nvt 0.538391 -0.844243\nvt 0.538452 -0.844192\nvt 0.537216 -0.844152\nvt 0.549108 -0.905167\nvt 0.549170 -0.904619\nvt 0.547924 -0.905217\nvt 0.548300 -0.904286\nvt 0.552533 -0.883428\nvt 0.552917 -0.883639\nvt 0.551606 -0.883272\nvt 0.559832 -0.890002\nvt 0.559868 -0.889523\nvt 0.558949 -0.889461\nvt 0.500313 -0.875069\nvt 0.500396 -0.875479\nvt 0.500919 -0.875378\nvt 0.500749 -0.874942\nvt 0.541924 -0.889547\nvt 0.543367 -0.889481\nvt 0.541981 -0.889286\nvt 0.541507 -0.889485\nvt 0.519875 -0.860053\nvt 0.519388 -0.860034\nvt 0.519320 -0.860602\nvt 0.542123 -0.890020\nvt 0.553107 -0.899570\nvt 0.553169 -0.899256\nvt 0.552633 -0.899613\nvt 0.519346 -0.863355\nvt 0.519412 -0.863954\nvt 0.519889 -0.863991\nvt 0.523428 -0.863711\nvt 0.524031 -0.863689\nvt 0.523230 -0.863467\nvt 0.530420 -0.877994\nvt 0.530736 -0.878039\nvt 0.530125 -0.877471\nvt 0.522059 -0.863976\nvt 0.522527 -0.863932\nvt 0.522586 -0.863331\nvt 0.549986 -0.899570\nvt 0.550459 -0.899613\nvt 0.549924 -0.899256\nvt 0.541924 -0.892668\nvt 0.541507 -0.892730\nvt 0.541981 -0.892929\nvt 0.543367 -0.892734\nvt 0.542123 -0.892195\nvt 0.522505 -0.860012\nvt 0.522046 -0.860037\nvt 0.522560 -0.860579\nvt 0.500423 -0.878156\nvt 0.499498 -0.878210\nvt 0.500017 -0.878477\nvt 0.500864 -0.878151\nvt 0.500473 -0.877633\nvt 0.559868 -0.892692\nvt 0.559832 -0.892213\nvt 0.558949 -0.892755\nvt 0.549274 -0.901684\nvt 0.549212 -0.902216\nvt 0.549753 -0.901636\nvt 0.502880 -0.877659\nvt 0.503342 -0.877496\nvt 0.503308 -0.877012\nvt 0.508889 -0.878310\nvt 0.509160 -0.877765\nvt 0.508360 -0.878386\nvt 0.554822 -0.885779\nvt 0.555363 -0.885767\nvt 0.554464 -0.885367\nvt 0.503231 -0.874858\nvt 0.503232 -0.874408\nvt 0.502766 -0.874450\nvt 0.502700 -0.874938\nvt 0.552444 -0.901684\nvt 0.551965 -0.901636\nvt 0.552506 -0.902216\nvt 0.534033 -0.844037\nvt 0.530877 -0.844014\nvt 0.557620 -0.898832\nvt 0.560773 -0.901369\nvt 0.526592 -0.855912\nvt 0.545473 -0.898832\nvt 0.542320 -0.901369\nvt 0.530177 -0.856315\nvt 0.497908 -0.865648\nvt 0.491191 -0.865679\nvt 0.498034 -0.866323\nvt 0.491132 -0.866358\nvt 0.504012 -0.866318\nvt 0.503532 -0.865715\nvt 0.513928 -0.884749\nvt 0.508304 -0.884827\nvt 0.513803 -0.885425\nvt 0.507824 -0.885431\nvt 0.520705 -0.885447\nvt 0.520644 -0.884768\nvt 0.485386 -0.865735\nvt 0.481401 -0.865788\nvt 0.485048 -0.866478\nvt 0.480128 -0.866711\nvt 0.557015 -0.905307\nvt 0.557015 -0.904323\nvt 0.560194 -0.904053\nvt 0.506483 -0.870117\nvt 0.505196 -0.866962\nvt 0.506911 -0.882110\nvt 0.505845 -0.885149\nvt 0.544703 -0.905307\nvt 0.541524 -0.904053\nvt 0.544703 -0.904323\nvt 0.526449 -0.884813\nvt 0.526788 -0.885556\nvt 0.531709 -0.885779\nvt 0.530434 -0.884859\nvt 0.542189 -0.891108\nvt 0.520966 -0.860052\nvt 0.500456 -0.876538\nvt 0.559820 -0.891108\nvt 0.556479 -0.889440\nvt 0.549192 -0.883308\nvt 0.545450 -0.883451\nvt 0.552636 -0.889443\nvt 0.547602 -0.889452\nvt 0.540538 -0.883617\nvt 0.536412 -0.883799\nvt 0.519311 -0.861973\nvt 0.533673 -0.884790\nvt 0.534332 -0.885117\nvt 0.534707 -0.884258\nvt 0.525404 -0.863619\nvt 0.520975 -0.863997\nvt 0.551547 -0.899626\nvt 0.522592 -0.861950\nvt 0.529538 -0.876218\nvt 0.528909 -0.875000\nvt 0.547602 -0.892764\nvt 0.522818 -0.874468\nvt 0.527050 -0.874453\nvt 0.517787 -0.874532\nvt 0.552636 -0.892773\nvt 0.556479 -0.892775\nvt 0.513946 -0.874552\nvt 0.511476 -0.874623\nvt 0.501868 -0.877931\nvt 0.501944 -0.878212\nvt 0.509697 -0.876466\nvt 0.503263 -0.875929\nvt 0.550859 -0.901620\nvt 0.558814 -0.870530\nvt 0.560219 -0.870578\nvt 0.553695 -0.884470\nvt 0.558557 -0.870322\nvt 0.556514 -0.870322\nvt 0.557451 -0.870525\nvt 0.522949 -0.863081\nvt 0.523269 -0.861826\nvt 0.522676 -0.862708\nvt 0.553190 -0.898728\nvt 0.549903 -0.898728\nvt 0.494201 -0.882762\nvt 0.494170 -0.883121\nvt 0.531264 -0.878052\nvt 0.504992 -0.877644\nvt 0.506127 -0.877718\nvt 0.549191 -0.903415\nvt 0.507162 -0.878461\nvt 0.552527 -0.903415\nvt 0.556546 -0.885757\nvt 0.557736 -0.885747\nvt 0.522085 -0.868021\nvt 0.522085 -0.872293\nvt 0.527575 -0.872293\nvt 0.527575 -0.868021\nvt 0.546641 -0.886935\nvt 0.542369 -0.886935\nvt 0.542369 -0.888248\nvt 0.546641 -0.888248\nvt 0.530936 -0.863612\nvt 0.529528 -0.858284\nvt 0.528254 -0.858620\nvt 0.529662 -0.863948\nvt 0.486108 -0.874334\nvt 0.481836 -0.874334\nvt 0.481836 -0.875646\nvt 0.486108 -0.875646\nvt 0.520315 -0.851023\nvt 0.519117 -0.856402\nvt 0.520403 -0.856688\nvt 0.521601 -0.851309\nvt 0.521798 -0.850420\nvt 0.521567 -0.850040\nvt 0.520582 -0.849821\nvt 0.496681 -0.827459\nvt 0.492409 -0.827459\nvt 0.492409 -0.828071\nvt 0.496681 -0.828071\nvt 0.529214 -0.857093\nvt 0.528238 -0.857351\nvt 0.528022 -0.857740\nvt 0.507162 -0.832919\nvt 0.507162 -0.837191\nvt 0.512566 -0.837191\nvt 0.512566 -0.832919\nvt 0.522617 -0.857631\nvt 0.522851 -0.858517\nvt 0.481836 -0.880695\nvt 0.486108 -0.880695\nvt 0.526996 -0.850994\nvt 0.527195 -0.850099\nvt 0.515968 -0.837191\nvt 0.515968 -0.832919\nvt 0.519196 -0.858528\nvt 0.519432 -0.859421\nvt 0.481836 -0.884219\nvt 0.486108 -0.884219\nvt 0.530448 -0.851763\nvt 0.530649 -0.850862\nvt 0.486661 -0.875646\nvt 0.486970 -0.875339\nvt 0.486970 -0.874334\nvt 0.486661 -0.880695\nvt 0.486661 -0.884219\nvt 0.492101 -0.827151\nvt 0.491856 -0.827151\nvt 0.491856 -0.828071\nvt 0.539309 -0.864662\nvt 0.535882 -0.864662\nvt 0.535882 -0.865215\nvt 0.539309 -0.865215\nvt 0.531274 -0.864662\nvt 0.531274 -0.865215\nvt 0.541551 -0.849457\nvt 0.546638 -0.849457\nvt 0.546638 -0.848595\nvt 0.541860 -0.848595\nvt 0.541551 -0.848904\nvt 0.541507 -0.886935\nvt 0.541507 -0.888248\nvt 0.547503 -0.888248\nvt 0.547503 -0.886935\nvt 0.560503 -0.857342\nvt 0.560503 -0.857896\nvt 0.560811 -0.858204\nvt 0.565590 -0.857342\nvt 0.565590 -0.858204\nvt 0.519117 -0.827218\nvt 0.523725 -0.827218\nvt 0.523725 -0.826664\nvt 0.519117 -0.826664\nvt 0.527152 -0.827218\nvt 0.527152 -0.826664\nvt 0.497235 -0.828071\nvt 0.497235 -0.827151\nvt 0.496990 -0.827151\nvt 0.481282 -0.880695\nvt 0.481282 -0.884219\nvt 0.481282 -0.875646\nvt 0.480974 -0.874334\nvt 0.480974 -0.875339\nvt 0.527086 -0.849457\nvt 0.530545 -0.845167\nvt 0.529995 -0.844724\nvt 0.526914 -0.848772\nvt 0.541507 -0.888951\nvt 0.542369 -0.888951\nvt 0.528062 -0.858865\nvt 0.527889 -0.859476\nvt 0.528979 -0.864129\nvt 0.522899 -0.858909\nvt 0.519533 -0.859804\nvt 0.492101 -0.826755\nvt 0.491856 -0.826755\nvt 0.519357 -0.845127\nvt 0.522111 -0.847347\nvt 0.522474 -0.846742\nvt 0.519800 -0.844578\nvt 0.552216 -0.863706\nvt 0.548920 -0.859290\nvt 0.548723 -0.859968\nvt 0.551651 -0.864129\nvt 0.543870 -0.861213\nvt 0.544210 -0.861832\nvt 0.541035 -0.863329\nvt 0.541457 -0.863894\nvt 0.497235 -0.826755\nvt 0.496990 -0.826755\nvt 0.526964 -0.851388\nvt 0.530362 -0.852150\nvt 0.521802 -0.851546\nvt 0.521092 -0.856842\nvt 0.522000 -0.852150\nvt 0.546641 -0.888951\nvt 0.547503 -0.888951\nvt 0.516349 -0.832919\nvt 0.516265 -0.832610\nvt 0.516265 -0.837499\nvt 0.516349 -0.837191\nvt 0.512421 -0.828391\nvt 0.512030 -0.828605\nvt 0.512416 -0.828828\nvt 0.564242 -0.891421\nvt 0.564233 -0.891858\nvt 0.564615 -0.891647\nvt 0.511157 -0.828391\nvt 0.510932 -0.828766\nvt 0.511369 -0.828773\nvt 0.553929 -0.865679\nvt 0.554142 -0.866060\nvt 0.554374 -0.865680\nvt 0.541304 -0.848595\nvt 0.553139 -0.850309\nvt 0.553525 -0.850513\nvt 0.553509 -0.850077\nvt 0.547587 -0.903027\nvt 0.547588 -0.903464\nvt 0.547965 -0.903245\nvt 0.560256 -0.858204\nvt 0.496681 -0.827124\nvt 0.492409 -0.827124\nvt 0.486108 -0.884553\nvt 0.481836 -0.884553\nvt 0.542539 -0.885235\nvt 0.542630 -0.885671\nvt 0.548033 -0.885635\nvt 0.547944 -0.885203\nvt 0.522537 -0.857327\nvt 0.519117 -0.858230\nvt 0.563489 -0.891405\nvt 0.563479 -0.891842\nvt 0.486661 -0.884553\nvt 0.510920 -0.829519\nvt 0.511356 -0.829527\nvt 0.530716 -0.850561\nvt 0.527263 -0.849792\nvt 0.488683 -0.885005\nvt 0.488611 -0.885440\nvt 0.494012 -0.885263\nvt 0.494086 -0.884824\nvt 0.481282 -0.884553\nvt 0.527818 -0.859176\nvt 0.522936 -0.859218\nvt 0.556330 -0.850406\nvt 0.556350 -0.849968\nvt 0.491856 -0.826421\nvt 0.492409 -0.826421\nvt 0.519133 -0.859499\nvt 0.519234 -0.859884\nvt 0.519117 -0.844933\nvt 0.519367 -0.844624\nvt 0.496681 -0.826421\nvt 0.497235 -0.826421\nvt 0.544744 -0.903030\nvt 0.544780 -0.903466\nvt 0.526939 -0.851698\nvt 0.522058 -0.851847\nvt 0.540788 -0.863513\nvt 0.541025 -0.863832\nvt 0.530750 -0.851830\nvt 0.530663 -0.852218\nvt 0.494835 -0.838358\nvt 0.494835 -0.842630\nvt 0.500325 -0.842630\nvt 0.500325 -0.838358\nvt 0.559349 -0.901620\nvt 0.555077 -0.901620\nvt 0.555077 -0.902933\nvt 0.559349 -0.902933\nvt 0.492714 -0.844486\nvt 0.493710 -0.849906\nvt 0.495006 -0.849668\nvt 0.494010 -0.844248\nvt 0.525974 -0.886977\nvt 0.525974 -0.891248\nvt 0.527286 -0.891248\nvt 0.527286 -0.886977\nvt 0.493053 -0.837021\nvt 0.491856 -0.842400\nvt 0.493142 -0.842686\nvt 0.494340 -0.837307\nvt 0.494537 -0.836418\nvt 0.494306 -0.836037\nvt 0.493321 -0.835818\nvt 0.557770 -0.866717\nvt 0.553498 -0.866717\nvt 0.553498 -0.867329\nvt 0.557770 -0.867329\nvt 0.493932 -0.851118\nvt 0.494925 -0.850935\nvt 0.495170 -0.850564\nvt 0.519117 -0.827861\nvt 0.519117 -0.832133\nvt 0.524521 -0.832133\nvt 0.524521 -0.827861\nvt 0.500551 -0.851086\nvt 0.500385 -0.850184\nvt 0.532335 -0.891248\nvt 0.532335 -0.886977\nvt 0.499734 -0.836992\nvt 0.499934 -0.836097\nvt 0.527923 -0.832133\nvt 0.527923 -0.827861\nvt 0.504031 -0.850453\nvt 0.503864 -0.849545\nvt 0.535859 -0.891248\nvt 0.535859 -0.886977\nvt 0.503187 -0.837761\nvt 0.503388 -0.836860\nvt 0.527286 -0.886423\nvt 0.526979 -0.886114\nvt 0.525974 -0.886114\nvt 0.532335 -0.886423\nvt 0.535859 -0.886423\nvt 0.553190 -0.866409\nvt 0.552945 -0.866409\nvt 0.552945 -0.867329\nvt 0.566022 -0.879235\nvt 0.562595 -0.879235\nvt 0.562595 -0.879789\nvt 0.566022 -0.879789\nvt 0.557987 -0.879235\nvt 0.557987 -0.879789\nvt 0.507409 -0.827842\nvt 0.512496 -0.827842\nvt 0.512496 -0.826980\nvt 0.507717 -0.826980\nvt 0.507409 -0.827288\nvt 0.554214 -0.901620\nvt 0.554214 -0.902933\nvt 0.560211 -0.902933\nvt 0.560211 -0.901620\nvt 0.560709 -0.906192\nvt 0.560709 -0.906745\nvt 0.561018 -0.907054\nvt 0.565796 -0.906192\nvt 0.565796 -0.907054\nvt 0.547725 -0.844243\nvt 0.552333 -0.844243\nvt 0.552333 -0.843689\nvt 0.547725 -0.843689\nvt 0.555760 -0.844243\nvt 0.555760 -0.843689\nvt 0.558324 -0.867329\nvt 0.558324 -0.866409\nvt 0.558079 -0.866409\nvt 0.532335 -0.891802\nvt 0.535859 -0.891802\nvt 0.527286 -0.891802\nvt 0.525974 -0.892111\nvt 0.526979 -0.892111\nvt 0.539846 -0.878461\nvt 0.543304 -0.874171\nvt 0.542755 -0.873728\nvt 0.539674 -0.877777\nvt 0.554214 -0.903637\nvt 0.555077 -0.903637\nvt 0.495216 -0.849439\nvt 0.495436 -0.848843\nvt 0.494705 -0.844121\nvt 0.500368 -0.849790\nvt 0.503792 -0.849155\nvt 0.553190 -0.866013\nvt 0.552945 -0.866013\nvt 0.532117 -0.874131\nvt 0.534871 -0.876351\nvt 0.535234 -0.875745\nvt 0.532560 -0.873582\nvt 0.542513 -0.856419\nvt 0.539217 -0.852003\nvt 0.539020 -0.852681\nvt 0.541947 -0.856842\nvt 0.534167 -0.853926\nvt 0.534507 -0.854545\nvt 0.531332 -0.856042\nvt 0.531754 -0.856607\nvt 0.558324 -0.866013\nvt 0.558079 -0.866013\nvt 0.499703 -0.837386\nvt 0.503101 -0.838148\nvt 0.494541 -0.837543\nvt 0.493831 -0.842839\nvt 0.494739 -0.838148\nvt 0.559349 -0.903637\nvt 0.560211 -0.903637\nvt 0.528304 -0.827861\nvt 0.528220 -0.827552\nvt 0.528220 -0.832442\nvt 0.528304 -0.832133\nvt 0.553055 -0.850359\nvt 0.552842 -0.849968\nvt 0.552619 -0.850354\nvt 0.532415 -0.850828\nvt 0.532035 -0.851043\nvt 0.532412 -0.851264\nvt 0.544224 -0.903404\nvt 0.544660 -0.903406\nvt 0.544444 -0.903027\nvt 0.492840 -0.826421\nvt 0.493053 -0.826802\nvt 0.493285 -0.826422\nvt 0.507162 -0.826980\nvt 0.493369 -0.826762\nvt 0.493754 -0.826966\nvt 0.493739 -0.826530\nvt 0.546152 -0.888342\nvt 0.546153 -0.888778\nvt 0.546530 -0.888560\nvt 0.560462 -0.907054\nvt 0.557770 -0.866382\nvt 0.553498 -0.866382\nvt 0.536193 -0.886977\nvt 0.536193 -0.891248\nvt 0.486968 -0.850756\nvt 0.487059 -0.851192\nvt 0.492463 -0.851156\nvt 0.492374 -0.850724\nvt 0.500607 -0.851396\nvt 0.504087 -0.850757\nvt 0.504335 -0.850397\nvt 0.504168 -0.849489\nvt 0.536193 -0.886423\nvt 0.503488 -0.837828\nvt 0.503689 -0.836927\nvt 0.503455 -0.836559\nvt 0.500002 -0.835790\nvt 0.496113 -0.891517\nvt 0.496548 -0.891589\nvt 0.496372 -0.886188\nvt 0.495933 -0.886114\nvt 0.536193 -0.891802\nvt 0.495483 -0.849148\nvt 0.500354 -0.849479\nvt 0.496560 -0.826859\nvt 0.496579 -0.826421\nvt 0.552945 -0.865679\nvt 0.553498 -0.865679\nvt 0.504096 -0.849099\nvt 0.531877 -0.873937\nvt 0.532126 -0.873628\nvt 0.557770 -0.865679\nvt 0.558324 -0.865679\nvt 0.543309 -0.888345\nvt 0.543345 -0.888781\nvt 0.499678 -0.837696\nvt 0.494797 -0.837844\nvt 0.531084 -0.856226\nvt 0.531322 -0.856545\nvt 0.503402 -0.838216\nvt 0.509971 -0.856853\nvt 0.509971 -0.861125\nvt 0.515461 -0.861125\nvt 0.515461 -0.856853\nvt 0.548076 -0.901620\nvt 0.543804 -0.901620\nvt 0.543804 -0.902933\nvt 0.548076 -0.902933\nvt 0.507162 -0.857219\nvt 0.508157 -0.862639\nvt 0.509454 -0.862401\nvt 0.508458 -0.856981\nvt 0.485629 -0.886977\nvt 0.485629 -0.891248\nvt 0.486942 -0.891248\nvt 0.486942 -0.886977\nvt 0.520304 -0.866683\nvt 0.519106 -0.872062\nvt 0.520392 -0.872349\nvt 0.521590 -0.866970\nvt 0.521788 -0.866081\nvt 0.521556 -0.865700\nvt 0.520571 -0.865481\nvt 0.556452 -0.851006\nvt 0.552180 -0.851006\nvt 0.552180 -0.851618\nvt 0.556452 -0.851618\nvt 0.508380 -0.863851\nvt 0.509372 -0.863668\nvt 0.509618 -0.863297\nvt 0.551626 -0.852261\nvt 0.551626 -0.856533\nvt 0.557030 -0.856533\nvt 0.557030 -0.852261\nvt 0.514998 -0.863819\nvt 0.514833 -0.862917\nvt 0.491991 -0.891248\nvt 0.491991 -0.886977\nvt 0.526985 -0.866655\nvt 0.527184 -0.865760\nvt 0.560432 -0.856533\nvt 0.560432 -0.852261\nvt 0.518478 -0.863186\nvt 0.518312 -0.862278\nvt 0.495515 -0.891248\nvt 0.495515 -0.886977\nvt 0.530437 -0.867423\nvt 0.530638 -0.866523\nvt 0.486942 -0.886423\nvt 0.486635 -0.886114\nvt 0.485629 -0.886114\nvt 0.491991 -0.886423\nvt 0.495515 -0.886423\nvt 0.551871 -0.850698\nvt 0.551626 -0.850698\nvt 0.551626 -0.851618\nvt 0.527142 -0.864564\nvt 0.523714 -0.864564\nvt 0.523714 -0.865118\nvt 0.527142 -0.865118\nvt 0.519106 -0.864564\nvt 0.519106 -0.865118\nvt 0.481883 -0.885499\nvt 0.486970 -0.885499\nvt 0.486970 -0.884637\nvt 0.482191 -0.884637\nvt 0.481883 -0.884946\nvt 0.542942 -0.901620\nvt 0.542942 -0.902933\nvt 0.548938 -0.902933\nvt 0.548938 -0.901620\nvt 0.554091 -0.838090\nvt 0.554091 -0.838644\nvt 0.554400 -0.838953\nvt 0.559178 -0.838090\nvt 0.559178 -0.838953\nvt 0.542848 -0.850773\nvt 0.547456 -0.850773\nvt 0.547456 -0.850220\nvt 0.542848 -0.850220\nvt 0.550883 -0.850773\nvt 0.550883 -0.850220\nvt 0.557005 -0.851618\nvt 0.557005 -0.850698\nvt 0.556760 -0.850698\nvt 0.491991 -0.891802\nvt 0.495515 -0.891802\nvt 0.486942 -0.891802\nvt 0.485629 -0.892111\nvt 0.486635 -0.892111\nvt 0.551368 -0.878461\nvt 0.554827 -0.874171\nvt 0.554277 -0.873728\nvt 0.551196 -0.877777\nvt 0.542942 -0.903637\nvt 0.543804 -0.903637\nvt 0.509664 -0.862172\nvt 0.509884 -0.861576\nvt 0.509152 -0.856853\nvt 0.514816 -0.862523\nvt 0.518240 -0.861888\nvt 0.551871 -0.850302\nvt 0.551626 -0.850302\nvt 0.543639 -0.874131\nvt 0.546393 -0.876351\nvt 0.546756 -0.875745\nvt 0.544082 -0.873582\nvt 0.518590 -0.848949\nvt 0.515294 -0.844533\nvt 0.515097 -0.845211\nvt 0.518025 -0.849372\nvt 0.510244 -0.846456\nvt 0.510584 -0.847075\nvt 0.507409 -0.848572\nvt 0.507831 -0.849137\nvt 0.557005 -0.850302\nvt 0.556760 -0.850302\nvt 0.526953 -0.867048\nvt 0.530351 -0.867811\nvt 0.521791 -0.867206\nvt 0.521081 -0.872502\nvt 0.521989 -0.867810\nvt 0.548076 -0.903637\nvt 0.548938 -0.903637\nvt 0.560814 -0.852261\nvt 0.560729 -0.851952\nvt 0.560729 -0.856842\nvt 0.560814 -0.856533\nvt 0.524355 -0.834286\nvt 0.524142 -0.833896\nvt 0.523919 -0.834281\nvt 0.542789 -0.888342\nvt 0.543004 -0.888722\nvt 0.543225 -0.888345\nvt 0.489371 -0.884508\nvt 0.489808 -0.884510\nvt 0.489591 -0.884131\nvt 0.532415 -0.850299\nvt 0.532034 -0.850512\nvt 0.532414 -0.850744\nvt 0.481636 -0.884637\nvt 0.542301 -0.857647\nvt 0.542686 -0.857851\nvt 0.542670 -0.857415\nvt 0.492735 -0.884131\nvt 0.492736 -0.884568\nvt 0.493113 -0.884349\nvt 0.553844 -0.838953\nvt 0.556452 -0.850671\nvt 0.552180 -0.850671\nvt 0.495849 -0.886977\nvt 0.495849 -0.891248\nvt 0.487054 -0.882000\nvt 0.487144 -0.882436\nvt 0.492548 -0.882401\nvt 0.492459 -0.881969\nvt 0.515055 -0.864129\nvt 0.518534 -0.863490\nvt 0.518782 -0.863130\nvt 0.518616 -0.862222\nvt 0.495849 -0.886423\nvt 0.530739 -0.867490\nvt 0.530939 -0.866590\nvt 0.530705 -0.866221\nvt 0.527252 -0.865453\nvt 0.496113 -0.912156\nvt 0.496548 -0.912228\nvt 0.496372 -0.906827\nvt 0.495933 -0.906754\nvt 0.495849 -0.891802\nvt 0.509931 -0.861881\nvt 0.514802 -0.862212\nvt 0.545492 -0.857743\nvt 0.545511 -0.857306\nvt 0.551626 -0.849968\nvt 0.552180 -0.849968\nvt 0.518543 -0.861831\nvt 0.563104 -0.911183\nvt 0.563101 -0.910747\nvt 0.562395 -0.910753\nvt 0.562707 -0.911187\nvt 0.556452 -0.849968\nvt 0.557005 -0.849968\nvt 0.489891 -0.884134\nvt 0.489928 -0.884570\nvt 0.526928 -0.867359\nvt 0.522047 -0.867507\nvt 0.507162 -0.848756\nvt 0.507399 -0.849075\nvt 0.530652 -0.867878\nvt 0.502231 -0.855483\nvt 0.503692 -0.855903\nvt 0.504052 -0.855340\nvt 0.503353 -0.854919\nvt 0.502267 -0.854648\nvt 0.503125 -0.854497\nvt 0.501799 -0.854671\nvt 0.501494 -0.854987\nvt 0.501057 -0.855948\nvt 0.501003 -0.855451\nvt 0.501051 -0.856931\nvt 0.502209 -0.856931\nvt 0.503841 -0.856931\nvt 0.530134 -0.909802\nvt 0.530119 -0.910174\nvt 0.530441 -0.910262\nvt 0.530651 -0.910060\nvt 0.530959 -0.909742\nvt 0.531001 -0.909993\nvt 0.530978 -0.909440\nvt 0.530150 -0.909405\nvt 0.529349 -0.909728\nvt 0.529357 -0.909443\nvt 0.529292 -0.909949\nvt 0.529610 -0.910044\nvt 0.529806 -0.910254\nvt 0.542735 -0.841260\nvt 0.541838 -0.841328\nvt 0.541758 -0.842047\nvt 0.542794 -0.841954\nvt 0.543435 -0.841150\nvt 0.543491 -0.841866\nvt 0.543474 -0.840500\nvt 0.542770 -0.840628\nvt 0.541855 -0.840718\nvt 0.497098 -0.833713\nvt 0.496302 -0.833715\nvt 0.496307 -0.834355\nvt 0.497102 -0.834351\nvt 0.497880 -0.833750\nvt 0.497884 -0.834416\nvt 0.497880 -0.833013\nvt 0.497098 -0.833013\nvt 0.496302 -0.833013\nvt 0.559738 -0.883588\nvt 0.560087 -0.884330\nvt 0.561007 -0.884200\nvt 0.560234 -0.883509\nvt 0.559341 -0.882904\nvt 0.559814 -0.882861\nvt 0.558863 -0.882920\nvt 0.559238 -0.883645\nvt 0.559552 -0.884399\nvt 0.545311 -0.840982\nvt 0.544555 -0.840990\nvt 0.544596 -0.841686\nvt 0.545371 -0.841580\nvt 0.546037 -0.841023\nvt 0.546109 -0.841489\nvt 0.546004 -0.840520\nvt 0.545244 -0.840472\nvt 0.544554 -0.840275\nvt 0.543985 -0.841052\nvt 0.544031 -0.841779\nvt 0.544034 -0.840390\nvt 0.538824 -0.841241\nvt 0.539589 -0.841244\nvt 0.539523 -0.840655\nvt 0.538787 -0.840586\nvt 0.515773 -0.859194\nvt 0.516534 -0.859304\nvt 0.516571 -0.858644\nvt 0.515782 -0.858455\nvt 0.515720 -0.859645\nvt 0.516280 -0.859855\nvt 0.539190 -0.841830\nvt 0.539754 -0.841665\nvt 0.500237 -0.833681\nvt 0.499405 -0.833808\nvt 0.499417 -0.834515\nvt 0.500230 -0.834285\nvt 0.500921 -0.833520\nvt 0.500896 -0.833991\nvt 0.500923 -0.833013\nvt 0.500239 -0.833013\nvt 0.499405 -0.833013\nvt 0.498634 -0.833806\nvt 0.498645 -0.834514\nvt 0.498634 -0.833013\nvt 0.495502 -0.833779\nvt 0.495502 -0.833013\nvt 0.494902 -0.833996\nvt 0.494902 -0.833013\nvt 0.495059 -0.834493\nvt 0.495506 -0.834466\nvt 0.529017 -0.870030\nvt 0.528510 -0.870042\nvt 0.528597 -0.870157\nvt 0.528987 -0.870193\nvt 0.529447 -0.870031\nvt 0.529314 -0.870157\nvt 0.532780 -0.849889\nvt 0.532313 -0.849958\nvt 0.532449 -0.850151\nvt 0.532781 -0.850138\nvt 0.533263 -0.849968\nvt 0.533131 -0.850148\nvt 0.558953 -0.882263\nvt 0.559519 -0.882278\nvt 0.558733 -0.881785\nvt 0.559379 -0.881857\nvt 0.557987 -0.881461\nvt 0.558405 -0.882205\nvt 0.560330 -0.885143\nvt 0.559828 -0.885199\nvt 0.560492 -0.885746\nvt 0.560016 -0.885634\nvt 0.561317 -0.885695\nvt 0.561195 -0.885062\nvt 0.532044 -0.879308\nvt 0.532471 -0.879423\nvt 0.532846 -0.879133\nvt 0.532529 -0.878918\nvt 0.540527 -0.839204\nvt 0.540549 -0.839501\nvt 0.541178 -0.839566\nvt 0.541135 -0.839294\nvt 0.510986 -0.830588\nvt 0.511062 -0.830879\nvt 0.511717 -0.830788\nvt 0.511602 -0.830367\nvt 0.511127 -0.830183\nvt 0.511593 -0.830055\nvt 0.531790 -0.850993\nvt 0.531831 -0.850307\nvt 0.531309 -0.850501\nvt 0.531084 -0.851156\nvt 0.531656 -0.851606\nvt 0.531181 -0.851603\nvt 0.559323 -0.885229\nvt 0.559030 -0.884438\nvt 0.495517 -0.834997\nvt 0.496324 -0.834871\nvt 0.516407 -0.861056\nvt 0.516642 -0.860418\nvt 0.515957 -0.860125\nvt 0.515941 -0.860908\nvt 0.560096 -0.882136\nvt 0.559986 -0.881670\nvt 0.560339 -0.882756\nvt 0.560560 -0.881959\nvt 0.560777 -0.882636\nvt 0.517783 -0.861327\nvt 0.518051 -0.860758\nvt 0.517315 -0.860642\nvt 0.517048 -0.861230\nvt 0.560757 -0.883405\nvt 0.561625 -0.883872\nvt 0.542991 -0.840120\nvt 0.542020 -0.840236\nvt 0.538801 -0.840141\nvt 0.539441 -0.840268\nvt 0.564295 -0.884847\nvt 0.564897 -0.884768\nvt 0.564619 -0.884092\nvt 0.564097 -0.884339\nvt 0.563830 -0.885371\nvt 0.564288 -0.885491\nvt 0.516555 -0.858188\nvt 0.515674 -0.857901\nvt 0.497115 -0.834865\nvt 0.558705 -0.883680\nvt 0.558328 -0.882943\nvt 0.533410 -0.850024\nvt 0.533354 -0.850717\nvt 0.534176 -0.850657\nvt 0.534234 -0.849950\nvt 0.535034 -0.850586\nvt 0.535055 -0.849889\nvt 0.534874 -0.851200\nvt 0.534021 -0.851285\nvt 0.535737 -0.851162\nvt 0.535843 -0.850440\nvt 0.498680 -0.835053\nvt 0.499454 -0.835046\nvt 0.500214 -0.834763\nvt 0.536420 -0.850756\nvt 0.536519 -0.850157\nvt 0.522235 -0.833141\nvt 0.521860 -0.833622\nvt 0.522579 -0.833784\nvt 0.522933 -0.833320\nvt 0.500830 -0.834389\nvt 0.505258 -0.855986\nvt 0.505145 -0.855228\nvt 0.505258 -0.856630\nvt 0.506157 -0.856426\nvt 0.506472 -0.855945\nvt 0.506380 -0.855211\nvt 0.548149 -0.874463\nvt 0.548059 -0.875160\nvt 0.549498 -0.875321\nvt 0.548960 -0.874499\nvt 0.548167 -0.873841\nvt 0.549512 -0.873681\nvt 0.547235 -0.873990\nvt 0.546908 -0.874434\nvt 0.547149 -0.874972\nvt 0.540691 -0.841298\nvt 0.540586 -0.841826\nvt 0.540659 -0.840713\nvt 0.540676 -0.840293\nvt 0.563032 -0.884240\nvt 0.563220 -0.883947\nvt 0.562789 -0.884954\nvt 0.562713 -0.885623\nvt 0.504805 -0.854674\nvt 0.504549 -0.854407\nvt 0.506106 -0.854683\nvt 0.563026 -0.885779\nvt 0.533926 -0.907712\nvt 0.533385 -0.907901\nvt 0.533666 -0.908216\nvt 0.534253 -0.908100\nvt 0.534362 -0.907522\nvt 0.534918 -0.908079\nvt 0.533551 -0.907151\nvt 0.533223 -0.907397\nvt 0.532824 -0.907654\nvt 0.521476 -0.834145\nvt 0.521983 -0.834323\nvt 0.535812 -0.851668\nvt 0.536305 -0.851387\nvt 0.558071 -0.880757\nvt 0.558346 -0.881251\nvt 0.559040 -0.881269\nvt 0.558838 -0.880824\nvt 0.558102 -0.880268\nvt 0.558867 -0.880388\nvt 0.558840 -0.881588\nvt 0.519144 -0.843838\nvt 0.519761 -0.843842\nvt 0.519770 -0.843530\nvt 0.519117 -0.843610\nvt 0.515798 -0.876817\nvt 0.516316 -0.877097\nvt 0.516760 -0.877002\nvt 0.516401 -0.876696\nvt 0.559404 -0.881589\nvt 0.515731 -0.860886\nvt 0.515544 -0.861501\nvt 0.515720 -0.861532\nvt 0.515644 -0.860280\nvt 0.516790 -0.877548\nvt 0.517054 -0.877978\nvt 0.517298 -0.877835\nvt 0.517100 -0.877443\nvt 0.545179 -0.840132\nvt 0.544742 -0.839974\nvt 0.545729 -0.840090\nvt 0.545318 -0.839839\nvt 0.544879 -0.839922\nvt 0.537381 -0.879692\nvt 0.537536 -0.879178\nvt 0.537250 -0.879261\nvt 0.537144 -0.879725\nvt 0.533022 -0.908176\nvt 0.532745 -0.908380\nvt 0.532910 -0.908836\nvt 0.533253 -0.908489\nvt 0.532565 -0.907919\nvt 0.532376 -0.908106\nvt 0.531998 -0.907265\nvt 0.531787 -0.907537\nvt 0.560238 -0.880579\nvt 0.560423 -0.880329\nvt 0.559197 -0.880096\nvt 0.532173 -0.907005\nvt 0.530533 -0.906995\nvt 0.530471 -0.907249\nvt 0.530400 -0.907510\nvt 0.560229 -0.881003\nvt 0.560350 -0.881434\nvt 0.561949 -0.881542\nvt 0.561886 -0.881105\nvt 0.561881 -0.880676\nvt 0.560557 -0.881707\nvt 0.517740 -0.876976\nvt 0.517564 -0.876692\nvt 0.519104 -0.877031\nvt 0.519056 -0.876779\nvt 0.562048 -0.881771\nvt 0.517906 -0.877379\nvt 0.518002 -0.877737\nvt 0.519137 -0.877728\nvt 0.519131 -0.877394\nvt 0.536493 -0.879512\nvt 0.536420 -0.879939\nvt 0.536637 -0.879094\nvt 0.537492 -0.878834\nvt 0.535388 -0.879278\nvt 0.535315 -0.879705\nvt 0.535262 -0.880113\nvt 0.544680 -0.839533\nvt 0.544457 -0.839727\nvt 0.545617 -0.839620\nvt 0.531653 -0.907785\nvt 0.530361 -0.907745\nvt 0.536761 -0.878857\nvt 0.535439 -0.879043\nvt 0.528862 -0.907283\nvt 0.528934 -0.907038\nvt 0.527540 -0.907272\nvt 0.527649 -0.907032\nvt 0.527283 -0.907506\nvt 0.528790 -0.907535\nvt 0.563454 -0.880943\nvt 0.563515 -0.881390\nvt 0.564693 -0.880706\nvt 0.564767 -0.881163\nvt 0.564711 -0.880279\nvt 0.563460 -0.880514\nvt 0.520647 -0.876935\nvt 0.520701 -0.877175\nvt 0.521966 -0.877028\nvt 0.522201 -0.877323\nvt 0.563625 -0.881608\nvt 0.564914 -0.881387\nvt 0.520698 -0.877525\nvt 0.520673 -0.877851\nvt 0.521998 -0.877713\nvt 0.521643 -0.877905\nvt 0.533768 -0.879615\nvt 0.533818 -0.879175\nvt 0.532772 -0.879776\nvt 0.533721 -0.880023\nvt 0.528765 -0.907766\nvt 0.527455 -0.907759\nvt 0.533844 -0.878946\nvt 0.546512 -0.841102\nvt 0.546519 -0.840763\nvt 0.546566 -0.841444\nvt 0.533163 -0.909474\nvt 0.533163 -0.909824\nvt 0.533336 -0.909824\nvt 0.533336 -0.909571\nvt 0.533244 -0.909128\nvt 0.533414 -0.909306\nvt 0.523329 -0.833541\nvt 0.523614 -0.833283\nvt 0.523293 -0.833014\nvt 0.534830 -0.908522\nvt 0.535194 -0.908730\nvt 0.535370 -0.908448\nvt 0.534687 -0.908770\nvt 0.534990 -0.908929\nvt 0.535423 -0.909040\nvt 0.535200 -0.909173\nvt 0.534347 -0.908452\nvt 0.533861 -0.908536\nvt 0.533979 -0.908792\nvt 0.534337 -0.908717\nvt 0.533485 -0.908788\nvt 0.533650 -0.909017\nvt 0.548564 -0.830383\nvt 0.548182 -0.830361\nvt 0.548179 -0.830694\nvt 0.548559 -0.830744\nvt 0.549044 -0.830391\nvt 0.549038 -0.830763\nvt 0.549045 -0.830036\nvt 0.548565 -0.830036\nvt 0.548183 -0.830036\nvt 0.529477 -0.868554\nvt 0.529415 -0.868167\nvt 0.528889 -0.868224\nvt 0.528897 -0.868614\nvt 0.529522 -0.869016\nvt 0.528927 -0.869077\nvt 0.548550 -0.831133\nvt 0.549026 -0.831169\nvt 0.530003 -0.868461\nvt 0.529889 -0.868079\nvt 0.528427 -0.868617\nvt 0.528450 -0.868227\nvt 0.528064 -0.868163\nvt 0.528028 -0.868555\nvt 0.528452 -0.869080\nvt 0.528060 -0.869026\nvt 0.563354 -0.910608\nvt 0.563374 -0.911010\nvt 0.563888 -0.911098\nvt 0.563891 -0.910688\nvt 0.563344 -0.910110\nvt 0.563880 -0.910168\nvt 0.562814 -0.910087\nvt 0.562826 -0.910563\nvt 0.527693 -0.868021\nvt 0.527659 -0.868420\nvt 0.530931 -0.910440\nvt 0.531264 -0.910220\nvt 0.530520 -0.910570\nvt 0.530601 -0.910972\nvt 0.531066 -0.910821\nvt 0.531451 -0.910556\nvt 0.530124 -0.910612\nvt 0.529737 -0.910550\nvt 0.529694 -0.910937\nvt 0.530144 -0.911021\nvt 0.529349 -0.910369\nvt 0.529056 -0.910116\nvt 0.529614 -0.870193\nvt 0.530007 -0.870124\nvt 0.530056 -0.869766\nvt 0.529586 -0.869854\nvt 0.527659 -0.869731\nvt 0.527669 -0.870171\nvt 0.528146 -0.870193\nvt 0.528156 -0.869670\nvt 0.528953 -0.909840\nvt 0.528953 -0.909554\nvt 0.550365 -0.830342\nvt 0.550366 -0.830036\nvt 0.549946 -0.830036\nvt 0.549945 -0.830388\nvt 0.550363 -0.830637\nvt 0.549942 -0.830740\nvt 0.524001 -0.835242\nvt 0.523743 -0.834959\nvt 0.523606 -0.835179\nvt 0.523778 -0.835400\nvt 0.524120 -0.835587\nvt 0.523838 -0.835642\nvt 0.524368 -0.835538\nvt 0.524189 -0.835087\nvt 0.523850 -0.834735\nvt 0.521732 -0.835179\nvt 0.521518 -0.835527\nvt 0.521746 -0.835553\nvt 0.521906 -0.835263\nvt 0.522050 -0.834881\nvt 0.522155 -0.835018\nvt 0.521940 -0.834707\nvt 0.521545 -0.835060\nvt 0.521269 -0.835472\nvt 0.522410 -0.834732\nvt 0.522450 -0.834894\nvt 0.522825 -0.834706\nvt 0.522806 -0.834889\nvt 0.522841 -0.834490\nvt 0.522369 -0.834530\nvt 0.523310 -0.834782\nvt 0.523237 -0.834996\nvt 0.523368 -0.834547\nvt 0.524093 -0.833441\nvt 0.523979 -0.833335\nvt 0.523760 -0.833490\nvt 0.523909 -0.833578\nvt 0.490387 -0.905981\nvt 0.490420 -0.906107\nvt 0.490685 -0.906150\nvt 0.490639 -0.906028\nvt 0.490151 -0.905974\nvt 0.490152 -0.906100\nvt 0.524271 -0.833351\nvt 0.524200 -0.833222\nvt 0.523717 -0.833808\nvt 0.523548 -0.833729\nvt 0.523375 -0.834016\nvt 0.523554 -0.834077\nvt 0.523818 -0.833810\nvt 0.523631 -0.834104\nvt 0.524028 -0.833560\nvt 0.534924 -0.909059\nvt 0.535120 -0.909289\nvt 0.523440 -0.839711\nvt 0.523492 -0.839536\nvt 0.523133 -0.839462\nvt 0.523118 -0.839640\nvt 0.502090 -0.845647\nvt 0.501989 -0.845670\nvt 0.501989 -0.846000\nvt 0.502088 -0.846003\nvt 0.502067 -0.845351\nvt 0.501969 -0.845387\nvt 0.523275 -0.834314\nvt 0.523456 -0.834330\nvt 0.522726 -0.839647\nvt 0.522753 -0.839481\nvt 0.522437 -0.839573\nvt 0.522385 -0.839717\nvt 0.523184 -0.835049\nvt 0.523499 -0.835252\nvt 0.501964 -0.846380\nvt 0.502058 -0.846433\nvt 0.549504 -0.830398\nvt 0.549500 -0.830771\nvt 0.549505 -0.830036\nvt 0.529557 -0.869456\nvt 0.528983 -0.869516\nvt 0.529066 -0.869909\nvt 0.530079 -0.869362\nvt 0.549491 -0.831166\nvt 0.528515 -0.869520\nvt 0.528127 -0.869471\nvt 0.562480 -0.909246\nvt 0.562395 -0.909660\nvt 0.562838 -0.909631\nvt 0.562899 -0.909216\nvt 0.528629 -0.869912\nvt 0.563352 -0.909638\nvt 0.563867 -0.909681\nvt 0.563377 -0.909212\nvt 0.563848 -0.909244\nvt 0.511062 -0.831180\nvt 0.511510 -0.831238\nvt 0.522828 -0.835567\nvt 0.522821 -0.836073\nvt 0.523116 -0.836072\nvt 0.523361 -0.835480\nvt 0.522536 -0.835583\nvt 0.522544 -0.836087\nvt 0.510968 -0.831404\nvt 0.511408 -0.831472\nvt 0.526876 -0.907118\nvt 0.526804 -0.907244\nvt 0.526948 -0.906876\nvt 0.526562 -0.906754\nvt 0.526544 -0.907000\nvt 0.522769 -0.835363\nvt 0.522432 -0.835387\nvt 0.565364 -0.880584\nvt 0.565370 -0.880159\nvt 0.565427 -0.881045\nvt 0.565786 -0.880984\nvt 0.565741 -0.880521\nvt 0.565729 -0.880098\nvt 0.565539 -0.881275\nvt 0.522696 -0.877133\nvt 0.522639 -0.876927\nvt 0.522982 -0.877041\nvt 0.522980 -0.876835\nvt 0.565845 -0.881219\nvt 0.546568 -0.827601\nvt 0.546581 -0.828105\nvt 0.546902 -0.828156\nvt 0.546883 -0.827652\nvt 0.546587 -0.827104\nvt 0.546906 -0.827154\nvt 0.546399 -0.827193\nvt 0.546314 -0.827536\nvt 0.546394 -0.827920\nvt 0.562395 -0.910336\nvt 0.562637 -0.910405\nvt 0.562687 -0.910085\nvt 0.562450 -0.910000\nvt 0.526217 -0.906848\nvt 0.526217 -0.907095\nvt 0.526037 -0.906970\nvt 0.525974 -0.907189\nvt 0.562501 -0.910610\nvt 0.562686 -0.910587\nvt 0.566098 -0.880462\nvt 0.566080 -0.880040\nvt 0.566137 -0.880926\nvt 0.566331 -0.880802\nvt 0.566369 -0.880441\nvt 0.566289 -0.880134\nvt 0.566178 -0.881162\nvt 0.523282 -0.877161\nvt 0.523298 -0.876955\nvt 0.523453 -0.877299\nvt 0.523525 -0.877182\nvt 0.566429 -0.880966\nvt 0.501243 -0.833422\nvt 0.501246 -0.833013\nvt 0.501222 -0.833797\nvt 0.535500 -0.909415\nvt 0.535270 -0.909482\nvt 0.535500 -0.909824\nvt 0.535270 -0.909824\nvt 0.522808 -0.839858\nvt 0.522789 -0.840388\nvt 0.523336 -0.840400\nvt 0.523354 -0.839867\nvt 0.564364 -0.910779\nvt 0.564347 -0.910253\nvt 0.564326 -0.911187\nvt 0.522407 -0.839876\nvt 0.522391 -0.840362\nvt 0.531427 -0.909910\nvt 0.531471 -0.909555\nvt 0.524817 -0.839991\nvt 0.524834 -0.839638\nvt 0.524385 -0.839462\nvt 0.524359 -0.839911\nvt 0.524807 -0.840370\nvt 0.524344 -0.840398\nvt 0.521468 -0.835824\nvt 0.521510 -0.836095\nvt 0.521764 -0.836045\nvt 0.521721 -0.835808\nvt 0.521195 -0.835826\nvt 0.521241 -0.836147\nvt 0.523631 -0.835462\nvt 0.523673 -0.835674\nvt 0.523039 -0.836326\nvt 0.523287 -0.836331\nvt 0.523361 -0.836187\nvt 0.523085 -0.836190\nvt 0.522835 -0.836325\nvt 0.522844 -0.836197\nvt 0.523871 -0.839877\nvt 0.523854 -0.840406\nvt 0.564312 -0.909762\nvt 0.564242 -0.909317\nvt 0.502231 -0.858379\nvt 0.503353 -0.858943\nvt 0.504052 -0.858522\nvt 0.503692 -0.857959\nvt 0.501057 -0.857914\nvt 0.501494 -0.858875\nvt 0.501003 -0.858411\nvt 0.501799 -0.859191\nvt 0.502267 -0.859215\nvt 0.503125 -0.859365\nvt 0.530158 -0.909010\nvt 0.530689 -0.908827\nvt 0.530489 -0.908683\nvt 0.530164 -0.908713\nvt 0.529647 -0.908845\nvt 0.529854 -0.908691\nvt 0.529321 -0.908998\nvt 0.529367 -0.909160\nvt 0.530978 -0.909141\nvt 0.531033 -0.908950\nvt 0.542852 -0.842648\nvt 0.541954 -0.842717\nvt 0.542993 -0.843281\nvt 0.542074 -0.843329\nvt 0.543703 -0.843230\nvt 0.543555 -0.842580\nvt 0.497098 -0.832313\nvt 0.497102 -0.831675\nvt 0.496307 -0.831671\nvt 0.496302 -0.832311\nvt 0.497880 -0.832276\nvt 0.497884 -0.831610\nvt 0.549544 -0.854645\nvt 0.549048 -0.854566\nvt 0.548276 -0.855259\nvt 0.549196 -0.855387\nvt 0.550044 -0.854700\nvt 0.549731 -0.855455\nvt 0.550417 -0.853974\nvt 0.549940 -0.853959\nvt 0.549466 -0.853917\nvt 0.545412 -0.842181\nvt 0.544671 -0.842377\nvt 0.545430 -0.842697\nvt 0.544789 -0.843086\nvt 0.546168 -0.842480\nvt 0.546116 -0.841968\nvt 0.544106 -0.842500\nvt 0.544267 -0.843161\nvt 0.538980 -0.843100\nvt 0.539052 -0.843756\nvt 0.539763 -0.843512\nvt 0.539730 -0.842922\nvt 0.539246 -0.842508\nvt 0.539827 -0.842543\nvt 0.516895 -0.857306\nvt 0.516736 -0.858007\nvt 0.517310 -0.858170\nvt 0.517590 -0.857635\nvt 0.517200 -0.856853\nvt 0.517944 -0.857175\nvt 0.500237 -0.832345\nvt 0.500230 -0.831741\nvt 0.499417 -0.831511\nvt 0.499405 -0.832218\nvt 0.500921 -0.832506\nvt 0.500896 -0.832035\nvt 0.498634 -0.832220\nvt 0.498645 -0.831511\nvt 0.495502 -0.832247\nvt 0.495506 -0.831560\nvt 0.495059 -0.831533\nvt 0.494902 -0.832030\nvt 0.534654 -0.851541\nvt 0.534618 -0.851379\nvt 0.534230 -0.851431\nvt 0.534148 -0.851549\nvt 0.557021 -0.872158\nvt 0.557012 -0.871909\nvt 0.556514 -0.872001\nvt 0.556652 -0.872178\nvt 0.557336 -0.872164\nvt 0.557464 -0.871967\nvt 0.535084 -0.851523\nvt 0.534946 -0.851402\nvt 0.550326 -0.853318\nvt 0.549760 -0.853334\nvt 0.550875 -0.853259\nvt 0.551291 -0.852514\nvt 0.550545 -0.852840\nvt 0.549900 -0.852912\nvt 0.548954 -0.856201\nvt 0.549456 -0.856256\nvt 0.548090 -0.856120\nvt 0.547969 -0.856755\nvt 0.548794 -0.856804\nvt 0.549269 -0.856691\nvt 0.485620 -0.827130\nvt 0.485135 -0.826740\nvt 0.484818 -0.826956\nvt 0.485193 -0.827245\nvt 0.535853 -0.848515\nvt 0.536208 -0.847965\nvt 0.535715 -0.847987\nvt 0.535457 -0.848401\nvt 0.536185 -0.848698\nvt 0.536393 -0.848068\nvt 0.557643 -0.871825\nvt 0.557567 -0.871200\nvt 0.557272 -0.871179\nvt 0.557304 -0.871821\nvt 0.564961 -0.892097\nvt 0.565673 -0.892232\nvt 0.565423 -0.891586\nvt 0.564893 -0.891413\nvt 0.496324 -0.831155\nvt 0.495517 -0.831029\nvt 0.549962 -0.856285\nvt 0.550253 -0.855494\nvt 0.565119 -0.892704\nvt 0.565593 -0.892682\nvt 0.512433 -0.829100\nvt 0.511944 -0.829083\nvt 0.511696 -0.829825\nvt 0.512439 -0.829781\nvt 0.548941 -0.853814\nvt 0.549183 -0.853193\nvt 0.548718 -0.853017\nvt 0.548503 -0.853694\nvt 0.549292 -0.852727\nvt 0.543299 -0.843794\nvt 0.544013 -0.843755\nvt 0.542321 -0.843817\nvt 0.548525 -0.854463\nvt 0.547658 -0.854932\nvt 0.539142 -0.844204\nvt 0.539746 -0.843904\nvt 0.537802 -0.835821\nvt 0.537741 -0.834879\nvt 0.537310 -0.834744\nvt 0.537275 -0.835551\nvt 0.544387 -0.855833\nvt 0.544997 -0.856555\nvt 0.545455 -0.856435\nvt 0.544989 -0.855912\nvt 0.544664 -0.855158\nvt 0.545186 -0.855403\nvt 0.497115 -0.831161\nvt 0.562563 -0.891854\nvt 0.563388 -0.891882\nvt 0.563304 -0.891192\nvt 0.562478 -0.891150\nvt 0.550577 -0.854734\nvt 0.550952 -0.853996\nvt 0.561703 -0.891817\nvt 0.561655 -0.891122\nvt 0.499454 -0.830980\nvt 0.498680 -0.830973\nvt 0.560889 -0.891703\nvt 0.561024 -0.892420\nvt 0.561888 -0.892424\nvt 0.562743 -0.892476\nvt 0.500214 -0.831263\nvt 0.500830 -0.831638\nvt 0.542933 -0.853359\nvt 0.543139 -0.854051\nvt 0.543589 -0.853678\nvt 0.543399 -0.852966\nvt 0.560203 -0.891447\nvt 0.560325 -0.892042\nvt 0.505258 -0.857876\nvt 0.505145 -0.858634\nvt 0.506472 -0.857917\nvt 0.506380 -0.858651\nvt 0.506157 -0.857436\nvt 0.505258 -0.857232\nvt 0.516938 -0.859018\nvt 0.517109 -0.859631\nvt 0.517946 -0.860151\nvt 0.517600 -0.858952\nvt 0.554392 -0.868363\nvt 0.555621 -0.868194\nvt 0.555243 -0.867716\nvt 0.554300 -0.867677\nvt 0.553588 -0.868450\nvt 0.552945 -0.867663\nvt 0.540817 -0.842801\nvt 0.540628 -0.842330\nvt 0.540884 -0.843388\nvt 0.540971 -0.843814\nvt 0.546062 -0.855010\nvt 0.546251 -0.855303\nvt 0.540971 -0.844175\nvt 0.542655 -0.844243\nvt 0.546496 -0.856016\nvt 0.546573 -0.856684\nvt 0.504805 -0.859188\nvt 0.504549 -0.859455\nvt 0.546260 -0.856842\nvt 0.506106 -0.859179\nvt 0.533926 -0.911936\nvt 0.534253 -0.911548\nvt 0.533666 -0.911432\nvt 0.533385 -0.911747\nvt 0.533223 -0.912250\nvt 0.532824 -0.911994\nvt 0.533551 -0.912496\nvt 0.534362 -0.912126\nvt 0.534918 -0.911569\nvt 0.543907 -0.852562\nvt 0.544105 -0.853061\nvt 0.550439 -0.851879\nvt 0.551206 -0.851810\nvt 0.551174 -0.851322\nvt 0.550408 -0.851443\nvt 0.550237 -0.852324\nvt 0.550932 -0.852305\nvt 0.560465 -0.892668\nvt 0.560969 -0.892929\nvt 0.550438 -0.852643\nvt 0.549874 -0.852645\nvt 0.523525 -0.874915\nvt 0.522927 -0.874772\nvt 0.522557 -0.875064\nvt 0.522996 -0.875176\nvt 0.557172 -0.870930\nvt 0.557127 -0.870621\nvt 0.556514 -0.870696\nvt 0.556514 -0.870925\nvt 0.511739 -0.829033\nvt 0.511946 -0.828421\nvt 0.511770 -0.828391\nvt 0.522201 -0.875493\nvt 0.522506 -0.875609\nvt 0.521988 -0.875877\nvt 0.522226 -0.876029\nvt 0.511452 -0.829574\nvt 0.545423 -0.843040\nvt 0.545024 -0.843332\nvt 0.480414 -0.827092\nvt 0.480128 -0.827010\nvt 0.480283 -0.827523\nvt 0.480521 -0.827556\nvt 0.516235 -0.857794\nvt 0.516493 -0.857537\nvt 0.516043 -0.857418\nvt 0.515692 -0.857735\nvt 0.545969 -0.842953\nvt 0.533022 -0.911472\nvt 0.533253 -0.911159\nvt 0.532910 -0.910812\nvt 0.532745 -0.911267\nvt 0.532565 -0.911729\nvt 0.532376 -0.911542\nvt 0.531998 -0.912383\nvt 0.531787 -0.912111\nvt 0.530471 -0.912399\nvt 0.530400 -0.912138\nvt 0.530533 -0.912652\nvt 0.532173 -0.912643\nvt 0.550078 -0.851151\nvt 0.548853 -0.851386\nvt 0.549038 -0.851636\nvt 0.549048 -0.852060\nvt 0.547391 -0.852166\nvt 0.547396 -0.851737\nvt 0.547329 -0.852602\nvt 0.548928 -0.852491\nvt 0.548721 -0.852765\nvt 0.547230 -0.852831\nvt 0.521765 -0.874724\nvt 0.520271 -0.874756\nvt 0.520213 -0.875005\nvt 0.521579 -0.875002\nvt 0.521397 -0.875398\nvt 0.520172 -0.875367\nvt 0.520155 -0.875701\nvt 0.521288 -0.875753\nvt 0.481172 -0.827342\nvt 0.481244 -0.827769\nvt 0.482349 -0.827532\nvt 0.482403 -0.827941\nvt 0.482276 -0.827106\nvt 0.481026 -0.826924\nvt 0.480172 -0.826665\nvt 0.516451 -0.856853\nvt 0.515819 -0.857263\nvt 0.516644 -0.857034\nvt 0.482224 -0.826871\nvt 0.480902 -0.826687\nvt 0.531653 -0.911862\nvt 0.530361 -0.911903\nvt 0.528862 -0.912364\nvt 0.528934 -0.912610\nvt 0.528790 -0.912112\nvt 0.527283 -0.912142\nvt 0.527540 -0.912376\nvt 0.527649 -0.912616\nvt 0.545823 -0.852006\nvt 0.545763 -0.852453\nvt 0.545816 -0.851577\nvt 0.544565 -0.851345\nvt 0.544583 -0.851771\nvt 0.544510 -0.852229\nvt 0.518675 -0.874853\nvt 0.518612 -0.875090\nvt 0.545653 -0.852671\nvt 0.544364 -0.852452\nvt 0.517354 -0.874896\nvt 0.517107 -0.875182\nvt 0.518601 -0.875440\nvt 0.518614 -0.875767\nvt 0.517296 -0.875579\nvt 0.517644 -0.875785\nvt 0.483897 -0.827440\nvt 0.483845 -0.827000\nvt 0.483944 -0.827848\nvt 0.484892 -0.827599\nvt 0.528765 -0.911882\nvt 0.483819 -0.826771\nvt 0.527455 -0.911889\nvt 0.546570 -0.841796\nvt 0.546635 -0.842144\nvt 0.533336 -0.910077\nvt 0.533163 -0.910174\nvt 0.533244 -0.910520\nvt 0.533414 -0.910342\nvt 0.543376 -0.854437\nvt 0.542848 -0.854422\nvt 0.543129 -0.854732\nvt 0.534990 -0.910719\nvt 0.535194 -0.910918\nvt 0.535423 -0.910608\nvt 0.535200 -0.910474\nvt 0.534687 -0.910878\nvt 0.534830 -0.911126\nvt 0.535370 -0.911199\nvt 0.534347 -0.911196\nvt 0.534337 -0.910931\nvt 0.533979 -0.910856\nvt 0.533861 -0.911112\nvt 0.533485 -0.910860\nvt 0.533650 -0.910631\nvt 0.548564 -0.829689\nvt 0.548559 -0.829328\nvt 0.548179 -0.829378\nvt 0.548182 -0.829711\nvt 0.549044 -0.829681\nvt 0.549038 -0.829310\nvt 0.531272 -0.838832\nvt 0.531849 -0.838913\nvt 0.531871 -0.838524\nvt 0.531348 -0.838447\nvt 0.530748 -0.838720\nvt 0.530876 -0.838342\nvt 0.548550 -0.828939\nvt 0.549026 -0.828903\nvt 0.531209 -0.839292\nvt 0.531801 -0.839375\nvt 0.532318 -0.838934\nvt 0.532718 -0.838887\nvt 0.532698 -0.838494\nvt 0.532309 -0.838544\nvt 0.532275 -0.839396\nvt 0.532669 -0.839357\nvt 0.519963 -0.843215\nvt 0.519724 -0.842728\nvt 0.519334 -0.842855\nvt 0.519574 -0.843319\nvt 0.533093 -0.838766\nvt 0.533074 -0.838366\nvt 0.520166 -0.843706\nvt 0.520623 -0.843572\nvt 0.520441 -0.843074\nvt 0.520223 -0.842580\nvt 0.523308 -0.860688\nvt 0.523520 -0.860233\nvt 0.523155 -0.860253\nvt 0.522928 -0.860554\nvt 0.521286 -0.842770\nvt 0.521613 -0.842619\nvt 0.521473 -0.842242\nvt 0.521114 -0.842331\nvt 0.523201 -0.861160\nvt 0.523681 -0.861215\nvt 0.523731 -0.860735\nvt 0.523760 -0.860396\nvt 0.524110 -0.860711\nvt 0.524049 -0.860250\nvt 0.524120 -0.861187\nvt 0.524509 -0.861050\nvt 0.524449 -0.860602\nvt 0.524344 -0.860295\nvt 0.524747 -0.860394\nvt 0.524476 -0.860066\nvt 0.533223 -0.851201\nvt 0.532889 -0.850859\nvt 0.532554 -0.851144\nvt 0.532839 -0.851556\nvt 0.531073 -0.840465\nvt 0.531114 -0.840127\nvt 0.530647 -0.840021\nvt 0.530683 -0.840381\nvt 0.532499 -0.850625\nvt 0.533153 -0.850563\nvt 0.532823 -0.850458\nvt 0.533263 -0.850329\nvt 0.532743 -0.850299\nvt 0.549945 -0.829684\nvt 0.550365 -0.829730\nvt 0.550363 -0.829435\nvt 0.549942 -0.829332\nvt 0.529662 -0.868746\nvt 0.529670 -0.869268\nvt 0.529977 -0.869267\nvt 0.529966 -0.868740\nvt 0.524139 -0.835951\nvt 0.523873 -0.835888\nvt 0.523797 -0.836157\nvt 0.524006 -0.836310\nvt 0.524372 -0.836024\nvt 0.524190 -0.836478\nvt 0.522060 -0.836860\nvt 0.522189 -0.836718\nvt 0.521933 -0.836509\nvt 0.521730 -0.836619\nvt 0.521931 -0.837041\nvt 0.521520 -0.836763\nvt 0.522430 -0.837220\nvt 0.522466 -0.837017\nvt 0.522512 -0.836852\nvt 0.522856 -0.837021\nvt 0.522832 -0.836855\nvt 0.522893 -0.837223\nvt 0.523346 -0.837083\nvt 0.523250 -0.836888\nvt 0.523164 -0.836727\nvt 0.523672 -0.836637\nvt 0.523523 -0.836465\nvt 0.523813 -0.836833\nvt 0.543306 -0.855204\nvt 0.543436 -0.855015\nvt 0.543341 -0.854870\nvt 0.543196 -0.855095\nvt 0.524446 -0.833257\nvt 0.524417 -0.833106\nvt 0.489884 -0.906097\nvt 0.489916 -0.905973\nvt 0.489641 -0.906130\nvt 0.489689 -0.906011\nvt 0.543658 -0.854815\nvt 0.543921 -0.854641\nvt 0.543852 -0.854465\nvt 0.543572 -0.854649\nvt 0.535120 -0.910359\nvt 0.534924 -0.910589\nvt 0.543423 -0.855134\nvt 0.543664 -0.854915\nvt 0.543950 -0.854717\nvt 0.535475 -0.847822\nvt 0.535805 -0.847813\nvt 0.535824 -0.847635\nvt 0.535457 -0.847639\nvt 0.544169 -0.854533\nvt 0.544146 -0.854353\nvt 0.536176 -0.849990\nvt 0.536478 -0.850012\nvt 0.536519 -0.849914\nvt 0.536200 -0.849889\nvt 0.535871 -0.849988\nvt 0.535867 -0.849889\nvt 0.547197 -0.842110\nvt 0.546975 -0.841851\nvt 0.546887 -0.841941\nvt 0.547094 -0.842226\nvt 0.547473 -0.842315\nvt 0.547365 -0.842449\nvt 0.535567 -0.850009\nvt 0.535505 -0.849916\nvt 0.523670 -0.836130\nvt 0.523454 -0.836436\nvt 0.549504 -0.829674\nvt 0.549500 -0.829301\nvt 0.531158 -0.839730\nvt 0.531729 -0.839812\nvt 0.549491 -0.828906\nvt 0.530639 -0.839616\nvt 0.531631 -0.840202\nvt 0.532196 -0.839833\nvt 0.532586 -0.839799\nvt 0.532068 -0.840221\nvt 0.521051 -0.843411\nvt 0.521158 -0.843842\nvt 0.521526 -0.843635\nvt 0.521428 -0.843227\nvt 0.520889 -0.842923\nvt 0.520691 -0.842446\nvt 0.536662 -0.848124\nvt 0.536722 -0.848614\nvt 0.536947 -0.848099\nvt 0.537024 -0.848586\nvt 0.536911 -0.847638\nvt 0.536609 -0.847666\nvt 0.536064 -0.847635\nvt 0.526876 -0.912530\nvt 0.526804 -0.912404\nvt 0.556514 -0.871539\nvt 0.556743 -0.871716\nvt 0.556911 -0.871520\nvt 0.556704 -0.871375\nvt 0.526544 -0.912648\nvt 0.526562 -0.912894\nvt 0.526948 -0.912771\nvt 0.543912 -0.851650\nvt 0.543905 -0.851225\nvt 0.543535 -0.851588\nvt 0.543546 -0.851165\nvt 0.543491 -0.852052\nvt 0.543850 -0.852112\nvt 0.543739 -0.852342\nvt 0.543432 -0.852286\nvt 0.516684 -0.874770\nvt 0.516348 -0.874665\nvt 0.516338 -0.874871\nvt 0.516620 -0.874974\nvt 0.537177 -0.847961\nvt 0.537260 -0.848447\nvt 0.537356 -0.847826\nvt 0.537376 -0.848217\nvt 0.549380 -0.827946\nvt 0.549119 -0.827968\nvt 0.549151 -0.828337\nvt 0.549322 -0.828454\nvt 0.549699 -0.827944\nvt 0.549646 -0.828453\nvt 0.549353 -0.828636\nvt 0.549694 -0.828636\nvt 0.549099 -0.828485\nvt 0.526217 -0.912553\nvt 0.525974 -0.912459\nvt 0.526037 -0.912678\nvt 0.526217 -0.912800\nvt 0.543178 -0.851531\nvt 0.543195 -0.851108\nvt 0.542907 -0.851509\nvt 0.542986 -0.851202\nvt 0.542946 -0.851871\nvt 0.543140 -0.851994\nvt 0.543099 -0.852231\nvt 0.542848 -0.852035\nvt 0.516025 -0.874773\nvt 0.515790 -0.874991\nvt 0.515858 -0.875111\nvt 0.516033 -0.874980\nvt 0.501243 -0.832605\nvt 0.535270 -0.910165\nvt 0.535500 -0.910232\nvt 0.501222 -0.832229\nvt 0.522784 -0.840883\nvt 0.523330 -0.840900\nvt 0.522385 -0.840815\nvt 0.519494 -0.842305\nvt 0.519117 -0.842465\nvt 0.522813 -0.841274\nvt 0.523349 -0.841303\nvt 0.531449 -0.909201\nvt 0.524337 -0.840862\nvt 0.524800 -0.840737\nvt 0.524344 -0.841235\nvt 0.524801 -0.841035\nvt 0.523132 -0.860012\nvt 0.522676 -0.860318\nvt 0.521573 -0.836362\nvt 0.521813 -0.836282\nvt 0.521320 -0.836463\nvt 0.523714 -0.835886\nvt 0.522605 -0.836182\nvt 0.522630 -0.836319\nvt 0.522380 -0.836170\nvt 0.522441 -0.836317\nvt 0.523848 -0.840905\nvt 0.523859 -0.841307\nvt 0.495523 -0.844121\nvt 0.495523 -0.848392\nvt 0.501013 -0.848392\nvt 0.501013 -0.844121\nvt 0.493224 -0.882724\nvt 0.488952 -0.882724\nvt 0.488952 -0.884037\nvt 0.493224 -0.884037\nvt 0.543093 -0.871985\nvt 0.541685 -0.866657\nvt 0.540411 -0.866994\nvt 0.541819 -0.872322\nvt 0.485629 -0.907616\nvt 0.485629 -0.911888\nvt 0.486942 -0.911888\nvt 0.486942 -0.907616\nvt 0.493053 -0.829636\nvt 0.491856 -0.835015\nvt 0.493142 -0.835302\nvt 0.494340 -0.829922\nvt 0.494537 -0.829034\nvt 0.494306 -0.828653\nvt 0.493321 -0.828434\nvt 0.545613 -0.858343\nvt 0.541341 -0.858343\nvt 0.541341 -0.858955\nvt 0.545613 -0.858955\nvt 0.541371 -0.865466\nvt 0.540395 -0.865724\nvt 0.540179 -0.866113\nvt 0.555161 -0.873881\nvt 0.555161 -0.878153\nvt 0.560565 -0.878153\nvt 0.560565 -0.873881\nvt 0.534774 -0.866004\nvt 0.535008 -0.866891\nvt 0.491991 -0.911888\nvt 0.491991 -0.907616\nvt 0.499734 -0.829608\nvt 0.499934 -0.828713\nvt 0.563968 -0.878153\nvt 0.563968 -0.873881\nvt 0.531353 -0.866902\nvt 0.531588 -0.867794\nvt 0.495515 -0.911888\nvt 0.495515 -0.907616\nvt 0.503187 -0.830376\nvt 0.503388 -0.829475\nvt 0.486942 -0.907063\nvt 0.486635 -0.906754\nvt 0.485629 -0.906754\nvt 0.491991 -0.907063\nvt 0.495515 -0.907063\nvt 0.541033 -0.858036\nvt 0.540788 -0.858036\nvt 0.540788 -0.858955\nvt 0.500750 -0.843232\nvt 0.497322 -0.843232\nvt 0.497322 -0.843786\nvt 0.500750 -0.843786\nvt 0.492714 -0.843232\nvt 0.492714 -0.843786\nvt 0.506048 -0.870611\nvt 0.506048 -0.875699\nvt 0.506911 -0.875699\nvt 0.506911 -0.870920\nvt 0.506602 -0.870611\nvt 0.488089 -0.882724\nvt 0.488089 -0.884037\nvt 0.494086 -0.884037\nvt 0.494086 -0.882724\nvt 0.561395 -0.855980\nvt 0.561395 -0.856533\nvt 0.561704 -0.856842\nvt 0.566483 -0.855980\nvt 0.566483 -0.856842\nvt 0.543344 -0.865508\nvt 0.547952 -0.865508\nvt 0.547952 -0.864954\nvt 0.543344 -0.864954\nvt 0.551380 -0.865508\nvt 0.551380 -0.864954\nvt 0.546167 -0.858955\nvt 0.546167 -0.858036\nvt 0.545922 -0.858036\nvt 0.491991 -0.912441\nvt 0.495515 -0.912441\nvt 0.486942 -0.912441\nvt 0.485629 -0.912750\nvt 0.486635 -0.912750\nvt 0.526846 -0.844243\nvt 0.530304 -0.839953\nvt 0.529755 -0.839510\nvt 0.526674 -0.843558\nvt 0.488089 -0.884740\nvt 0.488952 -0.884740\nvt 0.540219 -0.867238\nvt 0.540046 -0.867850\nvt 0.541136 -0.872502\nvt 0.535056 -0.867283\nvt 0.531690 -0.868178\nvt 0.541033 -0.857640\nvt 0.540788 -0.857640\nvt 0.519117 -0.839912\nvt 0.521871 -0.842133\nvt 0.522234 -0.841527\nvt 0.519560 -0.839363\nvt 0.564373 -0.872080\nvt 0.561077 -0.867663\nvt 0.560880 -0.868342\nvt 0.563807 -0.872502\nvt 0.556027 -0.869586\nvt 0.556367 -0.870205\nvt 0.553192 -0.871702\nvt 0.553614 -0.872267\nvt 0.546167 -0.857640\nvt 0.545922 -0.857640\nvt 0.499703 -0.830001\nvt 0.503101 -0.830764\nvt 0.494541 -0.830159\nvt 0.493831 -0.835455\nvt 0.494739 -0.830763\nvt 0.493224 -0.884740\nvt 0.494086 -0.884740\nvt 0.564349 -0.873881\nvt 0.564264 -0.873572\nvt 0.564264 -0.878461\nvt 0.564349 -0.878153\nvt 0.523058 -0.833868\nvt 0.522667 -0.834082\nvt 0.523053 -0.834304\nvt 0.551080 -0.829606\nvt 0.550643 -0.829597\nvt 0.550853 -0.829979\nvt 0.512433 -0.830439\nvt 0.512209 -0.830814\nvt 0.512645 -0.830821\nvt 0.541772 -0.857306\nvt 0.541985 -0.857687\nvt 0.542217 -0.857307\nvt 0.506911 -0.870364\nvt 0.554458 -0.866020\nvt 0.554844 -0.866224\nvt 0.554827 -0.865788\nvt 0.558860 -0.903027\nvt 0.558861 -0.903464\nvt 0.559238 -0.903245\nvt 0.561148 -0.856842\nvt 0.545613 -0.858009\nvt 0.541341 -0.858009\nvt 0.495849 -0.907616\nvt 0.495849 -0.911888\nvt 0.548117 -0.885235\nvt 0.548208 -0.885671\nvt 0.553612 -0.885635\nvt 0.553523 -0.885203\nvt 0.534694 -0.865700\nvt 0.531274 -0.866603\nvt 0.551095 -0.828852\nvt 0.550659 -0.828843\nvt 0.495849 -0.907063\nvt 0.512196 -0.831567\nvt 0.512633 -0.831574\nvt 0.503455 -0.829174\nvt 0.500002 -0.828405\nvt 0.535764 -0.912156\nvt 0.536199 -0.912228\nvt 0.536023 -0.906827\nvt 0.535584 -0.906754\nvt 0.495849 -0.912441\nvt 0.539975 -0.867549\nvt 0.535093 -0.867592\nvt 0.557649 -0.866117\nvt 0.557668 -0.865679\nvt 0.540788 -0.857306\nvt 0.541341 -0.857306\nvt 0.531290 -0.867873\nvt 0.531392 -0.868257\nvt 0.532998 -0.840461\nvt 0.532994 -0.840025\nvt 0.532289 -0.840031\nvt 0.532601 -0.840465\nvt 0.545613 -0.857306\nvt 0.546167 -0.857306\nvt 0.556017 -0.903030\nvt 0.556053 -0.903466\nvt 0.499678 -0.830311\nvt 0.494797 -0.830460\nvt 0.552945 -0.871887\nvt 0.553182 -0.872205\nvt 0.503488 -0.830443\nvt 0.503402 -0.830831\nvt 0.501394 -0.846445\nvt 0.501097 -0.846445\nvt 0.501178 -0.847645\nvt 0.501480 -0.847704\nvt 0.564101 -0.913179\nvt 0.564024 -0.912783\nvt 0.562949 -0.912791\nvt 0.562881 -0.913188\nvt 0.563967 -0.912491\nvt 0.563037 -0.912498\nvt 0.565657 -0.883950\nvt 0.566059 -0.883916\nvt 0.566051 -0.883045\nvt 0.565648 -0.883018\nvt 0.566348 -0.883944\nvt 0.566339 -0.883012\nvt 0.548046 -0.828176\nvt 0.547825 -0.827838\nvt 0.547045 -0.828580\nvt 0.547371 -0.828818\nvt 0.487250 -0.905229\nvt 0.486852 -0.905164\nvt 0.486878 -0.906387\nvt 0.487273 -0.906306\nvt 0.501797 -0.846445\nvt 0.501879 -0.847645\nvt 0.538068 -0.855052\nvt 0.537969 -0.854661\nvt 0.536765 -0.854873\nvt 0.536805 -0.855275\nvt 0.561962 -0.912410\nvt 0.561761 -0.912756\nvt 0.562184 -0.912169\nvt 0.566169 -0.882239\nvt 0.565774 -0.882157\nvt 0.489987 -0.905813\nvt 0.490010 -0.905410\nvt 0.489078 -0.905427\nvt 0.489116 -0.905829\nvt 0.546585 -0.829541\nvt 0.546973 -0.829649\nvt 0.546801 -0.828429\nvt 0.546279 -0.829520\nvt 0.501724 -0.848770\nvt 0.502111 -0.848661\nvt 0.535622 -0.854896\nvt 0.535606 -0.855299\nvt 0.561214 -0.911698\nvt 0.560912 -0.911948\nvt 0.561537 -0.911553\nvt 0.566395 -0.881621\nvt 0.566016 -0.881496\nvt 0.488220 -0.905577\nvt 0.488313 -0.905969\nvt 0.546516 -0.830574\nvt 0.546913 -0.830543\nvt 0.546201 -0.830693\nvt 0.522662 -0.845367\nvt 0.522570 -0.845760\nvt 0.523838 -0.845957\nvt 0.523870 -0.845554\nvt 0.534714 -0.854726\nvt 0.534653 -0.855120\nvt 0.560818 -0.910764\nvt 0.560462 -0.910887\nvt 0.561194 -0.910745\nvt 0.522556 -0.852360\nvt 0.522163 -0.852454\nvt 0.522301 -0.853314\nvt 0.522704 -0.853280\nvt 0.487566 -0.905836\nvt 0.487701 -0.906212\nvt 0.546848 -0.831523\nvt 0.547201 -0.831363\nvt 0.546578 -0.831770\nvt 0.525038 -0.845955\nvt 0.525013 -0.845553\nvt 0.525986 -0.845090\nvt 0.525897 -0.844696\nvt 0.524688 -0.844877\nvt 0.524718 -0.845280\nvt 0.560834 -0.909750\nvt 0.560481 -0.909736\nvt 0.561208 -0.909867\nvt 0.522305 -0.854129\nvt 0.522708 -0.854151\nvt 0.538963 -0.837434\nvt 0.539362 -0.837492\nvt 0.539428 -0.836563\nvt 0.539024 -0.836565\nvt 0.547532 -0.832242\nvt 0.547792 -0.831985\nvt 0.547354 -0.832586\nvt 0.525986 -0.845756\nvt 0.525917 -0.845363\nvt 0.523545 -0.844871\nvt 0.523518 -0.845273\nvt 0.561261 -0.908809\nvt 0.560965 -0.908668\nvt 0.561577 -0.909054\nvt 0.522174 -0.854774\nvt 0.522567 -0.854841\nvt 0.539354 -0.835695\nvt 0.538956 -0.835753\nvt 0.548462 -0.832623\nvt 0.548597 -0.832314\nvt 0.548410 -0.833018\nvt 0.514042 -0.847852\nvt 0.514145 -0.847462\nvt 0.512884 -0.847227\nvt 0.512840 -0.847628\nvt 0.522641 -0.844677\nvt 0.522570 -0.845069\nvt 0.562032 -0.908086\nvt 0.561841 -0.907847\nvt 0.562244 -0.908428\nvt 0.562333 -0.908582\nvt 0.562370 -0.908984\nvt 0.563241 -0.908968\nvt 0.563264 -0.908565\nvt 0.547624 -0.862575\nvt 0.547733 -0.862187\nvt 0.546959 -0.862010\nvt 0.546900 -0.862409\nvt 0.549498 -0.832607\nvt 0.549492 -0.832301\nvt 0.549586 -0.833000\nvt 0.511685 -0.847191\nvt 0.511697 -0.847594\nvt 0.510730 -0.848204\nvt 0.510834 -0.848594\nvt 0.512036 -0.848371\nvt 0.511992 -0.847970\nvt 0.563032 -0.907690\nvt 0.562975 -0.907398\nvt 0.563109 -0.908086\nvt 0.546959 -0.862711\nvt 0.546045 -0.862351\nvt 0.546045 -0.862649\nvt 0.546045 -0.861948\nvt 0.550481 -0.832197\nvt 0.550343 -0.831946\nvt 0.550701 -0.832535\nvt 0.510730 -0.847360\nvt 0.510787 -0.847755\nvt 0.513178 -0.848339\nvt 0.513191 -0.847936\nvt 0.564106 -0.907682\nvt 0.564195 -0.907389\nvt 0.564038 -0.908079\nvt 0.545190 -0.862409\nvt 0.545131 -0.862711\nvt 0.545131 -0.862010\nvt 0.491862 -0.906137\nvt 0.492260 -0.906201\nvt 0.492238 -0.905124\nvt 0.491843 -0.905205\nvt 0.551588 -0.831692\nvt 0.551261 -0.831455\nvt 0.550875 -0.832762\nvt 0.551805 -0.831878\nvt 0.514088 -0.848501\nvt 0.514145 -0.848106\nvt 0.565093 -0.908063\nvt 0.565314 -0.907821\nvt 0.564892 -0.908408\nvt 0.543639 -0.876639\nvt 0.543739 -0.877031\nvt 0.544597 -0.876879\nvt 0.544557 -0.876478\nvt 0.544357 -0.862187\nvt 0.544466 -0.862575\nvt 0.551018 -0.831304\nvt 0.551721 -0.830494\nvt 0.551416 -0.830473\nvt 0.552110 -0.830602\nvt 0.534737 -0.855446\nvt 0.534653 -0.855840\nvt 0.535924 -0.856013\nvt 0.535949 -0.855610\nvt 0.547770 -0.863316\nvt 0.547694 -0.862920\nvt 0.546479 -0.863062\nvt 0.546496 -0.863465\nvt 0.565841 -0.908774\nvt 0.566164 -0.908629\nvt 0.565539 -0.909024\nvt 0.545412 -0.876863\nvt 0.545428 -0.876461\nvt 0.538892 -0.835520\nvt 0.539285 -0.835611\nvt 0.539428 -0.834690\nvt 0.539025 -0.834659\nvt 0.551790 -0.829461\nvt 0.551475 -0.829579\nvt 0.552188 -0.829429\nvt 0.537124 -0.855990\nvt 0.537092 -0.855588\nvt 0.545337 -0.863018\nvt 0.545297 -0.863419\nvt 0.566237 -0.909709\nvt 0.566613 -0.909689\nvt 0.565882 -0.909832\nvt 0.546059 -0.876985\nvt 0.546120 -0.876590\nvt 0.539427 -0.833819\nvt 0.539024 -0.833844\nvt 0.551458 -0.828512\nvt 0.551188 -0.828759\nvt 0.551810 -0.828352\nvt 0.538068 -0.855774\nvt 0.537992 -0.855382\nvt 0.544440 -0.862795\nvt 0.544357 -0.863185\nvt 0.566221 -0.910723\nvt 0.566595 -0.910841\nvt 0.565867 -0.910709\nvt 0.562270 -0.911609\nvt 0.562344 -0.912005\nvt 0.563210 -0.911910\nvt 0.563196 -0.911507\nvt 0.539282 -0.833130\nvt 0.538889 -0.833199\nvt 0.550774 -0.827793\nvt 0.550597 -0.828137\nvt 0.551034 -0.827536\nvt 0.537792 -0.832243\nvt 0.537393 -0.832185\nvt 0.537303 -0.833465\nvt 0.537706 -0.833463\nvt 0.552737 -0.860156\nvt 0.553136 -0.860098\nvt 0.553050 -0.858878\nvt 0.552646 -0.858876\nvt 0.565794 -0.911664\nvt 0.566111 -0.911908\nvt 0.565498 -0.911523\nvt 0.564024 -0.911947\nvt 0.564067 -0.911546\nvt 0.565324 -0.909227\nvt 0.564927 -0.909154\nvt 0.564827 -0.910080\nvt 0.565230 -0.910093\nvt 0.549844 -0.827412\nvt 0.549792 -0.827807\nvt 0.549978 -0.827104\nvt 0.537404 -0.834660\nvt 0.537802 -0.834602\nvt 0.553146 -0.857739\nvt 0.552747 -0.857681\nvt 0.565023 -0.912387\nvt 0.565235 -0.912729\nvt 0.564831 -0.912149\nvt 0.566053 -0.885466\nvt 0.566429 -0.885334\nvt 0.566192 -0.884720\nvt 0.565799 -0.884810\nvt 0.564867 -0.910950\nvt 0.565268 -0.910907\nvt 0.548808 -0.827428\nvt 0.548896 -0.827821\nvt 0.548803 -0.827122\nvt 0.502111 -0.844230\nvt 0.501724 -0.844121\nvt 0.501480 -0.845187\nvt 0.501879 -0.845246\nvt 0.501178 -0.845246\nvt 0.491415 -0.906145\nvt 0.491536 -0.905765\nvt 0.490873 -0.905529\nvt 0.490794 -0.905924\nvt 0.547687 -0.827587\nvt 0.541172 -0.899651\nvt 0.541172 -0.893585\nvt 0.538344 -0.893585\nvt 0.538344 -0.899651\nvt 0.538525 -0.886976\nvt 0.538323 -0.886807\nvt 0.530970 -0.899651\nvt 0.530970 -0.894327\nvt 0.525193 -0.894327\nvt 0.525193 -0.899651\nvt 0.511680 -0.856516\nvt 0.511680 -0.849706\nvt 0.507182 -0.850041\nvt 0.507162 -0.856519\nvt 0.524452 -0.899651\nvt 0.524452 -0.893585\nvt 0.524364 -0.886114\nvt 0.498510 -0.886434\nvt 0.498510 -0.893585\nvt 0.491922 -0.899651\nvt 0.491922 -0.894327\nvt 0.485337 -0.894327\nvt 0.485337 -0.899651\nvt 0.548224 -0.872502\nvt 0.548224 -0.866073\nvt 0.543344 -0.866081\nvt 0.543344 -0.872502\nvt 0.484601 -0.899651\nvt 0.484601 -0.893585\nvt 0.484596 -0.887194\nvt 0.484242 -0.887519\nvt 0.480128 -0.893585\nvt 0.537206 -0.826355\nvt 0.530639 -0.826335\nvt 0.530919 -0.830979\nvt 0.537036 -0.830889\nvt 0.560005 -0.857681\nvt 0.553301 -0.857689\nvt 0.553297 -0.863088\nvt 0.559747 -0.863095\nvt 0.490854 -0.835349\nvt 0.485901 -0.835349\nvt 0.485474 -0.842839\nvt 0.489994 -0.840888\nvt 0.545446 -0.827206\nvt 0.539011 -0.827206\nvt 0.538789 -0.831772\nvt 0.545446 -0.831772\nvt 0.545869 -0.833130\nvt 0.539528 -0.833130\nvt 0.539528 -0.837852\nvt 0.545938 -0.837852\nvt 0.498541 -0.875075\nvt 0.492823 -0.875079\nvt 0.493044 -0.881822\nvt 0.497893 -0.879953\nvt 0.537602 -0.899651\nvt 0.537602 -0.894327\nvt 0.516482 -0.856518\nvt 0.516212 -0.850369\nvt 0.480128 -0.835349\nvt 0.480592 -0.840142\nvt 0.497768 -0.899651\nvt 0.497768 -0.894327\nvt 0.552610 -0.872502\nvt 0.552610 -0.865842\nvt 0.487818 -0.874732\nvt 0.488604 -0.879445\nvt 0.537499 -0.892844\nvt 0.536786 -0.893585\nvt 0.526059 -0.893585\nvt 0.525309 -0.892843\nvt 0.497675 -0.892843\nvt 0.496914 -0.893585\nvt 0.486213 -0.893585\nvt 0.485464 -0.892843\nvt 0.525153 -0.839028\nvt 0.525597 -0.837842\nvt 0.524584 -0.838090\nvt 0.552551 -0.863424\nvt 0.553284 -0.864129\nvt 0.535543 -0.845210\nvt 0.534358 -0.845812\nvt 0.535356 -0.846308\nvt 0.538787 -0.838156\nvt 0.539528 -0.838953\nvt 0.537498 -0.886281\nvt 0.520270 -0.833458\nvt 0.519117 -0.833045\nvt 0.519973 -0.837287\nvt 0.521004 -0.837096\nvt 0.525230 -0.886140\nvt 0.497675 -0.886408\nvt 0.499388 -0.874334\nvt 0.492799 -0.874336\nvt 0.485464 -0.886502\nvt 0.537007 -0.831867\nvt 0.530851 -0.831934\nvt 0.559762 -0.864117\nvt 0.487204 -0.892632\nvt 0.486852 -0.893588\nvt 0.491773 -0.893730\nvt 0.492131 -0.892762\nvt 0.537947 -0.826364\nvt 0.537769 -0.831153\nvt 0.491605 -0.835339\nvt 0.490787 -0.840676\nvt 0.545446 -0.832879\nvt 0.538787 -0.832879\nvt 0.545950 -0.838953\nvt 0.497880 -0.880755\nvt 0.493071 -0.882640\nvt 0.487054 -0.874658\nvt 0.487811 -0.879198\nvt 0.499290 -0.875069\nvt 0.498668 -0.879749\nvt 0.531012 -0.893585\nvt 0.526448 -0.832693\nvt 0.525432 -0.832871\nvt 0.537821 -0.848794\nvt 0.538755 -0.849270\nvt 0.540969 -0.845317\nvt 0.539708 -0.845422\nvt 0.530879 -0.848989\nvt 0.531880 -0.849457\nvt 0.541172 -0.905717\nvt 0.538344 -0.905717\nvt 0.538323 -0.912495\nvt 0.538525 -0.912326\nvt 0.525193 -0.904975\nvt 0.530970 -0.904975\nvt 0.484647 -0.828278\nvt 0.480128 -0.828275\nvt 0.480148 -0.834753\nvt 0.484647 -0.835088\nvt 0.524452 -0.905717\nvt 0.498510 -0.905717\nvt 0.498510 -0.912868\nvt 0.524364 -0.913188\nvt 0.485337 -0.904975\nvt 0.491922 -0.904975\nvt 0.536067 -0.857469\nvt 0.531187 -0.857469\nvt 0.531187 -0.863891\nvt 0.536067 -0.863898\nvt 0.484601 -0.905717\nvt 0.480128 -0.905717\nvt 0.484242 -0.911783\nvt 0.484596 -0.912108\nvt 0.546942 -0.833385\nvt 0.547121 -0.837919\nvt 0.553237 -0.837998\nvt 0.553509 -0.833353\nvt 0.507162 -0.837751\nvt 0.507419 -0.843165\nvt 0.513870 -0.843157\nvt 0.513866 -0.837758\nvt 0.517909 -0.871198\nvt 0.516414 -0.865796\nvt 0.511699 -0.864380\nvt 0.512989 -0.871770\nvt 0.560256 -0.858455\nvt 0.560256 -0.863021\nvt 0.566913 -0.863021\nvt 0.566691 -0.858455\nvt 0.530720 -0.832185\nvt 0.530651 -0.836907\nvt 0.537061 -0.836907\nvt 0.537061 -0.832185\nvt 0.480976 -0.843841\nvt 0.481633 -0.848717\nvt 0.486486 -0.850577\nvt 0.486694 -0.843834\nvt 0.537602 -0.904975\nvt 0.489449 -0.828276\nvt 0.489179 -0.834425\nvt 0.507162 -0.867623\nvt 0.507255 -0.872437\nvt 0.497768 -0.904975\nvt 0.540453 -0.857469\nvt 0.540453 -0.864129\nvt 0.490922 -0.848192\nvt 0.491699 -0.843477\nvt 0.536786 -0.905717\nvt 0.537499 -0.906458\nvt 0.525309 -0.906459\nvt 0.526059 -0.905717\nvt 0.496914 -0.905717\nvt 0.497675 -0.906459\nvt 0.485464 -0.906459\nvt 0.486213 -0.905717\nvt 0.533413 -0.871479\nvt 0.534226 -0.872216\nvt 0.534663 -0.871267\nvt 0.514615 -0.843493\nvt 0.513882 -0.844198\nvt 0.512580 -0.828093\nvt 0.512810 -0.829182\nvt 0.513787 -0.828648\nvt 0.537802 -0.837211\nvt 0.537061 -0.838007\nvt 0.537498 -0.913021\nvt 0.513117 -0.872502\nvt 0.518855 -0.871835\nvt 0.525230 -0.913162\nvt 0.497675 -0.912894\nvt 0.486717 -0.843091\nvt 0.480128 -0.843100\nvt 0.485464 -0.912800\nvt 0.547151 -0.838897\nvt 0.553308 -0.838953\nvt 0.507404 -0.844186\nvt 0.519518 -0.838348\nvt 0.524446 -0.838402\nvt 0.524125 -0.837421\nvt 0.519201 -0.837379\nvt 0.546201 -0.833395\nvt 0.546389 -0.838185\nvt 0.518656 -0.871122\nvt 0.517226 -0.865915\nvt 0.560256 -0.864129\nvt 0.566916 -0.864129\nvt 0.530639 -0.838007\nvt 0.481648 -0.849519\nvt 0.486461 -0.851396\nvt 0.491715 -0.847943\nvt 0.492463 -0.843402\nvt 0.480227 -0.843835\nvt 0.480857 -0.848515\nvt 0.531012 -0.905717\nvt 0.539879 -0.871408\nvt 0.539512 -0.872371\nvt 0.510444 -0.831764\nvt 0.508426 -0.828468\nvt 0.507162 -0.828412\nvt 0.509529 -0.832275\nvt 0.517388 -0.831686\nvt 0.516406 -0.832193\nvt 0.498510 -0.899651\nvt 0.480128 -0.899651\nvt 0.159908 -0.377653\nvt 0.166076 -0.377653\nvt 0.166076 -0.352266\nvt 0.159908 -0.352266\nvt 0.153740 -0.377653\nvt 0.153740 -0.352266\nvt 0.147573 -0.377653\nvt 0.147573 -0.352266\nvt 0.141405 -0.377653\nvt 0.141405 -0.352266\nvt 0.135238 -0.377653\nvt 0.135238 -0.352266\nvt 0.129071 -0.377653\nvt 0.129071 -0.352266\nvt 0.122903 -0.377653\nvt 0.122903 -0.352266\nvt 0.116736 -0.377653\nvt 0.116736 -0.352266\nvt 0.110568 -0.377653\nvt 0.110568 -0.352266\nvt 0.104401 -0.377653\nvt 0.104401 -0.352266\nvt 0.098233 -0.377653\nvt 0.098233 -0.352266\nvt 0.092065 -0.377653\nvt 0.092065 -0.352266\nvt 0.085897 -0.377653\nvt 0.085897 -0.352266\nvt 0.079728 -0.377653\nvt 0.079728 -0.352266\nvt 0.172244 -0.377653\nvt 0.178413 -0.377653\nvt 0.178413 -0.352266\nvt 0.172244 -0.352266\nvt 0.916790 -0.278093\nvt 0.921135 -0.282472\nvt 0.926824 -0.284856\nvt 0.932992 -0.284880\nvt 0.938700 -0.282542\nvt 0.943080 -0.278198\nvt 0.945463 -0.272509\nvt 0.945487 -0.266340\nvt 0.943149 -0.260632\nvt 0.938805 -0.256253\nvt 0.933116 -0.253870\nvt 0.926947 -0.253845\nvt 0.921239 -0.256183\nvt 0.916860 -0.260528\nvt 0.914477 -0.266217\nvt 0.914452 -0.272385\nvt 0.823904 -0.623932\nvt 0.828376 -0.623932\nvt 0.828376 -0.606661\nvt 0.823904 -0.606661\nvt 0.819432 -0.623932\nvt 0.819432 -0.606661\nvt 0.814960 -0.623932\nvt 0.814960 -0.606661\nvt 0.810488 -0.623932\nvt 0.810488 -0.606661\nvt 0.806017 -0.623932\nvt 0.806017 -0.606661\nvt 0.801545 -0.623932\nvt 0.801545 -0.606661\nvt 0.797073 -0.623932\nvt 0.797073 -0.606661\nvt 0.792601 -0.623932\nvt 0.792601 -0.606661\nvt 0.788129 -0.623932\nvt 0.788129 -0.606661\nvt 0.783657 -0.623932\nvt 0.783657 -0.606661\nvt 0.832848 -0.623932\nvt 0.837320 -0.623932\nvt 0.837320 -0.606661\nvt 0.832848 -0.606661\nvt 0.845249 -0.618902\nvt 0.847513 -0.622759\nvt 0.851401 -0.624967\nvt 0.855873 -0.624935\nvt 0.859730 -0.622671\nvt 0.861938 -0.618783\nvt 0.861906 -0.614311\nvt 0.859642 -0.610454\nvt 0.855754 -0.608246\nvt 0.851282 -0.608278\nvt 0.847426 -0.610542\nvt 0.845217 -0.614430\nvt 0.524681 -0.541736\nvt 0.522140 -0.541736\nvt 0.522140 -0.567124\nvt 0.524681 -0.567124\nvt 0.527221 -0.541736\nvt 0.527221 -0.567124\nvt 0.529762 -0.541736\nvt 0.529762 -0.567124\nvt 0.532302 -0.541736\nvt 0.532302 -0.567124\nvt 0.534842 -0.541736\nvt 0.534842 -0.567124\nvt 0.537383 -0.541736\nvt 0.537383 -0.567124\nvt 0.514519 -0.541736\nvt 0.511979 -0.541736\nvt 0.511979 -0.567124\nvt 0.514519 -0.567124\nvt 0.517060 -0.541736\nvt 0.517060 -0.567124\nvt 0.519600 -0.541736\nvt 0.519600 -0.567124\nvt 0.364910 -0.910397\nvt 0.362369 -0.910397\nvt 0.360314 -0.911891\nvt 0.359529 -0.914307\nvt 0.360314 -0.916723\nvt 0.362369 -0.918216\nvt 0.364910 -0.918216\nvt 0.366965 -0.916723\nvt 0.367750 -0.914307\nvt 0.366965 -0.911891\nvt 0.649338 -0.567124\nvt 0.654794 -0.567124\nvt 0.654794 -0.541736\nvt 0.649338 -0.541736\nvt 0.643883 -0.567124\nvt 0.643883 -0.541736\nvt 0.638427 -0.567124\nvt 0.638427 -0.541736\nvt 0.632971 -0.567124\nvt 0.632971 -0.541736\nvt 0.627516 -0.567124\nvt 0.627516 -0.541736\nvt 0.622060 -0.567124\nvt 0.622060 -0.541736\nvt 0.616604 -0.567124\nvt 0.616604 -0.541736\nvt 0.611149 -0.567124\nvt 0.611149 -0.541736\nvt 0.605693 -0.567124\nvt 0.605693 -0.541736\nvt 0.600237 -0.567124\nvt 0.600237 -0.541736\nvt 0.660250 -0.567124\nvt 0.665705 -0.567124\nvt 0.665705 -0.541736\nvt 0.660250 -0.541736\nvt 0.747781 -0.175487\nvt 0.743076 -0.178249\nvt 0.740382 -0.182993\nvt 0.740421 -0.188448\nvt 0.743182 -0.193153\nvt 0.747927 -0.195847\nvt 0.753382 -0.195808\nvt 0.758087 -0.193047\nvt 0.760781 -0.188303\nvt 0.760742 -0.182847\nvt 0.757980 -0.178142\nvt 0.753236 -0.175448\nvt 0.072261 -0.113890\nvt 0.068168 -0.113890\nvt 0.068168 -0.132905\nvt 0.072261 -0.132905\nvt 0.076354 -0.113890\nvt 0.076354 -0.132905\nvt 0.080448 -0.113890\nvt 0.080448 -0.132905\nvt 0.084541 -0.113890\nvt 0.084541 -0.132905\nvt 0.088634 -0.113890\nvt 0.088634 -0.132905\nvt 0.092727 -0.113890\nvt 0.092727 -0.132905\nvt 0.096820 -0.113890\nvt 0.096820 -0.132905\nvt 0.100913 -0.113890\nvt 0.100913 -0.132905\nvt 0.105006 -0.113890\nvt 0.105006 -0.132905\nvt 0.059982 -0.113890\nvt 0.055889 -0.113890\nvt 0.055889 -0.132905\nvt 0.059982 -0.132905\nvt 0.064075 -0.113890\nvt 0.064075 -0.132905\nvt 0.557389 -0.271892\nvt 0.559461 -0.275422\nvt 0.563021 -0.277443\nvt 0.567114 -0.277414\nvt 0.570644 -0.275342\nvt 0.572665 -0.271783\nvt 0.572635 -0.267690\nvt 0.570564 -0.264160\nvt 0.567004 -0.262138\nvt 0.562911 -0.262168\nvt 0.559381 -0.264240\nvt 0.557360 -0.267799\nvt 0.103949 -0.590342\nvt 0.098767 -0.590342\nvt 0.098767 -0.615900\nvt 0.103949 -0.615900\nvt 0.109132 -0.590342\nvt 0.109132 -0.615900\nvt 0.114315 -0.590342\nvt 0.114315 -0.615900\nvt 0.119497 -0.590342\nvt 0.119497 -0.615900\nvt 0.124679 -0.590342\nvt 0.124679 -0.615900\nvt 0.129862 -0.590342\nvt 0.129862 -0.615900\nvt 0.135044 -0.590342\nvt 0.135044 -0.615900\nvt 0.140226 -0.590342\nvt 0.140226 -0.615900\nvt 0.145409 -0.590342\nvt 0.145409 -0.615900\nvt 0.150592 -0.590342\nvt 0.150592 -0.615900\nvt 0.155774 -0.590342\nvt 0.155774 -0.615900\nvt 0.160957 -0.590342\nvt 0.160957 -0.615900\nvt 0.166140 -0.590342\nvt 0.166140 -0.615900\nvt 0.171323 -0.590342\nvt 0.171323 -0.615900\nvt 0.093583 -0.590342\nvt 0.088400 -0.590342\nvt 0.088400 -0.615900\nvt 0.093583 -0.615900\nvt 0.265356 -0.930773\nvt 0.269007 -0.934453\nvt 0.273788 -0.936455\nvt 0.278971 -0.936476\nvt 0.283767 -0.934511\nvt 0.287447 -0.930861\nvt 0.289450 -0.926080\nvt 0.289470 -0.920897\nvt 0.287506 -0.916100\nvt 0.283855 -0.912421\nvt 0.279075 -0.910418\nvt 0.273891 -0.910397\nvt 0.269095 -0.912362\nvt 0.265415 -0.916012\nvt 0.263413 -0.920793\nvt 0.263392 -0.925976\nvt 0.042100 -0.572406\nvt 0.046207 -0.572406\nvt 0.046207 -0.541736\nvt 0.042100 -0.541736\nvt 0.037993 -0.572406\nvt 0.037993 -0.541736\nvt 0.033886 -0.572406\nvt 0.033886 -0.541736\nvt 0.029780 -0.572406\nvt 0.029780 -0.541736\nvt 0.025673 -0.572406\nvt 0.025673 -0.541736\nvt 0.021566 -0.572406\nvt 0.021566 -0.541736\nvt 0.017459 -0.572406\nvt 0.017459 -0.541736\nvt 0.013352 -0.572406\nvt 0.013352 -0.541736\nvt 0.009246 -0.572406\nvt 0.009246 -0.541736\nvt 0.050313 -0.572406\nvt 0.050313 -0.541736\nvt 0.524151 -0.049909\nvt 0.524151 -0.045802\nvt 0.521738 -0.042480\nvt 0.517832 -0.041211\nvt 0.513926 -0.042480\nvt 0.511512 -0.045802\nvt 0.511512 -0.049909\nvt 0.513926 -0.053231\nvt 0.517832 -0.054500\nvt 0.521738 -0.053231\nvt 0.029038 -0.204476\nvt 0.023580 -0.204476\nvt 0.023580 -0.234579\nvt 0.029038 -0.234579\nvt 0.034496 -0.204476\nvt 0.034496 -0.234579\nvt 0.039954 -0.204476\nvt 0.039954 -0.234579\nvt 0.045412 -0.204476\nvt 0.045412 -0.234579\nvt 0.050870 -0.204476\nvt 0.050870 -0.234579\nvt 0.056328 -0.204476\nvt 0.056328 -0.234580\nvt 0.061786 -0.204476\nvt 0.061786 -0.234580\nvt 0.067244 -0.204476\nvt 0.067244 -0.234580\nvt 0.072702 -0.204476\nvt 0.072702 -0.234580\nvt 0.078160 -0.204476\nvt 0.078160 -0.234580\nvt 0.018122 -0.204476\nvt 0.012665 -0.204476\nvt 0.012665 -0.234579\nvt 0.018122 -0.234579\nvt 0.383050 -0.915093\nvt 0.381297 -0.912107\nvt 0.378286 -0.910397\nvt 0.374824 -0.910422\nvt 0.371838 -0.912175\nvt 0.370128 -0.915186\nvt 0.370153 -0.918648\nvt 0.371906 -0.921634\nvt 0.374916 -0.923344\nvt 0.378379 -0.923319\nvt 0.381365 -0.921567\nvt 0.383075 -0.918556\nvt 0.025812 -0.716947\nvt 0.028441 -0.719307\nvt 0.031026 -0.714212\nvt 0.027568 -0.713484\nvt 0.030715 -0.708507\nvt 0.027357 -0.709606\nvt 0.027594 -0.703723\nvt 0.025235 -0.706353\nvt 0.022499 -0.701139\nvt 0.021770 -0.704596\nvt 0.016794 -0.701448\nvt 0.017892 -0.704807\nvt 0.012008 -0.704567\nvt 0.014638 -0.706927\nvt 0.009424 -0.709662\nvt 0.012881 -0.710390\nvt 0.009734 -0.715367\nvt 0.013092 -0.714268\nvt 0.012856 -0.720151\nvt 0.015214 -0.717521\nvt 0.017951 -0.722735\nvt 0.018679 -0.719278\nvt 0.023655 -0.722426\nvt 0.022558 -0.719068\nvt 0.449343 -0.043079\nvt 0.451095 -0.046065\nvt 0.452355 -0.045718\nvt 0.450260 -0.042148\nvt 0.446332 -0.041369\nvt 0.446661 -0.040105\nvt 0.442869 -0.041394\nvt 0.442522 -0.040134\nvt 0.439883 -0.043147\nvt 0.438952 -0.042229\nvt 0.438173 -0.046158\nvt 0.436909 -0.045828\nvt 0.438198 -0.049620\nvt 0.436938 -0.049967\nvt 0.439951 -0.052606\nvt 0.439033 -0.053537\nvt 0.442962 -0.054316\nvt 0.442632 -0.055580\nvt 0.446424 -0.054291\nvt 0.446771 -0.055551\nvt 0.449410 -0.052539\nvt 0.450341 -0.053456\nvt 0.451120 -0.049528\nvt 0.452384 -0.049857\nvt 0.479322 -0.243348\nvt 0.482784 -0.243348\nvt 0.482784 -0.226535\nvt 0.479322 -0.226535\nvt 0.475859 -0.243348\nvt 0.475859 -0.226535\nvt 0.472397 -0.243348\nvt 0.472397 -0.226535\nvt 0.468934 -0.243348\nvt 0.468934 -0.226535\nvt 0.465472 -0.243348\nvt 0.465472 -0.226535\nvt 0.462009 -0.243348\nvt 0.462009 -0.226535\nvt 0.458547 -0.243348\nvt 0.458547 -0.226535\nvt 0.455084 -0.243348\nvt 0.455084 -0.226535\nvt 0.451622 -0.243348\nvt 0.451622 -0.226535\nvt 0.448159 -0.243348\nvt 0.448159 -0.226535\nvt 0.444697 -0.243348\nvt 0.444697 -0.226535\nvt 0.486247 -0.243348\nvt 0.486247 -0.226535\nvt 0.630544 -0.193777\nvt 0.630544 -0.219165\nvt 0.624376 -0.219165\nvt 0.624376 -0.193777\nvt 0.618209 -0.219165\nvt 0.618209 -0.193777\nvt 0.612041 -0.219165\nvt 0.612041 -0.193777\nvt 0.605873 -0.219165\nvt 0.605873 -0.193777\nvt 0.599706 -0.219165\nvt 0.599706 -0.193777\nvt 0.593539 -0.219165\nvt 0.593539 -0.193777\nvt 0.587371 -0.219165\nvt 0.587371 -0.193777\nvt 0.581204 -0.219165\nvt 0.581204 -0.193777\nvt 0.575036 -0.219165\nvt 0.575036 -0.193777\nvt 0.568869 -0.219165\nvt 0.568869 -0.193777\nvt 0.562701 -0.219165\nvt 0.562701 -0.193777\nvt 0.556533 -0.219165\nvt 0.556533 -0.193777\nvt 0.550365 -0.219165\nvt 0.550365 -0.193777\nvt 0.544196 -0.219165\nvt 0.544196 -0.193777\nvt 0.642881 -0.193777\nvt 0.642881 -0.219165\nvt 0.636712 -0.219165\nvt 0.636712 -0.193777\nvt 0.038320 -0.750509\nvt 0.035937 -0.756198\nvt 0.031558 -0.760543\nvt 0.025850 -0.762881\nvt 0.019681 -0.762856\nvt 0.013992 -0.760473\nvt 0.009647 -0.756094\nvt 0.007310 -0.750386\nvt 0.007334 -0.744217\nvt 0.009717 -0.738528\nvt 0.014096 -0.734183\nvt 0.019804 -0.731846\nvt 0.025973 -0.731870\nvt 0.031662 -0.734253\nvt 0.036007 -0.738632\nvt 0.038345 -0.744341\nvt 0.162773 -0.383667\nvt 0.162773 -0.400937\nvt 0.158301 -0.400937\nvt 0.158301 -0.383667\nvt 0.153829 -0.400937\nvt 0.153829 -0.383667\nvt 0.149357 -0.400937\nvt 0.149357 -0.383667\nvt 0.144885 -0.400937\nvt 0.144885 -0.383667\nvt 0.140413 -0.400937\nvt 0.140413 -0.383667\nvt 0.135942 -0.400937\nvt 0.135942 -0.383667\nvt 0.131470 -0.400937\nvt 0.131470 -0.383667\nvt 0.126998 -0.400937\nvt 0.126998 -0.383667\nvt 0.122526 -0.400937\nvt 0.122526 -0.383667\nvt 0.118054 -0.400937\nvt 0.118054 -0.383667\nvt 0.171717 -0.383667\nvt 0.171717 -0.400937\nvt 0.167245 -0.400937\nvt 0.167245 -0.383667\nvt 0.255547 -0.175604\nvt 0.251659 -0.173396\nvt 0.249395 -0.169540\nvt 0.249363 -0.165068\nvt 0.251571 -0.161180\nvt 0.255428 -0.158916\nvt 0.259900 -0.158884\nvt 0.263788 -0.161092\nvt 0.266052 -0.164949\nvt 0.266084 -0.169420\nvt 0.263876 -0.173309\nvt 0.260019 -0.175573\nvt 0.985558 -0.509213\nvt 0.985558 -0.534600\nvt 0.983017 -0.534600\nvt 0.983017 -0.509213\nvt 0.980477 -0.534600\nvt 0.980477 -0.509213\nvt 0.977936 -0.534600\nvt 0.977936 -0.509213\nvt 0.975396 -0.534600\nvt 0.975396 -0.509213\nvt 0.972856 -0.534600\nvt 0.972856 -0.509213\nvt 0.970315 -0.534600\nvt 0.970315 -0.509213\nvt 0.995719 -0.509213\nvt 0.995719 -0.534600\nvt 0.993179 -0.534600\nvt 0.993179 -0.509213\nvt 0.990638 -0.534600\nvt 0.990638 -0.509213\nvt 0.988098 -0.534600\nvt 0.988098 -0.509213\nvt 0.609241 -0.091988\nvt 0.611296 -0.090495\nvt 0.613836 -0.090495\nvt 0.615892 -0.091988\nvt 0.616677 -0.094404\nvt 0.615892 -0.096820\nvt 0.613836 -0.098314\nvt 0.611296 -0.098314\nvt 0.609241 -0.096820\nvt 0.608456 -0.094404\nvt 0.066439 -0.352266\nvt 0.066439 -0.377653\nvt 0.060983 -0.377653\nvt 0.060983 -0.352266\nvt 0.055527 -0.377653\nvt 0.055527 -0.352266\nvt 0.050072 -0.377653\nvt 0.050072 -0.352266\nvt 0.044616 -0.377653\nvt 0.044616 -0.352266\nvt 0.039160 -0.377653\nvt 0.039160 -0.352266\nvt 0.033705 -0.377653\nvt 0.033705 -0.352266\nvt 0.028249 -0.377653\nvt 0.028249 -0.352266\nvt 0.022794 -0.377653\nvt 0.022794 -0.352266\nvt 0.017338 -0.377653\nvt 0.017338 -0.352266\nvt 0.011882 -0.377653\nvt 0.011882 -0.352266\nvt 0.077350 -0.352266\nvt 0.077350 -0.377653\nvt 0.071894 -0.377653\nvt 0.071894 -0.352266\nvt 0.275858 -0.796202\nvt 0.278552 -0.791458\nvt 0.283257 -0.788697\nvt 0.288713 -0.788658\nvt 0.293457 -0.791352\nvt 0.296218 -0.796057\nvt 0.296257 -0.801512\nvt 0.293564 -0.806256\nvt 0.288858 -0.809018\nvt 0.283403 -0.809057\nvt 0.278659 -0.806363\nvt 0.275897 -0.801658\nvt 0.229246 -0.204841\nvt 0.229246 -0.185826\nvt 0.233339 -0.185826\nvt 0.233339 -0.204841\nvt 0.237432 -0.185826\nvt 0.237432 -0.204841\nvt 0.241525 -0.185826\nvt 0.241525 -0.204841\nvt 0.245618 -0.185826\nvt 0.245618 -0.204841\nvt 0.249711 -0.185826\nvt 0.249711 -0.204841\nvt 0.253804 -0.185826\nvt 0.253804 -0.204841\nvt 0.257898 -0.185826\nvt 0.257898 -0.204841\nvt 0.261991 -0.185826\nvt 0.261991 -0.204841\nvt 0.266084 -0.185826\nvt 0.266084 -0.204841\nvt 0.216966 -0.204841\nvt 0.216966 -0.185826\nvt 0.221059 -0.185826\nvt 0.221059 -0.204841\nvt 0.225152 -0.185826\nvt 0.225152 -0.204841\nvt 0.237340 -0.174188\nvt 0.233781 -0.172167\nvt 0.231709 -0.168637\nvt 0.231680 -0.164544\nvt 0.233701 -0.160985\nvt 0.237231 -0.158913\nvt 0.241324 -0.158884\nvt 0.244883 -0.160905\nvt 0.246955 -0.164435\nvt 0.246985 -0.168528\nvt 0.244964 -0.172087\nvt 0.241434 -0.174159\nvt 0.366231 -0.900065\nvt 0.366231 -0.874507\nvt 0.371414 -0.874507\nvt 0.371414 -0.900065\nvt 0.376597 -0.874507\nvt 0.376597 -0.900065\nvt 0.381780 -0.874507\nvt 0.381780 -0.900065\nvt 0.386962 -0.874507\nvt 0.386962 -0.900065\nvt 0.392144 -0.874507\nvt 0.392144 -0.900065\nvt 0.397327 -0.874507\nvt 0.397327 -0.900065\nvt 0.402509 -0.874507\nvt 0.402509 -0.900065\nvt 0.407692 -0.874507\nvt 0.407692 -0.900065\nvt 0.412874 -0.874507\nvt 0.412874 -0.900065\nvt 0.418057 -0.874507\nvt 0.418057 -0.900065\nvt 0.423239 -0.874507\nvt 0.423239 -0.900065\nvt 0.428422 -0.874507\nvt 0.428422 -0.900065\nvt 0.433605 -0.874507\nvt 0.433605 -0.900065\nvt 0.438788 -0.874507\nvt 0.438788 -0.900065\nvt 0.355865 -0.900065\nvt 0.355865 -0.874507\nvt 0.361049 -0.874507\nvt 0.361049 -0.900065\nvt 0.241716 -0.852590\nvt 0.236935 -0.850587\nvt 0.233284 -0.846908\nvt 0.231320 -0.842111\nvt 0.231341 -0.836928\nvt 0.233343 -0.832147\nvt 0.237023 -0.828497\nvt 0.241819 -0.826532\nvt 0.247002 -0.826553\nvt 0.251783 -0.828555\nvt 0.255434 -0.832235\nvt 0.257398 -0.837032\nvt 0.257378 -0.842215\nvt 0.255375 -0.846995\nvt 0.251696 -0.850646\nvt 0.246899 -0.852611\nvt 0.331647 -0.947358\nvt 0.300977 -0.947358\nvt 0.300977 -0.943252\nvt 0.331647 -0.943252\nvt 0.300977 -0.939145\nvt 0.331647 -0.939145\nvt 0.300977 -0.935038\nvt 0.331647 -0.935038\nvt 0.300977 -0.930931\nvt 0.331647 -0.930931\nvt 0.300977 -0.926825\nvt 0.331647 -0.926825\nvt 0.300977 -0.922718\nvt 0.331647 -0.922718\nvt 0.300977 -0.918611\nvt 0.331647 -0.918611\nvt 0.300977 -0.914504\nvt 0.331647 -0.914504\nvt 0.300977 -0.910397\nvt 0.331647 -0.910397\nvt 0.331647 -0.951465\nvt 0.300977 -0.951465\nvt 0.536755 -0.042480\nvt 0.539169 -0.045802\nvt 0.539169 -0.049909\nvt 0.536755 -0.053231\nvt 0.532849 -0.054500\nvt 0.528944 -0.053231\nvt 0.526530 -0.049909\nvt 0.526530 -0.045802\nvt 0.528944 -0.042480\nvt 0.532849 -0.041211\nvt 0.150550 -0.168470\nvt 0.120446 -0.168470\nvt 0.120446 -0.163012\nvt 0.150550 -0.163012\nvt 0.120446 -0.157554\nvt 0.150550 -0.157554\nvt 0.120446 -0.152096\nvt 0.150550 -0.152096\nvt 0.120446 -0.146638\nvt 0.150550 -0.146638\nvt 0.120446 -0.141180\nvt 0.150550 -0.141180\nvt 0.120446 -0.135722\nvt 0.150550 -0.135722\nvt 0.120446 -0.130264\nvt 0.150550 -0.130264\nvt 0.120446 -0.124806\nvt 0.150550 -0.124806\nvt 0.120446 -0.119348\nvt 0.150550 -0.119348\nvt 0.120446 -0.113890\nvt 0.150550 -0.113890\nvt 0.150550 -0.179386\nvt 0.120446 -0.179386\nvt 0.120446 -0.173928\nvt 0.150550 -0.173928\nvt 0.504345 -0.041211\nvt 0.507356 -0.042921\nvt 0.509109 -0.045907\nvt 0.509134 -0.049369\nvt 0.507424 -0.052380\nvt 0.504438 -0.054133\nvt 0.500975 -0.054157\nvt 0.497965 -0.052448\nvt 0.496212 -0.049461\nvt 0.496187 -0.045999\nvt 0.497897 -0.042988\nvt 0.500883 -0.041235\nvt 0.943999 -0.713224\nvt 0.941415 -0.718319\nvt 0.938785 -0.715959\nvt 0.940542 -0.712496\nvt 0.943689 -0.707519\nvt 0.940331 -0.708618\nvt 0.940567 -0.702734\nvt 0.938209 -0.705365\nvt 0.935472 -0.700151\nvt 0.934744 -0.703608\nvt 0.929768 -0.700460\nvt 0.930865 -0.703818\nvt 0.924982 -0.703579\nvt 0.927611 -0.705939\nvt 0.922397 -0.708674\nvt 0.925854 -0.709402\nvt 0.922707 -0.714378\nvt 0.926065 -0.713280\nvt 0.925829 -0.719163\nvt 0.928188 -0.716533\nvt 0.930924 -0.721747\nvt 0.931652 -0.718289\nvt 0.936628 -0.721438\nvt 0.935531 -0.718080\nvt 0.438759 -0.916011\nvt 0.437499 -0.916358\nvt 0.435746 -0.913372\nvt 0.436664 -0.912441\nvt 0.432735 -0.911662\nvt 0.433065 -0.910397\nvt 0.429273 -0.911687\nvt 0.428926 -0.910427\nvt 0.426287 -0.913439\nvt 0.425356 -0.912522\nvt 0.424577 -0.916450\nvt 0.423312 -0.916121\nvt 0.424602 -0.919913\nvt 0.423342 -0.920260\nvt 0.426354 -0.922899\nvt 0.425437 -0.923829\nvt 0.429365 -0.924608\nvt 0.429036 -0.925873\nvt 0.432828 -0.924584\nvt 0.433175 -0.925843\nvt 0.435814 -0.922831\nvt 0.436745 -0.923748\nvt 0.437524 -0.919820\nvt 0.438788 -0.920149\nvt 0.914592 -0.975466\nvt 0.914592 -0.992279\nvt 0.911130 -0.992279\nvt 0.911130 -0.975466\nvt 0.907667 -0.992279\nvt 0.907667 -0.975466\nvt 0.904205 -0.992279\nvt 0.904205 -0.975466\nvt 0.900742 -0.992279\nvt 0.900742 -0.975466\nvt 0.897280 -0.992279\nvt 0.897280 -0.975466\nvt 0.893817 -0.992279\nvt 0.893817 -0.975466\nvt 0.890355 -0.992279\nvt 0.890355 -0.975466\nvt 0.886892 -0.992279\nvt 0.886892 -0.975466\nvt 0.883430 -0.992279\nvt 0.883430 -0.975466\nvt 0.879967 -0.992279\nvt 0.879967 -0.975466\nvt 0.876505 -0.992279\nvt 0.876505 -0.975466\nvt 0.918055 -0.975466\nvt 0.918055 -0.992279\nvn 0.0000 -1.0000 0.0000\nvn 0.0148 -0.9994 -0.0298\nvn 0.0112 -0.9998 -0.0180\nvn 0.0789 -0.9968 -0.0154\nvn 0.0862 -0.9961 -0.0167\nvn 0.0104 -0.9998 -0.0145\nvn 0.0773 -0.9969 -0.0147\nvn 0.1059 -0.9942 -0.0148\nvn 0.1069 -0.9941 -0.0140\nvn 0.1140 -0.9934 -0.0119\nvn 0.0123 -0.9998 0.0150\nvn 0.0147 -0.9998 0.0153\nvn 0.0882 -0.9960 0.0146\nvn 0.0831 -0.9964 0.0173\nvn 0.0170 -0.9998 0.0120\nvn 0.0852 -0.9963 0.0002\nvn 0.1103 -0.9939 -0.0036\nvn 0.1203 -0.9926 0.0129\nvn 0.1144 -0.9933 0.0185\nvn 0.4281 0.8695 -0.2460\nvn 0.2053 0.9503 -0.2337\nvn 0.1991 0.9609 -0.1924\nvn 0.3591 0.9170 -0.1739\nvn 0.1310 0.9612 -0.2427\nvn 0.1222 0.9720 -0.2005\nvn 0.1205 0.9823 -0.1433\nvn 0.2132 0.9673 -0.1370\nvn 0.3824 0.9162 -0.1199\nvn 0.5926 0.8053 -0.0180\nvn 0.2790 0.9601 -0.0180\nvn 0.2433 0.9699 -0.0111\nvn 0.4034 0.9146 -0.0248\nvn 0.1303 0.9913 -0.0175\nvn 0.1269 0.9919 0.0000\nvn 0.1222 0.9913 0.0485\nvn 0.2359 0.9709 0.0417\nvn 0.4114 0.9107 0.0370\nvn 0.2597 0.9653 0.0274\nvn 0.1409 0.9897 0.0223\nvn 0.2369 0.9677 0.0866\nvn 0.3993 0.9095 0.1157\nvn 0.0387 0.9984 0.0400\nvn 0.0564 0.9967 0.0578\nvn 0.0762 0.9928 0.0919\nvn 0.2284 0.9666 0.1165\nvn 0.4513 0.8807 0.1436\nvn 0.6013 -0.4903 -0.6309\nvn 0.5038 -0.5232 -0.6873\nvn 0.5795 -0.1284 -0.8048\nvn 0.6795 -0.1314 -0.7218\nvn 0.4352 -0.5428 -0.7183\nvn 0.5038 -0.1166 -0.8559\nvn 0.4875 0.3310 -0.8079\nvn 0.5635 0.2857 -0.7751\nvn 0.6668 0.2447 -0.7039\nvn 0.6723 0.0860 -0.7353\nvn 0.5871 0.0334 -0.8088\nvn 0.5918 0.0902 -0.8010\nvn 0.6818 0.1400 -0.7180\nvn 0.4888 -0.0282 -0.8719\nvn 0.5058 0.0504 -0.8612\nvn 0.5087 0.1093 -0.8539\nvn 0.5949 0.1434 -0.7909\nvn 0.6843 0.1852 -0.7052\nvn 0.0000 -0.0435 0.9990\nvn 0.0325 -0.0435 0.9985\nvn 0.0275 -0.0444 0.9986\nvn 0.0731 -0.0709 0.9948\nvn 0.0457 -0.0474 0.9978\nvn 0.0829 -0.0223 0.9963\nvn 0.0287 -0.0435 0.9986\nvn 0.0000 0.6313 0.7755\nvn 0.0423 0.6323 0.7736\nvn 0.0349 0.1518 0.9878\nvn 0.0000 0.1594 0.9872\nvn 0.0906 0.6137 0.7843\nvn 0.0396 0.0995 0.9942\nvn 0.0505 0.1291 0.9903\nvn 0.0260 0.1235 0.9920\nvn 0.0000 0.1235 0.9923\nvn 0.5775 -0.4813 0.6594\nvn 0.6358 -0.4311 0.6402\nvn 0.7375 -0.0846 0.6699\nvn 0.6844 -0.1051 0.7214\nvn 0.7162 -0.3366 0.6113\nvn 0.8316 -0.0595 0.5521\nvn 0.8431 -0.0221 0.5373\nvn 0.7562 -0.0335 0.6535\nvn 0.6941 -0.0432 0.7185\nvn 0.5807 -0.8132 0.0375\nvn 0.5780 -0.8157 0.0228\nvn 0.9980 -0.0602 0.0190\nvn 0.9971 -0.0617 0.0436\nvn 0.5751 -0.8179 0.0177\nvn 0.9981 -0.0596 0.0109\nvn 0.6646 0.7472 -0.0066\nvn 0.6679 0.7443 -0.0011\nvn 0.6718 0.7406 0.0135\nvn 0.5658 -0.8243 -0.0177\nvn 0.6523 -0.7576 -0.0240\nvn 0.9975 -0.0594 0.0373\nvn 0.9985 -0.0529 0.0090\nvn 0.5945 -0.8040 0.0045\nvn 0.9883 -0.1509 0.0187\nvn 0.9705 0.1588 0.1813\nvn 0.7489 0.6501 0.1283\nvn 0.6427 0.7652 0.0359\nvn 0.7532 0.2389 0.6129\nvn 0.7503 0.3310 0.5722\nvn 0.8234 0.2937 0.4856\nvn 0.8026 0.1572 0.5753\nvn 0.8816 0.3123 0.3537\nvn 0.8802 0.3551 0.3147\nvn 0.8897 0.3964 0.2264\nvn 0.8632 0.3367 0.3762\nvn 0.8501 0.2889 0.4403\nvn 0.8987 0.3428 0.2733\nvn 0.8875 0.4272 0.1727\nvn 0.8936 0.4149 0.1713\nvn 0.8386 0.5365 0.0937\nvn 0.8747 0.4840 0.0248\nvn 0.9012 0.4286 0.0631\nvn 0.9985 0.0332 0.0439\nvn 0.9991 0.0387 0.0168\nvn 0.9898 0.1413 0.0143\nvn 0.9901 0.1339 0.0412\nvn 0.9991 0.0399 0.0080\nvn 0.9896 0.1438 0.0063\nvn 0.9729 0.2310 0.0025\nvn 0.9741 0.2257 0.0104\nvn 0.9759 0.2159 0.0325\nvn 0.9923 0.0687 0.1025\nvn 0.9660 0.1339 0.2210\nvn 0.9583 0.2492 0.1394\nvn 0.9865 0.1518 0.0603\nvn 0.9500 0.1957 0.2433\nvn 0.9199 0.3496 0.1778\nvn 0.9170 0.3868 0.0973\nvn 0.9516 0.3016 0.0593\nvn 0.9683 0.2483 0.0262\nvn 0.3234 0.9421 -0.0884\nvn 0.2076 0.9763 -0.0615\nvn 0.2060 0.9722 -0.1111\nvn 0.3299 0.9358 -0.1245\nvn 0.1283 0.9879 -0.0866\nvn 0.1561 0.9799 -0.1236\nvn 0.2094 0.9566 -0.2025\nvn 0.2030 0.9637 -0.1735\nvn 0.4589 0.8591 -0.2265\nvn 0.0000 0.9983 0.0577\nvn 0.0019 0.9984 0.0570\nvn 0.0077 0.9867 0.1624\nvn 0.0000 0.9860 0.1666\nvn 0.0054 0.9985 0.0537\nvn 0.0167 0.9883 0.1518\nvn 0.0345 0.9633 0.2661\nvn 0.0148 0.9602 0.2790\nvn 0.0000 0.9596 0.2812\nvn 0.4319 0.9012 -0.0344\nvn 0.3098 0.9507 -0.0105\nvn 0.1894 0.9807 0.0483\nvn 0.4661 0.8845 -0.0224\nvn 0.3670 0.9298 -0.0283\nvn 0.3694 0.9291 0.0183\nvn 0.3001 0.9530 0.0421\nvn 0.2289 0.9690 0.0925\nvn 0.7353 0.6773 -0.0241\nvn 0.7193 0.6940 -0.0319\nvn 0.5810 0.8121 -0.0528\nvn 0.6419 0.7661 -0.0325\nvn 0.7008 0.7120 -0.0434\nvn 0.5617 0.8257 -0.0523\nvn 0.5826 0.8109 -0.0542\nvn 0.5835 0.8096 -0.0632\nvn 0.7454 0.6660 -0.0287\nvn 0.0000 0.9997 -0.0224\nvn 0.0000 1.0000 -0.0073\nvn 0.0144 0.9998 -0.0073\nvn 0.0150 0.9996 -0.0220\nvn 0.0000 1.0000 0.0078\nvn 0.0128 0.9999 0.0069\nvn 0.0257 0.9997 0.0020\nvn 0.0310 0.9995 -0.0073\nvn 0.0314 0.9993 -0.0208\nvn 0.7847 -0.6199 0.0005\nvn 0.7916 -0.5856 0.1747\nvn 0.9874 0.1504 -0.0485\nvn 0.9899 0.1416 0.0015\nvn 0.7934 -0.5064 0.3377\nvn 0.9844 0.1392 -0.1075\nvn 0.7057 0.6055 -0.3678\nvn 0.7027 0.6819 -0.2029\nvn 0.7416 0.6706 -0.0160\nvn 0.1367 0.6667 -0.7327\nvn 0.1161 0.6644 -0.7383\nvn 0.0972 0.8093 -0.5792\nvn 0.1171 0.8126 -0.5709\nvn 0.0916 0.6602 -0.7454\nvn 0.0759 0.8058 -0.5872\nvn 0.0625 0.8792 -0.4724\nvn 0.0851 0.8794 -0.4684\nvn 0.1241 0.8859 -0.4469\nvn 0.0666 0.9713 -0.2282\nvn 0.0410 0.9742 -0.2217\nvn 0.0345 0.9833 -0.1786\nvn 0.0459 0.9824 -0.1808\nvn 0.0313 0.9744 -0.2224\nvn 0.0300 0.9836 -0.1777\nvn 0.0307 0.9900 -0.1377\nvn 0.0303 0.9901 -0.1366\nvn 0.0315 0.9897 -0.1399\nvn 0.0286 0.9995 -0.0108\nvn 0.0337 0.9994 -0.0066\nvn 0.0219 0.9995 0.0223\nvn 0.0185 0.9997 0.0151\nvn 0.0334 0.9994 -0.0029\nvn 0.0238 0.9993 0.0294\nvn 0.0101 0.9970 0.0762\nvn 0.0089 0.9975 0.0693\nvn 0.0068 0.9980 0.0626\nvn 0.0156 0.9988 0.0452\nvn 0.0085 0.9987 0.0499\nvn 0.0025 0.9975 0.0709\nvn 0.0175 0.9982 0.0563\nvn 0.0064 0.9960 0.0884\nvn -0.0134 0.9888 0.1483\nvn -0.0124 0.9945 0.1035\nvn 0.0272 0.9955 0.0903\nvn 0.2468 -0.5727 -0.7817\nvn 0.1561 -0.5795 -0.7999\nvn 0.1858 -0.1023 -0.9772\nvn 0.2887 -0.1031 -0.9518\nvn 0.0999 -0.5808 -0.8079\nvn 0.1208 -0.1015 -0.9875\nvn 0.1119 0.4030 -0.9083\nvn 0.1736 0.3991 -0.9003\nvn 0.2752 0.3890 -0.8791\nvn 0.1615 -0.1105 -0.9807\nvn 0.1457 -0.1094 -0.9832\nvn 0.1459 -0.0677 -0.9870\nvn 0.1612 -0.0771 -0.9839\nvn 0.1039 -0.1083 -0.9886\nvn 0.1035 -0.0676 -0.9923\nvn 0.1036 -0.0444 -0.9936\nvn 0.1454 -0.0439 -0.9884\nvn 0.1616 -0.0438 -0.9859\nvn 0.2547 -0.0438 0.9660\nvn 0.3672 -0.0423 0.9292\nvn 0.3861 -0.0420 0.9215\nvn 0.2526 -0.0436 0.9666\nvn 0.4631 -0.0398 0.8854\nvn 0.4592 -0.0414 0.8873\nvn -0.4123 -0.3985 0.8192\nvn -0.0896 -0.7625 0.6407\nvn 0.1641 -0.7511 0.6394\nvn 0.0710 0.9926 -0.0986\nvn 0.0270 0.9952 -0.0938\nvn 0.0376 0.9875 -0.1530\nvn 0.0850 0.9847 -0.1517\nvn 0.0098 0.9956 -0.0932\nvn 0.0180 0.9872 -0.1587\nvn 0.0355 0.9639 -0.2638\nvn 0.0574 0.9651 -0.2555\nvn 0.1131 0.9622 -0.2478\nvn 0.0243 0.9988 0.0408\nvn 0.0476 0.9938 0.0999\nvn 0.0344 0.9926 0.1160\nvn 0.0608 0.9943 0.0875\nvn 0.1222 0.9776 0.1713\nvn 0.0978 0.9767 0.1908\nvn 0.0747 0.9733 0.2171\nvn 0.1120 0.9888 -0.0988\nvn 0.0988 0.9919 -0.0797\nvn 0.0666 0.9947 -0.0783\nvn 0.1127 0.9909 -0.0730\nvn 0.1068 0.9914 -0.0748\nvn 0.0964 0.9922 -0.0792\nvn 0.0780 0.9950 -0.0619\nvn 0.0103 -0.9999 -0.0038\nvn 0.0107 -0.9999 0.0084\nvn 0.0774 -0.9969 0.0085\nvn 0.0764 -0.9970 -0.0037\nvn 0.0114 -0.9998 0.0139\nvn 0.0790 -0.9968 0.0143\nvn 0.1079 -0.9940 0.0144\nvn 0.1057 -0.9944 0.0087\nvn 0.1046 -0.9945 -0.0036\nvn 0.0270 0.9958 -0.0877\nvn 0.0501 0.9949 -0.0877\nvn 0.0520 0.9881 -0.1445\nvn 0.0299 0.9983 -0.0501\nvn 0.0526 0.9974 -0.0484\nvn 0.1281 0.9907 -0.0464\nvn 0.1243 0.9884 -0.0867\nvn 0.5700 -0.8216 -0.0020\nvn 0.5638 -0.8258 -0.0118\nvn 0.9982 -0.0587 -0.0074\nvn 0.9981 -0.0609 -0.0002\nvn 0.5558 -0.8312 -0.0139\nvn 0.9984 -0.0565 -0.0069\nvn 0.6445 0.7646 -0.0001\nvn 0.6537 0.7567 -0.0011\nvn 0.6611 0.7502 -0.0027\nvn 0.9991 0.0403 -0.0060\nvn 0.9991 0.0392 -0.0144\nvn 0.9902 0.1385 -0.0168\nvn 0.9895 0.1440 -0.0092\nvn 0.9991 0.0378 -0.0154\nvn 0.9910 0.1325 -0.0196\nvn 0.9746 0.2227 -0.0213\nvn 0.9733 0.2289 -0.0172\nvn 0.9720 0.2347 -0.0098\nvn 0.6710 0.7406 -0.0335\nvn 0.6633 0.7478 -0.0278\nvn 0.5261 0.8498 -0.0327\nvn 0.5367 0.8429 -0.0387\nvn 0.6412 0.7661 -0.0428\nvn 0.5061 0.8616 -0.0390\nvn 0.5173 0.8543 -0.0496\nvn 0.5461 0.8368 -0.0390\nvn 0.5647 0.8241 -0.0430\nvn 0.0000 0.9903 -0.1391\nvn 0.0000 0.9957 -0.0922\nvn 0.0242 0.9955 -0.0912\nvn 0.0229 0.9900 -0.1388\nvn 0.0000 0.9985 -0.0550\nvn 0.0258 0.9982 -0.0547\nvn 0.0344 0.9980 -0.0532\nvn 0.0322 0.9954 -0.0900\nvn 0.5549 0.7820 -0.2836\nvn 0.4672 0.8369 -0.2850\nvn 0.2089 0.9381 -0.2761\nvn 0.1935 0.9379 -0.2879\nvn 0.4019 0.8980 -0.1788\nvn 0.1939 0.9510 -0.2408\nvn 0.1584 0.9551 -0.2501\nvn 0.1816 0.9429 -0.2790\nvn 0.1921 0.9344 -0.2999\nvn 0.8532 -0.4866 0.1876\nvn 0.8801 -0.4373 -0.1847\nvn 0.9729 -0.2235 -0.0592\nvn 0.9469 -0.2141 0.2399\nvn 0.7958 -0.3440 -0.4983\nvn 0.8699 -0.1817 -0.4584\nvn 0.8587 0.0233 -0.5119\nvn 0.9944 -0.0065 -0.1048\nvn 0.9695 0.0149 0.2444\nvn 0.0000 0.9664 -0.2570\nvn 0.0000 0.9968 -0.0801\nvn 0.0171 0.9966 -0.0799\nvn 0.0253 0.9664 -0.2557\nvn 0.0000 0.9987 -0.0497\nvn 0.0155 0.9986 -0.0495\nvn 0.0347 0.9982 -0.0494\nvn 0.0393 0.9960 -0.0795\nvn 0.0627 0.9654 -0.2530\nvn 0.7967 -0.2684 -0.5415\nvn 0.7878 -0.4098 -0.4598\nvn 0.9958 0.0714 0.0569\nvn 0.9993 0.0139 0.0353\nvn 0.7839 -0.5289 -0.3251\nvn 0.9913 0.1048 0.0788\nvn 0.8267 0.5080 0.2417\nvn 0.8621 0.3825 0.3322\nvn 0.6897 -0.5381 -0.4845\nvn 0.7346 -0.6635 -0.1420\nvn 0.2323 -0.9554 -0.1825\nvn 0.3041 -0.9148 -0.2658\nvn 0.1733 -0.9848 0.0100\nvn 0.1282 -0.9917 -0.0092\nvn 0.0933 -0.9822 -0.1629\nvn 0.0564 -0.9238 -0.3787\nvn 0.0000 0.9995 -0.0304\nvn 0.0000 0.9981 -0.0618\nvn 0.0045 0.9980 -0.0629\nvn 0.0051 0.9995 -0.0312\nvn 0.0000 0.9954 -0.0955\nvn 0.0045 0.9955 -0.0945\nvn 0.0081 0.9979 -0.0645\nvn 0.0121 0.9992 -0.0370\nvn 0.3116 0.9489 -0.0495\nvn 0.2863 0.9567 -0.0521\nvn 0.2017 0.9766 -0.0746\nvn 0.2129 0.9749 -0.0646\nvn 0.2729 0.9583 -0.0842\nvn 0.1983 0.9747 -0.1024\nvn 0.1146 0.9875 -0.1079\nvn 0.1079 0.9903 -0.0873\nvn 0.7294 -0.5242 0.4395\nvn 0.7455 -0.6545 0.1258\nvn 0.9899 -0.1357 0.0406\nvn 0.7988 -0.1894 0.5709\nvn 0.6150 -0.7871 -0.0475\nvn 0.9892 -0.1330 -0.0613\nvn 0.9741 0.1362 -0.1803\nvn 0.9998 -0.0003 0.0193\nvn 0.8170 -0.0043 0.5766\nvn 0.7475 0.6643 0.0043\nvn 0.7651 0.6437 0.0150\nvn 0.6239 0.7815 0.0024\nvn 0.6107 0.7918 -0.0076\nvn 0.7618 0.6477 0.0116\nvn 0.6202 0.7844 -0.0023\nvn 0.6144 0.7889 -0.0062\nvn 0.6196 0.7849 0.0040\nvn 0.6063 0.7952 -0.0021\nvn 0.0425 -0.9988 0.0245\nvn 0.0769 -0.9970 0.0022\nvn 0.1189 -0.9928 -0.0133\nvn 0.0578 -0.9983 0.0079\nvn 0.0827 -0.9966 -0.0043\nvn -0.0011 0.9942 0.1073\nvn 0.0285 0.9944 0.1021\nvn 0.0335 0.9979 0.0552\nvn 0.0026 0.9875 0.1578\nvn 0.0313 0.9875 0.1546\nvn 0.1133 0.9829 0.1447\nvn 0.1165 0.9886 0.0956\nvn 0.0000 0.9964 0.0846\nvn 0.0000 0.9920 0.1263\nvn -0.0034 0.9925 0.1220\nvn 0.0074 0.9965 0.0834\nvn 0.0000 0.9865 0.1634\nvn -0.0100 0.9866 0.1629\nvn -0.0070 0.9869 0.1609\nvn -0.0032 0.9931 0.1169\nvn 0.6031 -0.7976 0.0004\nvn 0.5798 -0.8139 0.0372\nvn 0.9974 -0.0592 0.0407\nvn 0.9985 -0.0522 -0.0131\nvn 0.6692 0.7430 0.0100\nvn 0.6833 0.7294 -0.0319\nvn 0.9908 0.0981 -0.0937\nvn 0.9992 0.0354 0.0195\nvn 0.9895 0.1402 0.0340\nvn 0.9834 0.1787 -0.0317\nvn 0.9771 0.2076 0.0456\nvn 0.9686 0.2480 0.0150\nvn 0.7525 0.6586 0.0017\nvn 0.6144 0.7890 -0.0068\nvn 0.5982 0.8012 -0.0138\nvn -0.0397 -0.9973 0.0621\nvn -0.0232 -0.9872 0.1573\nvn 0.2546 -0.8934 0.3702\nvn 0.1969 -0.9314 0.3060\nvn 0.0406 -0.9784 0.2025\nvn 0.3004 -0.8377 0.4560\nvn 0.8383 -0.2841 0.4654\nvn 0.8724 -0.0493 0.4863\nvn 0.8796 -0.0491 0.4731\nvn 0.8245 -0.2434 0.5107\nvn 0.8893 -0.0132 0.4570\nvn 0.8913 -0.0163 0.4531\nvn 0.7419 0.5858 0.3261\nvn 0.6817 0.6370 0.3599\nvn 0.6743 0.6334 0.3795\nvn 0.7515 0.5579 0.3522\nvn 0.5712 0.5952 0.5651\nvn 0.4768 0.7866 0.3922\nvn 0.6325 0.4962 0.5947\nvn 0.7662 0.3883 0.5119\nvn 0.8474 0.2707 0.4567\nvn 0.3703 0.7525 0.5446\nvn 0.2831 0.8913 0.3541\nvn 0.3324 0.7451 0.5781\nvn 0.2080 0.9119 0.3538\nvn 0.4117 0.5750 0.7070\nvn 0.5017 0.5535 0.6647\nvn 0.1721 0.7756 0.6073\nvn 0.1178 0.7886 0.6035\nvn 0.0749 0.9327 0.3526\nvn 0.1037 0.9325 0.3459\nvn 0.0346 0.9149 0.4023\nvn 0.0674 0.6335 0.7708\nvn 0.1336 0.6272 0.7673\nvn 0.2326 0.6116 0.7562\nvn 0.0000 -0.9982 -0.0603\nvn -0.0022 -0.9982 -0.0603\nvn 0.0008 -0.9998 0.0205\nvn 0.0000 -0.9998 0.0204\nvn -0.0054 -0.9981 -0.0604\nvn 0.0020 -0.9998 0.0210\nvn 0.0430 -0.8687 0.4934\nvn 0.0175 -0.8689 0.4946\nvn 0.0000 -0.8683 0.4960\nvn -0.0261 -0.9980 -0.0566\nvn -0.0561 -0.9974 -0.0444\nvn 0.0732 -0.9948 0.0701\nvn 0.0027 -0.9996 0.0264\nvn -0.0509 -0.9985 -0.0207\nvn 0.1008 -0.9755 0.1957\nvn 0.5111 -0.5683 0.6447\nvn 0.3035 -0.8384 0.4527\nvn 0.1525 -0.8570 0.4921\nvn 0.0103 -0.9998 -0.0124\nvn 0.0767 -0.9969 -0.0125\nvn 0.1050 -0.9944 -0.0125\nvn 0.5455 -0.8379 -0.0152\nvn 0.9984 -0.0563 -0.0035\nvn 0.6351 0.7724 0.0067\nvn 0.9993 0.0353 0.0116\nvn 0.9911 0.1327 -0.0013\nvn 0.9755 0.2197 -0.0118\nvn 0.6130 0.7890 -0.0414\nvn 0.4758 0.8784 -0.0447\nvn 0.4571 0.8867 -0.0687\nvn 0.8118 -0.5837 0.0160\nvn 0.8135 -0.5577 0.1647\nvn 0.9883 0.1461 -0.0446\nvn 0.9886 0.1502 -0.0031\nvn 0.8131 -0.4964 0.3039\nvn 0.9863 0.1344 -0.0954\nvn 0.8166 0.5127 -0.2651\nvn 0.7989 0.5780 -0.1665\nvn 0.8159 0.5775 -0.0255\nvn 0.5611 0.8263 -0.0498\nvn 0.6102 0.7886 -0.0749\nvn 0.4882 0.8714 -0.0478\nvn 0.4414 0.8957 -0.0529\nvn 0.6612 0.7489 -0.0436\nvn 0.5702 0.8204 -0.0422\nvn 0.7003 0.7136 0.0193\nvn 0.4893 0.8721 -0.0037\nvn 0.4681 0.8834 -0.0219\nvn 0.2669 -0.0261 0.9633\nvn 0.2706 -0.0391 0.9619\nvn 0.1631 -0.0414 0.9857\nvn 0.1666 -0.0434 0.9850\nvn 0.2701 -0.0416 0.9619\nvn 0.1606 -0.0445 0.9860\nvn 0.0845 -0.0441 0.9954\nvn 0.0832 -0.0310 0.9960\nvn 0.8491 -0.0195 0.5278\nvn 0.7663 -0.0361 0.6414\nvn 0.8611 -0.0168 0.5081\nvn 0.7750 -0.0415 0.6305\nvn 0.7012 -0.0537 0.7109\nvn 0.6971 -0.0523 0.7150\nvn 0.6102 -0.0465 0.7908\nvn 0.6176 -0.0461 0.7851\nvn 0.6016 -0.0556 0.7969\nvn 0.5112 -0.0420 0.8584\nvn 0.5405 -0.0374 0.8405\nvn 0.5451 -0.0420 0.8373\nvn 0.9108 0.0161 0.4125\nvn 0.9062 -0.0054 0.4228\nvn 0.9389 0.0125 0.3438\nvn 0.9224 -0.0015 0.3862\nvn 0.9981 -0.0605 -0.0013\nvn 0.9993 -0.0368 -0.0029\nvn 0.9993 -0.0376 0.0060\nvn 0.9981 -0.0613 0.0071\nvn 0.9991 0.0405 0.0035\nvn 0.9992 -0.0382 0.0098\nvn 0.9980 -0.0618 0.0108\nvn 0.8059 -0.0502 -0.5899\nvn 0.8010 -0.1445 -0.5809\nvn 0.9998 0.0086 0.0160\nvn 0.9997 0.0020 0.0237\nvn 0.9621 0.0759 0.2619\nvn 0.9560 0.0109 0.2930\nvn 0.9983 -0.0571 -0.0092\nvn 0.9994 -0.0338 -0.0115\nvn 0.9993 -0.0355 -0.0096\nvn 0.9982 -0.0592 -0.0075\nvn 0.9876 -0.0402 -0.1513\nvn 0.9903 -0.0061 -0.1390\nvn 0.9663 0.0595 -0.2504\nvn 0.9594 -0.0017 -0.2819\nvn 0.9581 0.1946 -0.2102\nvn 0.9395 0.2444 -0.2402\nvn 0.9674 0.0921 -0.2359\nvn 0.9643 0.0248 -0.2635\nvn 0.9967 -0.0663 0.0465\nvn 0.9980 -0.0439 0.0454\nvn 0.9992 -0.0374 0.0106\nvn 0.9980 -0.0633 0.0071\nvn 0.9873 -0.0451 0.1521\nvn 0.9902 -0.0213 0.1381\nvn 0.9993 -0.0309 0.0198\nvn 0.9981 -0.0558 0.0251\nvn 0.0996 0.9659 -0.2387\nvn 0.0737 0.9787 -0.1917\nvn 0.0537 0.9984 -0.0153\nvn 0.0430 0.9990 0.0074\nvn 0.0338 0.9979 0.0558\nvn 0.0491 0.9949 0.0878\nvn 0.3500 -0.5607 -0.7504\nvn 0.4052 -0.1072 -0.9079\nvn 0.3884 0.3690 -0.8444\nvn 0.4064 -0.0829 -0.9099\nvn 0.4212 -0.0061 -0.9069\nvn 0.3567 -0.0936 -0.9295\nvn 0.3654 -0.0137 -0.9307\nvn 0.2751 0.1589 -0.9481\nvn 0.4248 0.0722 -0.9024\nvn 0.1329 0.9810 -0.1411\nvn 0.1765 0.9567 -0.2315\nvn 0.5825 -0.4936 0.6458\nvn 0.6241 -0.0989 0.7750\nvn 0.5459 -0.0821 0.8338\nvn 0.1196 0.9904 0.0693\nvn 0.1676 0.9762 0.1377\nvn 0.2243 0.9726 -0.0611\nvn 0.3428 0.9374 -0.0613\nvn 0.2410 0.9704 -0.0134\nvn 0.1312 0.9910 -0.0253\nvn 0.4008 0.9162 -0.0001\nvn 0.4014 0.9150 -0.0400\nvn 0.2289 0.9724 -0.0438\nvn 0.1321 0.9760 -0.1729\nvn 0.1862 0.9681 -0.1674\nvn 0.1982 0.9568 -0.2124\nvn 0.1393 0.9675 -0.2107\nvn 0.2415 0.9578 -0.1557\nvn 0.2450 0.9463 -0.2106\nvn 0.2835 0.9211 -0.2666\nvn 0.2204 0.9398 -0.2611\nvn 0.1535 0.9727 -0.1742\nvn 0.1308 0.9825 -0.1322\nvn 0.1241 0.9826 -0.1378\nvn 0.2552 0.9587 -0.1251\nvn 0.1910 0.9756 -0.1076\nvn 0.1476 0.9858 -0.0798\nvn 0.1146 0.9877 -0.1065\nvn 0.2203 0.9668 0.1298\nvn 0.2282 0.9698 0.0855\nvn 0.3953 0.9121 0.1080\nvn 0.4075 0.9103 0.0727\nvn 0.2541 0.7629 0.5944\nvn 0.1604 0.9218 0.3528\nvn 0.3360 0.5904 0.7338\nvn -0.0665 -0.9976 0.0183\nvn 0.1832 -0.9496 0.2545\nvn 0.4200 0.0774 0.9042\nvn 0.5053 0.0664 0.8603\nvn 0.2971 0.0905 0.9505\nvn 0.2972 -0.0339 0.9542\nvn 0.4256 -0.0386 0.9040\nvn 0.0493 0.9686 0.2435\nvn 0.1240 0.9655 0.2292\nvn 0.0216 0.9684 0.2483\nvn 0.0379 0.9476 0.3172\nvn 0.0643 0.9474 0.3133\nvn 0.1283 0.9489 0.2882\nvn 0.7116 -0.0309 -0.7019\nvn 0.7293 -0.1553 -0.6663\nvn 0.0000 0.0000 -1.0000\nvn 0.5377 -0.5766 -0.6151\nvn 0.0000 -0.1305 -0.9914\nvn 0.0000 -0.1267 -0.9919\nvn 0.0532 -0.1281 -0.9903\nvn 0.0545 -0.1312 -0.9898\nvn 0.0000 -0.1065 -0.9943\nvn 0.0521 -0.1070 -0.9929\nvn 0.1050 -0.1298 -0.9860\nvn 0.1068 -0.1333 -0.9853\nvn 0.3563 -0.1333 -0.9248\nvn 0.3521 -0.1255 -0.9275\nvn 0.4000 -0.1234 -0.9082\nvn 0.4002 -0.1373 -0.9061\nvn 0.4299 -0.1183 -0.8951\nvn 0.4342 -0.1430 -0.8893\nvn 0.0000 1.0000 0.0040\nvn 0.0084 0.9999 0.0002\nvn 0.0175 0.9998 -0.0056\nvn 0.7802 -0.6025 -0.1680\nvn 0.9916 0.1242 0.0346\nvn 0.7682 0.6197 0.1606\nvn 0.2456 0.9641 -0.1006\nvn 0.1886 0.9739 -0.1260\nvn 0.1163 0.9907 -0.0710\nvn 0.1020 0.9911 -0.0848\nvn 0.7874 -0.3994 0.4696\nvn 0.9874 0.1053 -0.1182\nvn 0.7928 -0.2628 0.5499\nvn 0.9927 0.0499 -0.1098\nvn 0.8296 0.2763 -0.4851\nvn 0.7265 0.4711 -0.5002\nvn 0.3270 0.9290 -0.1729\nvn 0.1718 0.9635 -0.2053\nvn 0.0000 0.9993 -0.0366\nvn 0.0151 0.9992 -0.0361\nvn 0.0325 0.9988 -0.0353\nvn 0.3439 0.8766 -0.3365\nvn 0.2732 0.9113 -0.3078\nvn 0.3670 0.8686 -0.3330\nvn 0.3031 0.8975 -0.3201\nvn 0.8142 -0.3927 0.4275\nvn 0.9915 0.1037 -0.0778\nvn 0.8203 -0.2681 0.5052\nvn 0.9979 0.0278 -0.0579\nvn 0.8343 0.4297 -0.3455\nvn 0.7067 0.7062 -0.0428\nvn 0.5713 0.8194 -0.0464\nvn 0.5716 0.8199 -0.0302\nvn 0.0144 0.9693 0.2452\nvn 0.0290 0.9489 0.3143\nvn -0.0025 0.9872 0.1592\nvn 0.0019 0.9705 0.2410\nvn 0.0139 0.9512 0.3081\nvn 0.5574 0.7872 0.2639\nvn 0.3891 0.8970 0.2097\nvn 0.2370 0.9486 0.2096\nvn 0.2573 0.9365 0.2381\nvn 0.8009 -0.5366 -0.2656\nvn 0.7994 -0.5849 -0.1371\nvn 0.9919 0.1249 0.0239\nvn 0.9960 0.0829 0.0339\nvn 0.8384 0.5343 0.1078\nvn 0.5275 0.8477 -0.0555\nvn 0.4088 0.9113 -0.0495\nvn 0.4296 0.9030 -0.0086\nvn 0.9965 0.0710 0.0448\nvn 0.8183 -0.4452 -0.3635\nvn 0.9075 0.3233 0.2681\nvn 0.9079 0.2295 0.3507\nvn 0.9961 0.0612 0.0638\nvn 0.8340 -0.3459 -0.4298\nvn 0.7188 0.0464 0.6937\nvn 0.6468 -0.0355 0.7618\nvn 0.6643 -0.0159 0.7473\nvn 0.7154 0.0680 0.6953\nvn 0.6084 -0.2654 0.7479\nvn 0.6118 -0.2622 0.7463\nvn 0.7592 -0.2640 0.5949\nvn 0.8137 -0.0051 0.5813\nvn 0.8446 0.0820 0.5290\nvn 0.0753 -0.9897 0.1219\nvn 0.1333 -0.9344 -0.3301\nvn 0.5679 -0.7958 -0.2099\nvn 0.4247 -0.8019 0.4202\nvn 0.1026 -0.5561 -0.8247\nvn 0.6755 -0.4859 -0.5545\nvn 0.8489 -0.1270 -0.5131\nvn 0.9492 -0.3130 -0.0307\nvn 0.8357 0.5332 0.1309\nvn 0.8386 0.4798 0.2579\nvn 0.7827 0.6150 0.0951\nvn 0.8110 0.5607 0.1668\nvn 0.8202 0.4987 0.2800\nvn 0.8724 0.3636 0.3267\nvn 0.8799 0.4745 -0.0241\nvn 0.8615 0.5063 0.0374\nvn 0.8499 0.5266 -0.0158\nvn 0.8079 0.5884 0.0341\nvn 0.9393 0.3429 -0.0118\nvn 0.9417 0.3362 -0.0084\nvn 0.9719 0.2352 -0.0001\nvn 0.9141 0.4051 -0.0147\nvn 0.9170 0.3985 -0.0173\nvn 0.9233 0.3838 -0.0108\nvn 0.9451 0.3267 -0.0049\nvn 0.8542 0.5191 0.0306\nvn 0.8856 0.4639 0.0208\nvn 0.7667 0.6417 0.0157\nvn 0.8035 0.5950 -0.0181\nvn 0.8524 0.5224 -0.0207\nvn 0.9131 0.4077 -0.0012\nvn 0.6279 0.7076 -0.3240\nvn 0.6561 0.7045 -0.2705\nvn 0.6339 0.7486 -0.1943\nvn 0.5956 0.7742 -0.2144\nvn 0.6003 0.7515 -0.2735\nvn 0.5626 0.8030 -0.1964\nvn 0.5725 0.8111 -0.1199\nvn 0.6381 0.7633 -0.1006\nvn 0.6466 0.7599 -0.0664\nvn 0.0000 0.2294 -0.9733\nvn 0.0000 0.4371 -0.8994\nvn 0.0596 0.4442 -0.8939\nvn 0.0609 0.2388 -0.9691\nvn 0.0000 0.6526 -0.7577\nvn 0.0530 0.6550 -0.7538\nvn 0.1052 0.4531 -0.8852\nvn 0.1107 0.2554 -0.9604\nvn 0.9416 0.3358 -0.0233\nvn 0.9406 0.3389 -0.0183\nvn 0.9128 0.4075 -0.0259\nvn 0.9142 0.4049 -0.0183\nvn 0.8030 0.5859 0.1092\nvn 0.7745 0.6324 0.0139\nvn 0.8201 0.5715 0.0292\nvn 0.8762 0.4726 0.0936\nvn 0.6848 0.7287 -0.0106\nvn 0.7348 0.6779 -0.0212\nvn 0.9525 0.3012 0.0448\nvn 0.9444 0.3277 0.0244\nvn 0.9513 0.3083 -0.0019\nvn 0.9367 0.3476 0.0410\nvn 0.9357 0.3509 0.0356\nvn 0.9298 0.3679 0.0058\nvn 0.9348 0.3550 0.0042\nvn 0.9177 0.3923 -0.0623\nvn 0.9523 0.3044 0.0212\nvn 0.9533 0.2994 0.0389\nvn 0.9338 0.3574 0.0166\nvn 0.9366 0.3486 0.0350\nvn 0.9337 0.3564 -0.0336\nvn 0.9035 0.4247 -0.0571\nvn 0.8470 0.5136 -0.1367\nvn 0.9050 0.4205 -0.0642\nvn 0.8912 0.4488 -0.0660\nvn 0.8222 0.5582 -0.1111\nvn 0.9066 0.4189 -0.0499\nvn 0.8925 0.4496 -0.0374\nvn 0.8778 0.4767 -0.0464\nvn 0.8794 0.4728 -0.0554\nvn 0.8294 0.5559 -0.0549\nvn 0.7100 0.7040 -0.0157\nvn 0.7140 0.6981 0.0519\nvn 0.6250 0.7764 -0.0808\nvn 0.7635 0.5217 -0.3807\nvn 0.7548 0.5774 -0.3113\nvn 0.7035 0.6376 -0.3140\nvn 0.7011 0.6130 -0.3641\nvn 0.6810 0.6573 -0.3226\nvn 0.6457 0.7053 -0.2923\nvn 0.9201 0.3892 -0.0423\nvn 0.8846 0.4561 -0.0971\nvn 0.9222 0.3863 -0.0158\nvn 0.8779 0.4781 -0.0254\nvn 0.8436 0.5367 -0.0162\nvn 0.8648 0.5016 -0.0210\nvn 0.1710 0.0959 0.9806\nvn 0.1725 -0.0422 0.9841\nvn 0.0867 0.0975 0.9914\nvn 0.0863 -0.0446 0.9952\nvn 0.8827 0.0673 0.4649\nvn 0.7889 0.0281 0.6138\nvn 0.7074 0.0341 0.7060\nvn 0.5954 0.0532 0.8016\nvn 0.9526 0.1322 0.2738\nvn 0.9395 0.0972 0.3283\nvn 0.9460 0.1990 0.2559\nvn 0.9335 0.1695 0.3158\nvn 0.3985 -0.0361 0.9164\nvn 0.3923 -0.0375 0.9191\nvn 0.4006 -0.0273 0.9159\nvn 0.4580 -0.0388 0.8881\nvn 0.4565 -0.0375 0.8889\nvn 0.4568 -0.0364 0.8888\nvn 0.8620 0.1321 0.4894\nvn 0.7913 0.0352 0.6104\nvn 0.8018 0.1350 0.5821\nvn 0.8564 0.2097 0.4717\nvn 0.8746 0.1939 0.4444\nvn 0.6931 -0.7197 -0.0392\nvn 0.9955 -0.0529 -0.0787\nvn 0.7940 0.5943 -0.1279\nvn 0.9471 0.3030 -0.1060\nvn 0.8976 0.4125 -0.1550\nvn 0.7420 0.6210 -0.2524\nvn 0.7309 0.6637 -0.1585\nvn 0.7334 0.6782 -0.0458\nvn 0.9997 0.0148 -0.0207\nvn 0.8193 -0.1621 0.5499\nvn 0.8167 -0.0802 0.5714\nvn 0.9998 0.0022 -0.0201\nvn 0.8170 0.5175 -0.2540\nvn 0.7853 0.6167 0.0537\nvn 0.8927 0.2682 0.3621\nvn 0.9148 0.1361 0.3803\nvn 0.9924 -0.0326 0.1185\nvn 0.8272 -0.0865 -0.5552\nvn 0.8422 -0.1228 -0.5250\nvn 0.9934 0.0267 0.1113\nvn 0.9952 0.0397 0.0896\nvn 0.8437 -0.2396 -0.4802\nvn 0.9866 -0.1489 -0.0667\nvn 0.7716 -0.1645 -0.6144\nvn 0.7899 0.0453 -0.6115\nvn 0.9993 0.0031 -0.0368\nvn 0.4988 0.7605 -0.4158\nvn 0.5050 0.8319 -0.2301\nvn 0.5538 0.8319 -0.0336\nvn 0.7569 -0.2528 -0.6026\nvn 0.7793 -0.0889 -0.6203\nvn 0.7428 -0.3438 -0.5744\nvn 0.7908 -0.0947 -0.6046\nvn 0.7836 0.1608 -0.6001\nvn 0.7655 0.1037 -0.6350\nvn 0.7690 0.2172 -0.6012\nvn 0.7785 0.3857 -0.4951\nvn 0.7365 0.4937 -0.4623\nvn 0.7682 0.1810 -0.6141\nvn 0.8155 0.2628 -0.5157\nvn 0.8271 0.3892 -0.4056\nvn 0.8235 0.4377 -0.3609\nvn 0.7235 0.6489 0.2353\nvn 0.8418 0.4826 0.2418\nvn 0.9642 0.0353 0.2627\nvn 0.9536 -0.0164 0.3005\nvn 0.9936 0.0223 -0.1108\nvn 0.8347 0.1062 -0.5403\nvn 0.7868 -0.1290 0.6035\nvn 0.7760 -0.0378 0.6296\nvn 0.9934 0.0065 -0.1140\nvn 0.8104 0.0097 -0.5858\nvn 0.6407 0.7581 0.1215\nvn 0.6195 0.6161 -0.4864\nvn 0.1662 -0.0435 0.9851\nvn 0.1824 -0.0438 0.9822\nvn 0.1798 -0.0439 0.9827\nvn 0.1658 -0.0431 0.9852\nvn 0.2203 -0.7627 0.6080\nvn 0.6382 -0.6058 0.4750\nvn 0.0280 0.9907 0.1332\nvn 0.0584 0.9682 0.2431\nvn 0.0591 0.9982 -0.0041\nvn 0.0735 0.9972 -0.0096\nvn 0.1361 0.9904 -0.0221\nvn 0.1846 0.9828 -0.0091\nvn 0.2514 0.9674 -0.0298\nvn 0.0861 0.9962 -0.0162\nvn 0.0430 0.8040 -0.5930\nvn 0.0000 0.8027 -0.5964\nvn 0.0000 0.8808 -0.4734\nvn 0.0358 0.8800 -0.4736\nvn 0.0234 0.9742 -0.2244\nvn 0.0225 0.9837 -0.1785\nvn 0.0000 0.9742 -0.2256\nvn 0.0000 0.9838 -0.1792\nvn 0.0262 0.9996 0.0007\nvn 0.0175 0.9992 0.0352\nvn 0.0000 1.0000 0.0013\nvn 0.0000 0.9992 0.0399\nvn -0.0003 0.9947 0.1026\nvn 0.0000 0.9944 0.1052\nvn 0.0000 0.9829 0.1842\nvn -0.0087 0.9824 0.1865\nvn 0.0560 -0.5800 -0.8126\nvn 0.0670 -0.0996 -0.9927\nvn 0.0000 -0.5797 -0.8148\nvn 0.0000 -0.0985 -0.9951\nvn 0.0000 0.4063 -0.9137\nvn 0.0619 0.4053 -0.9120\nvn 0.0521 -0.0675 -0.9963\nvn 0.0000 -0.0673 -0.9977\nvn 0.0000 -0.0451 -0.9990\nvn 0.0520 -0.0449 -0.9976\nvn 0.0143 0.9850 -0.1719\nvn 0.0000 0.9832 -0.1822\nvn 0.0000 0.9587 -0.2844\nvn 0.0287 0.9605 -0.2766\nvn 0.0351 0.9990 -0.0261\nvn 0.0370 0.9990 -0.0263\nvn 0.0327 0.9991 -0.0259\nvn 0.0332 0.9981 -0.0516\nvn 0.1239 0.9912 -0.0452\nvn 0.1501 0.9853 -0.0819\nvn 0.4005 0.9142 -0.0613\nvn 0.4748 0.8768 -0.0751\nvn 0.5300 0.8057 -0.2644\nvn 0.1963 0.9478 -0.2512\nvn 0.0283 0.9971 -0.0698\nvn 0.0348 0.9983 -0.0460\nvn -0.0008 0.9937 0.1122\nvn 0.0193 0.9043 0.4264\nvn 0.0000 0.9031 0.4293\nvn 0.0000 0.6370 0.7708\nvn 0.0275 0.6363 0.7709\nvn -0.0124 -0.9980 -0.0607\nvn 0.0035 -0.9997 0.0224\nvn 0.0866 -0.8651 0.4940\nvn 0.0321 -0.0436 0.9985\nvn 0.0308 -0.0425 0.9986\nvn 0.0000 -0.0436 0.9990\nvn 0.1471 -0.1315 -0.9803\nvn 0.1625 -0.1338 -0.9776\nvn 0.1646 -0.1364 -0.9769\nvn 0.1491 -0.1351 -0.9795\nvn 0.0419 0.9989 -0.0182\nvn 0.0891 0.9953 -0.0363\nvn 0.1059 0.9937 -0.0377\nvn 0.3217 0.9463 -0.0316\nvn -0.0037 0.9714 0.2371\nvn 0.0000 0.9720 0.2347\nvn 0.0000 0.9541 0.2994\nvn 0.0027 0.9534 0.3018\nvn 0.0302 0.5647 0.8247\nvn -0.0086 0.6400 0.7683\nvn 0.0141 0.4158 0.9093\nvn 0.0787 0.3594 0.9298\nvn 0.0000 0.6420 0.7667\nvn 0.0000 0.4245 0.9054\nvn 0.1428 0.4499 -0.8816\nvn 0.1629 0.4254 -0.8902\nvn 0.1596 0.2586 -0.9527\nvn 0.0352 0.0973 0.9946\nvn 0.0000 0.0968 0.9953\nvn 0.0000 -0.0516 0.9987\nvn 0.0351 -0.0491 0.9982\nvn 0.0513 -0.9966 -0.0641\nvn 0.1134 -0.9933 -0.0188\nvn 0.1293 -0.9916 -0.0027\nvn 0.2180 -0.9584 0.1843\nvn 0.3155 -0.9075 0.2774\nvn 0.0398 -0.9197 0.3906\nvn 0.0474 -0.9846 0.1680\nvn 0.3470 -0.8076 0.4768\nvn 0.2363 -0.9011 0.3635\nvn 0.0363 -0.9874 0.1539\nvn 0.0563 -0.9826 0.1771\nvn 0.0034 -1.0000 0.0042\nvn -0.0450 -0.9963 0.0735\nvn -0.0324 -0.9898 0.1386\nvn 0.0645 -0.9978 -0.0164\nvn 0.5011 -0.7923 0.3481\nvn 0.4604 -0.7763 0.4305\nvn 0.4814 0.6188 -0.6207\nvn 0.7434 0.1569 -0.6502\nvn 0.1090 -0.1317 -0.9853\nvn 0.1083 -0.1322 -0.9853\nvn 0.1505 -0.1339 -0.9795\nvn 0.1511 -0.1333 -0.9795\nvn 0.1662 -0.1360 -0.9767\nvn 0.1664 -0.1343 -0.9768\nvn 0.7885 -0.0091 -0.6150\nvn 0.7912 -0.0014 -0.6115\nvn 0.9928 -0.0024 -0.1197\nvn 0.9956 -0.0060 -0.0931\nvn 0.7720 0.0155 0.6354\nvn 0.6444 0.0444 0.7634\nvn 0.2673 -0.0272 -0.9632\nvn 0.3714 -0.0967 -0.9234\nvn 0.4080 -0.0496 -0.9116\nvn 0.4044 0.0780 -0.9113\nvn 0.4351 -0.1003 -0.8948\nvn 0.5065 -0.0272 -0.8618\nvn 0.0000 -0.1288 -0.9916\nvn 0.0000 -0.1290 -0.9916\nvn 0.0555 -0.1304 -0.9899\nvn 0.0566 -0.1297 -0.9899\nvn 0.2541 -0.9585 -0.1294\nvn 0.1209 -0.9906 -0.0633\nvn 0.2047 -0.9641 -0.1688\nvn 0.3794 -0.8805 -0.2842\nvn 0.1354 -0.9824 -0.1289\nvn 0.2756 -0.9262 -0.2572\nvn 0.0701 -0.9930 -0.0953\nvn 0.0862 -0.9914 -0.0984\nvn 0.0557 -0.9941 -0.0932\nvn 0.1032 -0.9780 -0.1812\nvn 0.1324 -0.9737 -0.1852\nvn 0.1651 -0.9678 -0.1897\nvn 0.0442 -0.9947 -0.0932\nvn 0.0305 -0.9950 -0.0945\nvn 0.0541 -0.9820 -0.1809\nvn 0.0788 -0.9807 -0.1791\nvn 0.0185 -0.9954 -0.0939\nvn 0.0117 -0.9955 -0.0933\nvn 0.0225 -0.9828 -0.1831\nvn 0.0344 -0.9827 -0.1821\nvn 0.0065 -0.9955 -0.0941\nvn 0.0000 -0.9955 -0.0947\nvn 0.0000 -0.9829 -0.1841\nvn 0.0124 -0.9828 -0.1838\nvn 0.0000 0.9891 -0.1468\nvn 0.0100 0.9891 -0.1469\nvn 0.0115 0.9853 -0.1706\nvn 0.0000 0.9853 -0.1708\nvn 0.0182 0.9890 -0.1471\nvn 0.0209 0.9852 -0.1702\nvn 0.0234 0.9810 -0.1926\nvn 0.0129 0.9810 -0.1932\nvn 0.0000 0.9811 -0.1935\nvn -0.0079 0.9885 -0.1509\nvn 0.0219 0.9832 -0.1814\nvn 0.1042 0.9301 -0.3521\nvn 0.0836 0.9583 -0.2730\nvn 0.0566 0.9800 -0.1907\nvn 0.0360 0.9807 -0.1918\nvn 0.2111 0.8735 -0.4387\nvn 0.1334 0.9426 -0.3062\nvn 0.2074 0.9188 -0.3357\nvn 0.1529 0.9511 -0.2684\nvn 0.1086 0.9751 -0.1931\nvn 0.0826 0.9784 -0.1893\nvn 0.1339 0.9800 -0.1472\nvn 0.1492 0.9717 -0.1829\nvn 0.1390 0.9775 -0.1585\nvn 0.1594 0.9704 -0.1814\nvn 0.1796 0.9622 -0.2046\nvn 0.1416 0.9696 -0.1995\nvn 0.1321 0.9677 -0.2144\nvn 0.2091 0.9536 -0.2166\nvn 0.4358 0.7840 -0.4420\nvn 0.3867 0.8530 -0.3506\nvn 0.3034 0.9130 -0.2727\nvn 0.2450 0.9476 -0.2049\nvn 0.2402 0.8824 -0.4046\nvn 0.2283 0.9017 -0.3671\nvn 0.3215 0.8762 -0.3590\nvn 0.3238 0.8600 -0.3944\nvn 0.2255 0.9110 -0.3453\nvn 0.3327 0.8776 -0.3451\nvn 0.3916 0.8531 -0.3448\nvn 0.3938 0.8509 -0.3475\nvn 0.5014 0.7826 -0.3689\nvn 0.0562 0.9049 -0.4219\nvn 0.0808 0.9042 -0.4194\nvn 0.0560 0.9059 -0.4197\nvn 0.0738 0.9051 -0.4186\nvn 0.1541 0.8961 -0.4162\nvn 0.1337 0.8990 -0.4170\nvn 0.1910 0.9070 -0.3752\nvn 0.1870 0.8965 -0.4017\nvn 0.2022 0.9183 -0.3404\nvn 0.7311 0.0610 -0.6795\nvn 0.7012 -0.0203 -0.7127\nvn 0.6730 -0.0192 -0.7394\nvn 0.6516 -0.0382 -0.7576\nvn 0.6972 0.6355 -0.3316\nvn 0.6979 0.6393 -0.3229\nvn 0.7736 0.5401 -0.3312\nvn 0.8045 0.5021 -0.3173\nvn 0.6904 -0.4312 -0.5808\nvn 0.7626 -0.1166 -0.6362\nvn 0.7548 0.2067 -0.6225\nvn 0.7820 0.0936 -0.6161\nvn 0.7444 0.1361 -0.6537\nvn 0.7601 0.2129 -0.6139\nvn 0.7824 0.2634 -0.5643\nvn 0.7789 0.2451 -0.5772\nvn 0.8162 0.2928 -0.4981\nvn 0.0000 0.9111 -0.4122\nvn 0.0280 0.9085 -0.4168\nvn 0.0000 0.9118 -0.4106\nvn 0.0242 0.9098 -0.4143\nvn 0.0984 -0.9945 0.0339\nvn 0.0928 -0.9752 0.2005\nvn 0.2120 -0.9679 0.1346\nvn 0.2298 -0.9713 0.0605\nvn 0.6424 -0.0317 -0.7657\nvn 0.6138 -0.0613 -0.7870\nvn 0.6193 -0.0221 -0.7848\nvn 0.6120 -0.0310 -0.7902\nvn 0.1168 -0.9881 -0.0999\nvn 0.2238 -0.9556 -0.1919\nvn 0.6037 0.4192 -0.6781\nvn 0.4846 0.6944 -0.5319\nvn 0.5688 0.5372 -0.6227\nvn 0.4501 0.7450 -0.4923\nvn 0.1955 0.9077 -0.3711\nvn 0.1602 0.9022 -0.4003\nvn 0.2911 0.8741 -0.3888\nvn 0.0503 0.8080 -0.5870\nvn 0.1435 0.7487 -0.6472\nvn 0.2026 0.6892 -0.6956\nvn 0.5633 0.7770 -0.2808\nvn 0.3151 0.8504 -0.4213\nvn 0.5687 0.7598 -0.3149\nvn 0.3291 0.8363 -0.4384\nvn -0.0408 0.8332 -0.5513\nvn -0.0298 0.8333 -0.5519\nvn 0.6170 0.7121 -0.3349\nvn 0.6232 0.7017 -0.3452\nvn 0.3654 0.7947 -0.4846\nvn 0.3572 0.7995 -0.4829\nvn 0.3972 0.7980 -0.4533\nvn 0.0656 0.9032 -0.4242\nvn -0.0001 0.8170 -0.5766\nvn -0.0016 0.7997 -0.6004\nvn 0.2883 0.9122 -0.2911\nvn 0.2688 0.9193 -0.2873\nvn 0.1677 0.9776 -0.1270\nvn 0.1429 0.9668 -0.2118\nvn 0.2090 0.9279 -0.3088\nvn 0.1356 0.9376 -0.3201\nvn 0.0725 0.9896 -0.1242\nvn 0.1250 0.9839 -0.1272\nvn 0.0685 0.9436 -0.3239\nvn 0.0460 0.9466 -0.3191\nvn 0.0138 0.9948 -0.1009\nvn 0.0268 0.9930 -0.1147\nvn 0.0320 0.9491 -0.3133\nvn 0.0000 0.9503 -0.3112\nvn 0.0000 0.9952 -0.0973\nvn 0.0096 0.9953 -0.0963\nvn 0.0292 0.9112 -0.4108\nvn 0.0000 0.9073 -0.4205\nvn 0.0422 0.9162 -0.3985\nvn 0.0597 0.6955 -0.7160\nvn 0.0404 0.6813 -0.7309\nvn 0.0000 0.6717 -0.7408\nvn 0.0569 0.9161 -0.3969\nvn 0.0941 0.9127 -0.3977\nvn 0.1289 0.6939 -0.7084\nvn 0.0822 0.6984 -0.7109\nvn 0.1304 0.9069 -0.4007\nvn 0.1745 0.6885 -0.7039\nvn 0.0420 0.3910 -0.9194\nvn 0.2177 0.2898 -0.9320\nvn -0.3130 0.5581 -0.7684\nvn -0.5280 0.3383 -0.7789\nvn -0.0354 0.1299 -0.9909\nvn 0.2081 0.0579 -0.9764\nvn -0.4988 0.6247 -0.6008\nvn -0.5317 0.6258 -0.5706\nvn -0.7238 0.4535 -0.5199\nvn -0.7079 0.4403 -0.5522\nvn -0.5177 0.6083 -0.6017\nvn -0.4814 0.6181 -0.6214\nvn -0.9700 0.2389 0.0441\nvn -0.6825 -0.5694 0.4581\nvn -0.7077 0.4249 -0.5644\nvn -0.7090 0.4328 -0.5568\nvn -0.2180 0.9433 0.2502\nvn -0.0991 0.9515 0.2911\nvn -0.2393 0.8379 0.4906\nvn -0.2832 0.8368 0.4685\nvn -0.0791 0.9481 0.3079\nvn -0.0679 0.9443 0.3219\nvn -0.1372 0.8330 0.5359\nvn -0.1859 0.8369 0.5147\nvn -0.0581 0.9393 0.3381\nvn -0.0494 0.9362 0.3480\nvn -0.0770 0.8288 0.5542\nvn -0.0974 0.8293 0.5502\nvn -0.0322 0.9394 0.3413\nvn 0.0000 0.9424 0.3344\nvn 0.0000 0.8369 0.5473\nvn -0.0513 0.8334 0.5503\nvn 0.0461 0.2855 -0.9572\nvn 0.0000 0.2766 -0.9610\nvn 0.0687 0.2978 -0.9521\nvn 0.0683 0.0667 -0.9954\nvn 0.0441 0.0602 -0.9972\nvn 0.0000 0.0557 -0.9984\nvn 0.0951 0.2997 -0.9493\nvn 0.1446 0.2953 -0.9444\nvn 0.1396 0.0623 -0.9882\nvn 0.0928 0.0669 -0.9934\nvn 0.1909 0.2899 -0.9378\nvn 0.1834 0.0580 -0.9813\nvn 0.0157 0.9524 0.3045\nvn 0.0000 0.9531 0.3026\nvn 0.0438 0.9515 0.3046\nvn 0.0110 0.9969 0.0775\nvn 0.0038 0.9976 0.0685\nvn 0.0000 0.9980 0.0636\nvn 0.0724 0.9521 0.2970\nvn 0.1080 0.9517 0.2872\nvn 0.0299 0.9943 0.1025\nvn 0.0182 0.9962 0.0853\nvn 0.1464 0.9475 0.2841\nvn 0.2066 0.9387 0.2758\nvn 0.0951 0.9810 0.1691\nvn 0.0472 0.9903 0.1305\nvn 0.2977 0.9159 0.2692\nvn 0.4153 0.8797 0.2317\nvn 0.3147 0.9300 0.1900\nvn 0.1813 0.9622 0.2030\nvn 0.5251 0.8290 0.1925\nvn 0.6205 0.7696 0.1502\nvn 0.5502 0.8248 0.1303\nvn 0.4426 0.8795 0.1748\nvn 0.6869 0.7215 0.0868\nvn 0.7215 0.6902 0.0551\nvn 0.6377 0.7695 0.0342\nvn 0.6127 0.7866 0.0757\nvn 0.7450 0.6644 0.0590\nvn 0.8580 0.4860 0.1661\nvn 0.7626 0.5810 0.2844\nvn 0.6671 0.7384 0.0983\nvn 0.8889 0.4469 0.1007\nvn 0.8820 0.4391 0.1711\nvn 0.8909 0.4439 0.0957\nvn 0.8851 0.4427 0.1435\nvn 0.8305 0.4279 0.3565\nvn 0.8056 0.4441 0.3920\nvn 0.8453 0.5275 0.0845\nvn 0.8017 0.5939 0.0680\nvn 0.7843 0.6037 0.1430\nvn 0.8411 0.5250 0.1301\nvn 0.5478 0.7912 0.2716\nvn 0.5284 0.7162 0.4559\nvn 0.7249 0.5654 0.3934\nvn 0.7765 0.4882 0.3983\nvn 0.2690 0.9160 0.2977\nvn 0.1356 0.9238 0.3579\nvn 0.1881 0.7673 0.6131\nvn 0.2953 0.7809 0.5503\nvn 0.0796 0.9193 0.3854\nvn 0.0556 0.9179 0.3929\nvn 0.1147 0.7539 0.6469\nvn 0.1423 0.7559 0.6391\nvn 0.0438 0.9193 0.3911\nvn 0.0263 0.9211 0.3883\nvn 0.0579 0.7584 0.6492\nvn 0.0908 0.7562 0.6480\nvn 0.0088 0.9219 0.3872\nvn 0.0000 0.9222 0.3865\nvn 0.0000 0.7551 0.6555\nvn 0.0253 0.7570 0.6529\nvn -0.0186 0.9221 -0.3865\nvn 0.0000 0.9207 -0.3903\nvn -0.0538 0.9252 -0.3756\nvn -0.0801 0.8055 -0.5871\nvn -0.0275 0.8015 -0.5973\nvn 0.0000 0.8011 -0.5985\nvn -0.0959 0.9291 -0.3571\nvn -0.1433 0.9342 -0.3265\nvn -0.2195 0.8188 -0.5304\nvn -0.1462 0.8127 -0.5640\nvn -0.1943 0.9398 -0.2810\nvn -0.2421 0.9473 -0.2096\nvn -0.3964 0.8258 -0.4011\nvn -0.3072 0.8222 -0.4791\nvn -0.2403 0.9598 -0.1447\nvn -0.1886 0.9743 -0.1230\nvn -0.4521 0.8408 -0.2979\nvn -0.4557 0.8301 -0.3213\nvn -0.1143 0.9848 -0.1306\nvn -0.0637 0.9902 -0.1243\nvn -0.4715 0.8441 -0.2552\nvn -0.4446 0.8475 -0.2898\nvn -0.0505 0.9907 -0.1259\nvn -0.0596 0.9908 -0.1211\nvn -0.5323 0.8265 -0.1831\nvn -0.5061 0.8357 -0.2131\nvn -0.1064 0.9932 -0.0475\nvn -0.5808 0.5776 0.5736\nvn -0.9860 -0.1331 0.1004\nvn -0.5460 0.8215 -0.1642\nvn 0.4198 0.3220 0.8485\nvn 0.6019 0.3405 0.7223\nvn 0.1635 0.1516 0.9748\nvn 0.1296 0.1513 0.9799\nvn 0.4797 0.3359 0.8106\nvn 0.4001 0.2614 0.8784\nvn 0.3949 0.3932 0.8303\nvn 0.2327 0.1336 0.9633\nvn 0.2151 0.1419 0.9662\nvn 0.2001 0.1388 0.9699\nvn 0.2836 0.3914 0.8754\nvn 0.2381 0.3640 0.9004\nvn 0.2441 0.1096 0.9635\nvn 0.2415 0.1207 0.9629\nvn 0.2144 0.3554 0.9098\nvn 0.1838 0.3545 0.9168\nvn 0.2005 0.1124 0.9732\nvn 0.2316 0.1080 0.9668\nvn 0.1437 0.3598 0.9219\nvn 0.0937 0.3659 0.9259\nvn 0.1005 0.1273 0.9867\nvn 0.1552 0.1190 0.9807\nvn 0.0431 0.3654 0.9298\nvn 0.0000 0.3624 0.9320\nvn 0.0000 0.1293 0.9916\nvn 0.0463 0.1305 0.9904\nvn 0.5734 -0.8192 0.0113\nvn 0.9981 -0.0609 0.0066\nvn 0.6642 0.7475 -0.0055\nvn 0.9895 0.1445 0.0016\nvn 0.6848 0.7278 -0.0351\nvn 0.5493 0.8343 -0.0469\nvn 0.5759 0.8159 -0.0517\nvn 0.0117 -0.9998 0.0143\nvn 0.0804 -0.9966 0.0149\nvn 0.1098 -0.9938 0.0149\nvn 0.0548 0.9981 -0.0258\nvn 0.0000 0.9996 -0.0267\nvn 0.0271 0.9993 -0.0265\nvn 0.9990 -0.0397 0.0187\nvn 0.9978 -0.0630 0.0201\nvn 0.3970 0.9149 -0.0725\nvn 0.2239 0.9712 -0.0813\nvn 0.9286 0.3708 -0.0092\nvn 0.9487 0.3162 0.0002\nvn 0.0311 0.9955 -0.0888\nvn 0.7180 0.6957 -0.0191\nvn 0.7218 0.6914 -0.0292\nvn 0.8122 0.5832 0.0135\nvn 0.8800 0.4449 -0.1661\nvn 0.9508 0.3038 -0.0599\nvn 0.9650 0.2622 -0.0096\nvn 0.8183 0.5747 -0.0045\nvn 0.8289 0.5575 -0.0448\nvn 0.8448 0.5350 -0.0058\nvn 0.8392 0.5411 -0.0533\nvn 0.7649 0.5509 -0.3337\nvn 0.7985 0.5246 -0.2953\nvn 0.8944 0.4470 -0.0141\nvn 0.9033 0.4290 -0.0076\nvn 0.8970 0.4371 -0.0659\nvn 0.8898 0.4524 -0.0595\nvn 0.8920 0.4459 -0.0738\nvn 0.7999 0.5705 -0.1864\nvn 0.8223 0.4881 -0.2926\nvn 0.8272 0.4549 -0.3298\nvn 0.8113 0.5826 -0.0488\nvn 0.8072 0.5886 -0.0436\nvn 0.7292 0.6826 -0.0481\nvn 0.7402 0.6676 -0.0799\nvn 0.8057 0.5908 -0.0419\nvn 0.7989 0.6001 -0.0395\nvn 0.7300 0.6820 -0.0433\nvn 0.7340 0.6775 -0.0470\nvn 0.7812 0.6228 -0.0416\nvn 0.7620 0.6446 -0.0621\nvn 0.6933 0.7181 -0.0604\nvn 0.7101 0.7026 -0.0455\nvn 0.7518 0.6545 -0.0798\nvn 0.8799 0.4602 -0.1183\nvn 0.8616 0.5070 -0.0231\nvn 0.7339 0.6781 -0.0390\nvn 0.8197 0.5501 -0.1596\nvn 0.8127 0.5605 -0.1592\nvn 0.9499 0.3027 0.0774\nvn 0.9232 0.3802 0.0549\nvn 0.7710 0.6219 -0.1370\nvn 0.7718 0.6156 -0.1592\nvn 0.7218 0.6761 -0.1475\nvn 0.9360 0.3516 0.0158\nvn 0.9333 0.3557 0.0491\nvn 0.9245 0.3789 0.0407\nvn 0.6873 0.7172 -0.1147\nvn 0.7045 0.7051 -0.0811\nvn 0.9568 0.2900 -0.0213\nvn 0.9469 0.3211 -0.0137\nvn 0.7156 0.6966 -0.0518\nvn 0.9619 0.2728 -0.0152\nvn 0.7308 0.6806 0.0525\nvn 0.7315 0.6812 0.0271\nvn 0.7241 0.6865 0.0660\nvn 0.9684 0.2492 0.0115\nvn 0.9693 0.2452 0.0175\nvn 0.9695 0.2448 0.0104\nvn 0.7063 0.7005 0.1021\nvn 0.7923 0.5868 0.1668\nvn 0.8692 0.4564 -0.1901\nvn 0.9362 0.3428 -0.0772\nvn 0.8270 0.5615 0.0279\nvn 0.8485 0.5287 0.0229\nvn 0.8216 0.5060 -0.2627\nvn 0.8217 0.5093 -0.2558\nvn 0.9009 0.4336 0.0159\nvn 0.8964 0.4423 0.0283\nvn 0.8894 0.4571 -0.0054\nvn 0.8344 0.5320 -0.1440\nvn 0.8729 0.4240 -0.2414\nvn 0.8768 0.4058 -0.2578\nvn 0.8004 0.5991 0.0197\nvn 0.7978 0.6021 0.0296\nvn 0.6950 0.7188 0.0150\nvn 0.7380 0.6735 -0.0409\nvn 0.8004 0.5990 0.0212\nvn 0.8006 0.5991 0.0091\nvn 0.6966 0.7174 -0.0001\nvn 0.6937 0.7201 0.0111\nvn 0.8042 0.5943 0.0094\nvn 0.8949 0.4424 0.0581\nvn 0.8175 0.5510 0.1675\nvn 0.7224 0.6906 0.0333\nvn 0.9047 0.4226 0.0538\nvn 0.8973 0.4401 0.0321\nvn 0.8671 0.3831 0.3183\nvn 0.8576 0.4289 0.2838\nvn 0.8359 0.5476 0.0356\nvn 0.8482 0.5282 0.0375\nvn 0.8146 0.5795 -0.0238\nvn 0.9060 0.3875 0.1700\nvn 0.8488 0.4441 0.2868\nvn 0.8315 0.4619 0.3085\nvn 0.7229 0.6909 0.0030\nvn 0.9560 0.2877 0.0573\nvn 0.9818 -0.1549 -0.1096\nvn 0.9778 -0.2092 0.0121\nvn 0.8766 0.1525 -0.4563\nvn 0.7813 -0.0778 -0.6193\nvn 0.9070 -0.4053 -0.1145\nvn 0.8989 -0.4375 0.0223\nvn 0.5965 0.4072 -0.6915\nvn 0.5131 0.4694 -0.7186\nvn 0.3396 0.3874 -0.8571\nvn 0.4174 0.3108 -0.8539\nvn 0.5297 0.4079 -0.7436\nvn 0.5802 0.3808 -0.7199\nvn -0.4804 0.7378 -0.4741\nvn -0.9692 -0.1301 -0.2090\nvn 0.3947 0.2725 -0.8774\nvn 0.3900 0.3050 -0.8688\nvn 0.3153 0.9453 -0.0829\nvn 0.3377 0.9393 -0.0599\nvn 0.1055 0.9925 -0.0611\nvn 0.0864 0.9944 -0.0596\nvn 0.3510 0.9346 -0.0570\nvn 0.3503 0.9353 -0.0492\nvn 0.1243 0.9911 -0.0476\nvn 0.1238 0.9906 -0.0572\nvn 0.3207 0.9462 -0.0432\nvn 0.2856 0.9573 -0.0442\nvn 0.0462 0.9984 -0.0324\nvn 0.0917 0.9950 -0.0395\nvn 0.2579 0.9658 -0.0283\nvn -0.2716 0.4435 0.8541\nvn -0.8727 -0.3376 0.3527\nvn 0.0078 0.9995 -0.0310\nvn 0.9307 -0.0272 0.3648\nvn 0.9378 -0.0541 0.3429\nvn 0.8662 -0.2218 0.4478\nvn 0.8571 -0.2317 0.4601\nvn 0.9579 -0.0421 0.2839\nvn 0.9524 -0.0171 0.3044\nvn 0.9779 -0.0789 0.1934\nvn 0.9118 -0.3065 0.2732\nvn 0.8885 -0.2499 0.3848\nvn 0.8727 -0.2408 0.4246\nvn 0.9864 -0.1356 0.0924\nvn 0.9836 -0.1754 0.0408\nvn 0.9114 -0.4057 0.0688\nvn 0.9187 -0.3685 0.1418\nvn 0.9803 -0.1960 0.0226\nvn 0.9041 -0.4253 0.0410\nvn 0.9744 -0.2239 -0.0191\nvn 0.9732 -0.2298 -0.0097\nvn 0.9752 -0.2175 -0.0403\nvn 0.8946 -0.4424 -0.0628\nvn 0.8924 -0.4498 -0.0367\nvn 0.8881 -0.4591 -0.0201\nvn 0.9589 -0.0690 -0.2753\nvn 0.7855 0.2243 -0.5767\nvn 0.6497 0.0674 -0.7572\nvn 0.8709 -0.3190 -0.3738\nvn 0.6478 0.3692 -0.6664\nvn 0.6346 0.3812 -0.6722\nvn 0.4823 0.2832 -0.8289\nvn 0.4947 0.2649 -0.8277\nvn 0.6746 0.2824 -0.6820\nvn 0.6960 0.2817 -0.6605\nvn -0.1990 0.5211 -0.8299\nvn -0.8617 0.0149 -0.5072\nvn 0.5441 0.1634 -0.8229\nvn 0.5365 0.1907 -0.8221\nvn 0.2824 0.9535 -0.1049\nvn 0.2897 0.9567 -0.0272\nvn 0.0519 0.9976 -0.0461\nvn 0.0506 0.9960 -0.0734\nvn 0.2901 0.9568 -0.0189\nvn 0.2944 0.9553 -0.0274\nvn 0.0596 0.9974 -0.0394\nvn 0.0547 0.9980 -0.0327\nvn 0.2912 0.9566 -0.0127\nvn -0.4357 0.7595 0.4831\nvn -0.9593 -0.0392 0.2795\nvn 0.0692 0.9963 -0.0509\nvn 0.6106 0.2768 0.7420\nvn 0.6621 0.2268 0.7142\nvn 0.4914 0.1241 0.8620\nvn 0.4817 0.1145 0.8688\nvn 0.7102 0.2143 0.6705\nvn 0.6520 0.2654 0.7102\nvn 0.8955 0.0327 0.4438\nvn 0.7975 -0.1961 0.5705\nvn 0.5652 0.0689 0.8220\nvn 0.4896 0.1314 0.8619\nvn 0.9767 -0.1767 0.1220\nvn 0.8943 -0.4252 0.1392\nvn 0.2956 0.7656 -0.5713\nvn 0.3253 0.6406 -0.6955\nvn 0.2634 0.8020 -0.5360\nvn 0.5573 0.4906 -0.6699\nvn 0.6937 0.5239 -0.4942\nvn 0.7298 0.4682 -0.4982\nvn 0.2730 0.7861 -0.5545\nvn 0.3038 0.7686 -0.5629\nvn 0.4021 0.4006 -0.8233\nvn 0.4224 0.4265 -0.7998\nvn 0.3701 0.7478 -0.5512\nvn 0.5444 0.6698 -0.5050\nvn 0.4763 0.3038 -0.8251\nvn 0.4348 0.3566 -0.8269\nvn 0.7880 0.5065 -0.3500\nvn 0.7366 0.4634 -0.4925\nvn 0.7495 0.3554 -0.5584\nvn 0.4217 0.5300 -0.7356\nvn 0.4599 0.3137 -0.8307\nvn 0.6986 0.3968 -0.5954\nvn 0.6290 0.3884 -0.6734\nvn 0.3837 0.7711 -0.5080\nvn 0.4003 0.7267 -0.5582\nvn 0.5447 0.3863 -0.7444\nvn 0.4741 0.3789 -0.7947\nvn 0.3082 0.7924 -0.5264\nvn 0.3441 0.7882 -0.5102\nvn 0.4194 0.3548 -0.8355\nvn 0.4071 0.2972 -0.8637\nvn 0.5097 0.6417 -0.5730\nvn 0.3192 0.7756 -0.5446\nvn 0.3322 0.4417 -0.8334\nvn 0.6738 0.4741 -0.5667\nvn 0.9268 0.1950 -0.3209\nvn 0.9556 0.2051 -0.2115\nvn 0.7325 0.0972 -0.6738\nvn 0.7582 -0.0461 -0.6503\nvn 0.9637 0.0697 -0.2577\nvn 0.9883 0.1087 -0.1068\nvn 0.4734 0.0278 -0.8804\nvn 0.4170 -0.0040 -0.9089\nvn 0.4059 -0.1394 -0.9032\nvn 0.4689 -0.1018 -0.8773\nvn 0.4116 -0.1006 -0.9058\nvn 0.2920 -0.1840 -0.9385\nvn 0.2203 -0.3501 -0.9104\nvn 0.3936 -0.2546 -0.8833\nvn 0.0540 0.0431 -0.9976\nvn -0.0071 0.6195 -0.7849\nvn -0.1585 0.6337 -0.7572\nvn -0.0822 -0.0749 -0.9938\nvn 0.0467 0.9150 -0.4007\nvn 0.0899 0.9628 -0.2546\nvn -0.0053 0.9868 -0.1619\nvn -0.0656 0.9427 -0.3270\nvn 0.1058 0.9715 -0.2122\nvn 0.1074 0.9732 -0.2034\nvn 0.0404 0.9947 -0.0948\nvn 0.0259 0.9937 -0.1093\nvn 0.1656 0.9634 -0.2109\nvn 0.5155 0.8336 -0.1985\nvn 0.4686 0.8820 -0.0499\nvn 0.1052 0.9893 -0.1012\nvn 0.8955 0.4042 -0.1859\nvn 0.9321 0.3613 -0.0249\nvn 0.0577 -0.1674 -0.9842\nvn 0.0000 -0.1816 -0.9834\nvn 0.1091 -0.1436 -0.9836\nvn 0.0723 -0.7408 -0.6678\nvn 0.0361 -0.7510 -0.6593\nvn 0.0000 -0.7554 -0.6552\nvn 0.1393 -0.1242 -0.9824\nvn 0.1220 -0.0720 -0.9899\nvn -0.1529 -0.6224 -0.7676\nvn 0.0616 -0.7266 -0.6843\nvn 0.1186 -0.0955 -0.9883\nvn 0.0332 -0.1051 -0.9939\nvn -0.6458 -0.0831 -0.7589\nvn -0.4905 -0.3082 -0.8151\nvn 0.0302 -0.1340 -0.9905\nvn 0.0316 -0.1392 -0.9897\nvn -0.6505 -0.1057 -0.7521\nvn -0.6502 -0.1024 -0.7528\nvn 0.0890 -0.0673 -0.9937\nvn 0.0748 0.0159 -0.9971\nvn -0.2090 0.4664 -0.8595\nvn -0.5523 0.0941 -0.8283\nvn 0.1452 0.5278 -0.8368\nvn 0.1280 0.3903 -0.9117\nvn 0.1007 0.5315 -0.8410\nvn 0.1070 0.4168 -0.9027\nvn 0.0855 0.6643 -0.7426\nvn 0.0611 0.6407 -0.7653\nvn 0.0554 0.5524 -0.8317\nvn 0.0566 0.4425 -0.8950\nvn 0.0000 0.5624 -0.8268\nvn 0.0000 0.4568 -0.8895\nvn 0.0000 0.6846 -0.7289\nvn 0.0438 0.6784 -0.7334\nvn 0.0127 -0.9719 -0.2349\nvn 0.0000 -0.9722 -0.2341\nvn 0.0249 -0.9713 -0.2367\nvn 0.0136 -0.9916 -0.1285\nvn 0.0067 -0.9917 -0.1281\nvn 0.0000 -0.9918 -0.1280\nvn -0.0148 -0.9699 -0.2429\nvn -0.3528 -0.8878 -0.2956\nvn -0.4028 -0.9006 -0.1629\nvn -0.0323 -0.9905 -0.1338\nvn -0.8574 -0.3971 -0.3272\nvn -0.9545 -0.0334 -0.2962\nvn -0.9831 -0.0206 -0.1816\nvn -0.9022 -0.3881 -0.1880\nvn -0.9547 -0.0401 -0.2947\nvn -0.9547 -0.0413 -0.2947\nvn -0.9830 -0.0254 -0.1820\nvn -0.9831 -0.0247 -0.1816\nvn -0.9041 0.2598 -0.3392\nvn -0.4566 0.8138 -0.3594\nvn -0.4969 0.8398 -0.2184\nvn -0.9309 0.3006 -0.2073\nvn -0.0279 0.9541 -0.2982\nvn 0.0321 0.9572 -0.2875\nvn 0.0195 0.9846 -0.1738\nvn -0.0491 0.9821 -0.1820\nvn 0.0167 0.9584 -0.2849\nvn 0.0000 0.9590 -0.2835\nvn 0.0000 0.9850 -0.1723\nvn 0.0097 0.9849 -0.1728\nvn 0.5615 0.2265 0.7958\nvn 0.4830 0.2387 0.8424\nvn 0.5666 0.1020 0.8177\nvn 0.5178 0.1689 0.8386\nvn 0.5302 0.2169 0.8197\nvn 0.4769 0.2376 0.8462\nvn 0.7634 0.1685 0.6235\nvn 0.6771 0.1369 0.7230\nvn 0.7962 0.2143 0.5658\nvn 0.6843 0.1965 0.7022\nvn 0.3565 0.1839 0.9160\nvn 0.4358 0.1578 0.8861\nvn 0.7763 0.3677 0.5120\nvn 0.6558 0.3080 0.6892\nvn 0.6901 0.5154 0.5080\nvn 0.6456 0.4011 0.6499\nvn 0.4393 0.1025 0.8924\nvn 0.3148 0.2108 0.9254\nvn 0.5235 0.6737 0.5216\nvn 0.5479 0.4638 0.6962\nvn 0.3784 0.7543 0.5364\nvn 0.4938 0.4619 0.7367\nvn 0.5426 -0.0472 0.8386\nvn 0.5504 -0.0121 0.8348\nvn 0.2593 0.7969 0.5457\nvn 0.3845 0.4820 0.7873\nvn 0.1656 0.8171 0.5522\nvn 0.2586 0.4963 0.8287\nvn 0.3017 -0.0558 0.9518\nvn 0.4436 -0.0597 0.8942\nvn 0.1016 0.8217 0.5608\nvn 0.1662 0.5098 0.8440\nvn 0.0733 0.3850 0.9200\nvn 0.3225 0.0536 0.9450\nvn 0.2281 -0.0398 0.9728\nvn 0.1584 0.2723 0.9491\nvn 0.1422 0.1371 0.9803\nvn 0.4304 0.1364 0.8922\nvn 0.4399 0.1585 0.8839\nvn 0.1466 0.0696 0.9867\nvn 0.2086 0.0821 0.9745\nvn 0.2606 0.1461 0.9543\nvn 0.3559 0.1094 0.9281\nvn 0.1818 0.2582 0.9488\nvn 0.2656 0.2574 0.9290\nvn 0.2704 0.2269 0.9356\nvn 0.2085 0.2082 0.9556\nvn 0.3817 0.2519 0.8893\nvn 0.3798 0.2407 0.8932\nvn 0.3326 0.6825 0.6507\nvn 0.3423 0.7140 0.6108\nvn 0.1649 0.4590 0.8730\nvn -0.1616 0.6741 0.7207\nvn 0.1268 0.9181 0.3753\nvn 0.1821 0.9290 0.3222\nvn -0.0542 0.1791 0.9823\nvn -0.1080 0.1222 0.9866\nvn -0.3711 0.0626 0.9265\nvn -0.3640 0.1689 0.9160\nvn -0.0819 0.0739 0.9939\nvn 0.1523 -0.2033 0.9672\nvn -0.0471 -0.5060 0.8612\nvn -0.3242 -0.0441 0.9449\nvn 0.4098 -0.4796 0.7759\nvn 0.4472 -0.5322 0.7189\nvn 0.3066 -0.8036 0.5101\nvn 0.2489 -0.7710 0.5861\nvn 0.3695 -0.5417 0.7550\nvn 0.2563 -0.5437 0.7991\nvn 0.1749 -0.8181 0.5478\nvn 0.2517 -0.8132 0.5248\nvn 0.2372 -0.5246 0.8176\nvn 0.5285 -0.3037 0.7927\nvn 0.5530 -0.6293 0.5460\nvn 0.1907 -0.8072 0.5587\nvn 0.7672 0.0128 0.6412\nvn 0.7990 0.1001 0.5929\nvn 0.9342 0.0604 0.3516\nvn 0.9023 -0.1304 0.4109\nvn 0.7345 0.1947 0.6500\nvn 0.4695 0.4941 0.7317\nvn 0.5217 0.7521 0.4028\nvn 0.8946 0.2494 0.3706\nvn 0.2028 0.6816 0.7030\nvn 0.2024 0.7019 0.6829\nvn 0.1106 0.9223 0.3703\nvn 0.1472 0.9126 0.3813\nvn 0.2768 0.7110 0.6463\nvn 0.1508 0.9258 0.3465\nvn 0.2140 -0.6434 -0.7350\nvn 0.2081 -0.8286 -0.5197\nvn 0.2243 -0.4229 -0.8780\nvn 0.0000 -0.4375 -0.8992\nvn 0.0000 -0.6600 -0.7512\nvn 0.0000 -0.8495 -0.5276\nvn 0.2333 -0.2291 -0.9450\nvn 0.2420 -0.0790 -0.9670\nvn 0.0000 -0.0822 -0.9966\nvn 0.0000 -0.2352 -0.9719\nvn 0.8025 0.0168 -0.5963\nvn 0.2395 0.0277 -0.9705\nvn 0.2316 0.0693 -0.9703\nvn 0.0000 0.0712 -0.9974\nvn 0.0000 0.0273 -0.9996\nvn 0.3165 -0.5170 0.7953\nvn 0.3922 -0.2123 0.8950\nvn 0.1975 -0.2299 0.9529\nvn 0.0837 -0.4964 0.8640\nvn 0.2062 0.0558 0.9769\nvn 0.0000 0.0570 0.9984\nvn 0.0000 -0.3207 0.9471\nvn -0.0269 -0.4920 0.8701\nvn 0.2098 0.0233 0.9774\nvn 0.2123 -0.0592 0.9754\nvn 0.0000 -0.0606 0.9981\nvn 0.0000 0.0233 0.9997\nvn 0.2172 -0.2035 0.9546\nvn 0.2201 -0.4183 0.8812\nvn 0.0000 -0.4298 0.9029\nvn 0.0000 -0.2091 0.9779\nvn 0.2154 -0.6296 0.7464\nvn 0.2180 -0.8084 0.5468\nvn 0.0000 -0.8304 0.5571\nvn 0.0000 -0.6457 0.7635\nvn 0.2172 -0.9345 0.2819\nvn 0.2100 -0.9777 0.0005\nvn 0.0000 -1.0000 0.0013\nvn 0.0000 -0.9575 0.2882\nvn 0.2080 -0.9412 -0.2662\nvn 0.0000 -0.9627 -0.2705\nvn 0.2438 -0.9292 0.2775\nvn 0.2402 -0.8238 0.5133\nvn 0.2400 -0.9703 0.0286\nvn 0.0000 -0.9995 0.0296\nvn 0.0000 -0.9584 0.2853\nvn 0.0000 -0.8507 0.5256\nvn 0.2291 -0.9481 -0.2205\nvn 0.2304 -0.8732 -0.4293\nvn 0.0000 -0.8962 -0.4435\nvn 0.0000 -0.9741 -0.2262\nvn 0.2503 -0.7529 -0.6086\nvn 0.2727 -0.6076 -0.7459\nvn 0.0000 -0.6283 -0.7779\nvn 0.0000 -0.7736 -0.6336\nvn 0.2816 -0.4361 -0.8547\nvn 0.2803 -0.2232 -0.9336\nvn 0.0000 -0.2310 -0.9729\nvn 0.0000 -0.4518 -0.8921\nvn 0.2786 -0.1103 -0.9540\nvn 0.2008 -0.1020 -0.9743\nvn 0.0494 -0.1001 -0.9937\nvn 0.0000 -0.1028 -0.9947\nvn 0.2755 -0.1733 0.9456\nvn 0.2768 -0.3245 0.9044\nvn 0.2615 -0.0048 0.9652\nvn 0.0000 -0.0050 1.0000\nvn 0.0000 -0.1578 0.9875\nvn 0.0154 -0.3038 0.9526\nvn 0.2545 -0.2668 0.9295\nvn 0.2542 -0.1286 0.9585\nvn 0.2522 -0.4443 0.8596\nvn 0.0000 -0.4625 0.8866\nvn 0.0000 -0.2772 0.9608\nvn 0.0000 -0.1350 0.9908\nvn 0.2433 -0.6495 0.7204\nvn 0.0000 -0.6707 0.7417\nvn 0.8613 0.5080 -0.0013\nvn 0.9996 0.0261 0.0089\nvn 0.9995 0.0247 0.0181\nvn 0.8618 0.5072 0.0052\nvn 0.9988 0.0216 0.0435\nvn 0.8631 0.5044 0.0252\nvn 0.9498 0.0346 0.3110\nvn 0.9497 0.0235 0.3122\nvn 0.8853 0.3692 0.2826\nvn 0.9859 0.0334 0.1638\nvn 0.8638 0.4878 0.1260\nvn 0.8469 0.5317 -0.0060\nvn 0.9992 0.0374 -0.0092\nvn 0.9995 0.0323 -0.0071\nvn 0.8530 0.5219 -0.0060\nvn 0.9996 0.0285 -0.0022\nvn 0.8571 0.5151 -0.0042\nvn 0.9590 0.0486 -0.2792\nvn 0.9998 0.0106 -0.0129\nvn 0.8164 -0.0252 0.5769\nvn 0.9997 0.0222 0.0044\nvn 0.8695 0.4939 -0.0049\nvn 0.9861 0.0219 -0.1648\nvn 0.8905 0.4368 -0.1274\nvn 0.9988 0.0410 0.0251\nvn 0.8425 0.5383 0.0214\nvn 0.9548 0.0308 -0.2955\nvn 0.9049 0.3314 -0.2668\nvn 0.9998 0.0119 0.0125\nvn 0.9996 0.0270 0.0057\nvn 0.8596 0.5109 -0.0026\nvn 0.2422 -0.1166 -0.9632\nvn 0.2280 -0.2777 -0.9332\nvn 0.0014 -0.2608 -0.9654\nvn 0.0000 -0.1053 -0.9944\nvn 0.2572 -0.0387 0.9656\nvn 0.0000 -0.0395 0.9992\nvn 0.0583 -0.9981 -0.0186\nvn 0.0620 -0.9980 -0.0148\nvn 0.0638 -0.9975 -0.0291\nvn 0.1096 -0.9925 -0.0541\nvn 0.5423 0.8277 0.1440\nvn 0.4326 0.9004 0.0458\nvn 0.4022 0.9154 0.0119\nvn 0.4089 0.9126 0.0005\nvn 0.4190 0.9080 -0.0013\nvn 0.4269 0.9043 -0.0044\nvn 0.4308 0.9024 -0.0101\nvn 0.4334 0.9011 -0.0121\nvn 0.4347 0.9005 -0.0096\nvn 0.4374 0.8992 -0.0016\nvn 0.4497 0.8931 -0.0113\nvn 0.4992 0.8653 -0.0446\nvn 0.6016 0.7870 -0.1365\nvn 0.1314 -0.9913 0.0107\nvn 0.0808 -0.9966 0.0121\nvn 0.0734 -0.9971 0.0193\nvn 0.0736 -0.9971 0.0179\nvn 0.0722 -0.9973 0.0158\nvn 0.0709 -0.9974 0.0146\nvn 0.0701 -0.9975 0.0091\nvn 0.0686 -0.9976 -0.0037\nvn 0.0656 -0.9978 -0.0121\nvn 0.1438 0.9883 -0.0500\nvn 0.1775 0.9830 -0.0473\nvn 0.2567 0.9654 -0.0456\nvn 0.3456 0.9364 -0.0605\nvn 0.4591 0.8845 -0.0830\nvn 0.5643 0.8200 -0.0956\nvn 0.6784 0.7197 -0.1476\nvn 0.8158 0.5660 -0.1185\nvn 0.0849 0.7170 -0.6919\nvn 0.0361 0.7284 -0.6842\nvn 0.0362 0.6930 -0.7200\nvn 0.0894 0.6855 -0.7225\nvn 0.0000 0.7352 -0.6779\nvn 0.0000 0.6980 -0.7161\nvn 0.0000 0.6570 -0.7539\nvn 0.0359 0.6556 -0.7542\nvn 0.0888 0.6534 -0.7518\nvn 0.0489 0.1485 -0.9877\nvn 0.0000 0.1451 -0.9894\nvn 0.1364 0.1513 -0.9790\nvn 0.0686 -0.7588 -0.6477\nvn 0.0213 -0.7609 -0.6485\nvn 0.0000 -0.7633 -0.6460\nvn 0.2327 0.1712 -0.9573\nvn 0.2865 0.2118 -0.9344\nvn -0.1696 -0.7056 -0.6880\nvn 0.0595 -0.7633 -0.6433\nvn 0.7262 0.5203 -0.4492\nvn 0.3173 0.2608 -0.9117\nvn 0.4302 0.2451 -0.8688\nvn 0.0971 0.0461 -0.9942\nvn -0.1794 0.4234 -0.8880\nvn -0.4316 -0.3270 -0.8407\nvn 0.1571 0.7300 -0.6651\nvn 0.1174 0.6691 -0.7338\nvn 0.0998 0.6578 -0.7465\nvn 0.0258 0.9827 -0.1834\nvn 0.0114 0.9827 -0.1847\nvn 0.0090 0.9913 -0.1310\nvn 0.0195 0.9912 -0.1307\nvn 0.0052 0.9827 -0.1850\nvn 0.0043 0.9914 -0.1309\nvn 0.0034 0.9971 -0.0753\nvn 0.0066 0.9971 -0.0750\nvn 0.0128 0.9971 -0.0742\nvn 0.0000 -0.9994 -0.0356\nvn -0.0097 -0.9993 -0.0356\nvn -0.0122 -0.9997 0.0184\nvn 0.0000 -0.9998 0.0194\nvn -0.0214 -0.9991 -0.0357\nvn -0.0287 -0.9995 0.0160\nvn 0.0558 -0.7867 -0.6147\nvn 0.0181 -0.7857 -0.6183\nvn 0.0000 -0.7819 -0.6234\nvn -0.1138 -0.9923 -0.0490\nvn -0.1285 -0.9917 0.0050\nvn -0.4469 -0.8889 -0.1006\nvn -0.4604 -0.8867 -0.0419\nvn -0.2157 -0.7116 -0.6686\nvn 0.0424 -0.7774 -0.6275\nvn -0.9201 -0.3116 -0.2371\nvn -0.9304 -0.3309 -0.1575\nvn -0.6445 0.7013 -0.3046\nvn -0.6688 0.7097 -0.2213\nvn -0.7314 0.6699 -0.1276\nvn -0.9450 -0.3181 -0.0754\nvn -0.0500 0.9787 -0.1991\nvn -0.0568 0.9883 -0.1411\nvn -0.0755 0.9937 -0.0830\nvn 0.0331 -0.1478 0.9885\nvn 0.0000 -0.1423 0.9898\nvn 0.0843 -0.1537 0.9845\nvn 0.0601 0.7096 0.7019\nvn 0.0225 0.7142 0.6996\nvn 0.0000 0.7169 0.6971\nvn 0.1632 -0.1531 0.9746\nvn 0.2831 -0.1575 0.9461\nvn 0.2026 0.6933 0.6916\nvn 0.1155 0.7077 0.6970\nvn 0.3819 -0.2011 0.9020\nvn 0.4715 -0.0299 0.8813\nvn -0.2470 0.3383 0.9080\nvn 0.1220 0.6044 0.7873\nvn 0.3248 -0.0419 0.9449\nvn 0.2992 -0.0412 0.9533\nvn -0.5070 -0.0320 0.8613\nvn -0.4837 0.0176 0.8750\nvn 0.3359 -0.0728 0.9391\nvn 0.3948 -0.1093 0.9122\nvn -0.0671 -0.5484 0.8335\nvn -0.4371 -0.1722 0.8827\nvn 0.3845 -0.1804 0.9053\nvn 0.2826 -0.2081 0.9363\nvn 0.1851 -0.7512 0.6335\nvn 0.1914 -0.7203 0.6667\nvn 0.1632 -0.2249 0.9606\nvn 0.0831 -0.2309 0.9694\nvn 0.0543 -0.7672 0.6390\nvn 0.1046 -0.7645 0.6361\nvn 0.0326 -0.2390 0.9705\nvn 0.0000 -0.2447 0.9696\nvn 0.0000 -0.7743 0.6327\nvn 0.0202 -0.7718 0.6355\nvn 0.0057 0.9834 0.1813\nvn 0.0000 0.9835 0.1809\nvn 0.0153 0.9832 0.1815\nvn 0.0036 0.9991 0.0433\nvn 0.0014 0.9990 0.0437\nvn 0.0000 0.9990 0.0438\nvn 0.0298 0.9832 0.1802\nvn 0.0515 0.9823 0.1798\nvn 0.0121 0.9990 0.0419\nvn 0.0070 0.9991 0.0427\nvn -0.2542 0.9340 0.2510\nvn -0.8271 0.4672 0.3125\nvn -0.8856 0.4374 0.1560\nvn -0.3790 0.9201 0.0989\nvn -0.9540 0.0507 0.2954\nvn -0.9565 -0.0058 0.2915\nvn -0.9883 0.0001 0.1527\nvn -0.9864 0.0555 0.1549\nvn -0.9409 -0.1750 0.2900\nvn -0.6239 -0.7440 0.2391\nvn -0.7342 -0.6737 0.0839\nvn -0.9761 -0.1631 0.1437\nvn -0.0879 -0.9882 0.1251\nvn 0.0274 -0.9949 0.0968\nvn -0.0126 -0.9990 -0.0418\nvn -0.1786 -0.9838 -0.0155\nvn 0.0156 -0.9953 0.0957\nvn 0.0079 -0.9954 0.0958\nvn -0.0036 -0.9991 -0.0433\nvn -0.0071 -0.9991 -0.0427\nvn 0.0029 -0.9955 0.0949\nvn 0.0000 -0.9955 0.0944\nvn 0.0000 -0.9990 -0.0438\nvn -0.0014 -0.9990 -0.0437\nvn 0.2094 -0.2887 0.9342\nvn 0.2482 -0.3120 0.9171\nvn 0.2748 -0.1457 0.9504\nvn 0.4969 -0.4202 0.7592\nvn 0.2124 -0.5792 0.7870\nvn 0.2110 -0.5833 0.7843\nvn 0.3502 -0.0435 0.9356\nvn 0.2705 0.0583 0.9609\nvn 0.4998 0.3531 0.7909\nvn 0.7161 -0.0281 0.6973\nvn 0.1498 -0.0337 0.9881\nvn 0.2139 0.2037 0.9554\nvn 0.2662 -0.0818 0.9604\nvn 0.2584 0.2246 0.9395\nvn 0.2275 0.5115 0.8286\nvn 0.2221 0.5080 0.8321\nvn 0.4066 -0.0697 0.9109\nvn 0.3193 0.1326 0.9383\nvn 0.4601 -0.0393 0.8870\nvn 0.2767 0.0754 0.9580\nvn -0.0984 0.1859 0.9776\nvn 0.1617 0.4409 0.8829\nvn 0.4593 -0.0409 0.8873\nvn 0.1610 -0.0463 0.9858\nvn 0.2686 -0.1614 0.9496\nvn -0.1042 -0.2776 0.9550\nvn -0.2022 -0.0493 0.9781\nvn 0.3118 -0.2241 0.9233\nvn 0.1435 -0.5175 0.8435\nvn 0.0271 -0.9933 0.1120\nvn 0.1608 -0.9829 0.0892\nvn 0.1419 -0.9898 0.0074\nvn 0.0079 -0.9992 0.0382\nvn 0.6751 -0.7376 -0.0115\nvn 0.6672 -0.7381 -0.1007\nvn 0.9968 0.0052 -0.0793\nvn 0.9880 0.0089 -0.1543\nvn 0.9314 0.3616 -0.0413\nvn 0.9217 0.3702 -0.1161\nvn 0.9049 0.3733 -0.2042\nvn 0.9715 0.0121 -0.2365\nvn 0.2984 0.9452 0.1319\nvn 0.1750 0.9692 0.1729\nvn 0.1558 0.9835 0.0922\nvn 0.2842 0.9574 0.0508\nvn 0.0514 0.9795 0.1949\nvn 0.0320 0.9920 0.1217\nvn 0.0110 0.9991 0.0420\nvn 0.1462 0.9892 0.0085\nvn 0.2720 0.9620 -0.0234\nvn -0.2504 0.9251 0.2853\nvn -0.3140 0.9242 0.2173\nvn -0.7873 0.4712 0.3975\nvn -0.8446 0.4328 0.3150\nvn -0.8802 0.4132 0.2333\nvn -0.3826 0.9141 0.1342\nvn -0.9215 -0.0218 0.3878\nvn -0.9501 -0.0187 0.3113\nvn -0.7898 -0.5023 0.3518\nvn -0.8441 -0.4608 0.2739\nvn -0.9715 -0.0149 0.2364\nvn -0.2739 -0.9396 0.2053\nvn -0.3329 -0.9329 0.1369\nvn 0.6965 -0.1347 -0.7048\nvn 0.6309 -0.2900 -0.7196\nvn 0.7425 -0.0724 -0.6659\nvn 0.6083 -0.1756 -0.7740\nvn 0.5681 -0.3799 -0.7300\nvn 0.5423 -0.5822 -0.6057\nvn 0.7079 -0.0184 -0.7060\nvn 0.6741 -0.0457 -0.7372\nvn 0.6823 -0.0767 -0.7270\nvn 0.6607 -0.0812 -0.7462\nvn 0.6398 -0.0802 -0.7643\nvn 0.6218 -0.0600 -0.7808\nvn 0.6652 -0.0750 -0.7429\nvn 0.6530 -0.0913 -0.7518\nvn 0.6569 -0.0048 -0.7540\nvn 0.6569 -0.0229 -0.7536\nvn 0.6552 -0.0411 -0.7543\nvn 0.6524 -0.1043 -0.7506\nvn 0.6607 0.2901 -0.6923\nvn 0.6465 0.1974 -0.7369\nvn 0.5829 0.3530 -0.7319\nvn 0.5767 0.3609 -0.7329\nvn 0.5839 0.3578 -0.7287\nvn 0.6110 0.1082 -0.7841\nvn 0.5084 0.4192 -0.7522\nvn 0.5192 0.4724 -0.7122\nvn 0.6821 0.1010 -0.7242\nvn 0.6907 0.4743 -0.5459\nvn 0.4494 0.5958 -0.6656\nvn 0.7067 -0.0421 -0.7062\nvn 0.7425 -0.1268 -0.6577\nvn 0.9314 -0.0895 -0.3527\nvn 0.9118 0.0834 -0.4021\nvn 0.7013 -0.1693 -0.6925\nvn 0.6491 -0.2029 -0.7331\nvn 0.7098 -0.5516 -0.4380\nvn 0.9153 -0.1881 -0.3560\nvn 0.5918 -0.3496 -0.7263\nvn 0.4206 -0.7385 -0.5268\nvn 0.0567 -0.9928 -0.1056\nvn -0.0136 -0.9794 -0.2013\nvn -0.2311 -0.9660 -0.1159\nvn 0.0217 -0.9986 -0.0474\nvn -0.5806 -0.6524 -0.4871\nvn -0.8133 -0.5108 -0.2784\nvn -0.8574 -0.5129 -0.0430\nvn -0.3157 -0.9487 0.0154\nvn -0.0042 -0.9998 0.0189\nvn -0.6521 -0.1300 -0.7469\nvn -0.8886 -0.0656 -0.4538\nvn -0.5697 0.0114 -0.8217\nvn -0.8458 0.0374 -0.5321\nvn -0.9868 0.0554 -0.1518\nvn -0.9915 -0.0433 -0.1224\nvn -0.2732 0.1391 -0.9518\nvn -0.7364 0.1669 -0.6556\nvn -0.5033 0.2661 -0.8221\nvn -0.7517 0.3256 -0.5734\nvn -0.9237 0.3486 -0.1590\nvn -0.9588 0.2027 -0.1990\nvn 0.0391 0.7433 -0.6678\nvn 0.1429 0.9304 -0.3375\nvn -0.0494 0.9752 -0.2159\nvn -0.1646 0.8856 -0.4343\nvn 0.0836 0.9805 -0.1779\nvn 0.0422 0.9936 -0.1045\nvn 0.0053 0.9997 -0.0232\nvn -0.1913 0.9802 -0.0517\nvn -0.3552 0.9294 -0.0997\nvn 0.2120 0.9698 -0.1202\nvn 0.1337 0.9886 -0.0682\nvn 0.7412 0.6657 -0.0858\nvn 0.6184 0.7844 -0.0468\nvn 0.1030 0.9946 -0.0125\nvn 0.9868 0.1525 -0.0532\nvn 0.9795 0.1997 -0.0254\nvn 0.9979 -0.0480 -0.0425\nvn 0.9989 -0.0447 -0.0140\nvn 0.9767 -0.2099 -0.0434\nvn 0.9783 -0.2065 -0.0159\nvn 0.7631 -0.6436 -0.0584\nvn 0.6862 -0.7270 -0.0242\nvn 0.2517 -0.9650 -0.0738\nvn 0.1703 -0.9848 -0.0322\nvn 0.1531 -0.9881 0.0147\nvn -0.6038 -0.7317 0.3161\nvn -0.5725 -0.7704 0.2805\nvn -0.5645 -0.7794 0.2718\nvn -0.6043 -0.7302 0.3187\nvn -0.3165 -0.9188 0.2358\nvn -0.3785 -0.9146 0.1420\nvn -0.5275 -0.8453 0.0854\nvn -0.5689 -0.7752 0.2745\nvn -0.6061 -0.7280 0.3203\nvn -0.6736 -0.6617 0.3292\nvn -0.6418 -0.6877 0.3391\nvn -0.6428 -0.6883 0.3363\nvn -0.6771 -0.6615 0.3225\nvn -0.6366 -0.6942 0.3357\nvn -0.6654 -0.6703 0.3285\nvn -0.8715 -0.4903 0.0092\nvn -0.8340 -0.5517 0.0056\nvn -0.8064 -0.5914 -0.0023\nvn -0.8719 -0.4896 0.0107\nvn -0.4118 -0.8886 0.2019\nvn -0.4467 -0.8938 0.0399\nvn -0.4371 -0.8958 -0.0808\nvn -0.8339 -0.5519 0.0056\nvn -0.8724 -0.4887 0.0094\nvn -0.9346 -0.3557 -0.0023\nvn -0.9192 -0.3936 0.0090\nvn -0.9153 -0.4027 0.0055\nvn -0.9319 -0.3626 -0.0119\nvn -0.9113 -0.4115 0.0084\nvn -0.9291 -0.3698 -0.0026\nvn -0.8743 -0.4837 -0.0395\nvn -0.9099 -0.4124 -0.0450\nvn -0.9138 -0.4034 -0.0471\nvn -0.8757 -0.4813 -0.0386\nvn -0.9244 -0.3775 -0.0538\nvn -0.9258 -0.3731 -0.0606\nvn -0.9286 -0.3672 -0.0538\nvn -0.9184 -0.3930 -0.0450\nvn -0.8767 -0.4793 -0.0396\nvn -0.4660 -0.8321 -0.3006\nvn -0.8368 -0.5463 -0.0346\nvn -0.7847 -0.6179 -0.0491\nvn -0.4466 -0.8940 -0.0354\nvn -0.7783 -0.6273 -0.0259\nvn -0.5094 -0.8598 0.0349\nvn -0.0683 -0.9901 0.1221\nvn -0.0778 -0.9929 0.0904\nvn -0.1653 -0.9778 0.1282\nvn -0.0797 -0.9892 0.1231\nvn -0.0996 -0.9897 0.1026\nvn -0.2828 -0.9583 0.0416\nvn -0.1984 -0.9622 0.1864\nvn -0.1311 -0.9857 0.1058\nvn -0.1191 -0.9884 0.0943\nvn -0.0758 -0.9929 0.0920\nvn 0.0000 -0.9960 0.0887\nvn 0.0000 -0.9925 0.1225\nvn -0.0265 -0.9917 0.1256\nvn -0.0231 -0.9955 0.0912\nvn 0.0000 -0.9907 0.1357\nvn -0.0122 -0.9904 0.1376\nvn -0.0222 -0.9897 0.1409\nvn -0.0378 -0.9901 0.1348\nvn -0.1634 -0.9863 0.0232\nvn -0.1783 -0.9835 0.0300\nvn -0.1703 -0.9797 0.1058\nvn -0.1301 -0.9906 -0.0412\nvn -0.1183 -0.9918 -0.0478\nvn -0.0722 -0.9955 -0.0621\nvn -0.0810 -0.9966 -0.0108\nvn -0.0750 -0.9968 0.0282\nvn -0.0202 -0.9996 -0.0165\nvn -0.0182 -0.9995 0.0264\nvn -0.0208 -0.9969 -0.0763\nvn 0.0000 -0.9971 -0.0754\nvn 0.0000 -0.9998 -0.0192\nvn 0.0000 -0.9997 0.0255\nvn -0.0903 -0.9921 0.0871\nvn -0.1195 -0.9919 0.0418\nvn -0.1165 -0.9922 0.0432\nvn 0.1159 -0.9681 -0.2220\nvn -0.0755 -0.9957 0.0537\nvn -0.0201 -0.9985 0.0511\nvn 0.0000 -0.9988 0.0484\nvn -0.1364 -0.9882 -0.0701\nvn -0.1396 -0.9875 -0.0732\nvn -0.1644 -0.9810 -0.1027\nvn -0.0478 -0.8411 -0.5387\nvn -0.2042 -0.9789 0.0034\nvn -0.0270 -0.9996 -0.0060\nvn 0.0312 -0.9993 0.0189\nvn -0.0173 -0.9970 -0.0754\nvn -0.0572 -0.9943 -0.0902\nvn -0.0120 -0.9947 -0.1017\nvn 0.0011 -0.9937 -0.1121\nvn 0.0029 -0.9937 -0.1119\nvn 0.0042 -0.9937 -0.1122\nvn 0.0000 -0.9935 -0.1133\nvn 0.0000 -0.9943 -0.1068\nvn 0.2155 -0.0651 -0.9743\nvn 0.1274 -0.1190 -0.9847\nvn 0.2487 -0.0211 -0.9684\nvn 0.2434 -0.0332 -0.9694\nvn 0.2053 -0.0696 -0.9762\nvn 0.1325 -0.1137 -0.9846\nvn 0.0444 -0.1351 -0.9898\nvn 0.0000 -0.1352 -0.9908\nvn 0.0464 -0.1357 -0.9897\nvn 0.0000 -0.1361 -0.9907\nvn 0.6965 -0.4611 -0.5498\nvn 0.7329 -0.6079 -0.3055\nvn 0.3166 -0.9004 -0.2983\nvn 0.4935 -0.5845 -0.6441\nvn 0.7553 -0.6515 -0.0712\nvn 0.2465 -0.9582 -0.1452\nvn 0.0881 -0.9825 -0.1637\nvn 0.1598 -0.9397 -0.3023\nvn 0.3693 -0.6167 -0.6952\nvn 0.0443 -0.9170 -0.3964\nvn 0.2072 -0.6030 -0.7703\nvn -0.0151 -0.9760 -0.2172\nvn -0.4207 -0.6735 -0.6078\nvn -0.2482 -0.6081 -0.7540\nvn -0.0550 -0.4859 -0.8722\nvn 0.6955 0.3995 -0.5972\nvn 0.5120 0.4978 -0.7000\nvn 0.3751 0.8145 -0.4425\nvn 0.7407 0.5466 -0.3904\nvn 0.3979 0.5290 -0.7495\nvn 0.2425 0.8546 -0.4592\nvn 0.1494 0.9488 -0.2785\nvn 0.2938 0.9219 -0.2523\nvn 0.7612 0.6343 -0.1349\nvn 0.2506 0.5169 -0.8185\nvn 0.1382 0.8315 -0.5380\nvn -0.0083 0.4237 -0.9057\nvn -0.1723 0.5448 -0.8206\nvn -0.3603 0.6659 -0.6532\nvn 0.0559 0.9434 -0.3270\nvn 0.5688 -0.0111 -0.8224\nvn 0.7915 -0.0153 -0.6110\nvn 0.4694 -0.0101 -0.8829\nvn 0.3281 -0.0127 -0.9445\nvn -0.0772 -0.0185 -0.9968\nvn -0.4438 -0.0050 -0.8961\nvn -0.6426 0.0024 -0.7662\nvn 0.9100 -0.3062 0.2795\nvn 0.9369 -0.3026 0.1747\nvn 0.9788 0.0026 0.2047\nvn 0.9489 0.0000 0.3155\nvn 0.9998 0.0016 -0.0215\nvn 0.9384 0.3020 0.1677\nvn 0.9100 0.3062 0.2795\nvn 0.3577 -0.9338 -0.0065\nvn 0.2260 -0.9708 -0.0799\nvn 0.3631 -0.7953 0.4855\nvn 0.0750 -0.9715 0.2246\nvn -0.0949 -0.9821 0.1627\nvn 0.0708 -0.9892 -0.1285\nvn -0.0288 -0.9870 -0.1580\nvn -0.2062 -0.9682 0.1413\nvn -0.5597 -0.6922 0.4556\nvn -0.0507 -0.9870 -0.1525\nvn 0.0872 0.9835 -0.1583\nvn 0.2389 0.9650 -0.1078\nvn 0.0524 0.9941 -0.0944\nvn 0.2356 0.9712 -0.0344\nvn 0.3476 0.9372 0.0269\nvn 0.3688 0.9290 -0.0300\nvn -0.0391 0.9842 -0.1728\nvn -0.0109 0.9825 -0.1857\nvn -0.1825 0.9831 0.0158\nvn -0.0420 0.9916 -0.1224\nvn 0.9525 -0.0072 -0.3045\nvn -0.3847 -0.4344 0.8144\nvn -0.4645 -0.3700 0.8045\nvn -0.0805 -0.3732 0.9242\nvn -0.7279 0.3427 0.5939\nvn -0.4934 0.5387 0.6829\nvn -0.4053 0.5857 0.7020\nvn 0.6282 0.0000 0.7780\nvn 0.0287 0.0000 0.9996\nvn 0.3358 0.6371 0.6938\nvn -0.0805 0.3732 0.9242\nvn -0.7279 -0.3427 0.5939\nvn -0.8896 0.0000 0.4568\nvn -0.0980 0.8771 0.4702\nvn -0.3847 0.4344 0.8144\nvn -0.2338 0.8837 0.4054\nvn -0.4645 0.3700 0.8046\nvn -0.4053 -0.5857 0.7019\nvn -0.4934 -0.5387 0.6829\nvn -0.3576 0.8418 0.4043\nvn -0.4679 0.3981 0.7890\nvn -0.6921 0.2843 0.6634\nvn -0.5666 0.1225 0.8148\nvn -0.1504 -0.3427 0.9273\nvn -0.3447 -0.5387 0.7688\nvn -0.6914 0.0000 0.7224\nvn -0.5213 0.0000 0.8534\nvn -0.5666 -0.1225 0.8148\nvn -0.1504 0.3427 0.9273\nvn 0.0492 0.0000 0.9988\nvn -0.4680 -0.3981 0.7890\nvn -0.3447 0.5387 0.7687\nvn -0.3760 0.8318 0.4082\nvn -0.2591 0.8553 0.4487\nvn -0.7719 0.5933 0.2282\nvn -0.7517 0.4465 0.4854\nvn -0.4765 0.5530 0.6835\nvn -0.4228 0.5339 0.7323\nvn -0.9991 0.0000 0.0422\nvn -0.7719 -0.5933 0.2282\nvn -0.7517 -0.4465 0.4854\nvn -0.9250 0.0000 0.3800\nvn -0.3760 -0.8318 0.4082\nvn -0.2591 -0.8553 0.4487\nvn -0.4228 -0.5339 0.7323\nvn -0.4765 -0.5530 0.6835\nvn -0.1655 -0.8318 0.5297\nvn 0.1883 -0.5934 0.7826\nvn -0.0445 -0.4465 0.8937\nvn -0.3537 -0.5530 0.7544\nvn 0.4629 0.0000 0.8864\nvn 0.1883 0.5934 0.7826\nvn -0.0445 0.4465 0.8937\nvn 0.1333 0.0000 0.9911\nvn -0.1655 0.8318 0.5297\nvn -0.3537 0.5530 0.7544\nvn -0.6550 -0.6800 -0.3296\nvn -0.7893 -0.5098 -0.3422\nvn -0.5836 -0.3279 -0.7429\nvn -0.8799 -0.4698 -0.0707\nvn -0.9590 -0.2589 0.1156\nvn -0.9677 -0.2244 0.1151\nvn -0.8713 -0.3522 -0.3416\nvn -0.3915 -0.2866 -0.8744\nvn -0.9995 0.0000 0.0326\nvn -0.9745 0.0011 0.2243\nvn -0.8799 0.4698 -0.0707\nvn -0.9593 0.2594 0.1111\nvn -0.9652 0.2145 0.1497\nvn -0.9108 -0.0468 0.4102\nvn -0.6486 0.6802 -0.3415\nvn -0.7851 0.5108 -0.3502\nvn -0.5942 0.3244 -0.7360\nvn -0.4336 0.2716 -0.8592\nvn -0.8755 0.3489 -0.3342\nvn -0.4274 0.0191 -0.9038\nvn -0.0506 -0.0336 -0.9981\nvn 0.2467 -0.9008 -0.3574\nvn -0.0734 -0.9973 -0.0015\nvn 0.3135 -0.9496 0.0034\nvn 0.4972 -0.8334 -0.2412\nvn -0.4996 -0.6329 0.5914\nvn -0.3091 -0.7201 0.6211\nvn 0.1399 -0.6613 0.7369\nvn 0.7441 -0.6618 0.0912\nvn 0.8272 -0.5378 -0.1626\nvn -0.6599 0.0165 0.7512\nvn -0.6124 -0.0587 0.7884\nvn -0.6841 0.5865 0.4335\nvn -0.6683 0.5672 0.4812\nvn -0.6933 0.5069 0.5122\nvn -0.4974 -0.1348 0.8569\nvn -0.4382 0.8869 -0.1458\nvn -0.3969 0.9061 -0.1463\nvn 0.0363 0.7337 -0.6784\nvn 0.0936 0.7142 -0.6937\nvn -0.0248 0.7313 -0.6815\nvn -0.4993 0.8575 -0.1238\nvn 0.5081 0.0480 -0.8599\nvn 0.5272 0.1027 -0.8435\nvn 0.5501 -0.2495 -0.7969\nvn 0.6433 -0.2200 -0.7333\nvn 0.7024 -0.0701 -0.7082\nvn 0.5264 0.2098 -0.8239\nvn 0.9005 -0.4325 0.0455\nvn 0.9126 -0.3474 -0.2154\nvn 0.4239 -0.5257 0.7375\nvn 0.6584 -0.4840 0.5763\nvn 0.9495 -0.2975 -0.0992\nvn 0.9356 -0.2307 -0.2671\nvn -0.3301 -0.1807 0.9265\nvn -0.7272 0.3640 0.5820\nvn -0.7298 0.3286 0.5995\nvn -0.2049 -0.2409 0.9486\nvn -0.6684 0.7365 -0.1037\nvn -0.1759 0.6945 -0.6976\nvn -0.1079 0.6451 -0.7564\nvn -0.6791 0.7190 -0.1480\nvn 0.4599 0.2989 -0.8361\nvn 0.6998 0.1012 -0.7071\nvn 0.6258 0.1416 -0.7670\nvn 0.4274 0.3128 -0.8482\nvn -0.0148 -0.9994 -0.0298\nvn -0.0862 -0.9961 -0.0167\nvn -0.0789 -0.9968 -0.0154\nvn -0.0112 -0.9998 -0.0180\nvn -0.1140 -0.9934 -0.0119\nvn -0.1069 -0.9941 -0.0140\nvn -0.1059 -0.9942 -0.0148\nvn -0.0773 -0.9969 -0.0147\nvn -0.0104 -0.9998 -0.0145\nvn -0.0123 -0.9998 0.0150\nvn -0.0831 -0.9964 0.0173\nvn -0.0882 -0.9960 0.0146\nvn -0.0147 -0.9998 0.0153\nvn -0.1144 -0.9933 0.0185\nvn -0.1203 -0.9926 0.0129\nvn -0.1103 -0.9939 -0.0036\nvn -0.0852 -0.9963 0.0002\nvn -0.0170 -0.9998 0.0120\nvn -0.4281 0.8695 -0.2460\nvn -0.3591 0.9170 -0.1739\nvn -0.1991 0.9609 -0.1924\nvn -0.2053 0.9503 -0.2337\nvn -0.3824 0.9162 -0.1199\nvn -0.2132 0.9673 -0.1370\nvn -0.1205 0.9823 -0.1433\nvn -0.1222 0.9720 -0.2005\nvn -0.1310 0.9612 -0.2427\nvn -0.5926 0.8053 -0.0180\nvn -0.4034 0.9146 -0.0248\nvn -0.2433 0.9699 -0.0111\nvn -0.2790 0.9601 -0.0179\nvn -0.4114 0.9107 0.0370\nvn -0.2359 0.9709 0.0417\nvn -0.1222 0.9913 0.0485\nvn -0.1269 0.9919 0.0000\nvn -0.1303 0.9913 -0.0175\nvn -0.2597 0.9653 0.0274\nvn -0.3992 0.9095 0.1157\nvn -0.2369 0.9677 0.0866\nvn -0.1409 0.9897 0.0223\nvn -0.4513 0.8807 0.1436\nvn -0.2284 0.9666 0.1165\nvn -0.0762 0.9928 0.0919\nvn -0.0564 0.9967 0.0578\nvn -0.0387 0.9984 0.0400\nvn -0.6013 -0.4903 -0.6309\nvn -0.6795 -0.1314 -0.7218\nvn -0.5795 -0.1284 -0.8048\nvn -0.5038 -0.5232 -0.6873\nvn -0.6668 0.2447 -0.7039\nvn -0.5635 0.2857 -0.7751\nvn -0.4875 0.3310 -0.8079\nvn -0.5038 -0.1166 -0.8559\nvn -0.4352 -0.5428 -0.7183\nvn -0.6723 0.0860 -0.7353\nvn -0.6818 0.1400 -0.7180\nvn -0.5918 0.0902 -0.8010\nvn -0.5871 0.0334 -0.8088\nvn -0.6843 0.1852 -0.7052\nvn -0.5949 0.1434 -0.7909\nvn -0.5087 0.1093 -0.8539\nvn -0.5058 0.0504 -0.8612\nvn -0.4888 -0.0282 -0.8719\nvn -0.0275 -0.0444 0.9986\nvn -0.0325 -0.0435 0.9985\nvn -0.0287 -0.0435 0.9986\nvn -0.0829 -0.0223 0.9963\nvn -0.0457 -0.0474 0.9978\nvn -0.0731 -0.0709 0.9948\nvn -0.0349 0.1518 0.9878\nvn -0.0423 0.6323 0.7736\nvn -0.0260 0.1235 0.9920\nvn -0.0505 0.1291 0.9903\nvn -0.0396 0.0995 0.9942\nvn -0.0906 0.6137 0.7843\nvn -0.5775 -0.4813 0.6594\nvn -0.6844 -0.1050 0.7214\nvn -0.7375 -0.0846 0.6699\nvn -0.6358 -0.4311 0.6402\nvn -0.6941 -0.0432 0.7185\nvn -0.7562 -0.0335 0.6535\nvn -0.8431 -0.0221 0.5373\nvn -0.8316 -0.0595 0.5521\nvn -0.7162 -0.3366 0.6113\nvn -0.5807 -0.8132 0.0375\nvn -0.9971 -0.0617 0.0436\nvn -0.9980 -0.0602 0.0190\nvn -0.5780 -0.8157 0.0228\nvn -0.6718 0.7406 0.0135\nvn -0.6679 0.7443 -0.0011\nvn -0.6646 0.7472 -0.0066\nvn -0.9981 -0.0596 0.0109\nvn -0.5751 -0.8179 0.0177\nvn -0.5658 -0.8243 -0.0177\nvn -0.9985 -0.0529 0.0090\nvn -0.9975 -0.0594 0.0373\nvn -0.6523 -0.7576 -0.0240\nvn -0.6427 0.7652 0.0359\nvn -0.7489 0.6501 0.1283\nvn -0.9705 0.1588 0.1814\nvn -0.9883 -0.1509 0.0187\nvn -0.5945 -0.8040 0.0045\nvn -0.7532 0.2389 0.6129\nvn -0.8026 0.1572 0.5753\nvn -0.8234 0.2937 0.4856\nvn -0.7503 0.3310 0.5722\nvn -0.8501 0.2889 0.4403\nvn -0.8632 0.3367 0.3762\nvn -0.8897 0.3964 0.2264\nvn -0.8802 0.3551 0.3147\nvn -0.8816 0.3123 0.3537\nvn -0.8875 0.4272 0.1727\nvn -0.8987 0.3428 0.2733\nvn -0.9012 0.4286 0.0631\nvn -0.8747 0.4840 0.0248\nvn -0.8386 0.5365 0.0937\nvn -0.8936 0.4149 0.1713\nvn -0.9985 0.0332 0.0439\nvn -0.9901 0.1339 0.0412\nvn -0.9898 0.1413 0.0143\nvn -0.9991 0.0387 0.0168\nvn -0.9759 0.2159 0.0325\nvn -0.9741 0.2257 0.0104\nvn -0.9729 0.2310 0.0025\nvn -0.9896 0.1438 0.0063\nvn -0.9991 0.0399 0.0080\nvn -0.9923 0.0687 0.1025\nvn -0.9865 0.1518 0.0603\nvn -0.9583 0.2492 0.1394\nvn -0.9660 0.1339 0.2210\nvn -0.9683 0.2483 0.0262\nvn -0.9516 0.3016 0.0593\nvn -0.9170 0.3868 0.0973\nvn -0.9199 0.3496 0.1778\nvn -0.9500 0.1957 0.2433\nvn -0.3234 0.9421 -0.0884\nvn -0.3299 0.9358 -0.1245\nvn -0.2060 0.9722 -0.1111\nvn -0.2076 0.9763 -0.0615\nvn -0.4589 0.8591 -0.2265\nvn -0.2030 0.9637 -0.1735\nvn -0.2094 0.9566 -0.2025\nvn -0.1561 0.9799 -0.1236\nvn -0.1283 0.9879 -0.0866\nvn -0.0077 0.9867 0.1624\nvn -0.0019 0.9984 0.0570\nvn -0.0148 0.9602 0.2790\nvn -0.0345 0.9633 0.2662\nvn -0.0167 0.9883 0.1518\nvn -0.0054 0.9985 0.0537\nvn -0.1894 0.9807 0.0483\nvn -0.3098 0.9507 -0.0105\nvn -0.4319 0.9012 -0.0344\nvn -0.2289 0.9690 0.0925\nvn -0.3001 0.9530 0.0421\nvn -0.3694 0.9291 0.0183\nvn -0.3670 0.9298 -0.0283\nvn -0.4661 0.8845 -0.0224\nvn -0.7353 0.6773 -0.0241\nvn -0.6419 0.7661 -0.0325\nvn -0.5810 0.8121 -0.0528\nvn -0.7193 0.6940 -0.0319\nvn -0.7454 0.6660 -0.0287\nvn -0.5835 0.8096 -0.0632\nvn -0.5826 0.8109 -0.0542\nvn -0.5617 0.8257 -0.0523\nvn -0.7008 0.7120 -0.0434\nvn -0.0150 0.9996 -0.0220\nvn -0.0144 0.9998 -0.0073\nvn -0.0314 0.9993 -0.0208\nvn -0.0310 0.9995 -0.0073\nvn -0.0257 0.9997 0.0020\nvn -0.0128 0.9999 0.0069\nvn -0.7847 -0.6199 0.0005\nvn -0.9899 0.1416 0.0015\nvn -0.9874 0.1504 -0.0485\nvn -0.7916 -0.5856 0.1747\nvn -0.7416 0.6706 -0.0160\nvn -0.7027 0.6819 -0.2029\nvn -0.7057 0.6055 -0.3678\nvn -0.9844 0.1392 -0.1075\nvn -0.7934 -0.5064 0.3377\nvn -0.1367 0.6667 -0.7327\nvn -0.1171 0.8126 -0.5709\nvn -0.0972 0.8093 -0.5792\nvn -0.1161 0.6644 -0.7383\nvn -0.1241 0.8859 -0.4469\nvn -0.0851 0.8794 -0.4684\nvn -0.0625 0.8792 -0.4724\nvn -0.0759 0.8058 -0.5872\nvn -0.0916 0.6602 -0.7454\nvn -0.0666 0.9713 -0.2282\nvn -0.0459 0.9824 -0.1808\nvn -0.0345 0.9833 -0.1786\nvn -0.0410 0.9742 -0.2217\nvn -0.0315 0.9897 -0.1399\nvn -0.0303 0.9901 -0.1366\nvn -0.0307 0.9900 -0.1377\nvn -0.0300 0.9836 -0.1777\nvn -0.0313 0.9744 -0.2224\nvn -0.0286 0.9995 -0.0108\nvn -0.0185 0.9997 0.0151\nvn -0.0219 0.9995 0.0223\nvn -0.0337 0.9994 -0.0066\nvn -0.0068 0.9980 0.0626\nvn -0.0089 0.9975 0.0693\nvn -0.0101 0.9970 0.0762\nvn -0.0238 0.9993 0.0294\nvn -0.0334 0.9994 -0.0029\nvn -0.0156 0.9988 0.0452\nvn -0.0175 0.9982 0.0563\nvn -0.0025 0.9975 0.0709\nvn -0.0085 0.9987 0.0499\nvn -0.0272 0.9955 0.0903\nvn 0.0124 0.9945 0.1035\nvn 0.0134 0.9888 0.1483\nvn -0.0064 0.9960 0.0884\nvn -0.2468 -0.5727 -0.7817\nvn -0.2887 -0.1031 -0.9518\nvn -0.1858 -0.1023 -0.9772\nvn -0.1561 -0.5795 -0.7999\nvn -0.2752 0.3890 -0.8791\nvn -0.1736 0.3991 -0.9003\nvn -0.1119 0.4030 -0.9083\nvn -0.1208 -0.1015 -0.9875\nvn -0.1000 -0.5808 -0.8079\nvn -0.1615 -0.1105 -0.9807\nvn -0.1612 -0.0771 -0.9839\nvn -0.1459 -0.0677 -0.9870\nvn -0.1457 -0.1094 -0.9832\nvn -0.1616 -0.0438 -0.9859\nvn -0.1454 -0.0439 -0.9884\nvn -0.1036 -0.0444 -0.9936\nvn -0.1035 -0.0676 -0.9923\nvn -0.1039 -0.1083 -0.9886\nvn -0.2547 -0.0438 0.9660\nvn -0.2526 -0.0436 0.9666\nvn -0.3861 -0.0420 0.9215\nvn -0.3672 -0.0423 0.9292\nvn -0.1641 -0.7511 0.6394\nvn 0.0896 -0.7625 0.6407\nvn 0.4123 -0.3985 0.8192\nvn -0.4592 -0.0414 0.8873\nvn -0.4631 -0.0398 0.8854\nvn -0.0710 0.9926 -0.0986\nvn -0.0850 0.9847 -0.1517\nvn -0.0376 0.9875 -0.1530\nvn -0.0270 0.9952 -0.0938\nvn -0.1131 0.9622 -0.2478\nvn -0.0574 0.9651 -0.2555\nvn -0.0355 0.9639 -0.2638\nvn -0.0180 0.9872 -0.1587\nvn -0.0098 0.9956 -0.0932\nvn -0.0344 0.9926 0.1160\nvn -0.0476 0.9938 0.0999\nvn -0.0243 0.9988 0.0408\nvn -0.0747 0.9733 0.2171\nvn -0.0978 0.9767 0.1908\nvn -0.1222 0.9776 0.1713\nvn -0.0608 0.9943 0.0875\nvn -0.0666 0.9947 -0.0783\nvn -0.0988 0.9919 -0.0797\nvn -0.1120 0.9888 -0.0988\nvn -0.0780 0.9950 -0.0619\nvn -0.0964 0.9922 -0.0792\nvn -0.1068 0.9914 -0.0748\nvn -0.1127 0.9909 -0.0730\nvn -0.0103 -0.9999 -0.0038\nvn -0.0764 -0.9970 -0.0037\nvn -0.0774 -0.9969 0.0085\nvn -0.0107 -0.9999 0.0084\nvn -0.1046 -0.9945 -0.0036\nvn -0.1057 -0.9944 0.0087\nvn -0.1079 -0.9940 0.0144\nvn -0.0790 -0.9968 0.0143\nvn -0.0114 -0.9998 0.0139\nvn -0.0520 0.9881 -0.1445\nvn -0.0501 0.9949 -0.0877\nvn -0.0270 0.9958 -0.0877\nvn -0.1243 0.9884 -0.0867\nvn -0.1281 0.9907 -0.0464\nvn -0.0526 0.9974 -0.0484\nvn -0.0299 0.9983 -0.0501\nvn -0.5700 -0.8216 -0.0020\nvn -0.9981 -0.0609 -0.0002\nvn -0.9982 -0.0587 -0.0074\nvn -0.5638 -0.8258 -0.0118\nvn -0.6611 0.7502 -0.0027\nvn -0.6537 0.7567 -0.0011\nvn -0.6445 0.7646 -0.0001\nvn -0.9984 -0.0565 -0.0069\nvn -0.5558 -0.8312 -0.0139\nvn -0.9991 0.0403 -0.0060\nvn -0.9895 0.1440 -0.0092\nvn -0.9902 0.1385 -0.0168\nvn -0.9991 0.0392 -0.0144\nvn -0.9720 0.2347 -0.0098\nvn -0.9733 0.2289 -0.0172\nvn -0.9746 0.2227 -0.0213\nvn -0.9910 0.1325 -0.0196\nvn -0.9991 0.0378 -0.0154\nvn -0.6710 0.7406 -0.0335\nvn -0.5367 0.8429 -0.0387\nvn -0.5261 0.8498 -0.0327\nvn -0.6633 0.7478 -0.0278\nvn -0.5647 0.8241 -0.0430\nvn -0.5461 0.8368 -0.0390\nvn -0.5173 0.8543 -0.0496\nvn -0.5061 0.8616 -0.0390\nvn -0.6412 0.7661 -0.0428\nvn -0.0229 0.9900 -0.1388\nvn -0.0242 0.9955 -0.0912\nvn -0.0322 0.9954 -0.0900\nvn -0.0344 0.9980 -0.0532\nvn -0.0258 0.9982 -0.0547\nvn -0.5549 0.7820 -0.2836\nvn -0.1935 0.9379 -0.2879\nvn -0.2089 0.9381 -0.2761\nvn -0.4672 0.8369 -0.2850\nvn -0.1921 0.9344 -0.2999\nvn -0.1816 0.9429 -0.2790\nvn -0.1584 0.9551 -0.2501\nvn -0.1939 0.9510 -0.2408\nvn -0.4019 0.8980 -0.1788\nvn -0.8532 -0.4866 0.1876\nvn -0.9469 -0.2141 0.2399\nvn -0.9729 -0.2235 -0.0592\nvn -0.8801 -0.4373 -0.1847\nvn -0.9695 0.0149 0.2445\nvn -0.9944 -0.0065 -0.1047\nvn -0.8587 0.0233 -0.5119\nvn -0.8699 -0.1817 -0.4584\nvn -0.7958 -0.3440 -0.4983\nvn -0.0253 0.9664 -0.2557\nvn -0.0171 0.9966 -0.0799\nvn -0.0627 0.9654 -0.2530\nvn -0.0393 0.9960 -0.0795\nvn -0.0347 0.9982 -0.0494\nvn -0.0155 0.9986 -0.0495\nvn -0.7967 -0.2683 -0.5414\nvn -0.9993 0.0139 0.0353\nvn -0.9958 0.0714 0.0569\nvn -0.7878 -0.4098 -0.4598\nvn -0.8621 0.3825 0.3322\nvn -0.8267 0.5080 0.2417\nvn -0.9913 0.1048 0.0788\nvn -0.7839 -0.5289 -0.3251\nvn -0.6897 -0.5381 -0.4845\nvn -0.3041 -0.9148 -0.2658\nvn -0.2323 -0.9554 -0.1825\nvn -0.7346 -0.6635 -0.1420\nvn -0.0564 -0.9238 -0.3787\nvn -0.0933 -0.9822 -0.1629\nvn -0.1282 -0.9917 -0.0092\nvn -0.1733 -0.9848 0.0100\nvn -0.0051 0.9995 -0.0312\nvn -0.0045 0.9980 -0.0629\nvn -0.0121 0.9992 -0.0370\nvn -0.0081 0.9979 -0.0645\nvn -0.0045 0.9955 -0.0945\nvn -0.3116 0.9489 -0.0495\nvn -0.2129 0.9749 -0.0646\nvn -0.2017 0.9766 -0.0746\nvn -0.2863 0.9567 -0.0521\nvn -0.1079 0.9903 -0.0873\nvn -0.1146 0.9875 -0.1079\nvn -0.1983 0.9747 -0.1024\nvn -0.2729 0.9583 -0.0842\nvn -0.7294 -0.5242 0.4395\nvn -0.7988 -0.1894 0.5709\nvn -0.9899 -0.1357 0.0406\nvn -0.7455 -0.6545 0.1258\nvn -0.8170 -0.0043 0.5766\nvn -0.9998 -0.0003 0.0193\nvn -0.9741 0.1362 -0.1803\nvn -0.9892 -0.1330 -0.0613\nvn -0.6150 -0.7871 -0.0475\nvn -0.7475 0.6643 0.0043\nvn -0.6108 0.7918 -0.0076\nvn -0.6239 0.7815 0.0024\nvn -0.7651 0.6437 0.0150\nvn -0.6063 0.7952 -0.0021\nvn -0.6196 0.7849 0.0040\nvn -0.6144 0.7889 -0.0062\nvn -0.6202 0.7844 -0.0023\nvn -0.7618 0.6477 0.0116\nvn -0.0769 -0.9970 0.0022\nvn -0.0425 -0.9988 0.0245\nvn -0.0827 -0.9966 -0.0043\nvn -0.0578 -0.9983 0.0079\nvn -0.1189 -0.9928 -0.0133\nvn -0.0335 0.9979 0.0552\nvn -0.0285 0.9944 0.1021\nvn 0.0011 0.9942 0.1073\nvn -0.1165 0.9886 0.0956\nvn -0.1133 0.9829 0.1447\nvn -0.0313 0.9875 0.1546\nvn -0.0026 0.9875 0.1578\nvn -0.0074 0.9965 0.0834\nvn 0.0034 0.9925 0.1220\nvn 0.0032 0.9931 0.1169\nvn 0.0070 0.9869 0.1609\nvn 0.0100 0.9866 0.1629\nvn -0.6031 -0.7976 0.0004\nvn -0.9985 -0.0522 -0.0131\nvn -0.9974 -0.0592 0.0407\nvn -0.5798 -0.8139 0.0372\nvn -0.6833 0.7294 -0.0319\nvn -0.6692 0.7430 0.0100\nvn -0.9908 0.0981 -0.0937\nvn -0.9834 0.1787 -0.0317\nvn -0.9895 0.1402 0.0340\nvn -0.9992 0.0354 0.0195\nvn -0.9686 0.2480 0.0150\nvn -0.9771 0.2076 0.0456\nvn -0.6144 0.7890 -0.0068\nvn -0.7525 0.6586 0.0017\nvn -0.5982 0.8012 -0.0138\nvn 0.0397 -0.9973 0.0621\nvn -0.1969 -0.9314 0.3060\nvn -0.2546 -0.8934 0.3702\nvn 0.0232 -0.9872 0.1573\nvn -0.3004 -0.8377 0.4560\nvn -0.0406 -0.9784 0.2025\nvn -0.8383 -0.2841 0.4654\nvn -0.8245 -0.2434 0.5107\nvn -0.8796 -0.0491 0.4731\nvn -0.8724 -0.0493 0.4863\nvn -0.8913 -0.0163 0.4531\nvn -0.8893 -0.0132 0.4570\nvn -0.7419 0.5858 0.3261\nvn -0.7515 0.5579 0.3522\nvn -0.6743 0.6334 0.3795\nvn -0.6817 0.6370 0.3599\nvn -0.8474 0.2707 0.4567\nvn -0.7662 0.3883 0.5119\nvn -0.6325 0.4962 0.5947\nvn -0.4768 0.7866 0.3922\nvn -0.5712 0.5952 0.5651\nvn -0.2831 0.8913 0.3541\nvn -0.3703 0.7525 0.5446\nvn -0.5017 0.5535 0.6647\nvn -0.4117 0.5750 0.7070\nvn -0.2080 0.9119 0.3538\nvn -0.3324 0.7451 0.5781\nvn -0.1721 0.7756 0.6073\nvn -0.1037 0.9325 0.3459\nvn -0.0749 0.9327 0.3526\nvn -0.1178 0.7886 0.6035\nvn -0.2326 0.6116 0.7562\nvn -0.1336 0.6272 0.7673\nvn -0.0674 0.6335 0.7708\nvn -0.0346 0.9149 0.4023\nvn -0.0008 -0.9998 0.0205\nvn 0.0022 -0.9982 -0.0603\nvn -0.0175 -0.8689 0.4946\nvn -0.0430 -0.8687 0.4934\nvn -0.0020 -0.9998 0.0210\nvn 0.0054 -0.9981 -0.0604\nvn 0.0261 -0.9980 -0.0566\nvn -0.0027 -0.9996 0.0264\nvn -0.0732 -0.9948 0.0701\nvn 0.0561 -0.9974 -0.0444\nvn -0.1525 -0.8571 0.4921\nvn -0.3035 -0.8384 0.4527\nvn -0.5111 -0.5683 0.6447\nvn -0.1008 -0.9755 0.1957\nvn 0.0509 -0.9985 -0.0207\nvn -0.0767 -0.9969 -0.0125\nvn -0.0103 -0.9998 -0.0124\nvn -0.1050 -0.9944 -0.0125\nvn -0.9984 -0.0562 -0.0035\nvn -0.5455 -0.8379 -0.0152\nvn -0.6351 0.7724 0.0067\nvn -0.9911 0.1327 -0.0013\nvn -0.9993 0.0353 0.0116\nvn -0.9755 0.2197 -0.0118\nvn -0.4758 0.8784 -0.0447\nvn -0.6130 0.7890 -0.0414\nvn -0.4571 0.8867 -0.0687\nvn -0.8118 -0.5837 0.0160\nvn -0.9886 0.1502 -0.0031\nvn -0.9883 0.1461 -0.0446\nvn -0.8135 -0.5577 0.1647\nvn -0.8159 0.5775 -0.0255\nvn -0.7989 0.5780 -0.1665\nvn -0.8166 0.5127 -0.2651\nvn -0.9863 0.1344 -0.0954\nvn -0.8131 -0.4964 0.3039\nvn -0.5611 0.8263 -0.0498\nvn -0.4414 0.8957 -0.0529\nvn -0.4882 0.8714 -0.0478\nvn -0.6102 0.7886 -0.0749\nvn -0.4681 0.8834 -0.0219\nvn -0.4893 0.8721 -0.0037\nvn -0.7003 0.7136 0.0193\nvn -0.5702 0.8204 -0.0422\nvn -0.6612 0.7489 -0.0436\nvn -0.2669 -0.0261 0.9633\nvn -0.1666 -0.0434 0.9850\nvn -0.1631 -0.0414 0.9857\nvn -0.2706 -0.0391 0.9619\nvn -0.0832 -0.0310 0.9960\nvn -0.0845 -0.0441 0.9954\nvn -0.1606 -0.0445 0.9860\nvn -0.2701 -0.0416 0.9619\nvn -0.7663 -0.0361 0.6414\nvn -0.8491 -0.0195 0.5278\nvn -0.6971 -0.0523 0.7150\nvn -0.7012 -0.0537 0.7109\nvn -0.7750 -0.0415 0.6305\nvn -0.8611 -0.0168 0.5081\nvn -0.6176 -0.0461 0.7851\nvn -0.6102 -0.0465 0.7908\nvn -0.5451 -0.0420 0.8373\nvn -0.5405 -0.0374 0.8405\nvn -0.5112 -0.0420 0.8584\nvn -0.6016 -0.0556 0.7969\nvn -0.9062 -0.0054 0.4228\nvn -0.9108 0.0161 0.4125\nvn -0.9224 -0.0015 0.3862\nvn -0.9389 0.0125 0.3439\nvn -0.9981 -0.0605 -0.0013\nvn -0.9981 -0.0613 0.0071\nvn -0.9993 -0.0376 0.0060\nvn -0.9993 -0.0368 -0.0029\nvn -0.9980 -0.0618 0.0108\nvn -0.9992 -0.0382 0.0098\nvn -0.9991 0.0405 0.0035\nvn -0.8059 -0.0502 -0.5899\nvn -0.9997 0.0020 0.0237\nvn -0.9998 0.0086 0.0160\nvn -0.8010 -0.1445 -0.5809\nvn -0.9560 0.0109 0.2930\nvn -0.9621 0.0759 0.2619\nvn -0.9983 -0.0571 -0.0092\nvn -0.9982 -0.0592 -0.0075\nvn -0.9993 -0.0355 -0.0096\nvn -0.9994 -0.0338 -0.0115\nvn -0.9876 -0.0402 -0.1513\nvn -0.9594 -0.0017 -0.2819\nvn -0.9663 0.0595 -0.2504\nvn -0.9903 -0.0061 -0.1390\nvn -0.9643 0.0248 -0.2635\nvn -0.9674 0.0921 -0.2359\nvn -0.9395 0.2444 -0.2402\nvn -0.9581 0.1946 -0.2102\nvn -0.9967 -0.0663 0.0465\nvn -0.9980 -0.0633 0.0071\nvn -0.9992 -0.0374 0.0106\nvn -0.9980 -0.0439 0.0454\nvn -0.9873 -0.0451 0.1521\nvn -0.9981 -0.0558 0.0251\nvn -0.9993 -0.0309 0.0198\nvn -0.9902 -0.0213 0.1381\nvn -0.0737 0.9787 -0.1917\nvn -0.0996 0.9659 -0.2387\nvn -0.0430 0.9990 0.0074\nvn -0.0537 0.9984 -0.0153\nvn -0.0338 0.9979 0.0558\nvn -0.0491 0.9949 0.0878\nvn -0.4052 -0.1072 -0.9079\nvn -0.3500 -0.5607 -0.7504\nvn -0.3884 0.3690 -0.8444\nvn -0.4212 -0.0061 -0.9069\nvn -0.4065 -0.0829 -0.9099\nvn -0.4248 0.0722 -0.9024\nvn -0.2751 0.1589 -0.9481\nvn -0.3654 -0.0137 -0.9307\nvn -0.3567 -0.0936 -0.9295\nvn -0.1329 0.9810 -0.1411\nvn -0.1765 0.9567 -0.2315\nvn -0.5459 -0.0821 0.8338\nvn -0.6241 -0.0989 0.7750\nvn -0.5825 -0.4936 0.6458\nvn -0.1196 0.9904 0.0693\nvn -0.1676 0.9762 0.1377\nvn -0.2243 0.9726 -0.0611\nvn -0.3428 0.9374 -0.0613\nvn -0.1312 0.9910 -0.0253\nvn -0.2410 0.9704 -0.0134\nvn -0.2289 0.9724 -0.0438\nvn -0.4014 0.9150 -0.0400\nvn -0.4008 0.9162 -0.0001\nvn -0.1321 0.9760 -0.1729\nvn -0.1393 0.9675 -0.2107\nvn -0.1982 0.9568 -0.2124\nvn -0.1862 0.9681 -0.1674\nvn -0.2204 0.9398 -0.2611\nvn -0.2835 0.9211 -0.2666\nvn -0.2450 0.9463 -0.2106\nvn -0.2415 0.9578 -0.1557\nvn -0.1241 0.9826 -0.1378\nvn -0.1308 0.9825 -0.1322\nvn -0.1535 0.9727 -0.1742\nvn -0.1146 0.9877 -0.1065\nvn -0.1476 0.9858 -0.0798\nvn -0.1910 0.9756 -0.1076\nvn -0.2552 0.9587 -0.1251\nvn -0.2282 0.9698 0.0855\nvn -0.2203 0.9668 0.1298\nvn -0.4075 0.9103 0.0727\nvn -0.3953 0.9121 0.1080\nvn -0.1604 0.9218 0.3528\nvn -0.2541 0.7629 0.5944\nvn -0.3360 0.5904 0.7338\nvn -0.1832 -0.9496 0.2545\nvn 0.0665 -0.9976 0.0183\nvn -0.5053 0.0664 0.8603\nvn -0.4200 0.0774 0.9042\nvn -0.4256 -0.0386 0.9040\nvn -0.2972 -0.0339 0.9542\nvn -0.2971 0.0905 0.9505\nvn -0.1240 0.9655 0.2292\nvn -0.0493 0.9686 0.2435\nvn -0.1283 0.9489 0.2882\nvn -0.0643 0.9474 0.3133\nvn -0.0379 0.9476 0.3172\nvn -0.0216 0.9684 0.2483\nvn -0.7116 -0.0309 -0.7019\nvn -0.7293 -0.1553 -0.6663\nvn -0.5377 -0.5766 -0.6151\nvn -0.0545 -0.1312 -0.9898\nvn -0.0532 -0.1281 -0.9903\nvn -0.1068 -0.1333 -0.9853\nvn -0.1050 -0.1298 -0.9860\nvn -0.0521 -0.1070 -0.9929\nvn -0.3563 -0.1333 -0.9248\nvn -0.4002 -0.1373 -0.9061\nvn -0.4000 -0.1234 -0.9082\nvn -0.3521 -0.1255 -0.9275\nvn -0.4342 -0.1430 -0.8893\nvn -0.4299 -0.1183 -0.8951\nvn -0.0084 0.9999 0.0002\nvn -0.0175 0.9998 -0.0056\nvn -0.9916 0.1242 0.0346\nvn -0.7802 -0.6025 -0.1680\nvn -0.7682 0.6197 0.1606\nvn -0.1886 0.9739 -0.1260\nvn -0.2456 0.9641 -0.1006\nvn -0.1020 0.9911 -0.0848\nvn -0.1163 0.9907 -0.0710\nvn -0.9874 0.1053 -0.1182\nvn -0.7874 -0.3994 0.4696\nvn -0.7265 0.4711 -0.5002\nvn -0.8296 0.2763 -0.4851\nvn -0.9927 0.0499 -0.1098\nvn -0.7928 -0.2628 0.5499\nvn -0.1718 0.9635 -0.2053\nvn -0.3270 0.9290 -0.1729\nvn -0.0151 0.9992 -0.0361\nvn -0.0325 0.9988 -0.0353\nvn -0.2732 0.9113 -0.3078\nvn -0.3439 0.8766 -0.3365\nvn -0.3031 0.8975 -0.3201\nvn -0.3670 0.8686 -0.3330\nvn -0.9915 0.1037 -0.0778\nvn -0.8142 -0.3927 0.4275\nvn -0.8343 0.4297 -0.3455\nvn -0.9979 0.0278 -0.0579\nvn -0.8202 -0.2681 0.5052\nvn -0.5713 0.8194 -0.0464\nvn -0.7067 0.7062 -0.0428\nvn -0.5716 0.8199 -0.0302\nvn -0.0290 0.9489 0.3143\nvn -0.0144 0.9693 0.2452\nvn -0.0139 0.9512 0.3081\nvn -0.0019 0.9705 0.2410\nvn 0.0025 0.9872 0.1592\nvn -0.5574 0.7872 0.2639\nvn -0.2573 0.9365 0.2381\nvn -0.2370 0.9486 0.2096\nvn -0.3891 0.8970 0.2097\nvn -0.8009 -0.5366 -0.2656\nvn -0.9960 0.0829 0.0339\nvn -0.9919 0.1249 0.0239\nvn -0.7994 -0.5849 -0.1371\nvn -0.8384 0.5343 0.1078\nvn -0.4088 0.9113 -0.0495\nvn -0.5275 0.8477 -0.0555\nvn -0.4296 0.9030 -0.0086\nvn -0.8183 -0.4452 -0.3635\nvn -0.9965 0.0710 0.0448\nvn -0.8340 -0.3459 -0.4298\nvn -0.9961 0.0612 0.0638\nvn -0.9079 0.2295 0.3507\nvn -0.9075 0.3233 0.2681\nvn -0.7188 0.0464 0.6937\nvn -0.7154 0.0680 0.6953\nvn -0.6643 -0.0159 0.7473\nvn -0.6468 -0.0355 0.7618\nvn -0.8446 0.0820 0.5290\nvn -0.8137 -0.0051 0.5813\nvn -0.7592 -0.2640 0.5949\nvn -0.6118 -0.2622 0.7463\nvn -0.6084 -0.2654 0.7479\nvn -0.0753 -0.9897 0.1219\nvn -0.4247 -0.8019 0.4202\nvn -0.5679 -0.7958 -0.2099\nvn -0.1333 -0.9344 -0.3301\nvn -0.9492 -0.3130 -0.0307\nvn -0.8489 -0.1270 -0.5131\nvn -0.6755 -0.4859 -0.5545\nvn -0.1026 -0.5561 -0.8247\nvn -0.8386 0.4798 0.2579\nvn -0.8357 0.5332 0.1309\nvn -0.8724 0.3636 0.3267\nvn -0.8202 0.4987 0.2800\nvn -0.8110 0.5607 0.1668\nvn -0.7827 0.6150 0.0951\nvn -0.8615 0.5063 0.0374\nvn -0.8799 0.4745 -0.0241\nvn -0.8079 0.5884 0.0341\nvn -0.8499 0.5266 -0.0158\nvn -0.9719 0.2352 -0.0001\nvn -0.9417 0.3362 -0.0084\nvn -0.9393 0.3429 -0.0118\nvn -0.9451 0.3267 -0.0049\nvn -0.9233 0.3838 -0.0108\nvn -0.9170 0.3985 -0.0173\nvn -0.9141 0.4051 -0.0147\nvn -0.8856 0.4639 0.0208\nvn -0.8542 0.5191 0.0306\nvn -0.9131 0.4077 -0.0012\nvn -0.8524 0.5224 -0.0207\nvn -0.8035 0.5950 -0.0181\nvn -0.7667 0.6418 0.0157\nvn -0.6279 0.7076 -0.3240\nvn -0.5956 0.7742 -0.2144\nvn -0.6339 0.7486 -0.1943\nvn -0.6561 0.7045 -0.2705\nvn -0.6466 0.7599 -0.0664\nvn -0.6381 0.7633 -0.1006\nvn -0.5725 0.8111 -0.1199\nvn -0.5626 0.8030 -0.1964\nvn -0.6003 0.7515 -0.2735\nvn -0.0609 0.2388 -0.9691\nvn -0.0596 0.4442 -0.8939\nvn -0.1107 0.2554 -0.9604\nvn -0.1052 0.4531 -0.8852\nvn -0.0530 0.6550 -0.7538\nvn -0.9406 0.3389 -0.0183\nvn -0.9416 0.3358 -0.0233\nvn -0.9142 0.4049 -0.0183\nvn -0.9128 0.4075 -0.0259\nvn -0.8030 0.5859 0.1092\nvn -0.8762 0.4726 0.0936\nvn -0.8201 0.5715 0.0292\nvn -0.7745 0.6324 0.0139\nvn -0.7348 0.6779 -0.0212\nvn -0.6848 0.7287 -0.0106\nvn -0.9513 0.3083 -0.0019\nvn -0.9444 0.3277 0.0244\nvn -0.9525 0.3012 0.0448\nvn -0.9177 0.3923 -0.0623\nvn -0.9348 0.3550 0.0042\nvn -0.9298 0.3679 0.0058\nvn -0.9357 0.3509 0.0356\nvn -0.9367 0.3476 0.0410\nvn -0.9533 0.2994 0.0389\nvn -0.9523 0.3044 0.0212\nvn -0.9366 0.3486 0.0350\nvn -0.9338 0.3574 0.0166\nvn -0.9337 0.3564 -0.0336\nvn -0.9035 0.4247 -0.0571\nvn -0.8470 0.5136 -0.1367\nvn -0.8222 0.5582 -0.1111\nvn -0.8912 0.4488 -0.0660\nvn -0.9050 0.4205 -0.0642\nvn -0.8294 0.5559 -0.0549\nvn -0.8794 0.4728 -0.0554\nvn -0.8778 0.4767 -0.0464\nvn -0.8925 0.4496 -0.0374\nvn -0.9066 0.4189 -0.0499\nvn -0.7140 0.6981 0.0519\nvn -0.7100 0.7040 -0.0157\nvn -0.6250 0.7764 -0.0808\nvn -0.7635 0.5217 -0.3807\nvn -0.7011 0.6130 -0.3641\nvn -0.7035 0.6376 -0.3140\nvn -0.7548 0.5774 -0.3113\nvn -0.6457 0.7053 -0.2923\nvn -0.6810 0.6573 -0.3226\nvn -0.8846 0.4561 -0.0971\nvn -0.9201 0.3892 -0.0423\nvn -0.9222 0.3863 -0.0158\nvn -0.8436 0.5367 -0.0162\nvn -0.8779 0.4781 -0.0254\nvn -0.8648 0.5016 -0.0210\nvn -0.1725 -0.0422 0.9841\nvn -0.1710 0.0959 0.9806\nvn -0.0863 -0.0446 0.9952\nvn -0.0867 0.0975 0.9914\nvn -0.7889 0.0281 0.6138\nvn -0.8827 0.0673 0.4649\nvn -0.7074 0.0341 0.7060\nvn -0.5954 0.0532 0.8016\nvn -0.9395 0.0972 0.3283\nvn -0.9526 0.1322 0.2738\nvn -0.9335 0.1695 0.3158\nvn -0.9460 0.1990 0.2559\nvn -0.3923 -0.0375 0.9191\nvn -0.3985 -0.0361 0.9164\nvn -0.4568 -0.0364 0.8888\nvn -0.4565 -0.0375 0.8889\nvn -0.4580 -0.0388 0.8881\nvn -0.4006 -0.0273 0.9159\nvn -0.8620 0.1321 0.4894\nvn -0.8564 0.2097 0.4717\nvn -0.8018 0.1350 0.5821\nvn -0.7913 0.0352 0.6104\nvn -0.8746 0.1939 0.4444\nvn -0.9955 -0.0529 -0.0787\nvn -0.6931 -0.7197 -0.0392\nvn -0.7940 0.5943 -0.1279\nvn -0.8976 0.4125 -0.1551\nvn -0.9471 0.3030 -0.1060\nvn -0.7309 0.6637 -0.1585\nvn -0.7420 0.6210 -0.2524\nvn -0.7334 0.6782 -0.0458\nvn -0.9997 0.0148 -0.0207\nvn -0.9998 0.0022 -0.0201\nvn -0.8167 -0.0802 0.5714\nvn -0.8193 -0.1621 0.5499\nvn -0.8170 0.5175 -0.2540\nvn -0.7853 0.6167 0.0537\nvn -0.8927 0.2682 0.3621\nvn -0.9148 0.1361 0.3803\nvn -0.9924 -0.0326 0.1185\nvn -0.9934 0.0267 0.1113\nvn -0.8422 -0.1228 -0.5250\nvn -0.8272 -0.0865 -0.5552\nvn -0.9952 0.0397 0.0896\nvn -0.8437 -0.2396 -0.4802\nvn -0.9866 -0.1489 -0.0667\nvn -0.9993 0.0031 -0.0368\nvn -0.7899 0.0453 -0.6115\nvn -0.7716 -0.1645 -0.6144\nvn -0.5050 0.8319 -0.2301\nvn -0.4988 0.7605 -0.4158\nvn -0.5538 0.8319 -0.0336\nvn -0.7793 -0.0889 -0.6203\nvn -0.7569 -0.2528 -0.6026\nvn -0.7655 0.1037 -0.6350\nvn -0.7836 0.1608 -0.6001\nvn -0.7908 -0.0947 -0.6046\nvn -0.7428 -0.3438 -0.5744\nvn -0.7365 0.4937 -0.4623\nvn -0.7785 0.3857 -0.4951\nvn -0.7690 0.2172 -0.6012\nvn -0.8235 0.4377 -0.3609\nvn -0.8271 0.3892 -0.4056\nvn -0.8155 0.2628 -0.5157\nvn -0.7682 0.1810 -0.6141\nvn -0.8418 0.4826 0.2418\nvn -0.7235 0.6489 0.2353\nvn -0.9642 0.0353 0.2627\nvn -0.9536 -0.0164 0.3005\nvn -0.8347 0.1062 -0.5403\nvn -0.9936 0.0223 -0.1108\nvn -0.8104 0.0097 -0.5858\nvn -0.9934 0.0065 -0.1140\nvn -0.7760 -0.0378 0.6296\nvn -0.7868 -0.1291 0.6035\nvn -0.6407 0.7581 0.1215\nvn -0.6195 0.6161 -0.4864\nvn -0.1662 -0.0435 0.9851\nvn -0.1658 -0.0431 0.9852\nvn -0.1798 -0.0439 0.9827\nvn -0.1824 -0.0438 0.9822\nvn -0.6382 -0.6058 0.4750\nvn -0.2203 -0.7627 0.6080\nvn -0.0280 0.9907 0.1332\nvn -0.0584 0.9682 0.2431\nvn -0.0735 0.9972 -0.0096\nvn -0.0591 0.9982 -0.0041\nvn -0.0861 0.9962 -0.0162\nvn -0.2514 0.9674 -0.0298\nvn -0.1846 0.9828 -0.0091\nvn -0.1361 0.9904 -0.0221\nvn -0.0430 0.8040 -0.5930\nvn -0.0358 0.8800 -0.4736\nvn -0.0225 0.9837 -0.1785\nvn -0.0234 0.9742 -0.2244\nvn -0.0175 0.9992 0.0352\nvn -0.0262 0.9996 0.0007\nvn 0.0003 0.9947 0.1026\nvn 0.0087 0.9824 0.1865\nvn -0.0670 -0.0996 -0.9927\nvn -0.0560 -0.5800 -0.8126\nvn -0.0619 0.4053 -0.9120\nvn -0.0521 -0.0675 -0.9963\nvn -0.0520 -0.0449 -0.9976\nvn -0.0143 0.9850 -0.1719\nvn -0.0287 0.9605 -0.2766\nvn -0.0370 0.9990 -0.0263\nvn -0.0351 0.9990 -0.0261\nvn -0.0332 0.9981 -0.0516\nvn -0.0327 0.9991 -0.0259\nvn -0.1501 0.9853 -0.0819\nvn -0.1239 0.9912 -0.0452\nvn -0.1963 0.9478 -0.2512\nvn -0.5300 0.8057 -0.2644\nvn -0.4748 0.8768 -0.0751\nvn -0.4005 0.9142 -0.0613\nvn -0.0283 0.9971 -0.0698\nvn -0.0348 0.9983 -0.0460\nvn 0.0008 0.9937 0.1122\nvn -0.0193 0.9043 0.4264\nvn -0.0275 0.6363 0.7709\nvn -0.0035 -0.9997 0.0224\nvn 0.0124 -0.9980 -0.0607\nvn -0.0866 -0.8651 0.4940\nvn -0.0308 -0.0425 0.9986\nvn -0.0321 -0.0436 0.9985\nvn -0.1471 -0.1315 -0.9803\nvn -0.1491 -0.1351 -0.9795\nvn -0.1646 -0.1363 -0.9769\nvn -0.1625 -0.1338 -0.9776\nvn -0.0419 0.9989 -0.0182\nvn -0.0891 0.9953 -0.0363\nvn -0.1059 0.9937 -0.0377\nvn -0.3217 0.9463 -0.0316\nvn 0.0037 0.9714 0.2371\nvn -0.0027 0.9534 0.3018\nvn -0.0302 0.5647 0.8247\nvn -0.0787 0.3594 0.9298\nvn -0.0141 0.4158 0.9093\nvn 0.0086 0.6400 0.7683\nvn -0.1428 0.4499 -0.8816\nvn -0.1596 0.2586 -0.9527\nvn -0.1629 0.4254 -0.8902\nvn -0.0352 0.0973 0.9946\nvn -0.0351 -0.0491 0.9982\nvn -0.1134 -0.9933 -0.0188\nvn -0.0513 -0.9966 -0.0641\nvn -0.1293 -0.9916 -0.0027\nvn -0.2180 -0.9584 0.1843\nvn -0.0474 -0.9846 0.1680\nvn -0.0398 -0.9197 0.3906\nvn -0.3155 -0.9075 0.2774\nvn -0.3470 -0.8076 0.4768\nvn -0.0563 -0.9826 0.1771\nvn -0.0363 -0.9874 0.1539\nvn -0.2363 -0.9011 0.3635\nvn -0.0034 -1.0000 0.0042\nvn -0.0645 -0.9978 -0.0164\nvn 0.0324 -0.9898 0.1386\nvn 0.0450 -0.9963 0.0735\nvn -0.4604 -0.7763 0.4305\nvn -0.5011 -0.7923 0.3481\nvn -0.4814 0.6188 -0.6207\nvn -0.7434 0.1569 -0.6502\nvn -0.1090 -0.1317 -0.9853\nvn -0.1511 -0.1333 -0.9795\nvn -0.1505 -0.1339 -0.9795\nvn -0.1083 -0.1322 -0.9853\nvn -0.1664 -0.1343 -0.9768\nvn -0.1662 -0.1360 -0.9767\nvn -0.7885 -0.0091 -0.6150\nvn -0.9956 -0.0060 -0.0931\nvn -0.9928 -0.0024 -0.1197\nvn -0.7912 -0.0014 -0.6115\nvn -0.6444 0.0444 0.7634\nvn -0.7720 0.0155 0.6355\nvn -0.2673 -0.0272 -0.9632\nvn -0.4044 0.0780 -0.9113\nvn -0.4080 -0.0496 -0.9116\nvn -0.3714 -0.0967 -0.9234\nvn -0.5065 -0.0272 -0.8618\nvn -0.4351 -0.1003 -0.8948\nvn -0.0566 -0.1297 -0.9899\nvn -0.0555 -0.1304 -0.9899\nvn -0.2541 -0.9585 -0.1294\nvn -0.3794 -0.8805 -0.2842\nvn -0.2047 -0.9641 -0.1688\nvn -0.1209 -0.9906 -0.0633\nvn -0.2756 -0.9262 -0.2572\nvn -0.1354 -0.9824 -0.1289\nvn -0.0862 -0.9914 -0.0984\nvn -0.0701 -0.9930 -0.0953\nvn -0.1651 -0.9678 -0.1897\nvn -0.1324 -0.9737 -0.1852\nvn -0.1032 -0.9780 -0.1812\nvn -0.0557 -0.9941 -0.0932\nvn -0.0442 -0.9947 -0.0932\nvn -0.0788 -0.9807 -0.1791\nvn -0.0541 -0.9820 -0.1809\nvn -0.0305 -0.9950 -0.0945\nvn -0.0185 -0.9954 -0.0939\nvn -0.0344 -0.9827 -0.1821\nvn -0.0225 -0.9828 -0.1831\nvn -0.0117 -0.9955 -0.0933\nvn -0.0065 -0.9955 -0.0941\nvn -0.0124 -0.9828 -0.1838\nvn -0.0115 0.9853 -0.1706\nvn -0.0100 0.9891 -0.1469\nvn -0.0129 0.9810 -0.1932\nvn -0.0234 0.9810 -0.1926\nvn -0.0209 0.9852 -0.1702\nvn -0.0182 0.9890 -0.1471\nvn -0.0219 0.9832 -0.1814\nvn 0.0079 0.9885 -0.1509\nvn -0.0360 0.9807 -0.1918\nvn -0.0566 0.9800 -0.1907\nvn -0.0836 0.9583 -0.2730\nvn -0.1042 0.9301 -0.3521\nvn -0.1334 0.9426 -0.3062\nvn -0.2111 0.8735 -0.4386\nvn -0.0826 0.9784 -0.1893\nvn -0.1086 0.9751 -0.1931\nvn -0.1529 0.9511 -0.2684\nvn -0.2074 0.9188 -0.3357\nvn -0.1492 0.9717 -0.1829\nvn -0.1339 0.9800 -0.1472\nvn -0.1416 0.9696 -0.1995\nvn -0.1796 0.9622 -0.2046\nvn -0.1594 0.9704 -0.1813\nvn -0.1390 0.9775 -0.1585\nvn -0.2091 0.9536 -0.2166\nvn -0.1321 0.9677 -0.2144\nvn -0.2450 0.9476 -0.2049\nvn -0.3034 0.9130 -0.2727\nvn -0.3867 0.8530 -0.3506\nvn -0.4358 0.7840 -0.4420\nvn -0.2402 0.8824 -0.4046\nvn -0.3238 0.8600 -0.3944\nvn -0.3215 0.8762 -0.3590\nvn -0.2283 0.9017 -0.3671\nvn -0.5014 0.7826 -0.3689\nvn -0.3938 0.8509 -0.3475\nvn -0.3916 0.8531 -0.3448\nvn -0.3327 0.8776 -0.3451\nvn -0.2255 0.9110 -0.3453\nvn -0.0808 0.9042 -0.4194\nvn -0.0562 0.9049 -0.4219\nvn -0.1337 0.8990 -0.4170\nvn -0.1541 0.8961 -0.4162\nvn -0.0738 0.9051 -0.4187\nvn -0.0560 0.9059 -0.4197\nvn -0.1870 0.8965 -0.4017\nvn -0.1910 0.9070 -0.3752\nvn -0.2022 0.9183 -0.3404\nvn -0.7012 -0.0203 -0.7127\nvn -0.7311 0.0610 -0.6795\nvn -0.6516 -0.0381 -0.7576\nvn -0.6730 -0.0192 -0.7394\nvn -0.6972 0.6355 -0.3316\nvn -0.8045 0.5021 -0.3173\nvn -0.7736 0.5401 -0.3312\nvn -0.6979 0.6393 -0.3229\nvn -0.7627 -0.1166 -0.6362\nvn -0.6904 -0.4312 -0.5808\nvn -0.7548 0.2067 -0.6225\nvn -0.7820 0.0936 -0.6161\nvn -0.7824 0.2634 -0.5643\nvn -0.7601 0.2129 -0.6139\nvn -0.7444 0.1361 -0.6537\nvn -0.8162 0.2928 -0.4981\nvn -0.7789 0.2451 -0.5772\nvn -0.0280 0.9085 -0.4168\nvn -0.0242 0.9098 -0.4143\nvn -0.0984 -0.9945 0.0339\nvn -0.2298 -0.9713 0.0605\nvn -0.2120 -0.9679 0.1346\nvn -0.0928 -0.9752 0.2005\nvn -0.6138 -0.0613 -0.7870\nvn -0.6424 -0.0317 -0.7657\nvn -0.6120 -0.0310 -0.7902\nvn -0.6193 -0.0221 -0.7848\nvn -0.1168 -0.9881 -0.0999\nvn -0.2238 -0.9556 -0.1919\nvn -0.4846 0.6944 -0.5319\nvn -0.6037 0.4192 -0.6781\nvn -0.4501 0.7450 -0.4923\nvn -0.5688 0.5372 -0.6227\nvn -0.1602 0.9022 -0.4003\nvn -0.1955 0.9077 -0.3711\nvn -0.2026 0.6892 -0.6956\nvn -0.1435 0.7487 -0.6472\nvn -0.0503 0.8080 -0.5870\nvn -0.2911 0.8741 -0.3888\nvn -0.3151 0.8504 -0.4213\nvn -0.5633 0.7770 -0.2808\nvn 0.0298 0.8333 -0.5519\nvn 0.0408 0.8332 -0.5513\nvn -0.3291 0.8363 -0.4384\nvn -0.5687 0.7598 -0.3149\nvn -0.6170 0.7121 -0.3349\nvn -0.3572 0.7995 -0.4829\nvn -0.3654 0.7947 -0.4846\nvn -0.6232 0.7017 -0.3452\nvn 0.0016 0.7997 -0.6004\nvn 0.0001 0.8170 -0.5766\nvn -0.0656 0.9032 -0.4242\nvn -0.3972 0.7980 -0.4533\nvn -0.2883 0.9122 -0.2911\nvn -0.1429 0.9668 -0.2118\nvn -0.1677 0.9776 -0.1270\nvn -0.2688 0.9193 -0.2873\nvn -0.2090 0.9279 -0.3088\nvn -0.1250 0.9839 -0.1272\nvn -0.0725 0.9896 -0.1242\nvn -0.1356 0.9376 -0.3201\nvn -0.0685 0.9436 -0.3239\nvn -0.0268 0.9930 -0.1147\nvn -0.0138 0.9948 -0.1009\nvn -0.0460 0.9466 -0.3191\nvn -0.0320 0.9491 -0.3133\nvn -0.0096 0.9953 -0.0963\nvn -0.0292 0.9112 -0.4108\nvn -0.0404 0.6813 -0.7309\nvn -0.0597 0.6955 -0.7160\nvn -0.0422 0.9162 -0.3985\nvn -0.0569 0.9161 -0.3969\nvn -0.0822 0.6984 -0.7109\nvn -0.1289 0.6939 -0.7084\nvn -0.0941 0.9127 -0.3977\nvn -0.1304 0.9069 -0.4007\nvn -0.1745 0.6885 -0.7039\nvn -0.2177 0.2898 -0.9320\nvn -0.0420 0.3910 -0.9194\nvn -0.2081 0.0579 -0.9764\nvn 0.0354 0.1299 -0.9909\nvn 0.5280 0.3384 -0.7789\nvn 0.3129 0.5582 -0.7684\nvn 0.4988 0.6247 -0.6008\nvn 0.7079 0.4403 -0.5522\nvn 0.7238 0.4535 -0.5199\nvn 0.5317 0.6258 -0.5706\nvn 0.4814 0.6181 -0.6214\nvn 0.5176 0.6083 -0.6017\nvn 0.7090 0.4328 -0.5568\nvn 0.7077 0.4249 -0.5644\nvn 0.6825 -0.5694 0.4581\nvn 0.9700 0.2389 0.0441\nvn 0.2180 0.9433 0.2501\nvn 0.2832 0.8368 0.4685\nvn 0.2393 0.8379 0.4906\nvn 0.0991 0.9515 0.2911\nvn 0.0791 0.9481 0.3079\nvn 0.1859 0.8369 0.5147\nvn 0.1372 0.8330 0.5359\nvn 0.0679 0.9443 0.3219\nvn 0.0581 0.9393 0.3381\nvn 0.0974 0.8293 0.5502\nvn 0.0770 0.8288 0.5542\nvn 0.0494 0.9362 0.3480\nvn 0.0322 0.9394 0.3413\nvn 0.0513 0.8334 0.5503\nvn -0.0461 0.2855 -0.9572\nvn -0.0441 0.0602 -0.9972\nvn -0.0683 0.0667 -0.9954\nvn -0.0687 0.2978 -0.9521\nvn -0.0951 0.2997 -0.9492\nvn -0.0928 0.0669 -0.9934\nvn -0.1396 0.0623 -0.9882\nvn -0.1446 0.2953 -0.9444\nvn -0.1909 0.2899 -0.9378\nvn -0.1834 0.0580 -0.9813\nvn -0.0157 0.9524 0.3045\nvn -0.0038 0.9976 0.0685\nvn -0.0110 0.9969 0.0775\nvn -0.0438 0.9515 0.3046\nvn -0.0724 0.9521 0.2970\nvn -0.0182 0.9962 0.0854\nvn -0.0299 0.9943 0.1025\nvn -0.1080 0.9517 0.2872\nvn -0.1464 0.9475 0.2841\nvn -0.0472 0.9903 0.1305\nvn -0.0951 0.9810 0.1691\nvn -0.2066 0.9387 0.2758\nvn -0.2977 0.9159 0.2692\nvn -0.1813 0.9622 0.2030\nvn -0.3147 0.9300 0.1900\nvn -0.4153 0.8797 0.2317\nvn -0.5250 0.8290 0.1925\nvn -0.4426 0.8795 0.1748\nvn -0.5502 0.8248 0.1303\nvn -0.6205 0.7696 0.1502\nvn -0.6869 0.7215 0.0868\nvn -0.6127 0.7866 0.0757\nvn -0.6377 0.7695 0.0342\nvn -0.7215 0.6902 0.0551\nvn -0.7450 0.6644 0.0590\nvn -0.6671 0.7384 0.0983\nvn -0.7626 0.5810 0.2844\nvn -0.8580 0.4860 0.1661\nvn -0.8820 0.4391 0.1711\nvn -0.8889 0.4469 0.1007\nvn -0.8056 0.4441 0.3920\nvn -0.8305 0.4279 0.3565\nvn -0.8851 0.4427 0.1435\nvn -0.8909 0.4439 0.0957\nvn -0.8453 0.5275 0.0845\nvn -0.8411 0.5250 0.1301\nvn -0.7843 0.6037 0.1430\nvn -0.8017 0.5939 0.0680\nvn -0.7765 0.4882 0.3983\nvn -0.7249 0.5654 0.3934\nvn -0.5284 0.7162 0.4559\nvn -0.5478 0.7912 0.2716\nvn -0.2690 0.9160 0.2977\nvn -0.2953 0.7809 0.5503\nvn -0.1881 0.7673 0.6131\nvn -0.1356 0.9238 0.3579\nvn -0.0796 0.9193 0.3854\nvn -0.1423 0.7559 0.6391\nvn -0.1147 0.7539 0.6469\nvn -0.0556 0.9179 0.3929\nvn -0.0438 0.9193 0.3911\nvn -0.0908 0.7562 0.6480\nvn -0.0579 0.7584 0.6492\nvn -0.0263 0.9211 0.3883\nvn -0.0088 0.9219 0.3872\nvn -0.0253 0.7570 0.6529\nvn 0.0186 0.9221 -0.3865\nvn 0.0275 0.8015 -0.5973\nvn 0.0801 0.8055 -0.5871\nvn 0.0538 0.9252 -0.3756\nvn 0.0959 0.9291 -0.3571\nvn 0.1462 0.8127 -0.5640\nvn 0.2195 0.8188 -0.5304\nvn 0.1433 0.9342 -0.3265\nvn 0.1943 0.9398 -0.2810\nvn 0.3072 0.8222 -0.4791\nvn 0.3964 0.8258 -0.4011\nvn 0.2421 0.9473 -0.2096\nvn 0.2403 0.9598 -0.1447\nvn 0.4557 0.8301 -0.3213\nvn 0.4521 0.8408 -0.2979\nvn 0.1886 0.9743 -0.1230\nvn 0.1143 0.9848 -0.1306\nvn 0.4446 0.8475 -0.2898\nvn 0.4715 0.8441 -0.2552\nvn 0.0637 0.9902 -0.1243\nvn 0.0505 0.9907 -0.1259\nvn 0.5061 0.8357 -0.2131\nvn 0.5323 0.8264 -0.1831\nvn 0.0596 0.9908 -0.1211\nvn 0.1064 0.9932 -0.0475\nvn 0.5460 0.8215 -0.1642\nvn 0.9860 -0.1331 0.1004\nvn 0.5808 0.5776 0.5736\nvn -0.4198 0.3220 0.8485\nvn -0.1296 0.1513 0.9799\nvn -0.1635 0.1516 0.9748\nvn -0.6019 0.3405 0.7223\nvn -0.4001 0.2614 0.8784\nvn -0.4797 0.3359 0.8106\nvn -0.2001 0.1388 0.9699\nvn -0.2151 0.1419 0.9662\nvn -0.2327 0.1336 0.9633\nvn -0.3949 0.3932 0.8303\nvn -0.2836 0.3914 0.8754\nvn -0.2415 0.1207 0.9629\nvn -0.2441 0.1096 0.9635\nvn -0.2380 0.3640 0.9004\nvn -0.2144 0.3554 0.9098\nvn -0.2316 0.1080 0.9668\nvn -0.2005 0.1124 0.9732\nvn -0.1838 0.3545 0.9168\nvn -0.1437 0.3598 0.9218\nvn -0.1552 0.1190 0.9807\nvn -0.1005 0.1273 0.9867\nvn -0.0937 0.3659 0.9259\nvn -0.0431 0.3654 0.9298\nvn -0.0463 0.1304 0.9904\nvn -0.9981 -0.0609 0.0066\nvn -0.5734 -0.8192 0.0113\nvn -0.6642 0.7475 -0.0055\nvn -0.9895 0.1445 0.0016\nvn -0.5493 0.8343 -0.0469\nvn -0.6848 0.7278 -0.0351\nvn -0.5759 0.8159 -0.0517\nvn -0.0804 -0.9966 0.0149\nvn -0.0117 -0.9998 0.0143\nvn -0.1098 -0.9938 0.0149\nvn -0.0548 0.9981 -0.0258\nvn -0.0271 0.9993 -0.0265\nvn -0.9990 -0.0397 0.0187\nvn -0.9978 -0.0630 0.0201\nvn -0.2239 0.9712 -0.0813\nvn -0.3970 0.9149 -0.0725\nvn -0.9487 0.3162 0.0002\nvn -0.9286 0.3708 -0.0092\nvn -0.0311 0.9955 -0.0888\nvn -0.7218 0.6914 -0.0292\nvn -0.7180 0.6957 -0.0191\nvn -0.9650 0.2622 -0.0096\nvn -0.9508 0.3038 -0.0599\nvn -0.8800 0.4449 -0.1661\nvn -0.8122 0.5832 0.0135\nvn -0.8289 0.5575 -0.0448\nvn -0.8183 0.5747 -0.0045\nvn -0.7985 0.5246 -0.2953\nvn -0.7649 0.5509 -0.3337\nvn -0.8392 0.5411 -0.0533\nvn -0.8448 0.5350 -0.0058\nvn -0.8944 0.4470 -0.0141\nvn -0.8898 0.4524 -0.0595\nvn -0.8970 0.4371 -0.0659\nvn -0.9033 0.4290 -0.0076\nvn -0.8272 0.4549 -0.3298\nvn -0.8223 0.4881 -0.2926\nvn -0.7999 0.5705 -0.1864\nvn -0.8920 0.4459 -0.0738\nvn -0.8113 0.5826 -0.0488\nvn -0.7402 0.6676 -0.0799\nvn -0.7291 0.6826 -0.0481\nvn -0.8072 0.5886 -0.0436\nvn -0.8057 0.5908 -0.0419\nvn -0.7340 0.6775 -0.0470\nvn -0.7300 0.6820 -0.0433\nvn -0.7989 0.6001 -0.0395\nvn -0.7812 0.6228 -0.0416\nvn -0.7101 0.7026 -0.0455\nvn -0.6933 0.7181 -0.0604\nvn -0.7620 0.6446 -0.0621\nvn -0.7518 0.6545 -0.0798\nvn -0.7339 0.6781 -0.0390\nvn -0.8616 0.5070 -0.0231\nvn -0.8798 0.4602 -0.1183\nvn -0.8197 0.5501 -0.1596\nvn -0.9232 0.3802 0.0549\nvn -0.9499 0.3027 0.0774\nvn -0.8127 0.5605 -0.1592\nvn -0.7718 0.6156 -0.1592\nvn -0.7710 0.6219 -0.1370\nvn -0.9245 0.3789 0.0407\nvn -0.9333 0.3557 0.0491\nvn -0.9360 0.3516 0.0158\nvn -0.7218 0.6761 -0.1475\nvn -0.6873 0.7172 -0.1147\nvn -0.9469 0.3211 -0.0137\nvn -0.9568 0.2900 -0.0213\nvn -0.7045 0.7051 -0.0811\nvn -0.7156 0.6966 -0.0518\nvn -0.9619 0.2728 -0.0152\nvn -0.7315 0.6812 0.0271\nvn -0.7308 0.6806 0.0525\nvn -0.9695 0.2448 0.0104\nvn -0.9693 0.2452 0.0175\nvn -0.9684 0.2492 0.0115\nvn -0.7241 0.6865 0.0660\nvn -0.7063 0.7005 0.1021\nvn -0.9362 0.3428 -0.0772\nvn -0.8692 0.4564 -0.1901\nvn -0.7923 0.5868 0.1668\nvn -0.8270 0.5615 0.0279\nvn -0.8217 0.5093 -0.2558\nvn -0.8216 0.5060 -0.2627\nvn -0.8485 0.5287 0.0229\nvn -0.8964 0.4423 0.0283\nvn -0.9009 0.4336 0.0159\nvn -0.8768 0.4058 -0.2578\nvn -0.8729 0.4240 -0.2414\nvn -0.8344 0.5320 -0.1440\nvn -0.8894 0.4571 -0.0054\nvn -0.8004 0.5991 0.0197\nvn -0.7380 0.6735 -0.0409\nvn -0.6950 0.7188 0.0150\nvn -0.7978 0.6021 0.0296\nvn -0.8004 0.5990 0.0212\nvn -0.6937 0.7201 0.0111\nvn -0.6966 0.7174 -0.0001\nvn -0.8006 0.5991 0.0091\nvn -0.8042 0.5943 0.0094\nvn -0.7224 0.6906 0.0333\nvn -0.8175 0.5510 0.1675\nvn -0.8949 0.4424 0.0581\nvn -0.9047 0.4226 0.0538\nvn -0.8576 0.4289 0.2838\nvn -0.8671 0.3831 0.3183\nvn -0.8973 0.4401 0.0321\nvn -0.8482 0.5282 0.0375\nvn -0.8359 0.5476 0.0356\nvn -0.8315 0.4619 0.3085\nvn -0.8488 0.4441 0.2868\nvn -0.9060 0.3875 0.1700\nvn -0.8146 0.5795 -0.0238\nvn -0.7229 0.6909 0.0030\nvn -0.9560 0.2877 0.0573\nvn -0.9778 -0.2092 0.0121\nvn -0.9818 -0.1549 -0.1096\nvn -0.8989 -0.4375 0.0223\nvn -0.9070 -0.4053 -0.1145\nvn -0.7813 -0.0778 -0.6193\nvn -0.8766 0.1525 -0.4563\nvn -0.5965 0.4072 -0.6915\nvn -0.4174 0.3108 -0.8539\nvn -0.3396 0.3874 -0.8571\nvn -0.5132 0.4694 -0.7186\nvn -0.5802 0.3808 -0.7199\nvn -0.5297 0.4079 -0.7436\nvn -0.3900 0.3050 -0.8688\nvn -0.3947 0.2725 -0.8774\nvn 0.9692 -0.1301 -0.2090\nvn 0.4804 0.7378 -0.4741\nvn -0.3153 0.9453 -0.0829\nvn -0.0864 0.9944 -0.0596\nvn -0.1055 0.9925 -0.0611\nvn -0.3377 0.9393 -0.0599\nvn -0.3510 0.9346 -0.0570\nvn -0.1238 0.9906 -0.0572\nvn -0.1243 0.9911 -0.0476\nvn -0.3503 0.9353 -0.0492\nvn -0.3207 0.9462 -0.0432\nvn -0.0917 0.9950 -0.0395\nvn -0.0462 0.9984 -0.0324\nvn -0.2856 0.9573 -0.0442\nvn -0.2579 0.9658 -0.0283\nvn -0.0078 0.9995 -0.0310\nvn 0.8727 -0.3376 0.3527\nvn 0.2716 0.4435 0.8541\nvn -0.9307 -0.0272 0.3648\nvn -0.8571 -0.2317 0.4601\nvn -0.8662 -0.2218 0.4478\nvn -0.9378 -0.0541 0.3429\nvn -0.9524 -0.0171 0.3044\nvn -0.9579 -0.0421 0.2839\nvn -0.8727 -0.2408 0.4246\nvn -0.8885 -0.2499 0.3848\nvn -0.9118 -0.3065 0.2732\nvn -0.9779 -0.0789 0.1934\nvn -0.9864 -0.1356 0.0924\nvn -0.9187 -0.3685 0.1418\nvn -0.9114 -0.4057 0.0688\nvn -0.9836 -0.1754 0.0408\nvn -0.9803 -0.1960 0.0226\nvn -0.9041 -0.4254 0.0410\nvn -0.9732 -0.2298 -0.0097\nvn -0.9744 -0.2240 -0.0191\nvn -0.8881 -0.4591 -0.0201\nvn -0.8924 -0.4498 -0.0367\nvn -0.8946 -0.4424 -0.0628\nvn -0.9752 -0.2175 -0.0403\nvn -0.9589 -0.0690 -0.2753\nvn -0.8709 -0.3190 -0.3738\nvn -0.6497 0.0674 -0.7572\nvn -0.7855 0.2243 -0.5767\nvn -0.6478 0.3692 -0.6664\nvn -0.4947 0.2649 -0.8277\nvn -0.4823 0.2832 -0.8289\nvn -0.6346 0.3812 -0.6722\nvn -0.6960 0.2817 -0.6605\nvn -0.6746 0.2824 -0.6820\nvn -0.5365 0.1907 -0.8221\nvn -0.5441 0.1634 -0.8229\nvn 0.8617 0.0149 -0.5072\nvn 0.1990 0.5211 -0.8299\nvn -0.2824 0.9535 -0.1049\nvn -0.0506 0.9960 -0.0734\nvn -0.0519 0.9976 -0.0461\nvn -0.2897 0.9567 -0.0272\nvn -0.2901 0.9568 -0.0189\nvn -0.0547 0.9980 -0.0327\nvn -0.0596 0.9974 -0.0394\nvn -0.2944 0.9553 -0.0274\nvn -0.2912 0.9566 -0.0127\nvn -0.0692 0.9963 -0.0509\nvn 0.9593 -0.0392 0.2795\nvn 0.4357 0.7595 0.4831\nvn -0.6106 0.2768 0.7420\nvn -0.4817 0.1145 0.8688\nvn -0.4914 0.1241 0.8620\nvn -0.6621 0.2268 0.7142\nvn -0.6520 0.2655 0.7102\nvn -0.7103 0.2143 0.6705\nvn -0.4896 0.1314 0.8619\nvn -0.5652 0.0689 0.8220\nvn -0.7975 -0.1961 0.5705\nvn -0.8955 0.0327 0.4438\nvn -0.9767 -0.1766 0.1220\nvn -0.8943 -0.4252 0.1392\nvn -0.3253 0.6406 -0.6955\nvn -0.2956 0.7656 -0.5713\nvn -0.7298 0.4682 -0.4982\nvn -0.6937 0.5239 -0.4942\nvn -0.5573 0.4906 -0.6699\nvn -0.2634 0.8020 -0.5360\nvn -0.2730 0.7861 -0.5545\nvn -0.4224 0.4265 -0.7998\nvn -0.4021 0.4006 -0.8233\nvn -0.3038 0.7686 -0.5629\nvn -0.3701 0.7478 -0.5512\nvn -0.4348 0.3566 -0.8269\nvn -0.4763 0.3038 -0.8251\nvn -0.5444 0.6698 -0.5050\nvn -0.7366 0.4634 -0.4925\nvn -0.7880 0.5065 -0.3500\nvn -0.4600 0.3137 -0.8307\nvn -0.4217 0.5300 -0.7356\nvn -0.7495 0.3554 -0.5584\nvn -0.6986 0.3968 -0.5954\nvn -0.4003 0.7267 -0.5582\nvn -0.3837 0.7711 -0.5080\nvn -0.6290 0.3884 -0.6734\nvn -0.5447 0.3862 -0.7444\nvn -0.3441 0.7882 -0.5102\nvn -0.3082 0.7924 -0.5264\nvn -0.4741 0.3789 -0.7947\nvn -0.4194 0.3548 -0.8355\nvn -0.3192 0.7756 -0.5446\nvn -0.5097 0.6417 -0.5731\nvn -0.4071 0.2972 -0.8637\nvn -0.3322 0.4417 -0.8334\nvn -0.6738 0.4741 -0.5667\nvn -0.9556 0.2051 -0.2115\nvn -0.9268 0.1950 -0.3209\nvn -0.9883 0.1087 -0.1068\nvn -0.9637 0.0697 -0.2577\nvn -0.7582 -0.0461 -0.6503\nvn -0.7325 0.0971 -0.6738\nvn -0.4734 0.0278 -0.8804\nvn -0.4689 -0.1018 -0.8773\nvn -0.4059 -0.1394 -0.9032\nvn -0.4170 -0.0040 -0.9089\nvn -0.4116 -0.1006 -0.9058\nvn -0.3937 -0.2546 -0.8833\nvn -0.2203 -0.3501 -0.9104\nvn -0.2920 -0.1841 -0.9385\nvn -0.0540 0.0431 -0.9976\nvn 0.0822 -0.0749 -0.9938\nvn 0.1585 0.6337 -0.7572\nvn 0.0071 0.6195 -0.7849\nvn -0.0467 0.9150 -0.4007\nvn 0.0656 0.9427 -0.3270\nvn 0.0053 0.9868 -0.1619\nvn -0.0899 0.9628 -0.2546\nvn -0.1057 0.9715 -0.2122\nvn -0.0259 0.9937 -0.1093\nvn -0.0404 0.9947 -0.0948\nvn -0.1074 0.9732 -0.2034\nvn -0.1656 0.9634 -0.2109\nvn -0.1052 0.9893 -0.1012\nvn -0.4685 0.8820 -0.0499\nvn -0.5155 0.8336 -0.1985\nvn -0.8956 0.4042 -0.1859\nvn -0.9321 0.3613 -0.0249\nvn -0.0577 -0.1674 -0.9842\nvn -0.0361 -0.7510 -0.6593\nvn -0.0723 -0.7408 -0.6678\nvn -0.1091 -0.1436 -0.9836\nvn -0.1393 -0.1242 -0.9824\nvn -0.0616 -0.7266 -0.6843\nvn 0.1529 -0.6224 -0.7676\nvn -0.1220 -0.0720 -0.9899\nvn -0.1186 -0.0955 -0.9883\nvn 0.4905 -0.3082 -0.8151\nvn 0.6458 -0.0831 -0.7589\nvn -0.0332 -0.1051 -0.9939\nvn -0.0302 -0.1340 -0.9905\nvn 0.6502 -0.1024 -0.7528\nvn 0.6505 -0.1057 -0.7521\nvn -0.0316 -0.1392 -0.9897\nvn -0.0890 -0.0673 -0.9937\nvn 0.5523 0.0941 -0.8283\nvn 0.2090 0.4664 -0.8595\nvn -0.0748 0.0159 -0.9971\nvn -0.1280 0.3903 -0.9117\nvn -0.1452 0.5279 -0.8368\nvn -0.0611 0.6407 -0.7653\nvn -0.0855 0.6643 -0.7426\nvn -0.1070 0.4168 -0.9027\nvn -0.1007 0.5315 -0.8410\nvn -0.0566 0.4425 -0.8950\nvn -0.0554 0.5524 -0.8318\nvn -0.0438 0.6784 -0.7334\nvn -0.0127 -0.9719 -0.2349\nvn -0.0067 -0.9917 -0.1281\nvn -0.0136 -0.9916 -0.1285\nvn -0.0249 -0.9713 -0.2367\nvn 0.0148 -0.9699 -0.2429\nvn 0.0323 -0.9905 -0.1338\nvn 0.4028 -0.9006 -0.1629\nvn 0.3528 -0.8878 -0.2956\nvn 0.8574 -0.3971 -0.3272\nvn 0.9022 -0.3881 -0.1880\nvn 0.9831 -0.0206 -0.1816\nvn 0.9545 -0.0334 -0.2962\nvn 0.9547 -0.0401 -0.2947\nvn 0.9831 -0.0247 -0.1816\nvn 0.9830 -0.0254 -0.1820\nvn 0.9547 -0.0413 -0.2947\nvn 0.9041 0.2598 -0.3392\nvn 0.9309 0.3006 -0.2073\nvn 0.4969 0.8398 -0.2184\nvn 0.4566 0.8138 -0.3594\nvn 0.0279 0.9541 -0.2982\nvn 0.0491 0.9821 -0.1820\nvn -0.0195 0.9846 -0.1738\nvn -0.0321 0.9572 -0.2875\nvn -0.0167 0.9584 -0.2849\nvn -0.0097 0.9849 -0.1728\nvn -0.4830 0.2387 0.8424\nvn -0.5615 0.2265 0.7958\nvn -0.4769 0.2376 0.8462\nvn -0.5302 0.2169 0.8197\nvn -0.5178 0.1689 0.8386\nvn -0.5666 0.1020 0.8177\nvn -0.6771 0.1369 0.7230\nvn -0.7634 0.1685 0.6235\nvn -0.4358 0.1578 0.8861\nvn -0.3565 0.1839 0.9160\nvn -0.6843 0.1965 0.7022\nvn -0.7962 0.2143 0.5658\nvn -0.6558 0.3080 0.6892\nvn -0.7763 0.3677 0.5120\nvn -0.3148 0.2108 0.9254\nvn -0.4393 0.1025 0.8924\nvn -0.6456 0.4011 0.6499\nvn -0.6901 0.5154 0.5080\nvn -0.5479 0.4638 0.6962\nvn -0.5235 0.6737 0.5216\nvn -0.5504 -0.0121 0.8348\nvn -0.5426 -0.0472 0.8386\nvn -0.4938 0.4619 0.7367\nvn -0.3784 0.7543 0.5364\nvn -0.3845 0.4820 0.7873\nvn -0.2593 0.7969 0.5457\nvn -0.4436 -0.0597 0.8942\nvn -0.3016 -0.0558 0.9518\nvn -0.2586 0.4963 0.8287\nvn -0.1656 0.8171 0.5522\nvn -0.1662 0.5098 0.8440\nvn -0.1016 0.8217 0.5608\nvn -0.2281 -0.0398 0.9728\nvn -0.3225 0.0536 0.9450\nvn -0.0733 0.3850 0.9200\nvn -0.1584 0.2723 0.9491\nvn -0.4399 0.1585 0.8839\nvn -0.4304 0.1364 0.8922\nvn -0.1422 0.1371 0.9803\nvn -0.1466 0.0696 0.9867\nvn -0.3559 0.1094 0.9281\nvn -0.2606 0.1461 0.9543\nvn -0.2086 0.0821 0.9745\nvn -0.1818 0.2582 0.9488\nvn -0.2085 0.2082 0.9556\nvn -0.2704 0.2269 0.9356\nvn -0.2656 0.2574 0.9290\nvn -0.3817 0.2519 0.8893\nvn -0.3798 0.2407 0.8932\nvn -0.3423 0.7140 0.6108\nvn -0.3326 0.6825 0.6507\nvn -0.1821 0.9290 0.3222\nvn -0.1268 0.9181 0.3753\nvn 0.1616 0.6741 0.7207\nvn -0.1649 0.4590 0.8730\nvn 0.0542 0.1791 0.9823\nvn 0.3640 0.1689 0.9159\nvn 0.3712 0.0626 0.9265\nvn 0.1080 0.1222 0.9866\nvn 0.0819 0.0739 0.9939\nvn 0.3242 -0.0441 0.9449\nvn 0.0471 -0.5060 0.8612\nvn -0.1523 -0.2033 0.9672\nvn -0.4098 -0.4796 0.7759\nvn -0.2489 -0.7710 0.5861\nvn -0.3066 -0.8036 0.5101\nvn -0.4472 -0.5322 0.7189\nvn -0.3695 -0.5417 0.7550\nvn -0.2517 -0.8132 0.5248\nvn -0.1749 -0.8181 0.5478\nvn -0.2563 -0.5437 0.7991\nvn -0.2372 -0.5246 0.8176\nvn -0.1907 -0.8072 0.5587\nvn -0.5530 -0.6293 0.5460\nvn -0.5285 -0.3037 0.7927\nvn -0.7672 0.0128 0.6412\nvn -0.9023 -0.1304 0.4109\nvn -0.9342 0.0604 0.3516\nvn -0.7990 0.1001 0.5929\nvn -0.7345 0.1947 0.6500\nvn -0.8946 0.2494 0.3707\nvn -0.5217 0.7521 0.4028\nvn -0.4695 0.4941 0.7317\nvn -0.2028 0.6816 0.7030\nvn -0.1472 0.9126 0.3813\nvn -0.1106 0.9223 0.3703\nvn -0.2024 0.7019 0.6829\nvn -0.2768 0.7110 0.6463\nvn -0.1508 0.9258 0.3465\nvn -0.2081 -0.8286 -0.5197\nvn -0.2140 -0.6434 -0.7350\nvn -0.2243 -0.4229 -0.8780\nvn -0.2333 -0.2291 -0.9450\nvn -0.2420 -0.0790 -0.9670\nvn -0.2395 0.0277 -0.9705\nvn -0.8025 0.0168 -0.5963\nvn -0.2316 0.0693 -0.9703\nvn -0.3165 -0.5170 0.7953\nvn -0.0837 -0.4964 0.8640\nvn -0.1975 -0.2299 0.9529\nvn -0.3922 -0.2123 0.8950\nvn 0.0269 -0.4920 0.8701\nvn -0.2062 0.0558 0.9769\nvn -0.2098 0.0233 0.9774\nvn -0.2123 -0.0592 0.9754\nvn -0.2172 -0.2035 0.9546\nvn -0.2201 -0.4183 0.8812\nvn -0.2154 -0.6296 0.7464\nvn -0.2180 -0.8084 0.5468\nvn -0.2172 -0.9345 0.2819\nvn -0.2100 -0.9777 0.0005\nvn -0.2080 -0.9412 -0.2662\nvn -0.2403 -0.8238 0.5133\nvn -0.2438 -0.9292 0.2775\nvn -0.2400 -0.9703 0.0286\nvn -0.2291 -0.9481 -0.2205\nvn -0.2304 -0.8732 -0.4294\nvn -0.2503 -0.7529 -0.6086\nvn -0.2727 -0.6076 -0.7459\nvn -0.2816 -0.4361 -0.8547\nvn -0.2803 -0.2232 -0.9336\nvn -0.2786 -0.1103 -0.9540\nvn -0.0494 -0.1001 -0.9937\nvn -0.2008 -0.1020 -0.9743\nvn -0.2768 -0.3245 0.9044\nvn -0.2755 -0.1733 0.9456\nvn -0.0154 -0.3038 0.9526\nvn -0.2615 -0.0048 0.9652\nvn -0.2542 -0.1286 0.9585\nvn -0.2545 -0.2668 0.9295\nvn -0.2522 -0.4443 0.8596\nvn -0.2433 -0.6495 0.7204\nvn -0.8613 0.5080 -0.0013\nvn -0.8618 0.5072 0.0052\nvn -0.9995 0.0247 0.0181\nvn -0.9996 0.0261 0.0089\nvn -0.8631 0.5044 0.0252\nvn -0.9988 0.0216 0.0435\nvn -0.8853 0.3692 0.2826\nvn -0.9497 0.0235 0.3122\nvn -0.9498 0.0346 0.3110\nvn -0.8638 0.4878 0.1260\nvn -0.9859 0.0334 0.1638\nvn -0.8469 0.5317 -0.0060\nvn -0.8530 0.5219 -0.0060\nvn -0.9995 0.0323 -0.0071\nvn -0.9992 0.0374 -0.0092\nvn -0.8571 0.5151 -0.0042\nvn -0.9996 0.0285 -0.0022\nvn -0.9998 0.0106 -0.0129\nvn -0.9590 0.0486 -0.2792\nvn -0.8164 -0.0252 0.5769\nvn -0.8695 0.4939 -0.0049\nvn -0.9997 0.0222 0.0044\nvn -0.8905 0.4368 -0.1274\nvn -0.9861 0.0219 -0.1648\nvn -0.8425 0.5383 0.0214\nvn -0.9988 0.0410 0.0251\nvn -0.9049 0.3314 -0.2668\nvn -0.9548 0.0308 -0.2955\nvn -0.9998 0.0119 0.0125\nvn -0.8596 0.5109 -0.0026\nvn -0.9996 0.0270 0.0057\nvn -0.2422 -0.1166 -0.9632\nvn 0.0000 -0.1054 -0.9944\nvn -0.0014 -0.2608 -0.9654\nvn -0.2280 -0.2777 -0.9332\nvn -0.2572 -0.0387 0.9656\nvn -0.0620 -0.9980 -0.0148\nvn -0.0583 -0.9981 -0.0186\nvn -0.0638 -0.9975 -0.0291\nvn -0.1096 -0.9925 -0.0541\nvn -0.5423 0.8277 0.1440\nvn -0.4326 0.9004 0.0458\nvn -0.4022 0.9154 0.0119\nvn -0.4089 0.9126 0.0005\nvn -0.4190 0.9080 -0.0013\nvn -0.4269 0.9043 -0.0044\nvn -0.4308 0.9024 -0.0101\nvn -0.4334 0.9011 -0.0121\nvn -0.4347 0.9005 -0.0096\nvn -0.4374 0.8992 -0.0016\nvn -0.4497 0.8931 -0.0113\nvn -0.4992 0.8653 -0.0446\nvn -0.6016 0.7870 -0.1365\nvn -0.1314 -0.9913 0.0107\nvn -0.0808 -0.9966 0.0121\nvn -0.0734 -0.9971 0.0193\nvn -0.0736 -0.9971 0.0179\nvn -0.0722 -0.9973 0.0158\nvn -0.0709 -0.9974 0.0146\nvn -0.0701 -0.9975 0.0091\nvn -0.0686 -0.9976 -0.0037\nvn -0.0656 -0.9978 -0.0121\nvn -0.1438 0.9883 -0.0500\nvn -0.1775 0.9830 -0.0473\nvn -0.2567 0.9654 -0.0456\nvn -0.3456 0.9364 -0.0605\nvn -0.4591 0.8845 -0.0830\nvn -0.5643 0.8200 -0.0956\nvn -0.6784 0.7197 -0.1476\nvn -0.8158 0.5660 -0.1185\nvn -0.0849 0.7170 -0.6919\nvn -0.0894 0.6855 -0.7225\nvn -0.0362 0.6930 -0.7200\nvn -0.0361 0.7284 -0.6842\nvn -0.0888 0.6534 -0.7518\nvn -0.0359 0.6556 -0.7542\nvn -0.0489 0.1485 -0.9877\nvn -0.0213 -0.7609 -0.6485\nvn -0.0686 -0.7588 -0.6477\nvn -0.1364 0.1513 -0.9790\nvn -0.2327 0.1712 -0.9573\nvn -0.0595 -0.7633 -0.6433\nvn 0.1696 -0.7056 -0.6880\nvn -0.2865 0.2118 -0.9344\nvn -0.3173 0.2608 -0.9117\nvn -0.7262 0.5203 -0.4492\nvn 0.4316 -0.3270 -0.8407\nvn 0.1794 0.4234 -0.8880\nvn -0.0971 0.0461 -0.9942\nvn -0.4302 0.2451 -0.8688\nvn -0.1174 0.6691 -0.7338\nvn -0.1571 0.7300 -0.6651\nvn -0.0998 0.6578 -0.7465\nvn -0.0258 0.9827 -0.1834\nvn -0.0195 0.9912 -0.1307\nvn -0.0090 0.9913 -0.1310\nvn -0.0114 0.9827 -0.1847\nvn -0.0128 0.9971 -0.0742\nvn -0.0066 0.9971 -0.0750\nvn -0.0034 0.9971 -0.0753\nvn -0.0043 0.9914 -0.1309\nvn -0.0052 0.9827 -0.1850\nvn 0.0122 -0.9997 0.0184\nvn 0.0097 -0.9993 -0.0356\nvn -0.0181 -0.7857 -0.6183\nvn -0.0558 -0.7867 -0.6147\nvn 0.0287 -0.9995 0.0160\nvn 0.0214 -0.9991 -0.0357\nvn 0.1285 -0.9917 0.0050\nvn 0.1138 -0.9923 -0.0490\nvn -0.0424 -0.7774 -0.6275\nvn 0.2157 -0.7117 -0.6686\nvn 0.4604 -0.8867 -0.0419\nvn 0.4469 -0.8889 -0.1006\nvn 0.9304 -0.3309 -0.1575\nvn 0.9201 -0.3116 -0.2371\nvn 0.9450 -0.3181 -0.0754\nvn 0.7314 0.6699 -0.1276\nvn 0.6688 0.7097 -0.2213\nvn 0.6445 0.7013 -0.3046\nvn 0.0568 0.9883 -0.1411\nvn 0.0500 0.9787 -0.1991\nvn 0.0755 0.9937 -0.0830\nvn -0.0331 -0.1478 0.9885\nvn -0.0225 0.7142 0.6996\nvn -0.0601 0.7096 0.7019\nvn -0.0843 -0.1537 0.9845\nvn -0.1632 -0.1531 0.9746\nvn -0.1155 0.7077 0.6970\nvn -0.2026 0.6933 0.6916\nvn -0.2831 -0.1575 0.9461\nvn -0.3819 -0.2011 0.9020\nvn -0.1220 0.6044 0.7873\nvn 0.2470 0.3383 0.9080\nvn -0.4715 -0.0299 0.8813\nvn -0.3248 -0.0419 0.9449\nvn 0.4837 0.0176 0.8750\nvn 0.5070 -0.0320 0.8613\nvn -0.2992 -0.0412 0.9533\nvn -0.3359 -0.0728 0.9391\nvn 0.4371 -0.1722 0.8827\nvn 0.0671 -0.5484 0.8335\nvn -0.3948 -0.1093 0.9122\nvn -0.3845 -0.1804 0.9053\nvn -0.1914 -0.7203 0.6667\nvn -0.1851 -0.7512 0.6335\nvn -0.2826 -0.2081 0.9363\nvn -0.1632 -0.2249 0.9606\nvn -0.1046 -0.7645 0.6361\nvn -0.0543 -0.7672 0.6390\nvn -0.0831 -0.2309 0.9694\nvn -0.0326 -0.2390 0.9705\nvn -0.0202 -0.7718 0.6355\nvn -0.0057 0.9834 0.1812\nvn -0.0014 0.9990 0.0437\nvn -0.0036 0.9990 0.0433\nvn -0.0153 0.9832 0.1815\nvn -0.0298 0.9832 0.1802\nvn -0.0070 0.9991 0.0427\nvn -0.0121 0.9990 0.0419\nvn -0.0515 0.9823 0.1798\nvn 0.2542 0.9340 0.2510\nvn 0.3790 0.9201 0.0989\nvn 0.8856 0.4374 0.1560\nvn 0.8271 0.4672 0.3125\nvn 0.9540 0.0507 0.2954\nvn 0.9864 0.0555 0.1549\nvn 0.9883 0.0001 0.1527\nvn 0.9565 -0.0058 0.2915\nvn 0.9409 -0.1750 0.2900\nvn 0.9761 -0.1631 0.1437\nvn 0.7342 -0.6737 0.0839\nvn 0.6239 -0.7440 0.2391\nvn 0.0879 -0.9882 0.1251\nvn 0.1786 -0.9838 -0.0155\nvn 0.0127 -0.9990 -0.0418\nvn -0.0274 -0.9949 0.0968\nvn -0.0156 -0.9953 0.0957\nvn 0.0071 -0.9991 -0.0427\nvn 0.0036 -0.9991 -0.0433\nvn -0.0079 -0.9954 0.0958\nvn -0.0029 -0.9955 0.0949\nvn 0.0014 -0.9990 -0.0437\nvn -0.2482 -0.3120 0.9171\nvn -0.2094 -0.2887 0.9342\nvn -0.2110 -0.5833 0.7843\nvn -0.2124 -0.5792 0.7870\nvn -0.4969 -0.4202 0.7592\nvn -0.2748 -0.1457 0.9504\nvn -0.3502 -0.0435 0.9356\nvn -0.7161 -0.0281 0.6973\nvn -0.4998 0.3531 0.7908\nvn -0.2705 0.0583 0.9609\nvn -0.2139 0.2037 0.9554\nvn -0.1498 -0.0337 0.9881\nvn -0.2221 0.5080 0.8321\nvn -0.2275 0.5115 0.8286\nvn -0.2584 0.2246 0.9395\nvn -0.2662 -0.0818 0.9604\nvn -0.3193 0.1326 0.9383\nvn -0.4066 -0.0697 0.9109\nvn -0.1617 0.4409 0.8829\nvn 0.0984 0.1859 0.9776\nvn -0.2767 0.0754 0.9580\nvn -0.4601 -0.0393 0.8870\nvn -0.1610 -0.0463 0.9858\nvn -0.4593 -0.0409 0.8873\nvn 0.2022 -0.0493 0.9781\nvn 0.1042 -0.2776 0.9550\nvn -0.2686 -0.1614 0.9496\nvn -0.3118 -0.2241 0.9233\nvn -0.1435 -0.5175 0.8435\nvn -0.0271 -0.9933 0.1120\nvn -0.0079 -0.9992 0.0382\nvn -0.1419 -0.9898 0.0074\nvn -0.1608 -0.9829 0.0892\nvn -0.6671 -0.7381 -0.1007\nvn -0.6751 -0.7376 -0.0115\nvn -0.9880 0.0089 -0.1543\nvn -0.9968 0.0052 -0.0793\nvn -0.9715 0.0121 -0.2365\nvn -0.9049 0.3733 -0.2042\nvn -0.9217 0.3702 -0.1161\nvn -0.9314 0.3616 -0.0413\nvn -0.2984 0.9452 0.1319\nvn -0.2842 0.9574 0.0508\nvn -0.1558 0.9835 0.0922\nvn -0.1750 0.9692 0.1729\nvn -0.2720 0.9620 -0.0234\nvn -0.1462 0.9892 0.0085\nvn -0.0110 0.9991 0.0420\nvn -0.0320 0.9920 0.1217\nvn -0.0514 0.9795 0.1949\nvn 0.3140 0.9242 0.2173\nvn 0.2504 0.9251 0.2853\nvn 0.3826 0.9141 0.1342\nvn 0.8802 0.4132 0.2333\nvn 0.8446 0.4328 0.3150\nvn 0.7873 0.4712 0.3975\nvn 0.9501 -0.0187 0.3113\nvn 0.9215 -0.0218 0.3878\nvn 0.9715 -0.0149 0.2364\nvn 0.8441 -0.4608 0.2739\nvn 0.7898 -0.5023 0.3518\nvn 0.3329 -0.9329 0.1369\nvn 0.2739 -0.9396 0.2053\nvn -0.6309 -0.2900 -0.7196\nvn -0.6965 -0.1347 -0.7048\nvn -0.5423 -0.5822 -0.6057\nvn -0.5681 -0.3799 -0.7300\nvn -0.6083 -0.1756 -0.7740\nvn -0.7425 -0.0724 -0.6659\nvn -0.6741 -0.0457 -0.7372\nvn -0.7079 -0.0184 -0.7060\nvn -0.6218 -0.0600 -0.7808\nvn -0.6398 -0.0802 -0.7643\nvn -0.6607 -0.0812 -0.7462\nvn -0.6823 -0.0767 -0.7270\nvn -0.6530 -0.0913 -0.7518\nvn -0.6652 -0.0750 -0.7429\nvn -0.6524 -0.1043 -0.7506\nvn -0.6552 -0.0411 -0.7543\nvn -0.6569 -0.0229 -0.7536\nvn -0.6569 -0.0048 -0.7540\nvn -0.6465 0.1974 -0.7369\nvn -0.6607 0.2901 -0.6923\nvn -0.6110 0.1082 -0.7841\nvn -0.5839 0.3578 -0.7287\nvn -0.5767 0.3609 -0.7329\nvn -0.5829 0.3529 -0.7319\nvn -0.5192 0.4724 -0.7122\nvn -0.5084 0.4192 -0.7522\nvn -0.4494 0.5958 -0.6656\nvn -0.6907 0.4743 -0.5459\nvn -0.6821 0.1010 -0.7242\nvn -0.7067 -0.0421 -0.7062\nvn -0.9118 0.0834 -0.4021\nvn -0.9314 -0.0895 -0.3527\nvn -0.7425 -0.1268 -0.6577\nvn -0.7013 -0.1693 -0.6925\nvn -0.9153 -0.1881 -0.3560\nvn -0.7098 -0.5516 -0.4380\nvn -0.6491 -0.2029 -0.7331\nvn -0.5918 -0.3496 -0.7263\nvn -0.4206 -0.7385 -0.5268\nvn -0.0567 -0.9928 -0.1056\nvn -0.0217 -0.9986 -0.0474\nvn 0.2311 -0.9660 -0.1159\nvn 0.0136 -0.9794 -0.2013\nvn 0.0042 -0.9998 0.0189\nvn 0.3157 -0.9487 0.0154\nvn 0.8574 -0.5129 -0.0430\nvn 0.8133 -0.5108 -0.2784\nvn 0.5806 -0.6524 -0.4871\nvn 0.8886 -0.0656 -0.4538\nvn 0.6520 -0.1300 -0.7469\nvn 0.9915 -0.0433 -0.1224\nvn 0.9868 0.0554 -0.1518\nvn 0.8458 0.0374 -0.5321\nvn 0.5698 0.0114 -0.8217\nvn 0.7364 0.1669 -0.6556\nvn 0.2732 0.1391 -0.9518\nvn 0.9588 0.2027 -0.1991\nvn 0.9237 0.3486 -0.1590\nvn 0.7517 0.3256 -0.5734\nvn 0.5033 0.2661 -0.8221\nvn -0.0391 0.7433 -0.6678\nvn 0.1646 0.8856 -0.4343\nvn 0.0493 0.9752 -0.2159\nvn -0.1429 0.9304 -0.3375\nvn 0.3552 0.9294 -0.0997\nvn 0.1913 0.9802 -0.0517\nvn -0.0053 0.9997 -0.0232\nvn -0.0422 0.9936 -0.1045\nvn -0.0836 0.9805 -0.1779\nvn -0.1337 0.9886 -0.0682\nvn -0.2120 0.9698 -0.1202\nvn -0.1030 0.9946 -0.0125\nvn -0.6184 0.7844 -0.0468\nvn -0.7412 0.6657 -0.0858\nvn -0.9795 0.1997 -0.0254\nvn -0.9868 0.1525 -0.0532\nvn -0.9989 -0.0447 -0.0140\nvn -0.9979 -0.0480 -0.0425\nvn -0.9783 -0.2065 -0.0159\nvn -0.9767 -0.2099 -0.0434\nvn -0.6862 -0.7270 -0.0242\nvn -0.7631 -0.6436 -0.0584\nvn -0.1703 -0.9848 -0.0322\nvn -0.2517 -0.9650 -0.0738\nvn -0.1531 -0.9881 0.0147\nvn 0.6038 -0.7317 0.3161\nvn 0.6043 -0.7302 0.3187\nvn 0.5645 -0.7794 0.2718\nvn 0.5725 -0.7704 0.2805\nvn 0.6061 -0.7280 0.3203\nvn 0.5689 -0.7752 0.2745\nvn 0.5275 -0.8453 0.0854\nvn 0.3785 -0.9146 0.1420\nvn 0.3165 -0.9188 0.2358\nvn 0.6736 -0.6617 0.3292\nvn 0.6771 -0.6615 0.3225\nvn 0.6428 -0.6883 0.3363\nvn 0.6418 -0.6877 0.3391\nvn 0.6654 -0.6703 0.3285\nvn 0.6366 -0.6942 0.3357\nvn 0.8715 -0.4903 0.0092\nvn 0.8719 -0.4896 0.0107\nvn 0.8064 -0.5914 -0.0023\nvn 0.8340 -0.5517 0.0056\nvn 0.8724 -0.4887 0.0094\nvn 0.8339 -0.5519 0.0056\nvn 0.4371 -0.8958 -0.0808\nvn 0.4467 -0.8938 0.0399\nvn 0.4118 -0.8886 0.2019\nvn 0.9346 -0.3557 -0.0023\nvn 0.9319 -0.3626 -0.0119\nvn 0.9153 -0.4027 0.0055\nvn 0.9192 -0.3936 0.0090\nvn 0.9291 -0.3698 -0.0026\nvn 0.9113 -0.4115 0.0084\nvn 0.8743 -0.4837 -0.0395\nvn 0.8757 -0.4813 -0.0386\nvn 0.9138 -0.4034 -0.0471\nvn 0.9099 -0.4124 -0.0450\nvn 0.8767 -0.4793 -0.0396\nvn 0.9184 -0.3930 -0.0450\nvn 0.9286 -0.3672 -0.0538\nvn 0.9258 -0.3731 -0.0606\nvn 0.9244 -0.3775 -0.0538\nvn 0.4660 -0.8321 -0.3006\nvn 0.4466 -0.8940 -0.0354\nvn 0.7847 -0.6179 -0.0491\nvn 0.8368 -0.5463 -0.0346\nvn 0.5094 -0.8598 0.0349\nvn 0.7783 -0.6273 -0.0259\nvn 0.0683 -0.9901 0.1221\nvn 0.0797 -0.9892 0.1231\nvn 0.1653 -0.9778 0.1282\nvn 0.0778 -0.9929 0.0904\nvn 0.0758 -0.9929 0.0920\nvn 0.1191 -0.9884 0.0943\nvn 0.1311 -0.9857 0.1058\nvn 0.1984 -0.9622 0.1864\nvn 0.2828 -0.9583 0.0416\nvn 0.0996 -0.9897 0.1026\nvn 0.0231 -0.9955 0.0912\nvn 0.0265 -0.9917 0.1256\nvn 0.0378 -0.9901 0.1348\nvn 0.0222 -0.9897 0.1409\nvn 0.0122 -0.9904 0.1376\nvn 0.1783 -0.9835 0.0300\nvn 0.1634 -0.9863 0.0232\nvn 0.0750 -0.9968 0.0282\nvn 0.0810 -0.9966 -0.0108\nvn 0.0722 -0.9955 -0.0621\nvn 0.1183 -0.9918 -0.0478\nvn 0.1301 -0.9906 -0.0412\nvn 0.1703 -0.9797 0.1058\nvn 0.0182 -0.9995 0.0264\nvn 0.0202 -0.9996 -0.0165\nvn 0.0208 -0.9969 -0.0763\nvn 0.1195 -0.9919 0.0418\nvn 0.0903 -0.9921 0.0871\nvn 0.0755 -0.9957 0.0537\nvn -0.1159 -0.9681 -0.2220\nvn 0.1165 -0.9922 0.0432\nvn 0.0201 -0.9985 0.0511\nvn 0.1396 -0.9875 -0.0732\nvn 0.1364 -0.9882 -0.0701\nvn 0.0573 -0.9943 -0.0902\nvn 0.0173 -0.9970 -0.0754\nvn -0.0312 -0.9993 0.0189\nvn 0.0270 -0.9996 -0.0060\nvn 0.2042 -0.9789 0.0034\nvn 0.0478 -0.8411 -0.5387\nvn 0.1644 -0.9810 -0.1027\nvn 0.0120 -0.9947 -0.1017\nvn -0.0042 -0.9937 -0.1122\nvn -0.0029 -0.9937 -0.1119\nvn -0.0011 -0.9937 -0.1121\nvn -0.1274 -0.1190 -0.9847\nvn -0.2155 -0.0651 -0.9743\nvn -0.1325 -0.1137 -0.9846\nvn -0.2053 -0.0696 -0.9762\nvn -0.2434 -0.0332 -0.9694\nvn -0.2487 -0.0211 -0.9684\nvn -0.0444 -0.1351 -0.9898\nvn -0.0464 -0.1357 -0.9897\nvn -0.6965 -0.4611 -0.5498\nvn -0.4935 -0.5845 -0.6441\nvn -0.3166 -0.9004 -0.2983\nvn -0.7329 -0.6079 -0.3055\nvn -0.3693 -0.6167 -0.6952\nvn -0.1598 -0.9397 -0.3023\nvn -0.0881 -0.9825 -0.1637\nvn -0.2465 -0.9582 -0.1452\nvn -0.7553 -0.6515 -0.0712\nvn -0.2072 -0.6030 -0.7703\nvn -0.0443 -0.9170 -0.3964\nvn 0.0550 -0.4859 -0.8722\nvn 0.2482 -0.6081 -0.7540\nvn 0.4207 -0.6735 -0.6078\nvn 0.0151 -0.9760 -0.2172\nvn -0.6955 0.3995 -0.5972\nvn -0.7407 0.5466 -0.3904\nvn -0.3751 0.8145 -0.4425\nvn -0.5120 0.4978 -0.7000\nvn -0.7612 0.6343 -0.1349\nvn -0.2938 0.9219 -0.2523\nvn -0.1494 0.9488 -0.2785\nvn -0.2425 0.8546 -0.4592\nvn -0.3979 0.5290 -0.7495\nvn -0.1382 0.8315 -0.5380\nvn -0.2506 0.5169 -0.8185\nvn -0.0559 0.9434 -0.3270\nvn 0.3603 0.6659 -0.6532\nvn 0.1723 0.5448 -0.8206\nvn 0.0083 0.4237 -0.9057\nvn -0.7915 -0.0153 -0.6110\nvn -0.5688 -0.0111 -0.8224\nvn -0.4694 -0.0101 -0.8829\nvn -0.3281 -0.0127 -0.9445\nvn 0.0772 -0.0185 -0.9968\nvn 0.4438 -0.0050 -0.8961\nvn 0.6426 0.0024 -0.7662\nvn -0.9100 -0.3062 0.2795\nvn -0.9489 0.0000 0.3155\nvn -0.9788 0.0026 0.2047\nvn -0.9369 -0.3026 0.1747\nvn -0.9100 0.3062 0.2795\nvn -0.9384 0.3020 0.1677\nvn -0.9998 0.0016 -0.0215\nvn -0.2260 -0.9708 -0.0799\nvn -0.3577 -0.9338 -0.0065\nvn -0.0708 -0.9892 -0.1285\nvn 0.0949 -0.9821 0.1627\nvn -0.0750 -0.9715 0.2246\nvn -0.3631 -0.7953 0.4855\nvn 0.0288 -0.9870 -0.1580\nvn 0.0507 -0.9870 -0.1525\nvn 0.5597 -0.6922 0.4556\nvn 0.2062 -0.9682 0.1413\nvn -0.2389 0.9650 -0.1078\nvn -0.0872 0.9835 -0.1583\nvn -0.3688 0.9290 -0.0300\nvn -0.3476 0.9372 0.0269\nvn -0.2356 0.9712 -0.0344\nvn -0.0524 0.9941 -0.0944\nvn 0.0109 0.9825 -0.1857\nvn 0.0391 0.9842 -0.1728\nvn 0.0420 0.9916 -0.1224\nvn 0.1825 0.9831 0.0158\nvn -0.9525 -0.0072 -0.3045\nvn 0.4645 -0.3700 0.8046\nvn 0.3847 -0.4344 0.8144\nvn 0.4053 0.5857 0.7020\nvn 0.4934 0.5387 0.6829\nvn 0.7279 0.3427 0.5939\nvn 0.0805 -0.3732 0.9242\nvn -0.0287 0.0000 0.9996\nvn -0.6282 0.0000 0.7780\nvn 0.8896 0.0000 0.4568\nvn 0.7279 -0.3427 0.5939\nvn 0.0805 0.3732 0.9242\nvn -0.3358 0.6371 0.6938\nvn 0.3847 0.4344 0.8144\nvn 0.0980 0.8771 0.4702\nvn 0.4934 -0.5387 0.6829\nvn 0.4053 -0.5857 0.7020\nvn 0.4645 0.3700 0.8045\nvn 0.2338 0.8837 0.4054\nvn 0.4679 0.3981 0.7890\nvn 0.3576 0.8418 0.4043\nvn 0.3447 -0.5387 0.7688\nvn 0.1504 -0.3427 0.9273\nvn 0.5666 0.1225 0.8148\nvn 0.6921 0.2843 0.6634\nvn 0.5213 0.0000 0.8534\nvn 0.6914 0.0000 0.7224\nvn -0.0492 0.0000 0.9988\nvn 0.1504 0.3427 0.9273\nvn 0.5666 -0.1225 0.8148\nvn 0.4679 -0.3981 0.7890\nvn 0.3447 0.5387 0.7688\nvn 0.2591 0.8553 0.4487\nvn 0.3760 0.8318 0.4082\nvn 0.4228 0.5339 0.7323\nvn 0.4765 0.5530 0.6835\nvn 0.7517 0.4465 0.4854\nvn 0.7719 0.5933 0.2282\nvn 0.9991 0.0000 0.0422\nvn 0.9250 0.0000 0.3800\nvn 0.7517 -0.4465 0.4854\nvn 0.7719 -0.5933 0.2282\nvn 0.3760 -0.8318 0.4082\nvn 0.4765 -0.5530 0.6835\nvn 0.4228 -0.5339 0.7323\nvn 0.2591 -0.8553 0.4487\nvn 0.1655 -0.8319 0.5297\nvn 0.3537 -0.5530 0.7544\nvn 0.0445 -0.4465 0.8937\nvn -0.1883 -0.5934 0.7826\nvn -0.4629 0.0000 0.8864\nvn -0.1333 0.0000 0.9911\nvn 0.0445 0.4465 0.8937\nvn -0.1883 0.5934 0.7826\nvn 0.1655 0.8318 0.5297\nvn 0.3537 0.5530 0.7544\nvn 0.5836 -0.3279 -0.7429\nvn 0.7893 -0.5098 -0.3422\nvn 0.6550 -0.6800 -0.3296\nvn 0.3916 -0.2866 -0.8744\nvn 0.8713 -0.3522 -0.3416\nvn 0.9677 -0.2244 0.1151\nvn 0.9590 -0.2589 0.1155\nvn 0.8799 -0.4698 -0.0707\nvn 0.9745 0.0011 0.2243\nvn 0.9995 0.0000 0.0326\nvn 0.9108 -0.0469 0.4102\nvn 0.9652 0.2145 0.1497\nvn 0.9593 0.2594 0.1111\nvn 0.8799 0.4698 -0.0707\nvn 0.7851 0.5108 -0.3502\nvn 0.6486 0.6802 -0.3415\nvn 0.8755 0.3489 -0.3342\nvn 0.4336 0.2716 -0.8592\nvn 0.5942 0.3244 -0.7360\nvn 0.4274 0.0191 -0.9038\nvn 0.0506 -0.0336 -0.9981\nvn -0.2467 -0.9007 -0.3574\nvn -0.4972 -0.8334 -0.2412\nvn -0.3135 -0.9496 0.0034\nvn 0.0734 -0.9973 -0.0015\nvn -0.8272 -0.5378 -0.1626\nvn -0.7441 -0.6618 0.0912\nvn -0.1398 -0.6613 0.7369\nvn 0.3091 -0.7201 0.6211\nvn 0.4996 -0.6329 0.5915\nvn 0.6124 -0.0587 0.7884\nvn 0.6599 0.0165 0.7512\nvn 0.4974 -0.1348 0.8569\nvn 0.6933 0.5069 0.5122\nvn 0.6683 0.5672 0.4812\nvn 0.6841 0.5865 0.4335\nvn 0.3969 0.9061 -0.1463\nvn 0.4382 0.8869 -0.1458\nvn 0.4993 0.8575 -0.1238\nvn 0.0248 0.7313 -0.6815\nvn -0.0936 0.7142 -0.6937\nvn -0.0363 0.7337 -0.6784\nvn -0.5272 0.1027 -0.8435\nvn -0.5081 0.0480 -0.8599\nvn -0.5264 0.2098 -0.8239\nvn -0.7024 -0.0701 -0.7082\nvn -0.6433 -0.2200 -0.7333\nvn -0.5501 -0.2495 -0.7969\nvn -0.9126 -0.3474 -0.2154\nvn -0.9005 -0.4325 0.0454\nvn -0.9356 -0.2307 -0.2671\nvn -0.9495 -0.2975 -0.0992\nvn -0.6584 -0.4840 0.5763\nvn -0.4239 -0.5257 0.7375\nvn 0.3301 -0.1807 0.9265\nvn 0.2049 -0.2409 0.9486\nvn 0.7298 0.3286 0.5995\nvn 0.7272 0.3640 0.5819\nvn 0.6684 0.7365 -0.1037\nvn 0.6791 0.7190 -0.1480\nvn 0.1079 0.6451 -0.7564\nvn 0.1759 0.6945 -0.6976\nvn -0.4599 0.2989 -0.8361\nvn -0.4274 0.3128 -0.8482\nvn -0.6258 0.1416 -0.7670\nvn -0.6998 0.1012 -0.7071\nvn 0.5699 -0.5856 -0.5765\nvn 0.5719 -0.4957 0.6536\nvn 0.0000 -0.9966 0.0827\nvn 0.0000 -0.9848 0.1736\nvn -0.5719 -0.4957 0.6536\nvn -0.5699 -0.5856 -0.5765\nvn 0.6019 0.4820 -0.6366\nvn -0.7833 0.5856 -0.2083\nvn -0.6705 0.6990 -0.2486\nvn 0.5698 0.7134 0.4078\nvn -0.0164 0.9575 -0.2880\nvn -0.0126 0.9575 -0.2880\nvn -0.0121 0.9575 -0.2881\nvn -0.0042 0.9576 -0.2881\nvn 0.0042 0.9576 -0.2881\nvn 0.0040 0.9576 -0.2881\nvn -0.0040 0.9576 -0.2881\nvn 0.0126 0.9575 -0.2880\nvn 0.0164 0.9575 -0.2880\nvn 0.0121 0.9575 -0.2880\nvn 0.7833 0.5856 -0.2083\nvn -0.6019 0.4820 -0.6366\nvn -0.5698 0.7134 0.4078\nvn 0.6705 0.6990 -0.2486\nvn 0.0000 0.0670 -0.9977\nvn -0.1362 0.0226 -0.9904\nvn -0.1028 0.0227 -0.9944\nvn -0.1019 0.0227 -0.9945\nvn -0.0344 0.0228 -0.9991\nvn 0.0344 0.0228 -0.9991\nvn 0.0341 0.0228 -0.9991\nvn -0.0341 0.0228 -0.9991\nvn 0.1028 0.0227 -0.9944\nvn 0.1362 0.0226 -0.9904\nvn 0.1019 0.0227 -0.9945\nvn 0.0000 0.1893 0.9819\nvn -0.1388 0.1719 0.9752\nvn -0.1043 0.1727 0.9794\nvn -0.0349 0.1735 0.9842\nvn 0.0349 0.1735 0.9842\nvn 0.1044 0.1727 0.9794\nvn 0.1388 0.1719 0.9752\nvn 0.1043 0.1727 0.9794\nvn -1.0000 0.0000 0.0000\nvn 1.0000 0.0000 0.0000\nvn 0.0000 0.0641 -0.9979\nvn -0.5741 0.6200 -0.5348\nvn 0.5747 0.6195 -0.5347\nvn 0.6990 0.0874 -0.7097\nvn 0.0000 0.1223 -0.9925\nvn 0.7291 0.0187 -0.6841\nvn 0.0000 -0.0679 -0.9977\nvn 0.7272 -0.0466 -0.6848\nvn -0.9999 0.0081 -0.0002\nvn -0.9999 -0.0095 0.0003\nvn -0.5801 0.5322 0.6166\nvn -0.7121 -0.0768 0.6978\nvn -0.6989 -0.0521 0.7133\nvn -0.6582 -0.0271 0.7523\nvn 0.0000 -0.0642 0.9979\nvn 0.5807 0.5317 0.6165\nvn 0.7121 -0.0768 0.6978\nvn 0.6989 -0.0521 0.7133\nvn 0.6582 -0.0271 0.7523\nvn 0.9999 -0.0079 -0.0016\nvn 0.9999 0.0093 0.0019\nvn -0.0068 0.9967 0.0804\nvn 0.0043 0.9969 0.0787\nvn -0.0067 0.9967 0.0804\nvn 0.0042 0.9969 0.0787\nvn -0.6990 0.0874 -0.7097\nvn -0.7291 0.0187 -0.6841\nvn -0.7272 -0.0466 -0.6848\nvn 0.0000 0.0000 1.0000\nvn 0.0017 0.6953 0.7186\nvn 0.0034 0.6937 0.7203\nvn 0.0053 0.6906 0.7231\nvn -0.1051 0.7061 0.7002\nvn -0.6585 0.0214 0.7523\nvn -0.5280 0.5003 0.6862\nvn -0.6201 -0.1247 0.7745\nvn 0.0685 -0.7381 0.6712\nvn -0.0030 -0.7221 0.6917\nvn 0.4578 -0.6574 0.5985\nvn 0.7535 -0.2172 0.6205\nvn 0.7311 -0.0013 0.6822\nvn -0.0089 -0.7259 0.6877\nvn -0.0217 -0.7317 0.6813\nvn -0.6018 -0.2615 0.7546\nvn -0.1321 -0.7465 0.6521\nvn -0.4362 -0.6031 0.6677\nvn 0.7495 0.2073 0.6286\nvn 0.4515 0.6413 0.6203\nvn 0.0666 0.7146 0.6963\nvn 0.0113 0.9992 0.0385\nvn 0.0063 0.9994 0.0332\nvn 0.0100 0.9994 0.0339\nvn 0.0177 0.9991 0.0394\nvn 0.0178 0.9987 0.0476\nvn 0.0282 0.9984 0.0484\nvn -0.1386 0.9863 0.0891\nvn -0.0672 0.9943 0.0823\nvn -0.7029 0.6800 0.2083\nvn -0.5798 0.7896 0.2008\nvn -0.9684 0.0581 0.2424\nvn -0.9615 0.1103 0.2517\nvn -0.9557 -0.1751 0.2365\nvn -0.9575 -0.1544 0.2435\nvn -0.9031 -0.3601 0.2338\nvn -0.9154 -0.3179 0.2467\nvn -0.6356 -0.7657 0.0983\nvn -0.6423 -0.7596 0.1018\nvn -0.2076 -0.9772 -0.0430\nvn -0.1845 -0.9818 -0.0447\nvn -0.0450 -0.9973 -0.0580\nvn -0.0497 -0.9974 -0.0521\nvn -0.0219 -0.9987 -0.0469\nvn -0.0260 -0.9987 -0.0432\nvn -0.0094 -0.9991 -0.0399\nvn -0.0126 -0.9992 -0.0379\nvn 0.0839 -0.9955 -0.0429\nvn 0.0886 -0.9951 -0.0421\nvn 0.5532 -0.8301 -0.0697\nvn 0.5983 -0.7982 -0.0700\nvn 0.9556 -0.2842 -0.0779\nvn 0.9684 -0.2377 -0.0750\nvn 0.9976 -0.0069 -0.0685\nvn 0.9977 -0.0110 -0.0675\nvn 0.9602 0.2734 -0.0566\nvn 0.9579 0.2817 -0.0560\nvn 0.5600 0.8283 -0.0136\nvn 0.5731 0.8193 -0.0147\nvn 0.0906 0.9956 0.0241\nvn 0.0993 0.9948 0.0240\nvn -0.0034 0.6937 0.7203\nvn -0.0017 0.6953 0.7186\nvn -0.0053 0.6906 0.7231\nvn 0.1051 0.7061 0.7002\nvn 0.6585 0.0214 0.7523\nvn 0.5280 0.5003 0.6862\nvn 0.6201 -0.1247 0.7745\nvn -0.0685 -0.7381 0.6712\nvn 0.0030 -0.7221 0.6917\nvn -0.7535 -0.2172 0.6205\nvn -0.4578 -0.6574 0.5985\nvn -0.7311 -0.0013 0.6822\nvn 0.0089 -0.7259 0.6877\nvn 0.0217 -0.7317 0.6813\nvn 0.6018 -0.2615 0.7546\nvn 0.1321 -0.7465 0.6521\nvn 0.4362 -0.6031 0.6677\nvn -0.0666 0.7146 0.6963\nvn -0.4515 0.6413 0.6203\nvn -0.7495 0.2073 0.6286\nvn -0.0113 0.9992 0.0385\nvn -0.0177 0.9991 0.0394\nvn -0.0100 0.9994 0.0339\nvn -0.0063 0.9994 0.0332\nvn -0.0178 0.9987 0.0476\nvn -0.0282 0.9984 0.0484\nvn 0.1386 0.9863 0.0891\nvn 0.0672 0.9943 0.0823\nvn 0.7029 0.6800 0.2083\nvn 0.5798 0.7896 0.2008\nvn 0.9684 0.0581 0.2424\nvn 0.9615 0.1103 0.2517\nvn 0.9557 -0.1751 0.2365\nvn 0.9575 -0.1544 0.2435\nvn 0.9031 -0.3601 0.2338\nvn 0.9154 -0.3179 0.2467\nvn 0.6356 -0.7657 0.0983\nvn 0.6423 -0.7596 0.1018\nvn 0.2076 -0.9772 -0.0430\nvn 0.1845 -0.9818 -0.0447\nvn 0.0450 -0.9973 -0.0580\nvn 0.0497 -0.9974 -0.0521\nvn 0.0219 -0.9987 -0.0469\nvn 0.0260 -0.9987 -0.0432\nvn 0.0094 -0.9991 -0.0399\nvn 0.0126 -0.9992 -0.0379\nvn -0.0839 -0.9955 -0.0429\nvn -0.0886 -0.9951 -0.0421\nvn -0.5532 -0.8301 -0.0697\nvn -0.5983 -0.7982 -0.0700\nvn -0.9556 -0.2842 -0.0779\nvn -0.9684 -0.2377 -0.0750\nvn -0.9976 -0.0069 -0.0685\nvn -0.9977 -0.0110 -0.0675\nvn -0.9602 0.2734 -0.0566\nvn -0.9579 0.2817 -0.0560\nvn -0.5600 0.8283 -0.0136\nvn -0.5731 0.8193 -0.0147\nvn -0.0906 0.9956 0.0241\nvn -0.0993 0.9948 0.0240\nvn -0.0739 -0.9847 -0.1574\nvn -0.0155 -0.9940 -0.1077\nvn -0.0043 -0.9939 -0.1100\nvn -0.0477 -0.9862 -0.1583\nvn -0.3320 -0.8896 -0.3137\nvn -0.3184 -0.8949 -0.3126\nvn -0.3474 -0.8838 -0.3134\nvn -0.0908 -0.9839 -0.1541\nvn -0.0269 -0.9941 -0.1046\nvn -0.7058 -0.4155 -0.5737\nvn -0.7369 -0.3165 -0.5973\nvn -0.7036 0.4512 -0.5488\nvn -0.5918 0.6361 -0.4951\nvn -0.7107 0.4017 -0.5776\nvn -0.7007 -0.4190 -0.5774\nvn -0.3311 0.9145 -0.2323\nvn -0.2324 0.9540 -0.1894\nvn -0.1147 0.9893 -0.0900\nvn -0.0776 0.9939 -0.0779\nvn -0.1440 0.9841 -0.1038\nvn -0.3827 0.8832 -0.2709\nvn -0.0279 0.9983 -0.0519\nvn -0.0143 0.9987 -0.0487\nvn 0.0032 0.9991 -0.0409\nvn 0.0083 0.9992 -0.0392\nvn -0.0020 0.9991 -0.0424\nvn -0.0385 0.9977 -0.0555\nvn 0.0703 0.9969 -0.0331\nvn 0.0950 0.9950 -0.0295\nvn 0.4408 0.8976 -0.0010\nvn 0.5137 0.8578 0.0142\nvn 0.4017 0.9156 -0.0108\nvn 0.0626 0.9974 -0.0356\nvn 0.9246 0.3757 0.0623\nvn 0.9086 0.4117 0.0700\nvn 0.9925 -0.0757 0.0956\nvn 0.9916 -0.0841 0.0979\nvn 0.9949 -0.0456 0.0899\nvn 0.8957 0.4418 0.0498\nvn 0.8926 -0.4454 0.0701\nvn 0.9659 -0.2458 0.0817\nvn 0.4528 -0.8913 -0.0237\nvn 0.6138 -0.7894 -0.0107\nvn 0.4029 -0.9151 -0.0160\nvn 0.8757 -0.4774 0.0724\nvn 0.0639 -0.9944 -0.0840\nvn 0.1013 -0.9911 -0.0860\nvn 0.0458 -0.9957 -0.0801\nvn -0.0219 -0.1123 -0.9934\nvn -0.0456 -0.5799 -0.8134\nvn -0.1051 -0.4192 -0.9018\nvn -0.1680 -0.1851 -0.9682\nvn -0.0215 0.0052 -0.9997\nvn -0.2245 0.1683 -0.9598\nvn -0.0002 -0.1552 -0.9879\nvn -0.0064 -0.6757 -0.7371\nvn -0.0787 -0.9348 -0.3462\nvn -0.2843 -0.7474 -0.6004\nvn -0.0217 -0.9678 -0.2509\nvn -0.5224 -0.3351 -0.7841\nvn -0.5880 0.2943 -0.7534\nvn -0.4198 0.7703 -0.4799\nvn -0.1736 0.9617 -0.2122\nvn -0.2200 0.5730 -0.7894\nvn -0.1236 0.8930 -0.4327\nvn -0.0427 0.9918 -0.1205\nvn -0.0009 0.9949 -0.1003\nvn -0.0292 0.8545 -0.5186\nvn 0.0092 0.8766 -0.4811\nvn 0.0584 0.9944 -0.0873\nvn 0.3895 0.9135 -0.1171\nvn 0.1114 0.8787 -0.4640\nvn 0.2772 0.9004 -0.3351\nvn 0.8611 0.4985 -0.0998\nvn 0.9940 0.0280 -0.1061\nvn 0.5841 0.5067 -0.6341\nvn 0.6845 0.0568 -0.7267\nvn 0.8930 -0.4222 -0.1558\nvn 0.4117 -0.8863 -0.2119\nvn 0.5794 -0.3488 -0.7366\nvn 0.2484 -0.7971 -0.5504\nvn 0.0518 -0.9776 -0.2041\nvn 0.0842 -0.7377 -0.6699\nvn 0.1074 -0.2055 -0.9727\nvn 0.1342 0.0009 -0.9909\nvn -0.0250 0.3368 -0.9412\nvn 0.0066 0.3576 -0.9338\nvn 0.1426 0.3840 -0.9122\nvn 0.0739 -0.9847 -0.1574\nvn 0.0477 -0.9862 -0.1583\nvn 0.0043 -0.9939 -0.1100\nvn 0.0155 -0.9940 -0.1077\nvn 0.3320 -0.8896 -0.3137\nvn 0.3184 -0.8949 -0.3126\nvn 0.0908 -0.9839 -0.1541\nvn 0.3474 -0.8838 -0.3134\nvn 0.0269 -0.9941 -0.1046\nvn 0.7058 -0.4155 -0.5737\nvn 0.7369 -0.3165 -0.5973\nvn 0.7036 0.4512 -0.5488\nvn 0.5918 0.6361 -0.4950\nvn 0.7007 -0.4190 -0.5774\nvn 0.7106 0.4017 -0.5776\nvn 0.3311 0.9145 -0.2323\nvn 0.2324 0.9540 -0.1894\nvn 0.1147 0.9893 -0.0900\nvn 0.0776 0.9939 -0.0779\nvn 0.3827 0.8832 -0.2709\nvn 0.1440 0.9841 -0.1038\nvn 0.0279 0.9983 -0.0519\nvn 0.0143 0.9987 -0.0487\nvn -0.0032 0.9991 -0.0409\nvn -0.0083 0.9992 -0.0392\nvn 0.0385 0.9977 -0.0555\nvn 0.0020 0.9991 -0.0424\nvn -0.0703 0.9969 -0.0331\nvn -0.0950 0.9950 -0.0295\nvn -0.4408 0.8975 -0.0010\nvn -0.5137 0.8578 0.0142\nvn -0.0626 0.9974 -0.0356\nvn -0.4017 0.9156 -0.0108\nvn -0.9246 0.3757 0.0623\nvn -0.9086 0.4117 0.0700\nvn -0.9925 -0.0757 0.0956\nvn -0.9916 -0.0841 0.0979\nvn -0.8957 0.4418 0.0498\nvn -0.9949 -0.0456 0.0899\nvn -0.8926 -0.4454 0.0701\nvn -0.9659 -0.2458 0.0817\nvn -0.4528 -0.8913 -0.0237\nvn -0.6138 -0.7894 -0.0107\nvn -0.8757 -0.4774 0.0724\nvn -0.4029 -0.9151 -0.0160\nvn -0.0639 -0.9944 -0.0840\nvn -0.1013 -0.9911 -0.0860\nvn -0.0458 -0.9957 -0.0801\nvn 0.0219 -0.1123 -0.9934\nvn 0.1680 -0.1851 -0.9682\nvn 0.1051 -0.4192 -0.9018\nvn 0.0456 -0.5799 -0.8134\nvn 0.0215 0.0052 -0.9997\nvn 0.2245 0.1683 -0.9598\nvn 0.0002 -0.1552 -0.9879\nvn 0.0064 -0.6757 -0.7371\nvn 0.0787 -0.9348 -0.3462\nvn 0.2843 -0.7474 -0.6004\nvn 0.0217 -0.9678 -0.2509\nvn 0.5224 -0.3351 -0.7841\nvn 0.5880 0.2943 -0.7534\nvn 0.4198 0.7703 -0.4799\nvn 0.1736 0.9617 -0.2122\nvn 0.2200 0.5730 -0.7894\nvn 0.1236 0.8930 -0.4327\nvn 0.0427 0.9918 -0.1205\nvn 0.0009 0.9949 -0.1003\nvn 0.0292 0.8545 -0.5186\nvn -0.0092 0.8766 -0.4811\nvn -0.0584 0.9944 -0.0873\nvn -0.3895 0.9135 -0.1171\nvn -0.1114 0.8787 -0.4640\nvn -0.2772 0.9004 -0.3351\nvn -0.8611 0.4985 -0.0998\nvn -0.9940 0.0280 -0.1061\nvn -0.5841 0.5067 -0.6341\nvn -0.6845 0.0568 -0.7267\nvn -0.8930 -0.4222 -0.1558\nvn -0.4117 -0.8863 -0.2119\nvn -0.5794 -0.3488 -0.7366\nvn -0.2484 -0.7971 -0.5504\nvn -0.0518 -0.9776 -0.2041\nvn -0.0842 -0.7377 -0.6699\nvn -0.1074 -0.2055 -0.9727\nvn -0.1342 0.0009 -0.9909\nvn 0.0250 0.3368 -0.9412\nvn -0.0066 0.3576 -0.9338\nvn -0.1426 0.3840 -0.9122\nvn 0.5000 0.0000 0.8660\nvn -0.5000 0.0000 0.8660\nvn 0.0373 0.9982 -0.0458\nvn -0.0335 0.9949 0.0947\nvn -0.2268 0.9416 0.2490\nvn 0.0571 0.9920 -0.1122\nvn 0.0506 0.9969 -0.0608\nvn 0.0812 0.9903 -0.1128\nvn 0.0418 0.9966 -0.0701\nvn 0.0532 0.9966 -0.0634\nvn 0.0705 0.9962 0.0502\nvn -0.0563 0.9974 -0.0454\nvn 0.0002 0.9974 0.0715\nvn -0.0613 0.9969 0.0500\nvn -0.0454 0.9972 -0.0589\nvn -0.0611 0.9963 -0.0606\nvn -0.0379 0.9968 -0.0704\nvn -0.0521 0.9947 -0.0890\nvn -0.0227 0.9950 -0.0971\nvn 0.1940 0.9561 0.2194\nvn 0.0409 0.9972 0.0630\nvn -0.4665 0.8822 0.0639\nvn -0.3820 0.9170 0.1150\nvn 0.0038 0.9904 0.1381\nvn 0.2334 0.9711 0.0490\nvn 0.3780 0.9065 0.1881\nvn 0.2397 0.9705 -0.0235\nvn 0.0582 0.9982 -0.0162\nvn -0.4561 0.8899 -0.0065\nvn -0.0621 0.9758 -0.2096\nvn -0.0754 0.8263 -0.5580\nvn -0.2184 0.7925 -0.5694\nvn -0.2259 0.9464 -0.2306\nvn -0.0563 0.9981 -0.0235\nvn -0.2410 0.9700 -0.0309\nvn 0.1276 0.9917 -0.0156\nvn 0.1093 0.9742 -0.1976\nvn 0.0862 0.8252 -0.5582\nvn 0.0604 0.9771 -0.2037\nvn 0.0675 0.9169 -0.3934\nvn -0.3972 0.8560 -0.3310\nvn -0.4264 0.8887 -0.1682\nvn 0.2430 0.9441 -0.2225\nvn 0.2524 0.8628 -0.4379\nvn -0.1253 0.9883 -0.0867\nvn -0.0985 0.9885 -0.1150\nvn -0.3403 0.9321 -0.1239\nvn -0.2441 0.9669 -0.0738\nvn -0.1220 0.9888 -0.0855\nvn -0.2410 0.9056 -0.3489\nvn 0.0213 0.9956 -0.0910\nvn 0.0166 0.9969 -0.0764\nvn 0.0058 0.9939 -0.1101\nvn 0.1171 0.9901 -0.0775\nvn 0.0930 0.9859 -0.1389\nvn -0.0135 0.9943 -0.1053\nvn -0.0216 0.9967 -0.0782\nvn 0.0938 0.9891 -0.1133\nvn -0.0208 0.9955 -0.0922\nvn 0.3401 0.8586 -0.3836\nvn 0.2557 0.9640 -0.0725\nvn 0.8094 0.1225 -0.5743\nvn -0.0497 0.9959 0.0757\nvn 0.1455 0.9869 0.0688\nvn -0.2285 0.9711 0.0689\nvn -0.2949 0.9460 0.1344\nvn -0.0096 0.9918 0.1277\nvn 0.1461 0.9810 0.1273\nvn -0.2629 -0.0381 0.9640\nvn -0.6385 -0.2687 0.7212\nvn -0.6276 -0.2217 0.7463\nvn -0.4263 -0.2777 0.8609\nvn 0.0705 0.0066 0.9975\nvn 0.1250 -0.0892 0.9881\nvn -0.0028 0.4954 0.8686\nvn 0.0284 0.4542 0.8904\nvn -0.6293 0.4904 0.6029\nvn -0.5974 0.3641 0.7145\nvn -0.6150 0.4264 0.6632\nvn -0.6404 0.5681 0.5168\nvn 0.4060 -0.3478 0.8451\nvn 0.1391 -0.3179 0.9378\nvn 0.0954 -0.1628 0.9820\nvn 0.4312 -0.2851 0.8560\nvn 0.6223 -0.2870 0.7282\nvn 0.6251 -0.2132 0.7508\nvn 0.3080 0.4632 0.8310\nvn 0.5195 0.5687 0.6377\nvn 0.5899 0.4890 0.6425\nvn 0.4250 0.4265 0.7984\nvn -0.0057 0.4949 0.8689\nvn -0.0414 0.5256 0.8497\nvn 0.9793 0.1845 0.0830\nvn 0.9599 0.2058 0.1904\nvn 0.9799 -0.0811 0.1819\nvn 0.9950 -0.0387 0.0915\nvn 0.9792 0.2025 -0.0075\nvn 1.0000 -0.0072 0.0020\nvn 0.9171 0.3983 -0.0141\nvn 0.9106 0.4028 0.0925\nvn 0.8310 0.5127 0.2156\nvn 0.9418 0.2719 -0.1974\nvn 0.9860 0.0759 -0.1483\nvn 0.8939 0.3085 -0.3253\nvn 0.9277 0.2377 -0.2878\nvn 0.7424 0.5355 -0.4026\nvn 0.8769 0.4378 -0.1981\nvn 0.0782 0.6295 -0.7730\nvn 0.2200 0.6073 -0.7634\nvn 0.2562 0.5960 -0.7610\nvn 0.1476 0.6298 -0.7626\nvn -0.3297 0.6033 -0.7261\nvn -0.5307 0.6554 -0.5374\nvn -0.2933 0.6551 -0.6963\nvn 0.0631 0.6853 -0.7255\nvn 0.2250 0.6871 -0.6909\nvn -0.0722 0.6385 -0.7662\nvn 0.0745 0.6417 -0.7633\nvn 0.0680 0.5989 -0.7979\nvn -0.1487 0.6194 -0.7708\nvn -0.2243 0.6216 -0.7505\nvn -0.2723 0.5773 -0.7697\nvn -0.9532 0.2507 -0.1687\nvn -0.8634 0.3369 -0.3755\nvn -0.9368 0.2069 -0.2819\nvn -0.9887 0.0563 -0.1390\nvn -0.9789 0.2039 -0.0072\nvn -0.9999 -0.0090 0.0029\nvn -0.9181 0.3961 -0.0121\nvn -0.8709 0.4626 -0.1658\nvn -0.5683 0.6623 -0.4883\nvn -0.9772 0.1937 0.0866\nvn -0.9950 -0.0429 0.0902\nvn -0.9597 0.2241 0.1696\nvn -0.9785 -0.0901 0.1856\nvn -0.8733 0.4605 0.1591\nvn -0.9185 0.3783 0.1151\nvn -0.0024 0.9974 -0.0714\nvn -0.0012 0.9973 -0.0740\nvn -0.0736 0.9962 -0.0452\nvn 0.0032 0.9984 -0.0559\nvn -0.1410 0.9900 0.0075\nvn 0.1578 0.9873 -0.0186\nvn 0.0591 0.9982 -0.0124\nvn -0.0012 0.9995 -0.0317\nvn 0.2375 0.9710 -0.0258\nvn 0.1942 0.9808 -0.0191\nvn -0.0011 0.9997 -0.0224\nvn -0.2400 0.9704 -0.0264\nvn -0.1960 0.9804 -0.0182\nvn -0.2780 0.9544 -0.1082\nvn -0.0016 0.9935 -0.1137\nvn 0.2776 0.9550 -0.1045\nvn 0.0016 0.9982 -0.0600\nvn 0.0431 0.9970 -0.0639\nvn -0.0040 0.9994 -0.0346\nvn 0.1497 0.9871 -0.0568\nvn -0.1269 0.9900 -0.0620\nvn -0.0297 0.9975 -0.0645\nvn 0.0044 0.9951 -0.0986\nvn -0.0007 0.9998 -0.0178\nvn -0.1567 0.9875 -0.0148\nvn 0.1549 0.9878 -0.0165\nvn 0.1480 0.9886 0.0273\nvn -0.0002 0.9995 0.0321\nvn -0.1491 0.9884 0.0298\nvn -0.0030 0.4769 0.8790\nvn 0.2300 0.4512 0.8622\nvn 0.1753 0.5398 0.8233\nvn 0.0018 0.5611 0.8277\nvn -0.2362 0.4550 0.8586\nvn -0.1836 0.5278 0.8292\nvn -0.2719 0.5454 0.7928\nvn -0.0023 0.5662 0.8242\nvn 0.2719 0.5402 0.7964\nvn -0.0435 0.3829 -0.9227\nvn -0.1544 0.3809 -0.9116\nvn -0.1542 0.4663 -0.8711\nvn -0.0191 0.5123 -0.8586\nvn 0.1537 0.3830 -0.9109\nvn 0.0421 0.3844 -0.9222\nvn 0.0434 0.3827 -0.9228\nvn 0.1537 0.3795 -0.9123\nvn 0.1544 0.3828 -0.9108\nvn 0.0369 0.3833 -0.9229\nvn -0.0135 0.5145 -0.8573\nvn -0.1697 0.4732 -0.8645\nvn 0.9039 0.4219 -0.0710\nvn 0.8514 0.4401 -0.2853\nvn 0.6406 0.6624 -0.3883\nvn 0.7266 0.6743 -0.1317\nvn 0.9205 0.3906 -0.0038\nvn 0.7355 0.6775 -0.0083\nvn 0.9831 0.1832 -0.0020\nvn 0.9838 0.1792 -0.0059\nvn 0.9471 0.3027 -0.1061\nvn 0.9178 0.3965 0.0178\nvn 0.7413 0.6692 0.0498\nvn 0.8257 0.5597 0.0705\nvn 0.7301 0.6778 0.0872\nvn 0.9816 0.1793 0.0655\nvn 0.9819 0.1893 0.0071\nvn 0.9528 0.1801 0.2445\nvn 0.9621 0.1847 0.2006\nvn 0.8187 0.3536 0.4523\nvn 0.7613 0.3417 0.5510\nvn 0.6548 -0.1170 0.7467\nvn 0.7019 -0.0743 0.7083\nvn 0.9372 0.0983 0.3346\nvn 0.9724 0.1722 0.1569\nvn 0.9951 0.0512 0.0848\nvn 0.9990 0.0304 0.0312\nvn -0.0010 0.9996 0.0262\nvn 0.1812 0.9826 0.0403\nvn -0.1787 0.9835 0.0263\nvn -0.1450 0.9697 0.1965\nvn -0.0015 0.9723 0.2337\nvn 0.1528 0.9703 0.1874\nvn -0.7462 0.1569 0.6469\nvn -0.6992 0.1964 0.6873\nvn -0.6282 0.1035 0.7711\nvn -0.7864 0.2015 0.5839\nvn -0.8185 0.3388 0.4639\nvn -0.8498 0.2780 0.4478\nvn -0.9991 0.0295 0.0319\nvn -0.9989 0.0411 0.0235\nvn -0.9897 0.1270 0.0655\nvn -0.9906 0.0838 0.1080\nvn -0.9926 0.1156 0.0371\nvn -0.9708 0.1687 0.1703\nvn -0.7376 0.6743 0.0342\nvn -0.7250 0.6842 0.0790\nvn -0.7349 0.6782 -0.0012\nvn -0.9986 0.0521 0.0025\nvn -0.9987 0.0517 -0.0009\nvn -0.9829 0.1841 -0.0020\nvn -0.9789 0.2040 -0.0024\nvn -0.7252 0.6814 -0.0989\nvn -0.6684 0.7023 -0.2448\nvn -0.9984 0.0555 -0.0052\nvn -0.9962 0.0762 -0.0411\nvn -0.9885 0.1364 -0.0647\nvn -0.9858 0.1670 -0.0147\nvn -0.5564 0.5057 -0.6594\nvn -0.5707 0.5673 -0.5936\nvn -0.7307 0.4565 -0.5076\nvn -0.9969 0.0567 -0.0553\nvn -0.9846 0.1710 -0.0366\nvn -0.9740 0.1708 -0.1489\nvn -0.9865 0.0942 -0.1337\nvn 0.0007 0.9981 -0.0609\nvn -0.1749 0.9823 -0.0673\nvn 0.1762 0.9825 -0.0598\nvn 0.1450 0.9759 -0.1630\nvn 0.0022 0.9822 -0.1875\nvn -0.1495 0.9761 -0.1573\nvn 0.8577 0.3442 -0.3819\nvn 0.9252 0.3002 -0.2321\nvn 0.5875 0.6673 -0.4577\nvn 0.5563 0.5614 -0.6127\nvn 0.9876 0.0844 -0.1323\nvn 0.9744 0.1729 -0.1438\nvn -0.1405 0.9820 0.1262\nvn -0.0527 0.9827 0.1777\nvn -0.1060 0.7988 0.5922\nvn -0.0867 0.9749 0.2052\nvn 0.1062 0.0627 0.9923\nvn -0.2700 0.9528 0.1386\nvn 0.1191 0.9659 -0.2297\nvn 0.0369 0.9174 -0.3963\nvn 0.1280 0.8017 -0.5839\nvn 0.3612 0.9250 -0.1176\nvn 0.0485 0.9864 0.1566\nvn 0.0551 0.9828 0.1760\nvn 0.2333 0.9706 0.0579\nvn 0.4985 0.6202 0.6056\nvn 0.6337 0.7173 0.2895\nvn -0.1521 -0.0070 0.9883\nvn -0.1045 0.9859 -0.1303\nvn -0.2322 0.9480 -0.2177\nvn -0.0851 0.9181 -0.3871\nvn -0.1865 0.7446 -0.6409\nvn 0.2742 0.6795 -0.6805\nvn 0.0723 0.6188 -0.7822\nvn 0.8253 0.5580 -0.0859\nvn 0.2746 0.9441 -0.1825\nvn 0.4624 0.8699 -0.1715\nvn 0.4608 0.8817 -0.1010\nvn 0.3464 0.5501 -0.7598\nvn 0.2130 0.5723 -0.7918\nvn 0.1749 0.5773 -0.7976\nvn 0.3524 0.5520 -0.7556\nvn 0.3913 0.8440 0.3667\nvn 0.2845 0.9577 0.0431\nvn 0.4978 0.8239 0.2705\nvn 0.2885 0.6529 0.7003\nvn 0.2640 0.6343 0.7266\nvn 0.4457 0.5968 0.6671\nvn 0.4487 0.5032 0.7385\nvn 0.1864 0.9793 0.0782\nvn 0.2311 0.9401 0.2505\nvn 0.2803 0.9532 0.1128\nvn 0.0992 0.9356 0.3386\nvn 0.2862 0.4963 0.8196\nvn 0.1491 0.5029 0.8514\nvn 0.1188 0.5862 0.8014\nvn 0.9269 0.2827 0.2469\nvn 0.9311 0.2076 0.2998\nvn 0.9604 0.2555 0.1105\nvn -0.9269 0.2827 0.2469\nvn -0.9574 0.2639 0.1172\nvn -0.9394 0.1812 0.2910\nvn -0.1275 0.5918 0.7959\nvn -0.1491 0.5029 0.8514\nvn -0.2751 0.4847 0.8303\nvn -0.2311 0.9401 0.2505\nvn -0.0922 0.9382 0.3334\nvn -0.2898 0.9491 0.1235\nvn -0.3921 0.8442 0.3655\nvn -0.2885 0.6529 0.7003\nvn -0.4978 0.8239 0.2705\nvn -0.2873 0.9567 0.0469\nvn -0.1837 0.9800 0.0755\nvn -0.4539 0.5866 0.6707\nvn -0.2573 0.6347 0.7287\nvn -0.4480 0.5123 0.7327\nvn -0.2967 0.6423 -0.7066\nvn -0.7989 0.5955 -0.0847\nvn -0.7083 0.6562 -0.2602\nvn -0.3040 0.5538 -0.7751\nvn -0.2181 0.5722 -0.7906\nvn -0.4656 0.8691 -0.1668\nvn -0.2709 0.9450 -0.1830\nvn -0.4599 0.8814 -0.1077\nvn -0.2070 0.9524 -0.2236\nvn -0.2743 0.9541 -0.1201\nvn -0.0933 0.9579 -0.2714\nvn -0.2455 0.4329 -0.8674\nvn -0.1489 0.4520 -0.8795\nvn -0.1119 0.5228 -0.8451\nvn -0.9429 0.2689 -0.1964\nvn -0.9427 0.1792 -0.2815\nvn -0.9653 0.2511 -0.0720\nvn 0.9429 0.2689 -0.1964\nvn 0.9651 0.2517 -0.0725\nvn 0.9369 0.1985 -0.2876\nvn 0.1192 0.5278 -0.8409\nvn 0.1489 0.4520 -0.8795\nvn 0.2207 0.5005 -0.8371\nvn 0.1596 0.5432 -0.8243\nvn 0.2070 0.9524 -0.2236\nvn 0.0867 0.9601 -0.2659\nvn 0.2774 0.9527 -0.1244\nvn -0.4374 -0.2043 0.8757\nvn -0.6236 -0.1578 0.7656\nvn -0.0862 0.9719 0.2191\nvn -0.3556 0.8263 0.4367\nvn 0.4142 -0.1933 0.8894\nvn 0.1539 0.9573 0.2447\nvn 0.3220 0.8339 0.4482\nvn 0.6288 -0.1628 0.7603\nvn -0.9927 -0.1010 0.0655\nvn -0.9997 -0.0225 0.0101\nvn -0.9820 -0.1852 0.0370\nvn -0.9983 -0.0561 0.0123\nvn -0.6726 0.7334 0.0984\nvn -0.8924 0.4219 0.1597\nvn 0.9955 -0.0248 0.0911\nvn 0.9067 0.4069 0.1110\nvn 0.9927 0.0631 0.1025\nvn 0.5849 0.8111 -0.0037\nvn 0.9988 -0.0230 -0.0435\nvn 0.9993 -0.0344 -0.0143\nvn -0.9588 -0.2408 -0.1503\nvn -0.9807 0.1237 -0.1512\nvn -0.8364 -0.5323 -0.1308\nvn -0.9832 0.1499 -0.1037\nvn -0.0821 0.9242 -0.3728\nvn 0.0707 0.6955 -0.7150\nvn -0.2191 0.7696 -0.5997\nvn -0.2579 0.6737 -0.6926\nvn -0.2535 0.6531 -0.7136\nvn 0.2492 0.6682 -0.7010\nvn 0.2680 0.6440 -0.7165\nvn 0.0023 0.9413 -0.3376\nvn 0.3150 0.8112 -0.4926\nvn -0.0370 0.7168 -0.6962\nvn 0.9621 -0.2550 -0.0961\nvn 0.8022 -0.5970 -0.0063\nvn 0.9695 0.1107 -0.2185\nvn 0.9113 0.3161 -0.2640\nvn 0.0002 0.9967 0.0808\nvn -0.0030 0.6506 0.7594\nvn 0.0020 0.5819 -0.8132\nvn -0.0021 0.9824 -0.1865\nvn 0.4039 0.9145 -0.0222\nvn 0.9537 0.3008 -0.0008\nvn 0.9497 0.3130 -0.0027\nvn 0.3331 0.9427 -0.0150\nvn 0.2676 0.9634 -0.0122\nvn 0.9373 0.3486 0.0019\nvn 0.2168 0.9762 -0.0060\nvn 0.3988 0.4129 0.8188\nvn 0.9443 0.1747 0.2788\nvn 0.9673 0.1029 0.2315\nvn 0.6610 0.5561 0.5037\nvn 0.9624 0.1060 0.2499\nvn 0.0081 0.6419 0.7667\nvn -0.0064 0.9290 0.3699\nvn -0.3831 0.4199 0.8227\nvn -0.9561 0.1796 0.2314\nvn 0.5764 0.3821 0.7223\nvn -0.2641 0.9644 -0.0116\nvn -0.9395 0.3426 -0.0042\nvn -0.6639 0.7454 0.0596\nvn -0.9503 0.3112 -0.0036\nvn -0.3273 0.9448 -0.0132\nvn -0.3966 0.9178 -0.0203\nvn -0.9515 0.3071 -0.0188\nvn -0.6892 0.7244 -0.0155\nvn -0.4476 0.3465 -0.8244\nvn -0.8596 0.2185 -0.4618\nvn -0.9127 0.1957 -0.3587\nvn -0.0069 0.5728 -0.8196\nvn 0.0060 0.9567 -0.2908\nvn 0.4429 0.3825 -0.8109\nvn 0.2674 0.3717 -0.8890\nvn 0.8972 0.1809 -0.4029\nvn 0.9180 0.2530 -0.3053\nvn 0.2441 0.4941 -0.8344\nvn -0.5295 0.3478 -0.7737\nvn 0.8906 0.3912 0.2317\nvn 0.7206 0.3686 0.5872\nvn 0.6359 0.7703 0.0469\nvn 0.3127 0.9487 0.0468\nvn -0.3125 0.9495 0.0268\nvn -0.9736 0.2233 0.0461\nvn -0.8439 0.3722 0.3863\nvn -0.9714 0.2349 0.0332\nvn -0.7275 0.6060 -0.3217\nvn -0.6025 0.7957 -0.0616\nvn -0.3003 0.9511 -0.0712\nvn -0.9720 0.2327 -0.0318\nvn 0.3010 0.9517 -0.0607\nvn 0.9720 0.2328 -0.0316\nvn 0.6904 0.6612 -0.2933\nvn 0.0000 0.9962 0.0871\nvn 0.0000 0.0871 -0.9962\nvn 0.0000 -0.0871 0.9962\nvn 0.0000 -0.2240 0.9746\nvn 0.0000 0.9916 -0.1294\nvn 0.0000 0.3566 -0.9343\nvn 0.0000 0.2240 -0.9746\nvn -0.9639 -0.0232 0.2651\nvn 0.9640 -0.0236 0.2648\nvn 0.2586 0.3388 -0.9046\nvn -0.2586 0.3388 -0.9046\nvn -0.9237 -0.0340 0.3815\nvn -0.9675 0.2517 0.0220\nvn 0.0000 0.3007 0.9537\nvn 0.9675 0.2517 0.0220\nvn 0.9239 -0.0334 0.3812\nvn 0.0000 -0.1967 0.9804\nvn 0.0000 0.0853 -0.9963\nvn 0.0000 0.2095 -0.9778\nvn 0.0000 0.3304 -0.9438\nvn 0.0000 0.9933 0.1150\nvn -0.1267 0.9627 0.2391\nvn -0.1780 0.9409 0.2882\nvn 0.1780 0.9409 0.2882\nvn 0.1267 0.9627 0.2391\nvn -0.9916 0.0426 -0.1216\nvn -0.9731 0.0762 -0.2176\nvn -0.9237 0.3816 0.0334\nvn 0.0000 0.9309 -0.3651\nvn 0.0000 0.9536 -0.3011\nvn 0.9239 0.3812 0.0333\nvn 0.9575 0.2872 0.0251\nvn -0.9239 0.3812 0.0333\nvn -0.9575 0.2872 0.0251\nvn 0.9731 0.0762 -0.2176\nvn 0.9237 0.3816 0.0334\nvn 0.9916 0.0426 -0.1216\nvn -0.5773 0.6254 -0.5248\nvn 0.5773 0.6254 -0.5248\nvn -0.5847 0.5335 0.6112\nvn -0.6861 0.6624 0.3007\nvn -0.5773 0.5248 0.6254\nvn 0.5773 0.5248 0.6254\nvn 0.6861 0.6624 0.3007\nvn 0.5847 0.5335 0.6112\nvn -0.4368 0.7309 0.5244\nvn -0.5777 0.6248 -0.5252\nvn -0.6863 0.2998 -0.6626\nvn -0.6863 0.2994 -0.6628\nvn 0.6863 0.2994 -0.6627\nvn 0.6862 0.2999 -0.6626\nvn 0.5777 0.6248 -0.5252\nvn 0.4368 0.7309 0.5244\nvn 0.0000 0.7660 -0.6428\nvn 0.0000 0.6428 0.7660\nvn -0.7067 -0.2523 0.6610\nvn -0.7071 -0.2521 0.6606\nvn -0.7004 -0.2552 0.6665\nvn -0.7000 -0.2554 0.6669\nvn -0.7139 -0.0610 0.6976\nvn -0.7076 -0.0627 0.7038\nvn -0.7071 0.7044 0.0616\nvn 0.7071 0.7044 0.0616\nvn 0.7071 -0.0616 0.7044\nvn 0.7133 -0.0622 0.6980\nvn 0.7004 -0.2545 0.6668\nvn 0.7001 -0.2546 0.6671\nvn 0.7067 -0.2530 0.6607\nvn 0.7070 -0.2529 0.6604\nvn -0.7071 0.2337 -0.6673\nvn -0.7078 0.2334 -0.6667\nvn -0.7065 0.0605 -0.7051\nvn -0.7064 0.0605 -0.7052\nvn 0.0000 0.7654 -0.6435\nvn 0.0000 0.7655 -0.6435\nvn 0.7065 0.0604 -0.7051\nvn 0.7064 0.0604 -0.7052\nvn 0.7077 0.2335 -0.6668\nvn 0.7071 0.2336 -0.6674\nvn -0.9239 0.2456 0.2934\nvn 0.9239 0.2459 0.2931\nvn -0.5847 0.5334 0.6112\nvn -0.5773 0.5248 0.6255\nvn 0.5773 0.5248 0.6255\nvn 0.5847 0.5334 0.6112\nvn 0.1132 -0.9866 0.1175\nvn -0.0564 -0.9984 -0.0019\nvn -0.0134 -0.9994 0.0330\nvn 0.2079 -0.9755 0.0722\nvn 0.2717 -0.9370 0.2193\nvn 0.4241 -0.9008 0.0934\nvn 0.3503 -0.9271 0.1334\nvn 0.2700 -0.9534 0.1345\nvn 0.0636 -0.9699 0.2348\nvn 0.2186 -0.8535 0.4731\nvn 0.0000 -0.9855 0.1694\nvn 0.0000 -0.9967 0.0806\nvn 0.0000 -0.9984 -0.0571\nvn 0.1427 0.9897 0.0089\nvn 0.4743 0.8802 -0.0139\nvn 0.5675 0.8128 -0.1315\nvn 0.3995 0.8980 -0.1845\nvn 0.1114 0.9255 -0.3618\nvn 0.3395 0.8274 -0.4473\nvn 0.0000 0.9345 -0.3558\nvn 0.0000 0.9999 0.0109\nvn 0.1283 0.9236 0.3611\nvn 0.0031 0.9550 0.2965\nvn 0.3606 0.8221 0.4405\nvn 0.3108 0.9105 0.2726\nvn 0.6082 0.7743 0.1749\nvn 0.0537 0.6110 -0.7898\nvn -0.0890 0.9121 -0.4002\nvn 0.0000 0.8964 -0.4432\nvn 0.0000 0.5669 -0.8237\nvn 0.0908 0.2991 -0.9499\nvn 0.0000 0.3019 -0.9533\nvn 0.1791 0.2878 -0.9408\nvn 0.2498 0.6684 -0.7006\nvn 0.1464 0.9209 -0.3611\nvn 0.1109 -0.3381 0.9345\nvn 0.1052 -0.2932 0.9502\nvn 0.4413 -0.2351 0.8660\nvn 0.3635 -0.3091 0.8788\nvn 0.1100 -0.3660 0.9241\nvn 0.2134 -0.3706 0.9039\nvn 0.0000 -0.3617 0.9323\nvn 0.0000 -0.3388 0.9408\nvn 0.0000 -0.3000 0.9539\nvn 0.9997 -0.0249 -0.0005\nvn 0.9954 0.0811 0.0513\nvn 0.9059 0.3758 -0.1950\nvn 0.8987 0.2215 -0.3784\nvn 0.9951 -0.0963 -0.0220\nvn 0.9065 0.0862 -0.4132\nvn 0.9232 -0.2261 0.3106\nvn 0.9245 -0.1561 0.3478\nvn 0.9334 -0.0219 0.3581\nvn 0.0120 0.4200 -0.9074\nvn 0.0262 0.2498 -0.9679\nvn 0.0000 0.2512 -0.9679\nvn 0.0000 0.3993 -0.9168\nvn 0.0782 0.5549 -0.8282\nvn 0.0000 0.5519 -0.8339\nvn 0.0465 0.5590 -0.8278\nvn -0.0364 0.4094 -0.9116\nvn 0.0922 0.2151 -0.9722\nvn 0.0830 0.1556 -0.9843\nvn 0.0000 0.1717 -0.9851\nvn 0.1934 0.1123 -0.9746\nvn -0.2081 0.4593 -0.8636\nvn -0.2861 0.7540 -0.5913\nvn 0.0102 0.7936 -0.6083\nvn 0.1069 0.4811 -0.8701\nvn -0.2669 -0.5388 -0.7990\nvn -0.2528 -0.5493 -0.7964\nvn 0.1299 -0.5869 -0.7991\nvn 0.2829 -0.5270 -0.8014\nvn -0.5424 -0.5196 -0.6602\nvn -0.4673 -0.5887 -0.6595\nvn -0.5688 0.4262 -0.7034\nvn -0.6019 0.6719 -0.4315\nvn 0.0889 -0.0020 0.9960\nvn 0.0953 -0.1983 0.9755\nvn 0.3978 -0.1569 0.9039\nvn 0.3765 0.0963 0.9214\nvn 0.0945 0.3530 0.9308\nvn 0.2927 0.3136 0.9033\nvn 0.0000 0.3327 0.9430\nvn 0.0000 -0.0189 0.9998\nvn 0.0000 -0.2038 0.9790\nvn 0.1036 -0.3337 0.9369\nvn 0.3471 -0.3282 0.8785\nvn 0.0000 -0.3299 0.9440\nvn 0.0848 -0.4598 0.8840\nvn 0.0000 -0.4796 0.8774\nvn 0.0646 -0.6467 0.7600\nvn 0.0000 -0.6582 0.7528\nvn 0.1410 -0.6106 0.7793\nvn 0.3726 -0.3317 0.8667\nvn -0.4856 -0.1780 -0.8558\nvn -0.5354 -0.4020 -0.7427\nvn -0.5008 -0.4018 -0.7666\nvn -0.4531 -0.2294 -0.8614\nvn -0.6938 -0.0048 -0.7201\nvn -0.7745 -0.0053 -0.6326\nvn 0.3106 0.1415 -0.9399\nvn 0.3344 0.2558 -0.9070\nvn 0.3048 0.2659 -0.9145\nvn 0.3088 0.1485 -0.9394\nvn 0.4265 0.0029 -0.9044\nvn 0.4890 0.0034 -0.8722\nvn 0.9848 -0.1729 -0.0120\nvn 0.9113 -0.0171 -0.4114\nvn 0.9239 -0.3299 0.1936\nvn 0.9130 -0.0985 -0.3958\nvn 0.8803 -0.3747 0.2907\nvn 0.9561 -0.2212 0.1922\nvn 0.9922 -0.0330 0.1199\nvn 0.9560 -0.0270 0.2921\nvn 0.9576 -0.2352 0.1662\nvn 0.9803 -0.1665 0.1060\nvn 0.9967 -0.0482 0.0652\nvn 0.9910 0.1331 -0.0105\nvn -0.9174 0.2038 -0.3417\nvn -0.9600 0.1219 -0.2520\nvn -0.9661 0.2349 -0.1066\nvn -0.9624 0.1336 -0.2365\nvn -0.4255 0.5173 -0.7425\nvn -0.2988 0.6268 -0.7196\nvn -0.5643 0.3626 -0.7416\nvn -0.6478 0.2439 -0.7217\nvn -0.3342 -0.6444 -0.6878\nvn -0.2074 -0.5935 -0.7776\nvn -0.3923 -0.6230 -0.6767\nvn -0.5109 -0.6913 -0.5109\nvn -0.6787 -0.6292 -0.3787\nvn -0.7013 -0.6501 -0.2925\nvn 0.6659 -0.4304 0.6093\nvn 0.5659 -0.4687 0.6783\nvn 0.5656 -0.4682 0.6789\nvn 0.7035 -0.3830 0.5987\nvn 0.7826 -0.3257 0.5305\nvn 0.7382 -0.2746 0.6161\nvn 0.8592 0.0013 0.5116\nvn 0.8625 -0.0823 0.4993\nvn 0.6317 -0.1108 0.7673\nvn 0.6415 -0.1615 0.7499\nvn 0.5900 0.0214 -0.8071\nvn 0.5995 0.0308 -0.7997\nvn 0.5380 -0.0999 -0.8369\nvn 0.5900 -0.2164 -0.7779\nvn 0.7629 0.0797 -0.6416\nvn 0.8215 -0.0441 -0.5685\nvn 0.7406 0.1614 -0.6522\nvn 0.5912 0.1518 -0.7921\nvn 0.5784 0.1390 -0.8039\nvn 0.5525 0.3256 -0.7673\nvn 0.5492 0.3233 -0.7706\nvn 0.5535 0.3263 -0.7662\nvn 0.5567 0.3286 -0.7629\nvn 0.7825 0.3819 -0.4917\nvn 0.6923 0.6926 -0.2025\nvn 0.3942 0.7455 -0.5374\nvn 0.3019 0.8498 -0.4321\nvn 0.0859 0.4361 -0.8958\nvn -0.0520 0.6693 -0.7411\nvn 0.9473 0.1223 -0.2960\nvn 0.8950 0.2044 -0.3965\nvn 0.8062 0.5292 -0.2646\nvn 0.8090 0.5664 -0.1572\nvn 0.9749 -0.1556 -0.1594\nvn 0.9438 -0.1643 -0.2869\nvn 0.1067 -0.6998 -0.7063\nvn 0.3013 -0.5712 -0.7635\nvn 0.6497 -0.2271 0.7255\nvn 0.8509 -0.2053 0.4834\nvn 0.8416 -0.2516 0.4779\nvn 0.6440 -0.3130 0.6980\nvn 0.6432 -0.3122 0.6991\nvn 0.7120 -0.3449 0.6116\nvn 0.6300 -0.3512 0.6926\nvn 0.7477 -0.3305 0.5759\nvn 0.6043 -0.3681 0.7066\nvn 0.8213 -0.3233 0.4700\nvn 0.8210 -0.3305 0.4655\nvn 0.8043 -0.0450 0.5924\nvn 0.7715 -0.0399 0.6350\nvn 0.6183 -0.2925 0.7295\nvn 0.5955 -0.1540 0.7884\nvn 0.5584 0.1249 0.8201\nvn 0.7618 0.0843 0.6423\nvn 0.7301 0.1099 0.6744\nvn 0.6863 0.4354 0.5826\nvn 0.6778 0.4571 0.5759\nvn 0.6917 0.4434 0.5699\nvn 0.6067 0.5576 0.5665\nvn 0.5498 0.2936 0.7820\nvn -0.1746 -0.9827 -0.0615\nvn 0.0253 -0.9980 -0.0576\nvn -0.2798 -0.9561 -0.0868\nvn -0.4038 -0.9011 -0.1577\nvn -0.1766 -0.9746 -0.1374\nvn 0.0351 -0.9910 -0.1291\nvn -0.9827 -0.0063 -0.1850\nvn -0.9251 -0.3185 -0.2068\nvn -0.9681 -0.1936 -0.1590\nvn -0.9892 0.0384 -0.1412\nvn -0.9572 0.2052 -0.2039\nvn -0.9701 0.1174 -0.2125\nvn -0.9310 0.2882 -0.2238\nvn -0.9710 -0.0565 -0.2323\nvn -0.8504 -0.4575 -0.2597\nvn -0.1817 0.9584 -0.2202\nvn -0.4091 0.8767 -0.2530\nvn 0.0527 0.9806 -0.1886\nvn 0.0925 0.9801 -0.1753\nvn 0.7882 0.6040 -0.1182\nvn 0.6348 0.7594 -0.1426\nvn 0.9631 0.2611 -0.0652\nvn 0.9962 -0.0659 -0.0559\nvn 0.1527 -0.9882 0.0063\nvn 0.5887 -0.8053 0.0696\nvn 0.0589 -0.9906 -0.1233\nvn 0.6818 -0.7253 -0.0949\nvn 0.4983 0.8596 0.1129\nvn 0.2800 0.9480 -0.1513\nvn 0.2882 0.9495 -0.1241\nvn 0.4470 0.8802 0.1595\nvn 0.5561 0.8005 0.2234\nvn 0.5206 0.8072 0.2781\nvn 0.6355 0.7649 0.1049\nvn 0.5090 0.8591 -0.0537\nvn 0.2755 0.9271 -0.2541\nvn 0.6862 0.4704 0.5548\nvn 0.6871 0.4777 0.5474\nvn 0.7875 0.0644 0.6129\nvn 0.7654 -0.0069 0.6435\nvn 0.8657 0.4189 0.2737\nvn 0.9353 -0.1461 0.3223\nvn 0.9718 -0.1136 0.2065\nvn 0.9252 0.3320 0.1836\nvn 0.8161 0.5161 0.2600\nvn 0.8327 0.5454 0.0952\nvn 0.8574 -0.4185 0.2995\nvn 0.7754 -0.6253 -0.0883\nvn 0.7237 -0.6847 -0.0851\nvn 0.7410 -0.6659 -0.0862\nvn 0.7935 -0.6019 -0.0894\nvn 0.3539 -0.9199 0.1688\nvn 0.1681 -0.9774 0.1283\nvn 0.0423 -0.9892 0.1402\nvn 0.3576 -0.9172 0.1757\nvn 0.8991 -0.3956 0.1870\nvn 0.5445 -0.3854 -0.7449\nvn 0.5235 -0.6388 -0.5637\nvn 0.5681 -0.5976 -0.5658\nvn 0.4556 -0.2399 -0.8572\nvn -0.4025 -0.9130 -0.0655\nvn -0.5581 -0.8101 -0.1793\nvn -0.6391 -0.7689 -0.0203\nvn -0.4930 -0.8682 0.0558\nvn -0.3160 0.3627 -0.8766\nvn 0.1439 0.2342 -0.9615\nvn -0.2760 0.4744 -0.8359\nvn -0.6615 0.5278 -0.5326\nvn -0.6583 0.3252 -0.6789\nvn -0.8170 -0.2313 -0.5281\nvn -0.7965 -0.2425 -0.5539\nvn -0.9330 -0.0909 -0.3480\nvn -0.9286 -0.2951 -0.2250\nvn -0.0146 0.8916 -0.4525\nvn -0.2091 0.7396 -0.6397\nvn 0.0639 0.7555 -0.6520\nvn 0.1253 0.8869 -0.4446\nvn -0.1360 0.8858 -0.4436\nvn -0.3768 0.7016 -0.6048\nvn 0.4719 0.8601 -0.1937\nvn 0.0797 0.9568 -0.2795\nvn 0.8196 0.5685 -0.0707\nvn 0.6657 0.7343 -0.1330\nvn 0.7266 0.6820 -0.0829\nvn 0.6598 0.7426 -0.1146\nvn 0.5727 0.8143 -0.0943\nvn 0.3339 0.9344 -0.1237\nvn -0.1495 0.9779 -0.1460\nvn 0.9415 0.3367 -0.0131\nvn 0.9923 -0.1024 0.0695\nvn 0.9959 -0.0906 0.0025\nvn 0.9413 0.3355 -0.0378\nvn 0.8866 0.4601 -0.0466\nvn 0.9205 -0.3787 0.0959\nvn 0.0802 -0.9836 0.1617\nvn 0.3435 -0.9213 0.1820\nvn 0.1757 -0.9825 0.0607\nvn 0.3620 -0.9290 0.0768\nvn 0.9334 -0.3585 0.0145\nvn -0.4326 -0.8882 0.1543\nvn -0.6308 -0.7625 0.1438\nvn -0.4872 -0.8692 0.0846\nvn -0.2575 -0.9635 0.0726\nvn -0.9864 -0.1436 -0.0795\nvn -0.9423 -0.3347 -0.0090\nvn -0.9352 0.2956 -0.1948\nvn -0.9541 0.1614 -0.2521\nvn -0.9648 0.2557 -0.0623\nvn -0.9789 -0.2040 0.0001\nvn -0.9287 -0.3701 0.0224\nvn -0.6769 0.6231 -0.3917\nvn -0.6901 0.6063 -0.3951\nvn -0.6088 0.7002 -0.3729\nvn -0.1993 0.9363 -0.2892\nvn -0.3508 0.9269 -0.1334\nvn -0.7892 0.5880 -0.1771\nvn -0.8411 0.5299 -0.1088\nvn 0.1526 0.9883 0.0004\nvn 0.4556 0.8900 0.0166\nvn -0.1867 0.9796 0.0736\nvn 0.3221 0.9398 0.1142\nvn -0.5779 0.8130 -0.0713\nvn -0.2673 0.9624 -0.0474\nvn 0.9413 0.3376 0.0019\nvn 0.9975 -0.0690 -0.0128\nvn 0.9316 0.3390 0.1308\nvn 0.9924 -0.0749 0.0979\nvn 0.8748 0.4616 0.1472\nvn 0.8888 0.4582 0.0111\nvn 0.4045 -0.9140 -0.0292\nvn 0.2463 -0.9682 -0.0432\nvn 0.1797 -0.9756 -0.1262\nvn 0.1542 -0.9772 -0.1456\nvn 0.9428 -0.3326 -0.0212\nvn 0.9302 -0.3543 0.0953\nvn -0.1457 -0.9885 -0.0405\nvn -0.3909 -0.9199 -0.0291\nvn -0.1425 -0.9799 -0.1395\nvn -0.5230 -0.8423 -0.1301\nvn -0.9764 -0.2152 -0.0143\nvn -0.9648 0.2615 -0.0280\nvn -0.8913 -0.4511 -0.0460\nvn -0.9255 -0.3781 -0.0219\nvn -0.3779 0.9234 -0.0666\nvn -0.5444 0.8376 -0.0452\nvn -0.8538 0.5189 -0.0414\nvn 0.1113 0.6668 -0.7369\nvn 0.2236 0.7471 -0.6259\nvn 0.0000 0.6400 -0.7684\nvn 0.1631 0.7159 -0.6788\nvn 0.0000 0.7293 -0.6842\nvn 0.0000 0.7113 -0.7028\nvn 0.1130 0.7013 -0.7038\nvn 0.2437 0.7614 -0.6007\nvn 0.2716 0.7499 -0.6032\nvn 0.4964 0.6681 0.5542\nvn 0.5145 0.6564 0.5517\nvn 0.4952 0.6688 0.5544\nvn 0.5683 0.7904 0.2287\nvn 0.5327 0.7885 0.3074\nvn 0.5764 0.7385 0.3497\nvn 0.5600 0.8108 0.1704\nvn 0.4568 0.8139 0.3591\nvn 0.2774 0.8660 0.4159\nvn 0.3204 0.8350 0.4473\nvn 0.5041 0.8590 0.0893\nvn 0.3844 0.9120 -0.1428\nvn 0.4405 0.8835 -0.1591\nvn 0.5515 0.8339 0.0185\nvn 0.2844 0.8709 -0.4009\nvn 0.3564 0.8506 -0.3866\nvn 0.2210 -0.1805 0.9584\nvn 0.2123 -0.3179 0.9240\nvn 0.3686 -0.3075 0.8772\nvn 0.5012 -0.1407 0.8538\nvn 0.2222 0.0197 0.9748\nvn 0.5502 0.0007 0.8350\nvn 0.0000 0.0253 0.9997\nvn 0.0000 -0.1813 0.9834\nvn 0.0000 -0.3179 0.9481\nvn 0.7894 -0.2218 0.5723\nvn 0.7541 -0.2898 0.5893\nvn 0.8831 -0.3121 0.3502\nvn 0.9082 -0.2073 0.3634\nvn 0.8482 -0.0274 0.5289\nvn 0.9260 -0.0334 0.3760\nvn 0.6995 -0.0647 0.7117\nvn 0.6970 -0.0146 0.7169\nvn 0.6739 -0.2875 0.6806\nvn 0.6749 -0.2862 0.6801\nvn 0.9735 -0.2223 0.0530\nvn 0.9412 -0.3335 0.0540\nvn 0.9300 -0.3257 -0.1701\nvn 0.9566 -0.2477 -0.1535\nvn 0.9984 -0.0336 0.0461\nvn 0.9917 -0.0298 -0.1252\nvn 0.8727 -0.1128 -0.4750\nvn 0.8329 -0.2702 -0.4829\nvn 0.6805 -0.2094 -0.7021\nvn 0.6913 -0.0955 -0.7162\nvn 0.8806 0.0061 -0.4737\nvn 0.6626 0.0486 -0.7473\nvn 0.9395 -0.0126 -0.3422\nvn 0.9469 -0.0961 -0.3067\nvn 0.9183 -0.2969 -0.2619\nvn 0.9189 -0.2804 -0.2773\nvn 0.6805 0.6427 -0.3519\nvn 0.5094 0.6990 -0.5019\nvn 0.7512 0.6370 -0.1731\nvn 0.8257 0.5306 -0.1914\nvn 0.7568 0.5147 -0.4028\nvn 0.6930 0.4926 -0.5264\nvn 0.7709 0.6364 0.0261\nvn 0.7277 0.6604 0.1849\nvn 0.8377 0.5240 0.1538\nvn 0.8436 0.5360 0.0305\nvn 0.5453 0.7432 0.3875\nvn 0.3682 0.7560 0.5412\nvn 0.6529 0.4329 0.6215\nvn 0.6783 0.4098 0.6098\nvn 0.6735 0.3189 0.6669\nvn 0.7289 0.3006 0.6150\nvn 0.7720 0.4818 0.4145\nvn 0.7969 0.4571 0.3948\nvn 0.7715 0.4823 0.4149\nvn 0.7486 0.5033 0.4317\nvn 0.1053 0.7922 0.6011\nvn 0.0171 0.8051 0.5928\nvn 0.1787 0.4271 0.8863\nvn 0.0000 0.4262 0.9046\nvn 0.0000 0.3393 0.9407\nvn 0.1974 0.3345 0.9215\nvn 0.3267 0.4205 0.8464\nvn 0.3423 0.3240 0.8819\nvn 0.0672 -0.9848 -0.1602\nvn 0.1816 -0.9765 -0.1157\nvn 0.1381 -0.9787 -0.1517\nvn 0.0248 -0.9894 -0.1430\nvn 0.0000 -0.9874 -0.1583\nvn 0.0000 -0.9875 -0.1571\nvn 0.0000 -0.9359 -0.3522\nvn 0.1515 -0.9322 -0.3286\nvn 0.3303 -0.9192 -0.2141\nvn 0.3768 -0.8700 0.3179\nvn 0.2309 -0.8951 0.3814\nvn 0.1539 -0.9496 0.2728\nvn 0.2771 -0.9304 0.2398\nvn 0.4833 -0.8525 0.1988\nvn 0.3652 -0.9186 0.1507\nvn 0.5752 -0.7853 0.2291\nvn 0.4585 -0.8040 0.3785\nvn 0.2856 -0.8385 0.4641\nvn 0.5227 -0.8515 0.0402\nvn 0.3912 -0.9199 0.0266\nvn 0.4641 -0.8844 -0.0486\nvn 0.2978 -0.9538 -0.0388\nvn 0.5897 -0.8058 -0.0540\nvn 0.6208 -0.7824 0.0485\nvn 0.3197 -0.9451 -0.0669\nvn 0.2695 -0.9453 -0.1838\nvn 0.4808 -0.8698 -0.1109\nvn 0.0779 0.6023 0.7944\nvn 0.1193 0.6119 0.7819\nvn 0.1925 0.6434 0.7409\nvn 0.4815 0.2384 0.8433\nvn 0.0816 -0.5811 0.8097\nvn 0.1176 -0.5806 0.8056\nvn 0.2305 -0.4932 0.8388\nvn 0.2484 -0.4607 0.8520\nvn 0.0000 -0.6177 0.7864\nvn 0.0000 -0.6213 0.7835\nvn 0.0000 0.5733 0.8193\nvn 0.0000 0.5728 0.8197\nvn 0.8109 0.1684 0.5604\nvn 0.6131 0.7303 0.3011\nvn 0.6838 0.6893 0.2393\nvn 0.7999 0.4730 0.3694\nvn 0.7075 -0.1982 0.6783\nvn 0.8071 -0.2465 0.5365\nvn 0.6299 -0.2149 0.7463\nvn 0.4657 0.7048 0.5351\nvn 0.4637 0.7286 0.5040\nvn 0.7022 0.6993 -0.1335\nvn 0.7108 0.6912 -0.1296\nvn 0.6357 0.7209 -0.2759\nvn 0.6455 0.7115 -0.2775\nvn 0.9813 -0.1907 0.0249\nvn 0.9861 -0.1629 -0.0310\nvn 0.9084 -0.2425 -0.3406\nvn 0.9028 -0.2839 -0.3229\nvn 0.9718 -0.1504 0.1816\nvn 0.9754 -0.1318 0.1765\nvn 0.7244 0.6771 0.1296\nvn 0.7243 0.6771 0.1295\nvn 0.6254 0.5462 -0.5573\nvn 0.6084 0.6016 -0.5175\nvn 0.6503 0.3742 -0.6610\nvn 0.6855 0.3173 -0.6553\nvn 0.5419 -0.6537 -0.5282\nvn 0.3439 -0.8552 -0.3877\nvn 0.7505 -0.5597 -0.3513\nvn 0.7308 -0.5991 -0.3270\nvn 0.2140 0.1683 0.9622\nvn 0.4898 0.1177 0.8638\nvn 0.0000 0.1769 0.9842\nvn 0.7967 0.1546 0.5842\nvn 0.9200 0.1436 0.3645\nvn 0.9017 0.2592 0.3460\nvn 0.6817 0.2077 0.7016\nvn 0.6944 0.0375 0.7186\nvn 0.9886 0.1188 0.0924\nvn 0.9913 0.0433 -0.1240\nvn 0.9554 0.2712 -0.1169\nvn 0.9536 0.2754 -0.1212\nvn 0.9415 0.1945 -0.2752\nvn 0.9381 0.2619 -0.2264\nvn 0.9442 0.2731 0.1841\nvn 0.8660 0.1477 -0.4777\nvn 0.6410 0.1560 -0.7514\nvn 0.8523 0.2411 -0.4642\nvn 0.6214 0.2340 -0.7477\nvn -0.6665 -0.5256 -0.5287\nvn -0.7728 -0.4570 -0.4403\nvn -0.8894 0.0971 -0.4466\nvn -0.7571 -0.1867 -0.6260\nvn -0.7331 -0.0537 -0.6780\nvn -0.8772 0.0291 -0.4793\nvn -0.9172 0.1835 -0.3536\nvn -0.8780 -0.2391 -0.4145\nvn -0.7894 -0.4642 -0.4016\nvn -0.7980 -0.4596 -0.3898\nvn -0.0710 0.9973 0.0155\nvn -0.7338 0.5602 -0.3843\nvn 0.2816 0.9450 0.1665\nvn 0.3099 0.9473 0.0807\nvn 0.3162 0.9456 0.0755\nvn -0.8058 0.5483 -0.2235\nvn -0.8109 0.5317 -0.2444\nvn 0.9048 0.3283 0.2712\nvn 0.8493 0.4523 0.2720\nvn 0.9630 -0.0926 0.2529\nvn 0.9978 -0.0642 0.0166\nvn 0.9421 0.3330 0.0395\nvn 0.8856 0.4628 0.0385\nvn 0.8997 -0.3755 0.2225\nvn -0.1082 -0.9789 -0.1732\nvn -0.1817 -0.9695 -0.1642\nvn -0.2136 -0.9740 -0.0754\nvn -0.2198 -0.9719 -0.0839\nvn 0.9379 -0.3467 -0.0072\nvn -0.8885 -0.3639 0.2793\nvn -0.8402 -0.4902 0.2317\nvn -0.8425 -0.4789 0.2467\nvn -0.8855 -0.3800 0.2674\nvn -0.9318 -0.2598 0.2534\nvn -0.9243 -0.2604 0.2790\nvn -0.9373 -0.2436 0.2493\nvn -0.8968 -0.3240 0.3011\nvn -0.8269 -0.5493 0.1207\nvn -0.8417 0.5098 0.1779\nvn -0.8811 0.4623 0.0994\nvn -0.8281 0.4922 0.2683\nvn -0.8343 0.4848 0.2623\nvn 0.3057 0.8959 -0.3223\nvn 0.3268 0.8550 -0.4026\nvn 0.3142 0.7158 -0.6236\nvn 0.3740 0.7189 -0.5858\nvn -0.9186 0.3932 -0.0381\nvn -0.9634 0.2550 -0.0822\nvn 0.8430 0.2987 -0.4474\nvn 0.7846 0.4283 -0.4482\nvn 0.8687 -0.0652 -0.4909\nvn 0.6991 0.0175 -0.7147\nvn 0.7070 0.2628 -0.6565\nvn 0.6063 0.3932 -0.6912\nvn 0.8163 -0.2941 -0.4971\nvn -0.2134 -0.9136 -0.3460\nvn -0.2515 -0.9615 -0.1103\nvn -0.3605 -0.8840 -0.2975\nvn -0.4280 -0.8865 -0.1758\nvn 0.6542 -0.1878 -0.7326\nvn 0.0850 0.5786 0.8111\nvn 0.0000 0.5629 0.8265\nvn 0.1833 0.5973 0.7808\nvn 0.0791 0.8681 0.4900\nvn 0.0624 0.8687 0.4913\nvn 0.0000 0.8630 0.5051\nvn 0.0000 0.8627 0.5057\nvn 0.1851 -0.0326 -0.9822\nvn 0.0000 -0.0346 -0.9994\nvn 0.0000 0.1129 -0.9936\nvn 0.1699 0.1035 -0.9800\nvn 0.5365 -0.0637 -0.8415\nvn 0.5114 0.0766 -0.8559\nvn 0.5410 -0.1675 -0.8242\nvn 0.1841 -0.1506 -0.9713\nvn 0.0000 -0.1563 -0.9877\nvn 0.1429 0.8213 -0.5522\nvn 0.0000 0.8308 -0.5565\nvn 0.2275 0.4657 -0.8552\nvn 0.3783 0.4584 -0.8042\nvn 0.3880 0.4695 -0.7931\nvn 0.2121 0.4046 -0.8895\nvn 0.0000 0.4692 -0.8831\nvn 0.0000 0.3787 -0.9255\nvn 0.0755 -0.9103 0.4069\nvn 0.0000 -0.9165 0.4000\nvn 0.0000 -0.9626 0.2710\nvn 0.0376 -0.9602 0.2767\nvn 0.1062 -0.8553 0.5071\nvn 0.0000 -0.8567 0.5157\nvn 0.0662 -0.9196 -0.3872\nvn 0.0000 -0.9256 -0.3784\nvn 0.1280 -0.0534 -0.9903\nvn 0.3620 0.1525 -0.9196\nvn 0.3346 0.0858 -0.9384\nvn 0.1703 -0.0644 -0.9833\nvn 0.0000 -0.1155 -0.9933\nvn 0.0000 -0.1178 -0.9930\nvn 0.1458 0.1983 -0.9692\nvn 0.0000 0.2119 -0.9773\nvn 0.4773 0.1743 -0.8613\nvn 0.4489 0.2429 -0.8599\nvn -0.1132 -0.9866 0.1175\nvn -0.2079 -0.9755 0.0722\nvn 0.0134 -0.9994 0.0330\nvn 0.0564 -0.9984 -0.0019\nvn -0.0636 -0.9699 0.2348\nvn -0.2700 -0.9534 0.1345\nvn -0.2186 -0.8535 0.4731\nvn -0.3503 -0.9271 0.1334\nvn -0.2717 -0.9370 0.2193\nvn -0.4241 -0.9008 0.0934\nvn -0.1427 0.9897 0.0089\nvn -0.2531 0.9608 -0.1133\nvn -0.3673 0.9283 -0.0581\nvn -0.3159 0.9480 -0.0375\nvn -0.1012 0.9765 0.1900\nvn -0.4905 0.8599 0.1411\nvn -0.2163 0.9567 0.1945\nvn -0.1671 0.9728 0.1605\nvn -0.0854 0.9469 -0.3100\nvn -0.2770 0.9160 -0.2902\nvn -0.0537 0.6110 -0.7898\nvn 0.0890 0.9121 -0.4002\nvn -0.3176 0.6075 -0.7280\nvn -0.1464 0.9209 -0.3611\nvn -0.3258 0.3085 -0.8937\nvn -0.0908 0.2991 -0.9499\nvn -0.1109 -0.3381 0.9345\nvn -0.3635 -0.3091 0.8788\nvn -0.4413 -0.2351 0.8660\nvn -0.1052 -0.2932 0.9502\nvn -0.1100 -0.3660 0.9241\nvn -0.2134 -0.3706 0.9039\nvn -0.9997 -0.0249 -0.0005\nvn -0.8987 0.2215 -0.3784\nvn -0.9255 0.3213 -0.2001\nvn -0.9954 0.0811 0.0513\nvn -0.9245 -0.1561 0.3478\nvn -0.9334 -0.0219 0.3581\nvn -0.9232 -0.2261 0.3106\nvn -0.9951 -0.0963 -0.0220\nvn -0.9065 0.0862 -0.4132\nvn -0.0120 0.4200 -0.9074\nvn -0.0262 0.2498 -0.9679\nvn 0.0364 0.4094 -0.9116\nvn -0.0922 0.2151 -0.9722\nvn -0.0465 0.5590 -0.8278\nvn -0.0782 0.5549 -0.8282\nvn -0.0830 0.1556 -0.9843\nvn -0.1935 0.1123 -0.9746\nvn 0.2081 0.4593 -0.8636\nvn -0.1069 0.4811 -0.8701\nvn -0.0102 0.7936 -0.6083\nvn 0.2861 0.7540 -0.5913\nvn 0.5688 0.4262 -0.7034\nvn 0.6019 0.6719 -0.4315\nvn 0.2528 -0.5493 -0.7964\nvn 0.6791 -0.5318 -0.5059\nvn 0.7358 -0.5018 -0.4547\nvn 0.2669 -0.5388 -0.7990\nvn -0.0645 -0.5477 -0.8341\nvn -0.1009 -0.5708 -0.8148\nvn -0.0889 -0.0020 0.9960\nvn -0.3765 0.0963 0.9214\nvn -0.3978 -0.1569 0.9039\nvn -0.0953 -0.1983 0.9755\nvn -0.0945 0.3530 0.9308\nvn -0.2927 0.3136 0.9033\nvn -0.1036 -0.3337 0.9369\nvn -0.3471 -0.3282 0.8785\nvn -0.0848 -0.4598 0.8840\nvn -0.3726 -0.3317 0.8667\nvn -0.1410 -0.6106 0.7793\nvn -0.0646 -0.6467 0.7600\nvn 0.4856 -0.1780 -0.8558\nvn 0.4531 -0.2294 -0.8614\nvn 0.5008 -0.4018 -0.7666\nvn 0.5354 -0.4020 -0.7427\nvn -0.3088 0.1485 -0.9394\nvn -0.3106 0.1415 -0.9399\nvn -0.4265 0.0029 -0.9044\nvn -0.4890 0.0034 -0.8722\nvn -0.3048 0.2659 -0.9145\nvn -0.3344 0.2558 -0.9070\nvn 0.6938 -0.0048 -0.7201\nvn 0.7745 -0.0053 -0.6326\nvn -0.9848 -0.1729 -0.0120\nvn -0.9113 -0.0171 -0.4114\nvn -0.9561 -0.2212 0.1922\nvn -0.8803 -0.3747 0.2907\nvn -0.9239 -0.3299 0.1936\nvn -0.9130 -0.0985 -0.3958\nvn -0.9922 -0.0330 0.1199\nvn -0.9560 -0.0270 0.2921\nvn -0.9910 0.1331 -0.0105\nvn -0.9967 -0.0482 0.0652\nvn -0.9576 -0.2352 0.1662\nvn -0.9803 -0.1665 0.1060\nvn 0.9174 0.2038 -0.3417\nvn 0.9624 0.1336 -0.2365\nvn 0.9661 0.2349 -0.1066\nvn 0.9600 0.1219 -0.2520\nvn 0.5109 -0.6913 -0.5109\nvn 0.3342 -0.6444 -0.6878\nvn 0.6787 -0.6292 -0.3787\nvn 0.7013 -0.6501 -0.2925\nvn 0.3923 -0.6230 -0.6767\nvn 0.4317 -0.4236 -0.7963\nvn 0.5643 0.3627 -0.7416\nvn 0.2988 0.6268 -0.7196\nvn 0.4255 0.5173 -0.7425\nvn 0.6478 0.2439 -0.7217\nvn -0.6659 -0.4305 0.6093\nvn -0.7035 -0.3830 0.5987\nvn -0.5656 -0.4682 0.6789\nvn -0.5659 -0.4687 0.6783\nvn -0.6415 -0.1615 0.7499\nvn -0.6317 -0.1108 0.7673\nvn -0.8592 0.0013 0.5116\nvn -0.8625 -0.0823 0.4993\nvn -0.7826 -0.3257 0.5305\nvn -0.7382 -0.2746 0.6161\nvn -0.5900 0.0214 -0.8071\nvn -0.5900 -0.2164 -0.7779\nvn -0.5380 -0.0999 -0.8369\nvn -0.5995 0.0308 -0.7997\nvn -0.7406 0.1614 -0.6522\nvn -0.7629 0.0797 -0.6416\nvn -0.5912 0.1518 -0.7921\nvn -0.5784 0.1390 -0.8039\nvn -0.8215 -0.0441 -0.5685\nvn -0.5108 0.4912 -0.7056\nvn -0.5567 0.3286 -0.7629\nvn -0.4581 0.8358 -0.3024\nvn -0.7825 0.3819 -0.4917\nvn -0.8080 0.4619 -0.3656\nvn -0.0859 0.4361 -0.8958\nvn 0.0520 0.6693 -0.7411\nvn -0.3013 -0.5712 -0.7635\nvn -0.1067 -0.6999 -0.7063\nvn -0.2162 -0.6330 -0.7433\nvn -0.4006 -0.4867 -0.7762\nvn -0.8950 0.2044 -0.3965\nvn -0.9437 -0.1643 -0.2869\nvn -0.9749 -0.1556 -0.1594\nvn -0.9473 0.1223 -0.2960\nvn -0.8062 0.5292 -0.2646\nvn -0.8090 0.5664 -0.1572\nvn -0.6497 -0.2271 0.7255\nvn -0.7120 -0.3449 0.6116\nvn -0.6432 -0.3122 0.6991\nvn -0.6440 -0.3130 0.6980\nvn -0.6300 -0.3512 0.6926\nvn -0.8509 -0.2053 0.4834\nvn -0.8416 -0.2516 0.4779\nvn -0.7477 -0.3305 0.5759\nvn -0.6043 -0.3681 0.7066\nvn -0.5955 -0.1540 0.7884\nvn -0.6183 -0.2925 0.7295\nvn -0.7715 -0.0399 0.6350\nvn -0.8043 -0.0450 0.5924\nvn -0.8213 -0.3233 0.4700\nvn -0.8210 -0.3305 0.4655\nvn -0.5584 0.1249 0.8201\nvn -0.5498 0.2936 0.7820\nvn -0.6863 0.4354 0.5826\nvn -0.6067 0.5576 0.5665\nvn -0.6917 0.4434 0.5699\nvn -0.6778 0.4571 0.5759\nvn -0.7301 0.1099 0.6744\nvn -0.7618 0.0843 0.6423\nvn 0.1746 -0.9827 -0.0615\nvn -0.0253 -0.9980 -0.0576\nvn 0.1766 -0.9746 -0.1374\nvn -0.0351 -0.9910 -0.1291\nvn 0.4038 -0.9011 -0.1577\nvn 0.2798 -0.9561 -0.0868\nvn 0.9479 -0.2629 -0.1800\nvn 0.9916 -0.0797 -0.1014\nvn 0.9681 -0.1936 -0.1590\nvn 0.9251 -0.3185 -0.2068\nvn 0.9515 0.2510 -0.1776\nvn 0.9267 0.3113 -0.2104\nvn 0.9310 0.2882 -0.2238\nvn 0.9572 0.2052 -0.2039\nvn 0.9707 0.1592 -0.1800\nvn 0.9701 0.1174 -0.2125\nvn 0.1817 0.9584 -0.2202\nvn 0.4091 0.8767 -0.2530\nvn -0.0527 0.9806 -0.1886\nvn -0.2489 0.9539 -0.1676\nvn -0.6439 0.7497 -0.1526\nvn -0.8494 0.5158 -0.1116\nvn -0.6215 0.7729 -0.1278\nvn -0.6235 0.7714 -0.1268\nvn -0.9631 0.2611 -0.0652\nvn -0.9962 -0.0659 -0.0559\nvn -0.1527 -0.9882 0.0063\nvn -0.5887 -0.8053 0.0696\nvn -0.6818 -0.7253 -0.0949\nvn -0.0589 -0.9906 -0.1233\nvn -0.4983 0.8596 0.1129\nvn -0.4470 0.8802 0.1595\nvn -0.2882 0.9495 -0.1241\nvn -0.2800 0.9480 -0.1513\nvn -0.5090 0.8591 -0.0537\nvn -0.2755 0.9271 -0.2541\nvn -0.6355 0.7649 0.1049\nvn -0.5561 0.8005 0.2234\nvn -0.5206 0.8072 0.2781\nvn -0.6862 0.4704 0.5548\nvn -0.6871 0.4777 0.5474\nvn -0.9252 0.3320 0.1836\nvn -0.8657 0.4189 0.2737\nvn -0.8161 0.5161 0.2600\nvn -0.8327 0.5454 0.0952\nvn -0.9718 -0.1136 0.2065\nvn -0.9353 -0.1461 0.3223\nvn -0.7654 -0.0069 0.6435\nvn -0.7875 0.0644 0.6129\nvn -0.8574 -0.4185 0.2995\nvn -0.8991 -0.3956 0.1870\nvn -0.3538 -0.9199 0.1688\nvn -0.3576 -0.9172 0.1757\nvn -0.0423 -0.9892 0.1402\nvn -0.1681 -0.9774 0.1283\nvn -0.7410 -0.6659 -0.0862\nvn -0.7237 -0.6847 -0.0851\nvn -0.7754 -0.6253 -0.0883\nvn -0.7936 -0.6019 -0.0894\nvn -0.5446 -0.3854 -0.7449\nvn -0.5681 -0.5976 -0.5658\nvn -0.5235 -0.6388 -0.5637\nvn 0.4930 -0.8682 0.0558\nvn 0.4025 -0.9130 -0.0655\nvn 0.6391 -0.7689 -0.0203\nvn 0.5581 -0.8101 -0.1793\nvn -0.4556 -0.2399 -0.8572\nvn 0.0571 0.3506 -0.9348\nvn -0.1439 0.2342 -0.9615\nvn 0.9330 -0.0909 -0.3480\nvn 0.7965 -0.2425 -0.5539\nvn 0.8170 -0.2313 -0.5281\nvn 0.9286 -0.2951 -0.2250\nvn 0.6642 0.3318 -0.6699\nvn 0.6583 0.3252 -0.6789\nvn 0.6615 0.5278 -0.5326\nvn 0.6720 0.3407 -0.6575\nvn 0.1073 0.5002 -0.8592\nvn 0.0146 0.8916 -0.4525\nvn -0.1253 0.8869 -0.4446\nvn -0.0639 0.7555 -0.6520\nvn 0.2091 0.7396 -0.6397\nvn 0.1360 0.8858 -0.4436\nvn 0.3768 0.7016 -0.6048\nvn -0.4719 0.8601 -0.1937\nvn -0.0797 0.9568 -0.2795\nvn -0.3339 0.9344 -0.1237\nvn 0.1495 0.9779 -0.1460\nvn -0.5726 0.8143 -0.0943\nvn -0.6598 0.7426 -0.1146\nvn -0.7266 0.6820 -0.0829\nvn -0.6657 0.7343 -0.1330\nvn -0.8196 0.5685 -0.0707\nvn -0.9415 0.3367 -0.0131\nvn -0.9413 0.3355 -0.0378\nvn -0.8866 0.4601 -0.0466\nvn -0.9959 -0.0906 0.0025\nvn -0.9923 -0.1024 0.0695\nvn -0.9205 -0.3787 0.0959\nvn -0.9334 -0.3586 0.0145\nvn -0.3435 -0.9213 0.1820\nvn -0.3620 -0.9290 0.0768\nvn -0.1757 -0.9825 0.0607\nvn -0.0802 -0.9836 0.1617\nvn 0.4326 -0.8882 0.1543\nvn 0.2575 -0.9635 0.0726\nvn 0.4872 -0.8692 0.0846\nvn 0.6308 -0.7625 0.1438\nvn 0.9864 -0.1436 -0.0795\nvn 0.9423 -0.3347 -0.0090\nvn 0.9789 -0.2040 0.0001\nvn 0.9287 -0.3701 0.0224\nvn 0.9648 0.2557 -0.0623\nvn 0.9352 0.2956 -0.1948\nvn 0.9541 0.1614 -0.2521\nvn 0.6769 0.6231 -0.3917\nvn 0.6088 0.7002 -0.3729\nvn 0.6901 0.6063 -0.3951\nvn 0.8411 0.5299 -0.1088\nvn 0.7892 0.5880 -0.1771\nvn 0.1993 0.9363 -0.2892\nvn 0.3508 0.9269 -0.1334\nvn -0.1526 0.9883 0.0004\nvn -0.4556 0.8900 0.0166\nvn 0.2673 0.9624 -0.0474\nvn 0.5779 0.8130 -0.0713\nvn 0.1867 0.9796 0.0736\nvn -0.3221 0.9398 0.1142\nvn -0.9413 0.3376 0.0019\nvn -0.9975 -0.0690 -0.0128\nvn -0.8888 0.4582 0.0111\nvn -0.8748 0.4616 0.1472\nvn -0.9316 0.3390 0.1308\nvn -0.9924 -0.0749 0.0979\nvn -0.4045 -0.9140 -0.0292\nvn -0.2463 -0.9682 -0.0432\nvn -0.9428 -0.3326 -0.0212\nvn -0.9302 -0.3543 0.0953\nvn -0.1797 -0.9756 -0.1262\nvn -0.1542 -0.9772 -0.1456\nvn 0.1457 -0.9885 -0.0405\nvn 0.3909 -0.9199 -0.0291\nvn 0.1425 -0.9799 -0.1395\nvn 0.5230 -0.8423 -0.1301\nvn 0.9764 -0.2152 -0.0143\nvn 0.9648 0.2615 -0.0280\nvn 0.9255 -0.3781 -0.0219\nvn 0.8913 -0.4511 -0.0460\nvn 0.3779 0.9234 -0.0666\nvn 0.8538 0.5189 -0.0414\nvn 0.5444 0.8376 -0.0452\nvn -0.1113 0.6668 -0.7369\nvn -0.2236 0.7471 -0.6259\nvn -0.1130 0.7013 -0.7038\nvn -0.1631 0.7159 -0.6788\nvn -0.2437 0.7614 -0.6007\nvn -0.2716 0.7499 -0.6032\nvn -0.4964 0.6681 0.5542\nvn -0.4952 0.6688 0.5544\nvn -0.5145 0.6564 0.5517\nvn -0.4568 0.8139 0.3591\nvn -0.5327 0.7885 0.3074\nvn -0.2774 0.8660 0.4159\nvn -0.3204 0.8350 0.4473\nvn -0.5600 0.8108 0.1704\nvn -0.5683 0.7904 0.2287\nvn -0.5764 0.7385 0.3497\nvn -0.5041 0.8590 0.0893\nvn -0.5515 0.8339 0.0185\nvn -0.4405 0.8835 -0.1591\nvn -0.3844 0.9120 -0.1428\nvn -0.2844 0.8709 -0.4009\nvn -0.3564 0.8506 -0.3866\nvn -0.2210 -0.1805 0.9584\nvn -0.5012 -0.1407 0.8538\nvn -0.3686 -0.3075 0.8772\nvn -0.2123 -0.3179 0.9240\nvn -0.2222 0.0197 0.9748\nvn -0.5502 0.0007 0.8350\nvn -0.7894 -0.2218 0.5723\nvn -0.9082 -0.2073 0.3634\nvn -0.8831 -0.3121 0.3502\nvn -0.7541 -0.2898 0.5893\nvn -0.6739 -0.2875 0.6806\nvn -0.6749 -0.2862 0.6801\nvn -0.6995 -0.0647 0.7117\nvn -0.6970 -0.0146 0.7169\nvn -0.8482 -0.0274 0.5289\nvn -0.9260 -0.0334 0.3760\nvn -0.9735 -0.2223 0.0530\nvn -0.9566 -0.2477 -0.1535\nvn -0.9300 -0.3257 -0.1701\nvn -0.9412 -0.3335 0.0540\nvn -0.9984 -0.0336 0.0461\nvn -0.9917 -0.0298 -0.1252\nvn -0.8727 -0.1128 -0.4750\nvn -0.7435 -0.1459 -0.6526\nvn -0.6805 -0.2094 -0.7021\nvn -0.8329 -0.2702 -0.4829\nvn -0.9189 -0.2804 -0.2773\nvn -0.9183 -0.2969 -0.2619\nvn -0.9469 -0.0961 -0.3067\nvn -0.9395 -0.0126 -0.3422\nvn -0.8806 0.0061 -0.4737\nvn -0.7992 0.0309 -0.6002\nvn -0.6669 0.6845 -0.2944\nvn -0.5915 0.7567 -0.2783\nvn -0.3587 0.7886 -0.4994\nvn -0.3805 0.7909 -0.4792\nvn -0.8113 0.3267 -0.4848\nvn -0.6994 0.5141 -0.4965\nvn -0.6965 0.5040 -0.5108\nvn -0.7432 0.3608 -0.5633\nvn -0.8040 0.5192 -0.2897\nvn -0.8257 0.5306 -0.1914\nvn -0.7512 0.6370 -0.1731\nvn -0.6562 0.7361 -0.1657\nvn -0.7709 0.6364 0.0261\nvn -0.6740 0.7384 0.0202\nvn -0.8436 0.5360 0.0305\nvn -0.8377 0.5240 0.1538\nvn -0.7277 0.6604 0.1848\nvn -0.6615 0.7253 0.1903\nvn -0.6156 0.7240 0.3110\nvn -0.6104 0.7275 0.3132\nvn -0.7715 0.4823 0.4149\nvn -0.6561 0.6212 0.4285\nvn -0.7720 0.4818 0.4145\nvn -0.7486 0.5033 0.4317\nvn -0.6529 0.4329 0.6215\nvn -0.7289 0.3006 0.6150\nvn -0.6735 0.3189 0.6669\nvn -0.6783 0.4098 0.6098\nvn -0.5313 0.7288 0.4319\nvn -0.3682 0.7560 0.5412\nvn -0.4033 0.7547 0.5174\nvn -0.2076 0.7703 0.6029\nvn -0.1522 0.7949 0.5874\nvn -0.1974 0.3345 0.9215\nvn -0.1787 0.4271 0.8863\nvn -0.3267 0.4205 0.8464\nvn -0.3423 0.3240 0.8819\nvn -0.0131 0.8066 0.5910\nvn -0.0213 0.8036 0.5947\nvn -0.0171 0.8051 0.5928\nvn -0.0090 0.8080 0.5891\nvn -0.0672 -0.9848 -0.1602\nvn -0.0248 -0.9894 -0.1430\nvn -0.1381 -0.9787 -0.1517\nvn -0.1816 -0.9765 -0.1157\nvn -0.1515 -0.9322 -0.3286\nvn -0.3303 -0.9192 -0.2141\nvn -0.3768 -0.8700 0.3179\nvn -0.2771 -0.9304 0.2398\nvn -0.1539 -0.9496 0.2728\nvn -0.2309 -0.8951 0.3814\nvn -0.4585 -0.8040 0.3785\nvn -0.2856 -0.8385 0.4641\nvn -0.5752 -0.7853 0.2291\nvn -0.4833 -0.8525 0.1988\nvn -0.3652 -0.9186 0.1507\nvn -0.5227 -0.8515 0.0402\nvn -0.3912 -0.9199 0.0266\nvn -0.6208 -0.7824 0.0485\nvn -0.5897 -0.8058 -0.0540\nvn -0.4641 -0.8844 -0.0486\nvn -0.2978 -0.9538 -0.0388\nvn -0.3197 -0.9451 -0.0669\nvn -0.2695 -0.9453 -0.1838\nvn -0.4808 -0.8698 -0.1109\nvn -0.1902 0.6373 0.7468\nvn -0.4815 0.2385 0.8433\nvn -0.1925 0.6434 0.7409\nvn -0.1875 0.6301 0.7535\nvn -0.0054 0.5748 0.8182\nvn -0.0050 0.5741 0.8188\nvn -0.1176 -0.5806 0.8056\nvn -0.0816 -0.5811 0.8097\nvn -0.2305 -0.4932 0.8388\nvn -0.2484 -0.4607 0.8520\nvn -0.8109 0.1684 0.5604\nvn -0.7999 0.4730 0.3694\nvn -0.6838 0.6894 0.2392\nvn -0.6131 0.7303 0.3011\nvn -0.4637 0.7286 0.5040\nvn -0.4657 0.7048 0.5351\nvn -0.6299 -0.2149 0.7463\nvn -0.7075 -0.1981 0.6783\nvn -0.8071 -0.2465 0.5365\nvn -0.7022 0.6993 -0.1335\nvn -0.6799 0.7192 -0.1431\nvn -0.6902 0.7101 -0.1387\nvn -0.7108 0.6913 -0.1297\nvn -0.7243 0.6771 0.1295\nvn -0.7244 0.6771 0.1296\nvn -0.9861 -0.1629 -0.0310\nvn -0.9754 -0.1318 0.1765\nvn -0.9718 -0.1505 0.1816\nvn -0.9813 -0.1908 0.0249\nvn -0.9084 -0.2425 -0.3406\nvn -0.9028 -0.2839 -0.3229\nvn -0.6254 0.5462 -0.5573\nvn -0.6855 0.3173 -0.6553\nvn -0.6503 0.3742 -0.6610\nvn -0.6084 0.6016 -0.5175\nvn -0.5979 0.6897 -0.4084\nvn -0.5663 0.7157 -0.4087\nvn -0.7505 -0.5596 -0.3513\nvn -0.7308 -0.5991 -0.3271\nvn -0.3439 -0.8552 -0.3877\nvn -0.5419 -0.6537 -0.5282\nvn -0.2140 0.1683 0.9622\nvn -0.4898 0.1177 0.8638\nvn -0.7967 0.1546 0.5842\nvn -0.9200 0.1436 0.3645\nvn -0.6944 0.0374 0.7186\nvn -0.6817 0.2077 0.7016\nvn -0.9017 0.2592 0.3460\nvn -0.9886 0.1188 0.0924\nvn -0.9913 0.0434 -0.1240\nvn -0.9442 0.2731 0.1841\nvn -0.9415 0.1945 -0.2752\nvn -0.9536 0.2754 -0.1212\nvn -0.9554 0.2712 -0.1169\nvn -0.9381 0.2619 -0.2264\nvn -0.8660 0.1477 -0.4777\nvn -0.7852 0.1442 -0.6022\nvn 0.7218 -0.3700 -0.5849\nvn 0.7728 -0.4570 -0.4403\nvn 0.8878 -0.4214 -0.1851\nvn 0.8643 -0.4946 -0.0906\nvn 0.8855 -0.2334 -0.4017\nvn 0.8529 -0.1199 -0.5081\nvn 0.8772 0.0291 -0.4793\nvn 0.0710 0.9973 0.0156\nvn 0.7338 0.5602 -0.3843\nvn 0.8109 0.5317 -0.2444\nvn 0.8058 0.5483 -0.2235\nvn 0.8095 0.5365 -0.2385\nvn 0.8147 0.5171 -0.2622\nvn -0.3163 0.9456 0.0755\nvn -0.3099 0.9473 0.0807\nvn -0.2816 0.9450 0.1665\nvn -0.9048 0.3283 0.2712\nvn -0.8493 0.4523 0.2720\nvn -0.9421 0.3330 0.0395\nvn -0.8856 0.4628 0.0385\nvn -0.9978 -0.0642 0.0166\nvn -0.9630 -0.0926 0.2529\nvn -0.8997 -0.3755 0.2225\nvn -0.9379 -0.3467 -0.0072\nvn 0.1817 -0.9695 -0.1642\nvn 0.2198 -0.9719 -0.0839\nvn 0.2136 -0.9740 -0.0754\nvn 0.1082 -0.9789 -0.1732\nvn 0.8388 -0.4772 0.2621\nvn 0.8402 -0.4902 0.2317\nvn 0.8359 -0.4933 0.2408\nvn 0.8269 -0.5492 0.1207\nvn 0.9260 -0.2383 0.2927\nvn 0.9206 -0.1964 0.3375\nvn 0.9902 -0.0556 0.1282\nvn 0.9697 0.1686 0.1767\nvn 0.9237 -0.2575 0.2835\nvn 0.9457 0.1351 0.2957\nvn 0.8417 0.5098 0.1779\nvn 0.8343 0.4848 0.2623\nvn 0.9186 0.3932 -0.0381\nvn -0.3268 0.8550 -0.4026\nvn -0.3741 0.7189 -0.5858\nvn -0.3142 0.7158 -0.6236\nvn -0.3057 0.8959 -0.3223\nvn -0.8430 0.2987 -0.4474\nvn -0.7846 0.4283 -0.4482\nvn -0.7070 0.2628 -0.6565\nvn -0.6063 0.3932 -0.6912\nvn -0.6991 0.0175 -0.7147\nvn -0.8687 -0.0652 -0.4909\nvn -0.8163 -0.2941 -0.4971\nvn -0.6542 -0.1878 -0.7326\nvn 0.2515 -0.9615 -0.1103\nvn 0.4280 -0.8865 -0.1758\nvn 0.3605 -0.8840 -0.2975\nvn 0.2134 -0.9136 -0.3460\nvn -0.0850 0.5786 0.8111\nvn -0.0624 0.8687 0.4913\nvn -0.0791 0.8681 0.4900\nvn -0.1833 0.5973 0.7808\nvn -0.3030 -0.0031 -0.9529\nvn -0.3461 0.0916 -0.9337\nvn -0.1841 -0.1506 -0.9713\nvn -0.5354 -0.1746 -0.8263\nvn -0.5410 -0.1675 -0.8242\nvn -0.5188 0.0447 -0.8537\nvn -0.4982 0.0644 -0.8646\nvn -0.0432 0.8262 -0.5617\nvn -0.2765 0.3651 -0.8889\nvn -0.2275 0.4657 -0.8552\nvn -0.4177 0.3409 -0.8422\nvn -0.3783 0.4584 -0.8042\nvn -0.2187 0.7921 -0.5698\nvn -0.2565 0.8054 -0.5343\nvn -0.0755 -0.9103 0.4069\nvn -0.0376 -0.9602 0.2767\nvn -0.1062 -0.8553 0.5071\nvn -0.0662 -0.9196 -0.3872\nvn -0.1703 -0.0644 -0.9833\nvn -0.1280 -0.0534 -0.9903\nvn -0.3345 0.0858 -0.9384\nvn -0.3620 0.1525 -0.9196\nvn -0.3179 0.1891 -0.9290\nvn -0.4640 0.1611 -0.8711\nvn 0.0000 0.9962 0.0872\nvn 0.0000 -0.9397 0.3420\nvn 0.0000 -0.7373 0.6756\nvn -0.1807 -0.7251 0.6644\nvn -0.3177 -0.9284 0.1927\nvn 0.0000 0.2968 0.9549\nvn -0.0183 0.3002 0.9537\nvn -0.1464 -0.0162 0.9891\nvn 0.0000 0.6756 0.7373\nvn 0.1464 0.6482 0.7472\nvn 0.0000 0.9990 0.0436\nvn 0.0655 0.9755 -0.2098\nvn 0.3177 0.9284 -0.1927\nvn 0.3535 0.9330 0.0677\nvn 0.1807 0.7251 -0.6644\nvn 0.0000 0.0436 -0.9990\nvn 0.0317 -0.2525 -0.9670\nvn 0.0064 -0.2478 -0.9688\nvn 0.1464 0.0162 -0.9891\nvn -0.0759 -0.6736 -0.7351\nvn 0.0000 -0.9990 -0.0436\nvn -0.3535 -0.9330 -0.0677\nvn -0.5147 -0.5951 0.6171\nvn -0.6533 -0.4830 0.5830\nvn -0.0338 0.3099 0.9502\nvn -0.2706 0.0617 0.9607\nvn 0.2706 0.5702 0.7756\nvn 0.6533 0.7447 0.1361\nvn 0.5147 0.5951 -0.6171\nvn 0.6533 0.4830 -0.5830\nvn -0.0337 -0.3733 -0.9271\nvn 0.2706 -0.0617 -0.9607\nvn -0.2161 -0.6190 -0.7550\nvn -0.2706 -0.5702 -0.7756\nvn -0.5147 -0.8526 -0.0902\nvn -0.8535 -0.2013 0.4805\nvn -0.0441 0.3244 0.9449\nvn -0.3535 0.1784 0.9182\nvn 0.3535 0.4536 0.8180\nvn 0.7703 0.6124 0.1776\nvn 0.8535 0.2013 -0.4805\nvn -0.0441 -0.3588 -0.9324\nvn 0.3535 -0.1784 -0.9182\nvn -0.3536 -0.4536 -0.8180\nvn -0.7703 -0.6124 -0.1776\nvn -0.8535 -0.4631 -0.2387\nvn -0.9087 -0.0411 0.4155\nvn -0.0477 0.3416 0.9386\nvn -0.3827 0.3160 0.8682\nvn 0.3827 0.3160 0.8682\nvn 0.9087 0.2986 0.2918\nvn 0.9239 0.1309 0.3596\nvn 0.9087 0.0411 -0.4155\nvn -0.0477 -0.3416 -0.9386\nvn 0.3827 -0.3160 -0.8682\nvn -0.3827 -0.3160 -0.8682\nvn -0.9239 -0.1309 -0.3596\nvn -0.9087 0.2986 0.2918\nvn -0.8535 0.4631 0.2387\nvn -0.0441 0.3588 0.9324\nvn -0.3535 0.4536 0.8180\nvn 0.3535 0.1784 0.9182\nvn 0.8535 -0.2013 0.4805\nvn 0.9087 -0.2986 -0.2918\nvn 0.8535 -0.4631 -0.2387\nvn -0.0441 -0.3244 -0.9449\nvn 0.3536 -0.4536 -0.8180\nvn -0.3535 -0.1784 -0.9182\nvn -0.9087 0.0411 -0.4155\nvn -0.6533 0.7447 0.1361\nvn -0.0338 0.3733 0.9271\nvn -0.2706 0.5702 0.7756\nvn 0.2706 0.0617 0.9607\nvn 0.7703 -0.3549 0.5297\nvn 0.7703 -0.6124 -0.1776\nvn -0.0338 -0.3099 -0.9502\nvn 0.2706 -0.5702 -0.7756\nvn -0.2706 -0.0617 -0.9607\nvn -0.7703 0.3549 -0.5297\nvn -0.6533 0.4830 -0.5830\nvn -0.5147 0.8526 0.0902\nvn -0.0183 0.3831 0.9235\nvn -0.1464 0.6482 0.7472\nvn 0.1464 -0.0162 0.9891\nvn 0.5147 -0.5951 0.6171\nvn 0.5147 -0.8526 -0.0902\nvn 0.3535 -0.9330 -0.0677\nvn 0.3177 -0.9284 0.1927\nvn -0.0183 -0.3002 -0.9537\nvn 0.1464 -0.6482 -0.7472\nvn -0.1464 0.0162 -0.9891\nvn -0.3535 0.6712 -0.6515\nvn -0.1807 0.9826 0.0429\nvn 0.0000 0.3865 0.9223\nvn 0.1807 -0.7251 0.6644\nvn 0.0230 -0.1711 -0.9850\nvn 0.0759 -0.6736 -0.7351\nvn 0.0727 0.3213 -0.9442\nvn -0.1807 0.7251 -0.6644\nvn 0.0183 0.3831 0.9235\nvn 0.1719 0.3027 -0.9374\nvn 0.0461 -0.1754 -0.9834\nvn 0.5147 0.8526 0.0902\nvn 0.0337 0.3733 0.9271\nvn 0.0337 -0.3099 -0.9502\nvn 0.8535 0.4631 0.2387\nvn 0.0441 0.3588 0.9324\nvn 0.0441 -0.3244 -0.9449\nvn 0.0477 0.3416 0.9386\nvn 0.0477 -0.3416 -0.9386\nvn 0.9087 -0.0411 0.4155\nvn 0.0441 0.3244 0.9449\nvn 0.0441 -0.3588 -0.9324\nvn 0.3535 -0.4536 -0.8180\nvn 0.6533 -0.4830 0.5830\nvn 0.0338 0.3099 0.9502\nvn -0.7703 0.6124 0.1776\nvn 0.0337 -0.3733 -0.9271\nvn 0.0183 0.3002 0.9537\nvn -0.3535 0.9330 0.0677\nvn -0.5147 0.5951 -0.6171\nvn 0.0183 -0.3831 -0.9235\nvn 0.0024 -1.0000 0.0025\nvn 0.1017 -0.9732 0.2063\nvn -0.1507 -0.9141 0.3764\nvn -0.0119 -0.8011 0.5983\nvn 0.2482 -0.9687 0.0000\nvn 0.1165 -0.9852 -0.1256\nvn 0.0000 -1.0000 -0.0070\nvn -0.0970 -0.9921 0.0794\nvn -0.0926 -0.9928 0.0762\nvn -0.0838 -0.9504 -0.2993\nvn -0.0041 -0.9168 -0.3992\nvn 0.0000 -0.9999 -0.0139\nvn 0.0954 -0.9724 -0.2126\nvn 0.0041 -0.9368 -0.3499\nvn 0.0000 -0.9386 0.3449\nvn 0.0975 -0.9742 0.2037\nvn 0.0000 -0.9973 0.0738\nvn 0.1185 -0.9924 -0.0335\nvn 0.0000 -0.9969 0.0788\nvn 0.0000 -0.9955 0.0950\nvn 0.0000 -0.9948 0.1017\nvn 0.0000 -0.9446 -0.3282\nvn 0.0000 -0.9929 0.1186\nvn 0.0965 -0.9904 -0.0985\nvn -0.0116 -0.8701 -0.4928\nvn -0.0155 -0.9997 0.0170\nvn -0.0081 -0.9929 0.1186\nvn 0.3633 -0.0946 0.9268\nvn 0.0046 -0.1407 0.9900\nvn -0.0067 -0.4060 0.9138\nvn 0.2813 -0.2764 0.9189\nvn 0.0039 -0.1608 -0.9870\nvn 0.0116 -0.1515 -0.9884\nvn 0.1214 -0.4841 -0.8665\nvn -0.0020 -0.4441 -0.8960\nvn 0.9090 -0.0640 -0.4118\nvn 0.9595 -0.0428 -0.2785\nvn 0.0000 -0.1256 0.9921\nvn 0.0000 -0.3520 0.9360\nvn 0.0000 -0.3485 0.9373\nvn 0.0000 -0.1705 -0.9854\nvn 0.1348 -0.4685 -0.8731\nvn 0.0000 -0.4256 -0.9049\nvn 0.8946 -0.3805 -0.2342\nvn 0.9680 -0.2508 0.0097\nvn 0.9434 -0.3133 -0.1086\nvn 0.9277 -0.2426 -0.2838\nvn 0.2104 -0.9720 0.1046\nvn -0.0622 -0.9078 0.4147\nvn 0.0331 -0.9545 0.2962\nvn 0.0000 -0.9989 0.0474\nvn 0.1302 -0.9796 0.1527\nvn 0.0000 -0.8654 0.5010\nvn 0.9008 -0.0545 0.4306\nvn 0.9628 -0.0339 0.2679\nvn 0.1784 -0.8002 0.5725\nvn 0.5997 -0.7825 0.1674\nvn 0.3825 -0.8376 -0.3898\nvn 0.1748 -0.8148 -0.5527\nvn 0.1473 -0.8076 0.5710\nvn 0.3722 -0.8236 0.4279\nvn 0.3878 -0.8491 -0.3585\nvn 0.1735 -0.8492 -0.4987\nvn 0.5177 -0.5415 0.6623\nvn 0.6158 -0.6303 0.4726\nvn 0.5928 -0.6085 0.5275\nvn 0.5133 -0.5774 -0.6348\nvn 0.2049 -0.6604 -0.7224\nvn 0.5578 -0.4590 0.6915\nvn 0.6701 -0.5720 0.4730\nvn 0.6424 -0.5455 0.5382\nvn 0.5467 -0.5419 -0.6383\nvn 0.2138 -0.6322 -0.7447\nvn 0.0229 -0.6704 0.7416\nvn 0.7071 -0.7071 0.0000\nvn 0.0076 -0.7595 -0.6504\nvn 0.0000 -0.7548 0.6559\nvn 0.7071 -0.7066 0.0275\nvn 0.7078 -0.7058 0.0273\nvn -0.0085 -0.7673 -0.6412\nvn 0.0003 -0.6376 0.7703\nvn -0.0019 -0.6500 0.7599\nvn -0.0019 -0.6852 -0.7283\nvn 0.6515 -0.6964 -0.3008\nvn 0.6507 -0.6971 -0.3009\nvn 0.6573 -0.6912 -0.3003\nvn 0.6582 -0.6904 -0.3002\nvn 0.6955 -0.0646 0.7156\nvn 0.7096 -0.0679 0.7013\nvn 0.7069 -0.1084 -0.6989\nvn 0.7117 -0.1064 -0.6944\nvn 0.0000 -0.5530 0.8331\nvn 0.0000 -0.6471 -0.7624\nvn 0.7095 -0.6669 -0.2279\nvn 0.7211 -0.6545 -0.2274\nvn 0.7071 -0.0888 0.7015\nvn 0.7071 -0.1205 -0.6967\nvn 0.6631 -0.6550 0.3623\nvn 0.6647 -0.6539 0.3613\nvn 0.7064 -0.7036 0.0768\nvn 0.7063 -0.7037 0.0769\nvn 0.7071 -0.7030 0.0766\nvn 0.7072 -0.7028 0.0765\nvn 0.6936 -0.6216 0.3640\nvn 0.6910 -0.6234 0.3659\nvn -0.0024 -1.0000 0.0025\nvn -0.1017 -0.9732 0.2063\nvn 0.0119 -0.8011 0.5983\nvn 0.1507 -0.9141 0.3764\nvn -0.1165 -0.9852 -0.1256\nvn -0.2482 -0.9687 0.0000\nvn 0.0970 -0.9921 0.0794\nvn 0.0041 -0.9168 -0.3992\nvn 0.0838 -0.9504 -0.2993\nvn 0.0926 -0.9928 0.0762\nvn -0.0954 -0.9724 -0.2126\nvn -0.0975 -0.9742 0.2037\nvn -0.0041 -0.9368 -0.3499\nvn -0.1185 -0.9924 -0.0335\nvn -0.0965 -0.9904 -0.0985\nvn 0.0081 -0.9929 0.1186\nvn 0.0155 -0.9997 0.0170\nvn 0.0116 -0.8701 -0.4928\nvn -0.3633 -0.0946 0.9268\nvn -0.2813 -0.2764 0.9189\nvn 0.0067 -0.4060 0.9138\nvn -0.0046 -0.1407 0.9900\nvn -0.0039 -0.1608 -0.9870\nvn 0.0020 -0.4441 -0.8960\nvn -0.1214 -0.4841 -0.8665\nvn -0.0116 -0.1515 -0.9884\nvn -0.8915 -0.3775 -0.2504\nvn -0.9595 -0.0428 -0.2785\nvn -0.9687 -0.2482 0.0000\nvn -0.1348 -0.4685 -0.8731\nvn -0.8946 -0.3805 -0.2342\nvn -0.9277 -0.2426 -0.2838\nvn -0.9434 -0.3133 -0.1086\nvn -0.9680 -0.2508 0.0097\nvn -0.2104 -0.9720 0.1046\nvn 0.0622 -0.9078 0.4147\nvn -0.0331 -0.9545 0.2962\nvn -0.1302 -0.9796 0.1527\nvn -0.9628 -0.0339 0.2679\nvn -0.9008 -0.0545 0.4306\nvn -0.5997 -0.7825 0.1674\nvn -0.1784 -0.8002 0.5725\nvn -0.1748 -0.8148 -0.5527\nvn -0.3825 -0.8376 -0.3898\nvn -0.3722 -0.8236 0.4279\nvn -0.1473 -0.8076 0.5710\nvn -0.1735 -0.8492 -0.4987\nvn -0.3878 -0.8491 -0.3585\nvn -0.5177 -0.5415 0.6623\nvn -0.5928 -0.6085 0.5275\nvn -0.6158 -0.6303 0.4726\nvn -0.5133 -0.5775 -0.6348\nvn -0.2049 -0.6604 -0.7224\nvn -0.5578 -0.4590 0.6915\nvn -0.6424 -0.5455 0.5382\nvn -0.6701 -0.5720 0.4730\nvn -0.5467 -0.5419 -0.6383\nvn -0.2138 -0.6322 -0.7447\nvn -0.0229 -0.6704 0.7416\nvn -0.7071 -0.7071 0.0000\nvn -0.0076 -0.7595 -0.6504\nvn -0.7078 -0.7058 0.0273\nvn -0.7071 -0.7066 0.0275\nvn 0.0085 -0.7673 -0.6412\nvn -0.0003 -0.6376 0.7703\nvn 0.0019 -0.6500 0.7599\nvn 0.0019 -0.6852 -0.7283\nvn -0.6515 -0.6964 -0.3008\nvn -0.6582 -0.6904 -0.3002\nvn -0.6573 -0.6912 -0.3003\nvn -0.6507 -0.6971 -0.3009\nvn -0.6955 -0.0646 0.7156\nvn -0.7096 -0.0679 0.7013\nvn -0.7069 -0.1084 -0.6989\nvn -0.7117 -0.1064 -0.6944\nvn -0.7095 -0.6669 -0.2279\nvn -0.7211 -0.6545 -0.2274\nvn -0.7071 -0.0888 0.7015\nvn -0.7071 -0.1205 -0.6967\nvn -0.6631 -0.6550 0.3623\nvn -0.6647 -0.6539 0.3613\nvn -0.7064 -0.7036 0.0768\nvn -0.7072 -0.7028 0.0765\nvn -0.7071 -0.7030 0.0766\nvn -0.7063 -0.7037 0.0769\nvn -0.6936 -0.6216 0.3640\nvn -0.6910 -0.6234 0.3659\nvn -0.9239 0.3827 0.0000\nvn -0.7071 0.7071 0.0000\nvn -0.3827 0.9239 0.0000\nvn 0.0000 1.0000 0.0000\nvn 0.3827 0.9239 0.0000\nvn 0.7071 0.7071 0.0000\nvn 0.9239 0.3827 0.0000\nvn 0.9239 -0.3827 0.0000\nvn 0.3827 -0.9239 0.0000\nvn -0.3827 -0.9239 0.0000\nvn -0.5556 -0.8314 0.0000\nvn -0.9239 -0.3827 0.0000\nvn -0.8314 -0.5556 0.0000\nvn -0.8660 0.5000 0.0000\nvn -0.5000 0.8660 0.0000\nvn 0.5000 0.8660 0.0000\nvn 0.8660 0.5000 0.0000\nvn 0.8660 -0.5000 0.0000\nvn 0.5000 -0.8660 0.0000\nvn -0.2588 -0.9659 0.0000\nvn -0.8660 -0.5000 0.0000\nvn -0.8090 0.5878 0.0000\nvn -0.3090 0.9510 0.0000\nvn 0.3090 0.9510 0.0000\nvn 0.8090 0.5878 0.0000\nvn 0.9510 -0.3090 0.0000\nvn 0.3090 -0.9510 0.0000\nvn 0.5878 -0.8090 0.0000\nvn -0.3090 -0.9510 0.0000\nvn -0.8090 -0.5878 0.0000\nvn -0.5000 -0.8660 0.0000\nvn 0.2588 0.9659 0.0000\nvn -0.2588 0.9659 0.0000\nvn -0.5556 0.8314 0.0000\nvn -0.8314 0.5556 0.0000\nvn 0.8090 -0.5878 0.0000\nvn -0.5878 0.8090 0.0000\nvn -0.9510 0.3090 0.0000\nvn -0.6948 0.0000 0.7192\nvn -0.6017 -0.3474 0.7192\nvn -0.3474 -0.6017 0.7192\nvn 0.0000 -0.6948 0.7192\nvn 0.3474 -0.6017 0.7192\nvn 0.3474 -0.6016 0.7192\nvn 0.6017 -0.3474 0.7192\nvn 0.6948 0.0000 0.7192\nvn 0.6017 0.3474 0.7192\nvn 0.3474 0.6017 0.7192\nvn 0.0000 0.6948 0.7192\nvn -0.3474 0.6017 0.7192\nvn -0.6017 0.3474 0.7192\nvn 0.9659 -0.2588 0.0000\nvn 0.5556 -0.8314 0.0000\nvn 0.8314 -0.5556 0.0000\nvn 0.2588 -0.9659 0.0000\nvn -0.9510 -0.3090 0.0000\nvn -0.5878 -0.8090 0.0000\nvn 0.5556 0.8314 0.0000\nvn 0.8314 0.5556 0.0000\nvn 0.5878 0.8090 0.0000\nvn 0.9510 0.3090 0.0000\nvn 0.6947 0.0000 0.7192\nvn -0.3474 -0.6016 0.7192\nvn -0.9659 -0.2588 0.0000\nusemtl Material__803_lackSub0\ns 1\nf 539/539/539 3060/540/539 1647/541/539\nf 1647/541/539 2857/542/539 539/539/539\nf 761/543/539 3059/544/539 1647/541/539\nf 1647/541/539 3060/540/539 761/543/539\nf 645/545/539 2874/546/539 1647/541/539\nf 1647/541/539 3059/544/539 645/545/539\nf 636/547/539 2857/542/539 1647/541/539\nf 1647/541/539 2874/546/539 636/547/539\nf 540/548/540 2682/549/541 1648/550/542\nf 1648/550/542 2680/551/543 540/548/540\nf 612/552/544 2823/553/545 1648/550/542\nf 1648/550/542 2682/549/541 612/552/544\nf 656/554/546 2875/555/547 1648/550/542\nf 1648/550/542 2823/553/545 656/554/546\nf 630/556/548 2680/551/543 1648/550/542\nf 1648/550/542 2875/555/547 630/556/548\nf 541/557/549 2684/558/550 1649/559/551\nf 1649/559/551 2683/560/552 541/557/549\nf 593/561/553 2788/562/554 1649/559/551\nf 1649/559/551 2684/558/550 593/561/553\nf 650/563/555 2876/564/556 1649/559/551\nf 1649/559/551 2788/562/554 650/563/555\nf 631/565/557 2683/560/552 1649/559/551\nf 1649/559/551 2876/564/556 631/565/557\nf 556/566/558 2712/567/559 1650/568/560\nf 1650/568/560 2748/569/561 556/566/558\nf 635/570/562 2877/571/563 1650/568/560\nf 1650/568/560 2712/567/559 635/570/562\nf 644/572/564 2864/573/565 1650/568/560\nf 1650/568/560 2877/571/563 644/572/564\nf 577/574/566 2748/569/561 1650/568/560\nf 1650/568/560 2864/573/565 577/574/566\nf 559/575/567 2858/576/568 1651/577/569\nf 1651/577/569 2785/578/570 559/575/567\nf 637/579/571 2878/580/572 1651/577/569\nf 1651/577/569 2858/576/568 637/579/571\nf 651/581/573 2868/582/574 1651/577/569\nf 1651/577/569 2878/580/572 651/581/573\nf 595/583/575 2785/578/570 1651/577/569\nf 1651/577/569 2868/582/574 595/583/575\nf 547/584/576 2859/585/577 1652/586/578\nf 1652/586/578 2695/587/579 547/584/576\nf 638/588/580 2879/589/581 1652/586/578\nf 1652/586/578 2859/585/577 638/588/580\nf 639/590/582 2860/591/583 1652/586/578\nf 1652/586/578 2879/589/581 639/590/582\nf 549/592/584 2695/587/579 1652/586/578\nf 1652/586/578 2860/591/583 549/592/584\nf 769/593/585 3075/594/586 1653/595/587\nf 1653/595/587 3064/596/588 769/593/585\nf 770/597/589 2880/598/590 1653/595/587\nf 1653/595/587 3075/594/586 770/597/589\nf 775/599/591 3082/600/592 1653/595/587\nf 1653/595/587 2880/598/590 775/599/591\nf 776/601/593 3064/596/588 1653/595/587\nf 1653/595/587 3082/600/592 776/601/593\nf 551/602/594 2861/603/595 1654/604/596\nf 1654/604/596 2937/605/597 551/602/594\nf 640/606/598 2881/607/599 1654/604/596\nf 1654/604/596 2861/603/595 640/606/598\nf 697/608/600 2938/609/601 1654/604/596\nf 1654/604/596 2881/607/599 697/608/600\nf 683/610/602 2937/605/597 1654/604/596\nf 1654/604/596 2938/609/601 683/610/602\nf 1008/611/603 3580/612/604 1655/613/605\nf 1655/613/605 3792/614/603 1008/611/603\nf 1009/615/606 3029/616/607 1655/613/605\nf 1655/613/605 3580/612/604 1009/615/606\nf 750/617/608 3021/618/609 1655/613/605\nf 1655/613/605 3029/616/607 750/617/608\nf 1126/619/603 3792/614/603 1655/613/605\nf 1655/613/605 3021/618/609 1126/619/603\nf 1127/620/610 3011/621/611 1656/622/612\nf 1656/622/612 3796/623/613 1127/620/610\nf 739/624/614 3030/625/615 1656/622/612\nf 1656/622/612 3011/621/611 739/624/614\nf 755/626/616 3026/627/617 1656/622/612\nf 1656/622/612 3030/625/615 755/626/616\nf 1130/628/618 3796/623/613 1656/622/612\nf 1656/622/612 3026/627/617 1130/628/618\nf 606/629/619 2806/630/620 1657/631/621\nf 1657/631/621 2698/632/622 606/629/619\nf 607/633/623 2807/634/624 1657/631/621\nf 1657/631/621 2806/630/620 607/633/623\nf 622/635/625 2837/636/626 1657/631/621\nf 1657/631/621 2807/634/624 622/635/625\nf 619/637/627 2698/632/622 1657/631/621\nf 1657/631/621 2837/636/626 619/637/627\nf 978/638/628 3513/639/629 1658/640/630\nf 1658/640/630 2704/641/631 978/638/628\nf 979/642/632 3247/643/633 1658/640/630\nf 1658/640/630 3513/639/629 979/642/632\nf 974/644/634 3507/645/635 1658/640/630\nf 1658/640/630 3247/643/633 974/644/634\nf 975/646/636 2704/641/631 1658/640/630\nf 1658/640/630 3507/645/635 975/646/636\nf 970/647/637 3501/648/638 1659/649/639\nf 1659/649/639 2706/650/640 970/647/637\nf 721/651/641 3502/652/642 1659/649/639\nf 1659/649/639 3501/648/638 721/651/641\nf 965/653/643 3503/654/644 1659/649/639\nf 1659/649/639 3502/652/642 965/653/643\nf 971/655/645 2706/650/640 1659/649/639\nf 1659/649/639 3503/654/644 971/655/645\nf 552/656/646 2703/657/647 1660/658/648\nf 1660/658/648 2701/659/649 552/656/646\nf 553/660/650 2709/661/651 1660/658/648\nf 1660/658/648 2703/657/647 553/660/650\nf 685/662/652 2939/663/653 1660/658/648\nf 1660/658/648 2709/661/651 685/662/652\nf 684/664/654 2701/659/649 1660/658/648\nf 1660/658/648 2939/663/653 684/664/654\nf 553/660/650 2828/665/655 1661/666/656\nf 1661/666/656 2709/661/651 553/660/650\nf 711/667/657 2972/668/658 1661/666/656\nf 1661/666/656 2828/665/655 711/667/657\nf 701/669/659 2940/670/660 1661/666/656\nf 1661/666/656 2972/668/658 701/669/659\nf 685/662/652 2709/661/651 1661/666/656\nf 1661/666/656 2940/670/660 685/662/652\nf 554/671/661 3239/672/662 1662/673/663\nf 1662/673/663 2710/674/664 554/671/661\nf 839/675/665 3248/676/666 1662/673/663\nf 1662/673/663 3239/672/662 839/675/665\nf 845/677/667 3245/678/668 1662/673/663\nf 1662/673/663 3248/676/666 845/677/667\nf 686/679/669 2710/674/664 1662/673/663\nf 1662/673/663 3245/678/668 686/679/669\nf 555/680/670 2987/681/671 1663/682/672\nf 1663/682/672 2711/683/673 555/680/670\nf 722/684/674 2988/685/675 1663/682/672\nf 1663/682/672 2987/681/671 722/684/674\nf 692/686/676 2942/687/677 1663/682/672\nf 1663/682/672 2988/685/675 692/686/676\nf 687/688/678 2711/683/673 1663/682/672\nf 1663/682/672 2942/687/677 687/688/678\nf 544/689/679 2687/690/680 1664/691/681\nf 1664/691/681 2716/692/682 544/689/679\nf 633/693/683 2882/694/684 1664/691/681\nf 1664/691/681 2687/690/680 633/693/683\nf 652/695/685 2869/696/686 1664/691/681\nf 1664/691/681 2882/694/684 652/695/685\nf 598/697/687 2716/692/682 1664/691/681\nf 1664/691/681 2869/696/686 598/697/687\nf 548/698/688 2691/699/689 1665/700/690\nf 1665/700/690 2796/701/691 548/698/688\nf 731/702/692 3031/703/693 1665/700/690\nf 1665/700/690 2691/699/689 731/702/692\nf 746/704/694 3017/705/695 1665/700/690\nf 1665/700/690 3031/703/693 746/704/694\nf 1163/706/696 2796/701/691 1665/700/690\nf 1665/700/690 3017/705/695 1163/706/696\nf 547/584/576 2692/707/697 1666/708/698\nf 1666/708/698 2717/709/699 547/584/576\nf 677/710/700 2932/711/701 1666/708/698\nf 1666/708/698 2692/707/697 677/710/700\nf 679/712/702 2930/713/703 1666/708/698\nf 1666/708/698 2932/711/701 679/712/702\nf 599/714/704 2717/709/699 1666/708/698\nf 1666/708/698 2930/713/703 599/714/704\nf 546/715/705 2690/716/706 1667/717/707\nf 1667/717/707 2718/718/708 546/715/705\nf 836/719/709 3249/720/710 1667/717/707\nf 1667/717/707 2690/716/706 836/719/709\nf 841/721/711 3241/722/712 1667/717/707\nf 1667/717/707 3249/720/710 841/721/711\nf 600/723/713 2718/718/708 1667/717/707\nf 1667/717/707 3241/722/712 600/723/713\nf 981/724/714 3528/725/715 1668/726/716\nf 1668/726/716 2721/727/717 981/724/714\nf 982/728/718 2907/729/719 1668/726/716\nf 1668/726/716 3528/725/715 982/728/718\nf 752/730/720 3122/731/721 1668/726/716\nf 1668/726/716 2907/729/719 752/730/720\nf 735/732/722 2721/727/717 1668/726/716\nf 1668/726/716 3122/731/721 735/732/722\nf 561/733/723 2756/734/724 1669/735/725\nf 1669/735/725 2722/736/726 561/733/723\nf 667/737/727 2912/738/728 1669/735/725\nf 1669/735/725 2756/734/724 667/737/727\nf 726/739/729 3128/740/730 1669/735/725\nf 1669/735/725 2912/738/728 726/739/729\nf 720/741/731 2722/736/726 1669/735/725\nf 1669/735/725 3128/740/730 720/741/731\nf 564/742/732 2725/743/733 1670/744/734\nf 1670/744/734 2735/745/735 564/742/732\nf 737/746/736 3032/747/737 1670/744/734\nf 1670/744/734 2725/743/733 737/746/736\nf 786/748/738 3106/749/739 1670/744/734\nf 1670/744/734 3032/747/737 786/748/738\nf 780/750/740 2735/745/735 1670/744/734\nf 1670/744/734 3106/749/739 780/750/740\nf 571/751/741 2732/752/742 1671/753/743\nf 1671/753/743 2736/754/744 571/751/741\nf 740/755/745 3033/756/746 1671/753/743\nf 1671/753/743 2732/752/742 740/755/745\nf 741/757/747 3013/758/748 1671/753/743\nf 1671/753/743 3033/756/746 741/757/747\nf 578/759/749 2736/754/744 1671/753/743\nf 1671/753/743 3013/758/748 578/759/749\nf 566/760/750 3002/761/751 1672/762/752\nf 1672/762/752 2737/763/753 566/760/750\nf 730/764/754 3034/765/755 1672/762/752\nf 1672/762/752 3002/761/751 730/764/754\nf 745/766/756 3016/767/757 1672/762/752\nf 1672/762/752 3034/765/755 745/766/756\nf 596/768/758 2737/763/753 1672/762/752\nf 1672/762/752 3016/767/757 596/768/758\nf 567/769/759 3003/770/760 1673/771/761\nf 1673/771/761 2738/772/762 567/769/759\nf 731/702/692 3035/773/763 1673/771/761\nf 1673/771/761 3003/770/760 731/702/692\nf 732/774/764 3004/775/765 1673/771/761\nf 1673/771/761 3035/773/763 732/774/764\nf 568/776/766 2738/772/762 1673/771/761\nf 1673/771/761 3004/775/765 568/776/766\nf 771/777/767 3077/778/768 1674/779/769\nf 1674/779/769 2739/780/770 771/777/767\nf 772/781/771 3036/782/772 1674/779/769\nf 1674/779/769 3077/778/768 772/781/771\nf 773/783/773 3080/784/774 1674/779/769\nf 1674/779/769 3036/782/772 773/783/773\nf 774/785/775 2739/780/770 1674/779/769\nf 1674/779/769 3080/784/774 774/785/775\nf 916/786/776 3005/787/777 1675/788/778\nf 1675/788/778 3390/789/779 916/786/776\nf 733/790/780 3037/791/781 1675/788/778\nf 1675/788/778 3005/787/777 733/790/780\nf 914/792/782 3389/793/783 1675/788/778\nf 1675/788/778 3037/791/781 914/792/782\nf 915/794/784 3390/789/779 1675/788/778\nf 1675/788/778 3389/793/783 915/794/784\nf 1026/795/785 3613/796/786 1676/797/787\nf 1676/797/787 2741/798/788 1026/795/785\nf 1027/799/789 3614/800/790 1676/797/787\nf 1676/797/787 3613/796/786 1027/799/789\nf 1028/801/791 3615/802/792 1676/797/787\nf 1676/797/787 3614/800/790 1028/801/791\nf 1023/803/793 2741/798/788 1676/797/787\nf 1676/797/787 3615/802/792 1023/803/793\nf 565/804/794 2726/805/795 1677/806/796\nf 1677/806/796 2742/807/797 565/804/794\nf 738/808/798 3038/809/799 1677/806/796\nf 1677/806/796 2726/805/795 738/808/798\nf 747/810/800 3018/811/801 1677/806/796\nf 1677/806/796 3038/809/799 747/810/800\nf 601/812/802 2742/807/797 1677/806/796\nf 1677/806/796 3018/811/801 601/812/802\nf 567/769/759 2728/813/803 1678/814/804\nf 1678/814/804 2743/815/805 567/769/759\nf 638/588/580 2884/816/806 1678/814/804\nf 1678/814/804 2728/813/803 638/588/580\nf 653/817/807 2870/818/808 1678/814/804\nf 1678/814/804 2884/816/806 653/817/807\nf 602/819/809 2743/815/805 1678/814/804\nf 1678/814/804 2870/818/808 602/819/809\nf 565/804/794 2854/820/810 1679/821/811\nf 1679/821/811 2744/822/812 565/804/794\nf 633/693/683 2885/823/813 1679/821/811\nf 1679/821/811 2854/820/810 633/693/683\nf 648/824/814 2867/825/815 1679/821/811\nf 1679/821/811 2885/823/813 648/824/814\nf 587/826/816 2744/822/812 1679/821/811\nf 1679/821/811 2867/825/815 587/826/816\nf 574/827/817 2745/828/818 1680/829/819\nf 1680/829/819 2750/830/820 574/827/817\nf 838/831/821 3250/832/822 1680/829/819\nf 1680/829/819 2745/828/818 838/831/821\nf 843/833/823 3243/834/824 1680/829/819\nf 1680/829/819 3250/832/822 843/833/823\nf 643/835/825 2750/830/820 1680/829/819\nf 1680/829/819 3243/834/824 643/835/825\nf 578/759/749 2749/836/826 1681/837/827\nf 1681/837/827 2751/838/828 578/759/749\nf 840/839/829 3251/840/830 1681/837/827\nf 1681/837/827 2749/836/826 840/839/829\nf 844/841/831 3244/842/832 1681/837/827\nf 1681/837/827 3251/840/830 844/841/831\nf 644/572/564 2751/838/828 1681/837/827\nf 1681/837/827 3244/842/832 644/572/564\nf 980/843/833 3515/844/834 1682/845/835\nf 1682/845/835 2752/846/836 980/843/833\nf 969/847/837 2824/848/838 1682/845/835\nf 1682/845/835 3515/844/834 969/847/837\nf 972/849/839 3505/850/840 1682/845/835\nf 1682/845/835 2824/848/838 972/849/839\nf 973/851/841 2752/846/836 1682/845/835\nf 1682/845/835 3505/850/840 973/851/841\nf 576/852/842 2820/853/843 1683/854/844\nf 1683/854/844 2753/855/845 576/852/842\nf 613/856/846 2825/857/847 1683/854/844\nf 1683/854/844 2820/853/843 613/856/846\nf 695/858/848 2944/859/849 1683/854/844\nf 1683/854/844 2825/857/847 695/858/848\nf 690/860/850 2753/855/845 1683/854/844\nf 1683/854/844 2944/859/849 690/860/850\nf 575/861/851 2746/862/852 1684/863/853\nf 1684/863/853 2754/864/854 575/861/851\nf 614/865/855 2826/866/856 1684/863/853\nf 1684/863/853 2746/862/852 614/865/855\nf 615/867/857 2822/868/858 1684/863/853\nf 1684/863/853 2826/866/856 615/867/857\nf 603/869/859 2754/864/854 1684/863/853\nf 1684/863/853 2822/868/858 603/869/859\nf 1230/870/860 3906/871/861 1685/872/862\nf 1685/872/862 2755/873/863 1230/870/860\nf 1231/874/864 3252/875/865 1685/872/862\nf 1685/872/862 3906/871/861 1231/874/864\nf 846/876/866 3246/877/867 1685/872/862\nf 1685/872/862 3252/875/865 846/876/866\nf 741/757/747 2755/873/863 1685/872/862\nf 1685/872/862 3246/877/867 741/757/747\nf 583/878/868 2759/879/869 1686/880/870\nf 1686/880/870 2761/881/871 583/878/868\nf 668/882/872 2913/883/873 1686/880/870\nf 1686/880/870 2759/879/869 668/882/872\nf 669/884/874 3118/885/875 1686/880/870\nf 1686/880/870 2913/883/873 669/884/874\nf 646/886/876 2761/881/871 1686/880/870\nf 1686/880/870 3118/885/875 646/886/876\nf 579/887/877 2983/888/878 1687/889/879\nf 1687/889/879 3065/890/880 579/887/877\nf 718/891/881 3084/892/882 1687/889/879\nf 1687/889/879 2983/888/878 718/891/881\nf 767/893/883 3070/894/884 1687/889/879\nf 1687/889/879 3084/892/882 767/893/883\nf 766/895/885 3065/890/880 1687/889/879\nf 1687/889/879 3070/894/884 766/895/885\nf 1241/896/539 3918/897/539 1688/898/539\nf 1688/898/539 2764/899/539 1241/896/539\nf 1242/900/539 2681/901/539 1688/898/539\nf 1688/898/539 3918/897/539 1242/900/539\nf 729/902/539 3040/903/539 1688/898/539\nf 1688/898/539 2681/901/539 729/902/539\nf 742/904/539 2764/899/539 1688/898/539\nf 1688/898/539 3040/903/539 742/904/539\nf 988/905/886 3922/906/887 1689/907/888\nf 1689/907/888 3536/908/889 988/905/886\nf 1245/909/890 2914/910/891 1689/907/888\nf 1689/907/888 3922/906/887 1245/909/890\nf 753/911/892 3119/912/893 1689/907/888\nf 1689/907/888 2914/910/891 753/911/892\nf 987/913/894 3536/908/889 1689/907/888\nf 1689/907/888 3119/912/893 987/913/894\nf 586/914/895 2720/915/896 1690/916/897\nf 1690/916/897 2771/917/898 586/914/895\nf 662/918/899 2908/919/900 1690/916/897\nf 1690/916/897 2720/915/896 662/918/899\nf 725/920/901 3125/921/902 1690/916/897\nf 1690/916/897 2908/919/900 725/920/901\nf 722/684/674 2771/917/898 1690/916/897\nf 1690/916/897 3125/921/902 722/684/674\nf 585/922/903 2767/923/904 1691/924/905\nf 1691/924/905 2772/925/906 585/922/903\nf 721/651/641 3054/926/907 1691/924/905\nf 1691/924/905 2767/923/904 721/651/641\nf 758/927/908 3053/928/909 1691/924/905\nf 1691/924/905 3054/926/907 758/927/908\nf 647/929/910 2772/925/906 1691/924/905\nf 1691/924/905 3053/928/909 647/929/910\nf 1254/930/911 2768/931/912 1692/932/913\nf 1692/932/913 3529/933/914 1254/930/911\nf 545/934/915 3010/935/916 1692/932/913\nf 1692/932/913 2768/931/912 545/934/915\nf 738/808/798 3041/936/917 1692/932/913\nf 1692/932/913 3010/935/916 738/808/798\nf 744/937/918 3529/933/914 1692/932/913\nf 1692/932/913 3041/936/917 744/937/918\nf 584/938/919 2766/939/920 1693/940/921\nf 1693/940/921 2773/941/922 584/938/919\nf 663/942/923 2909/943/924 1693/940/921\nf 1693/940/921 2766/939/920 663/942/923\nf 665/944/925 3123/945/926 1693/940/921\nf 1693/940/921 2909/943/924 665/944/925\nf 648/824/814 2773/941/922 1693/940/921\nf 1693/940/921 3123/945/926 648/824/814\nf 588/946/927 2968/947/928 1694/948/929\nf 1694/948/929 2844/949/930 588/946/927\nf 709/950/931 3510/951/932 1694/948/929\nf 1694/948/929 2968/947/928 709/950/931\nf 964/952/933 3492/953/934 1694/948/929\nf 1694/948/929 3510/951/932 964/952/933\nf 963/954/935 2844/949/930 1694/948/929\nf 1694/948/929 3492/953/934 963/954/935\nf 589/955/936 2774/956/937 1695/957/938\nf 1695/957/938 2779/958/939 589/955/936\nf 597/959/940 2793/960/941 1695/957/938\nf 1695/957/938 2774/956/937 597/959/940\nf 605/961/942 2804/962/943 1695/957/938\nf 1695/957/938 2793/960/941 605/961/942\nf 604/963/944 2779/958/939 1695/957/938\nf 1695/957/938 2804/962/943 604/963/944\nf 593/561/553 2782/964/945 1696/965/946\nf 1696/965/946 2788/562/554 593/561/553\nf 709/950/931 3056/966/947 1696/965/946\nf 1696/965/946 2782/964/945 709/950/931\nf 759/967/948 3055/968/949 1696/965/946\nf 1696/965/946 3056/966/947 759/967/948\nf 650/563/555 2788/562/554 1696/965/946\nf 1696/965/946 3055/968/949 650/563/555\nf 596/768/758 2786/969/950 1697/970/951\nf 1697/970/951 2789/971/952 596/768/758\nf 572/972/953 2733/973/954 1697/970/951\nf 1697/970/951 2786/969/950 572/972/953\nf 641/974/955 2892/975/956 1697/970/951\nf 1697/970/951 2733/973/954 641/974/955\nf 651/581/573 2789/971/952 1697/970/951\nf 1697/970/951 2892/975/956 651/581/573\nf 1270/976/957 2783/977/958 1698/978/959\nf 1698/978/959 2790/979/960 1270/976/957\nf 557/980/961 2713/981/962 1698/978/959\nf 1698/978/959 2783/977/958 557/980/961\nf 734/982/963 3042/983/964 1698/978/959\nf 1698/978/959 2713/981/962 734/982/963\nf 745/766/756 2790/979/960 1698/978/959\nf 1698/978/959 3042/983/964 745/766/756\nf 977/984/965 3512/985/966 1699/986/967\nf 1699/986/967 2791/987/968 977/984/965\nf 978/638/628 2704/641/631 1699/986/967\nf 1699/986/967 3512/985/966 978/638/628\nf 975/646/636 3508/988/969 1699/986/967\nf 1699/986/967 2704/641/631 975/646/636\nf 976/989/970 2791/987/968 1699/986/967\nf 1699/986/967 3508/988/969 976/989/970\nf 594/990/971 2705/991/972 1700/992/973\nf 1700/992/973 2792/993/974 594/990/971\nf 554/671/661 2710/674/664 1700/992/973\nf 1700/992/973 2705/991/972 554/671/661\nf 686/679/669 2947/994/975 1700/992/973\nf 1700/992/973 2710/674/664 686/679/669\nf 694/995/976 2792/993/974 1700/992/973\nf 1700/992/973 2947/994/975 694/995/976\nf 597/959/940 2787/996/977 1701/997/978\nf 1701/997/978 2793/960/941 597/959/940\nf 546/715/705 2718/718/708 1701/997/978\nf 1701/997/978 2787/996/977 546/715/705\nf 600/723/713 2805/998/979 1701/997/978\nf 1701/997/978 2718/718/708 600/723/713\nf 605/961/942 2793/960/941 1701/997/978\nf 1701/997/978 2805/998/979 605/961/942\nf 543/999/980 3000/1000/981 1702/1001/982\nf 1702/1001/982 2813/1002/983 543/999/980\nf 727/1003/984 3061/1004/985 1702/1001/982\nf 1702/1001/982 3000/1000/981 727/1003/984\nf 607/633/623 2806/630/620 1702/1001/982\nf 1702/1001/982 3061/1004/985 607/633/623\nf 606/629/619 2813/1002/983 1702/1001/982\nf 1702/1001/982 2806/630/620 606/629/619\nf 542/1005/986 2702/1006/987 1703/1007/988\nf 1703/1007/988 2814/1008/989 542/1005/986\nf 620/1009/990 2839/1010/991 1703/1007/988\nf 1703/1007/988 2702/1006/987 620/1009/990\nf 622/635/625 2807/634/624 1703/1007/988\nf 1703/1007/988 2839/1010/991 622/635/625\nf 607/633/623 2814/1008/989 1703/1007/988\nf 1703/1007/988 2807/634/624 607/633/623\nf 7274/1011/992 7275/1012/993 1704/1013/994\nf 1704/1013/994 2815/1014/995 7274/1011/992\nf 7276/1015/996 2816/1016/997 1704/1013/994\nf 1704/1013/994 7275/1012/993 7276/1015/996\nf 609/1017/998 2808/1018/999 1704/1013/994\nf 1704/1013/994 2816/1016/997 609/1017/998\nf 608/1019/1000 2815/1014/995 1704/1013/994\nf 1704/1013/994 2808/1018/999 608/1019/1000\nf 7276/1015/996 2699/1020/1001 1705/1021/1002\nf 1705/1021/1002 2816/1016/997 7276/1015/996\nf 634/1022/1003 2893/1023/1004 1705/1021/1002\nf 1705/1021/1002 2699/1020/1001 634/1022/1003\nf 654/1024/1005 2809/1025/1006 1705/1021/1002\nf 1705/1021/1002 2893/1023/1004 654/1024/1005\nf 609/1017/998 2816/1016/997 1705/1021/1002\nf 1705/1021/1002 2809/1025/1006 609/1017/998\nf 570/1026/1007 2731/1027/1008 1706/1028/1009\nf 1706/1028/1009 2817/1029/1010 570/1026/1007\nf 739/624/614 3043/1030/1011 1706/1028/1009\nf 1706/1028/1009 2731/1027/1008 739/624/614\nf 748/1031/1012 2810/1032/1013 1706/1028/1009\nf 1706/1028/1009 3043/1030/1011 748/1031/1012\nf 610/1033/1014 2817/1029/1010 1706/1028/1009\nf 1706/1028/1009 2810/1032/1013 610/1033/1014\nf 1287/1034/1015 2724/1035/1016 1707/1036/1017\nf 1707/1036/1017 3986/1037/1018 1287/1034/1015\nf 736/1038/1019 3044/1039/1020 1707/1036/1017\nf 1707/1036/1017 2724/1035/1016 736/1038/1019\nf 749/1040/1021 2811/1041/1022 1707/1036/1017\nf 1707/1036/1017 3044/1039/1020 749/1040/1021\nf 1290/1042/1023 3986/1037/1018 1707/1036/1017\nf 1707/1036/1017 2811/1041/1022 1290/1042/1023\nf 563/1043/1024 2685/1044/1025 1708/1045/1026\nf 1708/1045/1026 2818/1046/1027 563/1043/1024\nf 632/1047/1028 2894/1048/1029 1708/1045/1026\nf 1708/1045/1026 2685/1044/1025 632/1047/1028\nf 655/1049/1030 2812/1050/1031 1708/1045/1026\nf 1708/1045/1026 2894/1048/1029 655/1049/1030\nf 611/1051/1032 2818/1046/1027 1708/1045/1026\nf 1708/1045/1026 2812/1050/1031 611/1051/1032\nf 612/552/544 2819/1052/1033 1709/1053/1034\nf 1709/1053/1034 2823/553/545 612/552/544\nf 574/827/817 2750/830/820 1709/1053/1034\nf 1709/1053/1034 2819/1052/1033 574/827/817\nf 643/835/825 2895/1054/1035 1709/1053/1034\nf 1709/1053/1034 2750/830/820 643/835/825\nf 656/554/546 2823/553/545 1709/1053/1034\nf 1709/1053/1034 2895/1054/1035 656/554/546\nf 969/847/837 3500/1055/1036 1710/1056/1037\nf 1710/1056/1037 2824/848/838 969/847/837\nf 970/647/637 2706/650/640 1710/1056/1037\nf 1710/1056/1037 3500/1055/1036 970/647/637\nf 971/655/645 3504/1057/1038 1710/1056/1037\nf 1710/1056/1037 2706/650/640 971/655/645\nf 972/849/839 2824/848/838 1710/1056/1037\nf 1710/1056/1037 3504/1057/1038 972/849/839\nf 613/856/846 2707/1058/1039 1711/1059/1040\nf 1711/1059/1040 2825/857/847 613/856/846\nf 555/680/670 2711/683/673 1711/1059/1040\nf 1711/1059/1040 2707/1058/1039 555/680/670\nf 687/688/678 2948/1060/1041 1711/1059/1040\nf 1711/1059/1040 2711/683/673 687/688/678\nf 695/858/848 2825/857/847 1711/1059/1040\nf 1711/1059/1040 2948/1060/1041 695/858/848\nf 614/865/855 2821/1061/1042 1712/1062/1043\nf 1712/1062/1043 2826/866/856 614/865/855\nf 544/689/679 2716/692/682 1712/1062/1043\nf 1712/1062/1043 2821/1061/1042 544/689/679\nf 598/697/687 2803/1063/1044 1712/1062/1043\nf 1712/1062/1043 2716/692/682 598/697/687\nf 615/867/857 2826/866/856 1712/1062/1043\nf 1712/1062/1043 2803/1063/1044 615/867/857\nf 617/1064/1045 2775/1065/1046 1713/1066/1047\nf 1713/1066/1047 2830/1067/1048 617/1064/1045\nf 670/1068/1049 2922/1069/1050 1713/1066/1047\nf 1713/1066/1047 2775/1065/1046 670/1068/1049\nf 714/1070/1051 2976/1071/1052 1713/1066/1047\nf 1713/1066/1047 2922/1069/1050 714/1070/1051\nf 712/1072/1053 2830/1067/1048 1713/1066/1047\nf 1713/1066/1047 2976/1071/1052 712/1072/1053\nf 616/1073/1054 2827/1074/1055 1714/1075/1056\nf 1714/1075/1056 2831/1076/1057 616/1073/1054\nf 673/1077/1058 2923/1078/1059 1714/1075/1056\nf 1714/1075/1056 2827/1074/1055 673/1077/1058\nf 672/1079/1060 2917/1080/1061 1714/1075/1056\nf 1714/1075/1056 2923/1078/1059 672/1079/1060\nf 618/1081/1062 2831/1076/1057 1714/1075/1056\nf 1714/1075/1056 2917/1080/1061 618/1081/1062\nf 621/1082/1063 2834/1083/1064 1715/1084/1065\nf 1715/1084/1065 2836/1085/1066 621/1082/1063\nf 1014/1086/1067 3586/1087/1068 1715/1084/1065\nf 1715/1084/1065 2834/1083/1064 1014/1086/1067\nf 1015/1088/1069 3045/1089/1070 1715/1084/1065\nf 1715/1084/1065 3586/1087/1068 1015/1088/1069\nf 750/617/608 2836/1085/1066 1715/1084/1065\nf 1715/1084/1065 3045/1089/1070 750/617/608\nf 622/635/625 2835/1090/1071 1716/1091/1072\nf 1716/1091/1072 2837/636/626 622/635/625\nf 706/1092/1073 2962/1093/1074 1716/1091/1072\nf 1716/1091/1072 2835/1090/1071 706/1092/1073\nf 703/1094/1075 2832/1095/1076 1716/1091/1072\nf 1716/1091/1072 2962/1093/1074 703/1094/1075\nf 619/637/627 2837/636/626 1716/1091/1072\nf 1716/1091/1072 2832/1095/1076 619/637/627\nf 619/637/627 2832/1095/1076 1717/1096/1077\nf 1717/1096/1077 2838/1097/1078 619/637/627\nf 703/1094/1075 2963/1098/1079 1717/1096/1077\nf 1717/1096/1077 2832/1095/1076 703/1094/1075\nf 707/1099/1080 2959/1100/1081 1717/1096/1077\nf 1717/1096/1077 2963/1098/1079 707/1099/1080\nf 657/1101/1082 2838/1097/1078 1717/1096/1077\nf 1717/1096/1077 2959/1100/1081 657/1101/1082\nf 620/1009/990 2833/1102/1083 1718/1103/1084\nf 1718/1103/1084 2839/1010/991 620/1009/990\nf 704/1104/1085 2964/1105/1086 1718/1103/1084\nf 1718/1103/1084 2833/1102/1083 704/1104/1085\nf 706/1092/1073 2835/1090/1071 1718/1103/1084\nf 1718/1103/1084 2964/1105/1086 706/1092/1073\nf 622/635/625 2839/1010/991 1718/1103/1084\nf 1718/1103/1084 2835/1090/1071 622/635/625\nf 625/1106/1087 2842/1107/1088 1719/1108/1089\nf 1719/1108/1089 2847/1109/1090 625/1106/1087\nf 576/852/842 2747/1110/1091 1719/1108/1089\nf 1719/1108/1089 2842/1107/1088 576/852/842\nf 839/675/665 3253/1111/1092 1719/1108/1089\nf 1719/1108/1089 2747/1110/1091 839/675/665\nf 842/1112/1093 2847/1109/1090 1719/1108/1089\nf 1719/1108/1089 3253/1111/1092 842/1112/1093\nf 626/1113/1094 2843/1114/1095 1720/1115/1096\nf 1720/1115/1096 2848/1116/1097 626/1113/1094\nf 586/914/895 2771/917/898 1720/1115/1096\nf 1720/1115/1096 2843/1114/1095 586/914/895\nf 722/684/674 2993/1117/1098 1720/1115/1096\nf 1720/1115/1096 2771/917/898 722/684/674\nf 723/1118/1099 2848/1116/1097 1720/1115/1096\nf 1720/1115/1096 2993/1117/1098 723/1118/1099\nf 629/1119/1100 2846/1120/1101 1721/1121/1102\nf 1721/1121/1102 2849/1122/1103 629/1119/1100\nf 613/856/846 2820/853/843 1721/1121/1102\nf 1721/1121/1102 2846/1120/1101 613/856/846\nf 576/852/842 2842/1107/1088 1721/1121/1102\nf 1721/1121/1102 2820/853/843 576/852/842\nf 625/1106/1087 2849/1122/1103 1721/1121/1102\nf 1721/1121/1102 2842/1107/1088 625/1106/1087\nf 628/1123/1104 2845/1124/1105 1722/1125/1106\nf 1722/1125/1106 2850/1126/1107 628/1123/1104\nf 594/990/971 2784/1127/1108 1722/1125/1106\nf 1722/1125/1106 2845/1124/1105 594/990/971\nf 710/1128/1109 2977/1129/1110 1722/1125/1106\nf 1722/1125/1106 2784/1127/1108 710/1128/1109\nf 713/1130/1111 2850/1126/1107 1722/1125/1106\nf 1722/1125/1106 2977/1129/1110 713/1130/1111\nf 623/1131/1112 2840/1132/1113 1723/1133/1114\nf 1723/1133/1114 2851/1134/1115 623/1131/1112\nf 554/671/661 2705/991/972 1723/1133/1114\nf 1723/1133/1114 2840/1132/1113 554/671/661\nf 594/990/971 2845/1124/1105 1723/1133/1114\nf 1723/1133/1114 2705/991/972 594/990/971\nf 628/1123/1104 2851/1134/1115 1723/1133/1114\nf 1723/1133/1114 2845/1124/1105 628/1123/1104\nf 624/1135/1116 2841/1136/1117 1724/1137/1118\nf 1724/1137/1118 2852/1138/1119 624/1135/1116\nf 555/680/670 2707/1058/1039 1724/1137/1118\nf 1724/1137/1118 2841/1136/1117 555/680/670\nf 613/856/846 2846/1120/1101 1724/1137/1118\nf 1724/1137/1118 2707/1058/1039 613/856/846\nf 629/1119/1100 2852/1138/1119 1724/1137/1118\nf 1724/1137/1118 2846/1120/1101 629/1119/1100\nf 645/545/539 2865/1139/539 1725/1140/539\nf 1725/1140/539 2874/546/539 645/545/539\nf 582/1141/539 2758/1142/539 1725/1140/539\nf 1725/1140/539 2865/1139/539 582/1141/539\nf 562/1143/539 2723/1144/539 1725/1140/539\nf 1725/1140/539 2758/1142/539 562/1143/539\nf 636/547/539 2874/546/539 1725/1140/539\nf 1725/1140/539 2723/1144/539 636/547/539\nf 635/570/562 2856/1145/1120 1726/1146/1121\nf 1726/1146/1121 2877/571/563 635/570/562\nf 571/751/741 2736/754/744 1726/1146/1121\nf 1726/1146/1121 2856/1145/1120 571/751/741\nf 578/759/749 2751/838/828 1726/1146/1121\nf 1726/1146/1121 2736/754/744 578/759/749\nf 644/572/564 2877/571/563 1726/1146/1121\nf 1726/1146/1121 2751/838/828 644/572/564\nf 637/579/571 2727/1147/1122 1727/1148/1123\nf 1727/1148/1123 2878/580/572 637/579/571\nf 566/760/750 2737/763/753 1727/1148/1123\nf 1727/1148/1123 2727/1147/1122 566/760/750\nf 596/768/758 2789/971/952 1727/1148/1123\nf 1727/1148/1123 2737/763/753 596/768/758\nf 651/581/573 2878/580/572 1727/1148/1123\nf 1727/1148/1123 2789/971/952 651/581/573\nf 638/588/580 2728/813/803 1728/1149/1124\nf 1728/1149/1124 2879/589/581 638/588/580\nf 567/769/759 2738/772/762 1728/1149/1124\nf 1728/1149/1124 2728/813/803 567/769/759\nf 568/776/766 2729/1150/1125 1728/1149/1124\nf 1728/1149/1124 2738/772/762 568/776/766\nf 639/590/582 2879/589/581 1728/1149/1124\nf 1728/1149/1124 2729/1150/1125 639/590/582\nf 770/597/589 3076/1151/1126 1729/1152/1127\nf 1729/1152/1127 2880/598/590 770/597/589\nf 771/777/767 2739/780/770 1729/1152/1127\nf 1729/1152/1127 3076/1151/1126 771/777/767\nf 774/785/775 3081/1153/1128 1729/1152/1127\nf 1729/1152/1127 2739/780/770 774/785/775\nf 775/599/591 2880/598/590 1729/1152/1127\nf 1729/1152/1127 3081/1153/1128 775/599/591\nf 640/606/598 2730/1154/1129 1730/1155/1130\nf 1730/1155/1130 2881/607/599 640/606/598\nf 569/1156/1131 2740/1157/1132 1730/1155/1130\nf 1730/1155/1130 2730/1154/1129 569/1156/1131\nf 689/1158/1133 2950/1159/1134 1730/1155/1130\nf 1730/1155/1130 2740/1157/1132 689/1158/1133\nf 697/608/600 2881/607/599 1730/1155/1130\nf 1730/1155/1130 2950/1159/1134 697/608/600\nf 633/693/683 2854/820/810 1731/1160/1135\nf 1731/1160/1135 2882/694/684 633/693/683\nf 565/804/794 2742/807/797 1731/1160/1135\nf 1731/1160/1135 2854/820/810 565/804/794\nf 601/812/802 2797/1161/1136 1731/1160/1135\nf 1731/1160/1135 2742/807/797 601/812/802\nf 652/695/685 2882/694/684 1731/1160/1135\nf 1731/1160/1135 2797/1161/1136 652/695/685\nf 655/1049/1030 2872/1162/1137 1732/1163/1138\nf 1732/1163/1138 2883/1164/1139 655/1049/1030\nf 606/629/619 2698/632/622 1732/1163/1138\nf 1732/1163/1138 2872/1162/1137 606/629/619\nf 619/637/627 2838/1097/1078 1732/1163/1138\nf 1732/1163/1138 2698/632/622 619/637/627\nf 657/1101/1082 2883/1164/1139 1732/1163/1138\nf 1732/1163/1138 2838/1097/1078 657/1101/1082\nf 638/588/580 2859/585/577 1733/1165/1140\nf 1733/1165/1140 2884/816/806 638/588/580\nf 547/584/576 2717/709/699 1733/1165/1140\nf 1733/1165/1140 2859/585/577 547/584/576\nf 599/714/704 2802/1166/1141 1733/1165/1140\nf 1733/1165/1140 2717/709/699 599/714/704\nf 653/817/807 2884/816/806 1733/1165/1140\nf 1733/1165/1140 2802/1166/1141 653/817/807\nf 633/693/683 2687/690/680 1734/1167/1142\nf 1734/1167/1142 2885/823/813 633/693/683\nf 544/689/679 2688/1168/1143 1734/1167/1142\nf 1734/1167/1142 2687/690/680 544/689/679\nf 584/938/919 2773/941/922 1734/1167/1142\nf 1734/1167/1142 2688/1168/1143 584/938/919\nf 648/824/814 2885/823/813 1734/1167/1142\nf 1734/1167/1142 2773/941/922 648/824/814\nf 637/579/571 2858/576/568 1735/1169/1144\nf 1735/1169/1144 2887/1170/1145 637/579/571\nf 559/575/567 2715/1171/1146 1735/1169/1144\nf 1735/1169/1144 2858/576/568 559/575/567\nf 837/1172/1147 3254/1173/1148 1735/1169/1144\nf 1735/1169/1144 2715/1171/1146 837/1172/1147\nf 844/841/831 2887/1170/1145 1735/1169/1144\nf 1735/1169/1144 3254/1173/1148 844/841/831\nf 642/1174/1149 2863/1175/1150 1736/1176/1151\nf 1736/1176/1151 2888/1177/1152 642/1174/1149\nf 560/1178/1153 2719/1179/1154 1736/1176/1151\nf 1736/1176/1151 2863/1175/1150 560/1178/1153\nf 666/1180/1155 2915/1181/1156 1736/1176/1151\nf 1736/1176/1151 2719/1179/1154 666/1180/1155\nf 669/884/874 2888/1177/1152 1736/1176/1151\nf 1736/1176/1151 2915/1181/1156 669/884/874\nf 642/1174/1149 2734/1182/1157 1737/1183/1158\nf 1737/1183/1158 2890/1184/1159 642/1174/1149\nf 573/1185/1160 3121/1186/1161 1737/1183/1158\nf 1737/1183/1158 2734/1182/1157 573/1185/1160\nf 664/1187/1162 2910/1188/1163 1737/1183/1158\nf 1737/1183/1158 3121/1186/1161 664/1187/1162\nf 665/944/925 2890/1184/1159 1737/1183/1158\nf 1737/1183/1158 2910/1188/1163 665/944/925\nf 641/974/955 2862/1189/1164 1738/1190/1165\nf 1738/1190/1165 2892/975/956 641/974/955\nf 558/1191/1166 2714/1192/1167 1738/1190/1165\nf 1738/1190/1165 2862/1189/1164 558/1191/1166\nf 595/583/575 2868/582/574 1738/1190/1165\nf 1738/1190/1165 2714/1192/1167 595/583/575\nf 651/581/573 2892/975/956 1738/1190/1165\nf 1738/1190/1165 2868/582/574 651/581/573\nf 634/1022/1003 2855/1193/1168 1739/1194/1169\nf 1739/1194/1169 2893/1023/1004 634/1022/1003\nf 570/1026/1007 2817/1029/1010 1739/1194/1169\nf 1739/1194/1169 2855/1193/1168 570/1026/1007\nf 610/1033/1014 2871/1195/1170 1739/1194/1169\nf 1739/1194/1169 2817/1029/1010 610/1033/1014\nf 654/1024/1005 2893/1023/1004 1739/1194/1169\nf 1739/1194/1169 2871/1195/1170 654/1024/1005\nf 632/1047/1028 2853/1196/1171 1740/1197/1172\nf 1740/1197/1172 2894/1048/1029 632/1047/1028\nf 543/999/980 2813/1002/983 1740/1197/1172\nf 1740/1197/1172 2853/1196/1171 543/999/980\nf 606/629/619 2872/1162/1137 1740/1197/1172\nf 1740/1197/1172 2813/1002/983 606/629/619\nf 655/1049/1030 2894/1048/1029 1740/1197/1172\nf 1740/1197/1172 2872/1162/1137 655/1049/1030\nf 654/1024/1005 2871/1195/1170 1741/1198/1173\nf 1741/1198/1173 2896/1199/1174 654/1024/1005\nf 610/1033/1014 2957/1200/1175 1741/1198/1173\nf 1741/1198/1173 2871/1195/1170 610/1033/1014\nf 705/1201/1176 2965/1202/1177 1741/1198/1173\nf 1741/1198/1173 2957/1200/1175 705/1201/1176\nf 707/1099/1080 2896/1199/1174 1741/1198/1173\nf 1741/1198/1173 2965/1202/1177 707/1099/1080\nf 641/974/955 2733/973/954 1742/1203/1178\nf 1742/1203/1178 2897/1204/1179 641/974/955\nf 572/972/953 2920/1205/1180 1742/1203/1178\nf 1742/1203/1178 2733/973/954 572/972/953\nf 675/1206/1181 2927/1207/1182 1742/1203/1178\nf 1742/1203/1178 2920/1205/1180 675/1206/1181\nf 676/1208/1183 2897/1204/1179 1742/1203/1178\nf 1742/1203/1178 2927/1207/1182 676/1208/1183\nf 1043/1209/1184 3644/1210/1185 1743/1211/1186\nf 1743/1211/1186 2902/1212/1186 1043/1209/1184\nf 1044/1213/1187 3645/1214/1186 1743/1211/1186\nf 1743/1211/1186 3644/1210/1185 1044/1213/1187\nf 1037/1215/1186 2697/1216/1186 1743/1211/1186\nf 1743/1211/1186 3645/1214/1186 1037/1215/1186\nf 658/1217/1186 2902/1212/1186 1743/1211/1186\nf 1743/1211/1186 2697/1216/1186 658/1217/1186\nf 921/1218/1188 3396/1219/1189 1744/1220/1190\nf 1744/1220/1190 2903/1221/1191 921/1218/1188\nf 912/1222/1192 2696/1223/1193 1744/1220/1190\nf 1744/1220/1190 3396/1219/1189 912/1222/1192\nf 733/790/780 3046/1224/1194 1744/1220/1190\nf 1744/1220/1190 2696/1223/1193 733/790/780\nf 751/1225/1195 2903/1221/1191 1744/1220/1190\nf 1744/1220/1190 3046/1224/1194 751/1225/1195\nf 658/1217/1186 2697/1216/1186 1745/1226/1186\nf 1745/1226/1186 2904/1227/1186 658/1217/1186\nf 1037/1215/1186 3638/1228/1186 1745/1226/1186\nf 1745/1226/1186 2697/1216/1186 1037/1215/1186\nf 1038/1229/1186 3639/1230/1186 1745/1226/1186\nf 1745/1226/1186 3638/1228/1186 1038/1229/1186\nf 1039/1231/1186 2904/1227/1186 1745/1226/1186\nf 1745/1226/1186 3639/1230/1186 1039/1231/1186\nf 659/1232/1196 2899/1233/1197 1746/1234/1198\nf 1746/1234/1198 2905/1235/1199 659/1232/1196\nf 569/1156/1131 2730/1154/1129 1746/1234/1198\nf 1746/1234/1198 2899/1233/1197 569/1156/1131\nf 640/606/598 2901/1236/1200 1746/1234/1198\nf 1746/1234/1198 2730/1154/1129 640/606/598\nf 661/1237/1201 2905/1235/1199 1746/1234/1198\nf 1746/1234/1198 2901/1236/1200 661/1237/1201\nf 982/728/718 4087/1238/1202 1747/1239/1203\nf 1747/1239/1203 2907/729/719 982/728/718\nf 1254/930/911 3529/933/914 1747/1239/1203\nf 1747/1239/1203 4087/1238/1202 1254/930/911\nf 744/937/918 3047/1240/1204 1747/1239/1203\nf 1747/1239/1203 3529/933/914 744/937/918\nf 752/730/720 2907/729/719 1747/1239/1203\nf 1747/1239/1203 3047/1240/1204 752/730/720\nf 662/918/899 2906/1241/1205 1748/1242/1206\nf 1748/1242/1206 2908/919/900 662/918/899\nf 561/733/723 2722/736/726 1748/1242/1206\nf 1748/1242/1206 2906/1241/1205 561/733/723\nf 720/741/731 2995/1243/1207 1748/1242/1206\nf 1748/1242/1206 2722/736/726 720/741/731\nf 725/920/901 2908/919/900 1748/1242/1206\nf 1748/1242/1206 2995/1243/1207 725/920/901\nf 663/942/923 3120/1244/1208 1749/1245/1209\nf 1749/1245/1209 2909/943/924 663/942/923\nf 560/1178/1153 2863/1175/1150 1749/1245/1209\nf 1749/1245/1209 3120/1244/1208 560/1178/1153\nf 642/1174/1149 2890/1184/1159 1749/1245/1209\nf 1749/1245/1209 2863/1175/1150 642/1174/1149\nf 665/944/925 2909/943/924 1749/1245/1209\nf 1749/1245/1209 2890/1184/1159 665/944/925\nf 664/1187/1162 2769/1246/1210 1750/1247/1211\nf 1750/1247/1211 2910/1188/1163 664/1187/1162\nf 587/826/816 2867/825/815 1750/1247/1211\nf 1750/1247/1211 2769/1246/1210 587/826/816\nf 648/824/814 3123/945/926 1750/1247/1211\nf 1750/1247/1211 2867/825/815 648/824/814\nf 665/944/925 2910/1188/1163 1750/1247/1211\nf 1750/1247/1211 3123/945/926 665/944/925\nf 667/737/727 2911/1248/1212 1751/1249/1213\nf 1751/1249/1213 2912/738/728 667/737/727\nf 580/1250/1214 2763/1251/1215 1751/1249/1213\nf 1751/1249/1213 2911/1248/1212 580/1250/1214\nf 719/1252/1216 2996/1253/1217 1751/1249/1213\nf 1751/1249/1213 2763/1251/1215 719/1252/1216\nf 726/739/729 2912/738/728 1751/1249/1213\nf 1751/1249/1213 2996/1253/1217 726/739/729\nf 668/882/872 3126/1254/1218 1752/1255/1219\nf 1752/1255/1219 2913/883/873 668/882/872\nf 573/1185/1160 2734/1182/1157 1752/1255/1219\nf 1752/1255/1219 3126/1254/1218 573/1185/1160\nf 642/1174/1149 2888/1177/1152 1752/1255/1219\nf 1752/1255/1219 2734/1182/1157 642/1174/1149\nf 669/884/874 2913/883/873 1752/1255/1219\nf 1752/1255/1219 2888/1177/1152 669/884/874\nf 1245/909/890 3537/1256/1220 1753/1257/1221\nf 1753/1257/1221 2914/910/891 1245/909/890\nf 981/724/714 2721/727/717 1753/1257/1221\nf 1753/1257/1221 3537/1256/1220 981/724/714\nf 735/732/722 3048/1258/1222 1753/1257/1221\nf 1753/1257/1221 2721/727/717 735/732/722\nf 753/911/892 2914/910/891 1753/1257/1221\nf 1753/1257/1221 3048/1258/1222 753/911/892\nf 666/1180/1155 3117/1259/1223 1754/1260/1224\nf 1754/1260/1224 2915/1181/1156 666/1180/1155\nf 581/1261/1225 2866/1262/1226 1754/1260/1224\nf 1754/1260/1224 3117/1259/1223 581/1261/1225\nf 646/886/876 3118/885/875 1754/1260/1224\nf 1754/1260/1224 2866/1262/1226 646/886/876\nf 669/884/874 2915/1181/1156 1754/1260/1224\nf 1754/1260/1224 3118/885/875 669/884/874\nf 670/1068/1049 2916/1263/1227 1755/1264/1228\nf 1755/1264/1228 2922/1069/1050 670/1068/1049\nf 590/1265/1229 2778/1266/1230 1755/1264/1228\nf 1755/1264/1228 2916/1263/1227 590/1265/1229\nf 710/1128/1109 2978/1267/1231 1755/1264/1228\nf 1755/1264/1228 2778/1266/1230 710/1128/1109\nf 714/1070/1051 2922/1069/1050 1755/1264/1228\nf 1755/1264/1228 2978/1267/1231 714/1070/1051\nf 673/1077/1058 2918/1268/1232 1756/1269/1233\nf 1756/1269/1233 2923/1078/1059 673/1077/1058\nf 589/955/936 2779/958/939 1756/1269/1233\nf 1756/1269/1233 2918/1268/1232 589/955/936\nf 604/963/944 2799/1270/1234 1756/1269/1233\nf 1756/1269/1233 2779/958/939 604/963/944\nf 672/1079/1060 2923/1078/1059 1756/1269/1233\nf 1756/1269/1233 2799/1270/1234 672/1079/1060\nf 675/1206/1181 2920/1205/1180 1757/1271/1235\nf 1757/1271/1235 2924/1272/1236 675/1206/1181\nf 572/972/953 3006/1273/1237 1757/1271/1235\nf 1757/1271/1235 2920/1205/1180 572/972/953\nf 734/982/963 3049/1274/1238 1757/1271/1235\nf 1757/1271/1235 3006/1273/1237 734/982/963\nf 754/1275/1239 2924/1272/1236 1757/1271/1235\nf 1757/1271/1235 3049/1274/1238 754/1275/1239\nf 674/1276/1240 2919/1277/1241 1758/1278/1242\nf 1758/1278/1242 2925/1279/1243 674/1276/1240\nf 558/1191/1166 2862/1189/1164 1758/1278/1242\nf 1758/1278/1242 2919/1277/1241 558/1191/1166\nf 641/974/955 2897/1204/1179 1758/1278/1242\nf 1758/1278/1242 2862/1189/1164 641/974/955\nf 676/1208/1183 2925/1279/1243 1758/1278/1242\nf 1758/1278/1242 2897/1204/1179 676/1208/1183\nf 678/1280/1244 2929/1281/1245 1759/1282/1246\nf 1759/1282/1246 2931/1283/1247 678/1280/1244\nf 617/1064/1045 2830/1067/1048 1759/1282/1246\nf 1759/1282/1246 2929/1281/1245 617/1064/1045\nf 712/1072/1053 2979/1284/1248 1759/1282/1246\nf 1759/1282/1246 2830/1067/1048 712/1072/1053\nf 711/667/657 2931/1283/1247 1759/1282/1246\nf 1759/1282/1246 2979/1284/1248 711/667/657\nf 677/710/700 2928/1285/1249 1760/1286/1250\nf 1760/1286/1250 2932/711/701 677/710/700\nf 616/1073/1054 2831/1076/1057 1760/1286/1250\nf 1760/1286/1250 2928/1285/1249 616/1073/1054\nf 618/1081/1062 2829/1287/1251 1760/1286/1250\nf 1760/1286/1250 2831/1076/1057 618/1081/1062\nf 679/712/702 2932/711/701 1760/1286/1250\nf 1760/1286/1250 2829/1287/1251 679/712/702\nf 678/1280/1244 2931/1283/1247 1761/1288/1252\nf 1761/1288/1252 2960/1289/1253 678/1280/1244\nf 711/667/657 2980/1290/1254 1761/1288/1252\nf 1761/1288/1252 2931/1283/1247 711/667/657\nf 717/1291/1255 2975/1292/1256 1761/1288/1252\nf 1761/1288/1252 2980/1290/1254 717/1291/1255\nf 708/1293/1257 2960/1289/1253 1761/1288/1252\nf 1761/1288/1252 2975/1292/1256 708/1293/1257\nf 7277/1294/1258 7278/1295/1259 1762/1296/1260\nf 1762/1296/1260 2934/1297/1261 7277/1294/1258\nf 7279/1298/1262 2936/1299/1263 1762/1296/1260\nf 1762/1296/1260 7278/1295/1259 7279/1298/1262\nf 716/1300/1264 2981/1301/1265 1762/1296/1260\nf 1762/1296/1260 2936/1299/1263 716/1300/1264\nf 715/1302/1266 2934/1297/1261 1762/1296/1260\nf 1762/1296/1260 2981/1301/1265 715/1302/1266\nf 760/1303/1267 3057/1304/1268 1763/1305/1269\nf 1763/1305/1269 3058/1306/1270 760/1303/1267\nf 728/1307/1271 2998/1308/1272 1763/1305/1269\nf 1763/1305/1269 3057/1304/1268 728/1307/1271\nf 681/1309/1273 2974/1310/1274 1763/1305/1269\nf 1763/1305/1269 2998/1308/1272 681/1309/1273\nf 716/1300/1264 3058/1306/1270 1763/1305/1269\nf 1763/1305/1269 2974/1310/1274 716/1300/1264\nf 685/662/652 3130/1311/1275 1764/1312/1276\nf 1764/1312/1276 2939/663/653 685/662/652\nf 7280/1313/1277 7281/1314/1278 1764/1312/1276\nf 1764/1312/1276 3130/1311/1275 7280/1313/1277\nf 7282/1315/1279 3129/1316/1280 1764/1312/1276\nf 1764/1312/1276 7281/1314/1278 7282/1315/1279\nf 684/664/654 2939/663/653 1764/1312/1276\nf 1764/1312/1276 3129/1316/1280 684/664/654\nf 701/669/659 3145/1317/1281 1765/1318/1282\nf 1765/1318/1282 2940/670/660 701/669/659\nf 7283/1319/1283 7284/1320/1284 1765/1318/1282\nf 1765/1318/1282 3145/1317/1281 7283/1319/1283\nf 7280/1313/1277 3130/1311/1275 1765/1318/1282\nf 1765/1318/1282 7284/1320/1284 7280/1313/1277\nf 685/662/652 2940/670/660 1765/1318/1282\nf 1765/1318/1282 3130/1311/1275 685/662/652\nf 690/860/850 3135/1321/1285 1766/1322/1286\nf 1766/1322/1286 2941/1323/1287 690/860/850\nf 7285/1324/1288 3236/1325/1289 1766/1322/1286\nf 1766/1322/1286 3135/1321/1285 7285/1324/1288\nf 7286/1326/1290 3255/1327/1291 1766/1322/1286\nf 1766/1322/1286 3236/1325/1289 7286/1326/1290\nf 845/677/667 2941/1323/1287 1766/1322/1286\nf 1766/1322/1286 3255/1327/1291 845/677/667\nf 692/686/676 3137/1328/1292 1767/1329/1293\nf 1767/1329/1293 2942/687/677 692/686/676\nf 7287/1330/1294 7288/1331/1295 1767/1329/1293\nf 1767/1329/1293 3137/1328/1292 7287/1330/1294\nf 7289/1332/1296 3132/1333/1297 1767/1329/1293\nf 1767/1329/1293 7288/1331/1295 7289/1332/1296\nf 687/688/678 2942/687/677 1767/1329/1293\nf 1767/1329/1293 3132/1333/1297 687/688/678\nf 699/1334/1298 3143/1335/1299 1768/1336/1300\nf 1768/1336/1300 3127/1337/1301 699/1334/1298\nf 7290/1338/1302 7291/1339/1303 1768/1336/1300\nf 1768/1336/1300 3143/1335/1299 7290/1338/1302\nf 7292/1340/1304 3133/1341/1305 1768/1336/1300\nf 1768/1336/1300 7291/1339/1303 7292/1340/1304\nf 688/1342/1306 3127/1337/1301 1768/1336/1300\nf 1768/1336/1300 3133/1341/1305 688/1342/1306\nf 682/1343/1307 4137/1344/1308 1769/1345/1309\nf 1769/1345/1309 2943/1346/1310 682/1343/1307\nf 1360/1347/1311 3009/1348/1312 1769/1345/1309\nf 1769/1345/1309 4137/1344/1308 1360/1347/1311\nf 737/746/736 3051/1349/1313 1769/1345/1309\nf 1769/1345/1309 3009/1348/1312 737/746/736\nf 756/1350/1314 2943/1346/1310 1769/1345/1309\nf 1769/1345/1309 3051/1349/1313 756/1350/1314\nf 695/858/848 3140/1351/1315 1770/1352/1316\nf 1770/1352/1316 2944/859/849 695/858/848\nf 7293/1353/1317 7294/1354/1318 1770/1352/1316\nf 1770/1352/1316 3140/1351/1315 7293/1353/1317\nf 7285/1324/1288 3135/1321/1285 1770/1352/1316\nf 1770/1352/1316 7294/1354/1318 7285/1324/1288\nf 690/860/850 2944/859/849 1770/1352/1316\nf 1770/1352/1316 3135/1321/1285 690/860/850\nf 698/1355/1319 3142/1356/1320 1771/1357/1321\nf 1771/1357/1321 3124/1358/1322 698/1355/1319\nf 7295/1359/1323 7296/1360/1324 1771/1357/1321\nf 1771/1357/1321 3142/1356/1320 7295/1359/1323\nf 7287/1330/1294 3137/1328/1292 1771/1357/1321\nf 1771/1357/1321 7296/1360/1324 7287/1330/1294\nf 692/686/676 3124/1358/1322 1771/1357/1321\nf 1771/1357/1321 3137/1328/1292 692/686/676\nf 694/995/976 3139/1361/1325 1772/1362/1326\nf 1772/1362/1326 2946/1363/1327 694/995/976\nf 7297/1364/1328 7298/1365/1329 1772/1362/1326\nf 1772/1362/1326 3139/1361/1325 7297/1364/1328\nf 7299/1366/1330 3138/1367/1331 1772/1362/1326\nf 1772/1362/1326 7298/1365/1329 7299/1366/1330\nf 693/1368/1332 2946/1363/1327 1772/1362/1326\nf 1772/1362/1326 3138/1367/1331 693/1368/1332\nf 686/679/669 3131/1369/1333 1773/1370/1334\nf 1773/1370/1334 2947/994/975 686/679/669\nf 7300/1371/1335 7301/1372/1336 1773/1370/1334\nf 1773/1370/1334 3131/1369/1333 7300/1371/1335\nf 7297/1364/1328 3139/1361/1325 1773/1370/1334\nf 1773/1370/1334 7301/1372/1336 7297/1364/1328\nf 694/995/976 2947/994/975 1773/1370/1334\nf 1773/1370/1334 3139/1361/1325 694/995/976\nf 687/688/678 3132/1333/1297 1774/1373/1337\nf 1774/1373/1337 2948/1060/1041 687/688/678\nf 7289/1332/1296 7302/1374/1338 1774/1373/1337\nf 1774/1373/1337 3132/1333/1297 7289/1332/1296\nf 7293/1353/1317 3140/1351/1315 1774/1373/1337\nf 1774/1373/1337 7302/1374/1338 7293/1353/1317\nf 695/858/848 2948/1060/1041 1774/1373/1337\nf 1774/1373/1337 3140/1351/1315 695/858/848\nf 700/1375/1339 3144/1376/1340 1775/1377/1341\nf 1775/1377/1341 2949/1378/1342 700/1375/1339\nf 7303/1379/1343 7304/1380/1344 1775/1377/1341\nf 1775/1377/1341 3144/1376/1340 7303/1379/1343\nf 7305/1381/1345 3141/1382/1346 1775/1377/1341\nf 1775/1377/1341 7304/1380/1344 7305/1381/1345\nf 696/1383/1347 2949/1378/1342 1775/1377/1341\nf 1775/1377/1341 3141/1382/1346 696/1383/1347\nf 688/1342/1306 3133/1341/1305 1776/1384/1348\nf 1776/1384/1348 2951/1385/1349 688/1342/1306\nf 7292/1340/1304 7306/1386/1350 1776/1384/1348\nf 1776/1384/1348 3133/1341/1305 7292/1340/1304\nf 7295/1359/1323 3142/1356/1320 1776/1384/1348\nf 1776/1384/1348 7306/1386/1350 7295/1359/1323\nf 698/1355/1319 2951/1385/1349 1776/1384/1348\nf 1776/1384/1348 3142/1356/1320 698/1355/1319\nf 691/1387/1351 3136/1388/1352 1777/1389/1353\nf 1777/1389/1353 2952/1390/1354 691/1387/1351\nf 7307/1391/1355 7308/1392/1356 1777/1389/1353\nf 1777/1389/1353 3136/1388/1352 7307/1391/1355\nf 7290/1338/1302 3143/1335/1299 1777/1389/1353\nf 1777/1389/1353 7308/1392/1356 7290/1338/1302\nf 699/1334/1298 2952/1390/1354 1777/1389/1353\nf 1777/1389/1353 3143/1335/1299 699/1334/1298\nf 693/1368/1332 3138/1367/1331 1778/1393/1357\nf 1778/1393/1357 2953/1394/1358 693/1368/1332\nf 7299/1366/1330 7309/1395/1359 1778/1393/1357\nf 1778/1393/1357 3138/1367/1331 7299/1366/1330\nf 7303/1379/1343 3144/1376/1340 1778/1393/1357\nf 1778/1393/1357 7309/1395/1359 7303/1379/1343\nf 700/1375/1339 2953/1394/1358 1778/1393/1357\nf 1778/1393/1357 3144/1376/1340 700/1375/1339\nf 696/1383/1347 3141/1382/1346 1779/1396/1360\nf 1779/1396/1360 2954/1397/1361 696/1383/1347\nf 7305/1381/1345 7310/1398/1362 1779/1396/1360\nf 1779/1396/1360 3141/1382/1346 7305/1381/1345\nf 7283/1319/1283 3145/1317/1281 1779/1396/1360\nf 1779/1396/1360 7310/1398/1362 7283/1319/1283\nf 701/669/659 2954/1397/1361 1779/1396/1360\nf 1779/1396/1360 3145/1317/1281 701/669/659\nf 705/1201/1176 2957/1200/1175 1780/1399/1363\nf 1780/1399/1363 2961/1400/1364 705/1201/1176\nf 610/1033/1014 2810/1032/1013 1780/1399/1363\nf 1780/1399/1363 2957/1200/1175 610/1033/1014\nf 748/1031/1012 3052/1401/1365 1780/1399/1363\nf 1780/1399/1363 2810/1032/1013 748/1031/1012\nf 757/1402/1366 2961/1400/1364 1780/1399/1363\nf 1780/1399/1363 3052/1401/1365 757/1402/1366\nf 706/1092/1073 2958/1403/1367 1781/1404/1368\nf 1781/1404/1368 2962/1093/1074 706/1092/1073\nf 608/1019/1000 2808/1018/999 1781/1404/1368\nf 1781/1404/1368 2958/1403/1367 608/1019/1000\nf 609/1017/998 2955/1405/1369 1781/1404/1368\nf 1781/1404/1368 2808/1018/999 609/1017/998\nf 703/1094/1075 2962/1093/1074 1781/1404/1368\nf 1781/1404/1368 2955/1405/1369 703/1094/1075\nf 703/1094/1075 2955/1405/1369 1782/1406/1370\nf 1782/1406/1370 2963/1098/1079 703/1094/1075\nf 609/1017/998 2809/1025/1006 1782/1406/1370\nf 1782/1406/1370 2955/1405/1369 609/1017/998\nf 654/1024/1005 2896/1199/1174 1782/1406/1370\nf 1782/1406/1370 2809/1025/1006 654/1024/1005\nf 707/1099/1080 2963/1098/1079 1782/1406/1370\nf 1782/1406/1370 2896/1199/1174 707/1099/1080\nf 704/1104/1085 2956/1407/1371 1783/1408/1372\nf 1783/1408/1372 2964/1105/1086 704/1104/1085\nf 7311/1409/1373 7312/1410/1374 1783/1408/1372\nf 1783/1408/1372 2956/1407/1371 7311/1409/1373\nf 608/1019/1000 2958/1403/1367 1783/1408/1372\nf 1783/1408/1372 7312/1410/1374 608/1019/1000\nf 706/1092/1073 2964/1105/1086 1783/1408/1372\nf 1783/1408/1372 2958/1403/1367 706/1092/1073\nf 1014/1086/1067 2834/1083/1064 1784/1411/1375\nf 1784/1411/1375 3585/1412/1376 1014/1086/1067\nf 621/1082/1063 2873/1413/1377 1784/1411/1375\nf 1784/1411/1375 2834/1083/1064 621/1082/1063\nf 1012/1414/1378 3584/1415/1379 1784/1411/1375\nf 1784/1411/1375 2873/1413/1377 1012/1414/1378\nf 1013/1416/1380 3585/1412/1376 1784/1411/1375\nf 1784/1411/1375 3584/1415/1379 1013/1416/1380\nf 7313/1417/1381 7314/1418/1382 1785/1419/1383\nf 1785/1419/1383 2966/1420/1384 7313/1417/1381\nf 7277/1294/1258 2934/1297/1261 1785/1419/1383\nf 1785/1419/1383 7314/1418/1382 7277/1294/1258\nf 715/1302/1266 2982/1421/1385 1785/1419/1383\nf 1785/1419/1383 2934/1297/1261 715/1302/1266\nf 717/1291/1255 2966/1420/1384 1785/1419/1383\nf 1785/1419/1383 2982/1421/1385 717/1291/1255\nf 709/950/931 3511/1422/1386 1786/1423/1387\nf 1786/1423/1387 3510/951/932 709/950/931\nf 977/984/965 2791/987/968 1786/1423/1387\nf 1786/1423/1387 3511/1422/1386 977/984/965\nf 976/989/970 3509/1424/1388 1786/1423/1387\nf 1786/1423/1387 2791/987/968 976/989/970\nf 964/952/933 3510/951/932 1786/1423/1387\nf 1786/1423/1387 3509/1424/1388 964/952/933\nf 710/1128/1109 2784/1127/1108 1787/1425/1389\nf 1787/1425/1389 2967/1426/1390 710/1128/1109\nf 594/990/971 2792/993/974 1787/1425/1389\nf 1787/1425/1389 2784/1127/1108 594/990/971\nf 694/995/976 2946/1363/1327 1787/1425/1389\nf 1787/1425/1389 2792/993/974 694/995/976\nf 693/1368/1332 2967/1426/1390 1787/1425/1389\nf 1787/1425/1389 2946/1363/1327 693/1368/1332\nf 714/1070/1051 2971/1427/1391 1788/1428/1392\nf 1788/1428/1392 2976/1071/1052 714/1070/1051\nf 700/1375/1339 2949/1378/1342 1788/1428/1392\nf 1788/1428/1392 2971/1427/1391 700/1375/1339\nf 696/1383/1347 2969/1429/1393 1788/1428/1392\nf 1788/1428/1392 2949/1378/1342 696/1383/1347\nf 712/1072/1053 2976/1071/1052 1788/1428/1392\nf 1788/1428/1392 2969/1429/1393 712/1072/1053\nf 710/1128/1109 2778/1266/1230 1789/1430/1394\nf 1789/1430/1394 2977/1129/1110 710/1128/1109\nf 590/1265/1229 2777/1431/1395 1789/1430/1394\nf 1789/1430/1394 2778/1266/1230 590/1265/1229\nf 627/1432/1396 2970/1433/1397 1789/1430/1394\nf 1789/1430/1394 2777/1431/1395 627/1432/1396\nf 713/1130/1111 2977/1129/1110 1789/1430/1394\nf 1789/1430/1394 2970/1433/1397 713/1130/1111\nf 710/1128/1109 2967/1426/1390 1790/1434/1398\nf 1790/1434/1398 2978/1267/1231 710/1128/1109\nf 693/1368/1332 2953/1394/1358 1790/1434/1398\nf 1790/1434/1398 2967/1426/1390 693/1368/1332\nf 700/1375/1339 2971/1427/1391 1790/1434/1398\nf 1790/1434/1398 2953/1394/1358 700/1375/1339\nf 714/1070/1051 2978/1267/1231 1790/1434/1398\nf 1790/1434/1398 2971/1427/1391 714/1070/1051\nf 712/1072/1053 2969/1429/1393 1791/1435/1399\nf 1791/1435/1399 2979/1284/1248 712/1072/1053\nf 696/1383/1347 2954/1397/1361 1791/1435/1399\nf 1791/1435/1399 2969/1429/1393 696/1383/1347\nf 701/669/659 2972/668/658 1791/1435/1399\nf 1791/1435/1399 2954/1397/1361 701/669/659\nf 711/667/657 2979/1284/1248 1791/1435/1399\nf 1791/1435/1399 2972/668/658 711/667/657\nf 711/667/657 2828/665/655 1792/1436/1400\nf 1792/1436/1400 2980/1290/1254 711/667/657\nf 553/660/650 7315/1437/1401 1792/1436/1400\nf 1792/1436/1400 2828/665/655 553/660/650\nf 7313/1417/1381 2966/1420/1384 1792/1436/1400\nf 1792/1436/1400 7315/1437/1401 7313/1417/1381\nf 717/1291/1255 2980/1290/1254 1792/1436/1400\nf 1792/1436/1400 2966/1420/1384 717/1291/1255\nf 716/1300/1264 2974/1310/1274 1793/1438/1402\nf 1793/1438/1402 2981/1301/1265 716/1300/1264\nf 681/1309/1273 2935/1439/1403 1793/1438/1402\nf 1793/1438/1402 2974/1310/1274 681/1309/1273\nf 680/1440/1404 2973/1441/1405 1793/1438/1402\nf 1793/1438/1402 2935/1439/1403 680/1440/1404\nf 715/1302/1266 2981/1301/1265 1793/1438/1402\nf 1793/1438/1402 2973/1441/1405 715/1302/1266\nf 715/1302/1266 2973/1441/1405 1794/1442/1406\nf 1794/1442/1406 2982/1421/1385 715/1302/1266\nf 680/1440/1404 2933/1443/1407 1794/1442/1406\nf 1794/1442/1406 2973/1441/1405 680/1440/1404\nf 708/1293/1257 2975/1292/1256 1794/1442/1406\nf 1794/1442/1406 2933/1443/1407 708/1293/1257\nf 717/1291/1255 2982/1421/1385 1794/1442/1406\nf 1794/1442/1406 2975/1292/1256 717/1291/1255\nf 721/651/641 2767/923/904 1795/1444/1408\nf 1795/1444/1408 3502/652/642 721/651/641\nf 585/922/903 3480/1445/1409 1795/1444/1408\nf 1795/1444/1408 2767/923/904 585/922/903\nf 960/1446/1410 3496/1447/1411 1795/1444/1408\nf 1795/1444/1408 3480/1445/1409 960/1446/1410\nf 965/653/643 3502/652/642 1795/1444/1408\nf 1795/1444/1408 3496/1447/1411 965/653/643\nf 726/739/729 2992/1448/1412 1796/1449/1413\nf 1796/1449/1413 3128/740/730 726/739/729\nf 699/1334/1298 3127/1337/1301 1796/1449/1413\nf 1796/1449/1413 2992/1448/1412 699/1334/1298\nf 688/1342/1306 2984/1450/1414 1796/1449/1413\nf 1796/1449/1413 3127/1337/1301 688/1342/1306\nf 720/741/731 3128/740/730 1796/1449/1413\nf 1796/1449/1413 2984/1450/1414 720/741/731\nf 718/891/881 3074/1451/1415 1797/1452/1416\nf 1797/1452/1416 3084/892/882 718/891/881\nf 788/1453/1417 3110/1454/1418 1797/1452/1416\nf 1797/1452/1416 3074/1451/1415 788/1453/1417\nf 789/1455/1419 3104/1456/1420 1797/1452/1416\nf 1797/1452/1416 3110/1454/1418 789/1455/1419\nf 767/893/883 3084/892/882 1797/1452/1416\nf 1797/1452/1416 3104/1456/1420 767/893/883\nf 719/1252/1216 3095/1457/1421 1798/1458/1422\nf 1798/1458/1422 2985/1459/1423 719/1252/1216\nf 779/1460/1424 3111/1461/1425 1798/1458/1422\nf 1798/1458/1422 3095/1457/1421 779/1460/1424\nf 785/1462/1426 3100/1463/1427 1798/1458/1422\nf 1798/1458/1422 3111/1461/1425 785/1462/1426\nf 691/1387/1351 2985/1459/1423 1798/1458/1422\nf 1798/1458/1422 3100/1463/1427 691/1387/1351\nf 725/920/901 2991/1464/1428 1799/1465/1429\nf 1799/1465/1429 3125/921/902 725/920/901\nf 698/1355/1319 3124/1358/1322 1799/1465/1429\nf 1799/1465/1429 2991/1464/1428 698/1355/1319\nf 692/686/676 2988/685/675 1799/1465/1429\nf 1799/1465/1429 3124/1358/1322 692/686/676\nf 722/684/674 3125/921/902 1799/1465/1429\nf 1799/1465/1429 2988/685/675 722/684/674\nf 722/684/674 2987/681/671 1800/1466/1430\nf 1800/1466/1430 2993/1117/1098 722/684/674\nf 555/680/670 2841/1136/1117 1800/1466/1430\nf 1800/1466/1430 2987/681/671 555/680/670\nf 624/1135/1116 2989/1467/1431 1800/1466/1430\nf 1800/1466/1430 2841/1136/1117 624/1135/1116\nf 723/1118/1099 2993/1117/1098 1800/1466/1430\nf 1800/1466/1430 2989/1467/1431 723/1118/1099\nf 719/1252/1216 2763/1251/1215 1801/1468/1432\nf 1801/1468/1432 2994/1469/1433 719/1252/1216\nf 580/1250/1214 2762/1470/1434 1801/1468/1432\nf 1801/1468/1432 2763/1251/1215 580/1250/1214\nf 660/1471/1435 2990/1472/1436 1801/1468/1432\nf 1801/1468/1432 2762/1470/1434 660/1471/1435\nf 724/1473/1437 2994/1469/1433 1801/1468/1432\nf 1801/1468/1432 2990/1472/1436 724/1473/1437\nf 720/741/731 2984/1450/1414 1802/1474/1438\nf 1802/1474/1438 2995/1243/1207 720/741/731\nf 688/1342/1306 2951/1385/1349 1802/1474/1438\nf 1802/1474/1438 2984/1450/1414 688/1342/1306\nf 698/1355/1319 2991/1464/1428 1802/1474/1438\nf 1802/1474/1438 2951/1385/1349 698/1355/1319\nf 725/920/901 2995/1243/1207 1802/1474/1438\nf 1802/1474/1438 2991/1464/1428 725/920/901\nf 719/1252/1216 2985/1459/1423 1803/1475/1439\nf 1803/1475/1439 2996/1253/1217 719/1252/1216\nf 691/1387/1351 2952/1390/1354 1803/1475/1439\nf 1803/1475/1439 2985/1459/1423 691/1387/1351\nf 699/1334/1298 2992/1448/1412 1803/1475/1439\nf 1803/1475/1439 2952/1390/1354 699/1334/1298\nf 726/739/729 2996/1253/1217 1803/1475/1439\nf 1803/1475/1439 2992/1448/1412 726/739/729\nf 1025/1476/1440 3612/1477/1441 1804/1478/1442\nf 1804/1478/1442 3611/1479/1443 1025/1476/1440\nf 1026/795/785 2741/798/788 1804/1478/1442\nf 1804/1478/1442 3612/1477/1441 1026/795/785\nf 1023/803/793 3610/1480/1444 1804/1478/1442\nf 1804/1478/1442 2741/798/788 1023/803/793\nf 1024/1481/1445 3611/1479/1443 1804/1478/1442\nf 1804/1478/1442 3610/1480/1444 1024/1481/1445\nf 731/702/692 3003/770/760 1805/1482/1446\nf 1805/1482/1446 3031/703/693 731/702/692\nf 567/769/759 2743/815/805 1805/1482/1446\nf 1805/1482/1446 3003/770/760 567/769/759\nf 602/819/809 2798/1483/1447 1805/1482/1446\nf 1805/1482/1446 2743/815/805 602/819/809\nf 746/704/694 3031/703/693 1805/1482/1446\nf 1805/1482/1446 2798/1483/1447 746/704/694\nf 752/730/720 3023/1484/1448 1806/1485/1449\nf 1806/1485/1449 3122/731/721 752/730/720\nf 983/1486/1450 3532/1487/1451 1806/1485/1449\nf 1806/1485/1449 3023/1484/1448 983/1486/1450\nf 984/1488/1452 3007/1489/1453 1806/1485/1449\nf 1806/1485/1449 3532/1487/1451 984/1488/1452\nf 735/732/722 3122/731/721 1806/1485/1449\nf 1806/1485/1449 3007/1489/1453 735/732/722\nf 737/746/736 3009/1348/1312 1807/1490/1454\nf 1807/1490/1454 3032/747/737 737/746/736\nf 1360/1347/1311 2686/1491/1455 1807/1490/1454\nf 1807/1490/1454 3009/1348/1312 1360/1347/1311\nf 778/1492/1456 3112/1493/1457 1807/1490/1454\nf 1807/1490/1454 2686/1491/1455 778/1492/1456\nf 786/748/738 3032/747/737 1807/1490/1454\nf 1807/1490/1454 3112/1493/1457 786/748/738\nf 740/755/745 3012/1494/1458 1808/1495/1459\nf 1808/1495/1459 3033/756/746 740/755/745\nf 1383/1496/1460 4201/1497/1461 1808/1495/1459\nf 1808/1495/1459 3012/1494/1458 1383/1496/1460\nf 1230/870/860 2755/873/863 1808/1495/1459\nf 1808/1495/1459 4201/1497/1461 1230/870/860\nf 741/757/747 3033/756/746 1808/1495/1459\nf 1808/1495/1459 2755/873/863 741/757/747\nf 730/764/754 2689/1498/1462 1809/1499/1463\nf 1809/1499/1463 3034/765/755 730/764/754\nf 1384/1500/1464 4203/1501/1465 1809/1499/1463\nf 1809/1499/1463 2689/1498/1462 1384/1500/1464\nf 1270/976/957 2790/979/960 1809/1499/1463\nf 1809/1499/1463 4203/1501/1465 1270/976/957\nf 745/766/756 3034/765/755 1809/1499/1463\nf 1809/1499/1463 2790/979/960 745/766/756\nf 731/702/692 2691/699/689 1810/1502/1466\nf 1810/1502/1466 3035/773/763 731/702/692\nf 548/698/688 2693/1503/1467 1810/1502/1466\nf 1810/1502/1466 2691/699/689 548/698/688\nf 550/1504/1468 2694/1505/1469 1810/1502/1466\nf 1810/1502/1466 2693/1503/1467 550/1504/1468\nf 732/774/764 3035/773/763 1810/1502/1466\nf 1810/1502/1466 2694/1505/1469 732/774/764\nf 772/781/771 3078/1506/1470 1811/1507/1471\nf 1811/1507/1471 3036/782/772 772/781/771\nf 1385/1508/1472 4206/1509/1473 1811/1507/1471\nf 1811/1507/1471 3078/1506/1470 1385/1508/1472\nf 1386/1510/1474 3079/1511/1475 1811/1507/1471\nf 1811/1507/1471 4206/1509/1473 1386/1510/1474\nf 773/783/773 3036/782/772 1811/1507/1471\nf 1811/1507/1471 3079/1511/1475 773/783/773\nf 733/790/780 2696/1223/1193 1812/1512/1476\nf 1812/1512/1476 3037/791/781 733/790/780\nf 912/1222/1192 3387/1513/1477 1812/1512/1476\nf 1812/1512/1476 2696/1223/1193 912/1222/1192\nf 913/1514/1478 3388/1515/1479 1812/1512/1476\nf 1812/1512/1476 3387/1513/1477 913/1514/1478\nf 914/792/782 3037/791/781 1812/1512/1476\nf 1812/1512/1476 3388/1515/1479 914/792/782\nf 738/808/798 3010/935/916 1813/1516/1480\nf 1813/1516/1480 3038/809/799 738/808/798\nf 545/934/915 4209/1517/1481 1813/1516/1480\nf 1813/1516/1480 3010/935/916 545/934/915\nf 1387/1518/1482 2801/1519/1483 1813/1516/1480\nf 1813/1516/1480 4209/1517/1481 1387/1518/1482\nf 747/810/800 3038/809/799 1813/1516/1480\nf 1813/1516/1480 2801/1519/1483 747/810/800\nf 730/764/754 3002/761/751 1814/1520/1484\nf 1814/1520/1484 3039/1521/1485 730/764/754\nf 566/760/750 3240/1522/1486 1814/1520/1484\nf 1814/1520/1484 3002/761/751 566/760/750\nf 840/839/829 3256/1523/1487 1814/1520/1484\nf 1814/1520/1484 3240/1522/1486 840/839/829\nf 846/876/866 3039/1521/1485 1814/1520/1484\nf 1814/1520/1484 3256/1523/1487 846/876/866\nf 729/902/539 3001/1524/539 1815/1525/539\nf 1815/1525/539 3040/903/539 729/902/539\nf 562/1143/539 2758/1142/539 1815/1525/539\nf 1815/1525/539 3001/1524/539 562/1143/539\nf 582/1141/539 3014/1526/539 1815/1525/539\nf 1815/1525/539 2758/1142/539 582/1141/539\nf 742/904/539 3040/903/539 1815/1525/539\nf 1815/1525/539 3014/1526/539 742/904/539\nf 753/911/892 3024/1527/1488 1816/1528/1489\nf 1816/1528/1489 3119/912/893 753/911/892\nf 985/1529/1490 3534/1530/1491 1816/1528/1489\nf 1816/1528/1489 3024/1527/1488 985/1529/1490\nf 986/1531/1492 3535/1532/1493 1816/1528/1489\nf 1816/1528/1489 3534/1530/1491 986/1531/1492\nf 987/913/894 3119/912/893 1816/1528/1489\nf 1816/1528/1489 3535/1532/1493 987/913/894\nf 738/808/798 2726/805/795 1817/1533/1494\nf 1817/1533/1494 3041/936/917 738/808/798\nf 565/804/794 2744/822/812 1817/1533/1494\nf 1817/1533/1494 2726/805/795 565/804/794\nf 587/826/816 3530/1534/1495 1817/1533/1494\nf 1817/1533/1494 2744/822/812 587/826/816\nf 744/937/918 3041/936/917 1817/1533/1494\nf 1817/1533/1494 3530/1534/1495 744/937/918\nf 734/982/963 3006/1273/1237 1818/1535/1496\nf 1818/1535/1496 3042/983/964 734/982/963\nf 572/972/953 2786/969/950 1818/1535/1496\nf 1818/1535/1496 3006/1273/1237 572/972/953\nf 596/768/758 3016/767/757 1818/1535/1496\nf 1818/1535/1496 2786/969/950 596/768/758\nf 745/766/756 3042/983/964 1818/1535/1496\nf 1818/1535/1496 3016/767/757 745/766/756\nf 739/624/614 3011/621/611 1819/1536/1497\nf 1819/1536/1497 3043/1030/1011 739/624/614\nf 1127/620/610 4220/1537/1498 1819/1536/1497\nf 1819/1536/1497 3011/621/611 1127/620/610\nf 1390/1538/1499 3019/1539/1500 1819/1536/1497\nf 1819/1536/1497 4220/1537/1498 1390/1538/1499\nf 748/1031/1012 3043/1030/1011 1819/1536/1497\nf 1819/1536/1497 3019/1539/1500 748/1031/1012\nf 736/1038/1019 3008/1540/1501 1820/1541/1502\nf 1820/1541/1502 3044/1039/1020 736/1038/1019\nf 563/1043/1024 2818/1046/1027 1820/1541/1502\nf 1820/1541/1502 3008/1540/1501 563/1043/1024\nf 611/1051/1032 3020/1542/1503 1820/1541/1502\nf 1820/1541/1502 2818/1046/1027 611/1051/1032\nf 749/1040/1021 3044/1039/1020 1820/1541/1502\nf 1820/1541/1502 3020/1542/1503 749/1040/1021\nf 1015/1088/1069 3587/1543/1504 1821/1544/1505\nf 1821/1544/1505 3045/1089/1070 1015/1088/1069\nf 1016/1545/1506 3588/1546/603 1821/1544/1505\nf 1821/1544/1505 3587/1543/1504 1016/1545/1506\nf 1126/619/603 3021/618/609 1821/1544/1505\nf 1821/1544/1505 3588/1546/603 1126/619/603\nf 750/617/608 3045/1089/1070 1821/1544/1505\nf 1821/1544/1505 3021/618/609 750/617/608\nf 733/790/780 3005/787/777 1822/1547/1507\nf 1822/1547/1507 3046/1224/1194 733/790/780\nf 916/786/776 3391/1548/1508 1822/1547/1507\nf 1822/1547/1507 3005/787/777 916/786/776\nf 917/1549/1509 3022/1550/1510 1822/1547/1507\nf 1822/1547/1507 3391/1548/1508 917/1549/1509\nf 751/1225/1195 3046/1224/1194 1822/1547/1507\nf 1822/1547/1507 3022/1550/1510 751/1225/1195\nf 744/937/918 3530/1534/1495 1823/1551/1511\nf 1823/1551/1511 3047/1240/1204 744/937/918\nf 587/826/816 3531/1552/1512 1823/1551/1511\nf 1823/1551/1511 3530/1534/1495 587/826/816\nf 983/1486/1450 3023/1484/1448 1823/1551/1511\nf 1823/1551/1511 3531/1552/1512 983/1486/1450\nf 752/730/720 3047/1240/1204 1823/1551/1511\nf 1823/1551/1511 3023/1484/1448 752/730/720\nf 735/732/722 3007/1489/1453 1824/1553/1513\nf 1824/1553/1513 3048/1258/1222 735/732/722\nf 984/1488/1452 3533/1554/1514 1824/1553/1513\nf 1824/1553/1513 3007/1489/1453 984/1488/1452\nf 985/1529/1490 3024/1527/1488 1824/1553/1513\nf 1824/1553/1513 3533/1554/1514 985/1529/1490\nf 753/911/892 3048/1258/1222 1824/1553/1513\nf 1824/1553/1513 3024/1527/1488 753/911/892\nf 734/982/963 2713/981/962 1825/1555/1515\nf 1825/1555/1515 3049/1274/1238 734/982/963\nf 557/980/961 4229/1556/1516 1825/1555/1515\nf 1825/1555/1515 2713/981/962 557/980/961\nf 1392/1557/1517 3025/1558/1518 1825/1555/1515\nf 1825/1555/1515 4229/1556/1516 1392/1557/1517\nf 754/1275/1239 3049/1274/1238 1825/1555/1515\nf 1825/1555/1515 3025/1558/1518 754/1275/1239\nf 7316/1559/1519 7317/1560/1520 1826/1561/1521\nf 1826/1561/1521 3050/1562/1522 7316/1559/1519\nf 7318/1563/1523 2700/1564/1524 1826/1561/1521\nf 1826/1561/1521 7317/1560/1520 7318/1563/1523\nf 1130/628/618 3026/627/617 1826/1561/1521\nf 1826/1561/1521 2700/1564/1524 1130/628/618\nf 755/626/616 3050/1562/1522 1826/1561/1521\nf 1826/1561/1521 3026/627/617 755/626/616\nf 737/746/736 2725/743/733 1827/1565/1525\nf 1827/1565/1525 3051/1349/1313 737/746/736\nf 564/742/732 3134/1566/1526 1827/1565/1525\nf 1827/1565/1525 2725/743/733 564/742/732\nf 689/1158/1133 3027/1567/1527 1827/1565/1525\nf 1827/1565/1525 3134/1566/1526 689/1158/1133\nf 756/1350/1314 3051/1349/1313 1827/1565/1525\nf 1827/1565/1525 3027/1567/1527 756/1350/1314\nf 748/1031/1012 3019/1539/1500 1828/1568/1528\nf 1828/1568/1528 3052/1401/1365 748/1031/1012\nf 1390/1538/1499 4234/1569/1529 1828/1568/1528\nf 1828/1568/1528 3019/1539/1500 1390/1538/1499\nf 702/1570/1530 3028/1571/1531 1828/1568/1528\nf 1828/1568/1528 4234/1569/1529 702/1570/1530\nf 757/1402/1366 3052/1401/1365 1828/1568/1528\nf 1828/1568/1528 3028/1571/1531 757/1402/1366\nf 721/651/641 2986/1572/1532 1829/1573/1533\nf 1829/1573/1533 3054/926/907 721/651/641\nf 540/548/540 2680/551/543 1829/1573/1533\nf 1829/1573/1533 2986/1572/1532 540/548/540\nf 630/556/548 2889/1574/1534 1829/1573/1533\nf 1829/1573/1533 2680/551/543 630/556/548\nf 758/927/908 3054/926/907 1829/1573/1533\nf 1829/1573/1533 2889/1574/1534 758/927/908\nf 709/950/931 2968/947/928 1830/1575/1535\nf 1830/1575/1535 3056/966/947 709/950/931\nf 588/946/927 2776/1576/1536 1830/1575/1535\nf 1830/1575/1535 2968/947/928 588/946/927\nf 649/1577/1537 2891/1578/1538 1830/1575/1535\nf 1830/1575/1535 2776/1576/1536 649/1577/1537\nf 759/967/948 3056/966/947 1830/1575/1535\nf 1830/1575/1535 2891/1578/1538 759/967/948\nf 716/1300/1264 2936/1299/1263 1831/1579/1539\nf 1831/1579/1539 3058/1306/1270 716/1300/1264\nf 7279/1298/1262 2997/1580/1540 1831/1579/1539\nf 1831/1579/1539 2936/1299/1263 7279/1298/1262\nf 7319/1581/1541 2999/1582/1542 1831/1579/1539\nf 1831/1579/1539 2997/1580/1540 7319/1581/1541\nf 760/1303/1267 3058/1306/1270 1831/1579/1539\nf 1831/1579/1539 2999/1582/1542 760/1303/1267\nf 539/539/539 3094/1583/539 1832/1584/1543\nf 1832/1584/1543 3060/540/539 539/539/539\nf 777/1585/539 3113/1586/1544 1832/1584/1543\nf 1832/1584/1543 3094/1583/539 777/1585/539\nf 782/1587/1545 3097/1588/1546 1832/1584/1543\nf 1832/1584/1543 3113/1586/1544 782/1587/1545\nf 761/543/539 3060/540/539 1832/1584/1543\nf 1832/1584/1543 3097/1588/1546 761/543/539\nf 727/1003/984 7320/1589/1547 1833/1590/1548\nf 1833/1590/1548 3061/1004/985 727/1003/984\nf 542/1005/986 2814/1008/989 1833/1590/1548\nf 1833/1590/1548 7320/1589/1547 542/1005/986\nf 607/633/623 3061/1004/985 1833/1590/1548\nf 1833/1590/1548 2814/1008/989 607/633/623\nf 1042/1591/1549 3643/1592/1550 1834/1593/1186\nf 1834/1593/1186 3642/1594/1186 1042/1591/1549\nf 1043/1209/1184 2902/1212/1186 1834/1593/1186\nf 1834/1593/1186 3643/1592/1550 1043/1209/1184\nf 658/1217/1186 2898/1595/1186 1834/1593/1186\nf 1834/1593/1186 2902/1212/1186 658/1217/1186\nf 1041/1596/1186 3642/1594/1186 1834/1593/1186\nf 1834/1593/1186 2898/1595/1186 1041/1596/1186\nf 919/1597/1551 3067/1598/1552 1835/1599/1553\nf 1835/1599/1553 3393/1600/1554 919/1597/1551\nf 751/1225/1195 3022/1550/1510 1835/1599/1553\nf 1835/1599/1553 3067/1598/1552 751/1225/1195\nf 917/1549/1509 3392/1601/1555 1835/1599/1553\nf 1835/1599/1553 3022/1550/1510 917/1549/1509\nf 918/1602/1556 3393/1600/1554 1835/1599/1553\nf 1835/1599/1553 3392/1601/1555 918/1602/1556\nf 7321/1603/1557 3066/1604/1558 1836/1605/1559\nf 1836/1605/1559 7322/1606/1560 7321/1603/1557\nf 724/1473/1437 2990/1472/1436 1836/1605/1559\nf 1836/1605/1559 3066/1604/1558 724/1473/1437\nf 660/1471/1435 2900/1607/1561 1836/1605/1559\nf 1836/1605/1559 2990/1472/1436 660/1471/1435\nf 7323/1608/1562 7322/1606/1560 1836/1605/1559\nf 1836/1605/1559 2900/1607/1561 7323/1608/1562\nf 763/1609/1563 3062/1610/1564 1837/1611/1565\nf 1837/1611/1565 3071/1612/1566 763/1609/1563\nf 659/1232/1196 2905/1235/1199 1837/1611/1565\nf 1837/1611/1565 3062/1610/1564 659/1232/1196\nf 661/1237/1201 3063/1613/1567 1837/1611/1565\nf 1837/1611/1565 2905/1235/1199 661/1237/1201\nf 764/1614/1568 3071/1612/1566 1837/1611/1565\nf 1837/1611/1565 3063/1613/1567 764/1614/1568\nf 1041/1596/1186 2898/1595/1186 1838/1615/1186\nf 1838/1615/1186 3641/1616/1186 1041/1596/1186\nf 658/1217/1186 2904/1227/1186 1838/1615/1186\nf 1838/1615/1186 2898/1595/1186 658/1217/1186\nf 1039/1231/1186 3640/1617/1186 1838/1615/1186\nf 1838/1615/1186 2904/1227/1186 1039/1231/1186\nf 1040/1618/1186 3641/1616/1186 1838/1615/1186\nf 1838/1615/1186 3640/1617/1186 1040/1618/1186\nf 920/1619/1569 3395/1620/1570 1839/1621/1571\nf 1839/1621/1571 3394/1622/1572 920/1619/1569\nf 921/1218/1188 2903/1221/1191 1839/1621/1571\nf 1839/1621/1571 3395/1620/1570 921/1218/1188\nf 751/1225/1195 3067/1598/1552 1839/1621/1571\nf 1839/1621/1571 2903/1221/1191 751/1225/1195\nf 919/1597/1551 3394/1622/1572 1839/1621/1571\nf 1839/1621/1571 3067/1598/1552 919/1597/1551\nf 7324/1623/1573 2679/1624/1574 1840/1625/1575\nf 1840/1625/1575 7325/1626/1576 7324/1623/1573\nf 777/1585/539 3115/1627/1577 1840/1625/1575\nf 1840/1625/1575 2679/1624/1574 777/1585/539\nf 7326/1628/1578 7325/1626/1576 1840/1625/1575\nf 1840/1625/1575 3115/1627/1577 7326/1628/1578\nf 539/539/539 2857/542/539 1841/1629/1579\nf 1841/1629/1579 3085/1630/1580 539/539/539\nf 636/547/539 3086/1631/1581 1841/1629/1579\nf 1841/1629/1579 2857/542/539 636/547/539\nf 7327/1632/1582 7328/1633/1583 1841/1629/1579\nf 1841/1629/1579 3086/1631/1581 7327/1632/1582\nf 7329/1634/1584 3085/1630/1580 1841/1629/1579\nf 1841/1629/1579 7328/1633/1583 7329/1634/1584\nf 636/547/539 2723/1144/539 1842/1635/1585\nf 1842/1635/1585 3086/1631/1581 636/547/539\nf 562/1143/539 3087/1636/1586 1842/1635/1585\nf 1842/1635/1585 2723/1144/539 562/1143/539\nf 7330/1637/1587 7331/1638/1588 1842/1635/1585\nf 1842/1635/1585 3087/1636/1586 7330/1637/1587\nf 7327/1632/1582 3086/1631/1581 1842/1635/1585\nf 1842/1635/1585 7331/1638/1588 7327/1632/1582\nf 562/1143/539 3001/1524/539 1843/1639/1589\nf 1843/1639/1589 3087/1636/1586 562/1143/539\nf 729/902/539 3088/1640/1590 1843/1639/1589\nf 1843/1639/1589 3001/1524/539 729/902/539\nf 7332/1641/1591 7333/1642/1592 1843/1639/1589\nf 1843/1639/1589 3088/1640/1590 7332/1641/1591\nf 7330/1637/1587 3087/1636/1586 1843/1639/1589\nf 1843/1639/1589 7333/1642/1592 7330/1637/1587\nf 729/902/539 2681/901/539 1844/1643/1593\nf 1844/1643/1593 3088/1640/1590 729/902/539\nf 1242/900/539 4265/1644/1594 1844/1643/1593\nf 1844/1643/1593 2681/901/539 1242/900/539\nf 7334/1645/1595 7335/1646/1596 1844/1643/1593\nf 1844/1643/1593 4265/1644/1594 7334/1645/1595\nf 7332/1641/1591 3088/1640/1590 1844/1643/1593\nf 1844/1643/1593 7335/1646/1596 7332/1641/1591\nf 762/1647/1597 3073/1648/1598 1845/1649/1599\nf 1845/1649/1599 3089/1650/1600 762/1647/1597\nf 768/1651/1601 3090/1652/1602 1845/1649/1599\nf 1845/1649/1599 3073/1648/1598 768/1651/1601\nf 7336/1653/1603 7337/1654/1604 1845/1649/1599\nf 1845/1649/1599 3090/1652/1602 7336/1653/1603\nf 7338/1655/1605 3089/1650/1600 1845/1649/1599\nf 1845/1649/1599 7337/1654/1604 7338/1655/1605\nf 768/1651/1601 3069/1656/1606 1846/1657/1607\nf 1846/1657/1607 3090/1652/1602 768/1651/1601\nf 7339/1658/1608 3091/1659/1609 1846/1657/1607\nf 1846/1657/1607 3069/1656/1606 7339/1658/1608\nf 7340/1660/1610 7341/1661/1611 1846/1657/1607\nf 1846/1657/1607 3091/1659/1609 7340/1660/1610\nf 7336/1653/1603 3090/1652/1602 1846/1657/1607\nf 1846/1657/1607 7341/1661/1611 7336/1653/1603\nf 7339/1658/1608 7342/1662/1612 1847/1663/1613\nf 1847/1663/1613 3091/1659/1609 7339/1658/1608\nf 7343/1664/1614 3092/1665/1615 1847/1663/1613\nf 1847/1663/1613 7342/1662/1612 7343/1664/1614\nf 7344/1666/1616 7345/1667/1617 1847/1663/1613\nf 1847/1663/1613 3092/1665/1615 7344/1666/1616\nf 7340/1660/1610 3091/1659/1609 1847/1663/1613\nf 1847/1663/1613 7345/1667/1617 7340/1660/1610\nf 7343/1664/1614 3068/1668/1618 1848/1669/1619\nf 1848/1669/1619 3092/1665/1615 7343/1664/1614\nf 765/1670/1620 3093/1671/1621 1848/1669/1619\nf 1848/1669/1619 3068/1668/1618 765/1670/1620\nf 7346/1672/1622 7347/1673/1623 1848/1669/1619\nf 1848/1669/1619 3093/1671/1621 7346/1672/1622\nf 7344/1666/1616 3092/1665/1615 1848/1669/1619\nf 1848/1669/1619 7347/1673/1623 7344/1666/1616\nf 765/1670/1620 3072/1674/1624 1849/1675/1625\nf 1849/1675/1625 3093/1671/1621 765/1670/1620\nf 787/1676/1626 3116/1677/1627 1849/1675/1625\nf 1849/1675/1625 3072/1674/1624 787/1676/1626\nf 7348/1678/1628 3083/1679/1629 1849/1675/1625\nf 1849/1675/1625 3116/1677/1627 7348/1678/1628\nf 7346/1672/1622 3093/1671/1621 1849/1675/1625\nf 1849/1675/1625 3083/1679/1629 7346/1672/1622\nf 783/1680/1630 3098/1681/1631 1850/1682/1632\nf 1850/1682/1632 3105/1683/1633 783/1680/1630\nf 7349/1684/1634 7350/1685/1635 1850/1682/1632\nf 1850/1682/1632 3098/1681/1631 7349/1684/1634\nf 7351/1686/1636 2757/1687/1637 1850/1682/1632\nf 1850/1682/1632 7350/1685/1635 7351/1686/1636\nf 781/1688/1638 3105/1683/1633 1850/1682/1632\nf 1850/1682/1632 2757/1687/1637 781/1688/1638\nf 786/748/738 3101/1689/1639 1851/1690/1640\nf 1851/1690/1640 3106/749/739 786/748/738\nf 743/1691/1641 3015/1692/1642 1851/1690/1640\nf 1851/1690/1640 3101/1689/1639 743/1691/1641\nf 7352/1693/1643 3096/1694/1644 1851/1690/1640\nf 1851/1690/1640 3015/1692/1642 7352/1693/1643\nf 780/750/740 3106/749/739 1851/1690/1640\nf 1851/1690/1640 3096/1694/1644 780/750/740\nf 780/750/740 3096/1694/1644 1852/1695/1645\nf 1852/1695/1645 3107/1696/1646 780/750/740\nf 7352/1693/1643 7353/1697/1647 1852/1695/1645\nf 1852/1695/1645 3096/1694/1644 7352/1693/1643\nf 7349/1684/1634 3098/1681/1631 1852/1695/1645\nf 1852/1695/1645 7353/1697/1647 7349/1684/1634\nf 783/1680/1630 3107/1696/1646 1852/1695/1645\nf 1852/1695/1645 3098/1681/1631 783/1680/1630\nf 779/1460/1424 3095/1457/1421 1853/1698/1648\nf 1853/1698/1648 3108/1699/1649 779/1460/1424\nf 719/1252/1216 2994/1469/1433 1853/1698/1648\nf 1853/1698/1648 3095/1457/1421 719/1252/1216\nf 724/1473/1437 3099/1700/1650 1853/1698/1648\nf 1853/1698/1648 2994/1469/1433 724/1473/1437\nf 784/1701/1651 3108/1699/1649 1853/1698/1648\nf 1853/1698/1648 3099/1700/1650 784/1701/1651\nf 7354/1702/1652 7355/1703/1653 1854/1704/1654\nf 1854/1704/1654 3109/1705/1655 7354/1702/1652\nf 7307/1391/1355 3136/1388/1352 1854/1704/1654\nf 1854/1704/1654 7355/1703/1653 7307/1391/1355\nf 691/1387/1351 3100/1463/1427 1854/1704/1654\nf 1854/1704/1654 3136/1388/1352 691/1387/1351\nf 785/1462/1426 3109/1705/1655 1854/1704/1654\nf 1854/1704/1654 3100/1463/1427 785/1462/1426\nf 788/1453/1417 3103/1706/1656 1855/1707/1657\nf 1855/1707/1657 3110/1454/1418 788/1453/1417\nf 769/593/585 3064/596/588 1855/1707/1657\nf 1855/1707/1657 3103/1706/1656 769/593/585\nf 776/601/593 7356/1708/1658 1855/1707/1657\nf 1855/1707/1657 3064/596/588 776/601/593\nf 789/1455/1419 3110/1454/1418 1855/1707/1657\nf 1855/1707/1657 7356/1708/1658 789/1455/1419\nf 7357/1709/1659 2708/1710/1660 1856/1711/1661\nf 1856/1711/1661 7358/1712/1662 7357/1709/1659\nf 551/602/594 2937/605/597 1856/1711/1661\nf 1856/1711/1661 2708/1710/1660 551/602/594\nf 683/610/602 2945/1713/1663 1856/1711/1661\nf 1856/1711/1661 2937/605/597 683/610/602\nf 7359/1714/1664 7358/1712/1662 1856/1711/1661\nf 1856/1711/1661 2945/1713/1663 7359/1714/1664\nf 778/1492/1456 4289/1715/1665 1857/1716/1666\nf 1857/1716/1666 3112/1493/1457 778/1492/1456\nf 1410/1717/1667 2765/1718/1668 1857/1716/1666\nf 1857/1716/1666 4289/1715/1665 1410/1717/1667\nf 743/1691/1641 3101/1689/1639 1857/1716/1666\nf 1857/1716/1666 2765/1718/1668 743/1691/1641\nf 786/748/738 3112/1493/1457 1857/1716/1666\nf 1857/1716/1666 3101/1689/1639 786/748/738\nf 777/1585/539 2679/1624/1574 1858/1719/1669\nf 1858/1719/1669 3113/1586/1544 777/1585/539\nf 7324/1623/1573 7360/1720/1670 1858/1719/1669\nf 1858/1719/1669 2679/1624/1574 7324/1623/1573\nf 7361/1721/1671 2760/1722/1672 1858/1719/1669\nf 1858/1719/1669 7360/1720/1670 7361/1721/1671\nf 782/1587/1545 3113/1586/1544 1858/1719/1669\nf 1858/1719/1669 2760/1722/1672 782/1587/1545\nf 784/1701/1651 3099/1700/1650 1859/1723/1673\nf 1859/1723/1673 3114/1724/1674 784/1701/1651\nf 724/1473/1437 3066/1604/1558 1859/1723/1673\nf 1859/1723/1673 3099/1700/1650 724/1473/1437\nf 7321/1603/1557 3102/1725/1675 1859/1723/1673\nf 1859/1723/1673 3066/1604/1558 7321/1603/1557\nf 7362/1726/1676 3114/1724/1674 1859/1723/1673\nf 1859/1723/1673 3102/1725/1675 7362/1726/1676\nf 777/1585/539 3094/1583/539 1860/1727/1677\nf 1860/1727/1677 3115/1627/1577 777/1585/539\nf 539/539/539 3085/1630/1580 1860/1727/1677\nf 1860/1727/1677 3094/1583/539 539/539/539\nf 7329/1634/1584 7363/1728/1678 1860/1727/1677\nf 1860/1727/1677 3085/1630/1580 7329/1634/1584\nf 7326/1628/1578 3115/1627/1577 1860/1727/1677\nf 1860/1727/1677 7363/1728/1678 7326/1628/1578\nf 787/1676/1626 7364/1729/1679 1861/1730/1680\nf 1861/1730/1680 3116/1677/1627 787/1676/1626\nf 7365/1731/1681 7366/1732/1682 1861/1730/1680\nf 1861/1730/1680 7364/1729/1679 7365/1731/1681\nf 7348/1678/1628 3116/1677/1627 1861/1730/1680\nf 1861/1730/1680 7366/1732/1682 7348/1678/1628\nf 635/570/562 2712/567/559 1862/1733/1683\nf 1862/1733/1683 3156/1734/1684 635/570/562\nf 556/566/558 3157/1735/1685 1862/1733/1683\nf 1862/1733/1683 2712/567/559 556/566/558\nf 791/1736/1686 3146/1737/1687 1862/1733/1683\nf 1862/1733/1683 3157/1735/1685 791/1736/1686\nf 790/1738/1688 3156/1734/1684 1862/1733/1683\nf 1862/1733/1683 3146/1737/1687 790/1738/1688\nf 556/566/558 2780/1739/1689 1863/1740/1690\nf 1863/1740/1690 3157/1735/1685 556/566/558\nf 591/1741/1691 3158/1742/1692 1863/1740/1690\nf 1863/1740/1690 2780/1739/1689 591/1741/1691\nf 792/1743/1693 3147/1744/1694 1863/1740/1690\nf 1863/1740/1690 3158/1742/1692 792/1743/1693\nf 791/1736/1686 3157/1735/1685 1863/1740/1690\nf 1863/1740/1690 3147/1744/1694 791/1736/1686\nf 7367/1745/1695 2794/1746/1696 1864/1747/1697\nf 1864/1747/1697 7368/1748/1698 7367/1745/1695\nf 598/697/687 3159/1749/1699 1864/1747/1697\nf 1864/1747/1697 2794/1746/1696 598/697/687\nf 793/1750/1700 3148/1751/1701 1864/1747/1697\nf 1864/1747/1697 3159/1749/1699 793/1750/1700\nf 7369/1752/1702 7368/1748/1698 1864/1747/1697\nf 1864/1747/1697 3148/1751/1701 7369/1752/1702\nf 598/697/687 2869/696/686 1865/1753/1703\nf 1865/1753/1703 3159/1749/1699 598/697/687\nf 652/695/685 3160/1754/1704 1865/1753/1703\nf 1865/1753/1703 2869/696/686 652/695/685\nf 794/1755/1705 3149/1756/1706 1865/1753/1703\nf 1865/1753/1703 3160/1754/1704 794/1755/1705\nf 793/1750/1700 3159/1749/1699 1865/1753/1703\nf 1865/1753/1703 3149/1756/1706 793/1750/1700\nf 652/695/685 2797/1161/1136 1866/1757/1707\nf 1866/1757/1707 3160/1754/1704 652/695/685\nf 601/812/802 3161/1758/1708 1866/1757/1707\nf 1866/1757/1707 2797/1161/1136 601/812/802\nf 795/1759/1709 3150/1760/1710 1866/1757/1707\nf 1866/1757/1707 3161/1758/1708 795/1759/1709\nf 794/1755/1705 3160/1754/1704 1866/1757/1707\nf 1866/1757/1707 3150/1760/1710 794/1755/1705\nf 601/812/802 3018/811/801 1867/1761/1711\nf 1867/1761/1711 3161/1758/1708 601/812/802\nf 747/810/800 3162/1762/1712 1867/1761/1711\nf 1867/1761/1711 3018/811/801 747/810/800\nf 796/1763/1713 3151/1764/1714 1867/1761/1711\nf 1867/1761/1711 3162/1762/1712 796/1763/1713\nf 795/1759/1709 3161/1758/1708 1867/1761/1711\nf 1867/1761/1711 3151/1764/1714 795/1759/1709\nf 747/810/800 2801/1519/1483 1868/1765/1715\nf 1868/1765/1715 3162/1762/1712 747/810/800\nf 1387/1518/1482 3163/1766/1716 1868/1765/1715\nf 1868/1765/1715 2801/1519/1483 1387/1518/1482\nf 797/1767/1717 3152/1768/1718 1868/1765/1715\nf 1868/1765/1715 3163/1766/1716 797/1767/1717\nf 796/1763/1713 3162/1762/1712 1868/1765/1715\nf 1868/1765/1715 3152/1768/1718 796/1763/1713\nf 1383/1496/1460 3012/1494/1458 1869/1769/1719\nf 1869/1769/1719 4312/1770/1720 1383/1496/1460\nf 740/755/745 3164/1771/1721 1869/1769/1719\nf 1869/1769/1719 3012/1494/1458 740/755/745\nf 799/1772/1722 3153/1773/1723 1869/1769/1719\nf 1869/1769/1719 3164/1771/1721 799/1772/1722\nf 798/1774/1724 4312/1770/1720 1869/1769/1719\nf 1869/1769/1719 3153/1773/1723 798/1774/1724\nf 740/755/745 2732/752/742 1870/1775/1725\nf 1870/1775/1725 3164/1771/1721 740/755/745\nf 571/751/741 3165/1776/1726 1870/1775/1725\nf 1870/1775/1725 2732/752/742 571/751/741\nf 800/1777/1727 3154/1778/1728 1870/1775/1725\nf 1870/1775/1725 3165/1776/1726 800/1777/1727\nf 799/1772/1722 3164/1771/1721 1870/1775/1725\nf 1870/1775/1725 3154/1778/1728 799/1772/1722\nf 571/751/741 2856/1145/1120 1871/1779/1729\nf 1871/1779/1729 3165/1776/1726 571/751/741\nf 635/570/562 3156/1734/1684 1871/1779/1729\nf 1871/1779/1729 2856/1145/1120 635/570/562\nf 790/1738/1688 3155/1780/1730 1871/1779/1729\nf 1871/1779/1729 3156/1734/1684 790/1738/1688\nf 800/1777/1727 3165/1776/1726 1871/1779/1729\nf 1871/1779/1729 3155/1780/1730 800/1777/1727\nf 790/1738/1688 3146/1737/1687 1872/1781/1731\nf 1872/1781/1731 3176/1782/1732 790/1738/1688\nf 791/1736/1686 3177/1783/1733 1872/1781/1731\nf 1872/1781/1731 3146/1737/1687 791/1736/1686\nf 802/1784/1734 3166/1785/1735 1872/1781/1731\nf 1872/1781/1731 3177/1783/1733 802/1784/1734\nf 801/1786/1736 3176/1782/1732 1872/1781/1731\nf 1872/1781/1731 3166/1785/1735 801/1786/1736\nf 791/1736/1686 3147/1744/1694 1873/1787/1737\nf 1873/1787/1737 3177/1783/1733 791/1736/1686\nf 792/1743/1693 3178/1788/1738 1873/1787/1737\nf 1873/1787/1737 3147/1744/1694 792/1743/1693\nf 803/1789/1739 3167/1790/1740 1873/1787/1737\nf 1873/1787/1737 3178/1788/1738 803/1789/1739\nf 802/1784/1734 3177/1783/1733 1873/1787/1737\nf 1873/1787/1737 3167/1790/1740 802/1784/1734\nf 7369/1752/1702 3148/1751/1701 1874/1791/1741\nf 1874/1791/1741 7370/1792/1742 7369/1752/1702\nf 793/1750/1700 3179/1793/1743 1874/1791/1741\nf 1874/1791/1741 3148/1751/1701 793/1750/1700\nf 804/1794/1744 3168/1795/1745 1874/1791/1741\nf 1874/1791/1741 3179/1793/1743 804/1794/1744\nf 7371/1796/1746 7370/1792/1742 1874/1791/1741\nf 1874/1791/1741 3168/1795/1745 7371/1796/1746\nf 793/1750/1700 3149/1756/1706 1875/1797/1747\nf 1875/1797/1747 3179/1793/1743 793/1750/1700\nf 794/1755/1705 3180/1798/1748 1875/1797/1747\nf 1875/1797/1747 3149/1756/1706 794/1755/1705\nf 805/1799/1749 3169/1800/1750 1875/1797/1747\nf 1875/1797/1747 3180/1798/1748 805/1799/1749\nf 804/1794/1744 3179/1793/1743 1875/1797/1747\nf 1875/1797/1747 3169/1800/1750 804/1794/1744\nf 794/1755/1705 3150/1760/1710 1876/1801/1751\nf 1876/1801/1751 3180/1798/1748 794/1755/1705\nf 795/1759/1709 3181/1802/1752 1876/1801/1751\nf 1876/1801/1751 3150/1760/1710 795/1759/1709\nf 806/1803/1753 3170/1804/1754 1876/1801/1751\nf 1876/1801/1751 3181/1802/1752 806/1803/1753\nf 805/1799/1749 3180/1798/1748 1876/1801/1751\nf 1876/1801/1751 3170/1804/1754 805/1799/1749\nf 795/1759/1709 3151/1764/1714 1877/1805/1755\nf 1877/1805/1755 3181/1802/1752 795/1759/1709\nf 796/1763/1713 3182/1806/1756 1877/1805/1755\nf 1877/1805/1755 3151/1764/1714 796/1763/1713\nf 807/1807/1757 3171/1808/1758 1877/1805/1755\nf 1877/1805/1755 3182/1806/1756 807/1807/1757\nf 806/1803/1753 3181/1802/1752 1877/1805/1755\nf 1877/1805/1755 3171/1808/1758 806/1803/1753\nf 796/1763/1713 3152/1768/1718 1878/1809/1759\nf 1878/1809/1759 3182/1806/1756 796/1763/1713\nf 797/1767/1717 4329/1810/1760 1878/1809/1759\nf 1878/1809/1759 3152/1768/1718 797/1767/1717\nf 1428/1811/1761 3172/1812/1762 1878/1809/1759\nf 1878/1809/1759 4329/1810/1760 1428/1811/1761\nf 807/1807/1757 3182/1806/1756 1878/1809/1759\nf 1878/1809/1759 3172/1812/1762 807/1807/1757\nf 798/1774/1724 3153/1773/1723 1879/1813/1763\nf 1879/1813/1763 3183/1814/1764 798/1774/1724\nf 799/1772/1722 3184/1815/1765 1879/1813/1763\nf 1879/1813/1763 3153/1773/1723 799/1772/1722\nf 808/1816/1766 3173/1817/1767 1879/1813/1763\nf 1879/1813/1763 3184/1815/1765 808/1816/1766\nf 1430/1818/1768 3183/1814/1764 1879/1813/1763\nf 1879/1813/1763 3173/1817/1767 1430/1818/1768\nf 799/1772/1722 3154/1778/1728 1880/1819/1769\nf 1880/1819/1769 3184/1815/1765 799/1772/1722\nf 800/1777/1727 3185/1820/1770 1880/1819/1769\nf 1880/1819/1769 3154/1778/1728 800/1777/1727\nf 809/1821/1771 3174/1822/1772 1880/1819/1769\nf 1880/1819/1769 3185/1820/1770 809/1821/1771\nf 808/1816/1766 3184/1815/1765 1880/1819/1769\nf 1880/1819/1769 3174/1822/1772 808/1816/1766\nf 800/1777/1727 3155/1780/1730 1881/1823/1773\nf 1881/1823/1773 3185/1820/1770 800/1777/1727\nf 790/1738/1688 3176/1782/1732 1881/1823/1773\nf 1881/1823/1773 3155/1780/1730 790/1738/1688\nf 801/1786/1736 3175/1824/1774 1881/1823/1773\nf 1881/1823/1773 3176/1782/1732 801/1786/1736\nf 809/1821/1771 3185/1820/1770 1881/1823/1773\nf 1881/1823/1773 3175/1824/1774 809/1821/1771\nf 1163/706/696 3017/705/695 1882/1825/1775\nf 1882/1825/1775 4338/1826/1776 1163/706/696\nf 746/704/694 3199/1827/1777 1882/1825/1775\nf 1882/1825/1775 3017/705/695 746/704/694\nf 810/1828/1778 3186/1829/1779 1882/1825/1775\nf 1882/1825/1775 3199/1827/1777 810/1828/1778\nf 1433/1830/1780 4338/1826/1776 1882/1825/1775\nf 1882/1825/1775 3186/1829/1779 1433/1830/1780\nf 746/704/694 2798/1483/1447 1883/1831/1781\nf 1883/1831/1781 3199/1827/1777 746/704/694\nf 602/819/809 3200/1832/1782 1883/1831/1781\nf 1883/1831/1781 2798/1483/1447 602/819/809\nf 811/1833/1783 3187/1834/1784 1883/1831/1781\nf 1883/1831/1781 3200/1832/1782 811/1833/1783\nf 810/1828/1778 3199/1827/1777 1883/1831/1781\nf 1883/1831/1781 3187/1834/1784 810/1828/1778\nf 602/819/809 2870/818/808 1884/1835/1785\nf 1884/1835/1785 3200/1832/1782 602/819/809\nf 653/817/807 3201/1836/1786 1884/1835/1785\nf 1884/1835/1785 2870/818/808 653/817/807\nf 812/1837/1787 3188/1838/1788 1884/1835/1785\nf 1884/1835/1785 3201/1836/1786 812/1837/1787\nf 811/1833/1783 3200/1832/1782 1884/1835/1785\nf 1884/1835/1785 3188/1838/1788 811/1833/1783\nf 653/817/807 2802/1166/1141 1885/1839/1789\nf 1885/1839/1789 3201/1836/1786 653/817/807\nf 599/714/704 3202/1840/1790 1885/1839/1789\nf 1885/1839/1789 2802/1166/1141 599/714/704\nf 813/1841/1791 3189/1842/1792 1885/1839/1789\nf 1885/1839/1789 3202/1840/1790 813/1841/1791\nf 812/1837/1787 3201/1836/1786 1885/1839/1789\nf 1885/1839/1789 3189/1842/1792 812/1837/1787\nf 599/714/704 2930/713/703 1886/1843/1793\nf 1886/1843/1793 3202/1840/1790 599/714/704\nf 679/712/702 3203/1844/1794 1886/1843/1793\nf 1886/1843/1793 2930/713/703 679/712/702\nf 814/1845/1795 3190/1846/1796 1886/1843/1793\nf 1886/1843/1793 3203/1844/1794 814/1845/1795\nf 813/1841/1791 3202/1840/1790 1886/1843/1793\nf 1886/1843/1793 3190/1846/1796 813/1841/1791\nf 679/712/702 2829/1287/1251 1887/1847/1797\nf 1887/1847/1797 3203/1844/1794 679/712/702\nf 618/1081/1062 3204/1848/1798 1887/1847/1797\nf 1887/1847/1797 2829/1287/1251 618/1081/1062\nf 815/1849/1799 3191/1850/1800 1887/1847/1797\nf 1887/1847/1797 3204/1848/1798 815/1849/1799\nf 814/1845/1795 3203/1844/1794 1887/1847/1797\nf 1887/1847/1797 3191/1850/1800 814/1845/1795\nf 618/1081/1062 2917/1080/1061 1888/1851/1801\nf 1888/1851/1801 3204/1848/1798 618/1081/1062\nf 672/1079/1060 3205/1852/1802 1888/1851/1801\nf 1888/1851/1801 2917/1080/1061 672/1079/1060\nf 816/1853/1803 3192/1854/1804 1888/1851/1801\nf 1888/1851/1801 3205/1852/1802 816/1853/1803\nf 815/1849/1799 3204/1848/1798 1888/1851/1801\nf 1888/1851/1801 3192/1854/1804 815/1849/1799\nf 672/1079/1060 2921/1855/1805 1889/1856/1806\nf 1889/1856/1806 3205/1852/1802 672/1079/1060\nf 671/1857/1807 3206/1858/1808 1889/1856/1806\nf 1889/1856/1806 2921/1855/1805 671/1857/1807\nf 817/1859/1809 3193/1860/1810 1889/1856/1806\nf 1889/1856/1806 3206/1858/1808 817/1859/1809\nf 816/1853/1803 3205/1852/1802 1889/1856/1806\nf 1889/1856/1806 3193/1860/1810 816/1853/1803\nf 7372/1861/1811 2926/1862/1812 1890/1863/1813\nf 1890/1863/1813 7373/1864/1814 7372/1861/1811\nf 674/1276/1240 3207/1865/1815 1890/1863/1813\nf 1890/1863/1813 2926/1862/1812 674/1276/1240\nf 818/1866/1816 3194/1867/1817 1890/1863/1813\nf 1890/1863/1813 3207/1865/1815 818/1866/1816\nf 7374/1868/1818 7373/1864/1814 1890/1863/1813\nf 1890/1863/1813 3194/1867/1817 7374/1868/1818\nf 674/1276/1240 2925/1279/1243 1891/1869/1819\nf 1891/1869/1819 3207/1865/1815 674/1276/1240\nf 676/1208/1183 3208/1870/1820 1891/1869/1819\nf 1891/1869/1819 2925/1279/1243 676/1208/1183\nf 819/1871/1821 3195/1872/1822 1891/1869/1819\nf 1891/1869/1819 3208/1870/1820 819/1871/1821\nf 818/1866/1816 3207/1865/1815 1891/1869/1819\nf 1891/1869/1819 3195/1872/1822 818/1866/1816\nf 676/1208/1183 2927/1207/1182 1892/1873/1823\nf 1892/1873/1823 3208/1870/1820 676/1208/1183\nf 675/1206/1181 3209/1874/1824 1892/1873/1823\nf 1892/1873/1823 2927/1207/1182 675/1206/1181\nf 820/1875/1825 3196/1876/1826 1892/1873/1823\nf 1892/1873/1823 3209/1874/1824 820/1875/1825\nf 819/1871/1821 3208/1870/1820 1892/1873/1823\nf 1892/1873/1823 3196/1876/1826 819/1871/1821\nf 675/1206/1181 2924/1272/1236 1893/1877/1827\nf 1893/1877/1827 3209/1874/1824 675/1206/1181\nf 754/1275/1239 3210/1878/1828 1893/1877/1827\nf 1893/1877/1827 2924/1272/1236 754/1275/1239\nf 821/1879/1829 3197/1880/1830 1893/1877/1827\nf 1893/1877/1827 3210/1878/1828 821/1879/1829\nf 820/1875/1825 3209/1874/1824 1893/1877/1827\nf 1893/1877/1827 3197/1880/1830 820/1875/1825\nf 754/1275/1239 3025/1558/1518 1894/1881/1831\nf 1894/1881/1831 3210/1878/1828 754/1275/1239\nf 1392/1557/1517 4363/1882/1832 1894/1881/1831\nf 1894/1881/1831 3025/1558/1518 1392/1557/1517\nf 1446/1883/1833 3198/1884/1834 1894/1881/1831\nf 1894/1881/1831 4363/1882/1832 1446/1883/1833\nf 821/1879/1829 3210/1878/1828 1894/1881/1831\nf 1894/1881/1831 3198/1884/1834 821/1879/1829\nf 1433/1830/1780 3186/1829/1779 1895/1885/1835\nf 1895/1885/1835 4367/1886/1836 1433/1830/1780\nf 810/1828/1778 3224/1887/1837 1895/1885/1835\nf 1895/1885/1835 3186/1829/1779 810/1828/1778\nf 823/1888/1838 3211/1889/1839 1895/1885/1835\nf 1895/1885/1835 3224/1887/1837 823/1888/1838\nf 822/1890/1840 4367/1886/1836 1895/1885/1835\nf 1895/1885/1835 3211/1889/1839 822/1890/1840\nf 810/1828/1778 3187/1834/1784 1896/1891/1841\nf 1896/1891/1841 3224/1887/1837 810/1828/1778\nf 811/1833/1783 3225/1892/1842 1896/1891/1841\nf 1896/1891/1841 3187/1834/1784 811/1833/1783\nf 824/1893/1843 3212/1894/1844 1896/1891/1841\nf 1896/1891/1841 3225/1892/1842 824/1893/1843\nf 823/1888/1838 3224/1887/1837 1896/1891/1841\nf 1896/1891/1841 3212/1894/1844 823/1888/1838\nf 811/1833/1783 3188/1838/1788 1897/1895/1845\nf 1897/1895/1845 3225/1892/1842 811/1833/1783\nf 812/1837/1787 3226/1896/1846 1897/1895/1845\nf 1897/1895/1845 3188/1838/1788 812/1837/1787\nf 825/1897/1847 3213/1898/1848 1897/1895/1845\nf 1897/1895/1845 3226/1896/1846 825/1897/1847\nf 824/1893/1843 3225/1892/1842 1897/1895/1845\nf 1897/1895/1845 3213/1898/1848 824/1893/1843\nf 812/1837/1787 3189/1842/1792 1898/1899/1849\nf 1898/1899/1849 3226/1896/1846 812/1837/1787\nf 813/1841/1791 3227/1900/1850 1898/1899/1849\nf 1898/1899/1849 3189/1842/1792 813/1841/1791\nf 826/1901/1851 3214/1902/1852 1898/1899/1849\nf 1898/1899/1849 3227/1900/1850 826/1901/1851\nf 825/1897/1847 3226/1896/1846 1898/1899/1849\nf 1898/1899/1849 3214/1902/1852 825/1897/1847\nf 813/1841/1791 3190/1846/1796 1899/1903/1853\nf 1899/1903/1853 3227/1900/1850 813/1841/1791\nf 814/1845/1795 3228/1904/1854 1899/1903/1853\nf 1899/1903/1853 3190/1846/1796 814/1845/1795\nf 827/1905/1855 3215/1906/1856 1899/1903/1853\nf 1899/1903/1853 3228/1904/1854 827/1905/1855\nf 826/1901/1851 3227/1900/1850 1899/1903/1853\nf 1899/1903/1853 3215/1906/1856 826/1901/1851\nf 814/1845/1795 3191/1850/1800 1900/1907/1857\nf 1900/1907/1857 3228/1904/1854 814/1845/1795\nf 815/1849/1799 3229/1908/1858 1900/1907/1857\nf 1900/1907/1857 3191/1850/1800 815/1849/1799\nf 828/1909/1859 3216/1910/1860 1900/1907/1857\nf 1900/1907/1857 3229/1908/1858 828/1909/1859\nf 827/1905/1855 3228/1904/1854 1900/1907/1857\nf 1900/1907/1857 3216/1910/1860 827/1905/1855\nf 815/1849/1799 3192/1854/1804 1901/1911/1861\nf 1901/1911/1861 3229/1908/1858 815/1849/1799\nf 816/1853/1803 3230/1912/1862 1901/1911/1861\nf 1901/1911/1861 3192/1854/1804 816/1853/1803\nf 829/1913/1863 3217/1914/1864 1901/1911/1861\nf 1901/1911/1861 3230/1912/1862 829/1913/1863\nf 828/1909/1859 3229/1908/1858 1901/1911/1861\nf 1901/1911/1861 3217/1914/1864 828/1909/1859\nf 816/1853/1803 3193/1860/1810 1902/1915/1865\nf 1902/1915/1865 3230/1912/1862 816/1853/1803\nf 817/1859/1809 3231/1916/1866 1902/1915/1865\nf 1902/1915/1865 3193/1860/1810 817/1859/1809\nf 830/1917/1867 3218/1918/1868 1902/1915/1865\nf 1902/1915/1865 3231/1916/1866 830/1917/1867\nf 829/1913/1863 3230/1912/1862 1902/1915/1865\nf 1902/1915/1865 3218/1918/1868 829/1913/1863\nf 7374/1868/1818 3194/1867/1817 1903/1919/1869\nf 1903/1919/1869 7375/1920/1870 7374/1868/1818\nf 818/1866/1816 3232/1921/1871 1903/1919/1869\nf 1903/1919/1869 3194/1867/1817 818/1866/1816\nf 831/1922/1872 3219/1923/1873 1903/1919/1869\nf 1903/1919/1869 3232/1921/1871 831/1922/1872\nf 7376/1924/1874 7375/1920/1870 1903/1919/1869\nf 1903/1919/1869 3219/1923/1873 7376/1924/1874\nf 818/1866/1816 3195/1872/1822 1904/1925/1875\nf 1904/1925/1875 3232/1921/1871 818/1866/1816\nf 819/1871/1821 3233/1926/1876 1904/1925/1875\nf 1904/1925/1875 3195/1872/1822 819/1871/1821\nf 832/1927/1877 3220/1928/1878 1904/1925/1875\nf 1904/1925/1875 3233/1926/1876 832/1927/1877\nf 831/1922/1872 3232/1921/1871 1904/1925/1875\nf 1904/1925/1875 3220/1928/1878 831/1922/1872\nf 819/1871/1821 3196/1876/1826 1905/1929/1879\nf 1905/1929/1879 3233/1926/1876 819/1871/1821\nf 820/1875/1825 3234/1930/1880 1905/1929/1879\nf 1905/1929/1879 3196/1876/1826 820/1875/1825\nf 833/1931/1881 3221/1932/1882 1905/1929/1879\nf 1905/1929/1879 3234/1930/1880 833/1931/1881\nf 832/1927/1877 3233/1926/1876 1905/1929/1879\nf 1905/1929/1879 3221/1932/1882 832/1927/1877\nf 820/1875/1825 3197/1880/1830 1906/1933/1883\nf 1906/1933/1883 3234/1930/1880 820/1875/1825\nf 821/1879/1829 3235/1934/1884 1906/1933/1883\nf 1906/1933/1883 3197/1880/1830 821/1879/1829\nf 834/1935/1885 3222/1936/1886 1906/1933/1883\nf 1906/1933/1883 3235/1934/1884 834/1935/1885\nf 833/1931/1881 3234/1930/1880 1906/1933/1883\nf 1906/1933/1883 3222/1936/1886 833/1931/1881\nf 821/1879/1829 3198/1884/1834 1907/1937/1887\nf 1907/1937/1887 3235/1934/1884 821/1879/1829\nf 1446/1883/1833 4390/1938/1888 1907/1937/1887\nf 1907/1937/1887 3198/1884/1834 1446/1883/1833\nf 835/1939/1889 3223/1940/1890 1907/1937/1887\nf 1907/1937/1887 4390/1938/1888 835/1939/1889\nf 834/1935/1885 3235/1934/1884 1907/1937/1887\nf 1907/1937/1887 3223/1940/1890 834/1935/1885\nf 979/642/632 3514/1941/1891 1908/1942/1892\nf 1908/1942/1892 3247/643/633 979/642/632\nf 980/843/833 2752/846/836 1908/1942/1892\nf 1908/1942/1892 3514/1941/1891 980/843/833\nf 973/851/841 3506/1943/1893 1908/1942/1892\nf 1908/1942/1892 2752/846/836 973/851/841\nf 974/644/634 3247/643/633 1908/1942/1892\nf 1908/1942/1892 3506/1943/1893 974/644/634\nf 839/675/665 2747/1110/1091 1909/1944/1894\nf 1909/1944/1894 3248/676/666 839/675/665\nf 576/852/842 2753/855/845 1909/1944/1894\nf 1909/1944/1894 2747/1110/1091 576/852/842\nf 690/860/850 2941/1323/1287 1909/1944/1894\nf 1909/1944/1894 2753/855/845 690/860/850\nf 845/677/667 3248/676/666 1909/1944/1894\nf 1909/1944/1894 2941/1323/1287 845/677/667\nf 836/719/709 7377/1945/1895 1910/1946/1896\nf 1910/1946/1896 3249/720/710 836/719/709\nf 575/861/851 2754/864/854 1910/1946/1896\nf 1910/1946/1896 7377/1945/1895 575/861/851\nf 603/869/859 2800/1947/1897 1910/1946/1896\nf 1910/1946/1896 2754/864/854 603/869/859\nf 841/721/711 3249/720/710 1910/1946/1896\nf 1910/1946/1896 2800/1947/1897 841/721/711\nf 838/831/821 3238/1948/1898 1911/1949/1899\nf 1911/1949/1899 3250/832/822 838/831/821\nf 541/557/549 2683/560/552 1911/1949/1899\nf 1911/1949/1899 3238/1948/1898 541/557/549\nf 631/565/557 2886/1950/1900 1911/1949/1899\nf 1911/1949/1899 2683/560/552 631/565/557\nf 843/833/823 3250/832/822 1911/1949/1899\nf 1911/1949/1899 2886/1950/1900 843/833/823\nf 840/839/829 3240/1522/1486 1912/1951/1901\nf 1912/1951/1901 3251/840/830 840/839/829\nf 566/760/750 2727/1147/1122 1912/1951/1901\nf 1912/1951/1901 3240/1522/1486 566/760/750\nf 637/579/571 2887/1170/1145 1912/1951/1901\nf 1912/1951/1901 2727/1147/1122 637/579/571\nf 844/841/831 3251/840/830 1912/1951/1901\nf 1912/1951/1901 2887/1170/1145 844/841/831\nf 1231/874/864 4397/1952/1902 1913/1953/1903\nf 1913/1953/1903 3252/875/865 1231/874/864\nf 1384/1500/1464 2689/1498/1462 1913/1953/1903\nf 1913/1953/1903 4397/1952/1902 1384/1500/1464\nf 730/764/754 3039/1521/1485 1913/1953/1903\nf 1913/1953/1903 2689/1498/1462 730/764/754\nf 846/876/866 3252/875/865 1913/1953/1903\nf 1913/1953/1903 3039/1521/1485 846/876/866\nf 839/675/665 3239/672/662 1914/1954/1904\nf 1914/1954/1904 3253/1111/1092 839/675/665\nf 554/671/661 2840/1132/1113 1914/1954/1904\nf 1914/1954/1904 3239/672/662 554/671/661\nf 623/1131/1112 3242/1955/1905 1914/1954/1904\nf 1914/1954/1904 2840/1132/1113 623/1131/1112\nf 842/1112/1093 3253/1111/1092 1914/1954/1904\nf 1914/1954/1904 3242/1955/1905 842/1112/1093\nf 837/1172/1147 3237/1956/1906 1915/1957/1907\nf 1915/1957/1907 3254/1173/1148 837/1172/1147\nf 577/574/566 2864/573/565 1915/1957/1907\nf 1915/1957/1907 3237/1956/1906 577/574/566\nf 644/572/564 3244/842/832 1915/1957/1907\nf 1915/1957/1907 2864/573/565 644/572/564\nf 844/841/831 3254/1173/1148 1915/1957/1907\nf 1915/1957/1907 3244/842/832 844/841/831\nf 7286/1326/1290 7378/1958/1908 1916/1959/1909\nf 1916/1959/1909 3255/1327/1291 7286/1326/1290\nf 7300/1371/1335 3131/1369/1333 1916/1959/1909\nf 1916/1959/1909 7378/1958/1908 7300/1371/1335\nf 686/679/669 3245/678/668 1916/1959/1909\nf 1916/1959/1909 3131/1369/1333 686/679/669\nf 845/677/667 3255/1327/1291 1916/1959/1909\nf 1916/1959/1909 3245/678/668 845/677/667\nf 840/839/829 2749/836/826 1917/1960/1910\nf 1917/1960/1910 3256/1523/1487 840/839/829\nf 578/759/749 3013/758/748 1917/1960/1910\nf 1917/1960/1910 2749/836/826 578/759/749\nf 741/757/747 3246/877/867 1917/1960/1910\nf 1917/1960/1910 3013/758/748 741/757/747\nf 846/876/866 3256/1523/1487 1917/1960/1910\nf 1917/1960/1910 3246/877/867 846/876/866\nf 837/1172/1147 2715/1171/1146 1918/1961/1911\nf 1918/1961/1911 3268/1962/1912 837/1172/1147\nf 559/575/567 3269/1963/1913 1918/1961/1911\nf 1918/1961/1911 2715/1171/1146 559/575/567\nf 848/1964/1914 3257/1965/1915 1918/1961/1911\nf 1918/1961/1911 3269/1963/1913 848/1964/1914\nf 847/1966/1916 3268/1962/1912 1918/1961/1911\nf 1918/1961/1911 3257/1965/1915 847/1966/1916\nf 559/575/567 2781/1967/1917 1919/1968/1918\nf 1919/1968/1918 3269/1963/1913 559/575/567\nf 592/1969/1919 3270/1970/1920 1919/1968/1918\nf 1919/1968/1918 2781/1967/1917 592/1969/1919\nf 849/1971/1921 3258/1972/1922 1919/1968/1918\nf 1919/1968/1918 3270/1970/1920 849/1971/1921\nf 848/1964/1914 3269/1963/1913 1919/1968/1918\nf 1919/1968/1918 3258/1972/1922 848/1964/1914\nf 7379/1973/1923 2795/1974/1924 1920/1975/1925\nf 1920/1975/1925 7380/1976/1926 7379/1973/1923\nf 600/723/713 3271/1977/1927 1920/1975/1925\nf 1920/1975/1925 2795/1974/1924 600/723/713\nf 850/1978/1928 3259/1979/1929 1920/1975/1925\nf 1920/1975/1925 3271/1977/1927 850/1978/1928\nf 7381/1980/1930 7380/1976/1926 1920/1975/1925\nf 1920/1975/1925 3259/1979/1929 7381/1980/1930\nf 600/723/713 3241/722/712 1921/1981/1931\nf 1921/1981/1931 3271/1977/1927 600/723/713\nf 841/721/711 3272/1982/1932 1921/1981/1931\nf 1921/1981/1931 3241/722/712 841/721/711\nf 851/1983/1933 3260/1984/1934 1921/1981/1931\nf 1921/1981/1931 3272/1982/1932 851/1983/1933\nf 850/1978/1928 3271/1977/1927 1921/1981/1931\nf 1921/1981/1931 3260/1984/1934 850/1978/1928\nf 841/721/711 2800/1947/1897 1922/1985/1935\nf 1922/1985/1935 3272/1982/1932 841/721/711\nf 603/869/859 3273/1986/1936 1922/1985/1935\nf 1922/1985/1935 2800/1947/1897 603/869/859\nf 852/1987/1937 3261/1988/1938 1922/1985/1935\nf 1922/1985/1935 3273/1986/1936 852/1987/1937\nf 851/1983/1933 3272/1982/1932 1922/1985/1935\nf 1922/1985/1935 3261/1988/1938 851/1983/1933\nf 603/869/859 2822/868/858 1923/1989/1939\nf 1923/1989/1939 3273/1986/1936 603/869/859\nf 615/867/857 3274/1990/1940 1923/1989/1939\nf 1923/1989/1939 2822/868/858 615/867/857\nf 853/1991/1941 3262/1992/1942 1923/1989/1939\nf 1923/1989/1939 3274/1990/1940 853/1991/1941\nf 852/1987/1937 3273/1986/1936 1923/1989/1939\nf 1923/1989/1939 3262/1992/1942 852/1987/1937\nf 615/867/857 2803/1063/1044 1924/1993/1943\nf 1924/1993/1943 3274/1990/1940 615/867/857\nf 598/697/687 3275/1994/1944 1924/1993/1943\nf 1924/1993/1943 2803/1063/1044 598/697/687\nf 854/1995/1945 3263/1996/1946 1924/1993/1943\nf 1924/1993/1943 3275/1994/1944 854/1995/1945\nf 853/1991/1941 3274/1990/1940 1924/1993/1943\nf 1924/1993/1943 3263/1996/1946 853/1991/1941\nf 598/697/687 2794/1746/1696 1925/1997/1947\nf 1925/1997/1947 3275/1994/1944 598/697/687\nf 7367/1745/1695 3276/1998/1948 1925/1997/1947\nf 1925/1997/1947 2794/1746/1696 7367/1745/1695\nf 855/1999/1949 3264/2000/1950 1925/1997/1947\nf 1925/1997/1947 3276/1998/1948 855/1999/1949\nf 854/1995/1945 3275/1994/1944 1925/1997/1947\nf 1925/1997/1947 3264/2000/1950 854/1995/1945\nf 591/1741/1691 2780/1739/1689 1926/2001/1951\nf 1926/2001/1951 7382/2002/1952 591/1741/1691\nf 556/566/558 3277/2003/1953 1926/2001/1951\nf 1926/2001/1951 2780/1739/1689 556/566/558\nf 856/2004/1954 3265/2005/1955 1926/2001/1951\nf 1926/2001/1951 3277/2003/1953 856/2004/1954\nf 7383/2006/1956 7382/2002/1952 1926/2001/1951\nf 1926/2001/1951 3265/2005/1955 7383/2006/1956\nf 556/566/558 2748/569/561 1927/2007/1957\nf 1927/2007/1957 3277/2003/1953 556/566/558\nf 577/574/566 3278/2008/1958 1927/2007/1957\nf 1927/2007/1957 2748/569/561 577/574/566\nf 857/2009/1959 3266/2010/1960 1927/2007/1957\nf 1927/2007/1957 3278/2008/1958 857/2009/1959\nf 856/2004/1954 3277/2003/1953 1927/2007/1957\nf 1927/2007/1957 3266/2010/1960 856/2004/1954\nf 577/574/566 3237/1956/1906 1928/2011/1961\nf 1928/2011/1961 3278/2008/1958 577/574/566\nf 837/1172/1147 3268/1962/1912 1928/2011/1961\nf 1928/2011/1961 3237/1956/1906 837/1172/1147\nf 847/1966/1916 3267/2012/1962 1928/2011/1961\nf 1928/2011/1961 3268/1962/1912 847/1966/1916\nf 857/2009/1959 3278/2008/1958 1928/2011/1961\nf 1928/2011/1961 3267/2012/1962 857/2009/1959\nf 595/583/575 2714/1192/1167 1929/2013/1963\nf 1929/2013/1963 3289/2014/1964 595/583/575\nf 558/1191/1166 3290/2015/1965 1929/2013/1963\nf 1929/2013/1963 2714/1192/1167 558/1191/1166\nf 859/2016/1966 3279/2017/1967 1929/2013/1963\nf 1929/2013/1963 3290/2015/1965 859/2016/1966\nf 858/2018/1968 3289/2014/1964 1929/2013/1963\nf 1929/2013/1963 3279/2017/1967 858/2018/1968\nf 558/1191/1166 2919/1277/1241 1930/2019/1969\nf 1930/2019/1969 3290/2015/1965 558/1191/1166\nf 674/1276/1240 3291/2020/1970 1930/2019/1969\nf 1930/2019/1969 2919/1277/1241 674/1276/1240\nf 860/2021/1971 3280/2022/1972 1930/2019/1969\nf 1930/2019/1969 3291/2020/1970 860/2021/1971\nf 859/2016/1966 3290/2015/1965 1930/2019/1969\nf 1930/2019/1969 3280/2022/1972 859/2016/1966\nf 674/1276/1240 2926/1862/1812 1931/2023/1973\nf 1931/2023/1973 3291/2020/1970 674/1276/1240\nf 7372/1861/1811 3292/2024/1974 1931/2023/1973\nf 1931/2023/1973 2926/1862/1812 7372/1861/1811\nf 861/2025/1975 3281/2026/1976 1931/2023/1973\nf 1931/2023/1973 3292/2024/1974 861/2025/1975\nf 860/2021/1971 3291/2020/1970 1931/2023/1973\nf 1931/2023/1973 3281/2026/1976 860/2021/1971\nf 671/1857/1807 2921/1855/1805 1932/2027/1977\nf 1932/2027/1977 7384/2028/1978 671/1857/1807\nf 672/1079/1060 3293/2029/1979 1932/2027/1977\nf 1932/2027/1977 2921/1855/1805 672/1079/1060\nf 862/2030/1980 3282/2031/1981 1932/2027/1977\nf 1932/2027/1977 3293/2029/1979 862/2030/1980\nf 7385/2032/1982 7384/2028/1978 1932/2027/1977\nf 1932/2027/1977 3282/2031/1981 7385/2032/1982\nf 672/1079/1060 2799/1270/1234 1933/2033/1983\nf 1933/2033/1983 3293/2029/1979 672/1079/1060\nf 604/963/944 3294/2034/1984 1933/2033/1983\nf 1933/2033/1983 2799/1270/1234 604/963/944\nf 863/2035/1985 3283/2036/1986 1933/2033/1983\nf 1933/2033/1983 3294/2034/1984 863/2035/1985\nf 862/2030/1980 3293/2029/1979 1933/2033/1983\nf 1933/2033/1983 3283/2036/1986 862/2030/1980\nf 604/963/944 2804/962/943 1934/2037/1987\nf 1934/2037/1987 3294/2034/1984 604/963/944\nf 605/961/942 3295/2038/1988 1934/2037/1987\nf 1934/2037/1987 2804/962/943 605/961/942\nf 864/2039/1989 3284/2040/1990 1934/2037/1987\nf 1934/2037/1987 3295/2038/1988 864/2039/1989\nf 863/2035/1985 3294/2034/1984 1934/2037/1987\nf 1934/2037/1987 3284/2040/1990 863/2035/1985\nf 605/961/942 2805/998/979 1935/2041/1991\nf 1935/2041/1991 3295/2038/1988 605/961/942\nf 600/723/713 3296/2042/1992 1935/2041/1991\nf 1935/2041/1991 2805/998/979 600/723/713\nf 865/2043/1993 3285/2044/1994 1935/2041/1991\nf 1935/2041/1991 3296/2042/1992 865/2043/1993\nf 864/2039/1989 3295/2038/1988 1935/2041/1991\nf 1935/2041/1991 3285/2044/1994 864/2039/1989\nf 600/723/713 2795/1974/1924 1936/2045/1995\nf 1936/2045/1995 3296/2042/1992 600/723/713\nf 7379/1973/1923 3297/2046/1996 1936/2045/1995\nf 1936/2045/1995 2795/1974/1924 7379/1973/1923\nf 866/2047/1997 3286/2048/1998 1936/2045/1995\nf 1936/2045/1995 3297/2046/1996 866/2047/1997\nf 865/2043/1993 3296/2042/1992 1936/2045/1995\nf 1936/2045/1995 3286/2048/1998 865/2043/1993\nf 592/1969/1919 2781/1967/1917 1937/2049/1999\nf 1937/2049/1999 7386/2050/2000 592/1969/1919\nf 559/575/567 3298/2051/2001 1937/2049/1999\nf 1937/2049/1999 2781/1967/1917 559/575/567\nf 867/2052/2002 3287/2053/2003 1937/2049/1999\nf 1937/2049/1999 3298/2051/2001 867/2052/2002\nf 7387/2054/2004 7386/2050/2000 1937/2049/1999\nf 1937/2049/1999 3287/2053/2003 7387/2054/2004\nf 559/575/567 2785/578/570 1938/2055/2005\nf 1938/2055/2005 3298/2051/2001 559/575/567\nf 595/583/575 3289/2014/1964 1938/2055/2005\nf 1938/2055/2005 2785/578/570 595/583/575\nf 858/2018/1968 3288/2056/2006 1938/2055/2005\nf 1938/2055/2005 3289/2014/1964 858/2018/1968\nf 867/2052/2002 3298/2051/2001 1938/2055/2005\nf 1938/2055/2005 3288/2056/2006 867/2052/2002\nf 847/1966/1916 3257/1965/1915 1939/2057/2007\nf 1939/2057/2007 3310/2058/2008 847/1966/1916\nf 848/1964/1914 3311/2059/2009 1939/2057/2007\nf 1939/2057/2007 3257/1965/1915 848/1964/1914\nf 869/2060/2010 3299/2061/2011 1939/2057/2007\nf 1939/2057/2007 3311/2059/2009 869/2060/2010\nf 868/2062/2012 3310/2058/2008 1939/2057/2007\nf 1939/2057/2007 3299/2061/2011 868/2062/2012\nf 848/1964/1914 3258/1972/1922 1940/2063/2013\nf 1940/2063/2013 3311/2059/2009 848/1964/1914\nf 849/1971/1921 3312/2064/2014 1940/2063/2013\nf 1940/2063/2013 3258/1972/1922 849/1971/1921\nf 870/2065/2015 3300/2066/2016 1940/2063/2013\nf 1940/2063/2013 3312/2064/2014 870/2065/2015\nf 869/2060/2010 3311/2059/2009 1940/2063/2013\nf 1940/2063/2013 3300/2066/2016 869/2060/2010\nf 7381/1980/1930 3259/1979/1929 1941/2067/2017\nf 1941/2067/2017 7388/2068/2018 7381/1980/1930\nf 850/1978/1928 3313/2069/2019 1941/2067/2017\nf 1941/2067/2017 3259/1979/1929 850/1978/1928\nf 871/2070/2020 3301/2071/2021 1941/2067/2017\nf 1941/2067/2017 3313/2069/2019 871/2070/2020\nf 7389/2072/2022 7388/2068/2018 1941/2067/2017\nf 1941/2067/2017 3301/2071/2021 7389/2072/2022\nf 850/1978/1928 3260/1984/1934 1942/2073/2023\nf 1942/2073/2023 3313/2069/2019 850/1978/1928\nf 851/1983/1933 3314/2074/2024 1942/2073/2023\nf 1942/2073/2023 3260/1984/1934 851/1983/1933\nf 872/2075/2025 3302/2076/2026 1942/2073/2023\nf 1942/2073/2023 3314/2074/2024 872/2075/2025\nf 871/2070/2020 3313/2069/2019 1942/2073/2023\nf 1942/2073/2023 3302/2076/2026 871/2070/2020\nf 851/1983/1933 3261/1988/1938 1943/2077/2027\nf 1943/2077/2027 3314/2074/2024 851/1983/1933\nf 852/1987/1937 3315/2078/2028 1943/2077/2027\nf 1943/2077/2027 3261/1988/1938 852/1987/1937\nf 873/2079/2029 3303/2080/2030 1943/2077/2027\nf 1943/2077/2027 3315/2078/2028 873/2079/2029\nf 872/2075/2025 3314/2074/2024 1943/2077/2027\nf 1943/2077/2027 3303/2080/2030 872/2075/2025\nf 852/1987/1937 3262/1992/1942 1944/2081/2031\nf 1944/2081/2031 3315/2078/2028 852/1987/1937\nf 853/1991/1941 3316/2082/2032 1944/2081/2031\nf 1944/2081/2031 3262/1992/1942 853/1991/1941\nf 874/2083/2033 3304/2084/2034 1944/2081/2031\nf 1944/2081/2031 3316/2082/2032 874/2083/2033\nf 873/2079/2029 3315/2078/2028 1944/2081/2031\nf 1944/2081/2031 3304/2084/2034 873/2079/2029\nf 853/1991/1941 3263/1996/1946 1945/2085/2035\nf 1945/2085/2035 3316/2082/2032 853/1991/1941\nf 854/1995/1945 3317/2086/2036 1945/2085/2035\nf 1945/2085/2035 3263/1996/1946 854/1995/1945\nf 875/2087/2037 3305/2088/2038 1945/2085/2035\nf 1945/2085/2035 3317/2086/2036 875/2087/2037\nf 874/2083/2033 3316/2082/2032 1945/2085/2035\nf 1945/2085/2035 3305/2088/2038 874/2083/2033\nf 854/1995/1945 3264/2000/1950 1946/2089/2039\nf 1946/2089/2039 3317/2086/2036 854/1995/1945\nf 855/1999/1949 3318/2090/2040 1946/2089/2039\nf 1946/2089/2039 3264/2000/1950 855/1999/1949\nf 876/2091/2041 3306/2092/2042 1946/2089/2039\nf 1946/2089/2039 3318/2090/2040 876/2091/2041\nf 875/2087/2037 3317/2086/2036 1946/2089/2039\nf 1946/2089/2039 3306/2092/2042 875/2087/2037\nf 7383/2006/1956 3265/2005/1955 1947/2093/2043\nf 1947/2093/2043 7390/2094/2044 7383/2006/1956\nf 856/2004/1954 3319/2095/2045 1947/2093/2043\nf 1947/2093/2043 3265/2005/1955 856/2004/1954\nf 877/2096/2046 3307/2097/2047 1947/2093/2043\nf 1947/2093/2043 3319/2095/2045 877/2096/2046\nf 7391/2098/2048 7390/2094/2044 1947/2093/2043\nf 1947/2093/2043 3307/2097/2047 7391/2098/2048\nf 856/2004/1954 3266/2010/1960 1948/2099/2049\nf 1948/2099/2049 3319/2095/2045 856/2004/1954\nf 857/2009/1959 3320/2100/2050 1948/2099/2049\nf 1948/2099/2049 3266/2010/1960 857/2009/1959\nf 878/2101/2051 3308/2102/2052 1948/2099/2049\nf 1948/2099/2049 3320/2100/2050 878/2101/2051\nf 877/2096/2046 3319/2095/2045 1948/2099/2049\nf 1948/2099/2049 3308/2102/2052 877/2096/2046\nf 857/2009/1959 3267/2012/1962 1949/2103/2053\nf 1949/2103/2053 3320/2100/2050 857/2009/1959\nf 847/1966/1916 3310/2058/2008 1949/2103/2053\nf 1949/2103/2053 3267/2012/1962 847/1966/1916\nf 868/2062/2012 3309/2104/2054 1949/2103/2053\nf 1949/2103/2053 3310/2058/2008 868/2062/2012\nf 878/2101/2051 3320/2100/2050 1949/2103/2053\nf 1949/2103/2053 3309/2104/2054 878/2101/2051\nf 858/2018/1968 3279/2017/1967 1950/2105/2055\nf 1950/2105/2055 3331/2106/2056 858/2018/1968\nf 859/2016/1966 3332/2107/2057 1950/2105/2055\nf 1950/2105/2055 3279/2017/1967 859/2016/1966\nf 880/2108/2058 3321/2109/2059 1950/2105/2055\nf 1950/2105/2055 3332/2107/2057 880/2108/2058\nf 879/2110/2060 3331/2106/2056 1950/2105/2055\nf 1950/2105/2055 3321/2109/2059 879/2110/2060\nf 859/2016/1966 3280/2022/1972 1951/2111/2061\nf 1951/2111/2061 3332/2107/2057 859/2016/1966\nf 860/2021/1971 3333/2112/2062 1951/2111/2061\nf 1951/2111/2061 3280/2022/1972 860/2021/1971\nf 881/2113/2063 3322/2114/2064 1951/2111/2061\nf 1951/2111/2061 3333/2112/2062 881/2113/2063\nf 880/2108/2058 3332/2107/2057 1951/2111/2061\nf 1951/2111/2061 3322/2114/2064 880/2108/2058\nf 860/2021/1971 3281/2026/1976 1952/2115/2065\nf 1952/2115/2065 3333/2112/2062 860/2021/1971\nf 861/2025/1975 3334/2116/2066 1952/2115/2065\nf 1952/2115/2065 3281/2026/1976 861/2025/1975\nf 882/2117/2067 3323/2118/2068 1952/2115/2065\nf 1952/2115/2065 3334/2116/2066 882/2117/2067\nf 881/2113/2063 3333/2112/2062 1952/2115/2065\nf 1952/2115/2065 3323/2118/2068 881/2113/2063\nf 7385/2032/1982 3282/2031/1981 1953/2119/2069\nf 1953/2119/2069 7392/2120/2070 7385/2032/1982\nf 862/2030/1980 3335/2121/2071 1953/2119/2069\nf 1953/2119/2069 3282/2031/1981 862/2030/1980\nf 883/2122/2072 3324/2123/2073 1953/2119/2069\nf 1953/2119/2069 3335/2121/2071 883/2122/2072\nf 7393/2124/2074 7392/2120/2070 1953/2119/2069\nf 1953/2119/2069 3324/2123/2073 7393/2124/2074\nf 862/2030/1980 3283/2036/1986 1954/2125/2075\nf 1954/2125/2075 3335/2121/2071 862/2030/1980\nf 863/2035/1985 3336/2126/2076 1954/2125/2075\nf 1954/2125/2075 3283/2036/1986 863/2035/1985\nf 884/2127/2077 3325/2128/2078 1954/2125/2075\nf 1954/2125/2075 3336/2126/2076 884/2127/2077\nf 883/2122/2072 3335/2121/2071 1954/2125/2075\nf 1954/2125/2075 3325/2128/2078 883/2122/2072\nf 863/2035/1985 3284/2040/1990 1955/2129/2079\nf 1955/2129/2079 3336/2126/2076 863/2035/1985\nf 864/2039/1989 3337/2130/2080 1955/2129/2079\nf 1955/2129/2079 3284/2040/1990 864/2039/1989\nf 885/2131/2081 3326/2132/2082 1955/2129/2079\nf 1955/2129/2079 3337/2130/2080 885/2131/2081\nf 884/2127/2077 3336/2126/2076 1955/2129/2079\nf 1955/2129/2079 3326/2132/2082 884/2127/2077\nf 864/2039/1989 3285/2044/1994 1956/2133/2083\nf 1956/2133/2083 3337/2130/2080 864/2039/1989\nf 865/2043/1993 3338/2134/2084 1956/2133/2083\nf 1956/2133/2083 3285/2044/1994 865/2043/1993\nf 886/2135/2085 3327/2136/2086 1956/2133/2083\nf 1956/2133/2083 3338/2134/2084 886/2135/2085\nf 885/2131/2081 3337/2130/2080 1956/2133/2083\nf 1956/2133/2083 3327/2136/2086 885/2131/2081\nf 865/2043/1993 3286/2048/1998 1957/2137/2087\nf 1957/2137/2087 3338/2134/2084 865/2043/1993\nf 866/2047/1997 3339/2138/2088 1957/2137/2087\nf 1957/2137/2087 3286/2048/1998 866/2047/1997\nf 887/2139/2089 3328/2140/2090 1957/2137/2087\nf 1957/2137/2087 3339/2138/2088 887/2139/2089\nf 886/2135/2085 3338/2134/2084 1957/2137/2087\nf 1957/2137/2087 3328/2140/2090 886/2135/2085\nf 7387/2054/2004 3287/2053/2003 1958/2141/2091\nf 1958/2141/2091 7394/2142/2092 7387/2054/2004\nf 867/2052/2002 3340/2143/2093 1958/2141/2091\nf 1958/2141/2091 3287/2053/2003 867/2052/2002\nf 888/2144/2094 3329/2145/2095 1958/2141/2091\nf 1958/2141/2091 3340/2143/2093 888/2144/2094\nf 7395/2146/2096 7394/2142/2092 1958/2141/2091\nf 1958/2141/2091 3329/2145/2095 7395/2146/2096\nf 867/2052/2002 3288/2056/2006 1959/2147/2097\nf 1959/2147/2097 3340/2143/2093 867/2052/2002\nf 858/2018/1968 3331/2106/2056 1959/2147/2097\nf 1959/2147/2097 3288/2056/2006 858/2018/1968\nf 879/2110/2060 3330/2148/2098 1959/2147/2097\nf 1959/2147/2097 3331/2106/2056 879/2110/2060\nf 888/2144/2094 3340/2143/2093 1959/2147/2097\nf 1959/2147/2097 3330/2148/2098 888/2144/2094\nf 564/742/732 2735/745/735 1960/2149/2099\nf 1960/2149/2099 3349/2150/2100 564/742/732\nf 780/750/740 3350/2151/2101 1960/2149/2099\nf 1960/2149/2099 2735/745/735 780/750/740\nf 890/2152/2102 3341/2153/2103 1960/2149/2099\nf 1960/2149/2099 3350/2151/2101 890/2152/2102\nf 889/2154/2104 3349/2150/2100 1960/2149/2099\nf 1960/2149/2099 3341/2153/2103 889/2154/2104\nf 780/750/740 3107/1696/1646 1961/2155/2105\nf 1961/2155/2105 3350/2151/2101 780/750/740\nf 783/1680/1630 3351/2156/2106 1961/2155/2105\nf 1961/2155/2105 3107/1696/1646 783/1680/1630\nf 891/2157/2107 3342/2158/2108 1961/2155/2105\nf 1961/2155/2105 3351/2156/2106 891/2157/2107\nf 890/2152/2102 3350/2151/2101 1961/2155/2105\nf 1961/2155/2105 3342/2158/2108 890/2152/2102\nf 783/1680/1630 3105/1683/1633 1962/2159/2109\nf 1962/2159/2109 3351/2156/2106 783/1680/1630\nf 781/1688/1638 3352/2160/2110 1962/2159/2109\nf 1962/2159/2109 3105/1683/1633 781/1688/1638\nf 892/2161/2111 3343/2162/2112 1962/2159/2109\nf 1962/2159/2109 3352/2160/2110 892/2161/2111\nf 891/2157/2107 3351/2156/2106 1962/2159/2109\nf 1962/2159/2109 3343/2162/2112 891/2157/2107\nf 781/1688/1638 7396/2163/2113 1963/2164/2114\nf 1963/2164/2114 3352/2160/2110 781/1688/1638\nf 7359/1714/1664 3353/2165/2115 1963/2164/2114\nf 1963/2164/2114 7396/2163/2113 7359/1714/1664\nf 893/2166/2116 3344/2167/2117 1963/2164/2114\nf 1963/2164/2114 3353/2165/2115 893/2166/2116\nf 892/2161/2111 3352/2160/2110 1963/2164/2114\nf 1963/2164/2114 3344/2167/2117 892/2161/2111\nf 7359/1714/1664 2945/1713/1663 1964/2168/2118\nf 1964/2168/2118 3353/2165/2115 7359/1714/1664\nf 683/610/602 3354/2169/2119 1964/2168/2118\nf 1964/2168/2118 2945/1713/1663 683/610/602\nf 894/2170/2120 3345/2171/2121 1964/2168/2118\nf 1964/2168/2118 3354/2169/2119 894/2170/2120\nf 893/2166/2116 3353/2165/2115 1964/2168/2118\nf 1964/2168/2118 3345/2171/2121 893/2166/2116\nf 683/610/602 2938/609/601 1965/2172/2122\nf 1965/2172/2122 3354/2169/2119 683/610/602\nf 697/608/600 3355/2173/2123 1965/2172/2122\nf 1965/2172/2122 2938/609/601 697/608/600\nf 895/2174/2124 3346/2175/2125 1965/2172/2122\nf 1965/2172/2122 3355/2173/2123 895/2174/2124\nf 894/2170/2120 3354/2169/2119 1965/2172/2122\nf 1965/2172/2122 3346/2175/2125 894/2170/2120\nf 697/608/600 2950/1159/1134 1966/2176/2126\nf 1966/2176/2126 3355/2173/2123 697/608/600\nf 689/1158/1133 3356/2177/2127 1966/2176/2126\nf 1966/2176/2126 2950/1159/1134 689/1158/1133\nf 896/2178/2128 3347/2179/2129 1966/2176/2126\nf 1966/2176/2126 3356/2177/2127 896/2178/2128\nf 895/2174/2124 3355/2173/2123 1966/2176/2126\nf 1966/2176/2126 3347/2179/2129 895/2174/2124\nf 689/1158/1133 3134/1566/1526 1967/2180/2130\nf 1967/2180/2130 3356/2177/2127 689/1158/1133\nf 564/742/732 3349/2150/2100 1967/2180/2130\nf 1967/2180/2130 3134/1566/1526 564/742/732\nf 889/2154/2104 3348/2181/2131 1967/2180/2130\nf 1967/2180/2130 3349/2150/2100 889/2154/2104\nf 896/2178/2128 3356/2177/2127 1967/2180/2130\nf 1967/2180/2130 3348/2181/2131 896/2178/2128\nf 889/2154/2104 3341/2153/2103 1968/2182/2132\nf 1968/2182/2132 3365/2183/2133 889/2154/2104\nf 890/2152/2102 3366/2184/2134 1968/2182/2132\nf 1968/2182/2132 3341/2153/2103 890/2152/2102\nf 898/2185/2135 3357/2186/2136 1968/2182/2132\nf 1968/2182/2132 3366/2184/2134 898/2185/2135\nf 897/2187/2137 3365/2183/2133 1968/2182/2132\nf 1968/2182/2132 3357/2186/2136 897/2187/2137\nf 890/2152/2102 3342/2158/2108 1969/2188/2138\nf 1969/2188/2138 3366/2184/2134 890/2152/2102\nf 891/2157/2107 3367/2189/2139 1969/2188/2138\nf 1969/2188/2138 3342/2158/2108 891/2157/2107\nf 899/2190/2140 3358/2191/2141 1969/2188/2138\nf 1969/2188/2138 3367/2189/2139 899/2190/2140\nf 898/2185/2135 3366/2184/2134 1969/2188/2138\nf 1969/2188/2138 3358/2191/2141 898/2185/2135\nf 891/2157/2107 3343/2162/2112 1970/2192/2142\nf 1970/2192/2142 3367/2189/2139 891/2157/2107\nf 892/2161/2111 3368/2193/2143 1970/2192/2142\nf 1970/2192/2142 3343/2162/2112 892/2161/2111\nf 900/2194/2144 3359/2195/2145 1970/2192/2142\nf 1970/2192/2142 3368/2193/2143 900/2194/2144\nf 899/2190/2140 3367/2189/2139 1970/2192/2142\nf 1970/2192/2142 3359/2195/2145 899/2190/2140\nf 892/2161/2111 3344/2167/2117 1971/2196/2146\nf 1971/2196/2146 3368/2193/2143 892/2161/2111\nf 893/2166/2116 3369/2197/2147 1971/2196/2146\nf 1971/2196/2146 3344/2167/2117 893/2166/2116\nf 901/2198/2148 3360/2199/2149 1971/2196/2146\nf 1971/2196/2146 3369/2197/2147 901/2198/2148\nf 900/2194/2144 3368/2193/2143 1971/2196/2146\nf 1971/2196/2146 3360/2199/2149 900/2194/2144\nf 893/2166/2116 3345/2171/2121 1972/2200/2150\nf 1972/2200/2150 3369/2197/2147 893/2166/2116\nf 894/2170/2120 3370/2201/2151 1972/2200/2150\nf 1972/2200/2150 3345/2171/2121 894/2170/2120\nf 902/2202/2152 3361/2203/2153 1972/2200/2150\nf 1972/2200/2150 3370/2201/2151 902/2202/2152\nf 901/2198/2148 3369/2197/2147 1972/2200/2150\nf 1972/2200/2150 3361/2203/2153 901/2198/2148\nf 894/2170/2120 3346/2175/2125 1973/2204/2154\nf 1973/2204/2154 3370/2201/2151 894/2170/2120\nf 895/2174/2124 3371/2205/2155 1973/2204/2154\nf 1973/2204/2154 3346/2175/2125 895/2174/2124\nf 903/2206/2156 3362/2207/2157 1973/2204/2154\nf 1973/2204/2154 3371/2205/2155 903/2206/2156\nf 902/2202/2152 3370/2201/2151 1973/2204/2154\nf 1973/2204/2154 3362/2207/2157 902/2202/2152\nf 895/2174/2124 3347/2179/2129 1974/2208/2158\nf 1974/2208/2158 3371/2205/2155 895/2174/2124\nf 896/2178/2128 3372/2209/2159 1974/2208/2158\nf 1974/2208/2158 3347/2179/2129 896/2178/2128\nf 904/2210/2160 3363/2211/2161 1974/2208/2158\nf 1974/2208/2158 3372/2209/2159 904/2210/2160\nf 903/2206/2156 3371/2205/2155 1974/2208/2158\nf 1974/2208/2158 3363/2211/2161 903/2206/2156\nf 896/2178/2128 3348/2181/2131 1975/2212/2162\nf 1975/2212/2162 3372/2209/2159 896/2178/2128\nf 889/2154/2104 3365/2183/2133 1975/2212/2162\nf 1975/2212/2162 3348/2181/2131 889/2154/2104\nf 897/2187/2137 3364/2213/2163 1975/2212/2162\nf 1975/2212/2162 3365/2183/2133 897/2187/2137\nf 904/2210/2160 3372/2209/2159 1975/2212/2162\nf 1975/2212/2162 3364/2213/2163 904/2210/2160\nf 682/1343/1307 2943/1346/1310 1976/2214/2164\nf 1976/2214/2164 3380/2215/2165 682/1343/1307\nf 756/1350/1314 3381/2216/2166 1976/2214/2164\nf 1976/2214/2164 2943/1346/1310 756/1350/1314\nf 906/2217/2167 3373/2218/2168 1976/2214/2164\nf 1976/2214/2164 3381/2216/2166 906/2217/2167\nf 905/2219/2169 3380/2215/2165 1976/2214/2164\nf 1976/2214/2164 3373/2218/2168 905/2219/2169\nf 756/1350/1314 3027/1567/1527 1977/2220/2170\nf 1977/2220/2170 3381/2216/2166 756/1350/1314\nf 689/1158/1133 3382/2221/2171 1977/2220/2170\nf 1977/2220/2170 3027/1567/1527 689/1158/1133\nf 907/2222/2172 3374/2223/2173 1977/2220/2170\nf 1977/2220/2170 3382/2221/2171 907/2222/2172\nf 906/2217/2167 3381/2216/2166 1977/2220/2170\nf 1977/2220/2170 3374/2223/2173 906/2217/2167\nf 689/1158/1133 2740/1157/1132 1978/2224/2174\nf 1978/2224/2174 3382/2221/2171 689/1158/1133\nf 569/1156/1131 3383/2225/2175 1978/2224/2174\nf 1978/2224/2174 2740/1157/1132 569/1156/1131\nf 908/2226/2176 3375/2227/2177 1978/2224/2174\nf 1978/2224/2174 3383/2225/2175 908/2226/2176\nf 907/2222/2172 3382/2221/2171 1978/2224/2174\nf 1978/2224/2174 3375/2227/2177 907/2222/2172\nf 569/1156/1131 2899/1233/1197 1979/2228/2178\nf 1979/2228/2178 3383/2225/2175 569/1156/1131\nf 659/1232/1196 3384/2229/2179 1979/2228/2178\nf 1979/2228/2178 2899/1233/1197 659/1232/1196\nf 909/2230/2180 3376/2231/2181 1979/2228/2178\nf 1979/2228/2178 3384/2229/2179 909/2230/2180\nf 908/2226/2176 3383/2225/2175 1979/2228/2178\nf 1979/2228/2178 3376/2231/2181 908/2226/2176\nf 659/1232/1196 3062/1610/1564 1980/2232/2182\nf 1980/2232/2182 3384/2229/2179 659/1232/1196\nf 763/1609/1563 3385/2233/2183 1980/2232/2182\nf 1980/2232/2182 3062/1610/1564 763/1609/1563\nf 910/2234/2184 3377/2235/2185 1980/2232/2182\nf 1980/2232/2182 3385/2233/2183 910/2234/2184\nf 909/2230/2180 3384/2229/2179 1980/2232/2182\nf 1980/2232/2182 3377/2235/2185 909/2230/2180\nf 763/1609/1563 7397/2236/2186 1981/2237/2187\nf 1981/2237/2187 3385/2233/2183 763/1609/1563\nf 7398/2238/2188 3386/2239/2189 1981/2237/2187\nf 1981/2237/2187 7397/2236/2186 7398/2238/2188\nf 911/2240/2190 3378/2241/2191 1981/2237/2187\nf 1981/2237/2187 3386/2239/2189 911/2240/2190\nf 910/2234/2184 3385/2233/2183 1981/2237/2187\nf 1981/2237/2187 3378/2241/2191 910/2234/2184\nf 7398/2238/2188 7399/2242/2192 1982/2243/2193\nf 1982/2243/2193 3386/2239/2189 7398/2238/2188\nf 7400/2244/2194 4530/2245/2195 1982/2243/2193\nf 1982/2243/2193 7399/2242/2192 7400/2244/2194\nf 1524/2246/2196 3379/2247/2197 1982/2243/2193\nf 1982/2243/2193 4530/2245/2195 1524/2246/2196\nf 911/2240/2190 3386/2239/2189 1982/2243/2193\nf 1982/2243/2193 3379/2247/2197 911/2240/2190\nf 905/2219/2169 3373/2218/2168 1983/2248/2198\nf 1983/2248/2198 3397/2249/2199 905/2219/2169\nf 906/2217/2167 3398/2250/2200 1983/2248/2198\nf 1983/2248/2198 3373/2218/2168 906/2217/2167\nf 7401/2251/2201 7402/2252/2202 1983/2248/2198\nf 1983/2248/2198 3398/2250/2200 7401/2251/2201\nf 7403/2253/2203 3397/2249/2199 1983/2248/2198\nf 1983/2248/2198 7402/2252/2202 7403/2253/2203\nf 906/2217/2167 3374/2223/2173 1984/2254/2204\nf 1984/2254/2204 3398/2250/2200 906/2217/2167\nf 907/2222/2172 3399/2255/2205 1984/2254/2204\nf 1984/2254/2204 3374/2223/2173 907/2222/2172\nf 7404/2256/2206 7405/2257/2207 1984/2254/2204\nf 1984/2254/2204 3399/2255/2205 7404/2256/2206\nf 7401/2251/2201 3398/2250/2200 1984/2254/2204\nf 1984/2254/2204 7405/2257/2207 7401/2251/2201\nf 907/2222/2172 3375/2227/2177 1985/2258/2208\nf 1985/2258/2208 3399/2255/2205 907/2222/2172\nf 908/2226/2176 3400/2259/2209 1985/2258/2208\nf 1985/2258/2208 3375/2227/2177 908/2226/2176\nf 7406/2260/2210 7407/2261/2211 1985/2258/2208\nf 1985/2258/2208 3400/2259/2209 7406/2260/2210\nf 7404/2256/2206 3399/2255/2205 1985/2258/2208\nf 1985/2258/2208 7407/2261/2211 7404/2256/2206\nf 908/2226/2176 3376/2231/2181 1986/2262/2212\nf 1986/2262/2212 3400/2259/2209 908/2226/2176\nf 909/2230/2180 3401/2263/2213 1986/2262/2212\nf 1986/2262/2212 3376/2231/2181 909/2230/2180\nf 7408/2264/2214 7409/2265/2215 1986/2262/2212\nf 1986/2262/2212 3401/2263/2213 7408/2264/2214\nf 7406/2260/2210 3400/2259/2209 1986/2262/2212\nf 1986/2262/2212 7409/2265/2215 7406/2260/2210\nf 909/2230/2180 3377/2235/2185 1987/2266/2216\nf 1987/2266/2216 3401/2263/2213 909/2230/2180\nf 910/2234/2184 3402/2267/2217 1987/2266/2216\nf 1987/2266/2216 3377/2235/2185 910/2234/2184\nf 7410/2268/2218 7411/2269/2219 1987/2266/2216\nf 1987/2266/2216 3402/2267/2217 7410/2268/2218\nf 7408/2264/2214 3401/2263/2213 1987/2266/2216\nf 1987/2266/2216 7411/2269/2219 7408/2264/2214\nf 910/2234/2184 3378/2241/2191 1988/2270/2220\nf 1988/2270/2220 3402/2267/2217 910/2234/2184\nf 911/2240/2190 3403/2271/2221 1988/2270/2220\nf 1988/2270/2220 3378/2241/2191 911/2240/2190\nf 7412/2272/2222 7413/2273/2223 1988/2270/2220\nf 1988/2270/2220 3403/2271/2221 7412/2272/2222\nf 7410/2268/2218 3402/2267/2217 1988/2270/2220\nf 1988/2270/2220 7413/2273/2223 7410/2268/2218\nf 911/2240/2190 3379/2247/2197 1989/2274/2224\nf 1989/2274/2224 3403/2271/2221 911/2240/2190\nf 1524/2246/2196 3404/2275/2225 1989/2274/2224\nf 1989/2274/2224 3379/2247/2197 1524/2246/2196\nf 7414/2276/2226 7415/2277/2227 1989/2274/2224\nf 1989/2274/2224 3404/2275/2225 7414/2276/2226\nf 7412/2272/2222 3403/2271/2221 1989/2274/2224\nf 1989/2274/2224 7415/2277/2227 7412/2272/2222\nf 634/1022/1003 2699/1020/1001 1990/2278/2228\nf 1990/2278/2228 3415/2279/2229 634/1022/1003\nf 7276/1015/996 3416/2280/2230 1990/2278/2228\nf 1990/2278/2228 2699/1020/1001 7276/1015/996\nf 923/2281/2231 3405/2282/2232 1990/2278/2228\nf 1990/2278/2228 3416/2280/2230 923/2281/2231\nf 922/2283/2233 3415/2279/2229 1990/2278/2228\nf 1990/2278/2228 3405/2282/2232 922/2283/2233\nf 7276/1015/996 7416/2284/2234 1991/2285/2235\nf 1991/2285/2235 3416/2280/2230 7276/1015/996\nf 7417/2286/2236 3417/2287/2237 1991/2285/2235\nf 1991/2285/2235 7416/2284/2234 7417/2286/2236\nf 924/2288/2238 3406/2289/2239 1991/2285/2235\nf 1991/2285/2235 3417/2287/2237 924/2288/2238\nf 923/2281/2231 3416/2280/2230 1991/2285/2235\nf 1991/2285/2235 3406/2289/2239 923/2281/2231\nf 7417/2286/2236 7418/2290/2240 1992/2291/2241\nf 1992/2291/2241 3417/2287/2237 7417/2286/2236\nf 7419/2292/2242 3418/2293/2243 1992/2291/2241\nf 1992/2291/2241 7418/2290/2240 7419/2292/2242\nf 925/2294/2244 3407/2295/2245 1992/2291/2241\nf 1992/2291/2241 3418/2293/2243 925/2294/2244\nf 924/2288/2238 3417/2287/2237 1992/2291/2241\nf 1992/2291/2241 3407/2295/2245 924/2288/2238\nf 7419/2292/2242 7420/2296/2246 1993/2297/2247\nf 1993/2297/2247 3418/2293/2243 7419/2292/2242\nf 7421/2298/2248 3419/2299/2249 1993/2297/2247\nf 1993/2297/2247 7420/2296/2246 7421/2298/2248\nf 926/2300/2250 3408/2301/2251 1993/2297/2247\nf 1993/2297/2247 3419/2299/2249 926/2300/2250\nf 925/2294/2244 3418/2293/2243 1993/2297/2247\nf 1993/2297/2247 3408/2301/2251 925/2294/2244\nf 7421/2298/2248 7422/2302/2252 1994/2303/2253\nf 1994/2303/2253 3419/2299/2249 7421/2298/2248\nf 7423/2304/2254 3420/2305/2255 1994/2303/2253\nf 1994/2303/2253 7422/2302/2252 7423/2304/2254\nf 927/2306/2256 3409/2307/2257 1994/2303/2253\nf 1994/2303/2253 3420/2305/2255 927/2306/2256\nf 926/2300/2250 3419/2299/2249 1994/2303/2253\nf 1994/2303/2253 3409/2307/2257 926/2300/2250\nf 7423/2304/2254 7424/2308/2258 1995/2309/2259\nf 1995/2309/2259 3420/2305/2255 7423/2304/2254\nf 7316/1559/1519 3421/2310/2260 1995/2309/2259\nf 1995/2309/2259 7424/2308/2258 7316/1559/1519\nf 928/2311/2261 3410/2312/2262 1995/2309/2259\nf 1995/2309/2259 3421/2310/2260 928/2311/2261\nf 927/2306/2256 3420/2305/2255 1995/2309/2259\nf 1995/2309/2259 3410/2312/2262 927/2306/2256\nf 7316/1559/1519 3050/1562/1522 1996/2313/2263\nf 1996/2313/2263 3421/2310/2260 7316/1559/1519\nf 755/626/616 3422/2314/2264 1996/2313/2263\nf 1996/2313/2263 3050/1562/1522 755/626/616\nf 929/2315/2265 3411/2316/2266 1996/2313/2263\nf 1996/2313/2263 3422/2314/2264 929/2315/2265\nf 928/2311/2261 3421/2310/2260 1996/2313/2263\nf 1996/2313/2263 3411/2316/2266 928/2311/2261\nf 755/626/616 3030/625/615 1997/2317/2267\nf 1997/2317/2267 3422/2314/2264 755/626/616\nf 739/624/614 3423/2318/2268 1997/2317/2267\nf 1997/2317/2267 3030/625/615 739/624/614\nf 930/2319/2269 3412/2320/2270 1997/2317/2267\nf 1997/2317/2267 3423/2318/2268 930/2319/2269\nf 929/2315/2265 3422/2314/2264 1997/2317/2267\nf 1997/2317/2267 3412/2320/2270 929/2315/2265\nf 739/624/614 2731/1027/1008 1998/2321/2271\nf 1998/2321/2271 3423/2318/2268 739/624/614\nf 570/1026/1007 3424/2322/2272 1998/2321/2271\nf 1998/2321/2271 2731/1027/1008 570/1026/1007\nf 931/2323/2273 3413/2324/2274 1998/2321/2271\nf 1998/2321/2271 3424/2322/2272 931/2323/2273\nf 930/2319/2269 3423/2318/2268 1998/2321/2271\nf 1998/2321/2271 3413/2324/2274 930/2319/2269\nf 570/1026/1007 2855/1193/1168 1999/2325/2275\nf 1999/2325/2275 3424/2322/2272 570/1026/1007\nf 634/1022/1003 3415/2279/2229 1999/2325/2275\nf 1999/2325/2275 2855/1193/1168 634/1022/1003\nf 922/2283/2233 3414/2326/2276 1999/2325/2275\nf 1999/2325/2275 3415/2279/2229 922/2283/2233\nf 931/2323/2273 3424/2322/2272 1999/2325/2275\nf 1999/2325/2275 3414/2326/2276 931/2323/2273\nf 922/2283/2233 3405/2282/2232 2000/2327/2277\nf 2000/2327/2277 3435/2328/2278 922/2283/2233\nf 923/2281/2231 3436/2329/2279 2000/2327/2277\nf 2000/2327/2277 3405/2282/2232 923/2281/2231\nf 933/2330/2280 3425/2331/2281 2000/2327/2277\nf 2000/2327/2277 3436/2329/2279 933/2330/2280\nf 932/2332/2282 3435/2328/2278 2000/2327/2277\nf 2000/2327/2277 3425/2331/2281 932/2332/2282\nf 923/2281/2231 3406/2289/2239 2001/2333/2283\nf 2001/2333/2283 3436/2329/2279 923/2281/2231\nf 924/2288/2238 3437/2334/2284 2001/2333/2283\nf 2001/2333/2283 3406/2289/2239 924/2288/2238\nf 934/2335/2285 3426/2336/2286 2001/2333/2283\nf 2001/2333/2283 3437/2334/2284 934/2335/2285\nf 933/2330/2280 3436/2329/2279 2001/2333/2283\nf 2001/2333/2283 3426/2336/2286 933/2330/2280\nf 924/2288/2238 3407/2295/2245 2002/2337/2287\nf 2002/2337/2287 3437/2334/2284 924/2288/2238\nf 925/2294/2244 3438/2338/2288 2002/2337/2287\nf 2002/2337/2287 3407/2295/2245 925/2294/2244\nf 935/2339/2289 3427/2340/2290 2002/2337/2287\nf 2002/2337/2287 3438/2338/2288 935/2339/2289\nf 934/2335/2285 3437/2334/2284 2002/2337/2287\nf 2002/2337/2287 3427/2340/2290 934/2335/2285\nf 925/2294/2244 3408/2301/2251 2003/2341/2291\nf 2003/2341/2291 3438/2338/2288 925/2294/2244\nf 926/2300/2250 3439/2342/2292 2003/2341/2291\nf 2003/2341/2291 3408/2301/2251 926/2300/2250\nf 936/2343/2293 3428/2344/2294 2003/2341/2291\nf 2003/2341/2291 3439/2342/2292 936/2343/2293\nf 935/2339/2289 3438/2338/2288 2003/2341/2291\nf 2003/2341/2291 3428/2344/2294 935/2339/2289\nf 926/2300/2250 3409/2307/2257 2004/2345/2295\nf 2004/2345/2295 3439/2342/2292 926/2300/2250\nf 927/2306/2256 3440/2346/2296 2004/2345/2295\nf 2004/2345/2295 3409/2307/2257 927/2306/2256\nf 937/2347/2297 3429/2348/2298 2004/2345/2295\nf 2004/2345/2295 3440/2346/2296 937/2347/2297\nf 936/2343/2293 3439/2342/2292 2004/2345/2295\nf 2004/2345/2295 3429/2348/2298 936/2343/2293\nf 927/2306/2256 3410/2312/2262 2005/2349/2299\nf 2005/2349/2299 3440/2346/2296 927/2306/2256\nf 928/2311/2261 3441/2350/2300 2005/2349/2299\nf 2005/2349/2299 3410/2312/2262 928/2311/2261\nf 938/2351/2301 3430/2352/2302 2005/2349/2299\nf 2005/2349/2299 3441/2350/2300 938/2351/2301\nf 937/2347/2297 3440/2346/2296 2005/2349/2299\nf 2005/2349/2299 3430/2352/2302 937/2347/2297\nf 928/2311/2261 3411/2316/2266 2006/2353/2303\nf 2006/2353/2303 3441/2350/2300 928/2311/2261\nf 929/2315/2265 3442/2354/2304 2006/2353/2303\nf 2006/2353/2303 3411/2316/2266 929/2315/2265\nf 939/2355/2305 3431/2356/2306 2006/2353/2303\nf 2006/2353/2303 3442/2354/2304 939/2355/2305\nf 938/2351/2301 3441/2350/2300 2006/2353/2303\nf 2006/2353/2303 3431/2356/2306 938/2351/2301\nf 929/2315/2265 3412/2320/2270 2007/2357/2307\nf 2007/2357/2307 3442/2354/2304 929/2315/2265\nf 930/2319/2269 3443/2358/2308 2007/2357/2307\nf 2007/2357/2307 3412/2320/2270 930/2319/2269\nf 940/2359/2309 3432/2360/2310 2007/2357/2307\nf 2007/2357/2307 3443/2358/2308 940/2359/2309\nf 939/2355/2305 3442/2354/2304 2007/2357/2307\nf 2007/2357/2307 3432/2360/2310 939/2355/2305\nf 930/2319/2269 3413/2324/2274 2008/2361/2311\nf 2008/2361/2311 3443/2358/2308 930/2319/2269\nf 931/2323/2273 3444/2362/2312 2008/2361/2311\nf 2008/2361/2311 3413/2324/2274 931/2323/2273\nf 941/2363/2313 3433/2364/2314 2008/2361/2311\nf 2008/2361/2311 3444/2362/2312 941/2363/2313\nf 940/2359/2309 3443/2358/2308 2008/2361/2311\nf 2008/2361/2311 3433/2364/2314 940/2359/2309\nf 931/2323/2273 3414/2326/2276 2009/2365/2315\nf 2009/2365/2315 3444/2362/2312 931/2323/2273\nf 922/2283/2233 3435/2328/2278 2009/2365/2315\nf 2009/2365/2315 3414/2326/2276 922/2283/2233\nf 932/2332/2282 3434/2366/2316 2009/2365/2315\nf 2009/2365/2315 3435/2328/2278 932/2332/2282\nf 941/2363/2313 3444/2362/2312 2009/2365/2315\nf 2009/2365/2315 3434/2366/2316 941/2363/2313\nf 662/918/899 2720/915/896 2010/2367/2317\nf 2010/2367/2317 3454/2368/2318 662/918/899\nf 586/914/895 3455/2369/2319 2010/2367/2317\nf 2010/2367/2317 2720/915/896 586/914/895\nf 943/2370/2320 3445/2371/2321 2010/2367/2317\nf 2010/2367/2317 3455/2369/2319 943/2370/2320\nf 942/2372/2322 3454/2368/2318 2010/2367/2317\nf 2010/2367/2317 3445/2371/2321 942/2372/2322\nf 586/914/895 2843/1114/1095 2011/2373/2323\nf 2011/2373/2323 3455/2369/2319 586/914/895\nf 626/1113/1094 3456/2374/2324 2011/2373/2323\nf 2011/2373/2323 2843/1114/1095 626/1113/1094\nf 944/2375/2325 3446/2376/2326 2011/2373/2323\nf 2011/2373/2323 3456/2374/2324 944/2375/2325\nf 943/2370/2320 3455/2369/2319 2011/2373/2323\nf 2011/2373/2323 3446/2376/2326 943/2370/2320\nf 626/1113/1094 2770/2377/2327 2012/2378/2328\nf 2012/2378/2328 3456/2374/2324 626/1113/1094\nf 960/1446/1410 3498/2379/2329 2012/2378/2328\nf 2012/2378/2328 2770/2377/2327 960/1446/1410\nf 967/2380/2330 3487/2381/2331 2012/2378/2328\nf 2012/2378/2328 3498/2379/2329 967/2380/2330\nf 944/2375/2325 3456/2374/2324 2012/2378/2328\nf 2012/2378/2328 3487/2381/2331 944/2375/2325\nf 7425/2382/2332 7426/2383/2333 2013/2384/2334\nf 2013/2384/2334 7427/2385/2335 7425/2382/2332\nf 7323/1608/1562 3457/2386/2336 2013/2384/2334\nf 2013/2384/2334 7426/2383/2333 7323/1608/1562\nf 945/2387/2337 3448/2388/2338 2013/2384/2334\nf 2013/2384/2334 3457/2386/2336 945/2387/2337\nf 7428/2389/2339 7427/2385/2335 2013/2384/2334\nf 2013/2384/2334 3448/2388/2338 7428/2389/2339\nf 7323/1608/1562 2900/1607/1561 2014/2390/2340\nf 2014/2390/2340 3457/2386/2336 7323/1608/1562\nf 660/1471/1435 3458/2391/2341 2014/2390/2340\nf 2014/2390/2340 2900/1607/1561 660/1471/1435\nf 946/2392/2342 3449/2393/2343 2014/2390/2340\nf 2014/2390/2340 3458/2391/2341 946/2392/2342\nf 945/2387/2337 3457/2386/2336 2014/2390/2340\nf 2014/2390/2340 3449/2393/2343 945/2387/2337\nf 660/1471/1435 2762/1470/1434 2015/2394/2344\nf 2015/2394/2344 3458/2391/2341 660/1471/1435\nf 580/1250/1214 3459/2395/2345 2015/2394/2344\nf 2015/2394/2344 2762/1470/1434 580/1250/1214\nf 947/2396/2346 3450/2397/2347 2015/2394/2344\nf 2015/2394/2344 3459/2395/2345 947/2396/2346\nf 946/2392/2342 3458/2391/2341 2015/2394/2344\nf 2015/2394/2344 3450/2397/2347 946/2392/2342\nf 580/1250/1214 2911/1248/1212 2016/2398/2348\nf 2016/2398/2348 3459/2395/2345 580/1250/1214\nf 667/737/727 3460/2399/2349 2016/2398/2348\nf 2016/2398/2348 2911/1248/1212 667/737/727\nf 948/2400/2350 3451/2401/2351 2016/2398/2348\nf 2016/2398/2348 3460/2399/2349 948/2400/2350\nf 947/2396/2346 3459/2395/2345 2016/2398/2348\nf 2016/2398/2348 3451/2401/2351 947/2396/2346\nf 667/737/727 2756/734/724 2017/2402/2352\nf 2017/2402/2352 3460/2399/2349 667/737/727\nf 561/733/723 3461/2403/2353 2017/2402/2352\nf 2017/2402/2352 2756/734/724 561/733/723\nf 949/2404/2354 3452/2405/2355 2017/2402/2352\nf 2017/2402/2352 3461/2403/2353 949/2404/2354\nf 948/2400/2350 3460/2399/2349 2017/2402/2352\nf 2017/2402/2352 3452/2405/2355 948/2400/2350\nf 561/733/723 2906/1241/1205 2018/2406/2356\nf 2018/2406/2356 3461/2403/2353 561/733/723\nf 662/918/899 3454/2368/2318 2018/2406/2356\nf 2018/2406/2356 2906/1241/1205 662/918/899\nf 942/2372/2322 3453/2407/2357 2018/2406/2356\nf 2018/2406/2356 3454/2368/2318 942/2372/2322\nf 949/2404/2354 3461/2403/2353 2018/2406/2356\nf 2018/2406/2356 3453/2407/2357 949/2404/2354\nf 670/1068/1049 2775/1065/1046 2019/2408/2358\nf 2019/2408/2358 3470/2409/2359 670/1068/1049\nf 617/1064/1045 3471/2410/2360 2019/2408/2358\nf 2019/2408/2358 2775/1065/1046 617/1064/1045\nf 951/2411/2361 3462/2412/2362 2019/2408/2358\nf 2019/2408/2358 3471/2410/2360 951/2411/2361\nf 950/2413/2363 3470/2409/2359 2019/2408/2358\nf 2019/2408/2358 3462/2412/2362 950/2413/2363\nf 617/1064/1045 2929/1281/1245 2020/2414/2364\nf 2020/2414/2364 3471/2410/2360 617/1064/1045\nf 678/1280/1244 3472/2415/2365 2020/2414/2364\nf 2020/2414/2364 2929/1281/1245 678/1280/1244\nf 952/2416/2366 3463/2417/2367 2020/2414/2364\nf 2020/2414/2364 3472/2415/2365 952/2416/2366\nf 951/2411/2361 3471/2410/2360 2020/2414/2364\nf 2020/2414/2364 3463/2417/2367 951/2411/2361\nf 678/1280/1244 2960/1289/1253 2021/2418/2368\nf 2021/2418/2368 3472/2415/2365 678/1280/1244\nf 708/1293/1257 3473/2419/2369 2021/2418/2368\nf 2021/2418/2368 2960/1289/1253 708/1293/1257\nf 953/2420/2370 3464/2421/2371 2021/2418/2368\nf 2021/2418/2368 3473/2419/2369 953/2420/2370\nf 952/2416/2366 3472/2415/2365 2021/2418/2368\nf 2021/2418/2368 3464/2421/2371 952/2416/2366\nf 708/1293/1257 2933/1443/1407 2022/2422/2372\nf 2022/2422/2372 3473/2419/2369 708/1293/1257\nf 680/1440/1404 3474/2423/2373 2022/2422/2372\nf 2022/2422/2372 2933/1443/1407 680/1440/1404\nf 954/2424/2374 3465/2425/2375 2022/2422/2372\nf 2022/2422/2372 3474/2423/2373 954/2424/2374\nf 953/2420/2370 3473/2419/2369 2022/2422/2372\nf 2022/2422/2372 3465/2425/2375 953/2420/2370\nf 680/1440/1404 2935/1439/1403 2023/2426/2376\nf 2023/2426/2376 3474/2423/2373 680/1440/1404\nf 681/1309/1273 7429/2427/2377 2023/2426/2376\nf 2023/2426/2376 2935/1439/1403 681/1309/1273\nf 7430/2428/2378 3466/2429/2379 2023/2426/2376\nf 2023/2426/2376 7429/2427/2377 7430/2428/2378\nf 954/2424/2374 3474/2423/2373 2023/2426/2376\nf 2023/2426/2376 3466/2429/2379 954/2424/2374\nf 588/946/927 2844/949/930 2024/2430/2380\nf 2024/2430/2380 7431/2431/2381 588/946/927\nf 963/954/935 3499/2432/2382 2024/2430/2380\nf 2024/2430/2380 2844/949/930 963/954/935\nf 968/2433/2383 3488/2434/2384 2024/2430/2380\nf 2024/2430/2380 3499/2432/2382 968/2433/2383\nf 7432/2435/2385 7431/2431/2381 2024/2430/2380\nf 2024/2430/2380 3488/2434/2384 7432/2435/2385\nf 627/1432/1396 2777/1431/1395 2025/2436/2386\nf 2025/2436/2386 3475/2437/2387 627/1432/1396\nf 590/1265/1229 3476/2438/2388 2025/2436/2386\nf 2025/2436/2386 2777/1431/1395 590/1265/1229\nf 956/2439/2389 3468/2440/2390 2025/2436/2386\nf 2025/2436/2386 3476/2438/2388 956/2439/2389\nf 955/2441/2391 3475/2437/2387 2025/2436/2386\nf 2025/2436/2386 3468/2440/2390 955/2441/2391\nf 590/1265/1229 2916/1263/1227 2026/2442/2392\nf 2026/2442/2392 3476/2438/2388 590/1265/1229\nf 670/1068/1049 3470/2409/2359 2026/2442/2392\nf 2026/2442/2392 2916/1263/1227 670/1068/1049\nf 950/2413/2363 3469/2443/2393 2026/2442/2392\nf 2026/2442/2392 3470/2409/2359 950/2413/2363\nf 956/2439/2389 3476/2438/2388 2026/2442/2392\nf 2026/2442/2392 3469/2443/2393 956/2439/2389\nf 966/2444/2394 3486/2445/2395 2027/2446/2396\nf 2027/2446/2396 3489/2447/2397 966/2444/2394\nf 842/1112/1093 3242/1955/1905 2027/2446/2396\nf 2027/2446/2396 3486/2445/2395 842/1112/1093\nf 623/1131/1112 3477/2448/2398 2027/2446/2396\nf 2027/2446/2396 3242/1955/1905 623/1131/1112\nf 957/2449/2399 3489/2447/2397 2027/2446/2396\nf 2027/2446/2396 3477/2448/2398 957/2449/2399\nf 965/653/643 3485/2450/2400 2028/2451/2401\nf 2028/2451/2401 3490/2452/2402 965/653/643\nf 723/1118/1099 2989/1467/1431 2028/2451/2401\nf 2028/2451/2401 3485/2450/2400 723/1118/1099\nf 624/1135/1116 3478/2453/2403 2028/2451/2401\nf 2028/2451/2401 2989/1467/1431 624/1135/1116\nf 958/2454/2404 3490/2452/2402 2028/2451/2401\nf 2028/2451/2401 3478/2453/2403 958/2454/2404\nf 962/2455/2405 3482/2456/2406 2029/2457/2407\nf 2029/2457/2407 3491/2458/2408 962/2455/2405\nf 629/1119/1100 2849/1122/1103 2029/2457/2407\nf 2029/2457/2407 3482/2456/2406 629/1119/1100\nf 625/1106/1087 3479/2459/2409 2029/2457/2407\nf 2029/2457/2407 2849/1122/1103 625/1106/1087\nf 959/2460/2410 3491/2458/2408 2029/2457/2407\nf 2029/2457/2407 3479/2459/2409 959/2460/2410\nf 964/952/933 3484/2461/2411 2030/2462/2412\nf 2030/2462/2412 3492/953/934 964/952/933\nf 713/1130/1111 2970/1433/1397 2030/2462/2412\nf 2030/2462/2412 3484/2461/2411 713/1130/1111\nf 627/1432/1396 3483/2463/2413 2030/2462/2412\nf 2030/2462/2412 2970/1433/1397 627/1432/1396\nf 963/954/935 3492/953/934 2030/2462/2412\nf 2030/2462/2412 3483/2463/2413 963/954/935\nf 957/2449/2399 3477/2448/2398 2031/2464/2414\nf 2031/2464/2414 3493/2465/2415 957/2449/2399\nf 623/1131/1112 2851/1134/1115 2031/2464/2414\nf 2031/2464/2414 3477/2448/2398 623/1131/1112\nf 628/1123/1104 3481/2466/2416 2031/2464/2414\nf 2031/2464/2414 2851/1134/1115 628/1123/1104\nf 961/2467/2417 3493/2465/2415 2031/2464/2414\nf 2031/2464/2414 3481/2466/2416 961/2467/2417\nf 958/2454/2404 3478/2453/2403 2032/2468/2418\nf 2032/2468/2418 3494/2469/2419 958/2454/2404\nf 624/1135/1116 2852/1138/1119 2032/2468/2418\nf 2032/2468/2418 3478/2453/2403 624/1135/1116\nf 629/1119/1100 3482/2456/2406 2032/2468/2418\nf 2032/2468/2418 2852/1138/1119 629/1119/1100\nf 962/2455/2405 3494/2469/2419 2032/2468/2418\nf 2032/2468/2418 3482/2456/2406 962/2455/2405\nf 961/2467/2417 3481/2466/2416 2033/2470/2420\nf 2033/2470/2420 3495/2471/2421 961/2467/2417\nf 628/1123/1104 2850/1126/1107 2033/2470/2420\nf 2033/2470/2420 3481/2466/2416 628/1123/1104\nf 713/1130/1111 3484/2461/2411 2033/2470/2420\nf 2033/2470/2420 2850/1126/1107 713/1130/1111\nf 964/952/933 3495/2471/2421 2033/2470/2420\nf 2033/2470/2420 3484/2461/2411 964/952/933\nf 960/1446/1410 2770/2377/2327 2034/2472/2422\nf 2034/2472/2422 3496/1447/1411 960/1446/1410\nf 626/1113/1094 2848/1116/1097 2034/2472/2422\nf 2034/2472/2422 2770/2377/2327 626/1113/1094\nf 723/1118/1099 3485/2450/2400 2034/2472/2422\nf 2034/2472/2422 2848/1116/1097 723/1118/1099\nf 965/653/643 3496/1447/1411 2034/2472/2422\nf 2034/2472/2422 3485/2450/2400 965/653/643\nf 959/2460/2410 3479/2459/2409 2035/2473/2423\nf 2035/2473/2423 3497/2474/2424 959/2460/2410\nf 625/1106/1087 2847/1109/1090 2035/2473/2423\nf 2035/2473/2423 3479/2459/2409 625/1106/1087\nf 842/1112/1093 3486/2445/2395 2035/2473/2423\nf 2035/2473/2423 2847/1109/1090 842/1112/1093\nf 966/2444/2394 3497/2474/2424 2035/2473/2423\nf 2035/2473/2423 3486/2445/2395 966/2444/2394\nf 960/1446/1410 3480/1445/1409 2036/2475/2425\nf 2036/2475/2425 3498/2379/2329 960/1446/1410\nf 585/922/903 7433/2476/2426 2036/2475/2425\nf 2036/2475/2425 3480/1445/1409 585/922/903\nf 7434/2477/2427 3447/2478/2428 2036/2475/2425\nf 2036/2475/2425 7433/2476/2426 7434/2477/2427\nf 967/2380/2330 3498/2379/2329 2036/2475/2425\nf 2036/2475/2425 3447/2478/2428 967/2380/2330\nf 963/954/935 3483/2463/2413 2037/2479/2429\nf 2037/2479/2429 3499/2432/2382 963/954/935\nf 627/1432/1396 3475/2437/2387 2037/2479/2429\nf 2037/2479/2429 3483/2463/2413 627/1432/1396\nf 955/2441/2391 3467/2480/2430 2037/2479/2429\nf 2037/2479/2429 3475/2437/2387 955/2441/2391\nf 968/2433/2383 3499/2432/2382 2037/2479/2429\nf 2037/2479/2429 3467/2480/2430 968/2433/2383\nf 612/552/544 2682/549/541 2038/2481/2431\nf 2038/2481/2431 3516/2482/2432 612/552/544\nf 540/548/540 3517/2483/2433 2038/2481/2431\nf 2038/2481/2431 2682/549/541 540/548/540\nf 970/647/637 3500/1055/1036 2038/2481/2431\nf 2038/2481/2431 3517/2483/2433 970/647/637\nf 969/847/837 3516/2482/2432 2038/2481/2431\nf 2038/2481/2431 3500/1055/1036 969/847/837\nf 540/548/540 2986/1572/1532 2039/2484/2434\nf 2039/2484/2434 3517/2483/2433 540/548/540\nf 721/651/641 3501/648/638 2039/2484/2434\nf 2039/2484/2434 2986/1572/1532 721/651/641\nf 970/647/637 3517/2483/2433 2039/2484/2434\nf 2039/2484/2434 3501/648/638 970/647/637\nf 965/653/643 3490/2452/2402 2040/2485/2435\nf 2040/2485/2435 3503/654/644 965/653/643\nf 958/2454/2404 3518/2486/2436 2040/2485/2435\nf 2040/2485/2435 3490/2452/2402 958/2454/2404\nf 971/655/645 3503/654/644 2040/2485/2435\nf 2040/2485/2435 3518/2486/2436 971/655/645\nf 958/2454/2404 3494/2469/2419 2041/2487/2437\nf 2041/2487/2437 3518/2486/2436 958/2454/2404\nf 962/2455/2405 3519/2488/2438 2041/2487/2437\nf 2041/2487/2437 3494/2469/2419 962/2455/2405\nf 972/849/839 3504/1057/1038 2041/2487/2437\nf 2041/2487/2437 3519/2488/2438 972/849/839\nf 971/655/645 3518/2486/2436 2041/2487/2437\nf 2041/2487/2437 3504/1057/1038 971/655/645\nf 962/2455/2405 3491/2458/2408 2042/2489/2439\nf 2042/2489/2439 3519/2488/2438 962/2455/2405\nf 959/2460/2410 3520/2490/2440 2042/2489/2439\nf 2042/2489/2439 3491/2458/2408 959/2460/2410\nf 973/851/841 3505/850/840 2042/2489/2439\nf 2042/2489/2439 3520/2490/2440 973/851/841\nf 972/849/839 3519/2488/2438 2042/2489/2439\nf 2042/2489/2439 3505/850/840 972/849/839\nf 959/2460/2410 3497/2474/2424 2043/2491/2441\nf 2043/2491/2441 3520/2490/2440 959/2460/2410\nf 966/2444/2394 3521/2492/2442 2043/2491/2441\nf 2043/2491/2441 3497/2474/2424 966/2444/2394\nf 974/644/634 3506/1943/1893 2043/2491/2441\nf 2043/2491/2441 3521/2492/2442 974/644/634\nf 973/851/841 3520/2490/2440 2043/2491/2441\nf 2043/2491/2441 3506/1943/1893 973/851/841\nf 966/2444/2394 3489/2447/2397 2044/2493/2443\nf 2044/2493/2443 3521/2492/2442 966/2444/2394\nf 957/2449/2399 3522/2494/2444 2044/2493/2443\nf 2044/2493/2443 3489/2447/2397 957/2449/2399\nf 975/646/636 3507/645/635 2044/2493/2443\nf 2044/2493/2443 3522/2494/2444 975/646/636\nf 974/644/634 3521/2492/2442 2044/2493/2443\nf 2044/2493/2443 3507/645/635 974/644/634\nf 957/2449/2399 3493/2465/2415 2045/2495/2445\nf 2045/2495/2445 3522/2494/2444 957/2449/2399\nf 961/2467/2417 3523/2496/2446 2045/2495/2445\nf 2045/2495/2445 3493/2465/2415 961/2467/2417\nf 976/989/970 3508/988/969 2045/2495/2445\nf 2045/2495/2445 3523/2496/2446 976/989/970\nf 975/646/636 3522/2494/2444 2045/2495/2445\nf 2045/2495/2445 3508/988/969 975/646/636\nf 961/2467/2417 3495/2471/2421 2046/2497/2447\nf 2046/2497/2447 3523/2496/2446 961/2467/2417\nf 964/952/933 3509/1424/1388 2046/2497/2447\nf 2046/2497/2447 3495/2471/2421 964/952/933\nf 976/989/970 3523/2496/2446 2046/2497/2447\nf 2046/2497/2447 3509/1424/1388 976/989/970\nf 709/950/931 2782/964/945 2047/2498/2448\nf 2047/2498/2448 3511/1422/1386 709/950/931\nf 593/561/553 3524/2499/2449 2047/2498/2448\nf 2047/2498/2448 2782/964/945 593/561/553\nf 977/984/965 3511/1422/1386 2047/2498/2448\nf 2047/2498/2448 3524/2499/2449 977/984/965\nf 593/561/553 2684/558/550 2048/2500/2450\nf 2048/2500/2450 3524/2499/2449 593/561/553\nf 541/557/549 3525/2501/2451 2048/2500/2450\nf 2048/2500/2450 2684/558/550 541/557/549\nf 978/638/628 3512/985/966 2048/2500/2450\nf 2048/2500/2450 3525/2501/2451 978/638/628\nf 977/984/965 3524/2499/2449 2048/2500/2450\nf 2048/2500/2450 3512/985/966 977/984/965\nf 541/557/549 3238/1948/1898 2049/2502/2452\nf 2049/2502/2452 3525/2501/2451 541/557/549\nf 838/831/821 3526/2503/2453 2049/2502/2452\nf 2049/2502/2452 3238/1948/1898 838/831/821\nf 979/642/632 3513/639/629 2049/2502/2452\nf 2049/2502/2452 3526/2503/2453 979/642/632\nf 978/638/628 3525/2501/2451 2049/2502/2452\nf 2049/2502/2452 3513/639/629 978/638/628\nf 838/831/821 2745/828/818 2050/2504/2454\nf 2050/2504/2454 3526/2503/2453 838/831/821\nf 574/827/817 3527/2505/2455 2050/2504/2454\nf 2050/2504/2454 2745/828/818 574/827/817\nf 980/843/833 3514/1941/1891 2050/2504/2454\nf 2050/2504/2454 3527/2505/2455 980/843/833\nf 979/642/632 3526/2503/2453 2050/2504/2454\nf 2050/2504/2454 3514/1941/1891 979/642/632\nf 574/827/817 2819/1052/1033 2051/2506/2456\nf 2051/2506/2456 3527/2505/2455 574/827/817\nf 612/552/544 3516/2482/2432 2051/2506/2456\nf 2051/2506/2456 2819/1052/1033 612/552/544\nf 969/847/837 3515/844/834 2051/2506/2456\nf 2051/2506/2456 3516/2482/2432 969/847/837\nf 980/843/833 3527/2505/2455 2051/2506/2456\nf 2051/2506/2456 3515/844/834 980/843/833\nf 587/826/816 2769/1246/1210 2052/2507/2457\nf 2052/2507/2457 3531/1552/1512 587/826/816\nf 664/1187/1162 3538/2508/2458 2052/2507/2457\nf 2052/2507/2457 2769/1246/1210 664/1187/1162\nf 983/1486/1450 3531/1552/1512 2052/2507/2457\nf 2052/2507/2457 3538/2508/2458 983/1486/1450\nf 664/1187/1162 3121/1186/1161 2053/2509/2459\nf 2053/2509/2459 3538/2508/2458 664/1187/1162\nf 573/1185/1160 3539/2510/2460 2053/2509/2459\nf 2053/2509/2459 3121/1186/1161 573/1185/1160\nf 984/1488/1452 3532/1487/1451 2053/2509/2459\nf 2053/2509/2459 3539/2510/2460 984/1488/1452\nf 983/1486/1450 3538/2508/2458 2053/2509/2459\nf 2053/2509/2459 3532/1487/1451 983/1486/1450\nf 573/1185/1160 3126/1254/1218 2054/2511/2461\nf 2054/2511/2461 3539/2510/2460 573/1185/1160\nf 668/882/872 3540/2512/2462 2054/2511/2461\nf 2054/2511/2461 3126/1254/1218 668/882/872\nf 985/1529/1490 3533/1554/1514 2054/2511/2461\nf 2054/2511/2461 3540/2512/2462 985/1529/1490\nf 984/1488/1452 3539/2510/2460 2054/2511/2461\nf 2054/2511/2461 3533/1554/1514 984/1488/1452\nf 668/882/872 2759/879/869 2055/2513/2463\nf 2055/2513/2463 3540/2512/2462 668/882/872\nf 583/878/868 3541/2514/2464 2055/2513/2463\nf 2055/2513/2463 2759/879/869 583/878/868\nf 986/1531/1492 3534/1530/1491 2055/2513/2463\nf 2055/2513/2463 3541/2514/2464 986/1531/1492\nf 985/1529/1490 3540/2512/2462 2055/2513/2463\nf 2055/2513/2463 3534/1530/1491 985/1529/1490\nf 7435/2515/2465 7436/2516/2466 2056/2517/2467\nf 2056/2517/2467 3547/2518/2468 7435/2515/2465\nf 7437/2519/2469 4647/2520/2470 2056/2517/2467\nf 2056/2517/2467 7436/2516/2466 7437/2519/2469\nf 1568/2521/2471 3542/2522/2472 2056/2517/2467\nf 2056/2517/2467 4647/2520/2470 1568/2521/2471\nf 989/2523/2473 3547/2518/2468 2056/2517/2467\nf 2056/2517/2467 3542/2522/2472 989/2523/2473\nf 988/905/886 3536/908/889 2057/2524/2474\nf 2057/2524/2474 3548/2525/2475 988/905/886\nf 987/913/894 3549/2526/2476 2057/2524/2474\nf 2057/2524/2474 3536/908/889 987/913/894\nf 990/2527/2477 3543/2528/2478 2057/2524/2474\nf 2057/2524/2474 3549/2526/2476 990/2527/2477\nf 1571/2529/2479 3548/2525/2475 2057/2524/2474\nf 2057/2524/2474 3543/2528/2478 1571/2529/2479\nf 987/913/894 3535/1532/1493 2058/2530/2480\nf 2058/2530/2480 3549/2526/2476 987/913/894\nf 986/1531/1492 3550/2531/2481 2058/2530/2480\nf 2058/2530/2480 3535/1532/1493 986/1531/1492\nf 991/2532/2482 3544/2533/2483 2058/2530/2480\nf 2058/2530/2480 3550/2531/2481 991/2532/2482\nf 990/2527/2477 3549/2526/2476 2058/2530/2480\nf 2058/2530/2480 3544/2533/2483 990/2527/2477\nf 986/1531/1492 7438/2534/2484 2059/2535/2485\nf 2059/2535/2485 3550/2531/2481 986/1531/1492\nf 7439/2536/2486 3551/2537/2487 2059/2535/2485\nf 2059/2535/2485 7438/2534/2484 7439/2536/2486\nf 992/2538/2488 3545/2539/2489 2059/2535/2485\nf 2059/2535/2485 3551/2537/2487 992/2538/2488\nf 991/2532/2482 3550/2531/2481 2059/2535/2485\nf 2059/2535/2485 3545/2539/2489 991/2532/2482\nf 7439/2536/2486 7440/2540/2490 2060/2541/2491\nf 2060/2541/2491 3551/2537/2487 7439/2536/2486\nf 7435/2515/2465 3547/2518/2468 2060/2541/2491\nf 2060/2541/2491 7440/2540/2490 7435/2515/2465\nf 989/2523/2473 3546/2542/2492 2060/2541/2491\nf 2060/2541/2491 3547/2518/2468 989/2523/2473\nf 992/2538/2488 3551/2537/2487 2060/2541/2491\nf 2060/2541/2491 3546/2542/2492 992/2538/2488\nf 7441/2543/2493 7442/2544/2494 2061/2545/2495\nf 2061/2545/2495 3557/2546/2496 7441/2543/2493\nf 7443/2547/2497 3558/2548/2498 2061/2545/2495\nf 2061/2545/2495 7442/2544/2494 7443/2547/2497\nf 994/2549/2499 3552/2550/2500 2061/2545/2495\nf 2061/2545/2495 3558/2548/2498 994/2549/2499\nf 993/2551/2501 3557/2546/2496 2061/2545/2495\nf 2061/2545/2495 3552/2550/2500 993/2551/2501\nf 7444/2552/2502 7445/2553/2503 2062/2554/2504\nf 2062/2554/2504 3559/2555/2505 7444/2552/2502\nf 7446/2556/2506 3560/2557/2507 2062/2554/2504\nf 2062/2554/2504 7445/2553/2503 7446/2556/2506\nf 996/2558/2508 3553/2559/2509 2062/2554/2504\nf 2062/2554/2504 3560/2557/2507 996/2558/2508\nf 995/2560/2510 3559/2555/2505 2062/2554/2504\nf 2062/2554/2504 3553/2559/2509 995/2560/2510\nf 7446/2556/2506 7447/2561/2511 2063/2562/2512\nf 2063/2562/2512 3560/2557/2507 7446/2556/2506\nf 7448/2563/2513 3561/2564/2514 2063/2562/2512\nf 2063/2562/2512 7447/2561/2511 7448/2563/2513\nf 997/2565/2515 3554/2566/2516 2063/2562/2512\nf 2063/2562/2512 3561/2564/2514 997/2565/2515\nf 996/2558/2508 3560/2557/2507 2063/2562/2512\nf 2063/2562/2512 3554/2566/2516 996/2558/2508\nf 7448/2563/2513 7449/2567/2517 2064/2568/2518\nf 2064/2568/2518 3561/2564/2514 7448/2563/2513\nf 7450/2569/2519 3562/2570/2520 2064/2568/2518\nf 2064/2568/2518 7449/2567/2517 7450/2569/2519\nf 998/2571/2521 3555/2572/2522 2064/2568/2518\nf 2064/2568/2518 3562/2570/2520 998/2571/2521\nf 997/2565/2515 3561/2564/2514 2064/2568/2518\nf 2064/2568/2518 3555/2572/2522 997/2565/2515\nf 7450/2569/2519 7451/2573/2523 2065/2574/2524\nf 2065/2574/2524 3562/2570/2520 7450/2569/2519\nf 7441/2543/2493 3557/2546/2496 2065/2574/2524\nf 2065/2574/2524 7451/2573/2523 7441/2543/2493\nf 993/2551/2501 3556/2575/2525 2065/2574/2524\nf 2065/2574/2524 3557/2546/2496 993/2551/2501\nf 998/2571/2521 3562/2570/2520 2065/2574/2524\nf 2065/2574/2524 3556/2575/2525 998/2571/2521\nf 1290/1042/1023 2811/1041/1022 2066/2576/2526\nf 2066/2576/2526 3571/2577/2527 1290/1042/1023\nf 749/1040/1021 3572/2578/2528 2066/2576/2526\nf 2066/2576/2526 2811/1041/1022 749/1040/1021\nf 1000/2579/2529 3563/2580/2530 2066/2576/2526\nf 2066/2576/2526 3572/2578/2528 1000/2579/2529\nf 999/2581/2531 3571/2577/2527 2066/2576/2526\nf 2066/2576/2526 3563/2580/2530 999/2581/2531\nf 749/1040/1021 3020/1542/1503 2067/2582/2532\nf 2067/2582/2532 3572/2578/2528 749/1040/1021\nf 611/1051/1032 3573/2583/2533 2067/2582/2532\nf 2067/2582/2532 3020/1542/1503 611/1051/1032\nf 1001/2584/2534 3564/2585/2535 2067/2582/2532\nf 2067/2582/2532 3573/2583/2533 1001/2584/2534\nf 1000/2579/2529 3572/2578/2528 2067/2582/2532\nf 2067/2582/2532 3564/2585/2535 1000/2579/2529\nf 611/1051/1032 2812/1050/1031 2068/2586/2536\nf 2068/2586/2536 3573/2583/2533 611/1051/1032\nf 655/1049/1030 3574/2587/2537 2068/2586/2536\nf 2068/2586/2536 2812/1050/1031 655/1049/1030\nf 1002/2588/2538 3565/2589/2539 2068/2586/2536\nf 2068/2586/2536 3574/2587/2537 1002/2588/2538\nf 1001/2584/2534 3573/2583/2533 2068/2586/2536\nf 2068/2586/2536 3565/2589/2539 1001/2584/2534\nf 655/1049/1030 2883/1164/1139 2069/2590/2540\nf 2069/2590/2540 3574/2587/2537 655/1049/1030\nf 657/1101/1082 3575/2591/2541 2069/2590/2540\nf 2069/2590/2540 2883/1164/1139 657/1101/1082\nf 1003/2592/2542 3566/2593/2543 2069/2590/2540\nf 2069/2590/2540 3575/2591/2541 1003/2592/2542\nf 1002/2588/2538 3574/2587/2537 2069/2590/2540\nf 2069/2590/2540 3566/2593/2543 1002/2588/2538\nf 657/1101/1082 2959/1100/1081 2070/2594/2544\nf 2070/2594/2544 3575/2591/2541 657/1101/1082\nf 707/1099/1080 3576/2595/2545 2070/2594/2544\nf 2070/2594/2544 2959/1100/1081 707/1099/1080\nf 1004/2596/2546 3567/2597/2547 2070/2594/2544\nf 2070/2594/2544 3576/2595/2545 1004/2596/2546\nf 1003/2592/2542 3575/2591/2541 2070/2594/2544\nf 2070/2594/2544 3567/2597/2547 1003/2592/2542\nf 707/1099/1080 2965/1202/1177 2071/2598/2548\nf 2071/2598/2548 3576/2595/2545 707/1099/1080\nf 705/1201/1176 3577/2599/2549 2071/2598/2548\nf 2071/2598/2548 2965/1202/1177 705/1201/1176\nf 1005/2600/2550 3568/2601/2551 2071/2598/2548\nf 2071/2598/2548 3577/2599/2549 1005/2600/2550\nf 1004/2596/2546 3576/2595/2545 2071/2598/2548\nf 2071/2598/2548 3568/2601/2551 1004/2596/2546\nf 705/1201/1176 2961/1400/1364 2072/2602/2552\nf 2072/2602/2552 3577/2599/2549 705/1201/1176\nf 757/1402/1366 3578/2603/2553 2072/2602/2552\nf 2072/2602/2552 2961/1400/1364 757/1402/1366\nf 1006/2604/2554 3569/2605/2555 2072/2602/2552\nf 2072/2602/2552 3578/2603/2553 1006/2604/2554\nf 1005/2600/2550 3577/2599/2549 2072/2602/2552\nf 2072/2602/2552 3569/2605/2555 1005/2600/2550\nf 757/1402/1366 3028/1571/1531 2073/2606/2556\nf 2073/2606/2556 3578/2603/2553 757/1402/1366\nf 702/1570/1530 3579/2607/2557 2073/2606/2556\nf 2073/2606/2556 3028/1571/1531 702/1570/1530\nf 1007/2608/2558 3570/2609/2559 2073/2606/2556\nf 2073/2606/2556 3579/2607/2557 1007/2608/2558\nf 1006/2604/2554 3578/2603/2553 2073/2606/2556\nf 2073/2606/2556 3570/2609/2559 1006/2604/2554\nf 999/2581/2531 3563/2580/2530 2074/2610/2560\nf 2074/2610/2560 3589/2611/2561 999/2581/2531\nf 1000/2579/2529 3590/2612/2562 2074/2610/2560\nf 2074/2610/2560 3563/2580/2530 1000/2579/2529\nf 7452/2613/2563 7453/2614/2564 2074/2610/2560\nf 2074/2610/2560 3590/2612/2562 7452/2613/2563\nf 7454/2615/2565 3589/2611/2561 2074/2610/2560\nf 2074/2610/2560 7453/2614/2564 7454/2615/2565\nf 1000/2579/2529 3564/2585/2535 2075/2616/2566\nf 2075/2616/2566 3590/2612/2562 1000/2579/2529\nf 1001/2584/2534 3591/2617/2567 2075/2616/2566\nf 2075/2616/2566 3564/2585/2535 1001/2584/2534\nf 1010/2618/2568 3581/2619/2569 2075/2616/2566\nf 2075/2616/2566 3591/2617/2567 1010/2618/2568\nf 7452/2613/2563 3590/2612/2562 2075/2616/2566\nf 2075/2616/2566 3581/2619/2569 7452/2613/2563\nf 1001/2584/2534 3565/2589/2539 2076/2620/2570\nf 2076/2620/2570 3591/2617/2567 1001/2584/2534\nf 1002/2588/2538 3592/2621/2571 2076/2620/2570\nf 2076/2620/2570 3565/2589/2539 1002/2588/2538\nf 1011/2622/2572 3582/2623/2573 2076/2620/2570\nf 2076/2620/2570 3592/2621/2571 1011/2622/2572\nf 1010/2618/2568 3591/2617/2567 2076/2620/2570\nf 2076/2620/2570 3582/2623/2573 1010/2618/2568\nf 1002/2588/2538 3566/2593/2543 2077/2624/2574\nf 2077/2624/2574 3592/2621/2571 1002/2588/2538\nf 1003/2592/2542 3593/2625/2575 2077/2624/2574\nf 2077/2624/2574 3566/2593/2543 1003/2592/2542\nf 7455/2626/2576 3583/2627/2577 2077/2624/2574\nf 2077/2624/2574 3593/2625/2575 7455/2626/2576\nf 1011/2622/2572 3592/2621/2571 2077/2624/2574\nf 2077/2624/2574 3583/2627/2577 1011/2622/2572\nf 1003/2592/2542 3567/2597/2547 2078/2628/2578\nf 2078/2628/2578 3593/2625/2575 1003/2592/2542\nf 1004/2596/2546 3594/2629/2579 2078/2628/2578\nf 2078/2628/2578 3567/2597/2547 1004/2596/2546\nf 7456/2630/2580 7457/2631/2581 2078/2628/2578\nf 2078/2628/2578 3594/2629/2579 7456/2630/2580\nf 7455/2626/2576 3593/2625/2575 2078/2628/2578\nf 2078/2628/2578 7457/2631/2581 7455/2626/2576\nf 1004/2596/2546 3568/2601/2551 2079/2632/2582\nf 2079/2632/2582 3594/2629/2579 1004/2596/2546\nf 1005/2600/2550 3595/2633/2583 2079/2632/2582\nf 2079/2632/2582 3568/2601/2551 1005/2600/2550\nf 7458/2634/2584 7459/2635/2585 2079/2632/2582\nf 2079/2632/2582 3595/2633/2583 7458/2634/2584\nf 7456/2630/2580 3594/2629/2579 2079/2632/2582\nf 2079/2632/2582 7459/2635/2585 7456/2630/2580\nf 1005/2600/2550 3569/2605/2555 2080/2636/2586\nf 2080/2636/2586 3595/2633/2583 1005/2600/2550\nf 1006/2604/2554 3596/2637/2587 2080/2636/2586\nf 2080/2636/2586 3569/2605/2555 1006/2604/2554\nf 7460/2638/2588 7461/2639/2589 2080/2636/2586\nf 2080/2636/2586 3596/2637/2587 7460/2638/2588\nf 7458/2634/2584 3595/2633/2583 2080/2636/2586\nf 2080/2636/2586 7461/2639/2589 7458/2634/2584\nf 1006/2604/2554 3570/2609/2559 2081/2640/2590\nf 2081/2640/2590 3596/2637/2587 1006/2604/2554\nf 1007/2608/2558 3597/2641/2591 2081/2640/2590\nf 2081/2640/2590 3570/2609/2559 1007/2608/2558\nf 7462/2642/2592 7463/2643/2593 2081/2640/2590\nf 2081/2640/2590 3597/2641/2591 7462/2642/2592\nf 7460/2638/2588 3596/2637/2587 2081/2640/2590\nf 2081/2640/2590 7463/2643/2593 7460/2638/2588\nf 621/1082/1063 2836/1085/1066 2082/2644/2594\nf 2082/2644/2594 3604/2645/2595 621/1082/1063\nf 750/617/608 3605/2646/2596 2082/2644/2594\nf 2082/2644/2594 2836/1085/1066 750/617/608\nf 1018/2647/2597 3598/2648/2598 2082/2644/2594\nf 2082/2644/2594 3605/2646/2596 1018/2647/2597\nf 1017/2649/2599 3604/2645/2595 2082/2644/2594\nf 2082/2644/2594 3598/2648/2598 1017/2649/2599\nf 750/617/608 3029/616/607 2083/2650/2600\nf 2083/2650/2600 3605/2646/2596 750/617/608\nf 1009/615/606 3606/2651/2601 2083/2650/2600\nf 2083/2650/2600 3029/616/607 1009/615/606\nf 1019/2652/2602 3599/2653/2603 2083/2650/2600\nf 2083/2650/2600 3606/2651/2601 1019/2652/2602\nf 1018/2647/2597 3605/2646/2596 2083/2650/2600\nf 2083/2650/2600 3599/2653/2603 1018/2647/2597\nf 1009/615/606 7464/2654/2604 2084/2655/2605\nf 2084/2655/2605 3606/2651/2601 1009/615/606\nf 7465/2656/2606 3607/2657/2607 2084/2655/2605\nf 2084/2655/2605 7464/2654/2604 7465/2656/2606\nf 1020/2658/2608 3600/2659/2609 2084/2655/2605\nf 2084/2655/2605 3607/2657/2607 1020/2658/2608\nf 1019/2652/2602 3606/2651/2601 2084/2655/2605\nf 2084/2655/2605 3600/2659/2609 1019/2652/2602\nf 7465/2656/2606 7466/2660/2610 2085/2661/2611\nf 2085/2661/2611 3607/2657/2607 7465/2656/2606\nf 7467/2662/2612 3608/2663/2613 2085/2661/2611\nf 2085/2661/2611 7466/2660/2610 7467/2662/2612\nf 1021/2664/2614 3601/2665/2615 2085/2661/2611\nf 2085/2661/2611 3608/2663/2613 1021/2664/2614\nf 1020/2658/2608 3607/2657/2607 2085/2661/2611\nf 2085/2661/2611 3601/2665/2615 1020/2658/2608\nf 7467/2662/2612 7468/2666/2616 2086/2667/2617\nf 2086/2667/2617 3608/2663/2613 7467/2662/2612\nf 1012/1414/1378 3609/2668/2618 2086/2667/2617\nf 2086/2667/2617 7468/2666/2616 1012/1414/1378\nf 1022/2669/2619 3602/2670/2620 2086/2667/2617\nf 2086/2667/2617 3609/2668/2618 1022/2669/2619\nf 1021/2664/2614 3608/2663/2613 2086/2667/2617\nf 2086/2667/2617 3602/2670/2620 1021/2664/2614\nf 1012/1414/1378 2873/1413/1377 2087/2671/2621\nf 2087/2671/2621 3609/2668/2618 1012/1414/1378\nf 621/1082/1063 3604/2645/2595 2087/2671/2621\nf 2087/2671/2621 2873/1413/1377 621/1082/1063\nf 1017/2649/2599 3603/2672/2622 2087/2671/2621\nf 2087/2671/2621 3604/2645/2595 1017/2649/2599\nf 1022/2669/2619 3609/2668/2618 2087/2671/2621\nf 2087/2671/2621 3603/2672/2622 1022/2669/2619\nf 7469/2673/2623 7470/2674/2624 2088/2675/2625\nf 2088/2675/2625 3616/2676/2626 7469/2673/2623\nf 7471/2677/2627 3617/2678/2628 2088/2675/2625\nf 2088/2675/2625 7470/2674/2624 7471/2677/2627\nf 1024/1481/1445 3610/1480/1444 2088/2675/2625\nf 2088/2675/2625 3617/2678/2628 1024/1481/1445\nf 1023/803/793 3616/2676/2626 2088/2675/2625\nf 2088/2675/2625 3610/1480/1444 1023/803/793\nf 7471/2677/2627 7472/2679/2629 2089/2680/2630\nf 2089/2680/2630 3617/2678/2628 7471/2677/2627\nf 7473/2681/2631 3618/2682/2632 2089/2680/2630\nf 2089/2680/2630 7472/2679/2629 7473/2681/2631\nf 7474/2683/2633 7475/2684/2634 2089/2680/2630\nf 2089/2680/2630 3618/2682/2632 7474/2683/2633\nf 1024/1481/1445 3617/2678/2628 2089/2680/2630\nf 2089/2680/2630 7475/2684/2634 1024/1481/1445\nf 7476/2685/2635 7477/2686/2636 2090/2687/2637\nf 2090/2687/2637 7478/2688/2638 7476/2685/2635\nf 7479/2689/2639 3619/2690/2640 2090/2687/2637\nf 2090/2687/2637 7477/2686/2636 7479/2689/2639\nf 7480/2691/2641 7481/2692/2642 2090/2687/2637\nf 2090/2687/2637 3619/2690/2640 7480/2691/2641\nf 7482/2693/2643 7478/2688/2638 2090/2687/2637\nf 2090/2687/2637 7481/2692/2642 7482/2693/2643\nf 7479/2689/2639 7483/2694/2644 2091/2695/2645\nf 2091/2695/2645 3619/2690/2640 7479/2689/2639\nf 7484/2696/2646 3620/2697/2647 2091/2695/2645\nf 2091/2695/2645 7483/2694/2644 7484/2696/2646\nf 7485/2698/2648 7486/2699/2649 2091/2695/2645\nf 2091/2695/2645 3620/2697/2647 7485/2698/2648\nf 7480/2691/2641 3619/2690/2640 2091/2695/2645\nf 2091/2695/2645 7486/2699/2649 7480/2691/2641\nf 7484/2696/2646 7487/2700/2650 2092/2701/2651\nf 2092/2701/2651 3620/2697/2647 7484/2696/2646\nf 7488/2702/2652 3621/2703/2653 2092/2701/2651\nf 2092/2701/2651 7487/2700/2650 7488/2702/2652\nf 1028/801/791 7489/2704/2654 2092/2701/2651\nf 2092/2701/2651 3621/2703/2653 1028/801/791\nf 7485/2698/2648 3620/2697/2647 2092/2701/2651\nf 2092/2701/2651 7489/2704/2654 7485/2698/2648\nf 7488/2702/2652 7490/2705/2655 2093/2706/2656\nf 2093/2706/2656 3621/2703/2653 7488/2702/2652\nf 7469/2673/2623 3616/2676/2626 2093/2706/2656\nf 2093/2706/2656 7490/2705/2655 7469/2673/2623\nf 1023/803/793 3615/802/792 2093/2706/2656\nf 2093/2706/2656 3616/2676/2626 1023/803/793\nf 1028/801/791 3621/2703/2653 2093/2706/2656\nf 2093/2706/2656 3615/802/792 1028/801/791\nf 551/602/594 2708/1710/1660 2094/2707/2657\nf 2094/2707/2657 3630/2708/2658 551/602/594\nf 7357/1709/1659 3631/2709/2659 2094/2707/2657\nf 2094/2707/2657 2708/1710/1660 7357/1709/1659\nf 1030/2710/2660 3622/2711/2661 2094/2707/2657\nf 2094/2707/2657 3631/2709/2659 1030/2710/2660\nf 1029/2712/2662 3630/2708/2658 2094/2707/2657\nf 2094/2707/2657 3622/2711/2661 1029/2712/2662\nf 7357/1709/1659 7491/2713/2663 2095/2714/2664\nf 2095/2714/2664 3631/2709/2659 7357/1709/1659\nf 7492/2715/2665 3632/2716/2666 2095/2714/2664\nf 2095/2714/2664 7491/2713/2663 7492/2715/2665\nf 1031/2717/2667 3623/2718/2668 2095/2714/2664\nf 2095/2714/2664 3632/2716/2666 1031/2717/2667\nf 1030/2710/2660 3631/2709/2659 2095/2714/2664\nf 2095/2714/2664 3623/2718/2668 1030/2710/2660\nf 7492/2715/2665 7493/2719/2669 2096/2720/2670\nf 2096/2720/2670 3632/2716/2666 7492/2715/2665\nf 7494/2721/2671 3633/2722/2672 2096/2720/2670\nf 2096/2720/2670 7493/2719/2669 7494/2721/2671\nf 1032/2723/2673 3624/2724/2674 2096/2720/2670\nf 2096/2720/2670 3633/2722/2672 1032/2723/2673\nf 1031/2717/2667 3632/2716/2666 2096/2720/2670\nf 2096/2720/2670 3624/2724/2674 1031/2717/2667\nf 7494/2721/2671 7495/2725/2675 2097/2726/2676\nf 2097/2726/2676 3633/2722/2672 7494/2721/2671\nf 7496/2727/2677 3634/2728/2678 2097/2726/2676\nf 2097/2726/2676 7495/2725/2675 7496/2727/2677\nf 1033/2729/2679 3625/2730/2680 2097/2726/2676\nf 2097/2726/2676 3634/2728/2678 1033/2729/2679\nf 1032/2723/2673 3633/2722/2672 2097/2726/2676\nf 2097/2726/2676 3625/2730/2680 1032/2723/2673\nf 7496/2727/2677 7497/2731/2681 2098/2732/2682\nf 2098/2732/2682 3634/2728/2678 7496/2727/2677\nf 764/1614/1568 3635/2733/2683 2098/2732/2682\nf 2098/2732/2682 7497/2731/2681 764/1614/1568\nf 1034/2734/2684 3626/2735/2685 2098/2732/2682\nf 2098/2732/2682 3635/2733/2683 1034/2734/2684\nf 1033/2729/2679 3634/2728/2678 2098/2732/2682\nf 2098/2732/2682 3626/2735/2685 1033/2729/2679\nf 764/1614/1568 3063/1613/1567 2099/2736/2686\nf 2099/2736/2686 3635/2733/2683 764/1614/1568\nf 661/1237/1201 3636/2737/2687 2099/2736/2686\nf 2099/2736/2686 3063/1613/1567 661/1237/1201\nf 1035/2738/2688 3627/2739/2689 2099/2736/2686\nf 2099/2736/2686 3636/2737/2687 1035/2738/2688\nf 1034/2734/2684 3635/2733/2683 2099/2736/2686\nf 2099/2736/2686 3627/2739/2689 1034/2734/2684\nf 661/1237/1201 2901/1236/1200 2100/2740/2690\nf 2100/2740/2690 3636/2737/2687 661/1237/1201\nf 640/606/598 3637/2741/2691 2100/2740/2690\nf 2100/2740/2690 2901/1236/1200 640/606/598\nf 1036/2742/2692 3628/2743/2693 2100/2740/2690\nf 2100/2740/2690 3637/2741/2691 1036/2742/2692\nf 1035/2738/2688 3636/2737/2687 2100/2740/2690\nf 2100/2740/2690 3628/2743/2693 1035/2738/2688\nf 640/606/598 2861/603/595 2101/2744/2694\nf 2101/2744/2694 3637/2741/2691 640/606/598\nf 551/602/594 3630/2708/2658 2101/2744/2694\nf 2101/2744/2694 2861/603/595 551/602/594\nf 1029/2712/2662 3629/2745/2695 2101/2744/2694\nf 2101/2744/2694 3630/2708/2658 1029/2712/2662\nf 1036/2742/2692 3637/2741/2691 2101/2744/2694\nf 2101/2744/2694 3629/2745/2695 1036/2742/2692\nf 7498/2746/2696 7499/2747/2697 2102/2748/2698\nf 2102/2748/2698 3646/2749/2699 7498/2746/2696\nf 7500/2750/2700 3647/2751/2701 2102/2748/2698\nf 2102/2748/2698 7499/2747/2697 7500/2750/2700\nf 7501/2752/2702 7502/2753/2703 2102/2748/2698\nf 2102/2748/2698 3647/2751/2701 7501/2752/2702\nf 7503/2754/2704 3646/2749/2699 2102/2748/2698\nf 2102/2748/2698 7502/2753/2703 7503/2754/2704\nf 7500/2750/2700 7504/2755/2705 2103/2756/2706\nf 2103/2756/2706 3647/2751/2701 7500/2750/2700\nf 7505/2757/2707 3648/2758/2708 2103/2756/2706\nf 2103/2756/2706 7504/2755/2705 7505/2757/2707\nf 7506/2759/2709 7507/2760/2710 2103/2756/2706\nf 2103/2756/2706 3648/2758/2708 7506/2759/2709\nf 7501/2752/2702 3647/2751/2701 2103/2756/2706\nf 2103/2756/2706 7507/2760/2710 7501/2752/2702\nf 7505/2757/2707 7508/2761/2711 2104/2762/2712\nf 2104/2762/2712 3648/2758/2708 7505/2757/2707\nf 7509/2763/2713 3649/2764/2714 2104/2762/2712\nf 2104/2762/2712 7508/2761/2711 7509/2763/2713\nf 7510/2765/2715 7511/2766/2716 2104/2762/2712\nf 2104/2762/2712 3649/2764/2714 7510/2765/2715\nf 7506/2759/2709 3648/2758/2708 2104/2762/2712\nf 2104/2762/2712 7511/2766/2716 7506/2759/2709\nf 7512/2767/2717 7513/2768/2718 2105/2769/2719\nf 2105/2769/2719 7514/2770/2720 7512/2767/2717\nf 7515/2771/2721 3650/2772/2722 2105/2769/2719\nf 2105/2769/2719 7513/2768/2718 7515/2771/2721\nf 7516/2773/2723 7517/2774/2724 2105/2769/2719\nf 2105/2769/2719 3650/2772/2722 7516/2773/2723\nf 7518/2775/2725 7514/2770/2720 2105/2769/2719\nf 2105/2769/2719 7517/2774/2724 7518/2775/2725\nf 7515/2771/2721 7519/2776/2726 2106/2777/2727\nf 2106/2777/2727 3650/2772/2722 7515/2771/2721\nf 7520/2778/2728 3651/2779/2729 2106/2777/2727\nf 2106/2777/2727 7519/2776/2726 7520/2778/2728\nf 1042/1591/1549 7521/2780/2730 2106/2777/2727\nf 2106/2777/2727 3651/2779/2729 1042/1591/1549\nf 7516/2773/2723 3650/2772/2722 2106/2777/2727\nf 2106/2777/2727 7521/2780/2730 7516/2773/2723\nf 7520/2778/2728 7522/2781/2731 2107/2782/2732\nf 2107/2782/2732 3651/2779/2729 7520/2778/2728\nf 7523/2783/2733 3652/2784/2734 2107/2782/2732\nf 2107/2782/2732 7522/2781/2731 7523/2783/2733\nf 1043/1209/1184 3643/1592/1550 2107/2782/2732\nf 2107/2782/2732 3652/2784/2734 1043/1209/1184\nf 1042/1591/1549 3651/2779/2729 2107/2782/2732\nf 2107/2782/2732 3643/1592/1550 1042/1591/1549\nf 7523/2783/2733 7524/2785/2735 2108/2786/2736\nf 2108/2786/2736 3652/2784/2734 7523/2783/2733\nf 7525/2787/2737 3653/2788/2738 2108/2786/2736\nf 2108/2786/2736 7524/2785/2735 7525/2787/2737\nf 1044/1213/1187 3644/1210/1185 2108/2786/2736\nf 2108/2786/2736 3653/2788/2738 1044/1213/1187\nf 1043/1209/1184 3652/2784/2734 2108/2786/2736\nf 2108/2786/2736 3644/1210/1185 1043/1209/1184\nf 7525/2787/2737 7526/2789/2739 2109/2790/2740\nf 2109/2790/2740 3653/2788/2738 7525/2787/2737\nf 7498/2746/2696 3646/2749/2699 2109/2790/2740\nf 2109/2790/2740 7526/2789/2739 7498/2746/2696\nf 7503/2754/2704 7527/2791/2741 2109/2790/2740\nf 2109/2790/2740 3646/2749/2699 7503/2754/2704\nf 1044/1213/1187 3653/2788/2738 2109/2790/2740\nf 2109/2790/2740 7527/2791/2741 1044/1213/1187\nf 7528/2792/2742 7529/2793/2743 2110/2794/2744\nf 2110/2794/2744 3655/2795/2745 7528/2792/2742\nf 7530/2796/2746 3654/2797/2747 2110/2794/2744\nf 2110/2794/2744 7529/2793/2743 7530/2796/2746\nf 7531/2798/2748 7532/2799/2749 2110/2794/2744\nf 2110/2794/2744 3654/2797/2747 7531/2798/2748\nf 7533/2800/2750 3655/2795/2745 2110/2794/2744\nf 2110/2794/2744 7532/2799/2749 7533/2800/2750\nf 7534/2801/2751 7535/2802/2752 2111/2803/2753\nf 2111/2803/2753 3656/2804/2754 7534/2801/2751\nf 7528/2792/2742 3655/2795/2745 2111/2803/2753\nf 2111/2803/2753 7535/2802/2752 7528/2792/2742\nf 7533/2800/2750 7536/2805/2755 2111/2803/2753\nf 2111/2803/2753 3655/2795/2745 7533/2800/2750\nf 7537/2806/2756 3656/2804/2754 2111/2803/2753\nf 2111/2803/2753 7536/2805/2755 7537/2806/2756\nf 7538/2807/2757 7539/2808/2758 2112/2809/2759\nf 2112/2809/2759 3658/2810/2760 7538/2807/2757\nf 7540/2811/2761 3657/2812/2762 2112/2809/2759\nf 2112/2809/2759 7539/2808/2758 7540/2811/2761\nf 7541/2813/2763 7542/2814/2764 2112/2809/2759\nf 2112/2809/2759 3657/2812/2762 7541/2813/2763\nf 7543/2815/2765 3658/2810/2760 2112/2809/2759\nf 2112/2809/2759 7542/2814/2764 7543/2815/2765\nf 7544/2816/2766 7545/2817/2767 2113/2818/2768\nf 2113/2818/2768 3659/2819/2769 7544/2816/2766\nf 7538/2807/2757 3658/2810/2760 2113/2818/2768\nf 2113/2818/2768 7545/2817/2767 7538/2807/2757\nf 7543/2815/2765 7546/2820/2770 2113/2818/2768\nf 2113/2818/2768 3658/2810/2760 7543/2815/2765\nf 7547/2821/2771 3659/2819/2769 2113/2818/2768\nf 2113/2818/2768 7546/2820/2770 7547/2821/2771\nf 7548/2822/2772 7549/2823/2773 2114/2824/2774\nf 2114/2824/2774 3661/2825/2775 7548/2822/2772\nf 7550/2826/2776 3660/2827/2777 2114/2824/2774\nf 2114/2824/2774 7549/2823/2773 7550/2826/2776\nf 7551/2828/2778 7552/2829/2779 2114/2824/2774\nf 2114/2824/2774 3660/2827/2777 7551/2828/2778\nf 7553/2830/2780 3661/2825/2775 2114/2824/2774\nf 2114/2824/2774 7552/2829/2779 7553/2830/2780\nf 7554/2831/2781 7555/2832/2782 2115/2833/2783\nf 2115/2833/2783 3662/2834/2784 7554/2831/2781\nf 7548/2822/2772 3661/2825/2775 2115/2833/2783\nf 2115/2833/2783 7555/2832/2782 7548/2822/2772\nf 7553/2830/2780 7556/2835/2785 2115/2833/2783\nf 2115/2833/2783 3661/2825/2775 7553/2830/2780\nf 7557/2836/2786 3662/2834/2784 2115/2833/2783\nf 2115/2833/2783 7556/2835/2785 7557/2836/2786\nf 7558/2837/2787 7559/2838/2788 2116/2839/2789\nf 2116/2839/2789 3669/2840/2790 7558/2837/2787\nf 7560/2841/2791 7561/2842/2792 2116/2839/2789\nf 2116/2839/2789 7559/2838/2788 7560/2841/2791\nf 7531/2798/2748 3654/2797/2747 2116/2839/2789\nf 2116/2839/2789 7561/2842/2792 7531/2798/2748\nf 7530/2796/2746 7562/2843/2793 2116/2839/2789\nf 2116/2839/2789 3654/2797/2747 7530/2796/2746\nf 7563/2844/2794 3670/2845/2795 2116/2839/2789\nf 2116/2839/2789 7562/2843/2793 7563/2844/2794\nf 1047/2846/2796 3669/2840/2790 2116/2839/2789\nf 2116/2839/2789 3670/2845/2795 1047/2846/2796\nf 1602/2847/2797 4744/2848/2798 2117/2849/2799\nf 2117/2849/2799 3671/2850/2800 1602/2847/2797\nf 7564/2851/2801 7565/2852/2802 2117/2849/2799\nf 2117/2849/2799 4744/2848/2798 7564/2851/2801\nf 7566/2853/2803 7567/2854/2804 2117/2849/2799\nf 2117/2849/2799 7565/2852/2802 7566/2853/2803\nf 7558/2837/2787 3669/2840/2790 2117/2849/2799\nf 2117/2849/2799 7567/2854/2804 7558/2837/2787\nf 1047/2846/2796 3671/2850/2800 2117/2849/2799\nf 2117/2849/2799 3669/2840/2790 1047/2846/2796\nf 7541/2813/2763 3657/2812/2762 2118/2855/2805\nf 2118/2855/2805 3666/2856/2806 7541/2813/2763\nf 7540/2811/2761 7568/2857/2807 2118/2855/2805\nf 2118/2855/2805 3657/2812/2762 7540/2811/2761\nf 7569/2858/2808 3673/2859/2809 2118/2855/2805\nf 2118/2855/2805 7568/2857/2807 7569/2858/2808\nf 1048/2860/2810 3672/2861/2811 2118/2855/2805\nf 2118/2855/2805 3673/2859/2809 1048/2860/2810\nf 1045/2862/2812 3666/2856/2806 2118/2855/2805\nf 2118/2855/2805 3672/2861/2811 1045/2862/2812\nf 1045/2862/2812 3672/2861/2811 2119/2863/2813\nf 2119/2863/2813 3668/2864/2814 1045/2862/2812\nf 1048/2860/2810 3675/2865/2815 2119/2863/2813\nf 2119/2863/2813 3672/2861/2811 1048/2860/2810\nf 1049/2866/2816 3674/2867/2817 2119/2863/2813\nf 2119/2863/2813 3675/2865/2815 1049/2866/2816\nf 1046/2868/2818 3668/2864/2814 2119/2863/2813\nf 2119/2863/2813 3674/2867/2817 1046/2868/2818\nf 7563/2844/2794 7570/2869/2819 2120/2870/2820\nf 2120/2870/2820 3670/2845/2795 7563/2844/2794\nf 7571/2871/2821 7572/2872/2822 2120/2870/2820\nf 2120/2870/2820 7570/2869/2819 7571/2871/2821\nf 7541/2813/2763 3666/2856/2806 2120/2870/2820\nf 2120/2870/2820 7572/2872/2822 7541/2813/2763\nf 1045/2862/2812 3665/2873/2823 2120/2870/2820\nf 2120/2870/2820 3666/2856/2806 1045/2862/2812\nf 1047/2846/2796 3670/2845/2795 2120/2870/2820\nf 2120/2870/2820 3665/2873/2823 1047/2846/2796\nf 1047/2846/2796 3665/2873/2823 2121/2874/2824\nf 2121/2874/2824 3671/2850/2800 1047/2846/2796\nf 1045/2862/2812 3668/2864/2814 2121/2874/2824\nf 2121/2874/2824 3665/2873/2823 1045/2862/2812\nf 1046/2868/2818 3667/2875/2825 2121/2874/2824\nf 2121/2874/2824 3668/2864/2814 1046/2868/2818\nf 1602/2847/2797 3671/2850/2800 2121/2874/2824\nf 2121/2874/2824 3667/2875/2825 1602/2847/2797\nf 7569/2858/2808 7573/2876/2826 2122/2877/2827\nf 2122/2877/2827 3673/2859/2809 7569/2858/2808\nf 7574/2878/2828 7575/2879/2829 2122/2877/2827\nf 2122/2877/2827 7573/2876/2826 7574/2878/2828\nf 7554/2831/2781 3662/2834/2784 2122/2877/2827\nf 2122/2877/2827 7575/2879/2829 7554/2831/2781\nf 7557/2836/2786 7576/2880/2830 2122/2877/2827\nf 2122/2877/2827 3662/2834/2784 7557/2836/2786\nf 7577/2881/2831 7578/2882/2832 2122/2877/2827\nf 2122/2877/2827 7576/2880/2830 7577/2881/2831\nf 7579/2883/2833 3664/2884/2834 2122/2877/2827\nf 2122/2877/2827 7578/2882/2832 7579/2883/2833\nf 1048/2860/2810 3673/2859/2809 2122/2877/2827\nf 2122/2877/2827 3664/2884/2834 1048/2860/2810\nf 1048/2860/2810 3664/2884/2834 2123/2885/2835\nf 2123/2885/2835 3675/2865/2815 1048/2860/2810\nf 7579/2883/2833 7580/2886/2836 2123/2885/2835\nf 2123/2885/2835 3664/2884/2834 7579/2883/2833\nf 7581/2887/2837 7582/2888/2838 2123/2885/2835\nf 2123/2885/2835 7580/2886/2836 7581/2887/2837\nf 7583/2889/2839 3663/2890/2840 2123/2885/2835\nf 2123/2885/2835 7582/2888/2838 7583/2889/2839\nf 1049/2866/2816 3675/2865/2815 2123/2885/2835\nf 2123/2885/2835 3663/2890/2840 1049/2866/2816\nf 996/2558/2508 3554/2566/2516 2124/2891/2841\nf 2124/2891/2841 3676/2892/2842 996/2558/2508\nf 997/2565/2515 7584/2893/2843 2124/2891/2841\nf 2124/2891/2841 3554/2566/2516 997/2565/2515\nf 7585/2894/2844 7586/2895/2845 2124/2891/2841\nf 2124/2891/2841 7584/2893/2843 7585/2894/2844\nf 7587/2896/2846 3676/2892/2842 2124/2891/2841\nf 2124/2891/2841 7586/2895/2845 7587/2896/2846\nf 995/2560/2510 3553/2559/2509 2125/2897/2847\nf 2125/2897/2847 3677/2898/2848 995/2560/2510\nf 996/2558/2508 3676/2892/2842 2125/2897/2847\nf 2125/2897/2847 3553/2559/2509 996/2558/2508\nf 7587/2896/2846 7588/2899/2849 2125/2897/2847\nf 2125/2897/2847 3676/2892/2842 7587/2896/2846\nf 7589/2900/2850 3677/2898/2848 2125/2897/2847\nf 2125/2897/2847 7588/2899/2849 7589/2900/2850\nf 1050/2901/2851 3678/2902/2852 2126/2903/2853\nf 2126/2903/2853 3681/2904/2854 1050/2901/2851\nf 1062/2905/2855 3703/2906/2856 2126/2903/2853\nf 2126/2903/2853 3678/2902/2852 1062/2905/2855\nf 1063/2907/2857 3698/2908/2858 2126/2903/2853\nf 2126/2903/2853 3703/2906/2856 1063/2907/2857\nf 1051/2909/2859 3681/2904/2854 2126/2903/2853\nf 2126/2903/2853 3698/2908/2858 1051/2909/2859\nf 1051/2909/2859 3698/2908/2858 2127/2910/2860\nf 2127/2910/2860 3684/2911/2861 1051/2909/2859\nf 1063/2907/2857 3704/2912/2862 2127/2910/2860\nf 2127/2910/2860 3698/2908/2858 1063/2907/2857\nf 1064/2913/2863 3699/2914/2864 2127/2910/2860\nf 2127/2910/2860 3704/2912/2862 1064/2913/2863\nf 1052/2915/2865 3684/2911/2861 2127/2910/2860\nf 2127/2910/2860 3699/2914/2864 1052/2915/2865\nf 1056/2916/2866 3685/2917/2867 2128/2918/2868\nf 2128/2918/2868 3701/2919/2869 1056/2916/2866\nf 1057/2920/2870 3686/2921/2871 2128/2918/2868\nf 2128/2918/2868 3685/2917/2867 1057/2920/2870\nf 1065/2922/2872 3705/2923/2873 2128/2918/2868\nf 2128/2918/2868 3686/2921/2871 1065/2922/2872\nf 1066/2924/2874 3701/2919/2869 2128/2918/2868\nf 2128/2918/2868 3705/2923/2873 1066/2924/2874\nf 1057/2920/2870 3689/2925/2875 2129/2926/2876\nf 2129/2926/2876 3686/2921/2871 1057/2920/2870\nf 1058/2927/2877 3690/2928/2878 2129/2926/2876\nf 2129/2926/2876 3689/2925/2875 1058/2927/2877\nf 1067/2929/2879 3706/2930/2880 2129/2926/2876\nf 2129/2926/2876 3690/2928/2878 1067/2929/2879\nf 1065/2922/2872 3686/2921/2871 2129/2926/2876\nf 2129/2926/2876 3706/2930/2880 1065/2922/2872\nf 1050/2901/2851 3681/2904/2854 2130/2931/2881\nf 2130/2931/2881 3693/2932/2882 1050/2901/2851\nf 1051/2909/2859 3692/2933/2883 2130/2931/2881\nf 2130/2931/2881 3681/2904/2854 1051/2909/2859\nf 1057/2920/2870 3685/2917/2867 2130/2931/2881\nf 2130/2931/2881 3692/2933/2883 1057/2920/2870\nf 1056/2916/2866 3693/2932/2882 2130/2931/2881\nf 2130/2931/2881 3685/2917/2867 1056/2916/2866\nf 1051/2909/2859 3684/2911/2861 2131/2934/2884\nf 2131/2934/2884 3692/2933/2883 1051/2909/2859\nf 1052/2915/2865 3694/2935/2885 2131/2934/2884\nf 2131/2934/2884 3684/2911/2861 1052/2915/2865\nf 1058/2927/2877 3689/2925/2875 2131/2934/2884\nf 2131/2934/2884 3694/2935/2885 1058/2927/2877\nf 1057/2920/2870 3692/2933/2883 2131/2934/2884\nf 2131/2934/2884 3689/2925/2875 1057/2920/2870\nf 1052/2915/2865 3699/2914/2864 2132/2936/2886\nf 2132/2936/2886 3694/2935/2885 1052/2915/2865\nf 1064/2913/2863 3707/2937/2887 2132/2936/2886\nf 2132/2936/2886 3699/2914/2864 1064/2913/2863\nf 1067/2929/2879 3690/2928/2878 2132/2936/2886\nf 2132/2936/2886 3707/2937/2887 1067/2929/2879\nf 1058/2927/2877 3694/2935/2885 2132/2936/2886\nf 2132/2936/2886 3690/2928/2878 1058/2927/2877\nf 1053/2938/2888 3697/2939/2889 2133/2940/2890\nf 2133/2940/2890 3696/2941/2891 1053/2938/2888\nf 1062/2905/2855 3708/2942/2892 2133/2940/2890\nf 2133/2940/2890 3697/2939/2889 1062/2905/2855\nf 1066/2924/2874 3688/2943/2893 2133/2940/2890\nf 2133/2940/2890 3708/2942/2892 1066/2924/2874\nf 1059/2944/2894 3696/2941/2891 2133/2940/2890\nf 2133/2940/2890 3688/2943/2893 1059/2944/2894\nf 1062/2905/2855 7590/2945/2895 2134/2946/2896\nf 2134/2946/2896 3703/2906/2856 1062/2905/2855\nf 7591/2947/2897 3679/2948/2898 2134/2946/2896\nf 2134/2946/2896 7590/2945/2895 7591/2947/2897\nf 1054/2949/2899 3680/2950/2900 2134/2946/2896\nf 2134/2946/2896 3679/2948/2898 1054/2949/2899\nf 1063/2907/2857 3703/2906/2856 2134/2946/2896\nf 2134/2946/2896 3680/2950/2900 1063/2907/2857\nf 1063/2907/2857 3680/2950/2900 2135/2951/2901\nf 2135/2951/2901 3704/2912/2862 1063/2907/2857\nf 1054/2949/2899 3682/2952/2902 2135/2951/2901\nf 2135/2951/2901 3680/2950/2900 1054/2949/2899\nf 1055/2953/2903 3683/2954/2904 2135/2951/2901\nf 2135/2951/2901 3682/2952/2902 1055/2953/2903\nf 1064/2913/2863 3704/2912/2862 2135/2951/2901\nf 2135/2951/2901 3683/2954/2904 1064/2913/2863\nf 1065/2922/2872 3700/2955/2905 2136/2956/2906\nf 2136/2956/2906 3705/2923/2873 1065/2922/2872\nf 1060/2957/2907 3687/2958/2908 2136/2956/2906\nf 2136/2956/2906 3700/2955/2905 1060/2957/2907\nf 7592/2959/2909 7593/2960/2910 2136/2956/2906\nf 2136/2956/2906 3687/2958/2908 7592/2959/2909\nf 1066/2924/2874 3705/2923/2873 2136/2956/2906\nf 2136/2956/2906 7593/2960/2910 1066/2924/2874\nf 1067/2929/2879 3702/2961/2911 2137/2962/2912\nf 2137/2962/2912 3706/2930/2880 1067/2929/2879\nf 1061/2963/2913 3691/2964/2914 2137/2962/2912\nf 2137/2962/2912 3702/2961/2911 1061/2963/2913\nf 1060/2957/2907 3700/2955/2905 2137/2962/2912\nf 2137/2962/2912 3691/2964/2914 1060/2957/2907\nf 1065/2922/2872 3706/2930/2880 2137/2962/2912\nf 2137/2962/2912 3700/2955/2905 1065/2922/2872\nf 1062/2905/2855 3678/2902/2852 2138/2965/2915\nf 2138/2965/2915 3708/2942/2892 1062/2905/2855\nf 1050/2901/2851 3693/2932/2882 2138/2965/2915\nf 2138/2965/2915 3678/2902/2852 1050/2901/2851\nf 1056/2916/2866 3701/2919/2869 2138/2965/2915\nf 2138/2965/2915 3693/2932/2882 1056/2916/2866\nf 1066/2924/2874 3708/2942/2892 2138/2965/2915\nf 2138/2965/2915 3701/2919/2869 1066/2924/2874\nf 1054/2949/2899 3679/2948/2898 2139/2966/2916\nf 2139/2966/2916 3715/2967/2917 1054/2949/2899\nf 7591/2947/2897 3716/2968/2918 2139/2966/2916\nf 2139/2966/2916 3679/2948/2898 7591/2947/2897\nf 1069/2969/2919 3709/2970/2920 2139/2966/2916\nf 2139/2966/2916 3716/2968/2918 1069/2969/2919\nf 1068/2971/2921 3715/2967/2917 2139/2966/2916\nf 2139/2966/2916 3709/2970/2920 1068/2971/2921\nf 7591/2947/2897 7594/2972/2922 2140/2973/2923\nf 2140/2973/2923 3716/2968/2918 7591/2947/2897\nf 7595/2974/2924 3717/2975/2925 2140/2973/2923\nf 2140/2973/2923 7594/2972/2922 7595/2974/2924\nf 1070/2976/2926 3710/2977/2927 2140/2973/2923\nf 2140/2973/2923 3717/2975/2925 1070/2976/2926\nf 1069/2969/2919 3716/2968/2918 2140/2973/2923\nf 2140/2973/2923 3710/2977/2927 1069/2969/2919\nf 7595/2974/2924 7596/2978/2928 2141/2979/2929\nf 2141/2979/2929 3717/2975/2925 7595/2974/2924\nf 7597/2980/2930 3718/2981/2931 2141/2979/2929\nf 2141/2979/2929 7596/2978/2928 7597/2980/2930\nf 1071/2982/2932 3711/2983/2933 2141/2979/2929\nf 2141/2979/2929 3718/2981/2931 1071/2982/2932\nf 1070/2976/2926 3717/2975/2925 2141/2979/2929\nf 2141/2979/2929 3711/2983/2933 1070/2976/2926\nf 7597/2980/2930 7598/2984/2934 2142/2985/2935\nf 2142/2985/2935 3718/2981/2931 7597/2980/2930\nf 7599/2986/2936 3719/2987/2937 2142/2985/2935\nf 2142/2985/2935 7598/2984/2934 7599/2986/2936\nf 1072/2988/2938 3712/2989/2939 2142/2985/2935\nf 2142/2985/2935 3719/2987/2937 1072/2988/2938\nf 1071/2982/2932 3718/2981/2931 2142/2985/2935\nf 2142/2985/2935 3712/2989/2939 1071/2982/2932\nf 7599/2986/2936 3695/2990/2940 2143/2991/2941\nf 2143/2991/2941 3719/2987/2937 7599/2986/2936\nf 1055/2953/2903 3720/2992/2942 2143/2991/2941\nf 2143/2991/2941 3695/2990/2940 1055/2953/2903\nf 1073/2993/2943 3713/2994/2944 2143/2991/2941\nf 2143/2991/2941 3720/2992/2942 1073/2993/2943\nf 1072/2988/2938 3719/2987/2937 2143/2991/2941\nf 2143/2991/2941 3713/2994/2944 1072/2988/2938\nf 1055/2953/2903 3682/2952/2902 2144/2995/2945\nf 2144/2995/2945 3720/2992/2942 1055/2953/2903\nf 1054/2949/2899 3715/2967/2917 2144/2995/2945\nf 2144/2995/2945 3682/2952/2902 1054/2949/2899\nf 1068/2971/2921 3714/2996/2946 2144/2995/2945\nf 2144/2995/2945 3715/2967/2917 1068/2971/2921\nf 1073/2993/2943 3720/2992/2942 2144/2995/2945\nf 2144/2995/2945 3714/2996/2946 1073/2993/2943\nf 1068/2971/2921 3709/2970/2920 2145/2997/2947\nf 2145/2997/2947 3727/2998/2948 1068/2971/2921\nf 1069/2969/2919 3728/2999/2949 2145/2997/2947\nf 2145/2997/2947 3709/2970/2920 1069/2969/2919\nf 1075/3000/2950 3721/3001/2951 2145/2997/2947\nf 2145/2997/2947 3728/2999/2949 1075/3000/2950\nf 1074/3002/2952 3727/2998/2948 2145/2997/2947\nf 2145/2997/2947 3721/3001/2951 1074/3002/2952\nf 1069/2969/2919 3710/2977/2927 2146/3003/2953\nf 2146/3003/2953 3728/2999/2949 1069/2969/2919\nf 1070/2976/2926 3729/3004/2954 2146/3003/2953\nf 2146/3003/2953 3710/2977/2927 1070/2976/2926\nf 1076/3005/2955 3722/3006/2956 2146/3003/2953\nf 2146/3003/2953 3729/3004/2954 1076/3005/2955\nf 1075/3000/2950 3728/2999/2949 2146/3003/2953\nf 2146/3003/2953 3722/3006/2956 1075/3000/2950\nf 1070/2976/2926 3711/2983/2933 2147/3007/2957\nf 2147/3007/2957 3729/3004/2954 1070/2976/2926\nf 1071/2982/2932 3730/3008/2958 2147/3007/2957\nf 2147/3007/2957 3711/2983/2933 1071/2982/2932\nf 1077/3009/2959 3723/3010/2960 2147/3007/2957\nf 2147/3007/2957 3730/3008/2958 1077/3009/2959\nf 1076/3005/2955 3729/3004/2954 2147/3007/2957\nf 2147/3007/2957 3723/3010/2960 1076/3005/2955\nf 1071/2982/2932 3712/2989/2939 2148/3011/2961\nf 2148/3011/2961 3730/3008/2958 1071/2982/2932\nf 1072/2988/2938 3731/3012/2962 2148/3011/2961\nf 2148/3011/2961 3712/2989/2939 1072/2988/2938\nf 1078/3013/2963 3724/3014/2964 2148/3011/2961\nf 2148/3011/2961 3731/3012/2962 1078/3013/2963\nf 1077/3009/2959 3730/3008/2958 2148/3011/2961\nf 2148/3011/2961 3724/3014/2964 1077/3009/2959\nf 1072/2988/2938 3713/2994/2944 2149/3015/2965\nf 2149/3015/2965 3731/3012/2962 1072/2988/2938\nf 1073/2993/2943 3732/3016/2966 2149/3015/2965\nf 2149/3015/2965 3713/2994/2944 1073/2993/2943\nf 1079/3017/2967 3725/3018/2968 2149/3015/2965\nf 2149/3015/2965 3732/3016/2966 1079/3017/2967\nf 1078/3013/2963 3731/3012/2962 2149/3015/2965\nf 2149/3015/2965 3725/3018/2968 1078/3013/2963\nf 1073/2993/2943 3714/2996/2946 2150/3019/2969\nf 2150/3019/2969 3732/3016/2966 1073/2993/2943\nf 1068/2971/2921 3727/2998/2948 2150/3019/2969\nf 2150/3019/2969 3714/2996/2946 1068/2971/2921\nf 1074/3002/2952 3726/3020/2970 2150/3019/2969\nf 2150/3019/2969 3727/2998/2948 1074/3002/2952\nf 1079/3017/2967 3732/3016/2966 2150/3019/2969\nf 2150/3019/2969 3726/3020/2970 1079/3017/2967\nf 1064/2913/2863 7600/3021/2971 2151/3022/2972\nf 2151/3022/2972 3737/3023/2973 1064/2913/2863\nf 7601/3024/2974 3738/3025/2975 2151/3022/2972\nf 2151/3022/2972 7600/3021/2971 7601/3024/2974\nf 1081/3026/2976 3733/3027/2977 2151/3022/2972\nf 2151/3022/2972 3738/3025/2975 1081/3026/2976\nf 1080/3028/2978 3737/3023/2973 2151/3022/2972\nf 2151/3022/2972 3733/3027/2977 1080/3028/2978\nf 7601/3024/2974 7602/3029/2979 2152/3030/2980\nf 2152/3030/2980 3738/3025/2975 7601/3024/2974\nf 7603/3031/2981 3739/3032/2982 2152/3030/2980\nf 2152/3030/2980 7602/3029/2979 7603/3031/2981\nf 1082/3033/2983 3734/3034/2984 2152/3030/2980\nf 2152/3030/2980 3739/3032/2982 1082/3033/2983\nf 1081/3026/2976 3738/3025/2975 2152/3030/2980\nf 2152/3030/2980 3734/3034/2984 1081/3026/2976\nf 7603/3031/2981 7604/3035/2985 2153/3036/2986\nf 2153/3036/2986 3739/3032/2982 7603/3031/2981\nf 1067/2929/2879 3740/3037/2987 2153/3036/2986\nf 2153/3036/2986 7604/3035/2985 1067/2929/2879\nf 1083/3038/2988 3735/3039/2989 2153/3036/2986\nf 2153/3036/2986 3740/3037/2987 1083/3038/2988\nf 1082/3033/2983 3739/3032/2982 2153/3036/2986\nf 2153/3036/2986 3735/3039/2989 1082/3033/2983\nf 1067/2929/2879 3707/2937/2887 2154/3040/2990\nf 2154/3040/2990 3740/3037/2987 1067/2929/2879\nf 1064/2913/2863 3737/3023/2973 2154/3040/2990\nf 2154/3040/2990 3707/2937/2887 1064/2913/2863\nf 1080/3028/2978 3736/3041/2991 2154/3040/2990\nf 2154/3040/2990 3737/3023/2973 1080/3028/2978\nf 1083/3038/2988 3740/3037/2987 2154/3040/2990\nf 2154/3040/2990 3736/3041/2991 1083/3038/2988\nf 7605/3042/2992 7606/3043/2993 2155/3044/2994\nf 2155/3044/2994 3745/3045/2995 7605/3042/2992\nf 7607/3046/2996 3746/3047/2997 2155/3044/2994\nf 2155/3044/2994 7606/3043/2993 7607/3046/2996\nf 1085/3048/2998 3741/3049/2999 2155/3044/2994\nf 2155/3044/2994 3746/3047/2997 1085/3048/2998\nf 1084/3050/3000 3745/3045/2995 2155/3044/2994\nf 2155/3044/2994 3741/3049/2999 1084/3050/3000\nf 7607/3046/2996 7608/3051/3001 2156/3052/3002\nf 2156/3052/3002 3746/3047/2997 7607/3046/2996\nf 7609/3053/3003 3747/3054/3004 2156/3052/3002\nf 2156/3052/3002 7608/3051/3001 7609/3053/3003\nf 1086/3055/3005 3742/3056/3006 2156/3052/3002\nf 2156/3052/3002 3747/3054/3004 1086/3055/3005\nf 1085/3048/2998 3746/3047/2997 2156/3052/3002\nf 2156/3052/3002 3742/3056/3006 1085/3048/2998\nf 7609/3053/3003 7610/3057/3007 2157/3058/3008\nf 2157/3058/3008 3747/3054/3004 7609/3053/3003\nf 7611/3059/3009 3748/3060/3010 2157/3058/3008\nf 2157/3058/3008 7610/3057/3007 7611/3059/3009\nf 1087/3061/3011 3743/3062/3012 2157/3058/3008\nf 2157/3058/3008 3748/3060/3010 1087/3061/3011\nf 1086/3055/3005 3747/3054/3004 2157/3058/3008\nf 2157/3058/3008 3743/3062/3012 1086/3055/3005\nf 7611/3059/3009 7612/3063/3013 2158/3064/3014\nf 2158/3064/3014 3748/3060/3010 7611/3059/3009\nf 7613/3065/3015 7614/3066/3016 2158/3064/3014\nf 2158/3064/3014 7612/3063/3013 7613/3065/3015\nf 7615/3067/3017 3744/3068/3018 2158/3064/3014\nf 2158/3064/3014 7614/3066/3016 7615/3067/3017\nf 1087/3061/3011 3748/3060/3010 2158/3064/3014\nf 2158/3064/3014 3744/3068/3018 1087/3061/3011\nf 1084/3050/3000 3741/3049/2999 2159/3069/3019\nf 2159/3069/3019 3753/3070/3020 1084/3050/3000\nf 1085/3048/2998 3754/3071/3021 2159/3069/3019\nf 2159/3069/3019 3741/3049/2999 1085/3048/2998\nf 1089/3072/3022 3749/3073/3023 2159/3069/3019\nf 2159/3069/3019 3754/3071/3021 1089/3072/3022\nf 1088/3074/3024 3753/3070/3020 2159/3069/3019\nf 2159/3069/3019 3749/3073/3023 1088/3074/3024\nf 1085/3048/2998 3742/3056/3006 2160/3075/3025\nf 2160/3075/3025 3754/3071/3021 1085/3048/2998\nf 1086/3055/3005 3755/3076/3026 2160/3075/3025\nf 2160/3075/3025 3742/3056/3006 1086/3055/3005\nf 1090/3077/3027 3750/3078/3028 2160/3075/3025\nf 2160/3075/3025 3755/3076/3026 1090/3077/3027\nf 1089/3072/3022 3754/3071/3021 2160/3075/3025\nf 2160/3075/3025 3750/3078/3028 1089/3072/3022\nf 1086/3055/3005 3743/3062/3012 2161/3079/3029\nf 2161/3079/3029 3755/3076/3026 1086/3055/3005\nf 1087/3061/3011 3756/3080/3030 2161/3079/3029\nf 2161/3079/3029 3743/3062/3012 1087/3061/3011\nf 1091/3081/3031 3751/3082/3032 2161/3079/3029\nf 2161/3079/3029 3756/3080/3030 1091/3081/3031\nf 1090/3077/3027 3755/3076/3026 2161/3079/3029\nf 2161/3079/3029 3751/3082/3032 1090/3077/3027\nf 1087/3061/3011 3744/3068/3018 2162/3083/3033\nf 2162/3083/3033 3756/3080/3030 1087/3061/3011\nf 7615/3067/3017 7616/3084/3034 2162/3083/3033\nf 2162/3083/3033 3744/3068/3018 7615/3067/3017\nf 7617/3085/3035 3752/3086/3036 2162/3083/3033\nf 2162/3083/3033 7616/3084/3034 7617/3085/3035\nf 1091/3081/3031 3756/3080/3030 2162/3083/3033\nf 2162/3083/3033 3752/3086/3036 1091/3081/3031\nf 1092/3087/539 3760/3088/539 2163/3089/539\nf 2163/3089/539 3757/3090/539 1092/3087/539\nf 1095/3091/539 3759/3092/539 2163/3089/539\nf 2163/3089/539 3760/3088/539 1095/3091/539\nf 1094/3093/539 3758/3094/539 2163/3089/539\nf 2163/3089/539 3759/3092/539 1094/3093/539\nf 1093/3095/539 3757/3090/539 2163/3089/539\nf 2163/3089/539 3758/3094/539 1093/3095/539\nf 1096/3096/3037 3764/3097/3038 2164/3098/3039\nf 2164/3098/3039 3761/3099/3040 1096/3096/3037\nf 1099/3100/3041 3763/3101/3042 2164/3098/3039\nf 2164/3098/3039 3764/3097/3038 1099/3100/3041\nf 1098/3102/3043 3762/3103/3044 2164/3098/3039\nf 2164/3098/3039 3763/3101/3042 1098/3102/3043\nf 1097/3104/3045 3761/3099/3040 2164/3098/3039\nf 2164/3098/3039 3762/3103/3044 1097/3104/3045\nf 1100/3105/3046 3768/3106/3047 2165/3107/3048\nf 2165/3107/3048 3765/3108/3049 1100/3105/3046\nf 1103/3109/3050 3767/3110/3051 2165/3107/3048\nf 2165/3107/3048 3768/3106/3047 1103/3109/3050\nf 1102/3111/3052 3766/3112/3053 2165/3107/3048\nf 2165/3107/3048 3767/3110/3051 1102/3111/3052\nf 1101/3113/3054 3765/3108/3049 2165/3107/3048\nf 2165/3107/3048 3766/3112/3053 1101/3113/3054\nf 1104/3114/3055 3772/3115/3056 2166/3116/3057\nf 2166/3116/3057 3769/3117/3058 1104/3114/3055\nf 1107/3118/3059 3771/3119/3060 2166/3116/3057\nf 2166/3116/3057 3772/3115/3056 1107/3118/3059\nf 1106/3120/3061 3770/3121/3062 2166/3116/3057\nf 2166/3116/3057 3771/3119/3060 1106/3120/3061\nf 1105/3122/3063 3769/3117/3058 2166/3116/3057\nf 2166/3116/3057 3770/3121/3062 1105/3122/3063\nf 1108/3123/3064 3776/3124/3065 2167/3125/3066\nf 2167/3125/3066 3773/3126/3067 1108/3123/3064\nf 1111/3127/3068 3775/3128/3069 2167/3125/3066\nf 2167/3125/3066 3776/3124/3065 1111/3127/3068\nf 1110/3129/3070 3774/3130/3071 2167/3125/3066\nf 2167/3125/3066 3775/3128/3069 1110/3129/3070\nf 1109/3131/3072 3773/3126/3067 2167/3125/3066\nf 2167/3125/3066 3774/3130/3071 1109/3131/3072\nf 1112/3132/3073 3780/3133/3074 2168/3134/3075\nf 2168/3134/3075 3777/3135/3076 1112/3132/3073\nf 1115/3136/3077 3779/3137/3078 2168/3134/3075\nf 2168/3134/3075 3780/3133/3074 1115/3136/3077\nf 1114/3138/3079 3778/3139/3080 2168/3134/3075\nf 2168/3134/3075 3779/3137/3078 1114/3138/3079\nf 1113/3140/3081 3777/3135/3076 2168/3134/3075\nf 2168/3134/3075 3778/3139/3080 1113/3140/3081\nf 1116/3141/3082 3784/3142/3083 2169/3143/3084\nf 2169/3143/3084 3781/3144/3085 1116/3141/3082\nf 1119/3145/3086 3783/3146/3087 2169/3143/3084\nf 2169/3143/3084 3784/3142/3083 1119/3145/3086\nf 1118/3147/3088 3782/3148/3089 2169/3143/3084\nf 2169/3143/3084 3783/3146/3087 1118/3147/3088\nf 1117/3149/3090 3781/3144/3085 2169/3143/3084\nf 2169/3143/3084 3782/3148/3089 1117/3149/3090\nf 1120/3150/3091 3788/3151/3092 2170/3152/3093\nf 2170/3152/3093 3785/3153/3094 1120/3150/3091\nf 1123/3154/3095 3787/3155/3096 2170/3152/3093\nf 2170/3152/3093 3788/3151/3092 1123/3154/3095\nf 1122/3156/3097 3786/3157/3098 2170/3152/3093\nf 2170/3152/3093 3787/3155/3096 1122/3156/3097\nf 1121/3158/3099 3785/3153/3094 2170/3152/3093\nf 2170/3152/3093 3786/3157/3098 1121/3158/3099\nf 1008/611/603 3792/614/603 2171/3159/3100\nf 2171/3159/3100 3789/3160/3101 1008/611/603\nf 1126/619/603 3791/3161/3102 2171/3159/3100\nf 2171/3159/3100 3792/614/603 1126/619/603\nf 1125/3162/3103 3790/3163/3104 2171/3159/3100\nf 2171/3159/3100 3791/3161/3102 1125/3162/3103\nf 1124/3164/3105 3789/3160/3101 2171/3159/3100\nf 2171/3159/3100 3790/3163/3104 1124/3164/3105\nf 1127/620/610 3796/623/613 2172/3165/3106\nf 2172/3165/3106 3793/3166/3107 1127/620/610\nf 1130/628/618 3795/3167/3108 2172/3165/3106\nf 2172/3165/3106 3796/623/613 1130/628/618\nf 1129/3168/3109 3794/3169/3110 2172/3165/3106\nf 2172/3165/3106 3795/3167/3108 1129/3168/3109\nf 1128/3170/3111 3793/3166/3107 2172/3165/3106\nf 2172/3165/3106 3794/3169/3110 1128/3170/3111\nf 1131/3171/3112 3800/3172/3113 2173/3173/3114\nf 2173/3173/3114 3797/3174/3115 1131/3171/3112\nf 1134/3175/3116 3799/3176/3117 2173/3173/3114\nf 2173/3173/3114 3800/3172/3113 1134/3175/3116\nf 1133/3177/3118 3798/3178/3119 2173/3173/3114\nf 2173/3173/3114 3799/3176/3117 1133/3177/3118\nf 1132/3179/3120 3797/3174/3115 2173/3173/3114\nf 2173/3173/3114 3798/3178/3119 1132/3179/3120\nf 1135/3180/3121 3804/3181/3122 2174/3182/3123\nf 2174/3182/3123 3801/3183/3124 1135/3180/3121\nf 1138/3184/3125 3803/3185/3126 2174/3182/3123\nf 2174/3182/3123 3804/3181/3122 1138/3184/3125\nf 1137/3186/3127 3802/3187/3128 2174/3182/3123\nf 2174/3182/3123 3803/3185/3126 1137/3186/3127\nf 1136/3188/3129 3801/3183/3124 2174/3182/3123\nf 2174/3182/3123 3802/3187/3128 1136/3188/3129\nf 1139/3189/3130 3808/3190/3131 2175/3191/3132\nf 2175/3191/3132 3805/3192/3133 1139/3189/3130\nf 1142/3193/3134 3807/3194/3135 2175/3191/3132\nf 2175/3191/3132 3808/3190/3131 1142/3193/3134\nf 1141/3195/3136 3806/3196/3137 2175/3191/3132\nf 2175/3191/3132 3807/3194/3135 1141/3195/3136\nf 1140/3197/3138 3805/3192/3133 2175/3191/3132\nf 2175/3191/3132 3806/3196/3137 1140/3197/3138\nf 1143/3198/3139 3812/3199/3140 2176/3200/3141\nf 2176/3200/3141 3809/3201/3142 1143/3198/3139\nf 1146/3202/3143 3811/3203/3144 2176/3200/3141\nf 2176/3200/3141 3812/3199/3140 1146/3202/3143\nf 1145/3204/3145 3810/3205/3146 2176/3200/3141\nf 2176/3200/3141 3811/3203/3144 1145/3204/3145\nf 1144/3206/3147 3809/3201/3142 2176/3200/3141\nf 2176/3200/3141 3810/3205/3146 1144/3206/3147\nf 1144/3206/3147 3810/3205/3146 2177/3207/3148\nf 2177/3207/3148 3813/3208/3149 1144/3206/3147\nf 1145/3204/3145 3815/3209/3150 2177/3207/3148\nf 2177/3207/3148 3810/3205/3146 1145/3204/3145\nf 1148/3210/3151 3814/3211/3152 2177/3207/3148\nf 2177/3207/3148 3815/3209/3150 1148/3210/3151\nf 1147/3212/3153 3813/3208/3149 2177/3207/3148\nf 2177/3207/3148 3814/3211/3152 1147/3212/3153\nf 1149/3213/3154 3819/3214/3155 2178/3215/3156\nf 2178/3215/3156 3816/3216/3157 1149/3213/3154\nf 1152/3217/3158 3818/3218/3159 2178/3215/3156\nf 2178/3215/3156 3819/3214/3155 1152/3217/3158\nf 1151/3219/3160 3817/3220/3161 2178/3215/3156\nf 2178/3215/3156 3818/3218/3159 1151/3219/3160\nf 1150/3221/3162 3816/3216/3157 2178/3215/3156\nf 2178/3215/3156 3817/3220/3161 1150/3221/3162\nf 1153/3222/3163 3823/3223/3164 2179/3224/3165\nf 2179/3224/3165 3820/3225/3166 1153/3222/3163\nf 1156/3226/3167 3822/3227/3168 2179/3224/3165\nf 2179/3224/3165 3823/3223/3164 1156/3226/3167\nf 1155/3228/3169 3821/3229/3170 2179/3224/3165\nf 2179/3224/3165 3822/3227/3168 1155/3228/3169\nf 1154/3230/3171 3820/3225/3166 2179/3224/3165\nf 2179/3224/3165 3821/3229/3170 1154/3230/3171\nf 1157/3231/3172 3827/3232/3173 2180/3233/3174\nf 2180/3233/3174 3824/3234/3175 1157/3231/3172\nf 1160/3235/3176 3826/3236/3177 2180/3233/3174\nf 2180/3233/3174 3827/3232/3173 1160/3235/3176\nf 1159/3237/3178 3825/3238/3179 2180/3233/3174\nf 2180/3233/3174 3826/3236/3177 1159/3237/3178\nf 1158/3239/3180 3824/3234/3175 2180/3233/3174\nf 2180/3233/3174 3825/3238/3179 1158/3239/3180\nf 548/698/688 2796/701/691 2181/3240/3181\nf 2181/3240/3181 3828/3241/3182 548/698/688\nf 1163/706/696 3830/3242/3183 2181/3240/3181\nf 2181/3240/3181 2796/701/691 1163/706/696\nf 1162/3243/3184 3829/3244/3185 2181/3240/3181\nf 2181/3240/3181 3830/3242/3183 1162/3243/3184\nf 1161/3245/3186 3828/3241/3182 2181/3240/3181\nf 2181/3240/3181 3829/3244/3185 1161/3245/3186\nf 1112/3132/3073 3834/3246/3187 2182/3247/3188\nf 2182/3247/3188 3831/3248/3189 1112/3132/3073\nf 1166/3249/3190 3833/3250/3191 2182/3247/3188\nf 2182/3247/3188 3834/3246/3187 1166/3249/3190\nf 1165/3251/3192 3832/3252/3193 2182/3247/3188\nf 2182/3247/3188 3833/3250/3191 1165/3251/3192\nf 1164/3253/3194 3831/3248/3189 2182/3247/3188\nf 2182/3247/3188 3832/3252/3193 1164/3253/3194\nf 1167/3254/3195 3838/3255/3196 2183/3256/3197\nf 2183/3256/3197 3835/3257/3198 1167/3254/3195\nf 1170/3258/3199 3837/3259/3200 2183/3256/3197\nf 2183/3256/3197 3838/3255/3196 1170/3258/3199\nf 1169/3260/3201 3836/3261/3202 2183/3256/3197\nf 2183/3256/3197 3837/3259/3200 1169/3260/3201\nf 1168/3262/3203 3835/3257/3198 2183/3256/3197\nf 2183/3256/3197 3836/3261/3202 1168/3262/3203\nf 981/724/714 3841/3263/3204 2184/3264/3205\nf 2184/3264/3205 3528/725/715 981/724/714\nf 1172/3265/3206 3840/3266/3207 2184/3264/3205\nf 2184/3264/3205 3841/3263/3204 1172/3265/3206\nf 1171/3267/3208 3839/3268/3209 2184/3264/3205\nf 2184/3264/3205 3840/3266/3207 1171/3267/3208\nf 982/728/718 3528/725/715 2184/3264/3205\nf 2184/3264/3205 3839/3268/3209 982/728/718\nf 1173/3269/3210 3845/3270/3211 2185/3271/3212\nf 2185/3271/3212 3842/3272/3213 1173/3269/3210\nf 1176/3273/3214 3844/3274/3215 2185/3271/3212\nf 2185/3271/3212 3845/3270/3211 1176/3273/3214\nf 1175/3275/3216 3843/3276/3217 2185/3271/3212\nf 2185/3271/3212 3844/3274/3215 1175/3275/3216\nf 1174/3277/3218 3842/3272/3213 2185/3271/3212\nf 2185/3271/3212 3843/3276/3217 1174/3277/3218\nf 1177/3278/3219 3849/3279/3220 2186/3280/3221\nf 2186/3280/3221 3846/3281/3222 1177/3278/3219\nf 1180/3282/3223 3848/3283/3224 2186/3280/3221\nf 2186/3280/3221 3849/3279/3220 1180/3282/3223\nf 1179/3284/3225 3847/3285/3226 2186/3280/3221\nf 2186/3280/3221 3848/3283/3224 1179/3284/3225\nf 1178/3286/3227 3846/3281/3222 2186/3280/3221\nf 2186/3280/3221 3847/3285/3226 1178/3286/3227\nf 1181/3287/3228 3853/3288/3229 2187/3289/3230\nf 2187/3289/3230 3850/3290/3231 1181/3287/3228\nf 1184/3291/3232 3852/3292/3233 2187/3289/3230\nf 2187/3289/3230 3853/3288/3229 1184/3291/3232\nf 1183/3293/3234 3851/3294/3235 2187/3289/3230\nf 2187/3289/3230 3852/3292/3233 1183/3293/3234\nf 1182/3295/3236 3850/3290/3231 2187/3289/3230\nf 2187/3289/3230 3851/3294/3235 1182/3295/3236\nf 1185/3296/3237 3857/3297/3238 2188/3298/3239\nf 2188/3298/3239 3854/3299/3240 1185/3296/3237\nf 1188/3300/3241 3856/3301/3242 2188/3298/3239\nf 2188/3298/3239 3857/3297/3238 1188/3300/3241\nf 1187/3302/3243 3855/3303/3244 2188/3298/3239\nf 2188/3298/3239 3856/3301/3242 1187/3302/3243\nf 1186/3304/3245 3854/3299/3240 2188/3298/3239\nf 2188/3298/3239 3855/3303/3244 1186/3304/3245\nf 1189/3305/3246 3861/3306/3247 2189/3307/3248\nf 2189/3307/3248 3858/3308/3249 1189/3305/3246\nf 1191/3309/3250 3860/3310/3251 2189/3307/3248\nf 2189/3307/3248 3861/3306/3247 1191/3309/3250\nf 1190/3311/3252 3859/3312/3253 2189/3307/3248\nf 2189/3307/3248 3860/3310/3251 1190/3311/3252\nf 1161/3245/3186 3858/3308/3249 2189/3307/3248\nf 2189/3307/3248 3859/3312/3253 1161/3245/3186\nf 1192/3313/3254 3865/3314/3255 2190/3315/3256\nf 2190/3315/3256 3862/3316/3257 1192/3313/3254\nf 1195/3317/3258 3864/3318/3259 2190/3315/3256\nf 2190/3315/3256 3865/3314/3255 1195/3317/3258\nf 1194/3319/3260 3863/3320/3261 2190/3315/3256\nf 2190/3315/3256 3864/3318/3259 1194/3319/3260\nf 1193/3321/3262 3862/3316/3257 2190/3315/3256\nf 2190/3315/3256 3863/3320/3261 1193/3321/3262\nf 1196/3322/3263 3869/3323/3264 2191/3324/3265\nf 2191/3324/3265 3866/3325/3266 1196/3322/3263\nf 1199/3326/3267 3868/3327/3268 2191/3324/3265\nf 2191/3324/3265 3869/3323/3264 1199/3326/3267\nf 1198/3328/3269 3867/3329/3270 2191/3324/3265\nf 2191/3324/3265 3868/3327/3268 1198/3328/3269\nf 1197/3330/3271 3866/3325/3266 2191/3324/3265\nf 2191/3324/3265 3867/3329/3270 1197/3330/3271\nf 1200/3331/3272 3873/3332/3273 2192/3333/3274\nf 2192/3333/3274 3870/3334/3275 1200/3331/3272\nf 1203/3335/3276 3872/3336/3277 2192/3333/3274\nf 2192/3333/3274 3873/3332/3273 1203/3335/3276\nf 1202/3337/3278 3871/3338/3279 2192/3333/3274\nf 2192/3333/3274 3872/3336/3277 1202/3337/3278\nf 1201/3339/3280 3870/3334/3275 2192/3333/3274\nf 2192/3333/3274 3871/3338/3279 1201/3339/3280\nf 1204/3340/3281 3877/3341/3282 2193/3342/3283\nf 2193/3342/3283 3874/3343/3284 1204/3340/3281\nf 1207/3344/3285 3876/3345/3286 2193/3342/3283\nf 2193/3342/3283 3877/3341/3282 1207/3344/3285\nf 1206/3346/3287 3875/3347/3288 2193/3342/3283\nf 2193/3342/3283 3876/3345/3286 1206/3346/3287\nf 1205/3348/3289 3874/3343/3284 2193/3342/3283\nf 2193/3342/3283 3875/3347/3288 1205/3348/3289\nf 1189/3305/3246 3881/3349/3290 2194/3350/3291\nf 2194/3350/3291 3878/3351/3292 1189/3305/3246\nf 1209/3352/3293 3880/3353/3294 2194/3350/3291\nf 2194/3350/3291 3881/3349/3290 1209/3352/3293\nf 1208/3354/3295 3879/3355/3296 2194/3350/3291\nf 2194/3350/3291 3880/3353/3294 1208/3354/3295\nf 1113/3140/3081 3878/3351/3292 2194/3350/3291\nf 2194/3350/3291 3879/3355/3296 1113/3140/3081\nf 1204/3340/3281 3885/3356/3297 2195/3357/3298\nf 2195/3357/3298 3882/3358/3299 1204/3340/3281\nf 1211/3359/3300 3884/3360/3301 2195/3357/3298\nf 2195/3357/3298 3885/3356/3297 1211/3359/3300\nf 1210/3361/3302 3883/3362/3303 2195/3357/3298\nf 2195/3357/3298 3884/3360/3301 1210/3361/3302\nf 1158/3239/3180 3882/3358/3299 2195/3357/3298\nf 2195/3357/3298 3883/3362/3303 1158/3239/3180\nf 1212/3363/3304 3889/3364/3305 2196/3365/3306\nf 2196/3365/3306 3886/3366/3307 1212/3363/3304\nf 1215/3367/3308 3888/3368/3309 2196/3365/3306\nf 2196/3365/3306 3889/3364/3305 1215/3367/3308\nf 1214/3369/3310 3887/3370/3311 2196/3365/3306\nf 2196/3365/3306 3888/3368/3309 1214/3369/3310\nf 1213/3371/3312 3886/3366/3307 2196/3365/3306\nf 2196/3365/3306 3887/3370/3311 1213/3371/3312\nf 1184/3291/3232 3893/3372/3313 2197/3373/3314\nf 2197/3373/3314 3890/3374/3315 1184/3291/3232\nf 1106/3120/3061 3892/3375/3316 2197/3373/3314\nf 2197/3373/3314 3893/3372/3313 1106/3120/3061\nf 1217/3376/3317 3891/3377/3318 2197/3373/3314\nf 2197/3373/3314 3892/3375/3316 1217/3376/3317\nf 1216/3378/3319 3890/3374/3315 2197/3373/3314\nf 2197/3373/3314 3891/3377/3318 1216/3378/3319\nf 1218/3379/3320 3897/3380/3321 2198/3381/3322\nf 2198/3381/3322 3894/3382/3323 1218/3379/3320\nf 1221/3383/3324 3896/3384/3325 2198/3381/3322\nf 2198/3381/3322 3897/3380/3321 1221/3383/3324\nf 1220/3385/3326 3895/3386/3327 2198/3381/3322\nf 2198/3381/3322 3896/3384/3325 1220/3385/3326\nf 1219/3387/3328 3894/3382/3323 2198/3381/3322\nf 2198/3381/3322 3895/3386/3327 1219/3387/3328\nf 1222/3388/3329 3901/3389/3330 2199/3390/3331\nf 2199/3390/3331 3898/3391/3332 1222/3388/3329\nf 1225/3392/3333 3900/3393/3334 2199/3390/3331\nf 2199/3390/3331 3901/3389/3330 1225/3392/3333\nf 1224/3394/3335 3899/3395/3336 2199/3390/3331\nf 2199/3390/3331 3900/3393/3334 1224/3394/3335\nf 1223/3396/3337 3898/3391/3332 2199/3390/3331\nf 2199/3390/3331 3899/3395/3336 1223/3396/3337\nf 1226/3397/3338 3905/3398/3339 2200/3399/3340\nf 2200/3399/3340 3902/3400/3341 1226/3397/3338\nf 1229/3401/3342 3904/3402/3343 2200/3399/3340\nf 2200/3399/3340 3905/3398/3339 1229/3401/3342\nf 1228/3403/3344 3903/3404/3345 2200/3399/3340\nf 2200/3399/3340 3904/3402/3343 1228/3403/3344\nf 1227/3405/3346 3902/3400/3341 2200/3399/3340\nf 2200/3399/3340 3903/3404/3345 1227/3405/3346\nf 1230/870/860 3909/3406/3347 2201/3407/3348\nf 2201/3407/3348 3906/871/861 1230/870/860\nf 1183/3293/3234 3908/3408/3349 2201/3407/3348\nf 2201/3407/3348 3909/3406/3347 1183/3293/3234\nf 1232/3409/3350 3907/3410/3351 2201/3407/3348\nf 2201/3407/3348 3908/3408/3349 1232/3409/3350\nf 1231/874/864 3906/871/861 2201/3407/3348\nf 2201/3407/3348 3907/3410/3351 1231/874/864\nf 1233/3411/3352 3913/3412/3353 2202/3413/3354\nf 2202/3413/3354 3910/3414/3355 1233/3411/3352\nf 1236/3415/3356 3912/3416/3357 2202/3413/3354\nf 2202/3413/3354 3913/3412/3353 1236/3415/3356\nf 1235/3417/3358 3911/3418/3359 2202/3413/3354\nf 2202/3413/3354 3912/3416/3357 1235/3417/3358\nf 1234/3419/3360 3910/3414/3355 2202/3413/3354\nf 2202/3413/3354 3911/3418/3359 1234/3419/3360\nf 1237/3420/3361 3917/3421/3362 2203/3422/3363\nf 2203/3422/3363 3914/3423/3364 1237/3420/3361\nf 1240/3424/3365 3916/3425/3366 2203/3422/3363\nf 2203/3422/3363 3917/3421/3362 1240/3424/3365\nf 1239/3426/3367 3915/3427/3368 2203/3422/3363\nf 2203/3422/3363 3916/3425/3366 1239/3426/3367\nf 1238/3428/3369 3914/3423/3364 2203/3422/3363\nf 2203/3422/3363 3915/3427/3368 1238/3428/3369\nf 1241/896/539 3921/3429/539 2204/3430/539\nf 2204/3430/539 3918/897/539 1241/896/539\nf 1244/3431/539 3920/3432/539 2204/3430/539\nf 2204/3430/539 3921/3429/539 1244/3431/539\nf 1243/3433/539 3919/3434/539 2204/3430/539\nf 2204/3430/539 3920/3432/539 1243/3433/539\nf 1242/900/539 3918/897/539 2204/3430/539\nf 2204/3430/539 3919/3434/539 1242/900/539\nf 988/905/886 3925/3435/3370 2205/3436/3371\nf 2205/3436/3371 3922/906/887 988/905/886\nf 1247/3437/3372 3924/3438/3373 2205/3436/3371\nf 2205/3436/3371 3925/3435/3370 1247/3437/3372\nf 1246/3439/3374 3923/3440/3375 2205/3436/3371\nf 2205/3436/3371 3924/3438/3373 1246/3439/3374\nf 1245/909/890 3922/906/887 2205/3436/3371\nf 2205/3436/3371 3923/3440/3375 1245/909/890\nf 1248/3441/3376 3929/3442/3377 2206/3443/3378\nf 2206/3443/3378 3926/3444/3379 1248/3441/3376\nf 1154/3230/3171 3928/3445/3380 2206/3443/3378\nf 2206/3443/3378 3929/3442/3377 1154/3230/3171\nf 1250/3446/3381 3927/3447/3382 2206/3443/3378\nf 2206/3443/3378 3928/3445/3380 1250/3446/3381\nf 1249/3448/3383 3926/3444/3379 2206/3443/3378\nf 2206/3443/3378 3927/3447/3382 1249/3448/3383\nf 1251/3449/3384 3933/3450/3385 2207/3451/3386\nf 2207/3451/3386 3930/3452/3387 1251/3449/3384\nf 1253/3453/3388 3932/3454/3389 2207/3451/3386\nf 2207/3451/3386 3933/3450/3385 1253/3453/3388\nf 1252/3455/3390 3931/3456/3391 2207/3451/3386\nf 2207/3451/3386 3932/3454/3389 1252/3455/3390\nf 1140/3197/3138 3930/3452/3387 2207/3451/3386\nf 2207/3451/3386 3931/3456/3391 1140/3197/3138\nf 1254/930/911 3936/3457/3392 2208/3458/3393\nf 2208/3458/3393 2768/931/912 1254/930/911\nf 1255/3459/3394 3935/3460/3395 2208/3458/3393\nf 2208/3458/3393 3936/3457/3392 1255/3459/3394\nf 1205/3348/3289 3934/3461/3396 2208/3458/3393\nf 2208/3458/3393 3935/3460/3395 1205/3348/3289\nf 545/934/915 2768/931/912 2208/3458/3393\nf 2208/3458/3393 3934/3461/3396 545/934/915\nf 1256/3462/3397 3940/3463/3398 2209/3464/3399\nf 2209/3464/3399 3937/3465/3400 1256/3462/3397\nf 1210/3361/3302 3939/3466/3401 2209/3464/3399\nf 2209/3464/3399 3940/3463/3398 1210/3361/3302\nf 1258/3467/3402 3938/3468/3403 2209/3464/3399\nf 2209/3464/3399 3939/3466/3401 1258/3467/3402\nf 1257/3469/3404 3937/3465/3400 2209/3464/3399\nf 2209/3464/3399 3938/3468/3403 1257/3469/3404\nf 1259/3470/3405 3944/3471/3406 2210/3472/3407\nf 2210/3472/3407 3941/3473/3408 1259/3470/3405\nf 1262/3474/3409 3943/3475/3410 2210/3472/3407\nf 2210/3472/3407 3944/3471/3406 1262/3474/3409\nf 1261/3476/3411 3942/3477/3412 2210/3472/3407\nf 2210/3472/3407 3943/3475/3410 1261/3476/3411\nf 1260/3478/3413 3941/3473/3408 2210/3472/3407\nf 2210/3472/3407 3942/3477/3412 1260/3478/3413\nf 1263/3479/3414 3948/3480/3415 2211/3481/3416\nf 2211/3481/3416 3945/3482/3417 1263/3479/3414\nf 1266/3483/3418 3947/3484/3419 2211/3481/3416\nf 2211/3481/3416 3948/3480/3415 1266/3483/3418\nf 1265/3485/3420 3946/3486/3421 2211/3481/3416\nf 2211/3481/3416 3947/3484/3419 1265/3485/3420\nf 1264/3487/3422 3945/3482/3417 2211/3481/3416\nf 2211/3481/3416 3946/3486/3421 1264/3487/3422\nf 1101/3113/3054 3766/3112/3053 2212/3488/3423\nf 2212/3488/3423 3949/3489/3424 1101/3113/3054\nf 1102/3111/3052 3951/3490/3425 2212/3488/3423\nf 2212/3488/3423 3766/3112/3053 1102/3111/3052\nf 1267/3491/3426 3950/3492/3427 2212/3488/3423\nf 2212/3488/3423 3951/3490/3425 1267/3491/3426\nf 1260/3478/3413 3949/3489/3424 2212/3488/3423\nf 2212/3488/3423 3950/3492/3427 1260/3478/3413\nf 1188/3300/3241 3955/3493/3428 2213/3494/3429\nf 2213/3494/3429 3952/3495/3430 1188/3300/3241\nf 1110/3129/3070 3954/3496/3431 2213/3494/3429\nf 2213/3494/3429 3955/3493/3428 1110/3129/3070\nf 1269/3497/3432 3953/3498/3433 2213/3494/3429\nf 2213/3494/3429 3954/3496/3431 1269/3497/3432\nf 1268/3499/3434 3952/3495/3430 2213/3494/3429\nf 2213/3494/3429 3953/3498/3433 1268/3499/3434\nf 1270/976/957 3958/3500/3435 2214/3501/3436\nf 2214/3501/3436 2783/977/958 1270/976/957\nf 1187/3302/3243 3957/3502/3437 2214/3501/3436\nf 2214/3501/3436 3958/3500/3435 1187/3302/3243\nf 1271/3503/3438 3956/3504/3439 2214/3501/3436\nf 2214/3501/3436 3957/3502/3437 1271/3503/3438\nf 557/980/961 2783/977/958 2214/3501/3436\nf 2214/3501/3436 3956/3504/3439 557/980/961\nf 1272/3505/3440 3961/3506/3441 2215/3507/3442\nf 2215/3507/3442 3959/3508/3443 1272/3505/3440\nf 1273/3509/3444 3960/3510/3445 2215/3507/3442\nf 2215/3507/3442 3961/3506/3441 1273/3509/3444\nf 1138/3184/3125 3804/3181/3122 2215/3507/3442\nf 2215/3507/3442 3960/3510/3445 1138/3184/3125\nf 1135/3180/3121 3959/3508/3443 2215/3507/3442\nf 2215/3507/3442 3804/3181/3122 1135/3180/3121\nf 1274/3511/3446 3964/3512/3447 2216/3513/3448\nf 2216/3513/3448 3962/3514/3449 1274/3511/3446\nf 1275/3515/3450 3963/3516/3451 2216/3513/3448\nf 2216/3513/3448 3964/3512/3447 1275/3515/3450\nf 1152/3217/3158 3819/3214/3155 2216/3513/3448\nf 2216/3513/3448 3963/3516/3451 1152/3217/3158\nf 1149/3213/3154 3962/3514/3449 2216/3513/3448\nf 2216/3513/3448 3819/3214/3155 1149/3213/3154\nf 1264/3487/3422 3946/3486/3421 2217/3517/3452\nf 2217/3517/3452 3965/3518/3453 1264/3487/3422\nf 1265/3485/3420 3966/3519/3454 2217/3517/3452\nf 2217/3517/3452 3946/3486/3421 1265/3485/3420\nf 1170/3258/3199 3838/3255/3196 2217/3517/3452\nf 2217/3517/3452 3966/3519/3454 1170/3258/3199\nf 1167/3254/3195 3965/3518/3453 2217/3517/3452\nf 2217/3517/3452 3838/3255/3196 1167/3254/3195\nf 1276/3520/3455 3969/3521/3456 2218/3522/3457\nf 2218/3522/3457 3967/3523/3458 1276/3520/3455\nf 1131/3171/3112 3797/3174/3115 2218/3522/3457\nf 2218/3522/3457 3969/3521/3456 1131/3171/3112\nf 1132/3179/3120 3968/3524/3459 2218/3522/3457\nf 2218/3522/3457 3797/3174/3115 1132/3179/3120\nf 1277/3525/3460 3967/3523/3458 2218/3522/3457\nf 2218/3522/3457 3968/3524/3459 1277/3525/3460\nf 1278/3526/3461 3972/3527/3462 2219/3528/3463\nf 2219/3528/3463 3970/3529/3464 1278/3526/3461\nf 1132/3179/3120 3798/3178/3119 2219/3528/3463\nf 2219/3528/3463 3972/3527/3462 1132/3179/3120\nf 1133/3177/3118 3971/3530/3465 2219/3528/3463\nf 2219/3528/3463 3798/3178/3119 1133/3177/3118\nf 1279/3531/3466 3970/3529/3464 2219/3528/3463\nf 2219/3528/3463 3971/3530/3465 1279/3531/3466\nf 7618/3532/3467 3975/3533/3468 2220/3534/3469\nf 2220/3534/3469 7619/3535/3470 7618/3532/3467\nf 1281/3536/3471 3974/3537/3472 2220/3534/3469\nf 2220/3534/3469 3975/3533/3468 1281/3536/3471\nf 1280/3538/3473 3973/3539/3474 2220/3534/3469\nf 2220/3534/3469 3974/3537/3472 1280/3538/3473\nf 7620/3540/3475 7619/3535/3470 2220/3534/3469\nf 2220/3534/3469 3973/3539/3474 7620/3540/3475\nf 7620/3540/3475 3973/3539/3474 2221/3541/3476\nf 2221/3541/3476 3976/3542/3477 7620/3540/3475\nf 1280/3538/3473 3978/3543/3478 2221/3541/3476\nf 2221/3541/3476 3973/3539/3474 1280/3538/3473\nf 1283/3544/3479 3977/3545/3480 2221/3541/3476\nf 2221/3541/3476 3978/3543/3478 1283/3544/3479\nf 1282/3546/3481 3976/3542/3477 2221/3541/3476\nf 2221/3541/3476 3977/3545/3480 1282/3546/3481\nf 1284/3547/3482 3982/3548/3483 2222/3549/3484\nf 2222/3549/3484 3979/3550/3485 1284/3547/3482\nf 1286/3551/3486 3981/3552/3487 2222/3549/3484\nf 2222/3549/3484 3982/3548/3483 1286/3551/3486\nf 1285/3553/3488 3980/3554/3489 2222/3549/3484\nf 2222/3549/3484 3981/3552/3487 1285/3553/3488\nf 1128/3170/3111 3979/3550/3485 2222/3549/3484\nf 2222/3549/3484 3980/3554/3489 1128/3170/3111\nf 1287/1034/1015 3986/1037/1018 2223/3555/3490\nf 2223/3555/3490 3983/3556/3491 1287/1034/1015\nf 1290/1042/1023 3985/3557/3492 2223/3555/3490\nf 2223/3555/3490 3986/1037/1018 1290/1042/1023\nf 1289/3558/3493 3984/3559/3494 2223/3555/3490\nf 2223/3555/3490 3985/3557/3492 1289/3558/3493\nf 1288/3560/3495 3983/3556/3491 2223/3555/3490\nf 2223/3555/3490 3984/3559/3494 1288/3560/3495\nf 1291/3561/3496 3990/3562/3497 2224/3563/3498\nf 2224/3563/3498 3987/3564/3499 1291/3561/3496\nf 1294/3565/3500 3989/3566/3501 2224/3563/3498\nf 2224/3563/3498 3990/3562/3497 1294/3565/3500\nf 1293/3567/3502 3988/3568/3503 2224/3563/3498\nf 2224/3563/3498 3989/3566/3501 1293/3567/3502\nf 1292/3569/3504 3987/3564/3499 2224/3563/3498\nf 2224/3563/3498 3988/3568/3503 1292/3569/3504\nf 1097/3104/3045 3762/3103/3044 2225/3570/3505\nf 2225/3570/3505 3991/3571/3506 1097/3104/3045\nf 1098/3102/3043 3992/3572/3507 2225/3570/3505\nf 2225/3570/3505 3762/3103/3044 1098/3102/3043\nf 1215/3367/3308 3889/3364/3305 2225/3570/3505\nf 2225/3570/3505 3992/3572/3507 1215/3367/3308\nf 1212/3363/3304 3991/3571/3506 2225/3570/3505\nf 2225/3570/3505 3889/3364/3305 1212/3363/3304\nf 1219/3387/3328 3895/3386/3327 2226/3573/3508\nf 2226/3573/3508 3993/3574/3509 1219/3387/3328\nf 1220/3385/3326 3994/3575/3510 2226/3573/3508\nf 2226/3573/3508 3895/3386/3327 1220/3385/3326\nf 1142/3193/3134 3808/3190/3131 2226/3573/3508\nf 2226/3573/3508 3994/3575/3510 1142/3193/3134\nf 1139/3189/3130 3993/3574/3509 2226/3573/3508\nf 2226/3573/3508 3808/3190/3131 1139/3189/3130\nf 1223/3396/3337 3899/3395/3336 2227/3576/3511\nf 2227/3576/3511 3995/3577/3512 1223/3396/3337\nf 1224/3394/3335 3996/3578/3513 2227/3576/3511\nf 2227/3576/3511 3899/3395/3336 1224/3394/3335\nf 1156/3226/3167 3823/3223/3164 2227/3576/3511\nf 2227/3576/3511 3996/3578/3513 1156/3226/3167\nf 1153/3222/3163 3995/3577/3512 2227/3576/3511\nf 2227/3576/3511 3823/3223/3164 1153/3222/3163\nf 1227/3405/3346 3903/3404/3345 2228/3579/3514\nf 2228/3579/3514 3997/3580/3515 1227/3405/3346\nf 1228/3403/3344 3998/3581/3516 2228/3579/3514\nf 2228/3579/3514 3903/3404/3345 1228/3403/3344\nf 1160/3235/3176 3827/3232/3173 2228/3579/3514\nf 2228/3579/3514 3998/3581/3516 1160/3235/3176\nf 1157/3231/3172 3997/3580/3515 2228/3579/3514\nf 2228/3579/3514 3827/3232/3173 1157/3231/3172\nf 1295/3582/3517 4002/3583/3518 2229/3584/3519\nf 2229/3584/3519 3999/3585/3520 1295/3582/3517\nf 1298/3586/3521 4001/3587/3522 2229/3584/3519\nf 2229/3584/3519 4002/3583/3518 1298/3586/3521\nf 1297/3588/3523 4000/3589/3524 2229/3584/3519\nf 2229/3584/3519 4001/3587/3522 1297/3588/3523\nf 1296/3590/3525 3999/3585/3520 2229/3584/3519\nf 2229/3584/3519 4000/3589/3524 1296/3590/3525\nf 1299/3591/3526 4006/3592/3527 2230/3593/3528\nf 2230/3593/3528 4003/3594/3529 1299/3591/3526\nf 1302/3595/3530 4005/3596/3531 2230/3593/3528\nf 2230/3593/3528 4006/3592/3527 1302/3595/3530\nf 1301/3597/3532 4004/3598/3533 2230/3593/3528\nf 2230/3593/3528 4005/3596/3531 1301/3597/3532\nf 1300/3599/3534 4003/3594/3529 2230/3593/3528\nf 2230/3593/3528 4004/3598/3533 1300/3599/3534\nf 1303/3600/3535 4010/3601/3536 2231/3602/3537\nf 2231/3602/3537 4007/3603/3538 1303/3600/3535\nf 1125/3162/3103 4009/3604/3539 2231/3602/3537\nf 2231/3602/3537 4010/3601/3536 1125/3162/3103\nf 1305/3605/3540 4008/3606/3541 2231/3602/3537\nf 2231/3602/3537 4009/3604/3539 1305/3605/3540\nf 1304/3607/3542 4007/3603/3538 2231/3602/3537\nf 2231/3602/3537 4008/3606/3541 1304/3607/3542\nf 1133/3177/3118 3799/3176/3117 2232/3608/3543\nf 2232/3608/3543 4011/3609/3544 1133/3177/3118\nf 1134/3175/3116 4013/3610/3545 2232/3608/3543\nf 2232/3608/3543 3799/3176/3117 1134/3175/3116\nf 1307/3611/3546 4012/3612/3547 2232/3608/3543\nf 2232/3608/3543 4013/3610/3545 1307/3611/3546\nf 1306/3613/3548 4011/3609/3544 2232/3608/3543\nf 2232/3608/3543 4012/3612/3547 1306/3613/3548\nf 1134/3175/3116 4016/3614/3549 2233/3615/3550\nf 2233/3615/3550 4013/3610/3545 1134/3175/3116\nf 1309/3616/3551 4015/3617/3552 2233/3615/3550\nf 2233/3615/3550 4016/3614/3549 1309/3616/3551\nf 1308/3618/3553 4014/3619/3554 2233/3615/3550\nf 2233/3615/3550 4015/3617/3552 1308/3618/3553\nf 1307/3611/3546 4013/3610/3545 2233/3615/3550\nf 2233/3615/3550 4014/3619/3554 1307/3611/3546\nf 1279/3531/3466 3971/3530/3465 2234/3620/3555\nf 2234/3620/3555 4017/3621/3556 1279/3531/3466\nf 1133/3177/3118 4011/3609/3544 2234/3620/3555\nf 2234/3620/3555 3971/3530/3465 1133/3177/3118\nf 1306/3613/3548 4018/3622/3557 2234/3620/3555\nf 2234/3620/3555 4011/3609/3544 1306/3613/3548\nf 1310/3623/3558 4017/3621/3556 2234/3620/3555\nf 2234/3620/3555 4018/3622/3557 1310/3623/3558\nf 1311/3624/3559 4022/3625/3560 2235/3626/3561\nf 2235/3626/3561 4019/3627/3562 1311/3624/3559\nf 1312/3628/3563 4021/3629/3564 2235/3626/3561\nf 2235/3626/3561 4022/3625/3560 1312/3628/3563\nf 1150/3221/3162 4020/3630/3565 2235/3626/3561\nf 2235/3626/3561 4021/3629/3564 1150/3221/3162\nf 1222/3388/3329 4019/3627/3562 2235/3626/3561\nf 2235/3626/3561 4020/3630/3565 1222/3388/3329\nf 1313/3631/3566 4025/3632/3567 2236/3633/3568\nf 2236/3633/3568 4023/3634/3569 1313/3631/3566\nf 1314/3635/3570 4024/3636/3571 2236/3633/3568\nf 2236/3633/3568 4025/3632/3567 1314/3635/3570\nf 1154/3230/3171 3929/3442/3377 2236/3633/3568\nf 2236/3633/3568 4024/3636/3571 1154/3230/3171\nf 1248/3441/3376 4023/3634/3569 2236/3633/3568\nf 2236/3633/3568 3929/3442/3377 1248/3441/3376\nf 1315/3637/3572 4027/3638/3573 2237/3639/3574\nf 2237/3639/3574 4026/3640/3575 1315/3637/3572\nf 1311/3624/3559 4019/3627/3562 2237/3639/3574\nf 2237/3639/3574 4027/3638/3573 1311/3624/3559\nf 1222/3388/3329 3898/3391/3332 2237/3639/3574\nf 2237/3639/3574 4019/3627/3562 1222/3388/3329\nf 1223/3396/3337 4026/3640/3575 2237/3639/3574\nf 2237/3639/3574 3898/3391/3332 1223/3396/3337\nf 1316/3641/3576 4031/3642/3577 2238/3643/3578\nf 2238/3643/3578 4028/3644/3579 1316/3641/3576\nf 1318/3645/3580 4030/3646/3581 2238/3643/3578\nf 2238/3643/3578 4031/3642/3577 1318/3645/3580\nf 1317/3647/3582 4029/3648/3583 2238/3643/3578\nf 2238/3643/3578 4030/3646/3581 1317/3647/3582\nf 1274/3511/3446 4028/3644/3579 2238/3643/3578\nf 2238/3643/3578 4029/3648/3583 1274/3511/3446\nf 1319/3649/3584 4033/3650/3585 2239/3651/3586\nf 2239/3651/3586 4032/3652/3587 1319/3649/3584\nf 1316/3641/3576 4028/3644/3579 2239/3651/3586\nf 2239/3651/3586 4033/3650/3585 1316/3641/3576\nf 1274/3511/3446 3962/3514/3449 2239/3651/3586\nf 2239/3651/3586 4028/3644/3579 1274/3511/3446\nf 1149/3213/3154 4032/3652/3587 2239/3651/3586\nf 2239/3651/3586 3962/3514/3449 1149/3213/3154\nf 1320/3653/3588 4035/3654/3589 2240/3655/3590\nf 2240/3655/3590 4034/3656/3591 1320/3653/3588\nf 1315/3637/3572 4026/3640/3575 2240/3655/3590\nf 2240/3655/3590 4035/3654/3589 1315/3637/3572\nf 1223/3396/3337 3995/3577/3512 2240/3655/3590\nf 2240/3655/3590 4026/3640/3575 1223/3396/3337\nf 1153/3222/3163 4034/3656/3591 2240/3655/3590\nf 2240/3655/3590 3995/3577/3512 1153/3222/3163\nf 1094/3093/539 3759/3092/539 2241/3657/539\nf 2241/3657/539 4036/3658/539 1094/3093/539\nf 1095/3091/539 4038/3659/539 2241/3657/539\nf 2241/3657/539 3759/3092/539 1095/3091/539\nf 1322/3660/539 4037/3661/539 2241/3657/539\nf 2241/3657/539 4038/3659/539 1322/3660/539\nf 1321/3662/539 4036/3658/539 2241/3657/539\nf 2241/3657/539 4037/3661/539 1321/3662/539\nf 1105/3122/3063 3770/3121/3062 2242/3663/3592\nf 2242/3663/3592 4039/3664/3593 1105/3122/3063\nf 1106/3120/3061 3893/3372/3313 2242/3663/3592\nf 2242/3663/3592 3770/3121/3062 1106/3120/3061\nf 1184/3291/3232 3853/3288/3229 2242/3663/3592\nf 2242/3663/3592 3893/3372/3313 1184/3291/3232\nf 1181/3287/3228 4039/3664/3593 2242/3663/3592\nf 2242/3663/3592 3853/3288/3229 1181/3287/3228\nf 1109/3131/3072 3774/3130/3071 2243/3665/3594\nf 2243/3665/3594 4040/3666/3595 1109/3131/3072\nf 1110/3129/3070 3955/3493/3428 2243/3665/3594\nf 2243/3665/3594 3774/3130/3071 1110/3129/3070\nf 1188/3300/3241 3857/3297/3238 2243/3665/3594\nf 2243/3665/3594 3955/3493/3428 1188/3300/3241\nf 1185/3296/3237 4040/3666/3595 2243/3665/3594\nf 2243/3665/3594 3857/3297/3238 1185/3296/3237\nf 1113/3140/3081 3778/3139/3080 2244/3667/3596\nf 2244/3667/3596 3878/3351/3292 1113/3140/3081\nf 1114/3138/3079 4041/3668/3597 2244/3667/3596\nf 2244/3667/3596 3778/3139/3080 1114/3138/3079\nf 1191/3309/3250 3861/3306/3247 2244/3667/3596\nf 2244/3667/3596 4041/3668/3597 1191/3309/3250\nf 1189/3305/3246 3878/3351/3292 2244/3667/3596\nf 2244/3667/3596 3861/3306/3247 1189/3305/3246\nf 1117/3149/3090 3782/3148/3089 2245/3669/3598\nf 2245/3669/3598 4042/3670/3599 1117/3149/3090\nf 1118/3147/3088 4043/3671/3600 2245/3669/3598\nf 2245/3669/3598 3782/3148/3089 1118/3147/3088\nf 1195/3317/3258 3865/3314/3255 2245/3669/3598\nf 2245/3669/3598 4043/3671/3600 1195/3317/3258\nf 1192/3313/3254 4042/3670/3599 2245/3669/3598\nf 2245/3669/3598 3865/3314/3255 1192/3313/3254\nf 1121/3158/3099 3786/3157/3098 2246/3672/3601\nf 2246/3672/3601 4044/3673/3602 1121/3158/3099\nf 1122/3156/3097 4046/3674/3603 2246/3672/3601\nf 2246/3672/3601 3786/3157/3098 1122/3156/3097\nf 1324/3675/3604 4045/3676/3605 2246/3672/3601\nf 2246/3672/3601 4046/3674/3603 1324/3675/3604\nf 1323/3677/3606 4044/3673/3602 2246/3672/3601\nf 2246/3672/3601 4045/3676/3605 1323/3677/3606\nf 1158/3239/3180 3825/3238/3179 2247/3678/3607\nf 2247/3678/3607 3882/3358/3299 1158/3239/3180\nf 1159/3237/3178 4047/3679/3608 2247/3678/3607\nf 2247/3678/3607 3825/3238/3179 1159/3237/3178\nf 1207/3344/3285 3877/3341/3282 2247/3678/3607\nf 2247/3678/3607 4047/3679/3608 1207/3344/3285\nf 1204/3340/3281 3882/3358/3299 2247/3678/3607\nf 2247/3678/3607 3877/3341/3282 1204/3340/3281\nf 1293/3567/3502 4049/3680/3609 2248/3681/3610\nf 2248/3681/3610 4048/3682/3611 1293/3567/3502\nf 1309/3616/3551 4016/3614/3549 2248/3681/3610\nf 2248/3681/3610 4049/3680/3609 1309/3616/3551\nf 1134/3175/3116 3800/3172/3113 2248/3681/3610\nf 2248/3681/3610 4016/3614/3549 1134/3175/3116\nf 1131/3171/3112 4048/3682/3611 2248/3681/3610\nf 2248/3681/3610 3800/3172/3113 1131/3171/3112\nf 1113/3140/3081 3879/3355/3296 2249/3683/3612\nf 2249/3683/3612 3777/3135/3076 1113/3140/3081\nf 1208/3354/3295 4050/3684/3613 2249/3683/3612\nf 2249/3683/3612 3879/3355/3296 1208/3354/3295\nf 1166/3249/3190 3834/3246/3187 2249/3683/3612\nf 2249/3683/3612 4050/3684/3613 1166/3249/3190\nf 1112/3132/3073 3777/3135/3076 2249/3683/3612\nf 2249/3683/3612 3834/3246/3187 1112/3132/3073\nf 1158/3239/3180 3883/3362/3303 2250/3685/3614\nf 2250/3685/3614 3824/3234/3175 1158/3239/3180\nf 1210/3361/3302 3940/3463/3398 2250/3685/3614\nf 2250/3685/3614 3883/3362/3303 1210/3361/3302\nf 1256/3462/3397 4051/3686/3615 2250/3685/3614\nf 2250/3685/3614 3940/3463/3398 1256/3462/3397\nf 1157/3231/3172 3824/3234/3175 2250/3685/3614\nf 2250/3685/3614 4051/3686/3615 1157/3231/3172\nf 1109/3131/3072 4054/3687/3616 2251/3688/3617\nf 2251/3688/3617 3773/3126/3067 1109/3131/3072\nf 1217/3376/3317 4053/3689/3618 2251/3688/3617\nf 2251/3688/3617 4054/3687/3616 1217/3376/3317\nf 1325/3690/3619 4052/3691/3620 2251/3688/3617\nf 2251/3688/3617 4053/3689/3618 1325/3690/3619\nf 1108/3123/3064 3773/3126/3067 2251/3688/3617\nf 2251/3688/3617 4052/3691/3620 1108/3123/3064\nf 1326/3692/3621 4058/3693/3622 2252/3694/3623\nf 2252/3694/3623 4055/3695/3624 1326/3692/3621\nf 1235/3417/3358 4057/3696/3625 2252/3694/3623\nf 2252/3694/3623 4058/3693/3622 1235/3417/3358\nf 1328/3697/3626 4056/3698/3627 2252/3694/3623\nf 2252/3694/3623 4057/3696/3625 1328/3697/3626\nf 1327/3699/3628 4055/3695/3624 2252/3694/3623\nf 2252/3694/3623 4056/3698/3627 1327/3699/3628\nf 1326/3692/3621 4062/3700/3629 2253/3701/3630\nf 2253/3701/3630 4059/3702/3631 1326/3692/3621\nf 1258/3467/3402 4061/3703/3632 2253/3701/3630\nf 2253/3701/3630 4062/3700/3629 1258/3467/3402\nf 1330/3704/3633 4060/3705/3634 2253/3701/3630\nf 2253/3701/3630 4061/3703/3632 1330/3704/3633\nf 1329/3706/3635 4059/3702/3631 2253/3701/3630\nf 2253/3701/3630 4060/3705/3634 1329/3706/3635\nf 1269/3497/3432 3954/3496/3431 2254/3707/3636\nf 2254/3707/3636 4063/3708/3637 1269/3497/3432\nf 1110/3129/3070 3775/3128/3069 2254/3707/3636\nf 2254/3707/3636 3954/3496/3431 1110/3129/3070\nf 1111/3127/3068 4064/3709/3638 2254/3707/3636\nf 2254/3707/3636 3775/3128/3069 1111/3127/3068\nf 1331/3710/3639 4063/3708/3637 2254/3707/3636\nf 2254/3707/3636 4064/3709/3638 1331/3710/3639\nf 1282/3546/3481 3977/3545/3480 2255/3711/3640\nf 2255/3711/3640 4065/3712/3641 1282/3546/3481\nf 1283/3544/3479 4066/3713/3642 2255/3711/3640\nf 2255/3711/3640 3977/3545/3480 1283/3544/3479\nf 1286/3551/3486 3982/3548/3483 2255/3711/3640\nf 2255/3711/3640 4066/3713/3642 1286/3551/3486\nf 1284/3547/3482 4065/3712/3641 2255/3711/3640\nf 2255/3711/3640 3982/3548/3483 1284/3547/3482\nf 1292/3569/3504 3988/3568/3503 2256/3714/3643\nf 2256/3714/3643 4067/3715/3644 1292/3569/3504\nf 1293/3567/3502 4048/3682/3611 2256/3714/3643\nf 2256/3714/3643 3988/3568/3503 1293/3567/3502\nf 1131/3171/3112 3969/3521/3456 2256/3714/3643\nf 2256/3714/3643 4048/3682/3611 1131/3171/3112\nf 1276/3520/3455 4067/3715/3644 2256/3714/3643\nf 2256/3714/3643 3969/3521/3456 1276/3520/3455\nf 1283/3544/3479 4070/3716/3645 2257/3717/3646\nf 2257/3717/3646 4066/3713/3642 1283/3544/3479\nf 1308/3618/3553 4069/3718/3647 2257/3717/3646\nf 2257/3717/3646 4070/3716/3645 1308/3618/3553\nf 1332/3719/3648 4068/3720/3649 2257/3717/3646\nf 2257/3717/3646 4069/3718/3647 1332/3719/3648\nf 1286/3551/3486 4066/3713/3642 2257/3717/3646\nf 2257/3717/3646 4068/3720/3649 1286/3551/3486\nf 1269/3497/3432 4073/3721/3650 2258/3722/3651\nf 2258/3722/3651 3953/3498/3433 1269/3497/3432\nf 1334/3723/3652 4072/3724/3653 2258/3722/3651\nf 2258/3722/3651 4073/3721/3650 1334/3723/3652\nf 1333/3725/3654 4071/3726/3655 2258/3722/3651\nf 2258/3722/3651 4072/3724/3653 1333/3725/3654\nf 1268/3499/3434 3953/3498/3433 2258/3722/3651\nf 2258/3722/3651 4071/3726/3655 1268/3499/3434\nf 1335/3727/3656 4077/3728/1186 2259/3729/1186\nf 2259/3729/1186 4074/3730/3657 1335/3727/3656\nf 1338/3731/1186 4076/3732/1186 2259/3729/1186\nf 2259/3729/1186 4077/3728/1186 1338/3731/1186\nf 1337/3733/1186 4075/3734/1186 2259/3729/1186\nf 2259/3729/1186 4076/3732/1186 1337/3733/1186\nf 1336/3735/3658 4074/3730/3657 2259/3729/1186\nf 2259/3729/1186 4075/3734/1186 1336/3735/3658\nf 921/1218/1188 4080/3736/3659 2260/3737/3660\nf 2260/3737/3660 3396/1219/1189 921/1218/1188\nf 1339/3738/3661 4079/3739/3662 2260/3737/3660\nf 2260/3737/3660 4080/3736/3659 1339/3738/3661\nf 1197/3330/3271 4078/3740/3663 2260/3737/3660\nf 2260/3737/3660 4079/3739/3662 1197/3330/3271\nf 912/1222/1192 3396/1219/1189 2260/3737/3660\nf 2260/3737/3660 4078/3740/3663 912/1222/1192\nf 1338/3731/1186 4083/3741/1186 2261/3742/1186\nf 2261/3742/1186 4076/3732/1186 1338/3731/1186\nf 1341/3743/1186 4082/3744/1186 2261/3742/1186\nf 2261/3742/1186 4083/3741/1186 1341/3743/1186\nf 1340/3745/1186 4081/3746/1186 2261/3742/1186\nf 2261/3742/1186 4082/3744/1186 1340/3745/1186\nf 1337/3733/1186 4076/3732/1186 2261/3742/1186\nf 2261/3742/1186 4081/3746/1186 1337/3733/1186\nf 1342/3747/3664 4086/3748/3665 2262/3749/3666\nf 2262/3749/3666 4084/3750/3667 1342/3747/3664\nf 1343/3751/3668 4085/3752/3669 2262/3749/3666\nf 2262/3749/3666 4086/3748/3665 1343/3751/3668\nf 1121/3158/3099 4044/3673/3602 2262/3749/3666\nf 2262/3749/3666 4085/3752/3669 1121/3158/3099\nf 1323/3677/3606 4084/3750/3667 2262/3749/3666\nf 2262/3749/3666 4044/3673/3602 1323/3677/3606\nf 982/728/718 3839/3268/3209 2263/3753/3670\nf 2263/3753/3670 4087/1238/1202 982/728/718\nf 1171/3267/3208 4088/3754/3671 2263/3753/3670\nf 2263/3753/3670 3839/3268/3209 1171/3267/3208\nf 1255/3459/3394 3936/3457/3392 2263/3753/3670\nf 2263/3753/3670 4088/3754/3671 1255/3459/3394\nf 1254/930/911 4087/1238/1202 2263/3753/3670\nf 2263/3753/3670 3936/3457/3392 1254/930/911\nf 1249/3448/3383 3927/3447/3382 2264/3755/3672\nf 2264/3755/3672 4089/3756/3673 1249/3448/3383\nf 1250/3446/3381 4090/3757/3674 2264/3755/3672\nf 2264/3755/3672 3927/3447/3382 1250/3446/3381\nf 1176/3273/3214 3845/3270/3211 2264/3755/3672\nf 2264/3755/3672 4090/3757/3674 1176/3273/3214\nf 1173/3269/3210 4089/3756/3673 2264/3755/3672\nf 2264/3755/3672 3845/3270/3211 1173/3269/3210\nf 1257/3469/3404 3938/3468/3403 2265/3758/3675\nf 2265/3758/3675 4091/3759/3676 1257/3469/3404\nf 1258/3467/3402 4062/3700/3629 2265/3758/3675\nf 2265/3758/3675 3938/3468/3403 1258/3467/3402\nf 1326/3692/3621 4055/3695/3624 2265/3758/3675\nf 2265/3758/3675 4062/3700/3629 1326/3692/3621\nf 1327/3699/3628 4091/3759/3676 2265/3758/3675\nf 2265/3758/3675 4055/3695/3624 1327/3699/3628\nf 1330/3704/3633 4061/3703/3632 2266/3760/3677\nf 2266/3760/3677 4092/3761/3678 1330/3704/3633\nf 1258/3467/3402 3939/3466/3401 2266/3760/3677\nf 2266/3760/3677 4061/3703/3632 1258/3467/3402\nf 1210/3361/3302 3884/3360/3301 2266/3760/3677\nf 2266/3760/3677 3939/3466/3401 1210/3361/3302\nf 1211/3359/3300 4092/3761/3678 2266/3760/3677\nf 2266/3760/3677 3884/3360/3301 1211/3359/3300\nf 1174/3277/3218 3843/3276/3217 2267/3762/3679\nf 2267/3762/3679 4093/3763/3680 1174/3277/3218\nf 1175/3275/3216 4095/3764/3681 2267/3762/3679\nf 2267/3762/3679 3843/3276/3217 1175/3275/3216\nf 1345/3765/3682 4094/3766/3683 2267/3762/3679\nf 2267/3762/3679 4095/3764/3681 1345/3765/3682\nf 1344/3767/3684 4093/3763/3680 2267/3762/3679\nf 2267/3762/3679 4094/3766/3683 1344/3767/3684\nf 1234/3419/3360 3911/3418/3359 2268/3768/3685\nf 2268/3768/3685 4096/3769/3686 1234/3419/3360\nf 1235/3417/3358 4058/3693/3622 2268/3768/3685\nf 2268/3768/3685 3911/3418/3359 1235/3417/3358\nf 1326/3692/3621 4059/3702/3631 2268/3768/3685\nf 2268/3768/3685 4058/3693/3622 1326/3692/3621\nf 1329/3706/3635 4096/3769/3686 2268/3768/3685\nf 2268/3768/3685 4059/3702/3631 1329/3706/3635\nf 1245/909/890 3923/3440/3375 2269/3770/3687\nf 2269/3770/3687 3537/1256/1220 1245/909/890\nf 1246/3439/3374 4097/3771/3688 2269/3770/3687\nf 2269/3770/3687 3923/3440/3375 1246/3439/3374\nf 1172/3265/3206 3841/3263/3204 2269/3770/3687\nf 2269/3770/3687 4097/3771/3688 1172/3265/3206\nf 981/724/714 3537/1256/1220 2269/3770/3687\nf 2269/3770/3687 3841/3263/3204 981/724/714\nf 1328/3697/3626 4057/3696/3625 2270/3772/3689\nf 2270/3772/3689 4098/3773/3690 1328/3697/3626\nf 1235/3417/3358 3912/3416/3357 2270/3772/3689\nf 2270/3772/3689 4057/3696/3625 1235/3417/3358\nf 1236/3415/3356 4099/3774/3691 2270/3772/3689\nf 2270/3772/3689 3912/3416/3357 1236/3415/3356\nf 1346/3775/3692 4098/3773/3690 2270/3772/3689\nf 2270/3772/3689 4099/3774/3691 1346/3775/3692\nf 1296/3590/3525 4000/3589/3524 2271/3776/3693\nf 2271/3776/3693 4100/3777/3694 1296/3590/3525\nf 1297/3588/3523 4102/3778/3695 2271/3776/3693\nf 2271/3776/3693 4000/3589/3524 1297/3588/3523\nf 1317/3647/3582 4101/3779/3696 2271/3776/3693\nf 2271/3776/3693 4102/3778/3695 1317/3647/3582\nf 1347/3780/3697 4100/3777/3694 2271/3776/3693\nf 2271/3776/3693 4101/3779/3696 1347/3780/3697\nf 1300/3599/3534 4004/3598/3533 2272/3781/3698\nf 2272/3781/3698 4103/3782/3699 1300/3599/3534\nf 1301/3597/3532 4104/3783/3700 2272/3781/3698\nf 2272/3781/3698 4004/3598/3533 1301/3597/3532\nf 1266/3483/3418 3948/3480/3415 2272/3781/3698\nf 2272/3781/3698 4104/3783/3700 1266/3483/3418\nf 1263/3479/3414 4103/3782/3699 2272/3781/3698\nf 2272/3781/3698 3948/3480/3415 1263/3479/3414\nf 1333/3725/3654 4107/3784/3701 2273/3785/3702\nf 2273/3785/3702 4071/3726/3655 1333/3725/3654\nf 1348/3786/3703 4106/3787/3704 2273/3785/3702\nf 2273/3785/3702 4107/3784/3701 1348/3786/3703\nf 1271/3503/3438 4105/3788/3705 2273/3785/3702\nf 2273/3785/3702 4106/3787/3704 1271/3503/3438\nf 1268/3499/3434 4071/3726/3655 2273/3785/3702\nf 2273/3785/3702 4105/3788/3705 1268/3499/3434\nf 1349/3789/3706 4109/3790/3707 2274/3791/3708\nf 2274/3791/3708 4108/3792/3709 1349/3789/3706\nf 1334/3723/3652 4073/3721/3650 2274/3791/3708\nf 2274/3791/3708 4109/3790/3707 1334/3723/3652\nf 1269/3497/3432 4063/3708/3637 2274/3791/3708\nf 2274/3791/3708 4073/3721/3650 1269/3497/3432\nf 1331/3710/3639 4108/3792/3709 2274/3791/3708\nf 2274/3791/3708 4063/3708/3637 1331/3710/3639\nf 1350/3793/3710 4112/3794/3711 2275/3795/3712\nf 2275/3795/3712 4110/3796/3713 1350/3793/3710\nf 1147/3212/3153 4111/3797/3714 2275/3795/3712\nf 2275/3795/3712 4112/3794/3711 1147/3212/3153\nf 1298/3586/3521 4002/3583/3518 2275/3795/3712\nf 2275/3795/3712 4111/3797/3714 1298/3586/3521\nf 1295/3582/3517 4110/3796/3713 2275/3795/3712\nf 2275/3795/3712 4002/3583/3518 1295/3582/3517\nf 1164/3253/3194 3832/3252/3193 2276/3798/3715\nf 2276/3798/3715 4113/3799/3716 1164/3253/3194\nf 1165/3251/3192 4114/3800/3717 2276/3798/3715\nf 2276/3798/3715 3832/3252/3193 1165/3251/3192\nf 1302/3595/3530 4006/3592/3527 2276/3798/3715\nf 2276/3798/3715 4114/3800/3717 1302/3595/3530\nf 1299/3591/3526 4113/3799/3716 2276/3798/3715\nf 2276/3798/3715 4006/3592/3527 1299/3591/3526\nf 1350/3793/3710 4117/3801/3718 2277/3802/3719\nf 2277/3802/3719 4112/3794/3711 1350/3793/3710\nf 1352/3803/3720 4116/3804/3721 2277/3802/3719\nf 2277/3802/3719 4117/3801/3718 1352/3803/3720\nf 1351/3805/3722 4115/3806/3723 2277/3802/3719\nf 2277/3802/3719 4116/3804/3721 1351/3805/3722\nf 1147/3212/3153 4112/3794/3711 2277/3802/3719\nf 2277/3802/3719 4115/3806/3723 1147/3212/3153\nf 7621/3807/3724 4120/3808/3725 2278/3809/3726\nf 2278/3809/3726 7622/3810/3727 7621/3807/3724\nf 1354/3811/3728 4119/3812/3729 2278/3809/3726\nf 2278/3809/3726 4120/3808/3725 1354/3811/3728\nf 1353/3813/3730 4118/3814/3731 2278/3809/3726\nf 2278/3809/3726 4119/3812/3729 1353/3813/3730\nf 7623/3815/3732 7622/3810/3727 2278/3809/3726\nf 2278/3809/3726 4118/3814/3731 7623/3815/3732\nf 1355/3816/3733 4124/3817/3734 2279/3818/3735\nf 2279/3818/3735 4121/3819/3736 1355/3816/3733\nf 1353/3813/3730 4123/3820/3737 2279/3818/3735\nf 2279/3818/3735 4124/3817/3734 1353/3813/3730\nf 1357/3821/3738 4122/3822/3739 2279/3818/3735\nf 2279/3818/3735 4123/3820/3737 1357/3821/3738\nf 1356/3823/3740 4121/3819/3736 2279/3818/3735\nf 2279/3818/3735 4122/3822/3739 1356/3823/3740\nf 1145/3204/3145 3811/3203/3144 2280/3824/3741\nf 2280/3824/3741 4125/3825/3742 1145/3204/3145\nf 1146/3202/3143 4126/3826/3743 2280/3824/3741\nf 2280/3824/3741 3811/3203/3144 1146/3202/3143\nf 7624/3827/3744 7625/3828/3745 2280/3824/3741\nf 2280/3824/3741 4126/3826/3743 7624/3827/3744\nf 7626/3829/3746 4125/3825/3742 2280/3824/3741\nf 2280/3824/3741 7625/3828/3745 7626/3829/3746\nf 1148/3210/3151 3815/3209/3150 2281/3830/3747\nf 2281/3830/3747 4127/3831/3748 1148/3210/3151\nf 1145/3204/3145 4125/3825/3742 2281/3830/3747\nf 2281/3830/3747 3815/3209/3150 1145/3204/3145\nf 7626/3829/3746 7627/3832/3749 2281/3830/3747\nf 2281/3830/3747 4125/3825/3742 7626/3829/3746\nf 7628/3833/3750 4127/3831/3748 2281/3830/3747\nf 2281/3830/3747 7627/3832/3749 7628/3833/3750\nf 1225/3392/3333 4131/3834/3751 2282/3835/3752\nf 2282/3835/3752 4128/3836/3753 1225/3392/3333\nf 1151/3219/3160 4130/3837/3754 2282/3835/3752\nf 2282/3835/3752 4131/3834/3751 1151/3219/3160\nf 7629/3838/3755 4129/3839/3756 2282/3835/3752\nf 2282/3835/3752 4130/3837/3754 7629/3838/3755\nf 7630/3840/3757 4128/3836/3753 2282/3835/3752\nf 2282/3835/3752 4129/3839/3756 7630/3840/3757\nf 1155/3228/3169 3822/3227/3168 2283/3841/3758\nf 2283/3841/3758 4132/3842/3759 1155/3228/3169\nf 1156/3226/3167 4133/3843/3760 2283/3841/3758\nf 2283/3841/3758 3822/3227/3168 1156/3226/3167\nf 7631/3844/3761 7632/3845/3762 2283/3841/3758\nf 2283/3841/3758 4133/3843/3760 7631/3844/3761\nf 7633/3846/3763 4132/3842/3759 2283/3841/3758\nf 2283/3841/3758 7632/3845/3762 7633/3846/3763\nf 1358/3847/3764 4136/3848/3765 2284/3849/3766\nf 2284/3849/3766 4134/3850/3767 1358/3847/3764\nf 1359/3851/3768 4135/3852/3769 2284/3849/3766\nf 2284/3849/3766 4136/3848/3765 1359/3851/3768\nf 7634/3853/3770 7635/3854/3771 2284/3849/3766\nf 2284/3849/3766 4135/3852/3769 7634/3853/3770\nf 7636/3855/3772 4134/3850/3767 2284/3849/3766\nf 2284/3849/3766 7635/3854/3771 7636/3855/3772\nf 682/1343/1307 4140/3856/3773 2285/3857/3774\nf 2285/3857/3774 4137/1344/1308 682/1343/1307\nf 1361/3858/3775 4139/3859/3776 2285/3857/3774\nf 2285/3857/3774 4140/3856/3773 1361/3858/3775\nf 1178/3286/3227 4138/3860/3777 2285/3857/3774\nf 2285/3857/3774 4139/3859/3776 1178/3286/3227\nf 1360/1347/1311 4137/1344/1308 2285/3857/3774\nf 2285/3857/3774 4138/3860/3777 1360/1347/1311\nf 1224/3394/3335 3900/3393/3334 2286/3861/3778\nf 2286/3861/3778 4141/3862/3779 1224/3394/3335\nf 1225/3392/3333 4128/3836/3753 2286/3861/3778\nf 2286/3861/3778 3900/3393/3334 1225/3392/3333\nf 7630/3840/3757 7637/3863/3780 2286/3861/3778\nf 2286/3861/3778 4128/3836/3753 7630/3840/3757\nf 7638/3864/3781 4141/3862/3779 2286/3861/3778\nf 2286/3861/3778 7637/3863/3780 7638/3864/3781\nf 1362/3865/3782 4143/3866/3783 2287/3867/3784\nf 2287/3867/3784 4142/3868/3785 1362/3865/3782\nf 1155/3228/3169 4132/3842/3759 2287/3867/3784\nf 2287/3867/3784 4143/3866/3783 1155/3228/3169\nf 7633/3846/3763 7639/3869/3786 2287/3867/3784\nf 2287/3867/3784 4132/3842/3759 7633/3846/3763\nf 7640/3870/3787 4142/3868/3785 2287/3867/3784\nf 2287/3867/3784 7639/3869/3786 7640/3870/3787\nf 1275/3515/3450 4146/3871/3788 2288/3872/3789\nf 2288/3872/3789 4144/3873/3790 1275/3515/3450\nf 1363/3874/3791 4145/3875/3792 2288/3872/3789\nf 2288/3872/3789 4146/3871/3788 1363/3874/3791\nf 7641/3876/3793 7642/3877/3794 2288/3872/3789\nf 2288/3872/3789 4145/3875/3792 7641/3876/3793\nf 7643/3878/3795 4144/3873/3790 2288/3872/3789\nf 2288/3872/3789 7642/3877/3794 7643/3878/3795\nf 1152/3217/3158 3963/3516/3451 2289/3879/3796\nf 2289/3879/3796 4147/3880/3797 1152/3217/3158\nf 1275/3515/3450 4144/3873/3790 2289/3879/3796\nf 2289/3879/3796 3963/3516/3451 1275/3515/3450\nf 7643/3878/3795 7644/3881/3798 2289/3879/3796\nf 2289/3879/3796 4144/3873/3790 7643/3878/3795\nf 7645/3882/3799 4147/3880/3797 2289/3879/3796\nf 2289/3879/3796 7644/3881/3798 7645/3882/3799\nf 1156/3226/3167 3996/3578/3513 2290/3883/3800\nf 2290/3883/3800 4133/3843/3760 1156/3226/3167\nf 1224/3394/3335 4141/3862/3779 2290/3883/3800\nf 2290/3883/3800 3996/3578/3513 1224/3394/3335\nf 7638/3864/3781 7646/3884/3801 2290/3883/3800\nf 2290/3883/3800 4141/3862/3779 7638/3864/3781\nf 7631/3844/3761 4133/3843/3760 2290/3883/3800\nf 2290/3883/3800 7646/3884/3801 7631/3844/3761\nf 1364/3885/3802 4150/3886/3803 2291/3887/3804\nf 2291/3887/3804 4148/3888/3805 1364/3885/3802\nf 1365/3889/3806 4149/3890/3807 2291/3887/3804\nf 2291/3887/3804 4150/3886/3803 1365/3889/3806\nf 7647/3891/3808 7648/3892/3809 2291/3887/3804\nf 2291/3887/3804 4149/3890/3807 7647/3891/3808\nf 7649/3893/3810 4148/3888/3805 2291/3887/3804\nf 2291/3887/3804 7648/3892/3809 7649/3893/3810\nf 1359/3851/3768 4151/3894/3811 2292/3895/3812\nf 2292/3895/3812 4135/3852/3769 1359/3851/3768\nf 1362/3865/3782 4142/3868/3785 2292/3895/3812\nf 2292/3895/3812 4151/3894/3811 1362/3865/3782\nf 7640/3870/3787 7650/3896/3813 2292/3895/3812\nf 2292/3895/3812 4142/3868/3785 7640/3870/3787\nf 7634/3853/3770 4135/3852/3769 2292/3895/3812\nf 2292/3895/3812 7650/3896/3813 7634/3853/3770\nf 1366/3897/3814 4153/3898/3815 2293/3899/3816\nf 2293/3899/3816 4152/3900/3817 1366/3897/3814\nf 1358/3847/3764 4134/3850/3767 2293/3899/3816\nf 2293/3899/3816 4153/3898/3815 1358/3847/3764\nf 7636/3855/3772 7651/3901/3818 2293/3899/3816\nf 2293/3899/3816 4134/3850/3767 7636/3855/3772\nf 7652/3902/3819 4152/3900/3817 2293/3899/3816\nf 2293/3899/3816 7651/3901/3818 7652/3902/3819\nf 1363/3874/3791 4154/3903/3820 2294/3904/3821\nf 2294/3904/3821 4145/3875/3792 1363/3874/3791\nf 1364/3885/3802 4148/3888/3805 2294/3904/3821\nf 2294/3904/3821 4154/3903/3820 1364/3885/3802\nf 7649/3893/3810 7653/3905/3822 2294/3904/3821\nf 2294/3904/3821 4148/3888/3805 7649/3893/3810\nf 7641/3876/3793 4145/3875/3792 2294/3904/3821\nf 2294/3904/3821 7653/3905/3822 7641/3876/3793\nf 1365/3889/3806 4155/3906/3823 2295/3907/3824\nf 2295/3907/3824 4149/3890/3807 1365/3889/3806\nf 1148/3210/3151 4127/3831/3748 2295/3907/3824\nf 2295/3907/3824 4155/3906/3823 1148/3210/3151\nf 7628/3833/3750 7654/3908/3825 2295/3907/3824\nf 2295/3907/3824 4127/3831/3748 7628/3833/3750\nf 7647/3891/3808 4149/3890/3807 2295/3907/3824\nf 2295/3907/3824 7654/3908/3825 7647/3891/3808\nf 1332/3719/3648 4157/3909/3826 2296/3910/3827\nf 2296/3910/3827 4068/3720/3649 1332/3719/3648\nf 1367/3911/3828 4156/3912/3829 2296/3910/3827\nf 2296/3910/3827 4157/3909/3826 1367/3911/3828\nf 1285/3553/3488 3981/3552/3487 2296/3910/3827\nf 2296/3910/3827 4156/3912/3829 1285/3553/3488\nf 1286/3551/3486 4068/3720/3649 2296/3910/3827\nf 2296/3910/3827 3981/3552/3487 1286/3551/3486\nf 1306/3613/3548 4012/3612/3547 2297/3913/3830\nf 2297/3913/3830 4158/3914/3831 1306/3613/3548\nf 1307/3611/3546 4159/3915/3832 2297/3913/3830\nf 2297/3913/3830 4012/3612/3547 1307/3611/3546\nf 1280/3538/3473 3974/3537/3472 2297/3913/3830\nf 2297/3913/3830 4159/3915/3832 1280/3538/3473\nf 1281/3536/3471 4158/3914/3831 2297/3913/3830\nf 2297/3913/3830 3974/3537/3472 1281/3536/3471\nf 1307/3611/3546 4014/3619/3554 2298/3916/3833\nf 2298/3916/3833 4159/3915/3832 1307/3611/3546\nf 1308/3618/3553 4070/3716/3645 2298/3916/3833\nf 2298/3916/3833 4014/3619/3554 1308/3618/3553\nf 1283/3544/3479 3978/3543/3478 2298/3916/3833\nf 2298/3916/3833 4070/3716/3645 1283/3544/3479\nf 1280/3538/3473 4159/3915/3832 2298/3916/3833\nf 2298/3916/3833 3978/3543/3478 1280/3538/3473\nf 1310/3623/3558 4018/3622/3557 2299/3917/3834\nf 2299/3917/3834 4160/3918/3835 1310/3623/3558\nf 1306/3613/3548 4158/3914/3831 2299/3917/3834\nf 2299/3917/3834 4018/3622/3557 1306/3613/3548\nf 1281/3536/3471 7655/3919/3836 2299/3917/3834\nf 2299/3917/3834 4158/3914/3831 1281/3536/3471\nf 7656/3920/3837 4160/3918/3835 2299/3917/3834\nf 2299/3917/3834 7655/3919/3836 7656/3920/3837\nf 1304/3607/3542 4163/3921/3838 2300/3922/3839\nf 2300/3922/3839 4007/3603/3538 1304/3607/3542\nf 1369/3923/3840 4162/3924/3841 2300/3922/3839\nf 2300/3922/3839 4163/3921/3838 1369/3923/3840\nf 1368/3925/3842 4161/3926/3843 2300/3922/3839\nf 2300/3922/3839 4162/3924/3841 1368/3925/3842\nf 1303/3600/3535 4007/3603/3538 2300/3922/3839\nf 2300/3922/3839 4161/3926/3843 1303/3600/3535\nf 7657/3927/3844 4165/3928/3845 2301/3929/3846\nf 2301/3929/3846 7658/3930/3847 7657/3927/3844\nf 1351/3805/3722 4164/3931/3848 2301/3929/3846\nf 2301/3929/3846 4165/3928/3845 1351/3805/3722\nf 1354/3811/3728 4120/3808/3725 2301/3929/3846\nf 2301/3929/3846 4164/3931/3848 1354/3811/3728\nf 7621/3807/3724 7658/3930/3847 2301/3929/3846\nf 2301/3929/3846 4120/3808/3725 7621/3807/3724\nf 1260/3478/3413 3942/3477/3412 2302/3932/3849\nf 2302/3932/3849 4166/3933/3850 1260/3478/3413\nf 1261/3476/3411 4167/3934/3851 2302/3932/3849\nf 2302/3932/3849 3942/3477/3412 1261/3476/3411\nf 1273/3509/3444 3961/3506/3441 2302/3932/3849\nf 2302/3932/3849 4167/3934/3851 1273/3509/3444\nf 1272/3505/3440 4166/3933/3850 2302/3932/3849\nf 2302/3932/3849 3961/3506/3441 1272/3505/3440\nf 1317/3647/3582 4168/3935/3852 2303/3936/3853\nf 2303/3936/3853 4029/3648/3583 1317/3647/3582\nf 1363/3874/3791 4146/3871/3788 2303/3936/3853\nf 2303/3936/3853 4168/3935/3852 1363/3874/3791\nf 1275/3515/3450 3964/3512/3447 2303/3936/3853\nf 2303/3936/3853 4146/3871/3788 1275/3515/3450\nf 1274/3511/3446 4029/3648/3583 2303/3936/3853\nf 2303/3936/3853 3964/3512/3447 1274/3511/3446\nf 1297/3588/3523 4001/3587/3522 2304/3937/3854\nf 2304/3937/3854 4169/3938/3855 1297/3588/3523\nf 1298/3586/3521 4170/3939/3856 2304/3937/3854\nf 2304/3937/3854 4001/3587/3522 1298/3586/3521\nf 1365/3889/3806 4150/3886/3803 2304/3937/3854\nf 2304/3937/3854 4170/3939/3856 1365/3889/3806\nf 1364/3885/3802 4169/3938/3855 2304/3937/3854\nf 2304/3937/3854 4150/3886/3803 1364/3885/3802\nf 1317/3647/3582 4030/3646/3581 2305/3940/3857\nf 2305/3940/3857 4101/3779/3696 1317/3647/3582\nf 1318/3645/3580 4172/3941/3858 2305/3940/3857\nf 2305/3940/3857 4030/3646/3581 1318/3645/3580\nf 1370/3942/3859 4171/3943/3860 2305/3940/3857\nf 2305/3940/3857 4172/3941/3858 1370/3942/3859\nf 1347/3780/3697 4101/3779/3696 2305/3940/3857\nf 2305/3940/3857 4171/3943/3860 1347/3780/3697\nf 1317/3647/3582 4102/3778/3695 2306/3944/3861\nf 2306/3944/3861 4168/3935/3852 1317/3647/3582\nf 1297/3588/3523 4169/3938/3855 2306/3944/3861\nf 2306/3944/3861 4102/3778/3695 1297/3588/3523\nf 1364/3885/3802 4154/3903/3820 2306/3944/3861\nf 2306/3944/3861 4169/3938/3855 1364/3885/3802\nf 1363/3874/3791 4168/3935/3852 2306/3944/3861\nf 2306/3944/3861 4154/3903/3820 1363/3874/3791\nf 1298/3586/3521 4111/3797/3714 2307/3945/3862\nf 2307/3945/3862 4170/3939/3856 1298/3586/3521\nf 1147/3212/3153 3814/3211/3152 2307/3945/3862\nf 2307/3945/3862 4111/3797/3714 1147/3212/3153\nf 1148/3210/3151 4155/3906/3823 2307/3945/3862\nf 2307/3945/3862 3814/3211/3152 1148/3210/3151\nf 1365/3889/3806 4170/3939/3856 2307/3945/3862\nf 2307/3945/3862 4155/3906/3823 1365/3889/3806\nf 1147/3212/3153 4115/3806/3723 2308/3946/3863\nf 2308/3946/3863 3813/3208/3149 1147/3212/3153\nf 1351/3805/3722 4165/3928/3845 2308/3946/3863\nf 2308/3946/3863 4115/3806/3723 1351/3805/3722\nf 7657/3927/3844 7659/3947/3864 2308/3946/3863\nf 2308/3946/3863 4165/3928/3845 7657/3927/3844\nf 1144/3206/3147 3813/3208/3149 2308/3946/3863\nf 2308/3946/3863 7659/3947/3864 1144/3206/3147\nf 1353/3813/3730 4119/3812/3729 2309/3948/3865\nf 2309/3948/3865 4123/3820/3737 1353/3813/3730\nf 1354/3811/3728 4174/3949/3866 2309/3948/3865\nf 2309/3948/3865 4119/3812/3729 1354/3811/3728\nf 1371/3950/3867 4173/3951/3868 2309/3948/3865\nf 2309/3948/3865 4174/3949/3866 1371/3950/3867\nf 1357/3821/3738 4123/3820/3737 2309/3948/3865\nf 2309/3948/3865 4173/3951/3868 1357/3821/3738\nf 1354/3811/3728 4164/3931/3848 2310/3952/3869\nf 2310/3952/3869 4174/3949/3866 1354/3811/3728\nf 1351/3805/3722 4116/3804/3721 2310/3952/3869\nf 2310/3952/3869 4164/3931/3848 1351/3805/3722\nf 1352/3803/3720 4175/3953/3870 2310/3952/3869\nf 2310/3952/3869 4116/3804/3721 1352/3803/3720\nf 1371/3950/3867 4174/3949/3866 2310/3952/3869\nf 2310/3952/3869 4175/3953/3870 1371/3950/3867\nf 1140/3197/3138 3806/3196/3137 2311/3954/3871\nf 2311/3954/3871 3930/3452/3387 1140/3197/3138\nf 1141/3195/3136 4177/3955/3872 2311/3954/3871\nf 2311/3954/3871 3806/3196/3137 1141/3195/3136\nf 1372/3956/3873 4176/3957/3874 2311/3954/3871\nf 2311/3954/3871 4177/3955/3872 1372/3956/3873\nf 1251/3449/3384 3930/3452/3387 2311/3954/3871\nf 2311/3954/3871 4176/3957/3874 1251/3449/3384\nf 1175/3275/3216 3844/3274/3215 2312/3958/3875\nf 2312/3958/3875 4178/3959/3876 1175/3275/3216\nf 1176/3273/3214 4179/3960/3877 2312/3958/3875\nf 2312/3958/3875 3844/3274/3215 1176/3273/3214\nf 1359/3851/3768 4136/3848/3765 2312/3958/3875\nf 2312/3958/3875 4179/3960/3877 1359/3851/3768\nf 1358/3847/3764 4178/3959/3876 2312/3958/3875\nf 2312/3958/3875 4136/3848/3765 1358/3847/3764\nf 1238/3428/3369 3915/3427/3368 2313/3961/3878\nf 2313/3961/3878 4180/3962/3879 1238/3428/3369\nf 1239/3426/3367 4182/3963/3880 2313/3961/3878\nf 2313/3961/3878 3915/3427/3368 1239/3426/3367\nf 1374/3964/3881 4181/3965/3882 2313/3961/3878\nf 2313/3961/3878 4182/3963/3880 1374/3964/3881\nf 1373/3966/3883 4180/3962/3879 2313/3961/3878\nf 2313/3961/3878 4181/3965/3882 1373/3966/3883\nf 1345/3765/3682 4186/3967/3884 2314/3968/3885\nf 2314/3968/3885 4183/3969/3886 1345/3765/3682\nf 1366/3897/3814 4185/3970/3887 2314/3968/3885\nf 2314/3968/3885 4186/3967/3884 1366/3897/3814\nf 1376/3971/3888 4184/3972/3889 2314/3968/3885\nf 2314/3968/3885 4185/3970/3887 1376/3971/3888\nf 1375/3973/3890 4183/3969/3886 2314/3968/3885\nf 2314/3968/3885 4184/3972/3889 1375/3973/3890\nf 1250/3446/3381 3928/3445/3380 2315/3974/3891\nf 2315/3974/3891 4187/3975/3892 1250/3446/3381\nf 1154/3230/3171 3821/3229/3170 2315/3974/3891\nf 2315/3974/3891 3928/3445/3380 1154/3230/3171\nf 1155/3228/3169 4143/3866/3783 2315/3974/3891\nf 2315/3974/3891 3821/3229/3170 1155/3228/3169\nf 1362/3865/3782 4187/3975/3892 2315/3974/3891\nf 2315/3974/3891 4143/3866/3783 1362/3865/3782\nf 1154/3230/3171 4024/3636/3571 2316/3976/3893\nf 2316/3976/3893 3820/3225/3166 1154/3230/3171\nf 1314/3635/3570 4188/3977/3894 2316/3976/3893\nf 2316/3976/3893 4024/3636/3571 1314/3635/3570\nf 1320/3653/3588 4034/3656/3591 2316/3976/3893\nf 2316/3976/3893 4188/3977/3894 1320/3653/3588\nf 1153/3222/3163 3820/3225/3166 2316/3976/3893\nf 2316/3976/3893 4034/3656/3591 1153/3222/3163\nf 1345/3765/3682 4191/3978/3895 2317/3979/3896\nf 2317/3979/3896 4094/3766/3683 1345/3765/3682\nf 1378/3980/3897 4190/3981/3898 2317/3979/3896\nf 2317/3979/3896 4191/3978/3895 1378/3980/3897\nf 1377/3982/3899 4189/3983/3900 2317/3979/3896\nf 2317/3979/3896 4190/3981/3898 1377/3982/3899\nf 1344/3767/3684 4094/3766/3683 2317/3979/3896\nf 2317/3979/3896 4189/3983/3900 1344/3767/3684\nf 1176/3273/3214 4090/3757/3674 2318/3984/3901\nf 2318/3984/3901 4179/3960/3877 1176/3273/3214\nf 1250/3446/3381 4187/3975/3892 2318/3984/3901\nf 2318/3984/3901 4090/3757/3674 1250/3446/3381\nf 1362/3865/3782 4151/3894/3811 2318/3984/3901\nf 2318/3984/3901 4187/3975/3892 1362/3865/3782\nf 1359/3851/3768 4179/3960/3877 2318/3984/3901\nf 2318/3984/3901 4151/3894/3811 1359/3851/3768\nf 1345/3765/3682 4095/3764/3681 2319/3985/3902\nf 2319/3985/3902 4186/3967/3884 1345/3765/3682\nf 1175/3275/3216 4178/3959/3876 2319/3985/3902\nf 2319/3985/3902 4095/3764/3681 1175/3275/3216\nf 1358/3847/3764 4153/3898/3815 2319/3985/3902\nf 2319/3985/3902 4178/3959/3876 1358/3847/3764\nf 1366/3897/3814 4186/3967/3884 2319/3985/3902\nf 2319/3985/3902 4153/3898/3815 1366/3897/3814\nf 1379/3986/3903 4194/3987/3904 2320/3988/3905\nf 2320/3988/3905 4192/3989/3906 1379/3986/3903\nf 1380/3990/3907 4193/3991/3908 2320/3988/3905\nf 2320/3988/3905 4194/3987/3904 1380/3990/3907\nf 1203/3335/3276 3873/3332/3273 2320/3988/3905\nf 2320/3988/3905 4193/3991/3908 1203/3335/3276\nf 1200/3331/3272 4192/3989/3906 2320/3988/3905\nf 2320/3988/3905 3873/3332/3273 1200/3331/3272\nf 1161/3245/3186 3829/3244/3185 2321/3992/3909\nf 2321/3992/3909 3858/3308/3249 1161/3245/3186\nf 1162/3243/3184 4195/3993/3910 2321/3992/3909\nf 2321/3992/3909 3829/3244/3185 1162/3243/3184\nf 1209/3352/3293 3881/3349/3290 2321/3992/3909\nf 2321/3992/3909 4195/3993/3910 1209/3352/3293\nf 1189/3305/3246 3858/3308/3249 2321/3992/3909\nf 2321/3992/3909 3881/3349/3290 1189/3305/3246\nf 1171/3267/3208 3840/3266/3207 2322/3994/3911\nf 2322/3994/3911 4196/3995/3912 1171/3267/3208\nf 1172/3265/3206 4198/3996/3913 2322/3994/3911\nf 2322/3994/3911 3840/3266/3207 1172/3265/3206\nf 1382/3997/3914 4197/3998/3915 2322/3994/3911\nf 2322/3994/3911 4198/3996/3913 1382/3997/3914\nf 1381/3999/3916 4196/3995/3912 2322/3994/3911\nf 2322/3994/3911 4197/3998/3915 1381/3999/3916\nf 1178/3286/3227 3847/3285/3226 2323/4000/3917\nf 2323/4000/3917 4138/3860/3777 1178/3286/3227\nf 1179/3284/3225 4199/4001/3918 2323/4000/3917\nf 2323/4000/3917 3847/3285/3226 1179/3284/3225\nf 778/1492/1456 2686/1491/1455 2323/4000/3917\nf 2323/4000/3917 4199/4001/3918 778/1492/1456\nf 1360/1347/1311 4138/3860/3777 2323/4000/3917\nf 2323/4000/3917 2686/1491/1455 1360/1347/1311\nf 1182/3295/3236 3851/3294/3235 2324/4002/3919\nf 2324/4002/3919 4200/4003/3920 1182/3295/3236\nf 1183/3293/3234 3909/3406/3347 2324/4002/3919\nf 2324/4002/3919 3851/3294/3235 1183/3293/3234\nf 1230/870/860 4201/1497/1461 2324/4002/3919\nf 2324/4002/3919 3909/3406/3347 1230/870/860\nf 1383/1496/1460 4200/4003/3920 2324/4002/3919\nf 2324/4002/3919 4201/1497/1461 1383/1496/1460\nf 1186/3304/3245 3855/3303/3244 2325/4004/3921\nf 2325/4004/3921 4202/4005/3922 1186/3304/3245\nf 1187/3302/3243 3958/3500/3435 2325/4004/3921\nf 2325/4004/3921 3855/3303/3244 1187/3302/3243\nf 1270/976/957 4203/1501/1465 2325/4004/3921\nf 2325/4004/3921 3958/3500/3435 1270/976/957\nf 1384/1500/1464 4202/4005/3922 2325/4004/3921\nf 2325/4004/3921 4203/1501/1465 1384/1500/1464\nf 1161/3245/3186 3859/3312/3253 2326/4006/3923\nf 2326/4006/3923 3828/3241/3182 1161/3245/3186\nf 1190/3311/3252 4204/4007/3924 2326/4006/3923\nf 2326/4006/3923 3859/3312/3253 1190/3311/3252\nf 550/1504/1468 2693/1503/1467 2326/4006/3923\nf 2326/4006/3923 4204/4007/3924 550/1504/1468\nf 548/698/688 3828/3241/3182 2326/4006/3923\nf 2326/4006/3923 2693/1503/1467 548/698/688\nf 1193/3321/3262 3863/3320/3261 2327/4008/3925\nf 2327/4008/3925 4205/4009/3926 1193/3321/3262\nf 1194/3319/3260 4207/4010/3927 2327/4008/3925\nf 2327/4008/3925 3863/3320/3261 1194/3319/3260\nf 1386/1510/1474 4206/1509/1473 2327/4008/3925\nf 2327/4008/3925 4207/4010/3927 1386/1510/1474\nf 1385/1508/1472 4205/4009/3926 2327/4008/3925\nf 2327/4008/3925 4206/1509/1473 1385/1508/1472\nf 1197/3330/3271 3867/3329/3270 2328/4011/3928\nf 2328/4011/3928 4078/3740/3663 1197/3330/3271\nf 1198/3328/3269 4208/4012/3929 2328/4011/3928\nf 2328/4011/3928 3867/3329/3270 1198/3328/3269\nf 913/1514/1478 3387/1513/1477 2328/4011/3928\nf 2328/4011/3928 4208/4012/3929 913/1514/1478\nf 912/1222/1192 4078/3740/3663 2328/4011/3928\nf 2328/4011/3928 3387/1513/1477 912/1222/1192\nf 1205/3348/3289 3875/3347/3288 2329/4013/3930\nf 2329/4013/3930 3934/3461/3396 1205/3348/3289\nf 1206/3346/3287 4210/4014/3931 2329/4013/3930\nf 2329/4013/3930 3875/3347/3288 1206/3346/3287\nf 1387/1518/1482 4209/1517/1481 2329/4013/3930\nf 2329/4013/3930 4210/4014/3931 1387/1518/1482\nf 545/934/915 3934/3461/3396 2329/4013/3930\nf 2329/4013/3930 4209/1517/1481 545/934/915\nf 1186/3304/3245 4213/4015/3932 2330/4016/3933\nf 2330/4016/3933 3854/3299/3240 1186/3304/3245\nf 1232/3409/3350 4212/4017/3934 2330/4016/3933\nf 2330/4016/3933 4213/4015/3932 1232/3409/3350\nf 1216/3378/3319 4211/4018/3935 2330/4016/3933\nf 2330/4016/3933 4212/4017/3934 1216/3378/3319\nf 1185/3296/3237 3854/3299/3240 2330/4016/3933\nf 2330/4016/3933 4211/4018/3935 1185/3296/3237\nf 1243/3433/539 3920/3432/539 2331/4019/539\nf 2331/4019/539 4214/4020/539 1243/3433/539\nf 1244/3431/539 4215/4021/539 2331/4019/539\nf 2331/4019/539 3920/3432/539 1244/3431/539\nf 1321/3662/539 4037/3661/539 2331/4019/539\nf 2331/4019/539 4215/4021/539 1321/3662/539\nf 1322/3660/539 4214/4020/539 2331/4019/539\nf 2331/4019/539 4037/3661/539 1322/3660/539\nf 1246/3439/3374 3924/3438/3373 2332/4022/3936\nf 2332/4022/3936 4216/4023/3937 1246/3439/3374\nf 1247/3437/3372 4218/4024/3938 2332/4022/3936\nf 2332/4022/3936 3924/3438/3373 1247/3437/3372\nf 1389/4025/3939 4217/4026/3940 2332/4022/3936\nf 2332/4022/3936 4218/4024/3938 1389/4025/3939\nf 1388/4027/3941 4216/4023/3937 2332/4022/3936\nf 2332/4022/3936 4217/4026/3940 1388/4027/3941\nf 1205/3348/3289 3935/3460/3395 2333/4028/3942\nf 2333/4028/3942 3874/3343/3284 1205/3348/3289\nf 1255/3459/3394 4219/4029/3943 2333/4028/3942\nf 2333/4028/3942 3935/3460/3395 1255/3459/3394\nf 1211/3359/3300 3885/3356/3297 2333/4028/3942\nf 2333/4028/3942 4219/4029/3943 1211/3359/3300\nf 1204/3340/3281 3874/3343/3284 2333/4028/3942\nf 2333/4028/3942 3885/3356/3297 1204/3340/3281\nf 1271/3503/3438 3957/3502/3437 2334/4030/3944\nf 2334/4030/3944 4105/3788/3705 1271/3503/3438\nf 1187/3302/3243 3856/3301/3242 2334/4030/3944\nf 2334/4030/3944 3957/3502/3437 1187/3302/3243\nf 1188/3300/3241 3952/3495/3430 2334/4030/3944\nf 2334/4030/3944 3856/3301/3242 1188/3300/3241\nf 1268/3499/3434 4105/3788/3705 2334/4030/3944\nf 2334/4030/3944 3952/3495/3430 1268/3499/3434\nf 1128/3170/3111 3980/3554/3489 2335/4031/3945\nf 2335/4031/3945 3793/3166/3107 1128/3170/3111\nf 1285/3553/3488 4221/4032/3946 2335/4031/3945\nf 2335/4031/3945 3980/3554/3489 1285/3553/3488\nf 1390/1538/1499 4220/1537/1498 2335/4031/3945\nf 2335/4031/3945 4221/4032/3946 1390/1538/1499\nf 1127/620/610 3793/3166/3107 2335/4031/3945\nf 2335/4031/3945 4220/1537/1498 1127/620/610\nf 1288/3560/3495 3984/3559/3494 2336/4033/3947\nf 2336/4033/3947 4222/4034/3948 1288/3560/3495\nf 1289/3558/3493 4223/4035/3949 2336/4033/3947\nf 2336/4033/3947 3984/3559/3494 1289/3558/3493\nf 1294/3565/3500 3990/3562/3497 2336/4033/3947\nf 2336/4033/3947 4223/4035/3949 1294/3565/3500\nf 1291/3561/3496 4222/4034/3948 2336/4033/3947\nf 2336/4033/3947 3990/3562/3497 1291/3561/3496\nf 1305/3605/3540 4009/3604/3539 2337/4036/3950\nf 2337/4036/3950 4224/4037/3951 1305/3605/3540\nf 1125/3162/3103 3791/3161/3102 2337/4036/3950\nf 2337/4036/3950 4009/3604/3539 1125/3162/3103\nf 1126/619/603 3588/1546/603 2337/4036/3950\nf 2337/4036/3950 3791/3161/3102 1126/619/603\nf 1016/1545/1506 4224/4037/3951 2337/4036/3950\nf 2337/4036/3950 3588/1546/603 1016/1545/1506\nf 1197/3330/3271 4079/3739/3662 2338/4038/3952\nf 2338/4038/3952 3866/3325/3266 1197/3330/3271\nf 1339/3738/3661 4226/4039/3953 2338/4038/3952\nf 2338/4038/3952 4079/3739/3662 1339/3738/3661\nf 1391/4040/3954 4225/4041/3955 2338/4038/3952\nf 2338/4038/3952 4226/4039/3953 1391/4040/3954\nf 1196/3322/3263 3866/3325/3266 2338/4038/3952\nf 2338/4038/3952 4225/4041/3955 1196/3322/3263\nf 1255/3459/3394 4088/3754/3671 2339/4042/3956\nf 2339/4042/3956 4219/4029/3943 1255/3459/3394\nf 1171/3267/3208 4196/3995/3912 2339/4042/3956\nf 2339/4042/3956 4088/3754/3671 1171/3267/3208\nf 1381/3999/3916 4227/4043/3957 2339/4042/3956\nf 2339/4042/3956 4196/3995/3912 1381/3999/3916\nf 1211/3359/3300 4219/4029/3943 2339/4042/3956\nf 2339/4042/3956 4227/4043/3957 1211/3359/3300\nf 1172/3265/3206 4097/3771/3688 2340/4044/3958\nf 2340/4044/3958 4198/3996/3913 1172/3265/3206\nf 1246/3439/3374 4216/4023/3937 2340/4044/3958\nf 2340/4044/3958 4097/3771/3688 1246/3439/3374\nf 1388/4027/3941 4228/4045/3959 2340/4044/3958\nf 2340/4044/3958 4216/4023/3937 1388/4027/3941\nf 1382/3997/3914 4198/3996/3913 2340/4044/3958\nf 2340/4044/3958 4228/4045/3959 1382/3997/3914\nf 1271/3503/3438 4106/3787/3704 2341/4046/3960\nf 2341/4046/3960 3956/3504/3439 1271/3503/3438\nf 1348/3786/3703 4230/4047/3961 2341/4046/3960\nf 2341/4046/3960 4106/3787/3704 1348/3786/3703\nf 1392/1557/1517 4229/1556/1516 2341/4046/3960\nf 2341/4046/3960 4230/4047/3961 1392/1557/1517\nf 557/980/961 3956/3504/3439 2341/4046/3960\nf 2341/4046/3960 4229/1556/1516 557/980/961\nf 7660/4048/3962 4231/4049/3963 2342/4050/3964\nf 2342/4050/3964 7661/4051/3965 7660/4048/3962\nf 1129/3168/3109 3795/3167/3108 2342/4050/3964\nf 2342/4050/3964 4231/4049/3963 1129/3168/3109\nf 1130/628/618 2700/1564/1524 2342/4050/3964\nf 2342/4050/3964 3795/3167/3108 1130/628/618\nf 7318/1563/1523 7661/4051/3965 2342/4050/3964\nf 2342/4050/3964 2700/1564/1524 7318/1563/1523\nf 1178/3286/3227 4139/3859/3776 2343/4052/3966\nf 2343/4052/3966 3846/3281/3222 1178/3286/3227\nf 1361/3858/3775 4233/4053/3967 2343/4052/3966\nf 2343/4052/3966 4139/3859/3776 1361/3858/3775\nf 1324/3675/3604 4232/4054/3968 2343/4052/3966\nf 2343/4052/3966 4233/4053/3967 1324/3675/3604\nf 1177/3278/3219 3846/3281/3222 2343/4052/3966\nf 2343/4052/3966 4232/4054/3968 1177/3278/3219\nf 1285/3553/3488 4156/3912/3829 2344/4055/3969\nf 2344/4055/3969 4221/4032/3946 1285/3553/3488\nf 1367/3911/3828 4235/4056/3970 2344/4055/3969\nf 2344/4055/3969 4156/3912/3829 1367/3911/3828\nf 702/1570/1530 4234/1569/1529 2344/4055/3969\nf 2344/4055/3969 4235/4056/3970 702/1570/1530\nf 1390/1538/1499 4221/4032/3946 2344/4055/3969\nf 2344/4055/3969 4234/1569/1529 1390/1538/1499\nf 1140/3197/3138 3931/3456/3391 2345/4057/3971\nf 2345/4057/3971 4236/4058/3972 1140/3197/3138\nf 1252/3455/3390 4237/4059/3973 2345/4057/3971\nf 2345/4057/3971 3931/3456/3391 1252/3455/3390\nf 1099/3100/3041 3764/3097/3038 2345/4057/3971\nf 2345/4057/3971 4237/4059/3973 1099/3100/3041\nf 1096/3096/3037 4236/4058/3972 2345/4057/3971\nf 2345/4057/3971 3764/3097/3038 1096/3096/3037\nf 1260/3478/3413 3950/3492/3427 2346/4060/3974\nf 2346/4060/3974 3941/3473/3408 1260/3478/3413\nf 1267/3491/3426 4239/4061/3975 2346/4060/3974\nf 2346/4060/3974 3950/3492/3427 1267/3491/3426\nf 1393/4062/3976 4238/4063/3977 2346/4060/3974\nf 2346/4060/3974 4239/4061/3975 1393/4062/3976\nf 1259/3470/3405 3941/3473/3408 2346/4060/3974\nf 2346/4060/3974 4238/4063/3977 1259/3470/3405\nf 1353/3813/3730 4124/3817/3734 2347/4064/3978\nf 2347/4064/3978 4118/3814/3731 1353/3813/3730\nf 1355/3816/3733 4241/4065/3979 2347/4064/3978\nf 2347/4064/3978 4124/3817/3734 1355/3816/3733\nf 7662/4066/3980 4240/4067/3981 2347/4064/3978\nf 2347/4064/3978 4241/4065/3979 7662/4066/3980\nf 7623/3815/3732 4118/3814/3731 2347/4064/3978\nf 2347/4064/3978 4240/4067/3981 7623/3815/3732\nf 1092/3087/539 3757/3090/539 2348/4068/3982\nf 2348/4068/3982 4242/4069/539 1092/3087/539\nf 1093/3095/539 4244/4070/3983 2348/4068/3982\nf 2348/4068/3982 3757/3090/539 1093/3095/539\nf 1395/4071/3984 4243/4072/3985 2348/4068/3982\nf 2348/4068/3982 4244/4070/3983 1395/4071/3984\nf 1394/4073/539 4242/4069/539 2348/4068/3982\nf 2348/4068/3982 4243/4072/3985 1394/4073/539\nf 1277/3525/3460 3968/3524/3459 2349/4074/3986\nf 2349/4074/3986 7663/4075/3987 1277/3525/3460\nf 1132/3179/3120 3972/3527/3462 2349/4074/3986\nf 2349/4074/3986 3968/3524/3459 1132/3179/3120\nf 1278/3526/3461 7663/4075/3987 2349/4074/3986\nf 2349/4074/3986 3972/3527/3462 1278/3526/3461\nf 1396/4076/3988 4247/4077/1186 2350/4078/1186\nf 2350/4078/1186 4245/4079/3989 1396/4076/3988\nf 1397/4080/1186 4246/4081/1186 2350/4078/1186\nf 2350/4078/1186 4247/4077/1186 1397/4080/1186\nf 1338/3731/1186 4077/3728/1186 2350/4078/1186\nf 2350/4078/1186 4246/4081/1186 1338/3731/1186\nf 1335/3727/3656 4245/4079/3989 2350/4078/1186\nf 2350/4078/1186 4077/3728/1186 1335/3727/3656\nf 1398/4082/3990 4250/4083/3991 2351/4084/3992\nf 2351/4084/3992 4248/4085/3993 1398/4082/3990\nf 1399/4086/3994 4249/4087/3995 2351/4084/3992\nf 2351/4084/3992 4250/4083/3991 1399/4086/3994\nf 1391/4040/3954 4226/4039/3953 2351/4084/3992\nf 2351/4084/3992 4249/4087/3995 1391/4040/3954\nf 1339/3738/3661 4248/4085/3993 2351/4084/3992\nf 2351/4084/3992 4226/4039/3953 1339/3738/3661\nf 7664/4088/3996 7665/4089/3997 2352/4090/3998\nf 2352/4090/3998 4251/4091/3999 7664/4088/3996\nf 7666/4092/4000 4252/4093/4001 2352/4090/3998\nf 2352/4090/3998 7665/4089/3997 7666/4092/4000\nf 1377/3982/3899 4190/3981/3898 2352/4090/3998\nf 2352/4090/3998 4252/4093/4001 1377/3982/3899\nf 1378/3980/3897 4251/4091/3999 2352/4090/3998\nf 2352/4090/3998 4190/3981/3898 1378/3980/3897\nf 1400/4094/4002 4255/4095/4003 2353/4096/4004\nf 2353/4096/4004 4253/4097/4005 1400/4094/4002\nf 1401/4098/4006 4254/4099/4007 2353/4096/4004\nf 2353/4096/4004 4255/4095/4003 1401/4098/4006\nf 1343/3751/3668 4086/3748/3665 2353/4096/4004\nf 2353/4096/4004 4254/4099/4007 1343/3751/3668\nf 1342/3747/3664 4253/4097/4005 2353/4096/4004\nf 2353/4096/4004 4086/3748/3665 1342/3747/3664\nf 1397/4080/1186 4257/4100/1186 2354/4101/1186\nf 2354/4101/1186 4246/4081/1186 1397/4080/1186\nf 1402/4102/1186 4256/4103/1186 2354/4101/1186\nf 2354/4101/1186 4257/4100/1186 1402/4102/1186\nf 1341/3743/1186 4083/3741/1186 2354/4101/1186\nf 2354/4101/1186 4256/4103/1186 1341/3743/1186\nf 1338/3731/1186 4246/4081/1186 2354/4101/1186\nf 2354/4101/1186 4083/3741/1186 1338/3731/1186\nf 920/1619/1569 4258/4104/4008 2355/4105/4009\nf 2355/4105/4009 3395/1620/1570 920/1619/1569\nf 1398/4082/3990 4248/4085/3993 2355/4105/4009\nf 2355/4105/4009 4258/4104/4008 1398/4082/3990\nf 1339/3738/3661 4080/3736/3659 2355/4105/4009\nf 2355/4105/4009 4248/4085/3993 1339/3738/3661\nf 921/1218/1188 3395/1620/1570 2355/4105/4009\nf 2355/4105/4009 4080/3736/3659 921/1218/1188\nf 7667/4106/4010 7668/4107/4011 2356/4108/4012\nf 2356/4108/4012 4259/4109/4013 7667/4106/4010\nf 7669/4110/4014 4260/4111/4015 2356/4108/4012\nf 2356/4108/4012 7668/4107/4011 7669/4110/4014\nf 1394/4073/539 4259/4109/4013 2356/4108/4012\nf 2356/4108/4012 4260/4111/4015 1394/4073/539\nf 1092/3087/539 4262/4112/4016 2357/4113/4017\nf 2357/4113/4017 3760/3088/539 1092/3087/539\nf 7670/4114/4018 7671/4115/4019 2357/4113/4017\nf 2357/4113/4017 4262/4112/4016 7670/4114/4018\nf 7672/4116/4020 4261/4117/4021 2357/4113/4017\nf 2357/4113/4017 7671/4115/4019 7672/4116/4020\nf 1095/3091/539 3760/3088/539 2357/4113/4017\nf 2357/4113/4017 4261/4117/4021 1095/3091/539\nf 1095/3091/539 4261/4117/4021 2358/4118/4022\nf 2358/4118/4022 4038/3659/539 1095/3091/539\nf 7672/4116/4020 7673/4119/4023 2358/4118/4022\nf 2358/4118/4022 4261/4117/4021 7672/4116/4020\nf 7674/4120/4024 4263/4121/4025 2358/4118/4022\nf 2358/4118/4022 7673/4119/4023 7674/4120/4024\nf 1322/3660/539 4038/3659/539 2358/4118/4022\nf 2358/4118/4022 4263/4121/4025 1322/3660/539\nf 1322/3660/539 4263/4121/4025 2359/4122/4026\nf 2359/4122/4026 4214/4020/539 1322/3660/539\nf 7674/4120/4024 7675/4123/4027 2359/4122/4026\nf 2359/4122/4026 4263/4121/4025 7674/4120/4024\nf 7676/4124/4028 4264/4125/4029 2359/4122/4026\nf 2359/4122/4026 7675/4123/4027 7676/4124/4028\nf 1243/3433/539 4214/4020/539 2359/4122/4026\nf 2359/4122/4026 4264/4125/4029 1243/3433/539\nf 1243/3433/539 4264/4125/4029 2360/4126/4030\nf 2360/4126/4030 3919/3434/539 1243/3433/539\nf 7676/4124/4028 7677/4127/4031 2360/4126/4030\nf 2360/4126/4030 4264/4125/4029 7676/4124/4028\nf 7334/1645/1595 4265/1644/1594 2360/4126/4030\nf 2360/4126/4030 7677/4127/4031 7334/1645/1595\nf 1242/900/539 3919/3434/539 2360/4126/4030\nf 2360/4126/4030 4265/1644/1594 1242/900/539\nf 762/1647/1597 3089/1650/1600 2361/4128/4032\nf 2361/4128/4032 4266/4129/4033 762/1647/1597\nf 7338/1655/1605 7678/4130/4034 2361/4128/4032\nf 2361/4128/4032 3089/1650/1600 7338/1655/1605\nf 7679/4131/4035 4267/4132/4036 2361/4128/4032\nf 2361/4128/4032 7678/4130/4034 7679/4131/4035\nf 1403/4133/4037 4266/4129/4033 2361/4128/4032\nf 2361/4128/4032 4267/4132/4036 1403/4133/4037\nf 1403/4133/4037 4267/4132/4036 2362/4134/4038\nf 2362/4134/4038 4268/4135/4039 1403/4133/4037\nf 7679/4131/4035 7680/4136/4040 2362/4134/4038\nf 2362/4134/4038 4267/4132/4036 7679/4131/4035\nf 7681/4137/4041 4269/4138/4042 2362/4134/4038\nf 2362/4134/4038 7680/4136/4040 7681/4137/4041\nf 7682/4139/4043 4268/4135/4039 2362/4134/4038\nf 2362/4134/4038 4269/4138/4042 7682/4139/4043\nf 7682/4139/4043 4269/4138/4042 2363/4140/4044\nf 2363/4140/4044 7683/4141/4045 7682/4139/4043\nf 7681/4137/4041 7684/4142/4046 2363/4140/4044\nf 2363/4140/4044 4269/4138/4042 7681/4137/4041\nf 7685/4143/4047 4270/4144/4048 2363/4140/4044\nf 2363/4140/4044 7684/4142/4046 7685/4143/4047\nf 7686/4145/4049 7683/4141/4045 2363/4140/4044\nf 2363/4140/4044 4270/4144/4048 7686/4145/4049\nf 7686/4145/4049 4270/4144/4048 2364/4146/4050\nf 2364/4146/4050 4271/4147/4051 7686/4145/4049\nf 7685/4143/4047 7687/4148/4052 2364/4146/4050\nf 2364/4146/4050 4270/4144/4048 7685/4143/4047\nf 7688/4149/4053 4272/4150/4054 2364/4146/4050\nf 2364/4146/4050 7687/4148/4052 7688/4149/4053\nf 1404/4151/4055 4271/4147/4051 2364/4146/4050\nf 2364/4146/4050 4272/4150/4054 1404/4151/4055\nf 1404/4151/4055 4272/4150/4054 2365/4152/4056\nf 2365/4152/4056 4273/4153/4057 1404/4151/4055\nf 7688/4149/4053 4275/4154/4058 2365/4152/4056\nf 2365/4152/4056 4272/4150/4054 7688/4149/4053\nf 7689/4155/4059 4274/4156/4060 2365/4152/4056\nf 2365/4152/4056 4275/4154/4058 7689/4155/4059\nf 1405/4157/4061 4273/4153/4057 2365/4152/4056\nf 2365/4152/4056 4274/4156/4060 1405/4157/4061\nf 1406/4158/4062 4278/4159/4063 2366/4160/4064\nf 2366/4160/4064 4276/4161/4065 1406/4158/4062\nf 1407/4162/4066 4277/4163/4067 2366/4160/4064\nf 2366/4160/4064 4278/4159/4063 1407/4162/4066\nf 7690/4164/4068 7691/4165/4069 2366/4160/4064\nf 2366/4160/4064 4277/4163/4067 7690/4164/4068\nf 7692/4166/4070 4276/4161/4065 2366/4160/4064\nf 2366/4160/4064 7691/4165/4069 7692/4166/4070\nf 1179/3284/3225 3848/3283/3224 2367/4167/4071\nf 2367/4167/4071 4279/4168/4072 1179/3284/3225\nf 1180/3282/3223 4281/4169/4073 2367/4167/4071\nf 2367/4167/4071 3848/3283/3224 1180/3282/3223\nf 7693/4170/4074 4280/4171/4075 2367/4167/4071\nf 2367/4167/4071 4281/4169/4073 7693/4170/4074\nf 1408/4172/4076 4279/4168/4072 2367/4167/4071\nf 2367/4167/4071 4280/4171/4075 1408/4172/4076\nf 1180/3282/3223 4282/4173/4077 2368/4174/4078\nf 2368/4174/4078 4281/4169/4073 1180/3282/3223\nf 1406/4158/4062 4276/4161/4065 2368/4174/4078\nf 2368/4174/4078 4282/4173/4077 1406/4158/4062\nf 7692/4166/4070 7694/4175/4079 2368/4174/4078\nf 2368/4174/4078 4276/4161/4065 7692/4166/4070\nf 7693/4170/4074 4281/4169/4073 2368/4174/4078\nf 2368/4174/4078 7694/4175/4079 7693/4170/4074\nf 1375/3973/3890 4284/4176/4080 2369/4177/4081\nf 2369/4177/4081 4183/3969/3886 1375/3973/3890\nf 1409/4178/4082 4283/4179/4083 2369/4177/4081\nf 2369/4177/4081 4284/4176/4080 1409/4178/4082\nf 1378/3980/3897 4191/3978/3895 2369/4177/4081\nf 2369/4177/4081 4283/4179/4083 1378/3980/3897\nf 1345/3765/3682 4183/3969/3886 2369/4177/4081\nf 2369/4177/4081 4191/3978/3895 1345/3765/3682\nf 7695/4180/4084 4285/4181/4085 2370/4182/4086\nf 2370/4182/4086 7696/4183/4087 7695/4180/4084\nf 1376/3971/3888 4185/3970/3887 2370/4182/4086\nf 2370/4182/4086 4285/4181/4085 1376/3971/3888\nf 1366/3897/3814 4152/3900/3817 2370/4182/4086\nf 2370/4182/4086 4185/3970/3887 1366/3897/3814\nf 7652/3902/3819 7696/4183/4087 2370/4182/4086\nf 2370/4182/4086 4152/3900/3817 7652/3902/3819\nf 1373/3966/3883 4181/3965/3882 2371/4184/4088\nf 2371/4184/4088 4286/4185/4089 1373/3966/3883\nf 1374/3964/3881 7697/4186/4090 2371/4184/4088\nf 2371/4184/4088 4181/3965/3882 1374/3964/3881\nf 1119/3145/3086 3784/3142/3083 2371/4184/4088\nf 2371/4184/4088 7697/4186/4090 1119/3145/3086\nf 1116/3141/3082 4286/4185/4089 2371/4184/4088\nf 2371/4184/4088 3784/3142/3083 1116/3141/3082\nf 7698/4187/4091 7699/4188/4092 2372/4189/4093\nf 2372/4189/4093 4287/4190/4094 7698/4187/4091\nf 7700/4191/4095 4288/4192/4096 2372/4189/4093\nf 2372/4189/4093 7699/4188/4092 7700/4191/4095\nf 1123/3154/3095 3788/3151/3092 2372/4189/4093\nf 2372/4189/4093 4288/4192/4096 1123/3154/3095\nf 1120/3150/3091 4287/4190/4094 2372/4189/4093\nf 2372/4189/4093 3788/3151/3092 1120/3150/3091\nf 778/1492/1456 4199/4001/3918 2373/4193/4097\nf 2373/4193/4097 4289/1715/1665 778/1492/1456\nf 1179/3284/3225 4279/4168/4072 2373/4193/4097\nf 2373/4193/4097 4199/4001/3918 1179/3284/3225\nf 1408/4172/4076 4290/4194/4098 2373/4193/4097\nf 2373/4193/4097 4279/4168/4072 1408/4172/4076\nf 1410/1717/1667 4289/1715/1665 2373/4193/4097\nf 2373/4193/4097 4290/4194/4098 1410/1717/1667\nf 1394/4073/539 4243/4072/3985 2374/4195/4099\nf 2374/4195/4099 4259/4109/4013 1394/4073/539\nf 1395/4071/3984 4291/4196/4100 2374/4195/4099\nf 2374/4195/4099 4243/4072/3985 1395/4071/3984\nf 7701/4197/4101 7702/4198/4102 2374/4195/4099\nf 2374/4195/4099 4291/4196/4100 7701/4197/4101\nf 7667/4106/4010 4259/4109/4013 2374/4195/4099\nf 2374/4195/4099 7702/4198/4102 7667/4106/4010\nf 1409/4178/4082 4293/4199/4103 2375/4200/4104\nf 2375/4200/4104 4283/4179/4083 1409/4178/4082\nf 7703/4201/4105 4292/4202/4106 2375/4200/4104\nf 2375/4200/4104 4293/4199/4103 7703/4201/4105\nf 7664/4088/3996 4251/4091/3999 2375/4200/4104\nf 2375/4200/4104 4292/4202/4106 7664/4088/3996\nf 1378/3980/3897 4283/4179/4083 2375/4200/4104\nf 2375/4200/4104 4251/4091/3999 1378/3980/3897\nf 1394/4073/539 4260/4111/4015 2376/4203/4107\nf 2376/4203/4107 4242/4069/539 1394/4073/539\nf 7669/4110/4014 7704/4204/4108 2376/4203/4107\nf 2376/4203/4107 4260/4111/4015 7669/4110/4014\nf 7670/4114/4018 4262/4112/4016 2376/4203/4107\nf 2376/4203/4107 7704/4204/4108 7670/4114/4018\nf 1092/3087/539 4242/4069/539 2376/4203/4107\nf 2376/4203/4107 4262/4112/4016 1092/3087/539\nf 1405/4157/4061 4274/4156/4060 2377/4205/4109\nf 2377/4205/4109 7705/4206/4110 1405/4157/4061\nf 7689/4155/4059 7706/4207/4111 2377/4205/4109\nf 2377/4205/4109 4274/4156/4060 7689/4155/4059\nf 7707/4208/4112 7705/4206/4110 2377/4205/4109\nf 2377/4205/4109 7706/4207/4111 7707/4208/4112\nf 1105/3122/3063 4296/4209/4113 2378/4210/4114\nf 2378/4210/4114 3769/3117/3058 1105/3122/3063\nf 1412/4211/4115 4295/4212/4116 2378/4210/4114\nf 2378/4210/4114 4296/4209/4113 1412/4211/4115\nf 1411/4213/4117 4294/4214/4118 2378/4210/4114\nf 2378/4210/4114 4295/4212/4116 1411/4213/4117\nf 1104/3114/3055 3769/3117/3058 2378/4210/4114\nf 2378/4210/4114 4294/4214/4118 1104/3114/3055\nf 1104/3114/3055 4294/4214/4118 2379/4215/4119\nf 2379/4215/4119 4297/4216/4120 1104/3114/3055\nf 1411/4213/4117 4299/4217/4121 2379/4215/4119\nf 2379/4215/4119 4294/4214/4118 1411/4213/4117\nf 1414/4218/4122 4298/4219/4123 2379/4215/4119\nf 2379/4215/4119 4299/4217/4121 1414/4218/4122\nf 1413/4220/4124 4297/4216/4120 2379/4215/4119\nf 2379/4215/4119 4298/4219/4123 1413/4220/4124\nf 7708/4221/4125 7709/4222/4126 2380/4223/4127\nf 2380/4223/4127 4300/4224/4128 7708/4221/4125\nf 7710/4225/4129 4302/4226/4130 2380/4223/4127\nf 2380/4223/4127 7709/4222/4126 7710/4225/4129\nf 1415/4227/4131 4301/4228/4132 2380/4223/4127\nf 2380/4223/4127 4302/4226/4130 1415/4227/4131\nf 1160/3235/3176 4300/4224/4128 2380/4223/4127\nf 2380/4223/4127 4301/4228/4132 1160/3235/3176\nf 1160/3235/3176 4301/4228/4132 2381/4229/4133\nf 2381/4229/4133 3826/3236/3177 1160/3235/3176\nf 1415/4227/4131 4304/4230/4134 2381/4229/4133\nf 2381/4229/4133 4301/4228/4132 1415/4227/4131\nf 1416/4231/4135 4303/4232/4136 2381/4229/4133\nf 2381/4229/4133 4304/4230/4134 1416/4231/4135\nf 1159/3237/3178 3826/3236/3177 2381/4229/4133\nf 2381/4229/4133 4303/4232/4136 1159/3237/3178\nf 1159/3237/3178 4303/4232/4136 2382/4233/4137\nf 2382/4233/4137 4047/3679/3608 1159/3237/3178\nf 1416/4231/4135 4306/4234/4138 2382/4233/4137\nf 2382/4233/4137 4303/4232/4136 1416/4231/4135\nf 1417/4235/4139 4305/4236/4140 2382/4233/4137\nf 2382/4233/4137 4306/4234/4138 1417/4235/4139\nf 1207/3344/3285 4047/3679/3608 2382/4233/4137\nf 2382/4233/4137 4305/4236/4140 1207/3344/3285\nf 1207/3344/3285 4305/4236/4140 2383/4237/4141\nf 2383/4237/4141 3876/3345/3286 1207/3344/3285\nf 1417/4235/4139 4308/4238/4142 2383/4237/4141\nf 2383/4237/4141 4305/4236/4140 1417/4235/4139\nf 1418/4239/4143 4307/4240/4144 2383/4237/4141\nf 2383/4237/4141 4308/4238/4142 1418/4239/4143\nf 1206/3346/3287 3876/3345/3286 2383/4237/4141\nf 2383/4237/4141 4307/4240/4144 1206/3346/3287\nf 1206/3346/3287 4307/4240/4144 2384/4241/4145\nf 2384/4241/4145 4210/4014/3931 1206/3346/3287\nf 1418/4239/4143 4309/4242/4146 2384/4241/4145\nf 2384/4241/4145 4307/4240/4144 1418/4239/4143\nf 797/1767/1717 3163/1766/1716 2384/4241/4145\nf 2384/4241/4145 4309/4242/4146 797/1767/1717\nf 1387/1518/1482 4210/4014/3931 2384/4241/4145\nf 2384/4241/4145 3163/1766/1716 1387/1518/1482\nf 1383/1496/1460 4312/1770/1720 2385/4243/4147\nf 2385/4243/4147 4200/4003/3920 1383/1496/1460\nf 798/1774/1724 4311/4244/4148 2385/4243/4147\nf 2385/4243/4147 4312/1770/1720 798/1774/1724\nf 1419/4245/4149 4310/4246/4150 2385/4243/4147\nf 2385/4243/4147 4311/4244/4148 1419/4245/4149\nf 1182/3295/3236 4200/4003/3920 2385/4243/4147\nf 2385/4243/4147 4310/4246/4150 1182/3295/3236\nf 1182/3295/3236 4310/4246/4150 2386/4247/4151\nf 2386/4247/4151 3850/3290/3231 1182/3295/3236\nf 1419/4245/4149 4314/4248/4152 2386/4247/4151\nf 2386/4247/4151 4310/4246/4150 1419/4245/4149\nf 1420/4249/4153 4313/4250/4154 2386/4247/4151\nf 2386/4247/4151 4314/4248/4152 1420/4249/4153\nf 1181/3287/3228 3850/3290/3231 2386/4247/4151\nf 2386/4247/4151 4313/4250/4154 1181/3287/3228\nf 1181/3287/3228 4313/4250/4154 2387/4251/4155\nf 2387/4251/4155 4039/3664/3593 1181/3287/3228\nf 1420/4249/4153 4315/4252/4156 2387/4251/4155\nf 2387/4251/4155 4313/4250/4154 1420/4249/4153\nf 1412/4211/4115 4296/4209/4113 2387/4251/4155\nf 2387/4251/4155 4315/4252/4156 1412/4211/4115\nf 1105/3122/3063 4039/3664/3593 2387/4251/4155\nf 2387/4251/4155 4296/4209/4113 1105/3122/3063\nf 1412/4211/4115 4318/4253/4157 2388/4254/4158\nf 2388/4254/4158 4295/4212/4116 1412/4211/4115\nf 1422/4255/4159 4317/4256/4160 2388/4254/4158\nf 2388/4254/4158 4318/4253/4157 1422/4255/4159\nf 1421/4257/4161 4316/4258/4162 2388/4254/4158\nf 2388/4254/4158 4317/4256/4160 1421/4257/4161\nf 1411/4213/4117 4295/4212/4116 2388/4254/4158\nf 2388/4254/4158 4316/4258/4162 1411/4213/4117\nf 1411/4213/4117 4316/4258/4162 2389/4259/4163\nf 2389/4259/4163 4299/4217/4121 1411/4213/4117\nf 1421/4257/4161 4320/4260/4164 2389/4259/4163\nf 2389/4259/4163 4316/4258/4162 1421/4257/4161\nf 1423/4261/4165 4319/4262/4166 2389/4259/4163\nf 2389/4259/4163 4320/4260/4164 1423/4261/4165\nf 1414/4218/4122 4299/4217/4121 2389/4259/4163\nf 2389/4259/4163 4319/4262/4166 1414/4218/4122\nf 7710/4225/4129 7711/4263/4167 2390/4264/4168\nf 2390/4264/4168 4302/4226/4130 7710/4225/4129\nf 7712/4265/4169 4322/4266/4170 2390/4264/4168\nf 2390/4264/4168 7711/4263/4167 7712/4265/4169\nf 1424/4267/4171 4321/4268/4172 2390/4264/4168\nf 2390/4264/4168 4322/4266/4170 1424/4267/4171\nf 1415/4227/4131 4302/4226/4130 2390/4264/4168\nf 2390/4264/4168 4321/4268/4172 1415/4227/4131\nf 1415/4227/4131 4321/4268/4172 2391/4269/4173\nf 2391/4269/4173 4304/4230/4134 1415/4227/4131\nf 1424/4267/4171 4324/4270/4174 2391/4269/4173\nf 2391/4269/4173 4321/4268/4172 1424/4267/4171\nf 1425/4271/4175 4323/4272/4176 2391/4269/4173\nf 2391/4269/4173 4324/4270/4174 1425/4271/4175\nf 1416/4231/4135 4304/4230/4134 2391/4269/4173\nf 2391/4269/4173 4323/4272/4176 1416/4231/4135\nf 1416/4231/4135 4323/4272/4176 2392/4273/4177\nf 2392/4273/4177 4306/4234/4138 1416/4231/4135\nf 1425/4271/4175 4326/4274/4178 2392/4273/4177\nf 2392/4273/4177 4323/4272/4176 1425/4271/4175\nf 1426/4275/4179 4325/4276/4180 2392/4273/4177\nf 2392/4273/4177 4326/4274/4178 1426/4275/4179\nf 1417/4235/4139 4306/4234/4138 2392/4273/4177\nf 2392/4273/4177 4325/4276/4180 1417/4235/4139\nf 1417/4235/4139 4325/4276/4180 2393/4277/4181\nf 2393/4277/4181 4308/4238/4142 1417/4235/4139\nf 1426/4275/4179 4328/4278/4182 2393/4277/4181\nf 2393/4277/4181 4325/4276/4180 1426/4275/4179\nf 1427/4279/4183 4327/4280/4184 2393/4277/4181\nf 2393/4277/4181 4328/4278/4182 1427/4279/4183\nf 1418/4239/4143 4308/4238/4142 2393/4277/4181\nf 2393/4277/4181 4327/4280/4184 1418/4239/4143\nf 1418/4239/4143 4327/4280/4184 2394/4281/4185\nf 2394/4281/4185 4309/4242/4146 1418/4239/4143\nf 1427/4279/4183 4330/4282/4186 2394/4281/4185\nf 2394/4281/4185 4327/4280/4184 1427/4279/4183\nf 1428/1811/1761 4329/1810/1760 2394/4281/4185\nf 2394/4281/4185 4330/4282/4186 1428/1811/1761\nf 797/1767/1717 4309/4242/4146 2394/4281/4185\nf 2394/4281/4185 4329/1810/1760 797/1767/1717\nf 798/1774/1724 3183/1814/1764 2395/4283/4187\nf 2395/4283/4187 4311/4244/4148 798/1774/1724\nf 1430/1818/1768 4332/4284/4188 2395/4283/4187\nf 2395/4283/4187 3183/1814/1764 1430/1818/1768\nf 1429/4285/4189 4331/4286/4190 2395/4283/4187\nf 2395/4283/4187 4332/4284/4188 1429/4285/4189\nf 1419/4245/4149 4311/4244/4148 2395/4283/4187\nf 2395/4283/4187 4331/4286/4190 1419/4245/4149\nf 1419/4245/4149 4331/4286/4190 2396/4287/4191\nf 2396/4287/4191 4314/4248/4152 1419/4245/4149\nf 1429/4285/4189 4334/4288/4192 2396/4287/4191\nf 2396/4287/4191 4331/4286/4190 1429/4285/4189\nf 1431/4289/4193 4333/4290/4194 2396/4287/4191\nf 2396/4287/4191 4334/4288/4192 1431/4289/4193\nf 1420/4249/4153 4314/4248/4152 2396/4287/4191\nf 2396/4287/4191 4333/4290/4194 1420/4249/4153\nf 1420/4249/4153 4333/4290/4194 2397/4291/4195\nf 2397/4291/4195 4315/4252/4156 1420/4249/4153\nf 1431/4289/4193 4335/4292/4196 2397/4291/4195\nf 2397/4291/4195 4333/4290/4194 1431/4289/4193\nf 1422/4255/4159 4318/4253/4157 2397/4291/4195\nf 2397/4291/4195 4335/4292/4196 1422/4255/4159\nf 1412/4211/4115 4315/4252/4156 2397/4291/4195\nf 2397/4291/4195 4318/4253/4157 1412/4211/4115\nf 1163/706/696 4338/1826/1776 2398/4293/4197\nf 2398/4293/4197 3830/3242/3183 1163/706/696\nf 1433/1830/1780 4337/4294/4198 2398/4293/4197\nf 2398/4293/4197 4338/1826/1776 1433/1830/1780\nf 1432/4295/4199 4336/4296/4200 2398/4293/4197\nf 2398/4293/4197 4337/4294/4198 1432/4295/4199\nf 1162/3243/3184 3830/3242/3183 2398/4293/4197\nf 2398/4293/4197 4336/4296/4200 1162/3243/3184\nf 1162/3243/3184 4336/4296/4200 2399/4297/4201\nf 2399/4297/4201 4195/3993/3910 1162/3243/3184\nf 1432/4295/4199 4340/4298/4202 2399/4297/4201\nf 2399/4297/4201 4336/4296/4200 1432/4295/4199\nf 1434/4299/4203 4339/4300/4204 2399/4297/4201\nf 2399/4297/4201 4340/4298/4202 1434/4299/4203\nf 1209/3352/3293 4195/3993/3910 2399/4297/4201\nf 2399/4297/4201 4339/4300/4204 1209/3352/3293\nf 1209/3352/3293 4339/4300/4204 2400/4301/4205\nf 2400/4301/4205 3880/3353/3294 1209/3352/3293\nf 1434/4299/4203 4342/4302/4206 2400/4301/4205\nf 2400/4301/4205 4339/4300/4204 1434/4299/4203\nf 1435/4303/4207 4341/4304/4208 2400/4301/4205\nf 2400/4301/4205 4342/4302/4206 1435/4303/4207\nf 1208/3354/3295 3880/3353/3294 2400/4301/4205\nf 2400/4301/4205 4341/4304/4208 1208/3354/3295\nf 1208/3354/3295 4341/4304/4208 2401/4305/4209\nf 2401/4305/4209 4050/3684/3613 1208/3354/3295\nf 1435/4303/4207 4344/4306/4210 2401/4305/4209\nf 2401/4305/4209 4341/4304/4208 1435/4303/4207\nf 1436/4307/4211 4343/4308/4212 2401/4305/4209\nf 2401/4305/4209 4344/4306/4210 1436/4307/4211\nf 1166/3249/3190 4050/3684/3613 2401/4305/4209\nf 2401/4305/4209 4343/4308/4212 1166/3249/3190\nf 1166/3249/3190 4343/4308/4212 2402/4309/4213\nf 2402/4309/4213 3833/3250/3191 1166/3249/3190\nf 1436/4307/4211 4346/4310/4214 2402/4309/4213\nf 2402/4309/4213 4343/4308/4212 1436/4307/4211\nf 1437/4311/4215 4345/4312/4216 2402/4309/4213\nf 2402/4309/4213 4346/4310/4214 1437/4311/4215\nf 1165/3251/3192 3833/3250/3191 2402/4309/4213\nf 2402/4309/4213 4345/4312/4216 1165/3251/3192\nf 1165/3251/3192 4345/4312/4216 2403/4313/4217\nf 2403/4313/4217 4114/3800/3717 1165/3251/3192\nf 1437/4311/4215 4348/4314/4218 2403/4313/4217\nf 2403/4313/4217 4345/4312/4216 1437/4311/4215\nf 1438/4315/4219 4347/4316/4220 2403/4313/4217\nf 2403/4313/4217 4348/4314/4218 1438/4315/4219\nf 1302/3595/3530 4114/3800/3717 2403/4313/4217\nf 2403/4313/4217 4347/4316/4220 1302/3595/3530\nf 1302/3595/3530 4347/4316/4220 2404/4317/4221\nf 2404/4317/4221 4005/3596/3531 1302/3595/3530\nf 1438/4315/4219 4350/4318/4222 2404/4317/4221\nf 2404/4317/4221 4347/4316/4220 1438/4315/4219\nf 1439/4319/4223 4349/4320/4224 2404/4317/4221\nf 2404/4317/4221 4350/4318/4222 1439/4319/4223\nf 1301/3597/3532 4005/3596/3531 2404/4317/4221\nf 2404/4317/4221 4349/4320/4224 1301/3597/3532\nf 1301/3597/3532 4349/4320/4224 2405/4321/4225\nf 2405/4321/4225 4351/4322/4226 1301/3597/3532\nf 1439/4319/4223 4353/4323/4227 2405/4321/4225\nf 2405/4321/4225 4349/4320/4224 1439/4319/4223\nf 1441/4324/4228 4352/4325/4229 2405/4321/4225\nf 2405/4321/4225 4353/4323/4227 1441/4324/4228\nf 1440/4326/4230 4351/4322/4226 2405/4321/4225\nf 2405/4321/4225 4352/4325/4229 1440/4326/4230\nf 7713/4327/4231 7714/4328/4232 2406/4329/4233\nf 2406/4329/4233 4354/4330/4234 7713/4327/4231\nf 7715/4331/4235 4356/4332/4236 2406/4329/4233\nf 2406/4329/4233 7714/4328/4232 7715/4331/4235\nf 1442/4333/4237 4355/4334/4238 2406/4329/4233\nf 2406/4329/4233 4356/4332/4236 1442/4333/4237\nf 1349/3789/3706 4354/4330/4234 2406/4329/4233\nf 2406/4329/4233 4355/4334/4238 1349/3789/3706\nf 1349/3789/3706 4355/4334/4238 2407/4335/4239\nf 2407/4335/4239 4109/3790/3707 1349/3789/3706\nf 1442/4333/4237 4358/4336/4240 2407/4335/4239\nf 2407/4335/4239 4355/4334/4238 1442/4333/4237\nf 1443/4337/4241 4357/4338/4242 2407/4335/4239\nf 2407/4335/4239 4358/4336/4240 1443/4337/4241\nf 1334/3723/3652 4109/3790/3707 2407/4335/4239\nf 2407/4335/4239 4357/4338/4242 1334/3723/3652\nf 1334/3723/3652 4357/4338/4242 2408/4339/4243\nf 2408/4339/4243 4072/3724/3653 1334/3723/3652\nf 1443/4337/4241 4360/4340/4244 2408/4339/4243\nf 2408/4339/4243 4357/4338/4242 1443/4337/4241\nf 1444/4341/4245 4359/4342/4246 2408/4339/4243\nf 2408/4339/4243 4360/4340/4244 1444/4341/4245\nf 1333/3725/3654 4072/3724/3653 2408/4339/4243\nf 2408/4339/4243 4359/4342/4246 1333/3725/3654\nf 1333/3725/3654 4359/4342/4246 2409/4343/4247\nf 2409/4343/4247 4107/3784/3701 1333/3725/3654\nf 1444/4341/4245 4362/4344/4248 2409/4343/4247\nf 2409/4343/4247 4359/4342/4246 1444/4341/4245\nf 1445/4345/4249 4361/4346/4250 2409/4343/4247\nf 2409/4343/4247 4362/4344/4248 1445/4345/4249\nf 1348/3786/3703 4107/3784/3701 2409/4343/4247\nf 2409/4343/4247 4361/4346/4250 1348/3786/3703\nf 1348/3786/3703 4361/4346/4250 2410/4347/4251\nf 2410/4347/4251 4230/4047/3961 1348/3786/3703\nf 1445/4345/4249 4364/4348/4252 2410/4347/4251\nf 2410/4347/4251 4361/4346/4250 1445/4345/4249\nf 1446/1883/1833 4363/1882/1832 2410/4347/4251\nf 2410/4347/4251 4364/4348/4252 1446/1883/1833\nf 1392/1557/1517 4230/4047/3961 2410/4347/4251\nf 2410/4347/4251 4363/1882/1832 1392/1557/1517\nf 1433/1830/1780 4367/1886/1836 2411/4349/4253\nf 2411/4349/4253 4337/4294/4198 1433/1830/1780\nf 822/1890/1840 4366/4350/4254 2411/4349/4253\nf 2411/4349/4253 4367/1886/1836 822/1890/1840\nf 1447/4351/4255 4365/4352/4256 2411/4349/4253\nf 2411/4349/4253 4366/4350/4254 1447/4351/4255\nf 1432/4295/4199 4337/4294/4198 2411/4349/4253\nf 2411/4349/4253 4365/4352/4256 1432/4295/4199\nf 1432/4295/4199 4365/4352/4256 2412/4353/4257\nf 2412/4353/4257 4340/4298/4202 1432/4295/4199\nf 1447/4351/4255 4369/4354/4258 2412/4353/4257\nf 2412/4353/4257 4365/4352/4256 1447/4351/4255\nf 1448/4355/4259 4368/4356/4260 2412/4353/4257\nf 2412/4353/4257 4369/4354/4258 1448/4355/4259\nf 1434/4299/4203 4340/4298/4202 2412/4353/4257\nf 2412/4353/4257 4368/4356/4260 1434/4299/4203\nf 1434/4299/4203 4368/4356/4260 2413/4357/4261\nf 2413/4357/4261 4342/4302/4206 1434/4299/4203\nf 1448/4355/4259 4371/4358/4262 2413/4357/4261\nf 2413/4357/4261 4368/4356/4260 1448/4355/4259\nf 1449/4359/4263 4370/4360/4264 2413/4357/4261\nf 2413/4357/4261 4371/4358/4262 1449/4359/4263\nf 1435/4303/4207 4342/4302/4206 2413/4357/4261\nf 2413/4357/4261 4370/4360/4264 1435/4303/4207\nf 1435/4303/4207 4370/4360/4264 2414/4361/4265\nf 2414/4361/4265 4344/4306/4210 1435/4303/4207\nf 1449/4359/4263 4373/4362/4266 2414/4361/4265\nf 2414/4361/4265 4370/4360/4264 1449/4359/4263\nf 1450/4363/4267 4372/4364/4268 2414/4361/4265\nf 2414/4361/4265 4373/4362/4266 1450/4363/4267\nf 1436/4307/4211 4344/4306/4210 2414/4361/4265\nf 2414/4361/4265 4372/4364/4268 1436/4307/4211\nf 1436/4307/4211 4372/4364/4268 2415/4365/4269\nf 2415/4365/4269 4346/4310/4214 1436/4307/4211\nf 1450/4363/4267 4375/4366/4270 2415/4365/4269\nf 2415/4365/4269 4372/4364/4268 1450/4363/4267\nf 1451/4367/4271 4374/4368/4272 2415/4365/4269\nf 2415/4365/4269 4375/4366/4270 1451/4367/4271\nf 1437/4311/4215 4346/4310/4214 2415/4365/4269\nf 2415/4365/4269 4374/4368/4272 1437/4311/4215\nf 1437/4311/4215 4374/4368/4272 2416/4369/4273\nf 2416/4369/4273 4348/4314/4218 1437/4311/4215\nf 1451/4367/4271 4377/4370/4274 2416/4369/4273\nf 2416/4369/4273 4374/4368/4272 1451/4367/4271\nf 1452/4371/4275 4376/4372/4276 2416/4369/4273\nf 2416/4369/4273 4377/4370/4274 1452/4371/4275\nf 1438/4315/4219 4348/4314/4218 2416/4369/4273\nf 2416/4369/4273 4376/4372/4276 1438/4315/4219\nf 1438/4315/4219 4376/4372/4276 2417/4373/4277\nf 2417/4373/4277 4350/4318/4222 1438/4315/4219\nf 1452/4371/4275 4379/4374/4278 2417/4373/4277\nf 2417/4373/4277 4376/4372/4276 1452/4371/4275\nf 1453/4375/4279 4378/4376/4280 2417/4373/4277\nf 2417/4373/4277 4379/4374/4278 1453/4375/4279\nf 1439/4319/4223 4350/4318/4222 2417/4373/4277\nf 2417/4373/4277 4378/4376/4280 1439/4319/4223\nf 1439/4319/4223 4378/4376/4280 2418/4377/4281\nf 2418/4377/4281 4353/4323/4227 1439/4319/4223\nf 1453/4375/4279 4381/4378/4282 2418/4377/4281\nf 2418/4377/4281 4378/4376/4280 1453/4375/4279\nf 1454/4379/4283 4380/4380/4284 2418/4377/4281\nf 2418/4377/4281 4381/4378/4282 1454/4379/4283\nf 1441/4324/4228 4353/4323/4227 2418/4377/4281\nf 2418/4377/4281 4380/4380/4284 1441/4324/4228\nf 7715/4331/4235 7716/4381/4285 2419/4382/4286\nf 2419/4382/4286 4356/4332/4236 7715/4331/4235\nf 7717/4383/4287 4383/4384/4288 2419/4382/4286\nf 2419/4382/4286 7716/4381/4285 7717/4383/4287\nf 1455/4385/4289 4382/4386/4290 2419/4382/4286\nf 2419/4382/4286 4383/4384/4288 1455/4385/4289\nf 1442/4333/4237 4356/4332/4236 2419/4382/4286\nf 2419/4382/4286 4382/4386/4290 1442/4333/4237\nf 1442/4333/4237 4382/4386/4290 2420/4387/4291\nf 2420/4387/4291 4358/4336/4240 1442/4333/4237\nf 1455/4385/4289 4385/4388/4292 2420/4387/4291\nf 2420/4387/4291 4382/4386/4290 1455/4385/4289\nf 1456/4389/4293 4384/4390/4294 2420/4387/4291\nf 2420/4387/4291 4385/4388/4292 1456/4389/4293\nf 1443/4337/4241 4358/4336/4240 2420/4387/4291\nf 2420/4387/4291 4384/4390/4294 1443/4337/4241\nf 1443/4337/4241 4384/4390/4294 2421/4391/4295\nf 2421/4391/4295 4360/4340/4244 1443/4337/4241\nf 1456/4389/4293 4387/4392/4296 2421/4391/4295\nf 2421/4391/4295 4384/4390/4294 1456/4389/4293\nf 1457/4393/4297 4386/4394/4298 2421/4391/4295\nf 2421/4391/4295 4387/4392/4296 1457/4393/4297\nf 1444/4341/4245 4360/4340/4244 2421/4391/4295\nf 2421/4391/4295 4386/4394/4298 1444/4341/4245\nf 1444/4341/4245 4386/4394/4298 2422/4395/4299\nf 2422/4395/4299 4362/4344/4248 1444/4341/4245\nf 1457/4393/4297 4389/4396/4300 2422/4395/4299\nf 2422/4395/4299 4386/4394/4298 1457/4393/4297\nf 1458/4397/4301 4388/4398/4302 2422/4395/4299\nf 2422/4395/4299 4389/4396/4300 1458/4397/4301\nf 1445/4345/4249 4362/4344/4248 2422/4395/4299\nf 2422/4395/4299 4388/4398/4302 1445/4345/4249\nf 1445/4345/4249 4388/4398/4302 2423/4399/4303\nf 2423/4399/4303 4364/4348/4252 1445/4345/4249\nf 1458/4397/4301 4391/4400/4304 2423/4399/4303\nf 2423/4399/4303 4388/4398/4302 1458/4397/4301\nf 835/1939/1889 4390/1938/1888 2423/4399/4303\nf 2423/4399/4303 4391/4400/4304 835/1939/1889\nf 1446/1883/1833 4364/4348/4252 2423/4399/4303\nf 2423/4399/4303 4390/1938/1888 1446/1883/1833\nf 1136/3188/3129 3802/3187/3128 2424/4401/4305\nf 2424/4401/4305 4392/4402/4306 1136/3188/3129\nf 1137/3186/3127 4393/4403/4307 2424/4401/4305\nf 2424/4401/4305 3802/3187/3128 1137/3186/3127\nf 1221/3383/3324 3897/3380/3321 2424/4401/4305\nf 2424/4401/4305 4393/4403/4307 1221/3383/3324\nf 1218/3379/3320 4392/4402/4306 2424/4401/4305\nf 2424/4401/4305 3897/3380/3321 1218/3379/3320\nf 1150/3221/3162 3817/3220/3161 2425/4404/4308\nf 2425/4404/4308 4020/3630/3565 1150/3221/3162\nf 1151/3219/3160 4131/3834/3751 2425/4404/4308\nf 2425/4404/4308 3817/3220/3161 1151/3219/3160\nf 1225/3392/3333 3901/3389/3330 2425/4404/4308\nf 2425/4404/4308 4131/3834/3751 1225/3392/3333\nf 1222/3388/3329 4020/3630/3565 2425/4404/4308\nf 2425/4404/4308 3901/3389/3330 1222/3388/3329\nf 1168/3262/3203 3836/3261/3202 2426/4405/4309\nf 2426/4405/4309 7718/4406/4310 1168/3262/3203\nf 1169/3260/3201 4394/4407/4311 2426/4405/4309\nf 2426/4405/4309 3836/3261/3202 1169/3260/3201\nf 1229/3401/3342 3905/3398/3339 2426/4405/4309\nf 2426/4405/4309 4394/4407/4311 1229/3401/3342\nf 1226/3397/3338 7718/4406/4310 2426/4405/4309\nf 2426/4405/4309 3905/3398/3339 1226/3397/3338\nf 1213/3371/3312 3887/3370/3311 2427/4408/4312\nf 2427/4408/4312 4395/4409/4313 1213/3371/3312\nf 1214/3369/3310 4396/4410/4314 2427/4408/4312\nf 2427/4408/4312 3887/3370/3311 1214/3369/3310\nf 1103/3109/3050 3768/3106/3047 2427/4408/4312\nf 2427/4408/4312 4396/4410/4314 1103/3109/3050\nf 1100/3105/3046 4395/4409/4313 2427/4408/4312\nf 2427/4408/4312 3768/3106/3047 1100/3105/3046\nf 1216/3378/3319 3891/3377/3318 2428/4411/4315\nf 2428/4411/4315 4211/4018/3935 1216/3378/3319\nf 1217/3376/3317 4054/3687/3616 2428/4411/4315\nf 2428/4411/4315 3891/3377/3318 1217/3376/3317\nf 1109/3131/3072 4040/3666/3595 2428/4411/4315\nf 2428/4411/4315 4054/3687/3616 1109/3131/3072\nf 1185/3296/3237 4211/4018/3935 2428/4411/4315\nf 2428/4411/4315 4040/3666/3595 1185/3296/3237\nf 1231/874/864 3907/3410/3351 2429/4412/4316\nf 2429/4412/4316 4397/1952/1902 1231/874/864\nf 1232/3409/3350 4213/4015/3932 2429/4412/4316\nf 2429/4412/4316 3907/3410/3351 1232/3409/3350\nf 1186/3304/3245 4202/4005/3922 2429/4412/4316\nf 2429/4412/4316 4213/4015/3932 1186/3304/3245\nf 1384/1500/1464 4397/1952/1902 2429/4412/4316\nf 2429/4412/4316 4202/4005/3922 1384/1500/1464\nf 1150/3221/3162 4021/3629/3564 2430/4413/4317\nf 2430/4413/4317 3816/3216/3157 1150/3221/3162\nf 1312/3628/3563 4398/4414/4318 2430/4413/4317\nf 2430/4413/4317 4021/3629/3564 1312/3628/3563\nf 1319/3649/3584 4032/3652/3587 2430/4413/4317\nf 2430/4413/4317 4398/4414/4318 1319/3649/3584\nf 1149/3213/3154 3816/3216/3157 2430/4413/4317\nf 2430/4413/4317 4032/3652/3587 1149/3213/3154\nf 1325/3690/3619 4053/3689/3618 2431/4415/4319\nf 2431/4415/4319 4399/4416/4320 1325/3690/3619\nf 1217/3376/3317 3892/3375/3316 2431/4415/4319\nf 2431/4415/4319 4053/3689/3618 1217/3376/3317\nf 1106/3120/3061 3771/3119/3060 2431/4415/4319\nf 2431/4415/4319 3892/3375/3316 1106/3120/3061\nf 1107/3118/3059 4399/4416/4320 2431/4415/4319\nf 2431/4415/4319 3771/3119/3060 1107/3118/3059\nf 7629/3838/3755 4130/3837/3754 2432/4417/4321\nf 2432/4417/4321 7719/4418/4322 7629/3838/3755\nf 1151/3219/3160 3818/3218/3159 2432/4417/4321\nf 2432/4417/4321 4130/3837/3754 1151/3219/3160\nf 1152/3217/3158 4147/3880/3797 2432/4417/4321\nf 2432/4417/4321 3818/3218/3159 1152/3217/3158\nf 7645/3882/3799 7719/4418/4322 2432/4417/4321\nf 2432/4417/4321 4147/3880/3797 7645/3882/3799\nf 1216/3378/3319 4212/4017/3934 2433/4419/4323\nf 2433/4419/4323 3890/3374/3315 1216/3378/3319\nf 1232/3409/3350 3908/3408/3349 2433/4419/4323\nf 2433/4419/4323 4212/4017/3934 1232/3409/3350\nf 1183/3293/3234 3852/3292/3233 2433/4419/4323\nf 2433/4419/4323 3908/3408/3349 1183/3293/3234\nf 1184/3291/3232 3890/3374/3315 2433/4419/4323\nf 2433/4419/4323 3852/3292/3233 1184/3291/3232\nf 1325/3690/3619 4402/4420/4324 2434/4421/4325\nf 2434/4421/4325 4052/3691/3620 1325/3690/3619\nf 1460/4422/4326 4401/4423/4327 2434/4421/4325\nf 2434/4421/4325 4402/4420/4324 1460/4422/4326\nf 1459/4424/4328 4400/4425/4329 2434/4421/4325\nf 2434/4421/4325 4401/4423/4327 1459/4424/4328\nf 1108/3123/3064 4052/3691/3620 2434/4421/4325\nf 2434/4421/4325 4400/4425/4329 1108/3123/3064\nf 1108/3123/3064 4400/4425/4329 2435/4426/4330\nf 2435/4426/4330 4403/4427/4331 1108/3123/3064\nf 1459/4424/4328 4405/4428/4332 2435/4426/4330\nf 2435/4426/4330 4400/4425/4329 1459/4424/4328\nf 1462/4429/4333 4404/4430/4334 2435/4426/4330\nf 2435/4426/4330 4405/4428/4332 1462/4429/4333\nf 1461/4431/4335 4403/4427/4331 2435/4426/4330\nf 2435/4426/4330 4404/4430/4334 1461/4431/4335\nf 7720/4432/4336 7721/4433/4337 2436/4434/4338\nf 2436/4434/4338 4406/4435/4339 7720/4432/4336\nf 7722/4436/4340 4408/4437/4341 2436/4434/4338\nf 2436/4434/4338 7721/4433/4337 7722/4436/4340\nf 1463/4438/4342 4407/4439/4343 2436/4434/4338\nf 2436/4434/4338 4408/4437/4341 1463/4438/4342\nf 1170/3258/3199 4406/4435/4339 2436/4434/4338\nf 2436/4434/4338 4407/4439/4343 1170/3258/3199\nf 1170/3258/3199 4407/4439/4343 2437/4440/4344\nf 2437/4440/4344 3837/3259/3200 1170/3258/3199\nf 1463/4438/4342 4410/4441/4345 2437/4440/4344\nf 2437/4440/4344 4407/4439/4343 1463/4438/4342\nf 1464/4442/4346 4409/4443/4347 2437/4440/4344\nf 2437/4440/4344 4410/4441/4345 1464/4442/4346\nf 1169/3260/3201 3837/3259/3200 2437/4440/4344\nf 2437/4440/4344 4409/4443/4347 1169/3260/3201\nf 1169/3260/3201 4409/4443/4347 2438/4444/4348\nf 2438/4444/4348 4394/4407/4311 1169/3260/3201\nf 1464/4442/4346 4412/4445/4349 2438/4444/4348\nf 2438/4444/4348 4409/4443/4347 1464/4442/4346\nf 1465/4446/4350 4411/4447/4351 2438/4444/4348\nf 2438/4444/4348 4412/4445/4349 1465/4446/4350\nf 1229/3401/3342 4394/4407/4311 2438/4444/4348\nf 2438/4444/4348 4411/4447/4351 1229/3401/3342\nf 1229/3401/3342 4411/4447/4351 2439/4448/4352\nf 2439/4448/4352 3904/3402/3343 1229/3401/3342\nf 1465/4446/4350 4414/4449/4353 2439/4448/4352\nf 2439/4448/4352 4411/4447/4351 1465/4446/4350\nf 1466/4450/4354 4413/4451/4355 2439/4448/4352\nf 2439/4448/4352 4414/4449/4353 1466/4450/4354\nf 1228/3403/3344 3904/3402/3343 2439/4448/4352\nf 2439/4448/4352 4413/4451/4355 1228/3403/3344\nf 1228/3403/3344 4413/4451/4355 2440/4452/4356\nf 2440/4452/4356 3998/3581/3516 1228/3403/3344\nf 1466/4450/4354 4416/4453/4357 2440/4452/4356\nf 2440/4452/4356 4413/4451/4355 1466/4450/4354\nf 1467/4454/4358 4415/4455/4359 2440/4452/4356\nf 2440/4452/4356 4416/4453/4357 1467/4454/4358\nf 1160/3235/3176 3998/3581/3516 2440/4452/4356\nf 2440/4452/4356 4415/4455/4359 1160/3235/3176\nf 1160/3235/3176 4415/4455/4359 2441/4456/4360\nf 2441/4456/4360 4300/4224/4128 1160/3235/3176\nf 1467/4454/4358 4418/4457/4361 2441/4456/4360\nf 2441/4456/4360 4415/4455/4359 1467/4454/4358\nf 1468/4458/4362 4417/4459/4363 2441/4456/4360\nf 2441/4456/4360 4418/4457/4361 1468/4458/4362\nf 7708/4221/4125 4300/4224/4128 2441/4456/4360\nf 2441/4456/4360 4417/4459/4363 7708/4221/4125\nf 1413/4220/4124 7723/4460/4364 2442/4461/4365\nf 2442/4461/4365 4297/4216/4120 1413/4220/4124\nf 7724/4462/4366 4420/4463/4367 2442/4461/4365\nf 2442/4461/4365 7723/4460/4364 7724/4462/4366\nf 1469/4464/4368 4419/4465/4369 2442/4461/4365\nf 2442/4461/4365 4420/4463/4367 1469/4464/4368\nf 1104/3114/3055 4297/4216/4120 2442/4461/4365\nf 2442/4461/4365 4419/4465/4369 1104/3114/3055\nf 1104/3114/3055 4419/4465/4369 2443/4466/4370\nf 2443/4466/4370 3772/3115/3056 1104/3114/3055\nf 1469/4464/4368 4422/4467/4371 2443/4466/4370\nf 2443/4466/4370 4419/4465/4369 1469/4464/4368\nf 1470/4468/4372 4421/4469/4373 2443/4466/4370\nf 2443/4466/4370 4422/4467/4371 1470/4468/4372\nf 1107/3118/3059 3772/3115/3056 2443/4466/4370\nf 2443/4466/4370 4421/4469/4373 1107/3118/3059\nf 1107/3118/3059 4421/4469/4373 2444/4470/4374\nf 2444/4470/4374 4399/4416/4320 1107/3118/3059\nf 1470/4468/4372 4423/4471/4375 2444/4470/4374\nf 2444/4470/4374 4421/4469/4373 1470/4468/4372\nf 1460/4422/4326 4402/4420/4324 2444/4470/4374\nf 2444/4470/4374 4423/4471/4375 1460/4422/4326\nf 1325/3690/3619 4399/4416/4320 2444/4470/4374\nf 2444/4470/4374 4402/4420/4324 1325/3690/3619\nf 1111/3127/3068 4426/4472/4376 2445/4473/4377\nf 2445/4473/4377 4064/3709/3638 1111/3127/3068\nf 1472/4474/4378 4425/4475/4379 2445/4473/4377\nf 2445/4473/4377 4426/4472/4376 1472/4474/4378\nf 1471/4476/4380 4424/4477/4381 2445/4473/4377\nf 2445/4473/4377 4425/4475/4379 1471/4476/4380\nf 1331/3710/3639 4064/3709/3638 2445/4473/4377\nf 2445/4473/4377 4424/4477/4381 1331/3710/3639\nf 1331/3710/3639 4424/4477/4381 2446/4478/4382\nf 2446/4478/4382 4108/3792/3709 1331/3710/3639\nf 1471/4476/4380 4428/4479/4383 2446/4478/4382\nf 2446/4478/4382 4424/4477/4381 1471/4476/4380\nf 1473/4480/4384 4427/4481/4385 2446/4478/4382\nf 2446/4478/4382 4428/4479/4383 1473/4480/4384\nf 1349/3789/3706 4108/3792/3709 2446/4478/4382\nf 2446/4478/4382 4427/4481/4385 1349/3789/3706\nf 1349/3789/3706 4427/4481/4385 2447/4482/4386\nf 2447/4482/4386 4354/4330/4234 1349/3789/3706\nf 1473/4480/4384 4430/4483/4387 2447/4482/4386\nf 2447/4482/4386 4427/4481/4385 1473/4480/4384\nf 1474/4484/4388 4429/4485/4389 2447/4482/4386\nf 2447/4482/4386 4430/4483/4387 1474/4484/4388\nf 7713/4327/4231 4354/4330/4234 2447/4482/4386\nf 2447/4482/4386 4429/4485/4389 7713/4327/4231\nf 1440/4326/4230 7725/4486/4390 2448/4487/4391\nf 2448/4487/4391 4351/4322/4226 1440/4326/4230\nf 7726/4488/4392 4432/4489/4393 2448/4487/4391\nf 2448/4487/4391 7725/4486/4390 7726/4488/4392\nf 1475/4490/4394 4431/4491/4395 2448/4487/4391\nf 2448/4487/4391 4432/4489/4393 1475/4490/4394\nf 1301/3597/3532 4351/4322/4226 2448/4487/4391\nf 2448/4487/4391 4431/4491/4395 1301/3597/3532\nf 1301/3597/3532 4431/4491/4395 2449/4492/4396\nf 2449/4492/4396 4104/3783/3700 1301/3597/3532\nf 1475/4490/4394 4434/4493/4397 2449/4492/4396\nf 2449/4492/4396 4431/4491/4395 1475/4490/4394\nf 1476/4494/4398 4433/4495/4399 2449/4492/4396\nf 2449/4492/4396 4434/4493/4397 1476/4494/4398\nf 1266/3483/3418 4104/3783/3700 2449/4492/4396\nf 2449/4492/4396 4433/4495/4399 1266/3483/3418\nf 1266/3483/3418 4433/4495/4399 2450/4496/4400\nf 2450/4496/4400 3947/3484/3419 1266/3483/3418\nf 1476/4494/4398 4436/4497/4401 2450/4496/4400\nf 2450/4496/4400 4433/4495/4399 1476/4494/4398\nf 1477/4498/4402 4435/4499/4403 2450/4496/4400\nf 2450/4496/4400 4436/4497/4401 1477/4498/4402\nf 1265/3485/3420 3947/3484/3419 2450/4496/4400\nf 2450/4496/4400 4435/4499/4403 1265/3485/3420\nf 1265/3485/3420 4435/4499/4403 2451/4500/4404\nf 2451/4500/4404 3966/3519/3454 1265/3485/3420\nf 1477/4498/4402 4438/4501/4405 2451/4500/4404\nf 2451/4500/4404 4435/4499/4403 1477/4498/4402\nf 1478/4502/4406 4437/4503/4407 2451/4500/4404\nf 2451/4500/4404 4438/4501/4405 1478/4502/4406\nf 1170/3258/3199 3966/3519/3454 2451/4500/4404\nf 2451/4500/4404 4437/4503/4407 1170/3258/3199\nf 1170/3258/3199 4437/4503/4407 2452/4504/4408\nf 2452/4504/4408 4406/4435/4339 1170/3258/3199\nf 1478/4502/4406 4440/4505/4409 2452/4504/4408\nf 2452/4504/4408 4437/4503/4407 1478/4502/4406\nf 1479/4506/4410 4439/4507/4411 2452/4504/4408\nf 2452/4504/4408 4440/4505/4409 1479/4506/4410\nf 7720/4432/4336 4406/4435/4339 2452/4504/4408\nf 2452/4504/4408 4439/4507/4411 7720/4432/4336\nf 1461/4431/4335 7727/4508/4412 2453/4509/4413\nf 2453/4509/4413 4403/4427/4331 1461/4431/4335\nf 7728/4510/4414 4442/4511/4415 2453/4509/4413\nf 2453/4509/4413 7727/4508/4412 7728/4510/4414\nf 1480/4512/4416 4441/4513/4417 2453/4509/4413\nf 2453/4509/4413 4442/4511/4415 1480/4512/4416\nf 1108/3123/3064 4403/4427/4331 2453/4509/4413\nf 2453/4509/4413 4441/4513/4417 1108/3123/3064\nf 1108/3123/3064 4441/4513/4417 2454/4514/4418\nf 2454/4514/4418 3776/3124/3065 1108/3123/3064\nf 1480/4512/4416 4443/4515/4419 2454/4514/4418\nf 2454/4514/4418 4441/4513/4417 1480/4512/4416\nf 1472/4474/4378 4426/4472/4376 2454/4514/4418\nf 2454/4514/4418 4443/4515/4419 1472/4474/4378\nf 1111/3127/3068 3776/3124/3065 2454/4514/4418\nf 2454/4514/4418 4426/4472/4376 1111/3127/3068\nf 1460/4422/4326 4446/4516/4420 2455/4517/4421\nf 2455/4517/4421 4401/4423/4327 1460/4422/4326\nf 1482/4518/4422 4445/4519/4423 2455/4517/4421\nf 2455/4517/4421 4446/4516/4420 1482/4518/4422\nf 1481/4520/4424 4444/4521/4425 2455/4517/4421\nf 2455/4517/4421 4445/4519/4423 1481/4520/4424\nf 1459/4424/4328 4401/4423/4327 2455/4517/4421\nf 2455/4517/4421 4444/4521/4425 1459/4424/4328\nf 1459/4424/4328 4444/4521/4425 2456/4522/4426\nf 2456/4522/4426 4405/4428/4332 1459/4424/4328\nf 1481/4520/4424 4448/4523/4427 2456/4522/4426\nf 2456/4522/4426 4444/4521/4425 1481/4520/4424\nf 1483/4524/4428 4447/4525/4429 2456/4522/4426\nf 2456/4522/4426 4448/4523/4427 1483/4524/4428\nf 1462/4429/4333 4405/4428/4332 2456/4522/4426\nf 2456/4522/4426 4447/4525/4429 1462/4429/4333\nf 7722/4436/4340 7729/4526/4430 2457/4527/4431\nf 2457/4527/4431 4408/4437/4341 7722/4436/4340\nf 7730/4528/4432 4450/4529/4433 2457/4527/4431\nf 2457/4527/4431 7729/4526/4430 7730/4528/4432\nf 1484/4530/4434 4449/4531/4435 2457/4527/4431\nf 2457/4527/4431 4450/4529/4433 1484/4530/4434\nf 1463/4438/4342 4408/4437/4341 2457/4527/4431\nf 2457/4527/4431 4449/4531/4435 1463/4438/4342\nf 1463/4438/4342 4449/4531/4435 2458/4532/4436\nf 2458/4532/4436 4410/4441/4345 1463/4438/4342\nf 1484/4530/4434 4452/4533/4437 2458/4532/4436\nf 2458/4532/4436 4449/4531/4435 1484/4530/4434\nf 1485/4534/4438 4451/4535/4439 2458/4532/4436\nf 2458/4532/4436 4452/4533/4437 1485/4534/4438\nf 1464/4442/4346 4410/4441/4345 2458/4532/4436\nf 2458/4532/4436 4451/4535/4439 1464/4442/4346\nf 1464/4442/4346 4451/4535/4439 2459/4536/4440\nf 2459/4536/4440 4412/4445/4349 1464/4442/4346\nf 1485/4534/4438 4454/4537/4441 2459/4536/4440\nf 2459/4536/4440 4451/4535/4439 1485/4534/4438\nf 1486/4538/4442 4453/4539/4443 2459/4536/4440\nf 2459/4536/4440 4454/4537/4441 1486/4538/4442\nf 1465/4446/4350 4412/4445/4349 2459/4536/4440\nf 2459/4536/4440 4453/4539/4443 1465/4446/4350\nf 1465/4446/4350 4453/4539/4443 2460/4540/4444\nf 2460/4540/4444 4414/4449/4353 1465/4446/4350\nf 1486/4538/4442 4456/4541/4445 2460/4540/4444\nf 2460/4540/4444 4453/4539/4443 1486/4538/4442\nf 1487/4542/4446 4455/4543/4447 2460/4540/4444\nf 2460/4540/4444 4456/4541/4445 1487/4542/4446\nf 1466/4450/4354 4414/4449/4353 2460/4540/4444\nf 2460/4540/4444 4455/4543/4447 1466/4450/4354\nf 1466/4450/4354 4455/4543/4447 2461/4544/4448\nf 2461/4544/4448 4416/4453/4357 1466/4450/4354\nf 1487/4542/4446 4458/4545/4449 2461/4544/4448\nf 2461/4544/4448 4455/4543/4447 1487/4542/4446\nf 1488/4546/4450 4457/4547/4451 2461/4544/4448\nf 2461/4544/4448 4458/4545/4449 1488/4546/4450\nf 1467/4454/4358 4416/4453/4357 2461/4544/4448\nf 2461/4544/4448 4457/4547/4451 1467/4454/4358\nf 1467/4454/4358 4457/4547/4451 2462/4548/4452\nf 2462/4548/4452 4418/4457/4361 1467/4454/4358\nf 1488/4546/4450 4460/4549/4453 2462/4548/4452\nf 2462/4548/4452 4457/4547/4451 1488/4546/4450\nf 1489/4550/4454 4459/4551/4455 2462/4548/4452\nf 2462/4548/4452 4460/4549/4453 1489/4550/4454\nf 1468/4458/4362 4418/4457/4361 2462/4548/4452\nf 2462/4548/4452 4459/4551/4455 1468/4458/4362\nf 7724/4462/4366 7731/4552/4456 2463/4553/4457\nf 2463/4553/4457 4420/4463/4367 7724/4462/4366\nf 7732/4554/4458 4462/4555/4459 2463/4553/4457\nf 2463/4553/4457 7731/4552/4456 7732/4554/4458\nf 1490/4556/4460 4461/4557/4461 2463/4553/4457\nf 2463/4553/4457 4462/4555/4459 1490/4556/4460\nf 1469/4464/4368 4420/4463/4367 2463/4553/4457\nf 2463/4553/4457 4461/4557/4461 1469/4464/4368\nf 1469/4464/4368 4461/4557/4461 2464/4558/4462\nf 2464/4558/4462 4422/4467/4371 1469/4464/4368\nf 1490/4556/4460 4464/4559/4463 2464/4558/4462\nf 2464/4558/4462 4461/4557/4461 1490/4556/4460\nf 1491/4560/4464 4463/4561/4465 2464/4558/4462\nf 2464/4558/4462 4464/4559/4463 1491/4560/4464\nf 1470/4468/4372 4422/4467/4371 2464/4558/4462\nf 2464/4558/4462 4463/4561/4465 1470/4468/4372\nf 1470/4468/4372 4463/4561/4465 2465/4562/4466\nf 2465/4562/4466 4423/4471/4375 1470/4468/4372\nf 1491/4560/4464 4465/4563/4467 2465/4562/4466\nf 2465/4562/4466 4463/4561/4465 1491/4560/4464\nf 1482/4518/4422 4446/4516/4420 2465/4562/4466\nf 2465/4562/4466 4465/4563/4467 1482/4518/4422\nf 1460/4422/4326 4423/4471/4375 2465/4562/4466\nf 2465/4562/4466 4446/4516/4420 1460/4422/4326\nf 1472/4474/4378 4468/4564/4468 2466/4565/4469\nf 2466/4565/4469 4425/4475/4379 1472/4474/4378\nf 1493/4566/4470 4467/4567/4471 2466/4565/4469\nf 2466/4565/4469 4468/4564/4468 1493/4566/4470\nf 1492/4568/4472 4466/4569/4473 2466/4565/4469\nf 2466/4565/4469 4467/4567/4471 1492/4568/4472\nf 1471/4476/4380 4425/4475/4379 2466/4565/4469\nf 2466/4565/4469 4466/4569/4473 1471/4476/4380\nf 1471/4476/4380 4466/4569/4473 2467/4570/4474\nf 2467/4570/4474 4428/4479/4383 1471/4476/4380\nf 1492/4568/4472 4470/4571/4475 2467/4570/4474\nf 2467/4570/4474 4466/4569/4473 1492/4568/4472\nf 1494/4572/4476 4469/4573/4477 2467/4570/4474\nf 2467/4570/4474 4470/4571/4475 1494/4572/4476\nf 1473/4480/4384 4428/4479/4383 2467/4570/4474\nf 2467/4570/4474 4469/4573/4477 1473/4480/4384\nf 1473/4480/4384 4469/4573/4477 2468/4574/4478\nf 2468/4574/4478 4430/4483/4387 1473/4480/4384\nf 1494/4572/4476 4472/4575/4479 2468/4574/4478\nf 2468/4574/4478 4469/4573/4477 1494/4572/4476\nf 1495/4576/4480 4471/4577/4481 2468/4574/4478\nf 2468/4574/4478 4472/4575/4479 1495/4576/4480\nf 1474/4484/4388 4430/4483/4387 2468/4574/4478\nf 2468/4574/4478 4471/4577/4481 1474/4484/4388\nf 7726/4488/4392 7733/4578/4482 2469/4579/4483\nf 2469/4579/4483 4432/4489/4393 7726/4488/4392\nf 7734/4580/4484 4474/4581/4485 2469/4579/4483\nf 2469/4579/4483 7733/4578/4482 7734/4580/4484\nf 1496/4582/4486 4473/4583/4487 2469/4579/4483\nf 2469/4579/4483 4474/4581/4485 1496/4582/4486\nf 1475/4490/4394 4432/4489/4393 2469/4579/4483\nf 2469/4579/4483 4473/4583/4487 1475/4490/4394\nf 1475/4490/4394 4473/4583/4487 2470/4584/4488\nf 2470/4584/4488 4434/4493/4397 1475/4490/4394\nf 1496/4582/4486 4476/4585/4489 2470/4584/4488\nf 2470/4584/4488 4473/4583/4487 1496/4582/4486\nf 1497/4586/4490 4475/4587/4491 2470/4584/4488\nf 2470/4584/4488 4476/4585/4489 1497/4586/4490\nf 1476/4494/4398 4434/4493/4397 2470/4584/4488\nf 2470/4584/4488 4475/4587/4491 1476/4494/4398\nf 1476/4494/4398 4475/4587/4491 2471/4588/4492\nf 2471/4588/4492 4436/4497/4401 1476/4494/4398\nf 1497/4586/4490 4478/4589/4493 2471/4588/4492\nf 2471/4588/4492 4475/4587/4491 1497/4586/4490\nf 1498/4590/4494 4477/4591/4495 2471/4588/4492\nf 2471/4588/4492 4478/4589/4493 1498/4590/4494\nf 1477/4498/4402 4436/4497/4401 2471/4588/4492\nf 2471/4588/4492 4477/4591/4495 1477/4498/4402\nf 1477/4498/4402 4477/4591/4495 2472/4592/4496\nf 2472/4592/4496 4438/4501/4405 1477/4498/4402\nf 1498/4590/4494 4480/4593/4497 2472/4592/4496\nf 2472/4592/4496 4477/4591/4495 1498/4590/4494\nf 1499/4594/4498 4479/4595/4499 2472/4592/4496\nf 2472/4592/4496 4480/4593/4497 1499/4594/4498\nf 1478/4502/4406 4438/4501/4405 2472/4592/4496\nf 2472/4592/4496 4479/4595/4499 1478/4502/4406\nf 1478/4502/4406 4479/4595/4499 2473/4596/4500\nf 2473/4596/4500 4440/4505/4409 1478/4502/4406\nf 1499/4594/4498 4482/4597/4501 2473/4596/4500\nf 2473/4596/4500 4479/4595/4499 1499/4594/4498\nf 1500/4598/4502 4481/4599/4503 2473/4596/4500\nf 2473/4596/4500 4482/4597/4501 1500/4598/4502\nf 1479/4506/4410 4440/4505/4409 2473/4596/4500\nf 2473/4596/4500 4481/4599/4503 1479/4506/4410\nf 7728/4510/4414 7735/4600/4504 2474/4601/4505\nf 2474/4601/4505 4442/4511/4415 7728/4510/4414\nf 7736/4602/4506 4484/4603/4507 2474/4601/4505\nf 2474/4601/4505 7735/4600/4504 7736/4602/4506\nf 1501/4604/4508 4483/4605/4509 2474/4601/4505\nf 2474/4601/4505 4484/4603/4507 1501/4604/4508\nf 1480/4512/4416 4442/4511/4415 2474/4601/4505\nf 2474/4601/4505 4483/4605/4509 1480/4512/4416\nf 1480/4512/4416 4483/4605/4509 2475/4606/4510\nf 2475/4606/4510 4443/4515/4419 1480/4512/4416\nf 1501/4604/4508 4485/4607/4511 2475/4606/4510\nf 2475/4606/4510 4483/4605/4509 1501/4604/4508\nf 1493/4566/4470 4468/4564/4468 2475/4606/4510\nf 2475/4606/4510 4485/4607/4511 1493/4566/4470\nf 1472/4474/4378 4443/4515/4419 2475/4606/4510\nf 2475/4606/4510 4468/4564/4468 1472/4474/4378\nf 1177/3278/3219 4488/4608/4512 2476/4609/4513\nf 2476/4609/4513 3849/3279/3220 1177/3278/3219\nf 1503/4610/4514 4487/4611/4515 2476/4609/4513\nf 2476/4609/4513 4488/4608/4512 1503/4610/4514\nf 1502/4612/4516 4486/4613/4517 2476/4609/4513\nf 2476/4609/4513 4487/4611/4515 1502/4612/4516\nf 1180/3282/3223 3849/3279/3220 2476/4609/4513\nf 2476/4609/4513 4486/4613/4517 1180/3282/3223\nf 1180/3282/3223 4486/4613/4517 2477/4614/4518\nf 2477/4614/4518 4282/4173/4077 1180/3282/3223\nf 1502/4612/4516 4490/4615/4519 2477/4614/4518\nf 2477/4614/4518 4486/4613/4517 1502/4612/4516\nf 1504/4616/4520 4489/4617/4521 2477/4614/4518\nf 2477/4614/4518 4490/4615/4519 1504/4616/4520\nf 1406/4158/4062 4282/4173/4077 2477/4614/4518\nf 2477/4614/4518 4489/4617/4521 1406/4158/4062\nf 1406/4158/4062 4489/4617/4521 2478/4618/4522\nf 2478/4618/4522 4278/4159/4063 1406/4158/4062\nf 1504/4616/4520 4492/4619/4523 2478/4618/4522\nf 2478/4618/4522 4489/4617/4521 1504/4616/4520\nf 1505/4620/4524 4491/4621/4525 2478/4618/4522\nf 2478/4618/4522 4492/4619/4523 1505/4620/4524\nf 1407/4162/4066 4278/4159/4063 2478/4618/4522\nf 2478/4618/4522 4491/4621/4525 1407/4162/4066\nf 1407/4162/4066 4491/4621/4525 2479/4622/4526\nf 2479/4622/4526 7737/4623/4527 1407/4162/4066\nf 1505/4620/4524 4494/4624/4528 2479/4622/4526\nf 2479/4622/4526 4491/4621/4525 1505/4620/4524\nf 1506/4625/4529 4493/4626/4530 2479/4622/4526\nf 2479/4622/4526 4494/4624/4528 1506/4625/4529\nf 7700/4191/4095 7737/4623/4527 2479/4622/4526\nf 2479/4622/4526 4493/4626/4530 7700/4191/4095\nf 7700/4191/4095 4493/4626/4530 2480/4627/4531\nf 2480/4627/4531 4288/4192/4096 7700/4191/4095\nf 1506/4625/4529 4496/4628/4532 2480/4627/4531\nf 2480/4627/4531 4493/4626/4530 1506/4625/4529\nf 1507/4629/4533 4495/4630/4534 2480/4627/4531\nf 2480/4627/4531 4496/4628/4532 1507/4629/4533\nf 1123/3154/3095 4288/4192/4096 2480/4627/4531\nf 2480/4627/4531 4495/4630/4534 1123/3154/3095\nf 1123/3154/3095 4495/4630/4534 2481/4631/4535\nf 2481/4631/4535 3787/3155/3096 1123/3154/3095\nf 1507/4629/4533 4498/4632/4536 2481/4631/4535\nf 2481/4631/4535 4495/4630/4534 1507/4629/4533\nf 1508/4633/4537 4497/4634/4538 2481/4631/4535\nf 2481/4631/4535 4498/4632/4536 1508/4633/4537\nf 1122/3156/3097 3787/3155/3096 2481/4631/4535\nf 2481/4631/4535 4497/4634/4538 1122/3156/3097\nf 1122/3156/3097 4497/4634/4538 2482/4635/4539\nf 2482/4635/4539 4046/3674/3603 1122/3156/3097\nf 1508/4633/4537 4500/4636/4540 2482/4635/4539\nf 2482/4635/4539 4497/4634/4538 1508/4633/4537\nf 1509/4637/4541 4499/4638/4542 2482/4635/4539\nf 2482/4635/4539 4500/4636/4540 1509/4637/4541\nf 1324/3675/3604 4046/3674/3603 2482/4635/4539\nf 2482/4635/4539 4499/4638/4542 1324/3675/3604\nf 1324/3675/3604 4499/4638/4542 2483/4639/4543\nf 2483/4639/4543 4232/4054/3968 1324/3675/3604\nf 1509/4637/4541 4501/4640/4544 2483/4639/4543\nf 2483/4639/4543 4499/4638/4542 1509/4637/4541\nf 1503/4610/4514 4488/4608/4512 2483/4639/4543\nf 2483/4639/4543 4501/4640/4544 1503/4610/4514\nf 1177/3278/3219 4232/4054/3968 2483/4639/4543\nf 2483/4639/4543 4488/4608/4512 1177/3278/3219\nf 1503/4610/4514 4504/4641/4545 2484/4642/4546\nf 2484/4642/4546 4487/4611/4515 1503/4610/4514\nf 1511/4643/4547 4503/4644/4548 2484/4642/4546\nf 2484/4642/4546 4504/4641/4545 1511/4643/4547\nf 1510/4645/4549 4502/4646/4550 2484/4642/4546\nf 2484/4642/4546 4503/4644/4548 1510/4645/4549\nf 1502/4612/4516 4487/4611/4515 2484/4642/4546\nf 2484/4642/4546 4502/4646/4550 1502/4612/4516\nf 1502/4612/4516 4502/4646/4550 2485/4647/4551\nf 2485/4647/4551 4490/4615/4519 1502/4612/4516\nf 1510/4645/4549 4506/4648/4552 2485/4647/4551\nf 2485/4647/4551 4502/4646/4550 1510/4645/4549\nf 1512/4649/4553 4505/4650/4554 2485/4647/4551\nf 2485/4647/4551 4506/4648/4552 1512/4649/4553\nf 1504/4616/4520 4490/4615/4519 2485/4647/4551\nf 2485/4647/4551 4505/4650/4554 1504/4616/4520\nf 1504/4616/4520 4505/4650/4554 2486/4651/4555\nf 2486/4651/4555 4492/4619/4523 1504/4616/4520\nf 1512/4649/4553 4508/4652/4556 2486/4651/4555\nf 2486/4651/4555 4505/4650/4554 1512/4649/4553\nf 1513/4653/4557 4507/4654/4558 2486/4651/4555\nf 2486/4651/4555 4508/4652/4556 1513/4653/4557\nf 1505/4620/4524 4492/4619/4523 2486/4651/4555\nf 2486/4651/4555 4507/4654/4558 1505/4620/4524\nf 1505/4620/4524 4507/4654/4558 2487/4655/4559\nf 2487/4655/4559 4494/4624/4528 1505/4620/4524\nf 1513/4653/4557 4510/4656/4560 2487/4655/4559\nf 2487/4655/4559 4507/4654/4558 1513/4653/4557\nf 1514/4657/4561 4509/4658/4562 2487/4655/4559\nf 2487/4655/4559 4510/4656/4560 1514/4657/4561\nf 1506/4625/4529 4494/4624/4528 2487/4655/4559\nf 2487/4655/4559 4509/4658/4562 1506/4625/4529\nf 1506/4625/4529 4509/4658/4562 2488/4659/4563\nf 2488/4659/4563 4496/4628/4532 1506/4625/4529\nf 1514/4657/4561 4512/4660/4564 2488/4659/4563\nf 2488/4659/4563 4509/4658/4562 1514/4657/4561\nf 1515/4661/4565 4511/4662/4566 2488/4659/4563\nf 2488/4659/4563 4512/4660/4564 1515/4661/4565\nf 1507/4629/4533 4496/4628/4532 2488/4659/4563\nf 2488/4659/4563 4511/4662/4566 1507/4629/4533\nf 1507/4629/4533 4511/4662/4566 2489/4663/4567\nf 2489/4663/4567 4498/4632/4536 1507/4629/4533\nf 1515/4661/4565 4514/4664/4568 2489/4663/4567\nf 2489/4663/4567 4511/4662/4566 1515/4661/4565\nf 1516/4665/4569 4513/4666/4570 2489/4663/4567\nf 2489/4663/4567 4514/4664/4568 1516/4665/4569\nf 1508/4633/4537 4498/4632/4536 2489/4663/4567\nf 2489/4663/4567 4513/4666/4570 1508/4633/4537\nf 1508/4633/4537 4513/4666/4570 2490/4667/4571\nf 2490/4667/4571 4500/4636/4540 1508/4633/4537\nf 1516/4665/4569 4516/4668/4572 2490/4667/4571\nf 2490/4667/4571 4513/4666/4570 1516/4665/4569\nf 1517/4669/4573 4515/4670/4574 2490/4667/4571\nf 2490/4667/4571 4516/4668/4572 1517/4669/4573\nf 1509/4637/4541 4500/4636/4540 2490/4667/4571\nf 2490/4667/4571 4515/4670/4574 1509/4637/4541\nf 1509/4637/4541 4515/4670/4574 2491/4671/4575\nf 2491/4671/4575 4501/4640/4544 1509/4637/4541\nf 1517/4669/4573 4517/4672/4576 2491/4671/4575\nf 2491/4671/4575 4515/4670/4574 1517/4669/4573\nf 1511/4643/4547 4504/4641/4545 2491/4671/4575\nf 2491/4671/4575 4517/4672/4576 1511/4643/4547\nf 1503/4610/4514 4501/4640/4544 2491/4671/4575\nf 2491/4671/4575 4504/4641/4545 1503/4610/4514\nf 682/1343/1307 3380/2215/2165 2492/4673/4577\nf 2492/4673/4577 4140/3856/3773 682/1343/1307\nf 905/2219/2169 4519/4674/4578 2492/4673/4577\nf 2492/4673/4577 3380/2215/2165 905/2219/2169\nf 1518/4675/4579 4518/4676/4580 2492/4673/4577\nf 2492/4673/4577 4519/4674/4578 1518/4675/4579\nf 1361/3858/3775 4140/3856/3773 2492/4673/4577\nf 2492/4673/4577 4518/4676/4580 1361/3858/3775\nf 1361/3858/3775 4518/4676/4580 2493/4677/4581\nf 2493/4677/4581 4233/4053/3967 1361/3858/3775\nf 1518/4675/4579 4521/4678/4582 2493/4677/4581\nf 2493/4677/4581 4518/4676/4580 1518/4675/4579\nf 1519/4679/4583 4520/4680/4584 2493/4677/4581\nf 2493/4677/4581 4521/4678/4582 1519/4679/4583\nf 1324/3675/3604 4233/4053/3967 2493/4677/4581\nf 2493/4677/4581 4520/4680/4584 1324/3675/3604\nf 1324/3675/3604 4520/4680/4584 2494/4681/4585\nf 2494/4681/4585 4045/3676/3605 1324/3675/3604\nf 1519/4679/4583 4523/4682/4586 2494/4681/4585\nf 2494/4681/4585 4520/4680/4584 1519/4679/4583\nf 1520/4683/4587 4522/4684/4588 2494/4681/4585\nf 2494/4681/4585 4523/4682/4586 1520/4683/4587\nf 1323/3677/3606 4045/3676/3605 2494/4681/4585\nf 2494/4681/4585 4522/4684/4588 1323/3677/3606\nf 1323/3677/3606 4522/4684/4588 2495/4685/4589\nf 2495/4685/4589 4084/3750/3667 1323/3677/3606\nf 1520/4683/4587 4525/4686/4590 2495/4685/4589\nf 2495/4685/4589 4522/4684/4588 1520/4683/4587\nf 1521/4687/4591 4524/4688/4592 2495/4685/4589\nf 2495/4685/4589 4525/4686/4590 1521/4687/4591\nf 1342/3747/3664 4084/3750/3667 2495/4685/4589\nf 2495/4685/4589 4524/4688/4592 1342/3747/3664\nf 1342/3747/3664 4524/4688/4592 2496/4689/4593\nf 2496/4689/4593 4253/4097/4005 1342/3747/3664\nf 1521/4687/4591 4527/4690/4594 2496/4689/4593\nf 2496/4689/4593 4524/4688/4592 1521/4687/4591\nf 1522/4691/4595 4526/4692/4596 2496/4689/4593\nf 2496/4689/4593 4527/4690/4594 1522/4691/4595\nf 1400/4094/4002 4253/4097/4005 2496/4689/4593\nf 2496/4689/4593 4526/4692/4596 1400/4094/4002\nf 1400/4094/4002 4526/4692/4596 2497/4693/4597\nf 2497/4693/4597 7738/4694/4598 1400/4094/4002\nf 1522/4691/4595 4529/4695/4599 2497/4693/4597\nf 2497/4693/4597 4526/4692/4596 1522/4691/4595\nf 1523/4696/4600 4528/4697/4601 2497/4693/4597\nf 2497/4693/4597 4529/4695/4599 1523/4696/4600\nf 7739/4698/4602 7738/4694/4598 2497/4693/4597\nf 2497/4693/4597 4528/4697/4601 7739/4698/4602\nf 7739/4698/4602 4528/4697/4601 2498/4699/4603\nf 2498/4699/4603 7740/4700/4604 7739/4698/4602\nf 1523/4696/4600 4531/4701/4605 2498/4699/4603\nf 2498/4699/4603 4528/4697/4601 1523/4696/4600\nf 1524/2246/2196 4530/2245/2195 2498/4699/4603\nf 2498/4699/4603 4531/4701/4605 1524/2246/2196\nf 7400/2244/2194 7740/4700/4604 2498/4699/4603\nf 2498/4699/4603 4530/2245/2195 7400/2244/2194\nf 905/2219/2169 3397/2249/2199 2499/4702/4606\nf 2499/4702/4606 4519/4674/4578 905/2219/2169\nf 7403/2253/2203 7741/4703/4607 2499/4702/4606\nf 2499/4702/4606 3397/2249/2199 7403/2253/2203\nf 7742/4704/4608 4532/4705/4609 2499/4702/4606\nf 2499/4702/4606 7741/4703/4607 7742/4704/4608\nf 1518/4675/4579 4519/4674/4578 2499/4702/4606\nf 2499/4702/4606 4532/4705/4609 1518/4675/4579\nf 1518/4675/4579 4532/4705/4609 2500/4706/4610\nf 2500/4706/4610 4521/4678/4582 1518/4675/4579\nf 7742/4704/4608 7743/4707/4611 2500/4706/4610\nf 2500/4706/4610 4532/4705/4609 7742/4704/4608\nf 7744/4708/4612 4533/4709/4613 2500/4706/4610\nf 2500/4706/4610 7743/4707/4611 7744/4708/4612\nf 1519/4679/4583 4521/4678/4582 2500/4706/4610\nf 2500/4706/4610 4533/4709/4613 1519/4679/4583\nf 1519/4679/4583 4533/4709/4613 2501/4710/4614\nf 2501/4710/4614 4523/4682/4586 1519/4679/4583\nf 7744/4708/4612 7745/4711/4615 2501/4710/4614\nf 2501/4710/4614 4533/4709/4613 7744/4708/4612\nf 7746/4712/4616 4534/4713/4617 2501/4710/4614\nf 2501/4710/4614 7745/4711/4615 7746/4712/4616\nf 1520/4683/4587 4523/4682/4586 2501/4710/4614\nf 2501/4710/4614 4534/4713/4617 1520/4683/4587\nf 1520/4683/4587 4534/4713/4617 2502/4714/4618\nf 2502/4714/4618 4525/4686/4590 1520/4683/4587\nf 7746/4712/4616 7747/4715/4619 2502/4714/4618\nf 2502/4714/4618 4534/4713/4617 7746/4712/4616\nf 7748/4716/4620 4535/4717/4621 2502/4714/4618\nf 2502/4714/4618 7747/4715/4619 7748/4716/4620\nf 1521/4687/4591 4525/4686/4590 2502/4714/4618\nf 2502/4714/4618 4535/4717/4621 1521/4687/4591\nf 1521/4687/4591 4535/4717/4621 2503/4718/4622\nf 2503/4718/4622 4527/4690/4594 1521/4687/4591\nf 7748/4716/4620 7749/4719/4623 2503/4718/4622\nf 2503/4718/4622 4535/4717/4621 7748/4716/4620\nf 7750/4720/4624 4536/4721/4625 2503/4718/4622\nf 2503/4718/4622 7749/4719/4623 7750/4720/4624\nf 1522/4691/4595 4527/4690/4594 2503/4718/4622\nf 2503/4718/4622 4536/4721/4625 1522/4691/4595\nf 1522/4691/4595 4536/4721/4625 2504/4722/4626\nf 2504/4722/4626 4529/4695/4599 1522/4691/4595\nf 7750/4720/4624 7751/4723/4627 2504/4722/4626\nf 2504/4722/4626 4536/4721/4625 7750/4720/4624\nf 7752/4724/4628 4537/4725/4629 2504/4722/4626\nf 2504/4722/4626 7751/4723/4627 7752/4724/4628\nf 1523/4696/4600 4529/4695/4599 2504/4722/4626\nf 2504/4722/4626 4537/4725/4629 1523/4696/4600\nf 1523/4696/4600 4537/4725/4629 2505/4726/4630\nf 2505/4726/4630 4531/4701/4605 1523/4696/4600\nf 7752/4724/4628 7753/4727/4631 2505/4726/4630\nf 2505/4726/4630 4537/4725/4629 7752/4724/4628\nf 7414/2276/2226 3404/2275/2225 2505/4726/4630\nf 2505/4726/4630 7753/4727/4631 7414/2276/2226\nf 1524/2246/2196 4531/4701/4605 2505/4726/4630\nf 2505/4726/4630 3404/2275/2225 1524/2246/2196\nf 1282/3546/3481 4540/4728/4632 2506/4729/4633\nf 2506/4729/4633 3976/3542/3477 1282/3546/3481\nf 1526/4730/4634 4539/4731/4635 2506/4729/4633\nf 2506/4729/4633 4540/4728/4632 1526/4730/4634\nf 1525/4732/4636 4538/4733/4637 2506/4729/4633\nf 2506/4729/4633 4539/4731/4635 1525/4732/4636\nf 7620/3540/3475 3976/3542/3477 2506/4729/4633\nf 2506/4729/4633 4538/4733/4637 7620/3540/3475\nf 7620/3540/3475 4538/4733/4637 2507/4734/4638\nf 2507/4734/4638 7754/4735/4639 7620/3540/3475\nf 1525/4732/4636 4542/4736/4640 2507/4734/4638\nf 2507/4734/4638 4538/4733/4637 1525/4732/4636\nf 1527/4737/4641 4541/4738/4642 2507/4734/4638\nf 2507/4734/4638 4542/4736/4640 1527/4737/4641\nf 7755/4739/4643 7754/4735/4639 2507/4734/4638\nf 2507/4734/4638 4541/4738/4642 7755/4739/4643\nf 7755/4739/4643 4541/4738/4642 2508/4740/4644\nf 2508/4740/4644 7756/4741/4645 7755/4739/4643\nf 1527/4737/4641 4544/4742/4646 2508/4740/4644\nf 2508/4740/4644 4541/4738/4642 1527/4737/4641\nf 1528/4743/4647 4543/4744/4648 2508/4740/4644\nf 2508/4740/4644 4544/4742/4646 1528/4743/4647\nf 7757/4745/4649 7756/4741/4645 2508/4740/4644\nf 2508/4740/4644 4543/4744/4648 7757/4745/4649\nf 7757/4745/4649 4543/4744/4648 2509/4746/4650\nf 2509/4746/4650 7758/4747/4651 7757/4745/4649\nf 1528/4743/4647 4546/4748/4652 2509/4746/4650\nf 2509/4746/4650 4543/4744/4648 1528/4743/4647\nf 1529/4749/4653 4545/4750/4654 2509/4746/4650\nf 2509/4746/4650 4546/4748/4652 1529/4749/4653\nf 7759/4751/4655 7758/4747/4651 2509/4746/4650\nf 2509/4746/4650 4545/4750/4654 7759/4751/4655\nf 7759/4751/4655 4545/4750/4654 2510/4752/4656\nf 2510/4752/4656 7760/4753/4657 7759/4751/4655\nf 1529/4749/4653 4548/4754/4658 2510/4752/4656\nf 2510/4752/4656 4545/4750/4654 1529/4749/4653\nf 1530/4755/4659 4547/4756/4660 2510/4752/4656\nf 2510/4752/4656 4548/4754/4658 1530/4755/4659\nf 7761/4757/4661 7760/4753/4657 2510/4752/4656\nf 2510/4752/4656 4547/4756/4660 7761/4757/4661\nf 7761/4757/4661 4547/4756/4660 2511/4758/4662\nf 2511/4758/4662 7762/4759/4663 7761/4757/4661\nf 1530/4755/4659 4550/4760/4664 2511/4758/4662\nf 2511/4758/4662 4547/4756/4660 1530/4755/4659\nf 1531/4761/4665 4549/4762/4666 2511/4758/4662\nf 2511/4758/4662 4550/4760/4664 1531/4761/4665\nf 7660/4048/3962 7762/4759/4663 2511/4758/4662\nf 2511/4758/4662 4549/4762/4666 7660/4048/3962\nf 7660/4048/3962 4549/4762/4666 2512/4763/4667\nf 2512/4763/4667 4231/4049/3963 7660/4048/3962\nf 1531/4761/4665 4552/4764/4668 2512/4763/4667\nf 2512/4763/4667 4549/4762/4666 1531/4761/4665\nf 1532/4765/4669 4551/4766/4670 2512/4763/4667\nf 2512/4763/4667 4552/4764/4668 1532/4765/4669\nf 1129/3168/3109 4231/4049/3963 2512/4763/4667\nf 2512/4763/4667 4551/4766/4670 1129/3168/3109\nf 1129/3168/3109 4551/4766/4670 2513/4767/4671\nf 2513/4767/4671 3794/3169/3110 1129/3168/3109\nf 1532/4765/4669 4554/4768/4672 2513/4767/4671\nf 2513/4767/4671 4551/4766/4670 1532/4765/4669\nf 1533/4769/4673 4553/4770/4674 2513/4767/4671\nf 2513/4767/4671 4554/4768/4672 1533/4769/4673\nf 1128/3170/3111 3794/3169/3110 2513/4767/4671\nf 2513/4767/4671 4553/4770/4674 1128/3170/3111\nf 1128/3170/3111 4553/4770/4674 2514/4771/4675\nf 2514/4771/4675 3979/3550/3485 1128/3170/3111\nf 1533/4769/4673 4556/4772/4676 2514/4771/4675\nf 2514/4771/4675 4553/4770/4674 1533/4769/4673\nf 1534/4773/4677 4555/4774/4678 2514/4771/4675\nf 2514/4771/4675 4556/4772/4676 1534/4773/4677\nf 1284/3547/3482 3979/3550/3485 2514/4771/4675\nf 2514/4771/4675 4555/4774/4678 1284/3547/3482\nf 1284/3547/3482 4555/4774/4678 2515/4775/4679\nf 2515/4775/4679 4065/3712/3641 1284/3547/3482\nf 1534/4773/4677 4557/4776/4680 2515/4775/4679\nf 2515/4775/4679 4555/4774/4678 1534/4773/4677\nf 1526/4730/4634 4540/4728/4632 2515/4775/4679\nf 2515/4775/4679 4557/4776/4680 1526/4730/4634\nf 1282/3546/3481 4065/3712/3641 2515/4775/4679\nf 2515/4775/4679 4540/4728/4632 1282/3546/3481\nf 1526/4730/4634 4560/4777/4681 2516/4778/4682\nf 2516/4778/4682 4539/4731/4635 1526/4730/4634\nf 1536/4779/4683 4559/4780/4684 2516/4778/4682\nf 2516/4778/4682 4560/4777/4681 1536/4779/4683\nf 1535/4781/4685 4558/4782/4686 2516/4778/4682\nf 2516/4778/4682 4559/4780/4684 1535/4781/4685\nf 1525/4732/4636 4539/4731/4635 2516/4778/4682\nf 2516/4778/4682 4558/4782/4686 1525/4732/4636\nf 1525/4732/4636 4558/4782/4686 2517/4783/4687\nf 2517/4783/4687 4542/4736/4640 1525/4732/4636\nf 1535/4781/4685 4562/4784/4688 2517/4783/4687\nf 2517/4783/4687 4558/4782/4686 1535/4781/4685\nf 1537/4785/4689 4561/4786/4690 2517/4783/4687\nf 2517/4783/4687 4562/4784/4688 1537/4785/4689\nf 1527/4737/4641 4542/4736/4640 2517/4783/4687\nf 2517/4783/4687 4561/4786/4690 1527/4737/4641\nf 1527/4737/4641 4561/4786/4690 2518/4787/4691\nf 2518/4787/4691 4544/4742/4646 1527/4737/4641\nf 1537/4785/4689 4564/4788/4692 2518/4787/4691\nf 2518/4787/4691 4561/4786/4690 1537/4785/4689\nf 1538/4789/4693 4563/4790/4694 2518/4787/4691\nf 2518/4787/4691 4564/4788/4692 1538/4789/4693\nf 1528/4743/4647 4544/4742/4646 2518/4787/4691\nf 2518/4787/4691 4563/4790/4694 1528/4743/4647\nf 1528/4743/4647 4563/4790/4694 2519/4791/4695\nf 2519/4791/4695 4546/4748/4652 1528/4743/4647\nf 1538/4789/4693 4566/4792/4696 2519/4791/4695\nf 2519/4791/4695 4563/4790/4694 1538/4789/4693\nf 1539/4793/4697 4565/4794/4698 2519/4791/4695\nf 2519/4791/4695 4566/4792/4696 1539/4793/4697\nf 1529/4749/4653 4546/4748/4652 2519/4791/4695\nf 2519/4791/4695 4565/4794/4698 1529/4749/4653\nf 1529/4749/4653 4565/4794/4698 2520/4795/4699\nf 2520/4795/4699 4548/4754/4658 1529/4749/4653\nf 1539/4793/4697 4568/4796/4700 2520/4795/4699\nf 2520/4795/4699 4565/4794/4698 1539/4793/4697\nf 1540/4797/4701 4567/4798/4702 2520/4795/4699\nf 2520/4795/4699 4568/4796/4700 1540/4797/4701\nf 1530/4755/4659 4548/4754/4658 2520/4795/4699\nf 2520/4795/4699 4567/4798/4702 1530/4755/4659\nf 1530/4755/4659 4567/4798/4702 2521/4799/4703\nf 2521/4799/4703 4550/4760/4664 1530/4755/4659\nf 1540/4797/4701 4570/4800/4704 2521/4799/4703\nf 2521/4799/4703 4567/4798/4702 1540/4797/4701\nf 1541/4801/4705 4569/4802/4706 2521/4799/4703\nf 2521/4799/4703 4570/4800/4704 1541/4801/4705\nf 1531/4761/4665 4550/4760/4664 2521/4799/4703\nf 2521/4799/4703 4569/4802/4706 1531/4761/4665\nf 1531/4761/4665 4569/4802/4706 2522/4803/4707\nf 2522/4803/4707 4552/4764/4668 1531/4761/4665\nf 1541/4801/4705 4572/4804/4708 2522/4803/4707\nf 2522/4803/4707 4569/4802/4706 1541/4801/4705\nf 1542/4805/4709 4571/4806/4710 2522/4803/4707\nf 2522/4803/4707 4572/4804/4708 1542/4805/4709\nf 1532/4765/4669 4552/4764/4668 2522/4803/4707\nf 2522/4803/4707 4571/4806/4710 1532/4765/4669\nf 1532/4765/4669 4571/4806/4710 2523/4807/4711\nf 2523/4807/4711 4554/4768/4672 1532/4765/4669\nf 1542/4805/4709 4574/4808/4712 2523/4807/4711\nf 2523/4807/4711 4571/4806/4710 1542/4805/4709\nf 1543/4809/4713 4573/4810/4714 2523/4807/4711\nf 2523/4807/4711 4574/4808/4712 1543/4809/4713\nf 1533/4769/4673 4554/4768/4672 2523/4807/4711\nf 2523/4807/4711 4573/4810/4714 1533/4769/4673\nf 1533/4769/4673 4573/4810/4714 2524/4811/4715\nf 2524/4811/4715 4556/4772/4676 1533/4769/4673\nf 1543/4809/4713 4576/4812/4716 2524/4811/4715\nf 2524/4811/4715 4573/4810/4714 1543/4809/4713\nf 1544/4813/4717 4575/4814/4718 2524/4811/4715\nf 2524/4811/4715 4576/4812/4716 1544/4813/4717\nf 1534/4773/4677 4556/4772/4676 2524/4811/4715\nf 2524/4811/4715 4575/4814/4718 1534/4773/4677\nf 1534/4773/4677 4575/4814/4718 2525/4815/4719\nf 2525/4815/4719 4557/4776/4680 1534/4773/4677\nf 1544/4813/4717 4577/4816/4720 2525/4815/4719\nf 2525/4815/4719 4575/4814/4718 1544/4813/4717\nf 1536/4779/4683 4560/4777/4681 2525/4815/4719\nf 2525/4815/4719 4577/4816/4720 1536/4779/4683\nf 1526/4730/4634 4557/4776/4680 2525/4815/4719\nf 2525/4815/4719 4560/4777/4681 1526/4730/4634\nf 1249/3448/3383 4580/4817/4721 2526/4818/4722\nf 2526/4818/4722 3926/3444/3379 1249/3448/3383\nf 1546/4819/2322 4579/4820/2321 2526/4818/4722\nf 2526/4818/4722 4580/4817/4721 1546/4819/2322\nf 1545/4821/2320 4578/4822/4723 2526/4818/4722\nf 2526/4818/4722 4579/4820/2321 1545/4821/2320\nf 1248/3441/3376 3926/3444/3379 2526/4818/4722\nf 2526/4818/4722 4578/4822/4723 1248/3441/3376\nf 1248/3441/3376 4578/4822/4723 2527/4823/4724\nf 2527/4823/4724 4023/3634/3569 1248/3441/3376\nf 1545/4821/2320 4582/4824/2326 2527/4823/4724\nf 2527/4823/4724 4578/4822/4723 1545/4821/2320\nf 1547/4825/2325 4581/4826/4725 2527/4823/4724\nf 2527/4823/4724 4582/4824/2326 1547/4825/2325\nf 1313/3631/3566 4023/3634/3569 2527/4823/4724\nf 2527/4823/4724 4581/4826/4725 1313/3631/3566\nf 1313/3631/3566 4581/4826/4725 2528/4827/4726\nf 2528/4827/4726 4583/4828/4727 1313/3631/3566\nf 1547/4825/2325 4585/4829/2331 2528/4827/4726\nf 2528/4827/4726 4581/4826/4725 1547/4825/2325\nf 1548/4830/2330 4584/4831/4728 2528/4827/4726\nf 2528/4827/4726 4585/4829/2331 1548/4830/2330\nf 1372/3956/3873 4583/4828/4727 2528/4827/4726\nf 2528/4827/4726 4584/4831/4728 1372/3956/3873\nf 7763/4832/4729 7764/4833/4730 2529/4834/4731\nf 2529/4834/4731 7765/4835/4732 7763/4832/4729\nf 7766/4836/4733 4587/4837/2338 2529/4834/4731\nf 2529/4834/4731 7764/4833/4730 7766/4836/4733\nf 1549/4838/2337 4586/4839/4734 2529/4834/4731\nf 2529/4834/4731 4587/4837/2338 1549/4838/2337\nf 7666/4092/4000 7765/4835/4732 2529/4834/4731\nf 2529/4834/4731 4586/4839/4734 7666/4092/4000\nf 7666/4092/4000 4586/4839/4734 2530/4840/4735\nf 2530/4840/4735 4252/4093/4001 7666/4092/4000\nf 1549/4838/2337 4589/4841/2343 2530/4840/4735\nf 2530/4840/4735 4586/4839/4734 1549/4838/2337\nf 1550/4842/2342 4588/4843/4736 2530/4840/4735\nf 2530/4840/4735 4589/4841/2343 1550/4842/2342\nf 1377/3982/3899 4252/4093/4001 2530/4840/4735\nf 2530/4840/4735 4588/4843/4736 1377/3982/3899\nf 1377/3982/3899 4588/4843/4736 2531/4844/4737\nf 2531/4844/4737 4189/3983/3900 1377/3982/3899\nf 1550/4842/2342 4591/4845/2347 2531/4844/4737\nf 2531/4844/4737 4588/4843/4736 1550/4842/2342\nf 1551/4846/2346 4590/4847/4738 2531/4844/4737\nf 2531/4844/4737 4591/4845/2347 1551/4846/2346\nf 1344/3767/3684 4189/3983/3900 2531/4844/4737\nf 2531/4844/4737 4590/4847/4738 1344/3767/3684\nf 1344/3767/3684 4590/4847/4738 2532/4848/4739\nf 2532/4848/4739 4093/3763/3680 1344/3767/3684\nf 1551/4846/2346 4593/4849/2351 2532/4848/4739\nf 2532/4848/4739 4590/4847/4738 1551/4846/2346\nf 1552/4850/2350 4592/4851/4740 2532/4848/4739\nf 2532/4848/4739 4593/4849/2351 1552/4850/2350\nf 1174/3277/3218 4093/3763/3680 2532/4848/4739\nf 2532/4848/4739 4592/4851/4740 1174/3277/3218\nf 1174/3277/3218 4592/4851/4740 2533/4852/4741\nf 2533/4852/4741 3842/3272/3213 1174/3277/3218\nf 1552/4850/2350 4595/4853/2355 2533/4852/4741\nf 2533/4852/4741 4592/4851/4740 1552/4850/2350\nf 1553/4854/2354 4594/4855/4742 2533/4852/4741\nf 2533/4852/4741 4595/4853/2355 1553/4854/2354\nf 1173/3269/3210 3842/3272/3213 2533/4852/4741\nf 2533/4852/4741 4594/4855/4742 1173/3269/3210\nf 1173/3269/3210 4594/4855/4742 2534/4856/4743\nf 2534/4856/4743 4089/3756/3673 1173/3269/3210\nf 1553/4854/2354 4596/4857/2357 2534/4856/4743\nf 2534/4856/4743 4594/4855/4742 1553/4854/2354\nf 1546/4819/2322 4580/4817/4721 2534/4856/4743\nf 2534/4856/4743 4596/4857/2357 1546/4819/2322\nf 1249/3448/3383 4089/3756/3673 2534/4856/4743\nf 2534/4856/4743 4580/4817/4721 1249/3448/3383\nf 1296/3590/3525 4599/4858/4744 2535/4859/4745\nf 2535/4859/4745 3999/3585/3520 1296/3590/3525\nf 1555/4860/2363 4598/4861/2362 2535/4859/4745\nf 2535/4859/4745 4599/4858/4744 1555/4860/2363\nf 1554/4862/2361 4597/4863/4746 2535/4859/4745\nf 2535/4859/4745 4598/4861/2362 1554/4862/2361\nf 1295/3582/3517 3999/3585/3520 2535/4859/4745\nf 2535/4859/4745 4597/4863/4746 1295/3582/3517\nf 1295/3582/3517 4597/4863/4746 2536/4864/4747\nf 2536/4864/4747 4110/3796/3713 1295/3582/3517\nf 1554/4862/2361 4601/4865/2367 2536/4864/4747\nf 2536/4864/4747 4597/4863/4746 1554/4862/2361\nf 1556/4866/2366 4600/4867/4748 2536/4864/4747\nf 2536/4864/4747 4601/4865/2367 1556/4866/2366\nf 1350/3793/3710 4110/3796/3713 2536/4864/4747\nf 2536/4864/4747 4600/4867/4748 1350/3793/3710\nf 1350/3793/3710 4600/4867/4748 2537/4868/4749\nf 2537/4868/4749 4117/3801/3718 1350/3793/3710\nf 1556/4866/2366 4603/4869/2371 2537/4868/4749\nf 2537/4868/4749 4600/4867/4748 1556/4866/2366\nf 1557/4870/2370 4602/4871/4750 2537/4868/4749\nf 2537/4868/4749 4603/4869/2371 1557/4870/2370\nf 1352/3803/3720 4117/3801/3718 2537/4868/4749\nf 2537/4868/4749 4602/4871/4750 1352/3803/3720\nf 1352/3803/3720 4602/4871/4750 2538/4872/4751\nf 2538/4872/4751 4175/3953/3870 1352/3803/3720\nf 1557/4870/2370 4605/4873/2375 2538/4872/4751\nf 2538/4872/4751 4602/4871/4750 1557/4870/2370\nf 1558/4874/2374 4604/4875/4752 2538/4872/4751\nf 2538/4872/4751 4605/4873/2375 1558/4874/2374\nf 1371/3950/3867 4175/3953/3870 2538/4872/4751\nf 2538/4872/4751 4604/4875/4752 1371/3950/3867\nf 1371/3950/3867 4604/4875/4752 2539/4876/4753\nf 2539/4876/4753 4173/3951/3868 1371/3950/3867\nf 1558/4874/2374 4606/4877/2379 2539/4876/4753\nf 2539/4876/4753 4604/4875/4752 1558/4874/2374\nf 7767/4878/4754 7768/4879/4755 2539/4876/4753\nf 2539/4876/4753 4606/4877/2379 7767/4878/4754\nf 1357/3821/3738 4173/3951/3868 2539/4876/4753\nf 2539/4876/4753 7768/4879/4755 1357/3821/3738\nf 1259/3470/3405 7769/4880/4756 2540/4881/4757\nf 2540/4881/4757 3944/3471/3406 1259/3470/3405\nf 7770/4882/4758 4608/4883/2384 2540/4881/4757\nf 2540/4881/4757 7769/4880/4756 7770/4882/4758\nf 1559/4884/2383 4607/4885/4759 2540/4881/4757\nf 2540/4881/4757 4608/4883/2384 1559/4884/2383\nf 1262/3474/3409 3944/3471/3406 2540/4881/4757\nf 2540/4881/4757 4607/4885/4759 1262/3474/3409\nf 1370/3942/3859 4611/4886/4760 2541/4887/4761\nf 2541/4887/4761 4171/3943/3860 1370/3942/3859\nf 1561/4888/2391 4610/4889/2390 2541/4887/4761\nf 2541/4887/4761 4611/4886/4760 1561/4888/2391\nf 1560/4890/2389 4609/4891/4762 2541/4887/4761\nf 2541/4887/4761 4610/4889/2390 1560/4890/2389\nf 1347/3780/3697 4171/3943/3860 2541/4887/4761\nf 2541/4887/4761 4609/4891/4762 1347/3780/3697\nf 1347/3780/3697 4609/4891/4762 2542/4892/4763\nf 2542/4892/4763 4100/3777/3694 1347/3780/3697\nf 1560/4890/2389 4612/4893/2393 2542/4892/4763\nf 2542/4892/4763 4609/4891/4762 1560/4890/2389\nf 1555/4860/2363 4599/4858/4744 2542/4892/4763\nf 2542/4892/4763 4612/4893/2393 1555/4860/2363\nf 1296/3590/3525 4100/3777/3694 2542/4892/4763\nf 2542/4892/4763 4599/4858/4744 1296/3590/3525\nf 1562/4894/4764 4615/4895/4765 2543/4896/4766\nf 2543/4896/4766 4613/4897/4767 1562/4894/4764\nf 1563/4898/4768 4614/4899/4769 2543/4896/4766\nf 2543/4896/4766 4615/4895/4765 1563/4898/4768\nf 1319/3649/3584 4398/4414/4318 2543/4896/4766\nf 2543/4896/4766 4614/4899/4769 1319/3649/3584\nf 1312/3628/3563 4613/4897/4767 2543/4896/4766\nf 2543/4896/4766 4398/4414/4318 1312/3628/3563\nf 1141/3195/3136 4618/4900/4770 2544/4901/4771\nf 2544/4901/4771 4616/4902/4772 1141/3195/3136\nf 1564/4903/4773 4617/4904/4774 2544/4901/4771\nf 2544/4901/4771 4618/4900/4770 1564/4903/4773\nf 1320/3653/3588 4188/3977/3894 2544/4901/4771\nf 2544/4901/4771 4617/4904/4774 1320/3653/3588\nf 1314/3635/3570 4616/4902/4772 2544/4901/4771\nf 2544/4901/4771 4188/3977/3894 1314/3635/3570\nf 1565/4905/4775 4621/4906/4776 2545/4907/4777\nf 2545/4907/4777 4619/4908/4778 1565/4905/4775\nf 1566/4909/4779 4620/4910/4780 2545/4907/4777\nf 2545/4907/4777 4621/4906/4776 1566/4909/4779\nf 1311/3624/3559 4027/3638/3573 2545/4907/4777\nf 2545/4907/4777 4620/4910/4780 1311/3624/3559\nf 1315/3637/3572 4619/4908/4778 2545/4907/4777\nf 2545/4907/4777 4027/3638/3573 1315/3637/3572\nf 1261/3476/3411 3943/3475/3410 2546/4911/4781\nf 2546/4911/4781 4622/4912/4782 1261/3476/3411\nf 1262/3474/3409 4623/4913/4783 2546/4911/4781\nf 2546/4911/4781 3943/3475/3410 1262/3474/3409\nf 1370/3942/3859 4172/3941/3858 2546/4911/4781\nf 2546/4911/4781 4623/4913/4783 1370/3942/3859\nf 1318/3645/3580 4622/4912/4782 2546/4911/4781\nf 2546/4911/4781 4172/3941/3858 1318/3645/3580\nf 1563/4898/4768 4625/4914/4784 2547/4915/4785\nf 2547/4915/4785 4614/4899/4769 1563/4898/4768\nf 1567/4916/4786 4624/4917/4787 2547/4915/4785\nf 2547/4915/4785 4625/4914/4784 1567/4916/4786\nf 1316/3641/3576 4033/3650/3585 2547/4915/4785\nf 2547/4915/4785 4624/4917/4787 1316/3641/3576\nf 1319/3649/3584 4614/4899/4769 2547/4915/4785\nf 2547/4915/4785 4033/3650/3585 1319/3649/3584\nf 1564/4903/4773 4626/4918/4788 2548/4919/4789\nf 2548/4919/4789 4617/4904/4774 1564/4903/4773\nf 1565/4905/4775 4619/4908/4778 2548/4919/4789\nf 2548/4919/4789 4626/4918/4788 1565/4905/4775\nf 1315/3637/3572 4035/3654/3589 2548/4919/4789\nf 2548/4919/4789 4619/4908/4778 1315/3637/3572\nf 1320/3653/3588 4617/4904/4774 2548/4919/4789\nf 2548/4919/4789 4035/3654/3589 1320/3653/3588\nf 1567/4916/4786 4627/4920/4790 2549/4921/4791\nf 2549/4921/4791 4624/4917/4787 1567/4916/4786\nf 1261/3476/3411 4622/4912/4782 2549/4921/4791\nf 2549/4921/4791 4627/4920/4790 1261/3476/3411\nf 1318/3645/3580 4031/3642/3577 2549/4921/4791\nf 2549/4921/4791 4622/4912/4782 1318/3645/3580\nf 1316/3641/3576 4624/4917/4787 2549/4921/4791\nf 2549/4921/4791 4031/3642/3577 1316/3641/3576\nf 1372/3956/3873 4177/3955/3872 2550/4922/4792\nf 2550/4922/4792 4583/4828/4727 1372/3956/3873\nf 1141/3195/3136 4616/4902/4772 2550/4922/4792\nf 2550/4922/4792 4177/3955/3872 1141/3195/3136\nf 1314/3635/3570 4025/3632/3567 2550/4922/4792\nf 2550/4922/4792 4616/4902/4772 1314/3635/3570\nf 1313/3631/3566 4583/4828/4727 2550/4922/4792\nf 2550/4922/4792 4025/3632/3567 1313/3631/3566\nf 1566/4909/4779 4628/4923/4793 2551/4924/4794\nf 2551/4924/4794 4620/4910/4780 1566/4909/4779\nf 1562/4894/4764 4613/4897/4767 2551/4924/4794\nf 2551/4924/4794 4628/4923/4793 1562/4894/4764\nf 1312/3628/3563 4022/3625/3560 2551/4924/4794\nf 2551/4924/4794 4613/4897/4767 1312/3628/3563\nf 1311/3624/3559 4620/4910/4780 2551/4924/4794\nf 2551/4924/4794 4022/3625/3560 1311/3624/3559\nf 1372/3956/3873 4584/4831/4728 2552/4925/4795\nf 2552/4925/4795 4176/3957/3874 1372/3956/3873\nf 1548/4830/2330 4629/4926/4796 2552/4925/4795\nf 2552/4925/4795 4584/4831/4728 1548/4830/2330\nf 7771/4927/4797 7772/4928/4798 2552/4925/4795\nf 2552/4925/4795 4629/4926/4796 7771/4927/4797\nf 1251/3449/3384 4176/3957/3874 2552/4925/4795\nf 2552/4925/4795 7772/4928/4798 1251/3449/3384\nf 1262/3474/3409 4607/4885/4759 2553/4929/4799\nf 2553/4929/4799 4623/4913/4783 1262/3474/3409\nf 1559/4884/2383 4630/4930/2430 2553/4929/4799\nf 2553/4929/4799 4607/4885/4759 1559/4884/2383\nf 1561/4888/2391 4611/4886/4760 2553/4929/4799\nf 2553/4929/4799 4630/4930/2430 1561/4888/2391\nf 1370/3942/3859 4623/4913/4783 2553/4929/4799\nf 2553/4929/4799 4611/4886/4760 1370/3942/3859\nf 1097/3104/3045 4632/4931/4800 2554/4932/4801\nf 2554/4932/4801 3761/3099/3040 1097/3104/3045\nf 1219/3387/3328 3993/3574/3509 2554/4932/4801\nf 2554/4932/4801 4632/4931/4800 1219/3387/3328\nf 1139/3189/3130 4631/4933/4802 2554/4932/4801\nf 2554/4932/4801 3993/3574/3509 1139/3189/3130\nf 1096/3096/3037 3761/3099/3040 2554/4932/4801\nf 2554/4932/4801 4631/4933/4802 1096/3096/3037\nf 1096/3096/3037 4631/4933/4802 2555/4934/4803\nf 2555/4934/4803 4236/4058/3972 1096/3096/3037\nf 1139/3189/3130 3805/3192/3133 2555/4934/4803\nf 2555/4934/4803 4631/4933/4802 1139/3189/3130\nf 1140/3197/3138 4236/4058/3972 2555/4934/4803\nf 2555/4934/4803 3805/3192/3133 1140/3197/3138\nf 1141/3195/3136 3807/3194/3135 2556/4935/4804\nf 2556/4935/4804 4618/4900/4770 1141/3195/3136\nf 1142/3193/3134 4633/4936/4805 2556/4935/4804\nf 2556/4935/4804 3807/3194/3135 1142/3193/3134\nf 1564/4903/4773 4618/4900/4770 2556/4935/4804\nf 2556/4935/4804 4633/4936/4805 1564/4903/4773\nf 1564/4903/4773 4633/4936/4805 2557/4937/4806\nf 2557/4937/4806 4626/4918/4788 1564/4903/4773\nf 1142/3193/3134 3994/3575/3510 2557/4937/4806\nf 2557/4937/4806 4633/4936/4805 1142/3193/3134\nf 1220/3385/3326 4634/4938/4807 2557/4937/4806\nf 2557/4937/4806 3994/3575/3510 1220/3385/3326\nf 1565/4905/4775 4626/4918/4788 2557/4937/4806\nf 2557/4937/4806 4634/4938/4807 1565/4905/4775\nf 1565/4905/4775 4634/4938/4807 2558/4939/4808\nf 2558/4939/4808 4621/4906/4776 1565/4905/4775\nf 1220/3385/3326 3896/3384/3325 2558/4939/4808\nf 2558/4939/4808 4634/4938/4807 1220/3385/3326\nf 1221/3383/3324 4635/4940/4809 2558/4939/4808\nf 2558/4939/4808 3896/3384/3325 1221/3383/3324\nf 1566/4909/4779 4621/4906/4776 2558/4939/4808\nf 2558/4939/4808 4635/4940/4809 1566/4909/4779\nf 1566/4909/4779 4635/4940/4809 2559/4941/4810\nf 2559/4941/4810 4628/4923/4793 1566/4909/4779\nf 1221/3383/3324 4393/4403/4307 2559/4941/4810\nf 2559/4941/4810 4635/4940/4809 1221/3383/3324\nf 1137/3186/3127 4636/4942/4811 2559/4941/4810\nf 2559/4941/4810 4393/4403/4307 1137/3186/3127\nf 1562/4894/4764 4628/4923/4793 2559/4941/4810\nf 2559/4941/4810 4636/4942/4811 1562/4894/4764\nf 1562/4894/4764 4636/4942/4811 2560/4943/4812\nf 2560/4943/4812 4615/4895/4765 1562/4894/4764\nf 1137/3186/3127 3803/3185/3126 2560/4943/4812\nf 2560/4943/4812 4636/4942/4811 1137/3186/3127\nf 1138/3184/3125 4637/4944/4813 2560/4943/4812\nf 2560/4943/4812 3803/3185/3126 1138/3184/3125\nf 1563/4898/4768 4615/4895/4765 2560/4943/4812\nf 2560/4943/4812 4637/4944/4813 1563/4898/4768\nf 1563/4898/4768 4637/4944/4813 2561/4945/4814\nf 2561/4945/4814 4625/4914/4784 1563/4898/4768\nf 1138/3184/3125 3960/3510/3445 2561/4945/4814\nf 2561/4945/4814 4637/4944/4813 1138/3184/3125\nf 1273/3509/3444 4638/4946/4815 2561/4945/4814\nf 2561/4945/4814 3960/3510/3445 1273/3509/3444\nf 1567/4916/4786 4625/4914/4784 2561/4945/4814\nf 2561/4945/4814 4638/4946/4815 1567/4916/4786\nf 1567/4916/4786 4638/4946/4815 2562/4947/4816\nf 2562/4947/4816 4627/4920/4790 1567/4916/4786\nf 1273/3509/3444 4167/3934/3851 2562/4947/4816\nf 2562/4947/4816 4638/4946/4815 1273/3509/3444\nf 1261/3476/3411 4627/4920/4790 2562/4947/4816\nf 2562/4947/4816 4167/3934/3851 1261/3476/3411\nf 1260/3478/3413 4166/3933/3850 2563/4948/4817\nf 2563/4948/4817 3949/3489/3424 1260/3478/3413\nf 1272/3505/3440 4639/4949/4818 2563/4948/4817\nf 2563/4948/4817 4166/3933/3850 1272/3505/3440\nf 1101/3113/3054 3949/3489/3424 2563/4948/4817\nf 2563/4948/4817 4639/4949/4818 1101/3113/3054\nf 1101/3113/3054 4639/4949/4818 2564/4950/4819\nf 2564/4950/4819 3765/3108/3049 1101/3113/3054\nf 1272/3505/3440 3959/3508/3443 2564/4950/4819\nf 2564/4950/4819 4639/4949/4818 1272/3505/3440\nf 1135/3180/3121 4640/4951/4820 2564/4950/4819\nf 2564/4950/4819 3959/3508/3443 1135/3180/3121\nf 1100/3105/3046 3765/3108/3049 2564/4950/4819\nf 2564/4950/4819 4640/4951/4820 1100/3105/3046\nf 1100/3105/3046 4640/4951/4820 2565/4952/4821\nf 2565/4952/4821 4395/4409/4313 1100/3105/3046\nf 1135/3180/3121 3801/3183/3124 2565/4952/4821\nf 2565/4952/4821 4640/4951/4820 1135/3180/3121\nf 1136/3188/3129 4641/4953/4822 2565/4952/4821\nf 2565/4952/4821 3801/3183/3124 1136/3188/3129\nf 1213/3371/3312 4395/4409/4313 2565/4952/4821\nf 2565/4952/4821 4641/4953/4822 1213/3371/3312\nf 1213/3371/3312 4641/4953/4822 2566/4954/4823\nf 2566/4954/4823 3886/3366/3307 1213/3371/3312\nf 1136/3188/3129 4392/4402/4306 2566/4954/4823\nf 2566/4954/4823 4641/4953/4822 1136/3188/3129\nf 1218/3379/3320 4642/4955/4824 2566/4954/4823\nf 2566/4954/4823 4392/4402/4306 1218/3379/3320\nf 1212/3363/3304 3886/3366/3307 2566/4954/4823\nf 2566/4954/4823 4642/4955/4824 1212/3363/3304\nf 1212/3363/3304 4642/4955/4824 2567/4956/4825\nf 2567/4956/4825 3991/3571/3506 1212/3363/3304\nf 1218/3379/3320 3894/3382/3323 2567/4956/4825\nf 2567/4956/4825 4642/4955/4824 1218/3379/3320\nf 1219/3387/3328 4632/4931/4800 2567/4956/4825\nf 2567/4956/4825 3894/3382/3323 1219/3387/3328\nf 1097/3104/3045 3991/3571/3506 2567/4956/4825\nf 2567/4956/4825 4632/4931/4800 1097/3104/3045\nf 1211/3359/3300 4227/4043/3957 2568/4957/4826\nf 2568/4957/4826 4092/3761/3678 1211/3359/3300\nf 1381/3999/3916 4643/4958/4827 2568/4957/4826\nf 2568/4957/4826 4227/4043/3957 1381/3999/3916\nf 1330/3704/3633 4092/3761/3678 2568/4957/4826\nf 2568/4957/4826 4643/4958/4827 1330/3704/3633\nf 1330/3704/3633 4643/4958/4827 2569/4959/4828\nf 2569/4959/4828 4060/3705/3634 1330/3704/3633\nf 1381/3999/3916 4197/3998/3915 2569/4959/4828\nf 2569/4959/4828 4643/4958/4827 1381/3999/3916\nf 1382/3997/3914 4644/4960/4829 2569/4959/4828\nf 2569/4959/4828 4197/3998/3915 1382/3997/3914\nf 1329/3706/3635 4060/3705/3634 2569/4959/4828\nf 2569/4959/4828 4644/4960/4829 1329/3706/3635\nf 1329/3706/3635 4644/4960/4829 2570/4961/4830\nf 2570/4961/4830 4096/3769/3686 1329/3706/3635\nf 1382/3997/3914 4228/4045/3959 2570/4961/4830\nf 2570/4961/4830 4644/4960/4829 1382/3997/3914\nf 1388/4027/3941 4645/4962/4831 2570/4961/4830\nf 2570/4961/4830 4228/4045/3959 1388/4027/3941\nf 1234/3419/3360 4096/3769/3686 2570/4961/4830\nf 2570/4961/4830 4645/4962/4831 1234/3419/3360\nf 1234/3419/3360 4645/4962/4831 2571/4963/4832\nf 2571/4963/4832 3910/3414/3355 1234/3419/3360\nf 1388/4027/3941 4217/4026/3940 2571/4963/4832\nf 2571/4963/4832 4645/4962/4831 1388/4027/3941\nf 1389/4025/3939 4646/4964/4833 2571/4963/4832\nf 2571/4963/4832 4217/4026/3940 1389/4025/3939\nf 1233/3411/3352 3910/3414/3355 2571/4963/4832\nf 2571/4963/4832 4646/4964/4833 1233/3411/3352\nf 7773/4965/4834 4649/4966/4835 2572/4967/4836\nf 2572/4967/4836 7774/4968/4837 7773/4965/4834\nf 1569/4969/4838 4648/4970/4839 2572/4967/4836\nf 2572/4967/4836 4649/4966/4835 1569/4969/4838\nf 1568/2521/2471 4647/2520/2470 2572/4967/4836\nf 2572/4967/4836 4648/4970/4839 1568/2521/2471\nf 7437/2519/2469 7774/4968/4837 2572/4967/4836\nf 2572/4967/4836 4647/2520/2470 7437/2519/2469\nf 988/905/886 3548/2525/2475 2573/4971/4840\nf 2573/4971/4840 3925/3435/3370 988/905/886\nf 1571/2529/2479 4651/4972/4841 2573/4971/4840\nf 2573/4971/4840 3548/2525/2475 1571/2529/2479\nf 1570/4973/4842 4650/4974/4843 2573/4971/4840\nf 2573/4971/4840 4651/4972/4841 1570/4973/4842\nf 1247/3437/3372 3925/3435/3370 2573/4971/4840\nf 2573/4971/4840 4650/4974/4843 1247/3437/3372\nf 1247/3437/3372 4650/4974/4843 2574/4975/4844\nf 2574/4975/4844 4218/4024/3938 1247/3437/3372\nf 1570/4973/4842 4653/4976/4845 2574/4975/4844\nf 2574/4975/4844 4650/4974/4843 1570/4973/4842\nf 1572/4977/4846 4652/4978/4847 2574/4975/4844\nf 2574/4975/4844 4653/4976/4845 1572/4977/4846\nf 1389/4025/3939 4218/4024/3938 2574/4975/4844\nf 2574/4975/4844 4652/4978/4847 1389/4025/3939\nf 1389/4025/3939 4652/4978/4847 2575/4979/4848\nf 2575/4979/4848 7775/4980/4849 1389/4025/3939\nf 1572/4977/4846 4655/4981/4850 2575/4979/4848\nf 2575/4979/4848 4652/4978/4847 1572/4977/4846\nf 1573/4982/4851 4654/4983/4852 2575/4979/4848\nf 2575/4979/4848 4655/4981/4850 1573/4982/4851\nf 7776/4984/4853 7775/4980/4849 2575/4979/4848\nf 2575/4979/4848 4654/4983/4852 7776/4984/4853\nf 7776/4984/4853 4654/4983/4852 2576/4985/4854\nf 2576/4985/4854 7777/4986/4855 7776/4984/4853\nf 1573/4982/4851 4656/4987/4856 2576/4985/4854\nf 2576/4985/4854 4654/4983/4852 1573/4982/4851\nf 1569/4969/4838 4649/4966/4835 2576/4985/4854\nf 2576/4985/4854 4656/4987/4856 1569/4969/4838\nf 7773/4965/4834 7777/4986/4855 2576/4985/4854\nf 2576/4985/4854 4649/4966/4835 7773/4965/4834\nf 7778/4988/4857 4658/4989/4858 2577/4990/4859\nf 2577/4990/4859 7779/4991/4860 7778/4988/4857\nf 1574/4992/4861 4657/4993/4862 2577/4990/4859\nf 2577/4990/4859 4658/4989/4858 1574/4992/4861\nf 7780/4994/4863 7781/4995/4864 2577/4990/4859\nf 2577/4990/4859 4657/4993/4862 7780/4994/4863\nf 7782/4996/4865 7779/4991/4860 2577/4990/4859\nf 2577/4990/4859 7781/4995/4864 7782/4996/4865\nf 7444/2552/2502 3559/2555/2505 2578/4997/4866\nf 2578/4997/4866 7783/4998/4867 7444/2552/2502\nf 995/2560/2510 4660/4999/4868 2578/4997/4866\nf 2578/4997/4866 3559/2555/2505 995/2560/2510\nf 1575/5000/4869 4659/5001/4870 2578/4997/4866\nf 2578/4997/4866 4660/4999/4868 1575/5000/4869\nf 7784/5002/4871 7783/4998/4867 2578/4997/4866\nf 2578/4997/4866 4659/5001/4870 7784/5002/4871\nf 7784/5002/4871 4659/5001/4870 2579/5003/4872\nf 2579/5003/4872 7785/5004/4873 7784/5002/4871\nf 1575/5000/4869 4662/5005/4874 2579/5003/4872\nf 2579/5003/4872 4659/5001/4870 1575/5000/4869\nf 1576/5006/4875 4661/5007/4876 2579/5003/4872\nf 2579/5003/4872 4662/5005/4874 1576/5006/4875\nf 7786/5008/4877 7785/5004/4873 2579/5003/4872\nf 2579/5003/4872 4661/5007/4876 7786/5008/4877\nf 7786/5008/4877 4661/5007/4876 2580/5009/4878\nf 2580/5009/4878 7787/5010/4879 7786/5008/4877\nf 1576/5006/4875 4664/5011/4880 2580/5009/4878\nf 2580/5009/4878 4661/5007/4876 1576/5006/4875\nf 1577/5012/4881 4663/5013/4882 2580/5009/4878\nf 2580/5009/4878 4664/5011/4880 1577/5012/4881\nf 7788/5014/4883 7787/5010/4879 2580/5009/4878\nf 2580/5009/4878 4663/5013/4882 7788/5014/4883\nf 7788/5014/4883 4663/5013/4882 2581/5015/4884\nf 2581/5015/4884 7789/5016/4885 7788/5014/4883\nf 1577/5012/4881 4665/5017/4886 2581/5015/4884\nf 2581/5015/4884 4663/5013/4882 1577/5012/4881\nf 1574/4992/4861 4658/4989/4858 2581/5015/4884\nf 2581/5015/4884 4665/5017/4886 1574/4992/4861\nf 7778/4988/4857 7789/5016/4885 2581/5015/4884\nf 2581/5015/4884 4658/4989/4858 7778/4988/4857\nf 1290/1042/1023 3571/2577/2527 2582/5018/4887\nf 2582/5018/4887 3985/3557/3492 1290/1042/1023\nf 999/2581/2531 4667/5019/4888 2582/5018/4887\nf 2582/5018/4887 3571/2577/2527 999/2581/2531\nf 1578/5020/4889 4666/5021/4890 2582/5018/4887\nf 2582/5018/4887 4667/5019/4888 1578/5020/4889\nf 1289/3558/3493 3985/3557/3492 2582/5018/4887\nf 2582/5018/4887 4666/5021/4890 1289/3558/3493\nf 1289/3558/3493 4666/5021/4890 2583/5022/4891\nf 2583/5022/4891 4223/4035/3949 1289/3558/3493\nf 1578/5020/4889 4669/5023/4892 2583/5022/4891\nf 2583/5022/4891 4666/5021/4890 1578/5020/4889\nf 1579/5024/4893 4668/5025/4894 2583/5022/4891\nf 2583/5022/4891 4669/5023/4892 1579/5024/4893\nf 1294/3565/3500 4223/4035/3949 2583/5022/4891\nf 2583/5022/4891 4668/5025/4894 1294/3565/3500\nf 1294/3565/3500 4668/5025/4894 2584/5026/4895\nf 2584/5026/4895 3989/3566/3501 1294/3565/3500\nf 1579/5024/4893 4671/5027/4896 2584/5026/4895\nf 2584/5026/4895 4668/5025/4894 1579/5024/4893\nf 1580/5028/4897 4670/5029/4898 2584/5026/4895\nf 2584/5026/4895 4671/5027/4896 1580/5028/4897\nf 1293/3567/3502 3989/3566/3501 2584/5026/4895\nf 2584/5026/4895 4670/5029/4898 1293/3567/3502\nf 1293/3567/3502 4670/5029/4898 2585/5030/4899\nf 2585/5030/4899 4049/3680/3609 1293/3567/3502\nf 1580/5028/4897 4673/5031/4900 2585/5030/4899\nf 2585/5030/4899 4670/5029/4898 1580/5028/4897\nf 1581/5032/4901 4672/5033/4902 2585/5030/4899\nf 2585/5030/4899 4673/5031/4900 1581/5032/4901\nf 1309/3616/3551 4049/3680/3609 2585/5030/4899\nf 2585/5030/4899 4672/5033/4902 1309/3616/3551\nf 1309/3616/3551 4672/5033/4902 2586/5034/4903\nf 2586/5034/4903 4015/3617/3552 1309/3616/3551\nf 1581/5032/4901 4675/5035/4904 2586/5034/4903\nf 2586/5034/4903 4672/5033/4902 1581/5032/4901\nf 1582/5036/4905 4674/5037/4906 2586/5034/4903\nf 2586/5034/4903 4675/5035/4904 1582/5036/4905\nf 1308/3618/3553 4015/3617/3552 2586/5034/4903\nf 2586/5034/4903 4674/5037/4906 1308/3618/3553\nf 1308/3618/3553 4674/5037/4906 2587/5038/4907\nf 2587/5038/4907 4069/3718/3647 1308/3618/3553\nf 1582/5036/4905 4677/5039/4908 2587/5038/4907\nf 2587/5038/4907 4674/5037/4906 1582/5036/4905\nf 1583/5040/4909 4676/5041/4910 2587/5038/4907\nf 2587/5038/4907 4677/5039/4908 1583/5040/4909\nf 1332/3719/3648 4069/3718/3647 2587/5038/4907\nf 2587/5038/4907 4676/5041/4910 1332/3719/3648\nf 1332/3719/3648 4676/5041/4910 2588/5042/4911\nf 2588/5042/4911 4157/3909/3826 1332/3719/3648\nf 1583/5040/4909 4679/5043/4912 2588/5042/4911\nf 2588/5042/4911 4676/5041/4910 1583/5040/4909\nf 1584/5044/4913 4678/5045/4914 2588/5042/4911\nf 2588/5042/4911 4679/5043/4912 1584/5044/4913\nf 1367/3911/3828 4157/3909/3826 2588/5042/4911\nf 2588/5042/4911 4678/5045/4914 1367/3911/3828\nf 1367/3911/3828 4678/5045/4914 2589/5046/4915\nf 2589/5046/4915 4235/4056/3970 1367/3911/3828\nf 1584/5044/4913 4680/5047/4916 2589/5046/4915\nf 2589/5046/4915 4678/5045/4914 1584/5044/4913\nf 1007/2608/2558 3579/2607/2557 2589/5046/4915\nf 2589/5046/4915 4680/5047/4916 1007/2608/2558\nf 702/1570/1530 4235/4056/3970 2589/5046/4915\nf 2589/5046/4915 3579/2607/2557 702/1570/1530\nf 999/2581/2531 3589/2611/2561 2590/5048/4917\nf 2590/5048/4917 4667/5019/4888 999/2581/2531\nf 7454/2615/2565 7790/5049/4918 2590/5048/4917\nf 2590/5048/4917 3589/2611/2561 7454/2615/2565\nf 7791/5050/4919 4681/5051/4920 2590/5048/4917\nf 2590/5048/4917 7790/5049/4918 7791/5050/4919\nf 1578/5020/4889 4667/5019/4888 2590/5048/4917\nf 2590/5048/4917 4681/5051/4920 1578/5020/4889\nf 1578/5020/4889 4681/5051/4920 2591/5052/4921\nf 2591/5052/4921 4669/5023/4892 1578/5020/4889\nf 7791/5050/4919 4683/5053/4922 2591/5052/4921\nf 2591/5052/4921 4681/5051/4920 7791/5050/4919\nf 1585/5054/4923 4682/5055/4924 2591/5052/4921\nf 2591/5052/4921 4683/5053/4922 1585/5054/4923\nf 1579/5024/4893 4669/5023/4892 2591/5052/4921\nf 2591/5052/4921 4682/5055/4924 1579/5024/4893\nf 1579/5024/4893 4682/5055/4924 2592/5056/4925\nf 2592/5056/4925 4671/5027/4896 1579/5024/4893\nf 1585/5054/4923 4685/5057/4926 2592/5056/4925\nf 2592/5056/4925 4682/5055/4924 1585/5054/4923\nf 1586/5058/4927 4684/5059/4928 2592/5056/4925\nf 2592/5056/4925 4685/5057/4926 1586/5058/4927\nf 1580/5028/4897 4671/5027/4896 2592/5056/4925\nf 2592/5056/4925 4684/5059/4928 1580/5028/4897\nf 1580/5028/4897 4684/5059/4928 2593/5060/4929\nf 2593/5060/4929 4673/5031/4900 1580/5028/4897\nf 1586/5058/4927 4687/5061/4930 2593/5060/4929\nf 2593/5060/4929 4684/5059/4928 1586/5058/4927\nf 7792/5062/4931 4686/5063/4932 2593/5060/4929\nf 2593/5060/4929 4687/5061/4930 7792/5062/4931\nf 1581/5032/4901 4673/5031/4900 2593/5060/4929\nf 2593/5060/4929 4686/5063/4932 1581/5032/4901\nf 1581/5032/4901 4686/5063/4932 2594/5064/4933\nf 2594/5064/4933 4675/5035/4904 1581/5032/4901\nf 7792/5062/4931 7793/5065/4934 2594/5064/4933\nf 2594/5064/4933 4686/5063/4932 7792/5062/4931\nf 7794/5066/4935 4688/5067/4936 2594/5064/4933\nf 2594/5064/4933 7793/5065/4934 7794/5066/4935\nf 1582/5036/4905 4675/5035/4904 2594/5064/4933\nf 2594/5064/4933 4688/5067/4936 1582/5036/4905\nf 1582/5036/4905 4688/5067/4936 2595/5068/4937\nf 2595/5068/4937 4677/5039/4908 1582/5036/4905\nf 7794/5066/4935 7795/5069/4938 2595/5068/4937\nf 2595/5068/4937 4688/5067/4936 7794/5066/4935\nf 7796/5070/4939 4689/5071/4940 2595/5068/4937\nf 2595/5068/4937 7795/5069/4938 7796/5070/4939\nf 1583/5040/4909 4677/5039/4908 2595/5068/4937\nf 2595/5068/4937 4689/5071/4940 1583/5040/4909\nf 1583/5040/4909 4689/5071/4940 2596/5072/4941\nf 2596/5072/4941 4679/5043/4912 1583/5040/4909\nf 7796/5070/4939 7797/5073/4942 2596/5072/4941\nf 2596/5072/4941 4689/5071/4940 7796/5070/4939\nf 7798/5074/4943 4690/5075/4944 2596/5072/4941\nf 2596/5072/4941 7797/5073/4942 7798/5074/4943\nf 1584/5044/4913 4679/5043/4912 2596/5072/4941\nf 2596/5072/4941 4690/5075/4944 1584/5044/4913\nf 1584/5044/4913 4690/5075/4944 2597/5076/4945\nf 2597/5076/4945 4680/5047/4916 1584/5044/4913\nf 7798/5074/4943 7799/5077/4946 2597/5076/4945\nf 2597/5076/4945 4690/5075/4944 7798/5074/4943\nf 7462/2642/2592 3597/2641/2591 2597/5076/4945\nf 2597/5076/4945 7799/5077/4946 7462/2642/2592\nf 1007/2608/2558 4680/5047/4916 2597/5076/4945\nf 2597/5076/4945 3597/2641/2591 1007/2608/2558\nf 1303/3600/3535 4693/5078/4947 2598/5079/4948\nf 2598/5079/4948 4010/3601/3536 1303/3600/3535\nf 1588/5080/4949 4692/5081/4950 2598/5079/4948\nf 2598/5079/4948 4693/5078/4947 1588/5080/4949\nf 1587/5082/4951 4691/5083/4952 2598/5079/4948\nf 2598/5079/4948 4692/5081/4950 1587/5082/4951\nf 1125/3162/3103 4010/3601/3536 2598/5079/4948\nf 2598/5079/4948 4691/5083/4952 1125/3162/3103\nf 1125/3162/3103 4691/5083/4952 2599/5084/4953\nf 2599/5084/4953 3790/3163/3104 1125/3162/3103\nf 1587/5082/4951 4695/5085/4954 2599/5084/4953\nf 2599/5084/4953 4691/5083/4952 1587/5082/4951\nf 1589/5086/4955 4694/5087/4956 2599/5084/4953\nf 2599/5084/4953 4695/5085/4954 1589/5086/4955\nf 1124/3164/3105 3790/3163/3104 2599/5084/4953\nf 2599/5084/4953 4694/5087/4956 1124/3164/3105\nf 1124/3164/3105 4694/5087/4956 2600/5088/4957\nf 2600/5088/4957 7800/5089/4958 1124/3164/3105\nf 1589/5086/4955 4697/5090/4959 2600/5088/4957\nf 2600/5088/4957 4694/5087/4956 1589/5086/4955\nf 1590/5091/4960 4696/5092/4961 2600/5088/4957\nf 2600/5088/4957 4697/5090/4959 1590/5091/4960\nf 7801/5093/4962 7800/5089/4958 2600/5088/4957\nf 2600/5088/4957 4696/5092/4961 7801/5093/4962\nf 7801/5093/4962 4696/5092/4961 2601/5094/4963\nf 2601/5094/4963 7802/5095/4964 7801/5093/4962\nf 1590/5091/4960 4699/5096/4965 2601/5094/4963\nf 2601/5094/4963 4696/5092/4961 1590/5091/4960\nf 1591/5097/4966 4698/5098/4967 2601/5094/4963\nf 2601/5094/4963 4699/5096/4965 1591/5097/4966\nf 7803/5099/4968 7802/5095/4964 2601/5094/4963\nf 2601/5094/4963 4698/5098/4967 7803/5099/4968\nf 7803/5099/4968 4698/5098/4967 2602/5100/4969\nf 2602/5100/4969 7804/5101/4970 7803/5099/4968\nf 1591/5097/4966 4701/5102/4971 2602/5100/4969\nf 2602/5100/4969 4698/5098/4967 1591/5097/4966\nf 1592/5103/4972 4700/5104/4973 2602/5100/4969\nf 2602/5100/4969 4701/5102/4971 1592/5103/4972\nf 1368/3925/3842 7804/5101/4970 2602/5100/4969\nf 2602/5100/4969 4700/5104/4973 1368/3925/3842\nf 1368/3925/3842 4700/5104/4973 2603/5105/4974\nf 2603/5105/4974 4161/3926/3843 1368/3925/3842\nf 1592/5103/4972 4702/5106/4975 2603/5105/4974\nf 2603/5105/4974 4700/5104/4973 1592/5103/4972\nf 1588/5080/4949 4693/5078/4947 2603/5105/4974\nf 2603/5105/4974 4702/5106/4975 1588/5080/4949\nf 1303/3600/3535 4161/3926/3843 2603/5105/4974\nf 2603/5105/4974 4693/5078/4947 1303/3600/3535\nf 7805/5107/4976 4704/5108/4977 2604/5109/4978\nf 2604/5109/4978 7806/5110/4979 7805/5107/4976\nf 1203/3335/3276 4193/3991/3908 2604/5109/4978\nf 2604/5109/4978 4704/5108/4977 1203/3335/3276\nf 1380/3990/3907 4703/5111/4980 2604/5109/4978\nf 2604/5109/4978 4193/3991/3908 1380/3990/3907\nf 7807/5112/4981 7806/5110/4979 2604/5109/4978\nf 2604/5109/4978 4703/5111/4980 7807/5112/4981\nf 7807/5112/4981 4703/5111/4980 2605/5113/4982\nf 2605/5113/4982 7808/5114/4983 7807/5112/4981\nf 1380/3990/3907 7809/5115/4984 2605/5113/4982\nf 2605/5113/4982 4703/5111/4980 1380/3990/3907\nf 7810/5116/4985 4705/5117/4986 2605/5113/4982\nf 2605/5113/4982 7809/5115/4984 7810/5116/4985\nf 7811/5118/4987 7808/5114/4983 2605/5113/4982\nf 2605/5113/4982 4705/5117/4986 7811/5118/4987\nf 7812/5119/4988 7813/5120/4989 2606/5121/4990\nf 2606/5121/4990 7814/5122/4991 7812/5119/4988\nf 7815/5123/4992 7816/5124/4993 2606/5121/4990\nf 2606/5121/4990 7813/5120/4989 7815/5123/4992\nf 7817/5125/4994 4706/5126/4995 2606/5121/4990\nf 2606/5121/4990 7816/5124/4993 7817/5125/4994\nf 7818/5127/4996 7814/5122/4991 2606/5121/4990\nf 2606/5121/4990 4706/5126/4995 7818/5127/4996\nf 7818/5127/4996 4706/5126/4995 2607/5128/4997\nf 2607/5128/4997 7819/5129/4998 7818/5127/4996\nf 7817/5125/4994 7820/5130/4999 2607/5128/4997\nf 2607/5128/4997 4706/5126/4995 7817/5125/4994\nf 7821/5131/5000 4707/5132/5001 2607/5128/4997\nf 2607/5128/4997 7820/5130/4999 7821/5131/5000\nf 7822/5133/5002 7819/5129/4998 2607/5128/4997\nf 2607/5128/4997 4707/5132/5001 7822/5133/5002\nf 7822/5133/5002 4707/5132/5001 2608/5134/5003\nf 2608/5134/5003 7823/5135/5004 7822/5133/5002\nf 7821/5131/5000 7824/5136/5005 2608/5134/5003\nf 2608/5134/5003 4707/5132/5001 7821/5131/5000\nf 1202/3337/3278 4708/5137/5006 2608/5134/5003\nf 2608/5134/5003 7824/5136/5005 1202/3337/3278\nf 7825/5138/5007 7823/5135/5004 2608/5134/5003\nf 2608/5134/5003 4708/5137/5006 7825/5138/5007\nf 7825/5138/5007 4708/5137/5006 2609/5139/5008\nf 2609/5139/5008 7826/5140/5009 7825/5138/5007\nf 1202/3337/3278 3872/3336/3277 2609/5139/5008\nf 2609/5139/5008 4708/5137/5006 1202/3337/3278\nf 1203/3335/3276 4704/5108/4977 2609/5139/5008\nf 2609/5139/5008 3872/3336/3277 1203/3335/3276\nf 7805/5107/4976 7826/5140/5009 2609/5139/5008\nf 2609/5139/5008 4704/5108/4977 7805/5107/4976\nf 1120/3150/3091 4711/5141/5010 2610/5142/5011\nf 2610/5142/5011 4287/4190/4094 1120/3150/3091\nf 1594/5143/5012 4710/5144/5013 2610/5142/5011\nf 2610/5142/5011 4711/5141/5010 1594/5143/5012\nf 1593/5145/5014 4709/5146/5015 2610/5142/5011\nf 2610/5142/5011 4710/5144/5013 1593/5145/5014\nf 7698/4187/4091 4287/4190/4094 2610/5142/5011\nf 2610/5142/5011 4709/5146/5015 7698/4187/4091\nf 7698/4187/4091 4709/5146/5015 2611/5147/5016\nf 2611/5147/5016 7827/5148/5017 7698/4187/4091\nf 1593/5145/5014 4713/5149/5018 2611/5147/5016\nf 2611/5147/5016 4709/5146/5015 1593/5145/5014\nf 1595/5150/5019 4712/5151/5020 2611/5147/5016\nf 2611/5147/5016 4713/5149/5018 1595/5150/5019\nf 7828/5152/5021 7827/5148/5017 2611/5147/5016\nf 2611/5147/5016 4712/5151/5020 7828/5152/5021\nf 7828/5152/5021 4712/5151/5020 2612/5153/5022\nf 2612/5153/5022 7829/5154/5023 7828/5152/5021\nf 1595/5150/5019 4715/5155/5024 2612/5153/5022\nf 2612/5153/5022 4712/5151/5020 1595/5150/5019\nf 1596/5156/5025 4714/5157/5026 2612/5153/5022\nf 2612/5153/5022 4715/5155/5024 1596/5156/5025\nf 7830/5158/5027 7829/5154/5023 2612/5153/5022\nf 2612/5153/5022 4714/5157/5026 7830/5158/5027\nf 7830/5158/5027 4714/5157/5026 2613/5159/5028\nf 2613/5159/5028 7831/5160/5029 7830/5158/5027\nf 1596/5156/5025 4717/5161/5030 2613/5159/5028\nf 2613/5159/5028 4714/5157/5026 1596/5156/5025\nf 1597/5162/5031 4716/5163/5032 2613/5159/5028\nf 2613/5159/5028 4717/5161/5030 1597/5162/5031\nf 7832/5164/5033 7831/5160/5029 2613/5159/5028\nf 2613/5159/5028 4716/5163/5032 7832/5164/5033\nf 7832/5164/5033 4716/5163/5032 2614/5165/5034\nf 2614/5165/5034 7833/5166/5035 7832/5164/5033\nf 1597/5162/5031 4719/5167/5036 2614/5165/5034\nf 2614/5165/5034 4716/5163/5032 1597/5162/5031\nf 1598/5168/5037 4718/5169/5038 2614/5165/5034\nf 2614/5165/5034 4719/5167/5036 1598/5168/5037\nf 1401/4098/4006 7833/5166/5035 2614/5165/5034\nf 2614/5165/5034 4718/5169/5038 1401/4098/4006\nf 1401/4098/4006 4718/5169/5038 2615/5170/5039\nf 2615/5170/5039 4254/4099/4007 1401/4098/4006\nf 1598/5168/5037 4721/5171/5040 2615/5170/5039\nf 2615/5170/5039 4718/5169/5038 1598/5168/5037\nf 1599/5172/5041 4720/5173/5042 2615/5170/5039\nf 2615/5170/5039 4721/5171/5040 1599/5172/5041\nf 1343/3751/3668 4254/4099/4007 2615/5170/5039\nf 2615/5170/5039 4720/5173/5042 1343/3751/3668\nf 1343/3751/3668 4720/5173/5042 2616/5174/5043\nf 2616/5174/5043 4085/3752/3669 1343/3751/3668\nf 1599/5172/5041 4723/5175/5044 2616/5174/5043\nf 2616/5174/5043 4720/5173/5042 1599/5172/5041\nf 1600/5176/5045 4722/5177/5046 2616/5174/5043\nf 2616/5174/5043 4723/5175/5044 1600/5176/5045\nf 1121/3158/3099 4085/3752/3669 2616/5174/5043\nf 2616/5174/5043 4722/5177/5046 1121/3158/3099\nf 1121/3158/3099 4722/5177/5046 2617/5178/5047\nf 2617/5178/5047 3785/3153/3094 1121/3158/3099\nf 1600/5176/5045 4724/5179/5048 2617/5178/5047\nf 2617/5178/5047 4722/5177/5046 1600/5176/5045\nf 1594/5143/5012 4711/5141/5010 2617/5178/5047\nf 2617/5178/5047 4724/5179/5048 1594/5143/5012\nf 1120/3150/3091 3785/3153/3094 2617/5178/5047\nf 2617/5178/5047 4711/5141/5010 1120/3150/3091\nf 7834/5180/5049 4726/5181/5050 2618/5182/5051\nf 2618/5182/5051 7835/5183/5052 7834/5180/5049\nf 7836/5184/5053 7837/5185/5054 2618/5182/5051\nf 2618/5182/5051 4726/5181/5050 7836/5184/5053\nf 7838/5186/5055 4725/5187/5056 2618/5182/5051\nf 2618/5182/5051 7837/5185/5054 7838/5186/5055\nf 7839/5188/5057 7835/5183/5052 2618/5182/5051\nf 2618/5182/5051 4725/5187/5056 7839/5188/5057\nf 7839/5188/5057 4725/5187/5056 2619/5189/5058\nf 2619/5189/5058 7840/5190/5059 7839/5188/5057\nf 7838/5186/5055 7841/5191/5060 2619/5189/5058\nf 2619/5189/5058 4725/5187/5056 7838/5186/5055\nf 7842/5192/5061 4727/5193/5062 2619/5189/5058\nf 2619/5189/5058 7841/5191/5060 7842/5192/5061\nf 7843/5194/5063 7840/5190/5059 2619/5189/5058\nf 2619/5189/5058 4727/5193/5062 7843/5194/5063\nf 7843/5194/5063 4727/5193/5062 2620/5195/5064\nf 2620/5195/5064 7844/5196/5065 7843/5194/5063\nf 7842/5192/5061 7845/5197/5066 2620/5195/5064\nf 2620/5195/5064 4727/5193/5062 7842/5192/5061\nf 7846/5198/5067 4728/5199/5068 2620/5195/5064\nf 2620/5195/5064 7845/5197/5066 7846/5198/5067\nf 7847/5200/5069 7844/5196/5065 2620/5195/5064\nf 2620/5195/5064 4728/5199/5068 7847/5200/5069\nf 7848/5201/5070 7849/5202/5071 2621/5203/5072\nf 2621/5203/5072 7850/5204/5073 7848/5201/5070\nf 7851/5205/5074 7852/5206/5075 2621/5203/5072\nf 2621/5203/5072 7849/5202/5071 7851/5205/5074\nf 7853/5207/5076 4729/5208/5077 2621/5203/5072\nf 2621/5203/5072 7852/5206/5075 7853/5207/5076\nf 7854/5209/5078 7850/5204/5073 2621/5203/5072\nf 2621/5203/5072 4729/5208/5077 7854/5209/5078\nf 7854/5209/5078 4729/5208/5077 2622/5210/5079\nf 2622/5210/5079 7855/5211/5080 7854/5209/5078\nf 7853/5207/5076 7856/5212/5081 2622/5210/5079\nf 2622/5210/5079 4729/5208/5077 7853/5207/5076\nf 1396/4076/3988 4730/5213/5082 2622/5210/5079\nf 2622/5210/5079 7856/5212/5081 1396/4076/3988\nf 7857/5214/5083 7855/5211/5080 2622/5210/5079\nf 2622/5210/5079 4730/5213/5082 7857/5214/5083\nf 7857/5214/5083 4730/5213/5082 2623/5215/5084\nf 2623/5215/5084 7858/5216/5085 7857/5214/5083\nf 1396/4076/3988 4245/4079/3989 2623/5215/5084\nf 2623/5215/5084 4730/5213/5082 1396/4076/3988\nf 1335/3727/3656 4731/5217/5086 2623/5215/5084\nf 2623/5215/5084 4245/4079/3989 1335/3727/3656\nf 7859/5218/5087 7858/5216/5085 2623/5215/5084\nf 2623/5215/5084 4731/5217/5086 7859/5218/5087\nf 7859/5218/5087 4731/5217/5086 2624/5219/5088\nf 2624/5219/5088 7860/5220/5089 7859/5218/5087\nf 1335/3727/3656 4074/3730/3657 2624/5219/5088\nf 2624/5219/5088 4731/5217/5086 1335/3727/3656\nf 1336/3735/3658 4732/5221/5090 2624/5219/5088\nf 2624/5219/5088 4074/3730/3657 1336/3735/3658\nf 7861/5222/5091 7860/5220/5089 2624/5219/5088\nf 2624/5219/5088 4732/5221/5090 7861/5222/5091\nf 7861/5222/5091 4732/5221/5090 2625/5223/5092\nf 2625/5223/5092 7862/5224/5093 7861/5222/5091\nf 1336/3735/3658 7863/5225/5094 2625/5223/5092\nf 2625/5223/5092 4732/5221/5090 1336/3735/3658\nf 7836/5184/5053 4726/5181/5050 2625/5223/5092\nf 2625/5223/5092 7863/5225/5094 7836/5184/5053\nf 7834/5180/5049 7862/5224/5093 2625/5223/5092\nf 2625/5223/5092 4726/5181/5050 7834/5180/5049\nf 7864/5226/5095 4734/5227/5096 2626/5228/5097\nf 2626/5228/5097 7865/5229/5098 7864/5226/5095\nf 7866/5230/5099 7867/5231/5100 2626/5228/5097\nf 2626/5228/5097 4734/5227/5096 7866/5230/5099\nf 7868/5232/5101 4733/5233/5102 2626/5228/5097\nf 2626/5228/5097 7867/5231/5100 7868/5232/5101\nf 7869/5234/5103 7865/5229/5098 2626/5228/5097\nf 2626/5228/5097 4733/5233/5102 7869/5234/5103\nf 7870/5235/5104 4735/5236/5105 2627/5237/5106\nf 2627/5237/5106 7871/5238/5107 7870/5235/5104\nf 7872/5239/5108 7873/5240/5109 2627/5237/5106\nf 2627/5237/5106 4735/5236/5105 7872/5239/5108\nf 7866/5230/5099 4734/5227/5096 2627/5237/5106\nf 2627/5237/5106 7873/5240/5109 7866/5230/5099\nf 7864/5226/5095 7871/5238/5107 2627/5237/5106\nf 2627/5237/5106 4734/5227/5096 7864/5226/5095\nf 7874/5241/5110 4737/5242/5111 2628/5243/5112\nf 2628/5243/5112 7875/5244/5113 7874/5241/5110\nf 7876/5245/5114 7877/5246/5115 2628/5243/5112\nf 2628/5243/5112 4737/5242/5111 7876/5245/5114\nf 7878/5247/5116 4736/5248/5117 2628/5243/5112\nf 2628/5243/5112 7877/5246/5115 7878/5247/5116\nf 7879/5249/5118 7875/5244/5113 2628/5243/5112\nf 2628/5243/5112 4736/5248/5117 7879/5249/5118\nf 7880/5250/5119 4738/5251/5120 2629/5252/5121\nf 2629/5252/5121 7881/5253/5122 7880/5250/5119\nf 7882/5254/5123 7883/5255/5124 2629/5252/5121\nf 2629/5252/5121 4738/5251/5120 7882/5254/5123\nf 7876/5245/5114 4737/5242/5111 2629/5252/5121\nf 2629/5252/5121 7883/5255/5124 7876/5245/5114\nf 7874/5241/5110 7881/5253/5122 2629/5252/5121\nf 2629/5252/5121 4737/5242/5111 7874/5241/5110\nf 7884/5256/5125 4740/5257/5126 2630/5258/5127\nf 2630/5258/5127 7885/5259/5128 7884/5256/5125\nf 7886/5260/5129 7887/5261/5130 2630/5258/5127\nf 2630/5258/5127 4740/5257/5126 7886/5260/5129\nf 7888/5262/5131 4739/5263/5132 2630/5258/5127\nf 2630/5258/5127 7887/5261/5130 7888/5262/5131\nf 7889/5264/5133 7885/5259/5128 2630/5258/5127\nf 2630/5258/5127 4739/5263/5132 7889/5264/5133\nf 7890/5265/5134 4741/5266/5135 2631/5267/5136\nf 2631/5267/5136 7891/5268/5137 7890/5265/5134\nf 7892/5269/5138 7893/5270/5139 2631/5267/5136\nf 2631/5267/5136 4741/5266/5135 7892/5269/5138\nf 7886/5260/5129 4740/5257/5126 2631/5267/5136\nf 2631/5267/5136 7893/5270/5139 7886/5260/5129\nf 7884/5256/5125 7891/5268/5137 2631/5267/5136\nf 2631/5267/5136 4740/5257/5126 7884/5256/5125\nf 7894/5271/5140 4743/5272/5141 2632/5273/5142\nf 2632/5273/5142 7895/5274/5143 7894/5271/5140\nf 1601/5275/5144 4742/5276/5145 2632/5273/5142\nf 2632/5273/5142 4743/5272/5141 1601/5275/5144\nf 7896/5277/5146 7897/5278/5147 2632/5273/5142\nf 2632/5273/5142 4742/5276/5145 7896/5277/5146\nf 7869/5234/5103 4733/5233/5102 2632/5273/5142\nf 2632/5273/5142 7897/5278/5147 7869/5234/5103\nf 7868/5232/5101 7898/5279/5148 2632/5273/5142\nf 2632/5273/5142 4733/5233/5102 7868/5232/5101\nf 7899/5280/5149 7895/5274/5143 2632/5273/5142\nf 2632/5273/5142 7898/5279/5148 7899/5280/5149\nf 1602/2847/2797 4745/5281/5150 2633/5282/5151\nf 2633/5282/5151 4744/2848/2798 1602/2847/2797\nf 1601/5275/5144 4743/5272/5141 2633/5282/5151\nf 2633/5282/5151 4745/5281/5150 1601/5275/5144\nf 7894/5271/5140 7900/5283/5152 2633/5282/5151\nf 2633/5282/5151 4743/5272/5141 7894/5271/5140\nf 7901/5284/5153 7902/5285/5154 2633/5282/5151\nf 2633/5282/5151 7900/5283/5152 7901/5284/5153\nf 7564/2851/2801 4744/2848/2798 2633/5282/5151\nf 2633/5282/5151 7902/5285/5154 7564/2851/2801\nf 7878/5247/5116 4748/5286/5155 2634/5287/5156\nf 2634/5287/5156 4736/5248/5117 7878/5247/5116\nf 1604/5288/5157 4747/5289/5158 2634/5287/5156\nf 2634/5287/5156 4748/5286/5155 1604/5288/5157\nf 1603/5290/5159 4746/5291/5160 2634/5287/5156\nf 2634/5287/5156 4747/5289/5158 1603/5290/5159\nf 7903/5292/5161 7904/5293/5162 2634/5287/5156\nf 2634/5287/5156 4746/5291/5160 7903/5292/5161\nf 7879/5249/5118 4736/5248/5117 2634/5287/5156\nf 2634/5287/5156 7904/5293/5162 7879/5249/5118\nf 1604/5288/5157 4750/5294/5163 2635/5295/5164\nf 2635/5295/5164 4747/5289/5158 1604/5288/5157\nf 1046/2868/2818 3674/2867/2817 2635/5295/5164\nf 2635/5295/5164 4750/5294/5163 1046/2868/2818\nf 1049/2866/2816 4749/5296/5165 2635/5295/5164\nf 2635/5295/5164 3674/2867/2817 1049/2866/2816\nf 1603/5290/5159 4747/5289/5158 2635/5295/5164\nf 2635/5295/5164 4749/5296/5165 1603/5290/5159\nf 7896/5277/5146 4742/5276/5145 2636/5297/5166\nf 2636/5297/5166 7905/5298/5167 7896/5277/5146\nf 1601/5275/5144 4751/5299/5168 2636/5297/5166\nf 2636/5297/5166 4742/5276/5145 1601/5275/5144\nf 1604/5288/5157 4748/5286/5155 2636/5297/5166\nf 2636/5297/5166 4751/5299/5168 1604/5288/5157\nf 7878/5247/5116 7906/5300/5169 2636/5297/5166\nf 2636/5297/5166 4748/5286/5155 7878/5247/5116\nf 7907/5301/5170 7905/5298/5167 2636/5297/5166\nf 2636/5297/5166 7906/5300/5169 7907/5301/5170\nf 1601/5275/5144 4745/5281/5150 2637/5302/5171\nf 2637/5302/5171 4751/5299/5168 1601/5275/5144\nf 1602/2847/2797 3667/2875/2825 2637/5302/5171\nf 2637/5302/5171 4745/5281/5150 1602/2847/2797\nf 1046/2868/2818 4750/5294/5163 2637/5302/5171\nf 2637/5302/5171 3667/2875/2825 1046/2868/2818\nf 1604/5288/5157 4751/5299/5168 2637/5302/5171\nf 2637/5302/5171 4750/5294/5163 1604/5288/5157\nf 7903/5292/5161 4746/5291/5160 2638/5303/5172\nf 2638/5303/5172 7908/5304/5173 7903/5292/5161\nf 1603/5290/5159 4752/5305/5174 2638/5303/5172\nf 2638/5303/5172 4746/5291/5160 1603/5290/5159\nf 7909/5306/5175 7910/5307/5176 2638/5303/5172\nf 2638/5303/5172 4752/5305/5174 7909/5306/5175\nf 7911/5308/5177 7912/5309/5178 2638/5303/5172\nf 2638/5303/5172 7910/5307/5176 7911/5308/5177\nf 7892/5269/5138 4741/5266/5135 2638/5303/5172\nf 2638/5303/5172 7912/5309/5178 7892/5269/5138\nf 7890/5265/5134 7913/5310/5179 2638/5303/5172\nf 2638/5303/5172 4741/5266/5135 7890/5265/5134\nf 7914/5311/5180 7908/5304/5173 2638/5303/5172\nf 2638/5303/5172 7913/5310/5179 7914/5311/5180\nf 1603/5290/5159 4749/5296/5165 2639/5312/5181\nf 2639/5312/5181 4752/5305/5174 1603/5290/5159\nf 1049/2866/2816 3663/2890/2840 2639/5312/5181\nf 2639/5312/5181 4749/5296/5165 1049/2866/2816\nf 7583/2889/2839 7915/5313/5182 2639/5312/5181\nf 2639/5312/5181 3663/2890/2840 7583/2889/2839\nf 7916/5314/5183 7917/5315/5184 2639/5312/5181\nf 2639/5312/5181 7915/5313/5182 7916/5314/5183\nf 7909/5306/5175 4752/5305/5174 2639/5312/5181\nf 2639/5312/5181 7917/5315/5184 7909/5306/5175\nf 1575/5000/4869 4753/5316/5185 2640/5317/5186\nf 2640/5317/5186 4662/5005/4874 1575/5000/4869\nf 7918/5318/5187 7919/5319/5188 2640/5317/5186\nf 2640/5317/5186 4753/5316/5185 7918/5318/5187\nf 7920/5320/5189 7921/5321/5190 2640/5317/5186\nf 2640/5317/5186 7919/5319/5188 7920/5320/5189\nf 1576/5006/4875 4662/5005/4874 2640/5317/5186\nf 2640/5317/5186 7921/5321/5190 1576/5006/4875\nf 995/2560/2510 3677/2898/2848 2641/5322/5191\nf 2641/5322/5191 4660/4999/4868 995/2560/2510\nf 7589/2900/2850 7922/5323/5192 2641/5322/5191\nf 2641/5322/5191 3677/2898/2848 7589/2900/2850\nf 7918/5318/5187 4753/5316/5185 2641/5322/5191\nf 2641/5322/5191 7922/5323/5192 7918/5318/5187\nf 1575/5000/4869 4660/4999/4868 2641/5322/5191\nf 2641/5322/5191 4753/5316/5185 1575/5000/4869\nf 1605/5324/5193 4757/5325/5194 2642/5326/5195\nf 2642/5326/5195 4754/5327/5196 1605/5324/5193\nf 1608/5328/5197 4756/5329/5198 2642/5326/5195\nf 2642/5326/5195 4757/5325/5194 1608/5328/5197\nf 1607/5330/5199 4755/5331/5200 2642/5326/5195\nf 2642/5326/5195 4756/5329/5198 1607/5330/5199\nf 1606/5332/5201 4754/5327/5196 2642/5326/5195\nf 2642/5326/5195 4755/5331/5200 1606/5332/5201\nf 1608/5328/5197 4760/5333/5202 2643/5334/5203\nf 2643/5334/5203 4756/5329/5198 1608/5328/5197\nf 1610/5335/5204 4759/5336/5205 2643/5334/5203\nf 2643/5334/5203 4760/5333/5202 1610/5335/5204\nf 1609/5337/5206 4758/5338/5207 2643/5334/5203\nf 2643/5334/5203 4759/5336/5205 1609/5337/5206\nf 1607/5330/5199 4756/5329/5198 2643/5334/5203\nf 2643/5334/5203 4758/5338/5207 1607/5330/5199\nf 1611/5339/5208 4764/5340/5209 2644/5341/5210\nf 2644/5341/5210 4761/5342/5211 1611/5339/5208\nf 1614/5343/5212 4763/5344/5213 2644/5341/5210\nf 2644/5341/5210 4764/5340/5209 1614/5343/5212\nf 1613/5345/5214 4762/5346/5215 2644/5341/5210\nf 2644/5341/5210 4763/5344/5213 1613/5345/5214\nf 1612/5347/5216 4761/5342/5211 2644/5341/5210\nf 2644/5341/5210 4762/5346/5215 1612/5347/5216\nf 1612/5347/5216 4762/5346/5215 2645/5348/5217\nf 2645/5348/5217 4765/5349/5218 1612/5347/5216\nf 1613/5345/5214 4767/5350/5219 2645/5348/5217\nf 2645/5348/5217 4762/5346/5215 1613/5345/5214\nf 1616/5351/5220 4766/5352/5221 2645/5348/5217\nf 2645/5348/5217 4767/5350/5219 1616/5351/5220\nf 1615/5353/5222 4765/5349/5218 2645/5348/5217\nf 2645/5348/5217 4766/5352/5221 1615/5353/5222\nf 1605/5324/5193 4769/5354/5223 2646/5355/5224\nf 2646/5355/5224 4757/5325/5194 1605/5324/5193\nf 1611/5339/5208 4761/5342/5211 2646/5355/5224\nf 2646/5355/5224 4769/5354/5223 1611/5339/5208\nf 1612/5347/5216 4768/5356/5225 2646/5355/5224\nf 2646/5355/5224 4761/5342/5211 1612/5347/5216\nf 1608/5328/5197 4757/5325/5194 2646/5355/5224\nf 2646/5355/5224 4768/5356/5225 1608/5328/5197\nf 1608/5328/5197 4768/5356/5225 2647/5357/5226\nf 2647/5357/5226 4760/5333/5202 1608/5328/5197\nf 1612/5347/5216 4765/5349/5218 2647/5357/5226\nf 2647/5357/5226 4768/5356/5225 1612/5347/5216\nf 1615/5353/5222 4770/5358/5227 2647/5357/5226\nf 2647/5357/5226 4765/5349/5218 1615/5353/5222\nf 1610/5335/5204 4760/5333/5202 2647/5357/5226\nf 2647/5357/5226 4770/5358/5227 1610/5335/5204\nf 1610/5335/5204 4770/5358/5227 2648/5359/5228\nf 2648/5359/5228 4759/5336/5205 1610/5335/5204\nf 1615/5353/5222 4766/5352/5221 2648/5359/5228\nf 2648/5359/5228 4770/5358/5227 1615/5353/5222\nf 1616/5351/5220 4771/5360/5229 2648/5359/5228\nf 2648/5359/5228 4766/5352/5221 1616/5351/5220\nf 1609/5337/5206 4759/5336/5205 2648/5359/5228\nf 2648/5359/5228 4771/5360/5229 1609/5337/5206\nf 1617/5361/5230 4775/5362/5231 2649/5363/5232\nf 2649/5363/5232 4772/5364/5233 1617/5361/5230\nf 1618/5365/5234 4774/5366/5235 2649/5363/5232\nf 2649/5363/5232 4775/5362/5231 1618/5365/5234\nf 1614/5343/5212 4773/5367/5236 2649/5363/5232\nf 2649/5363/5232 4774/5366/5235 1614/5343/5212\nf 1606/5332/5201 4772/5364/5233 2649/5363/5232\nf 2649/5363/5232 4773/5367/5236 1606/5332/5201\nf 1606/5332/5201 4755/5331/5200 2650/5368/5237\nf 2650/5368/5237 7923/5369/5238 1606/5332/5201\nf 1607/5330/5199 4777/5370/5239 2650/5368/5237\nf 2650/5368/5237 4755/5331/5200 1607/5330/5199\nf 1619/5371/5240 4776/5372/5241 2650/5368/5237\nf 2650/5368/5237 4777/5370/5239 1619/5371/5240\nf 7924/5373/5242 7923/5369/5238 2650/5368/5237\nf 2650/5368/5237 4776/5372/5241 7924/5373/5242\nf 1607/5330/5199 4758/5338/5207 2651/5374/5243\nf 2651/5374/5243 4777/5370/5239 1607/5330/5199\nf 1609/5337/5206 4779/5375/5244 2651/5374/5243\nf 2651/5374/5243 4758/5338/5207 1609/5337/5206\nf 1620/5376/5245 4778/5377/5246 2651/5374/5243\nf 2651/5374/5243 4779/5375/5244 1620/5376/5245\nf 1619/5371/5240 4777/5370/5239 2651/5374/5243\nf 2651/5374/5243 4778/5377/5246 1619/5371/5240\nf 1613/5345/5214 4763/5344/5213 2652/5378/5247\nf 2652/5378/5247 4780/5379/5248 1613/5345/5214\nf 1614/5343/5212 7925/5380/5249 2652/5378/5247\nf 2652/5378/5247 4763/5344/5213 1614/5343/5212\nf 7926/5381/5250 4781/5382/5251 2652/5378/5247\nf 2652/5378/5247 7925/5380/5249 7926/5381/5250\nf 1621/5383/5252 4780/5379/5248 2652/5378/5247\nf 2652/5378/5247 4781/5382/5251 1621/5383/5252\nf 1616/5351/5220 4767/5350/5219 2653/5384/5253\nf 2653/5384/5253 4782/5385/5254 1616/5351/5220\nf 1613/5345/5214 4780/5379/5248 2653/5384/5253\nf 2653/5384/5253 4767/5350/5219 1613/5345/5214\nf 1621/5383/5252 4783/5386/5255 2653/5384/5253\nf 2653/5384/5253 4780/5379/5248 1621/5383/5252\nf 1622/5387/5256 4782/5385/5254 2653/5384/5253\nf 2653/5384/5253 4783/5386/5255 1622/5387/5256\nf 1606/5332/5201 4773/5367/5236 2654/5388/5257\nf 2654/5388/5257 4754/5327/5196 1606/5332/5201\nf 1614/5343/5212 4764/5340/5209 2654/5388/5257\nf 2654/5388/5257 4773/5367/5236 1614/5343/5212\nf 1611/5339/5208 4769/5354/5223 2654/5388/5257\nf 2654/5388/5257 4764/5340/5209 1611/5339/5208\nf 1605/5324/5193 4754/5327/5196 2654/5388/5257\nf 2654/5388/5257 4769/5354/5223 1605/5324/5193\nf 1619/5371/5240 4786/5389/5258 2655/5390/5259\nf 2655/5390/5259 4776/5372/5241 1619/5371/5240\nf 1624/5391/5260 4785/5392/5261 2655/5390/5259\nf 2655/5390/5259 4786/5389/5258 1624/5391/5260\nf 1623/5393/5262 4784/5394/5263 2655/5390/5259\nf 2655/5390/5259 4785/5392/5261 1623/5393/5262\nf 7924/5373/5242 4776/5372/5241 2655/5390/5259\nf 2655/5390/5259 4784/5394/5263 7924/5373/5242\nf 7924/5373/5242 4784/5394/5263 2656/5395/5264\nf 2656/5395/5264 7927/5396/5265 7924/5373/5242\nf 1623/5393/5262 4788/5397/5266 2656/5395/5264\nf 2656/5395/5264 4784/5394/5263 1623/5393/5262\nf 1625/5398/5267 4787/5399/5268 2656/5395/5264\nf 2656/5395/5264 4788/5397/5266 1625/5398/5267\nf 7928/5400/5269 7927/5396/5265 2656/5395/5264\nf 2656/5395/5264 4787/5399/5268 7928/5400/5269\nf 7928/5400/5269 4787/5399/5268 2657/5401/5270\nf 2657/5401/5270 7929/5402/5271 7928/5400/5269\nf 1625/5398/5267 4790/5403/5272 2657/5401/5270\nf 2657/5401/5270 4787/5399/5268 1625/5398/5267\nf 1626/5404/5273 4789/5405/5274 2657/5401/5270\nf 2657/5401/5270 4790/5403/5272 1626/5404/5273\nf 7930/5406/5275 7929/5402/5271 2657/5401/5270\nf 2657/5401/5270 4789/5405/5274 7930/5406/5275\nf 7930/5406/5275 4789/5405/5274 2658/5407/5276\nf 2658/5407/5276 7931/5408/5277 7930/5406/5275\nf 1626/5404/5273 4792/5409/5278 2658/5407/5276\nf 2658/5407/5276 4789/5405/5274 1626/5404/5273\nf 1627/5410/5279 4791/5411/5280 2658/5407/5276\nf 2658/5407/5276 4792/5409/5278 1627/5410/5279\nf 7932/5412/5281 7931/5408/5277 2658/5407/5276\nf 2658/5407/5276 4791/5411/5280 7932/5412/5281\nf 7932/5412/5281 4791/5411/5280 2659/5413/5282\nf 2659/5413/5282 4793/5414/5283 7932/5412/5281\nf 1627/5410/5279 4795/5415/5284 2659/5413/5282\nf 2659/5413/5282 4791/5411/5280 1627/5410/5279\nf 1628/5416/5285 4794/5417/5286 2659/5413/5282\nf 2659/5413/5282 4795/5415/5284 1628/5416/5285\nf 1620/5376/5245 4793/5414/5283 2659/5413/5282\nf 2659/5413/5282 4794/5417/5286 1620/5376/5245\nf 1620/5376/5245 4794/5417/5286 2660/5418/5287\nf 2660/5418/5287 4778/5377/5246 1620/5376/5245\nf 1628/5416/5285 4796/5419/5288 2660/5418/5287\nf 2660/5418/5287 4794/5417/5286 1628/5416/5285\nf 1624/5391/5260 4786/5389/5258 2660/5418/5287\nf 2660/5418/5287 4796/5419/5288 1624/5391/5260\nf 1619/5371/5240 4778/5377/5246 2660/5418/5287\nf 2660/5418/5287 4786/5389/5258 1619/5371/5240\nf 1624/5391/5260 4799/5420/5289 2661/5421/5290\nf 2661/5421/5290 4785/5392/5261 1624/5391/5260\nf 1630/5422/5291 4798/5423/5292 2661/5421/5290\nf 2661/5421/5290 4799/5420/5289 1630/5422/5291\nf 1629/5424/5293 4797/5425/5294 2661/5421/5290\nf 2661/5421/5290 4798/5423/5292 1629/5424/5293\nf 1623/5393/5262 4785/5392/5261 2661/5421/5290\nf 2661/5421/5290 4797/5425/5294 1623/5393/5262\nf 1623/5393/5262 4797/5425/5294 2662/5426/5295\nf 2662/5426/5295 4788/5397/5266 1623/5393/5262\nf 1629/5424/5293 4801/5427/5296 2662/5426/5295\nf 2662/5426/5295 4797/5425/5294 1629/5424/5293\nf 1631/5428/5297 4800/5429/5298 2662/5426/5295\nf 2662/5426/5295 4801/5427/5296 1631/5428/5297\nf 1625/5398/5267 4788/5397/5266 2662/5426/5295\nf 2662/5426/5295 4800/5429/5298 1625/5398/5267\nf 1625/5398/5267 4800/5429/5298 2663/5430/5299\nf 2663/5430/5299 4790/5403/5272 1625/5398/5267\nf 1631/5428/5297 4803/5431/5300 2663/5430/5299\nf 2663/5430/5299 4800/5429/5298 1631/5428/5297\nf 1632/5432/5301 4802/5433/5302 2663/5430/5299\nf 2663/5430/5299 4803/5431/5300 1632/5432/5301\nf 1626/5404/5273 4790/5403/5272 2663/5430/5299\nf 2663/5430/5299 4802/5433/5302 1626/5404/5273\nf 1626/5404/5273 4802/5433/5302 2664/5434/5303\nf 2664/5434/5303 4792/5409/5278 1626/5404/5273\nf 1632/5432/5301 4805/5435/5304 2664/5434/5303\nf 2664/5434/5303 4802/5433/5302 1632/5432/5301\nf 1633/5436/5305 4804/5437/5306 2664/5434/5303\nf 2664/5434/5303 4805/5435/5304 1633/5436/5305\nf 1627/5410/5279 4792/5409/5278 2664/5434/5303\nf 2664/5434/5303 4804/5437/5306 1627/5410/5279\nf 1627/5410/5279 4804/5437/5306 2665/5438/5307\nf 2665/5438/5307 4795/5415/5284 1627/5410/5279\nf 1633/5436/5305 4807/5439/5308 2665/5438/5307\nf 2665/5438/5307 4804/5437/5306 1633/5436/5305\nf 1634/5440/5309 4806/5441/5310 2665/5438/5307\nf 2665/5438/5307 4807/5439/5308 1634/5440/5309\nf 1628/5416/5285 4795/5415/5284 2665/5438/5307\nf 2665/5438/5307 4806/5441/5310 1628/5416/5285\nf 1628/5416/5285 4806/5441/5310 2666/5442/5311\nf 2666/5442/5311 4796/5419/5288 1628/5416/5285\nf 1634/5440/5309 4808/5443/5312 2666/5442/5311\nf 2666/5442/5311 4806/5441/5310 1634/5440/5309\nf 1630/5422/5291 4799/5420/5289 2666/5442/5311\nf 2666/5442/5311 4808/5443/5312 1630/5422/5291\nf 1624/5391/5260 4796/5419/5288 2666/5442/5311\nf 2666/5442/5311 4799/5420/5289 1624/5391/5260\nf 1609/5337/5206 4811/5444/5313 2667/5445/5314\nf 2667/5445/5314 7933/5446/5315 1609/5337/5206\nf 1636/5447/5316 4810/5448/5317 2667/5445/5314\nf 2667/5445/5314 4811/5444/5313 1636/5447/5316\nf 1635/5449/5318 4809/5450/5319 2667/5445/5314\nf 2667/5445/5314 4810/5448/5317 1635/5449/5318\nf 7934/5451/5320 7933/5446/5315 2667/5445/5314\nf 2667/5445/5314 4809/5450/5319 7934/5451/5320\nf 7934/5451/5320 4809/5450/5319 2668/5452/5321\nf 2668/5452/5321 7935/5453/5322 7934/5451/5320\nf 1635/5449/5318 4813/5454/5323 2668/5452/5321\nf 2668/5452/5321 4809/5450/5319 1635/5449/5318\nf 1637/5455/5324 4812/5456/5325 2668/5452/5321\nf 2668/5452/5321 4813/5454/5323 1637/5455/5324\nf 7936/5457/5326 7935/5453/5322 2668/5452/5321\nf 2668/5452/5321 4812/5456/5325 7936/5457/5326\nf 7936/5457/5326 4812/5456/5325 2669/5458/5327\nf 2669/5458/5327 7937/5459/5328 7936/5457/5326\nf 1637/5455/5324 4815/5460/5329 2669/5458/5327\nf 2669/5458/5327 4812/5456/5325 1637/5455/5324\nf 1638/5461/5330 4814/5462/5331 2669/5458/5327\nf 2669/5458/5327 4815/5460/5329 1638/5461/5330\nf 1616/5351/5220 7937/5459/5328 2669/5458/5327\nf 2669/5458/5327 4814/5462/5331 1616/5351/5220\nf 1616/5351/5220 4814/5462/5331 2670/5463/5332\nf 2670/5463/5332 4771/5360/5229 1616/5351/5220\nf 1638/5461/5330 4816/5464/5333 2670/5463/5332\nf 2670/5463/5332 4814/5462/5331 1638/5461/5330\nf 1636/5447/5316 4811/5444/5313 2670/5463/5332\nf 2670/5463/5332 4816/5464/5333 1636/5447/5316\nf 1609/5337/5206 4771/5360/5229 2670/5463/5332\nf 2670/5463/5332 4811/5444/5313 1609/5337/5206\nf 7938/5465/5334 4819/5466/5335 2671/5467/5336\nf 2671/5467/5336 7939/5468/5337 7938/5465/5334\nf 1640/5469/5338 4818/5470/5339 2671/5467/5336\nf 2671/5467/5336 4819/5466/5335 1640/5469/5338\nf 1639/5471/5340 4817/5472/5341 2671/5467/5336\nf 2671/5467/5336 4818/5470/5339 1639/5471/5340\nf 7940/5473/5342 7939/5468/5337 2671/5467/5336\nf 2671/5467/5336 4817/5472/5341 7940/5473/5342\nf 7940/5473/5342 4817/5472/5341 2672/5474/5343\nf 2672/5474/5343 7941/5475/5344 7940/5473/5342\nf 1639/5471/5340 4821/5476/5345 2672/5474/5343\nf 2672/5474/5343 4817/5472/5341 1639/5471/5340\nf 1641/5477/5346 4820/5478/5347 2672/5474/5343\nf 2672/5474/5343 4821/5476/5345 1641/5477/5346\nf 7942/5479/5348 7941/5475/5344 2672/5474/5343\nf 2672/5474/5343 4820/5478/5347 7942/5479/5348\nf 7942/5479/5348 4820/5478/5347 2673/5480/5349\nf 2673/5480/5349 7943/5481/5350 7942/5479/5348\nf 1641/5477/5346 4823/5482/5351 2673/5480/5349\nf 2673/5480/5349 4820/5478/5347 1641/5477/5346\nf 1642/5483/5352 4822/5484/5353 2673/5480/5349\nf 2673/5480/5349 4823/5482/5351 1642/5483/5352\nf 7944/5485/5354 7943/5481/5350 2673/5480/5349\nf 2673/5480/5349 4822/5484/5353 7944/5485/5354\nf 7944/5485/5354 4822/5484/5353 2674/5486/5355\nf 2674/5486/5355 7945/5487/5356 7944/5485/5354\nf 1642/5483/5352 4824/5488/5357 2674/5486/5355\nf 2674/5486/5355 4822/5484/5353 1642/5483/5352\nf 7946/5489/5358 7947/5490/5359 2674/5486/5355\nf 2674/5486/5355 4824/5488/5357 7946/5489/5358\nf 7948/5491/5360 7945/5487/5356 2674/5486/5355\nf 2674/5486/5355 7947/5490/5359 7948/5491/5360\nf 1640/5469/5338 4827/5492/5361 2675/5493/5362\nf 2675/5493/5362 4818/5470/5339 1640/5469/5338\nf 1644/5494/5363 4826/5495/5364 2675/5493/5362\nf 2675/5493/5362 4827/5492/5361 1644/5494/5363\nf 1643/5496/5365 4825/5497/5366 2675/5493/5362\nf 2675/5493/5362 4826/5495/5364 1643/5496/5365\nf 1639/5471/5340 4818/5470/5339 2675/5493/5362\nf 2675/5493/5362 4825/5497/5366 1639/5471/5340\nf 1639/5471/5340 4825/5497/5366 2676/5498/5367\nf 2676/5498/5367 4821/5476/5345 1639/5471/5340\nf 1643/5496/5365 4829/5499/5368 2676/5498/5367\nf 2676/5498/5367 4825/5497/5366 1643/5496/5365\nf 1645/5500/5369 4828/5501/5370 2676/5498/5367\nf 2676/5498/5367 4829/5499/5368 1645/5500/5369\nf 1641/5477/5346 4821/5476/5345 2676/5498/5367\nf 2676/5498/5367 4828/5501/5370 1641/5477/5346\nf 1641/5477/5346 4828/5501/5370 2677/5502/5371\nf 2677/5502/5371 4823/5482/5351 1641/5477/5346\nf 1645/5500/5369 4831/5503/5372 2677/5502/5371\nf 2677/5502/5371 4828/5501/5370 1645/5500/5369\nf 1646/5504/5373 4830/5505/5374 2677/5502/5371\nf 2677/5502/5371 4831/5503/5372 1646/5504/5373\nf 1642/5483/5352 4823/5482/5351 2677/5502/5371\nf 2677/5502/5371 4830/5505/5374 1642/5483/5352\nf 1642/5483/5352 4830/5505/5374 2678/5506/5375\nf 2678/5506/5375 4824/5488/5357 1642/5483/5352\nf 1646/5504/5373 4832/5507/5376 2678/5506/5375\nf 2678/5506/5375 4830/5505/5374 1646/5504/5373\nf 7949/5508/5377 7950/5509/5378 2678/5506/5375\nf 2678/5506/5375 4832/5507/5376 7949/5508/5377\nf 7946/5489/5358 4824/5488/5357 2678/5506/5375\nf 2678/5506/5375 7950/5509/5378 7946/5489/5358\nf 4849/5510/5379 4850/5511/5380 4853/5512/5381\nf 4853/5512/5381 4854/5513/5381 4849/5510/5379\nf 4833/5514/5382 4837/5515/5382 4838/5516/5382\nf 4838/5516/5382 4834/5517/5382 4833/5514/5382\nf 4865/5518/5382 4867/5519/5382 4839/5520/5382\nf 4839/5520/5382 4835/5521/5382 4865/5518/5382\nf 4866/5522/5382 4868/5523/5382 4840/5524/5382\nf 4840/5524/5382 4836/5525/5382 4866/5522/5382\nf 4857/5526/5381 4858/5527/5381 4861/5528/5383\nf 4861/5528/5383 4862/5529/5384 4857/5526/5381\nf 4852/5530/5385 4855/5531/5386 4856/5532/5387\nf 4856/5532/5387 4851/5533/5388 4852/5530/5385\nf 4841/5534/5389 4869/5535/5390 4846/5536/5391\nf 4846/5536/5391 4845/5537/5389 4841/5534/5389\nf 4842/5538/5392 4870/5539/5393 4847/5540/5394\nf 4847/5540/5394 4871/5541/5395 4842/5538/5392\nf 4843/5542/5396 4844/5543/5397 4848/5544/5397\nf 4848/5544/5397 4872/5545/5398 4843/5542/5396\nf 4860/5546/5399 4863/5547/5400 4864/5548/5401\nf 4864/5548/5401 4859/5549/5402 4860/5546/5399\nf 4849/5510/5379 7952/5550/5403 7951/5551/5403\nf 7951/5551/5403 4852/5530/5385 4849/5510/5379\nf 7953/5552/5404 7955/5553/5405 7954/5554/5406\nf 7954/5554/5406 7956/5555/5404 7953/5552/5404\nf 7957/5556/5407 7959/5557/5408 7958/5558/5409\nf 7958/5558/5409 7960/5559/5410 7957/5556/5407\nf 7961/5560/5411 7963/5561/5412 7962/5562/5412\nf 7962/5562/5412 7964/5563/5413 7961/5560/5411\nf 7965/5564/5403 4862/5529/5384 4863/5547/5400\nf 4863/5547/5400 7966/5565/5403 7965/5564/5403\nf 4861/5528/5383 7968/5566/5414 7967/5567/5414\nf 7967/5567/5414 4864/5548/5401 4861/5528/5383\nf 7969/5568/5415 7971/5569/5416 7970/5570/5416\nf 7970/5570/5416 7972/5571/5415 7969/5568/5415\nf 7973/5572/5417 7975/5573/5418 7974/5574/5418\nf 7974/5574/5418 7976/5575/5417 7973/5572/5417\nf 7977/5576/5419 7979/5577/5420 7978/5578/5420\nf 7978/5578/5420 7980/5579/5421 7977/5576/5419\nf 7981/5580/5414 4850/5511/5380 4851/5533/5388\nf 4851/5533/5388 7982/5581/5414 7981/5580/5414\nf 7983/5582/5422 7985/5583/5422 7984/5584/5422\nf 7984/5584/5422 7986/5585/5422 7983/5582/5422\nf 7985/5583/5422 7987/5586/5422 4855/5531/5386\nf 4855/5531/5386 7984/5584/5422 7985/5583/5422\nf 7987/5586/5422 7988/5587/5422 4856/5532/5387\nf 4856/5532/5387 4855/5531/5386 7987/5586/5422\nf 7988/5587/5422 7983/5582/5422 7986/5585/5422\nf 7986/5585/5422 4856/5532/5387 7988/5587/5422\nf 7989/5588/5423 7991/5589/5423 7990/5590/5423\nf 7990/5590/5423 7992/5591/5423 7989/5588/5423\nf 7991/5589/5423 7993/5592/5423 4859/5549/5402\nf 4859/5549/5402 7990/5590/5423 7991/5589/5423\nf 7993/5592/5423 7994/5593/5423 4860/5546/5399\nf 4860/5546/5399 4859/5549/5402 7993/5592/5423\nf 7994/5593/5423 7989/5588/5423 7992/5591/5423\nf 7992/5591/5423 4860/5546/5399 7994/5593/5423\nf 4861/5528/5383 4864/5548/5401 4863/5547/5400\nf 4863/5547/5400 4862/5529/5384 4861/5528/5383\nf 4852/5530/5385 4851/5533/5388 4850/5511/5380\nf 4850/5511/5380 4849/5510/5379 4852/5530/5385\nf 4838/5516/5382 4867/5519/5382 4865/5518/5382\nf 4865/5518/5382 4834/5517/5382 4838/5516/5382\nf 4839/5520/5382 4868/5523/5382 4866/5522/5382\nf 4866/5522/5382 4835/5521/5382 4839/5520/5382\nf 4869/5535/5390 4842/5538/5392 4871/5541/5395\nf 4871/5541/5395 4846/5536/5391 4869/5535/5390\nf 4870/5539/5393 4843/5542/5396 4872/5545/5398\nf 4872/5545/5398 4847/5540/5394 4870/5539/5393\nf 7955/5553/5405 7957/5556/5407 7960/5559/5410\nf 7960/5559/5410 7954/5554/5406 7955/5553/5405\nf 7959/5557/5408 7961/5560/5411 7964/5563/5413\nf 7964/5563/5413 7958/5558/5409 7959/5557/5408\nf 7971/5569/5416 7973/5572/5417 7976/5575/5417\nf 7976/5575/5417 7970/5570/5416 7971/5569/5416\nf 7975/5573/5418 7977/5576/5419 7980/5579/5421\nf 7980/5579/5421 7974/5574/5418 7975/5573/5418\nf 4886/5594/5424 4887/5595/5424 4889/5596/5425\nf 4889/5596/5425 4890/5597/5426 4886/5594/5424\nf 4877/5598/5427 4878/5599/5428 4882/5600/2331\nf 4882/5600/2331 4881/5601/5429 4877/5598/5427\nf 4881/5601/5429 4882/5600/2331 4874/5602/5430\nf 4874/5602/5430 4873/5603/5431 4881/5601/5429\nf 7995/5604/5432 4888/5605/5433 4892/5606/5434\nf 4892/5606/5434 4889/5596/5425 7995/5604/5432\nf 7996/5607/5422 4879/5608/5435 4883/5609/5436\nf 4883/5609/5436 7997/5610/5422 7996/5607/5422\nf 7997/5610/5422 4883/5609/5436 4876/5611/5437\nf 4876/5611/5437 7998/5612/5422 7997/5610/5422\nf 7999/5613/5438 4885/5614/5438 4891/5615/5439\nf 4891/5615/5439 4892/5606/5434 7999/5613/5438\nf 4879/5608/5435 4880/5616/5440 4884/5617/5441\nf 4884/5617/5441 4883/5609/5436 4879/5608/5435\nf 4883/5609/5436 4884/5617/5441 4875/5618/5442\nf 4875/5618/5442 4876/5611/5437 4883/5609/5436\nf 8000/5619/5443 8001/5620/5444 4890/5597/5426\nf 4890/5597/5426 4891/5615/5439 8000/5619/5443\nf 4880/5616/5440 4877/5598/5427 4881/5601/5429\nf 4881/5601/5429 4884/5617/5441 4880/5616/5440\nf 4884/5617/5441 4881/5601/5429 4873/5603/5431\nf 4873/5603/5431 4875/5618/5442 4884/5617/5441\nf 8002/5621/5445 8003/5622/5446 4890/5597/5426\nf 4890/5597/5426 4889/5596/5425 8002/5621/5445\nf 8003/5622/5446 8004/5623/5447 4891/5615/5439\nf 4891/5615/5439 4890/5597/5426 8003/5622/5446\nf 8004/5623/5447 8005/5624/5448 4892/5606/5434\nf 4892/5606/5434 4891/5615/5439 8004/5623/5447\nf 8005/5624/5448 8002/5621/5445 4889/5596/5425\nf 4889/5596/5425 4892/5606/5434 8005/5624/5448\nf 4906/5625/5424 4907/5626/5424 4909/5627/5425\nf 4909/5627/5425 4910/5628/5426 4906/5625/5424\nf 4897/5629/5428 4898/5630/5449 4902/5631/5450\nf 4902/5631/5450 4901/5632/2331 4897/5629/5428\nf 4901/5632/2331 4902/5631/5450 4894/5633/5451\nf 4894/5633/5451 4893/5634/5430 4901/5632/2331\nf 8006/5635/5432 4908/5636/5433 4912/5637/5434\nf 4912/5637/5434 4909/5627/5425 8006/5635/5432\nf 4898/5630/5449 4899/5638/5435 4903/5639/5436\nf 4903/5639/5436 4902/5631/5450 4898/5630/5449\nf 4902/5631/5450 4903/5639/5436 4896/5640/5437\nf 4896/5640/5437 4894/5633/5451 4902/5631/5450\nf 8007/5641/5438 4905/5642/5438 4911/5643/5439\nf 4911/5643/5439 4912/5637/5434 8007/5641/5438\nf 4899/5638/5435 4900/5644/5440 4904/5645/5441\nf 4904/5645/5441 4903/5639/5436 4899/5638/5435\nf 4903/5639/5436 4904/5645/5441 4895/5646/5442\nf 4895/5646/5442 4896/5640/5437 4903/5639/5436\nf 8008/5647/5443 8009/5648/5444 4910/5628/5426\nf 4910/5628/5426 4911/5643/5439 8008/5647/5443\nf 4900/5644/5440 8011/5649/5423 8010/5650/5423\nf 8010/5650/5423 4904/5645/5441 4900/5644/5440\nf 4904/5645/5441 8010/5650/5423 8012/5651/5423\nf 8012/5651/5423 4895/5646/5442 4904/5645/5441\nf 8013/5652/5445 8014/5653/5446 4910/5628/5426\nf 4910/5628/5426 4909/5627/5425 8013/5652/5445\nf 8014/5653/5446 8015/5654/5447 4911/5643/5439\nf 4911/5643/5439 4910/5628/5426 8014/5653/5446\nf 8015/5654/5447 8016/5655/5448 4912/5637/5434\nf 4912/5637/5434 4911/5643/5439 8015/5654/5447\nf 8016/5655/5448 8013/5652/5445 4909/5627/5425\nf 4909/5627/5425 4912/5637/5434 8016/5655/5448\nf 4935/5656/5452 4954/5657/5452 4925/5658/5453\nf 4925/5658/5453 4968/5659/5454 4935/5656/5452\nf 4952/5660/5452 4935/5656/5452 4968/5659/5454\nf 4968/5659/5454 4926/5661/5455 4952/5660/5452\nf 4935/5656/5452 4952/5660/5452 4915/5662/5452\nf 4915/5662/5452 4953/5663/5452 4935/5656/5452\nf 4954/5657/5452 4935/5656/5452 4953/5663/5452\nf 4953/5663/5452 4916/5664/5452 4954/5657/5452\nf 4936/5665/5452 4952/5660/5452 4926/5661/5455\nf 4926/5661/5455 4969/5666/5456 4936/5665/5452\nf 4970/5667/5457 4936/5665/5452 4969/5666/5456\nf 4969/5666/5456 4927/5668/5458 4970/5667/5457\nf 4936/5665/5452 4970/5667/5457 4928/5669/5459\nf 4928/5669/5459 4957/5670/5452 4936/5665/5452\nf 4952/5660/5452 4936/5665/5452 4957/5670/5452\nf 4957/5670/5452 4915/5662/5452 4952/5660/5452\nf 4937/5671/5452 4961/5672/5452 4916/5664/5452\nf 4916/5664/5452 4958/5673/5452 4937/5671/5452\nf 4974/5674/5460 4937/5671/5452 4958/5673/5452\nf 4958/5673/5452 4931/5675/5461 4974/5674/5460\nf 4937/5671/5452 4974/5674/5460 4932/5676/5462\nf 4932/5676/5462 4975/5677/5463 4937/5671/5452\nf 4961/5672/5452 4937/5671/5452 4975/5677/5463\nf 4975/5677/5463 4933/5678/5464 4961/5672/5452\nf 4938/5679/5452 4953/5663/5452 4915/5662/5452\nf 4915/5662/5452 4962/5680/5452 4938/5679/5452\nf 4973/5681/5465 4938/5679/5452 4962/5680/5452\nf 4962/5680/5452 4930/5682/5466 4973/5681/5465\nf 4938/5679/5452 4973/5681/5465 4931/5675/5461\nf 4931/5675/5461 4958/5673/5452 4938/5679/5452\nf 4953/5663/5452 4938/5679/5452 4958/5673/5452\nf 4958/5673/5452 4916/5664/5452 4953/5663/5452\nf 4939/5683/5452 4957/5670/5452 4928/5669/5459\nf 4928/5669/5459 4971/5684/5467 4939/5683/5452\nf 4972/5685/5468 4939/5683/5452 4971/5684/5467\nf 4971/5684/5467 4929/5686/5469 4972/5685/5468\nf 4939/5683/5452 4972/5685/5468 4930/5682/5466\nf 4930/5682/5466 4962/5680/5452 4939/5683/5452\nf 4957/5670/5452 4939/5683/5452 4962/5680/5452\nf 4962/5680/5452 4915/5662/5452 4957/5670/5452\nf 4940/5687/5452 4976/5688/5470 4934/5689/5471\nf 4934/5689/5471 4977/5690/5472 4940/5687/5452\nf 4954/5657/5452 4940/5687/5452 4977/5690/5472\nf 4977/5690/5472 4925/5658/5453 4954/5657/5452\nf 4940/5687/5452 4954/5657/5452 4916/5664/5452\nf 4916/5664/5452 4961/5672/5452 4940/5687/5452\nf 4976/5688/5470 4940/5687/5452 4961/5672/5452\nf 4961/5672/5452 4933/5678/5464 4976/5688/5470\nf 4941/5691/5473 4978/5692/5474 4913/5693/5475\nf 4913/5693/5475 4951/5694/5476 4941/5691/5473\nf 4979/5695/5477 4941/5691/5473 4951/5694/5476\nf 4951/5694/5476 4914/5696/5478 4979/5695/5477\nf 4941/5691/5473 4979/5695/5477 4926/5661/5455\nf 4926/5661/5455 4968/5659/5454 4941/5691/5473\nf 4978/5692/5474 4941/5691/5473 4968/5659/5454\nf 4968/5659/5454 4925/5658/5453 4978/5692/5474\nf 4942/5697/5479 4979/5695/5477 4914/5696/5478\nf 4914/5696/5478 4955/5698/5480 4942/5697/5479\nf 4980/5699/5481 4942/5697/5479 4955/5698/5480\nf 4955/5698/5480 4917/5700/5482 4980/5699/5481\nf 4942/5697/5479 4980/5699/5481 4927/5668/5458\nf 4927/5668/5458 4969/5666/5456 4942/5697/5479\nf 4979/5695/5477 4942/5697/5479 4969/5666/5456\nf 4969/5666/5456 4926/5661/5455 4979/5695/5477\nf 4943/5701/5483 4980/5699/5481 4917/5700/5482\nf 4917/5700/5482 4956/5702/5484 4943/5701/5483\nf 4981/5703/5485 4943/5701/5483 4956/5702/5484\nf 4956/5702/5484 4918/5704/5486 4981/5703/5485\nf 4943/5701/5483 4981/5703/5485 4928/5669/5459\nf 4928/5669/5459 4970/5667/5457 4943/5701/5483\nf 4980/5699/5481 4943/5701/5483 4970/5667/5457\nf 4970/5667/5457 4927/5668/5458 4980/5699/5481\nf 4944/5705/5487 4981/5703/5485 4918/5704/5486\nf 4918/5704/5486 4964/5706/5488 4944/5705/5487\nf 4982/5707/5489 4944/5705/5487 4964/5706/5488\nf 4964/5706/5488 4923/5708/5490 4982/5707/5489\nf 4944/5705/5487 4982/5707/5489 4929/5686/5469\nf 4929/5686/5469 4971/5684/5467 4944/5705/5487\nf 4981/5703/5485 4944/5705/5487 4971/5684/5467\nf 4971/5684/5467 4928/5669/5459 4981/5703/5485\nf 4945/5709/5491 4982/5707/5489 4923/5708/5490\nf 4923/5708/5490 4965/5710/5492 4945/5709/5491\nf 4983/5711/5493 4945/5709/5491 4965/5710/5492\nf 4965/5710/5492 4922/5712/5494 4983/5711/5493\nf 4945/5709/5491 4983/5711/5493 4930/5682/5466\nf 4930/5682/5466 4972/5685/5468 4945/5709/5491\nf 4982/5707/5489 4945/5709/5491 4972/5685/5468\nf 4972/5685/5468 4929/5686/5469 4982/5707/5489\nf 4946/5713/5495 4983/5711/5493 4922/5712/5494\nf 4922/5712/5494 4963/5714/5496 4946/5713/5495\nf 4984/5715/5497 4946/5713/5495 4963/5714/5496\nf 4963/5714/5496 4919/5716/5498 4984/5715/5497\nf 4946/5713/5495 4984/5715/5497 4931/5675/5461\nf 4931/5675/5461 4973/5681/5465 4946/5713/5495\nf 4983/5711/5493 4946/5713/5495 4973/5681/5465\nf 4973/5681/5465 4930/5682/5466 4983/5711/5493\nf 4947/5717/5499 4984/5715/5497 4919/5716/5498\nf 4919/5716/5498 4959/5718/5500 4947/5717/5499\nf 4985/5719/5501 4947/5717/5499 4959/5718/5500\nf 4959/5718/5500 4920/5720/5502 4985/5719/5501\nf 4947/5717/5499 4985/5719/5501 4932/5676/5462\nf 4932/5676/5462 4974/5674/5460 4947/5717/5499\nf 4984/5715/5497 4947/5717/5499 4974/5674/5460\nf 4974/5674/5460 4931/5675/5461 4984/5715/5497\nf 4948/5721/5503 4985/5719/5501 4920/5720/5502\nf 4920/5720/5502 4960/5722/5504 4948/5721/5503\nf 4986/5723/5505 4948/5721/5503 4960/5722/5504\nf 4960/5722/5504 4921/5724/5506 4986/5723/5505\nf 4948/5721/5503 4986/5723/5505 4933/5678/5464\nf 4933/5678/5464 4975/5677/5463 4948/5721/5503\nf 4985/5719/5501 4948/5721/5503 4975/5677/5463\nf 4975/5677/5463 4932/5676/5462 4985/5719/5501\nf 4949/5725/5507 4986/5723/5505 4921/5724/5506\nf 4921/5724/5506 4967/5726/5508 4949/5725/5507\nf 4987/5727/5509 4949/5725/5507 4967/5726/5508\nf 4967/5726/5508 4924/5728/5510 4987/5727/5509\nf 4949/5725/5507 4987/5727/5509 4934/5689/5471\nf 4934/5689/5471 4976/5688/5470 4949/5725/5507\nf 4986/5723/5505 4949/5725/5507 4976/5688/5470\nf 4976/5688/5470 4933/5678/5464 4986/5723/5505\nf 4950/5729/5511 4987/5727/5509 4924/5728/5510\nf 4924/5728/5510 4966/5730/5512 4950/5729/5511\nf 4978/5692/5474 4950/5729/5511 4966/5730/5512\nf 4966/5730/5512 4913/5693/5475 4978/5692/5474\nf 4950/5729/5511 4978/5692/5474 4925/5658/5453\nf 4925/5658/5453 4977/5690/5472 4950/5729/5511\nf 4987/5727/5509 4950/5729/5511 4977/5690/5472\nf 4977/5690/5472 4934/5689/5471 4987/5727/5509\nf 5010/5731/5452 5043/5732/5513 5000/5733/5514\nf 5000/5733/5514 5029/5734/5452 5010/5731/5452\nf 5027/5735/5452 5001/5736/5515 5043/5732/5513\nf 5043/5732/5513 5010/5731/5452 5027/5735/5452\nf 5010/5731/5452 5028/5737/5452 4990/5738/5452\nf 4990/5738/5452 5027/5735/5452 5010/5731/5452\nf 5029/5734/5452 4991/5739/5452 5028/5737/5452\nf 5028/5737/5452 5010/5731/5452 5029/5734/5452\nf 5011/5740/5452 5044/5741/5516 5001/5736/5515\nf 5001/5736/5515 5027/5735/5452 5011/5740/5452\nf 5045/5742/5517 5002/5743/5518 5044/5741/5516\nf 5044/5741/5516 5011/5740/5452 5045/5742/5517\nf 5011/5740/5452 5032/5744/5452 5003/5745/5519\nf 5003/5745/5519 5045/5742/5517 5011/5740/5452\nf 5027/5735/5452 4990/5738/5452 5032/5744/5452\nf 5032/5744/5452 5011/5740/5452 5027/5735/5452\nf 5012/5746/5452 5033/5747/5452 4991/5739/5452\nf 4991/5739/5452 5036/5748/5452 5012/5746/5452\nf 5049/5749/5520 5006/5750/5521 5033/5747/5452\nf 5033/5747/5452 5012/5746/5452 5049/5749/5520\nf 5012/5746/5452 5050/5751/5522 5007/5752/5523\nf 5007/5752/5523 5049/5749/5520 5012/5746/5452\nf 5036/5748/5452 5008/5753/5524 5050/5751/5522\nf 5050/5751/5522 5012/5746/5452 5036/5748/5452\nf 5013/5754/5452 5037/5755/5452 4990/5738/5452\nf 4990/5738/5452 5028/5737/5452 5013/5754/5452\nf 5048/5756/5525 5005/5757/5526 5037/5755/5452\nf 5037/5755/5452 5013/5754/5452 5048/5756/5525\nf 5013/5754/5452 5033/5747/5452 5006/5750/5521\nf 5006/5750/5521 5048/5756/5525 5013/5754/5452\nf 5028/5737/5452 4991/5739/5452 5033/5747/5452\nf 5033/5747/5452 5013/5754/5452 5028/5737/5452\nf 5014/5758/5452 5046/5759/5527 5003/5745/5519\nf 5003/5745/5519 5032/5744/5452 5014/5758/5452\nf 5047/5760/5528 5004/5761/5529 5046/5759/5527\nf 5046/5759/5527 5014/5758/5452 5047/5760/5528\nf 5014/5758/5452 5037/5755/5452 5005/5757/5526\nf 5005/5757/5526 5047/5760/5528 5014/5758/5452\nf 5032/5744/5452 4990/5738/5452 5037/5755/5452\nf 5037/5755/5452 5014/5758/5452 5032/5744/5452\nf 5015/5762/5452 5052/5763/5530 5009/5764/5531\nf 5009/5764/5531 5051/5765/5532 5015/5762/5452\nf 5029/5734/5452 5000/5733/5514 5052/5763/5530\nf 5052/5763/5530 5015/5762/5452 5029/5734/5452\nf 5015/5762/5452 5036/5748/5452 4991/5739/5452\nf 4991/5739/5452 5029/5734/5452 5015/5762/5452\nf 5051/5765/5532 5008/5753/5524 5036/5748/5452\nf 5036/5748/5452 5015/5762/5452 5051/5765/5532\nf 5016/5766/5533 5026/5767/5534 4988/5768/5535\nf 4988/5768/5535 5053/5769/5536 5016/5766/5533\nf 5054/5770/5537 4989/5771/5538 5026/5767/5534\nf 5026/5767/5534 5016/5766/5533 5054/5770/5537\nf 5016/5766/5533 5043/5732/5513 5001/5736/5515\nf 5001/5736/5515 5054/5770/5537 5016/5766/5533\nf 5053/5769/5536 5000/5733/5514 5043/5732/5513\nf 5043/5732/5513 5016/5766/5533 5053/5769/5536\nf 5017/5772/5539 5030/5773/5540 4989/5771/5538\nf 4989/5771/5538 5054/5770/5537 5017/5772/5539\nf 5055/5774/5541 4992/5775/5542 5030/5773/5540\nf 5030/5773/5540 5017/5772/5539 5055/5774/5541\nf 5017/5772/5539 5044/5741/5516 5002/5743/5518\nf 5002/5743/5518 5055/5774/5541 5017/5772/5539\nf 5054/5770/5537 5001/5736/5515 5044/5741/5516\nf 5044/5741/5516 5017/5772/5539 5054/5770/5537\nf 5018/5776/5543 5031/5777/5544 4992/5775/5542\nf 4992/5775/5542 5055/5774/5541 5018/5776/5543\nf 5056/5778/5545 4993/5779/5546 5031/5777/5544\nf 5031/5777/5544 5018/5776/5543 5056/5778/5545\nf 5018/5776/5543 5045/5742/5517 5003/5745/5519\nf 5003/5745/5519 5056/5778/5545 5018/5776/5543\nf 5055/5774/5541 5002/5743/5518 5045/5742/5517\nf 5045/5742/5517 5018/5776/5543 5055/5774/5541\nf 5019/5780/5547 5039/5781/5548 4993/5779/5546\nf 4993/5779/5546 5056/5778/5545 5019/5780/5547\nf 5057/5782/5549 4998/5783/5550 5039/5781/5548\nf 5039/5781/5548 5019/5780/5547 5057/5782/5549\nf 5019/5780/5547 5046/5759/5527 5004/5761/5529\nf 5004/5761/5529 5057/5782/5549 5019/5780/5547\nf 5056/5778/5545 5003/5745/5519 5046/5759/5527\nf 5046/5759/5527 5019/5780/5547 5056/5778/5545\nf 5020/5784/5551 5040/5785/5552 4998/5783/5550\nf 4998/5783/5550 5057/5782/5549 5020/5784/5551\nf 5058/5786/5553 4997/5787/5554 5040/5785/5552\nf 5040/5785/5552 5020/5784/5551 5058/5786/5553\nf 5020/5784/5551 5047/5760/5528 5005/5757/5526\nf 5005/5757/5526 5058/5786/5553 5020/5784/5551\nf 5057/5782/5549 5004/5761/5529 5047/5760/5528\nf 5047/5760/5528 5020/5784/5551 5057/5782/5549\nf 5021/5788/5555 5038/5789/5556 4997/5787/5554\nf 4997/5787/5554 5058/5786/5553 5021/5788/5555\nf 5059/5790/5557 4994/5791/5558 5038/5789/5556\nf 5038/5789/5556 5021/5788/5555 5059/5790/5557\nf 5021/5788/5555 5048/5756/5525 5006/5750/5521\nf 5006/5750/5521 5059/5790/5557 5021/5788/5555\nf 5058/5786/5553 5005/5757/5526 5048/5756/5525\nf 5048/5756/5525 5021/5788/5555 5058/5786/5553\nf 5022/5792/5559 5034/5793/5560 4994/5791/5558\nf 4994/5791/5558 5059/5790/5557 5022/5792/5559\nf 5060/5794/5561 4995/5795/5562 5034/5793/5560\nf 5034/5793/5560 5022/5792/5559 5060/5794/5561\nf 5022/5792/5559 5049/5749/5520 5007/5752/5523\nf 5007/5752/5523 5060/5794/5561 5022/5792/5559\nf 5059/5790/5557 5006/5750/5521 5049/5749/5520\nf 5049/5749/5520 5022/5792/5559 5059/5790/5557\nf 5023/5796/5563 5035/5797/5564 4995/5795/5562\nf 4995/5795/5562 5060/5794/5561 5023/5796/5563\nf 5061/5798/5565 4996/5799/5566 5035/5797/5564\nf 5035/5797/5564 5023/5796/5563 5061/5798/5565\nf 5023/5796/5563 5050/5751/5522 5008/5753/5524\nf 5008/5753/5524 5061/5798/5565 5023/5796/5563\nf 5060/5794/5561 5007/5752/5523 5050/5751/5522\nf 5050/5751/5522 5023/5796/5563 5060/5794/5561\nf 5024/5800/5567 5042/5801/5568 4996/5799/5566\nf 4996/5799/5566 5061/5798/5565 5024/5800/5567\nf 5062/5802/5569 4999/5803/5570 5042/5801/5568\nf 5042/5801/5568 5024/5800/5567 5062/5802/5569\nf 5024/5800/5567 5051/5765/5532 5009/5764/5531\nf 5009/5764/5531 5062/5802/5569 5024/5800/5567\nf 5061/5798/5565 5008/5753/5524 5051/5765/5532\nf 5051/5765/5532 5024/5800/5567 5061/5798/5565\nf 5025/5804/5571 5041/5805/5572 4999/5803/5570\nf 4999/5803/5570 5062/5802/5569 5025/5804/5571\nf 5053/5769/5536 4988/5768/5535 5041/5805/5572\nf 5041/5805/5572 5025/5804/5571 5053/5769/5536\nf 5025/5804/5571 5052/5763/5530 5000/5733/5514\nf 5000/5733/5514 5053/5769/5536 5025/5804/5571\nf 5062/5802/5569 5009/5764/5531 5052/5763/5530\nf 5052/5763/5530 5025/5804/5571 5062/5802/5569\nf 5088/5806/5573 5124/5807/5574 5063/5808/5575\nf 5063/5808/5575 5108/5809/5576 5088/5806/5573\nf 5125/5810/5577 5088/5806/5573 5108/5809/5576\nf 5108/5809/5576 5064/5811/5578 5125/5810/5577\nf 5088/5806/5573 5125/5810/5577 5080/5812/5579\nf 5080/5812/5579 5140/5813/5580 5088/5806/5573\nf 5124/5807/5574 5088/5806/5573 5140/5813/5580\nf 5140/5813/5580 5079/5814/5581 5124/5807/5574\nf 5089/5815/5582 5125/5810/5577 5064/5811/5578\nf 5064/5811/5578 5112/5816/5583 5089/5815/5582\nf 5126/5817/5584 5089/5815/5582 5112/5816/5583\nf 5112/5816/5583 5069/5818/5585 5126/5817/5584\nf 5089/5815/5582 5126/5817/5584 5081/5819/5586\nf 5081/5819/5586 5141/5820/5587 5089/5815/5582\nf 5125/5810/5577 5089/5815/5582 5141/5820/5587\nf 5141/5820/5587 5080/5812/5579 5125/5810/5577\nf 5090/5821/5588 5126/5817/5584 5069/5818/5585\nf 5069/5818/5585 5113/5822/5589 5090/5821/5588\nf 5127/5823/5590 5090/5821/5588 5113/5822/5589\nf 5113/5822/5589 5068/5824/5591 5127/5823/5590\nf 5090/5821/5588 5127/5823/5590 5082/5825/5592\nf 5082/5825/5592 5142/5826/5593 5090/5821/5588\nf 5126/5817/5584 5090/5821/5588 5142/5826/5593\nf 5142/5826/5593 5081/5819/5586 5126/5817/5584\nf 5091/5827/5594 5127/5823/5590 5068/5824/5591\nf 5068/5824/5591 5111/5828/5595 5091/5827/5594\nf 5128/5829/5596 5091/5827/5594 5111/5828/5595\nf 5111/5828/5595 5067/5830/5597 5128/5829/5596\nf 5091/5827/5594 5128/5829/5596 5083/5831/5598\nf 5083/5831/5598 5143/5832/5599 5091/5827/5594\nf 5127/5823/5590 5091/5827/5594 5143/5832/5599\nf 5143/5832/5599 5082/5825/5592 5127/5823/5590\nf 5092/5833/5600 5128/5829/5596 5067/5830/5597\nf 5067/5830/5597 5115/5834/5601 5092/5833/5600\nf 5129/5835/5602 5092/5833/5600 5115/5834/5601\nf 5115/5834/5601 5070/5836/5603 5129/5835/5602\nf 5092/5833/5600 5129/5835/5602 5084/5837/5604\nf 5084/5837/5604 5144/5838/5605 5092/5833/5600\nf 5128/5829/5596 5092/5833/5600 5144/5838/5605\nf 5144/5838/5605 5083/5831/5598 5128/5829/5596\nf 5093/5839/5606 5129/5835/5602 5070/5836/5603\nf 5070/5836/5603 5114/5840/5607 5093/5839/5606\nf 5130/5841/5608 5093/5839/5606 5114/5840/5607\nf 5114/5840/5607 5065/5842/5609 5130/5841/5608\nf 5093/5839/5606 5130/5841/5608 5085/5843/5610\nf 5085/5843/5610 5145/5844/5611 5093/5839/5606\nf 5129/5835/5602 5093/5839/5606 5145/5844/5611\nf 5145/5844/5611 5084/5837/5604 5129/5835/5602\nf 5094/5845/5612 5130/5841/5608 5065/5842/5609\nf 5065/5842/5609 5109/5846/5613 5094/5845/5612\nf 5131/5847/5614 5094/5845/5612 5109/5846/5613\nf 5109/5846/5613 5066/5848/5615 5131/5847/5614\nf 5094/5845/5612 5131/5847/5614 5086/5849/5616\nf 5086/5849/5616 5146/5850/5617 5094/5845/5612\nf 5130/5841/5608 5094/5845/5612 5146/5850/5617\nf 5146/5850/5617 5085/5843/5610 5130/5841/5608\nf 5095/5851/5618 5131/5847/5614 5066/5848/5615\nf 5066/5848/5615 5110/5852/5619 5095/5851/5618\nf 5124/5807/5574 5095/5851/5618 5110/5852/5619\nf 5110/5852/5619 5063/5808/5575 5124/5807/5574\nf 5095/5851/5618 5124/5807/5574 5079/5814/5581\nf 5079/5814/5581 5147/5853/5620 5095/5851/5618\nf 5131/5847/5614 5095/5851/5618 5147/5853/5620\nf 5147/5853/5620 5086/5849/5616 5131/5847/5614\nf 5096/5854/5621 5116/5855/5622 5072/5856/5623\nf 5072/5856/5623 5117/5857/5624 5096/5854/5621\nf 5150/5858/5625 5096/5854/5621 5117/5857/5624\nf 5117/5857/5624 5073/5859/5626 5150/5858/5625\nf 5096/5854/5621 5150/5858/5625 5087/5860/1186\nf 5087/5860/1186 5149/5861/5627 5096/5854/5621\nf 5116/5855/5622 5096/5854/5621 5149/5861/5627\nf 5149/5861/5627 5071/5862/5628 5116/5855/5622\nf 5097/5863/5629 5140/5813/5580 5080/5812/5579\nf 5080/5812/5579 5133/5864/5630 5097/5863/5629\nf 5116/5855/5622 5097/5863/5629 5133/5864/5630\nf 5133/5864/5630 5072/5856/5623 5116/5855/5622\nf 5097/5863/5629 5116/5855/5622 5071/5862/5628\nf 5071/5862/5628 5132/5865/5631 5097/5863/5629\nf 5140/5813/5580 5097/5863/5629 5132/5865/5631\nf 5132/5865/5631 5079/5814/5581 5140/5813/5580\nf 5098/5866/5632 5141/5820/5587 5081/5819/5586\nf 5081/5819/5586 5134/5867/5633 5098/5866/5632\nf 5117/5857/5624 5098/5866/5632 5134/5867/5633\nf 5134/5867/5633 5073/5859/5626 5117/5857/5624\nf 5098/5866/5632 5117/5857/5624 5072/5856/5623\nf 5072/5856/5623 5133/5864/5630 5098/5866/5632\nf 5141/5820/5587 5098/5866/5632 5133/5864/5630\nf 5133/5864/5630 5080/5812/5579 5141/5820/5587\nf 5099/5868/5634 5142/5826/5593 5082/5825/5592\nf 5082/5825/5592 5135/5869/5635 5099/5868/5634\nf 5118/5870/5636 5099/5868/5634 5135/5869/5635\nf 5135/5869/5635 5074/5871/5637 5118/5870/5636\nf 5099/5868/5634 5118/5870/5636 5073/5859/5626\nf 5073/5859/5626 5134/5867/5633 5099/5868/5634\nf 5142/5826/5593 5099/5868/5634 5134/5867/5633\nf 5134/5867/5633 5081/5819/5586 5142/5826/5593\nf 5100/5872/5638 5143/5832/5599 5083/5831/5598\nf 5083/5831/5598 5136/5873/5639 5100/5872/5638\nf 5119/5874/5640 5100/5872/5638 5136/5873/5639\nf 5136/5873/5639 5075/5875/5641 5119/5874/5640\nf 5100/5872/5638 5119/5874/5640 5074/5871/5637\nf 5074/5871/5637 5135/5869/5635 5100/5872/5638\nf 5143/5832/5599 5100/5872/5638 5135/5869/5635\nf 5135/5869/5635 5082/5825/5592 5143/5832/5599\nf 5101/5876/5642 5144/5838/5605 5084/5837/5604\nf 5084/5837/5604 5137/5877/5643 5101/5876/5642\nf 5120/5878/5644 5101/5876/5642 5137/5877/5643\nf 5137/5877/5643 5076/5879/5645 5120/5878/5644\nf 5101/5876/5642 5120/5878/5644 5075/5875/5641\nf 5075/5875/5641 5136/5873/5639 5101/5876/5642\nf 5144/5838/5605 5101/5876/5642 5136/5873/5639\nf 5136/5873/5639 5083/5831/5598 5144/5838/5605\nf 5102/5880/5646 5145/5844/5611 5085/5843/5610\nf 5085/5843/5610 5138/5881/5647 5102/5880/5646\nf 5121/5882/5648 5102/5880/5646 5138/5881/5647\nf 5138/5881/5647 5077/5883/5649 5121/5882/5648\nf 5102/5880/5646 5121/5882/5648 5076/5879/5645\nf 5076/5879/5645 5137/5877/5643 5102/5880/5646\nf 5145/5844/5611 5102/5880/5646 5137/5877/5643\nf 5137/5877/5643 5084/5837/5604 5145/5844/5611\nf 5103/5884/5650 5146/5850/5617 5086/5849/5616\nf 5086/5849/5616 5139/5885/5651 5103/5884/5650\nf 5122/5886/5652 5103/5884/5650 5139/5885/5651\nf 5139/5885/5651 5078/5887/5653 5122/5886/5652\nf 5103/5884/5650 5122/5886/5652 5077/5883/5649\nf 5077/5883/5649 5138/5881/5647 5103/5884/5650\nf 5146/5850/5617 5103/5884/5650 5138/5881/5647\nf 5138/5881/5647 5085/5843/5610 5146/5850/5617\nf 5104/5888/5654 5147/5853/5620 5079/5814/5581\nf 5079/5814/5581 5132/5865/5631 5104/5888/5654\nf 5123/5889/5655 5104/5888/5654 5132/5865/5631\nf 5132/5865/5631 5071/5862/5628 5123/5889/5655\nf 5104/5888/5654 5123/5889/5655 5078/5887/5653\nf 5078/5887/5653 5139/5885/5651 5104/5888/5654\nf 5147/5853/5620 5104/5888/5654 5139/5885/5651\nf 5139/5885/5651 5086/5849/5616 5147/5853/5620\nf 5105/5890/5656 5151/5891/5657 5077/5883/5649\nf 5077/5883/5649 5122/5886/5652 5105/5890/5656\nf 5123/5889/5655 5105/5890/5656 5122/5886/5652\nf 5122/5886/5652 5078/5887/5653 5123/5889/5655\nf 5105/5890/5656 5123/5889/5655 5071/5862/5628\nf 5071/5862/5628 5149/5861/5627 5105/5890/5656\nf 5151/5891/5657 5105/5890/5656 5149/5861/5627\nf 5149/5861/5627 5087/5860/1186 5151/5891/5657\nf 5106/5892/5658 5150/5858/5625 5073/5859/5626\nf 5073/5859/5626 5118/5870/5636 5106/5892/5658\nf 5119/5874/5640 5106/5892/5658 5118/5870/5636\nf 5118/5870/5636 5074/5871/5637 5119/5874/5640\nf 5106/5892/5658 5119/5874/5640 5075/5875/5641\nf 5075/5875/5641 5148/5893/5659 5106/5892/5658\nf 5150/5858/5625 5106/5892/5658 5148/5893/5659\nf 5148/5893/5659 5087/5860/1186 5150/5858/5625\nf 5107/5894/5660 5151/5891/5657 5087/5860/1186\nf 5087/5860/1186 5148/5893/5659 5107/5894/5660\nf 5120/5878/5644 5107/5894/5660 5148/5893/5659\nf 5148/5893/5659 5075/5875/5641 5120/5878/5644\nf 5107/5894/5660 5120/5878/5644 5076/5879/5645\nf 5076/5879/5645 5121/5882/5648 5107/5894/5660\nf 5151/5891/5657 5107/5894/5660 5121/5882/5648\nf 5121/5882/5648 5077/5883/5649 5151/5891/5657\nf 5177/5895/5661 5197/5896/5662 5152/5897/5663\nf 5152/5897/5663 5213/5898/5664 5177/5895/5661\nf 5214/5899/5665 5153/5900/5666 5197/5896/5662\nf 5197/5896/5662 5177/5895/5661 5214/5899/5665\nf 5177/5895/5661 5229/5901/5667 5169/5902/5668\nf 5169/5902/5668 5214/5899/5665 5177/5895/5661\nf 5213/5898/5664 5168/5903/5669 5229/5901/5667\nf 5229/5901/5667 5177/5895/5661 5213/5898/5664\nf 5178/5904/5670 5201/5905/5671 5153/5900/5666\nf 5153/5900/5666 5214/5899/5665 5178/5904/5670\nf 5215/5906/5672 5158/5907/5673 5201/5905/5671\nf 5201/5905/5671 5178/5904/5670 5215/5906/5672\nf 5178/5904/5670 5230/5908/5674 5170/5909/5675\nf 5170/5909/5675 5215/5906/5672 5178/5904/5670\nf 5214/5899/5665 5169/5902/5668 5230/5908/5674\nf 5230/5908/5674 5178/5904/5670 5214/5899/5665\nf 5179/5910/5676 5202/5911/5677 5158/5907/5673\nf 5158/5907/5673 5215/5906/5672 5179/5910/5676\nf 5216/5912/5678 5157/5913/5679 5202/5911/5677\nf 5202/5911/5677 5179/5910/5676 5216/5912/5678\nf 5179/5910/5676 5231/5914/5680 5171/5915/5681\nf 5171/5915/5681 5216/5912/5678 5179/5910/5676\nf 5215/5906/5672 5170/5909/5675 5231/5914/5680\nf 5231/5914/5680 5179/5910/5676 5215/5906/5672\nf 5180/5916/5682 5200/5917/5683 5157/5913/5679\nf 5157/5913/5679 5216/5912/5678 5180/5916/5682\nf 5217/5918/5684 5156/5919/5685 5200/5917/5683\nf 5200/5917/5683 5180/5916/5682 5217/5918/5684\nf 5180/5916/5682 5232/5920/5686 5172/5921/5687\nf 5172/5921/5687 5217/5918/5684 5180/5916/5682\nf 5216/5912/5678 5171/5915/5681 5232/5920/5686\nf 5232/5920/5686 5180/5916/5682 5216/5912/5678\nf 5181/5922/5688 5204/5923/5689 5156/5919/5685\nf 5156/5919/5685 5217/5918/5684 5181/5922/5688\nf 5218/5924/5690 5159/5925/5691 5204/5923/5689\nf 5204/5923/5689 5181/5922/5688 5218/5924/5690\nf 5181/5922/5688 5233/5926/5692 5173/5927/5693\nf 5173/5927/5693 5218/5924/5690 5181/5922/5688\nf 5217/5918/5684 5172/5921/5687 5233/5926/5692\nf 5233/5926/5692 5181/5922/5688 5217/5918/5684\nf 5182/5928/5694 5203/5929/5695 5159/5925/5691\nf 5159/5925/5691 5218/5924/5690 5182/5928/5694\nf 5219/5930/5696 5154/5931/5697 5203/5929/5695\nf 5203/5929/5695 5182/5928/5694 5219/5930/5696\nf 5182/5928/5694 5234/5932/5698 5174/5933/5699\nf 5174/5933/5699 5219/5930/5696 5182/5928/5694\nf 5218/5924/5690 5173/5927/5693 5234/5932/5698\nf 5234/5932/5698 5182/5928/5694 5218/5924/5690\nf 5183/5934/5700 5198/5935/5701 5154/5931/5697\nf 5154/5931/5697 5219/5930/5696 5183/5934/5700\nf 5220/5936/5702 5155/5937/5703 5198/5935/5701\nf 5198/5935/5701 5183/5934/5700 5220/5936/5702\nf 5183/5934/5700 5235/5938/5704 5175/5939/5705\nf 5175/5939/5705 5220/5936/5702 5183/5934/5700\nf 5219/5930/5696 5174/5933/5699 5235/5938/5704\nf 5235/5938/5704 5183/5934/5700 5219/5930/5696\nf 5184/5940/5706 5199/5941/5707 5155/5937/5703\nf 5155/5937/5703 5220/5936/5702 5184/5940/5706\nf 5213/5898/5664 5152/5897/5663 5199/5941/5707\nf 5199/5941/5707 5184/5940/5706 5213/5898/5664\nf 5184/5940/5706 5236/5942/5708 5168/5903/5669\nf 5168/5903/5669 5213/5898/5664 5184/5940/5706\nf 5220/5936/5702 5175/5939/5705 5236/5942/5708\nf 5236/5942/5708 5184/5940/5706 5220/5936/5702\nf 5185/5943/5709 5206/5944/5710 5161/5945/5711\nf 5161/5945/5711 5205/5946/5712 5185/5943/5709\nf 5239/5947/5713 5162/5948/5714 5206/5944/5710\nf 5206/5944/5710 5185/5943/5709 5239/5947/5713\nf 5185/5943/5709 5238/5949/5715 5176/5950/1186\nf 5176/5950/1186 5239/5947/5713 5185/5943/5709\nf 5205/5946/5712 5160/5951/5716 5238/5949/5715\nf 5238/5949/5715 5185/5943/5709 5205/5946/5712\nf 5186/5952/5717 5222/5953/5718 5169/5902/5668\nf 5169/5902/5668 5229/5901/5667 5186/5952/5717\nf 5205/5946/5712 5161/5945/5711 5222/5953/5718\nf 5222/5953/5718 5186/5952/5717 5205/5946/5712\nf 5186/5952/5717 5221/5954/5719 5160/5951/5716\nf 5160/5951/5716 5205/5946/5712 5186/5952/5717\nf 5229/5901/5667 5168/5903/5669 5221/5954/5719\nf 5221/5954/5719 5186/5952/5717 5229/5901/5667\nf 5187/5955/5720 5223/5956/5721 5170/5909/5675\nf 5170/5909/5675 5230/5908/5674 5187/5955/5720\nf 5206/5944/5710 5162/5948/5714 5223/5956/5721\nf 5223/5956/5721 5187/5955/5720 5206/5944/5710\nf 5187/5955/5720 5222/5953/5718 5161/5945/5711\nf 5161/5945/5711 5206/5944/5710 5187/5955/5720\nf 5230/5908/5674 5169/5902/5668 5222/5953/5718\nf 5222/5953/5718 5187/5955/5720 5230/5908/5674\nf 5188/5957/5722 5224/5958/5723 5171/5915/5681\nf 5171/5915/5681 5231/5914/5680 5188/5957/5722\nf 5207/5959/5724 5163/5960/5725 5224/5958/5723\nf 5224/5958/5723 5188/5957/5722 5207/5959/5724\nf 5188/5957/5722 5223/5956/5721 5162/5948/5714\nf 5162/5948/5714 5207/5959/5724 5188/5957/5722\nf 5231/5914/5680 5170/5909/5675 5223/5956/5721\nf 5223/5956/5721 5188/5957/5722 5231/5914/5680\nf 5189/5961/5726 5225/5962/5727 5172/5921/5687\nf 5172/5921/5687 5232/5920/5686 5189/5961/5726\nf 5208/5963/5728 5164/5964/5729 5225/5962/5727\nf 5225/5962/5727 5189/5961/5726 5208/5963/5728\nf 5189/5961/5726 5224/5958/5723 5163/5960/5725\nf 5163/5960/5725 5208/5963/5728 5189/5961/5726\nf 5232/5920/5686 5171/5915/5681 5224/5958/5723\nf 5224/5958/5723 5189/5961/5726 5232/5920/5686\nf 5190/5965/5730 5226/5966/5731 5173/5927/5693\nf 5173/5927/5693 5233/5926/5692 5190/5965/5730\nf 5209/5967/5732 5165/5968/5733 5226/5966/5731\nf 5226/5966/5731 5190/5965/5730 5209/5967/5732\nf 5190/5965/5730 5225/5962/5727 5164/5964/5729\nf 5164/5964/5729 5209/5967/5732 5190/5965/5730\nf 5233/5926/5692 5172/5921/5687 5225/5962/5727\nf 5225/5962/5727 5190/5965/5730 5233/5926/5692\nf 5191/5969/5734 5227/5970/5735 5174/5933/5699\nf 5174/5933/5699 5234/5932/5698 5191/5969/5734\nf 5210/5971/5736 5166/5972/5737 5227/5970/5735\nf 5227/5970/5735 5191/5969/5734 5210/5971/5736\nf 5191/5969/5734 5226/5966/5731 5165/5968/5733\nf 5165/5968/5733 5210/5971/5736 5191/5969/5734\nf 5234/5932/5698 5173/5927/5693 5226/5966/5731\nf 5226/5966/5731 5191/5969/5734 5234/5932/5698\nf 5192/5973/5738 5228/5974/5739 5175/5939/5705\nf 5175/5939/5705 5235/5938/5704 5192/5973/5738\nf 5211/5975/5740 5167/5976/5741 5228/5974/5739\nf 5228/5974/5739 5192/5973/5738 5211/5975/5740\nf 5192/5973/5738 5227/5970/5735 5166/5972/5737\nf 5166/5972/5737 5211/5975/5740 5192/5973/5738\nf 5235/5938/5704 5174/5933/5699 5227/5970/5735\nf 5227/5970/5735 5192/5973/5738 5235/5938/5704\nf 5193/5977/5742 5221/5954/5719 5168/5903/5669\nf 5168/5903/5669 5236/5942/5708 5193/5977/5742\nf 5212/5978/5743 5160/5951/5716 5221/5954/5719\nf 5221/5954/5719 5193/5977/5742 5212/5978/5743\nf 5193/5977/5742 5228/5974/5739 5167/5976/5741\nf 5167/5976/5741 5212/5978/5743 5193/5977/5742\nf 5236/5942/5708 5175/5939/5705 5228/5974/5739\nf 5228/5974/5739 5193/5977/5742 5236/5942/5708\nf 5194/5979/5744 5211/5975/5740 5166/5972/5737\nf 5166/5972/5737 5240/5980/5745 5194/5979/5744\nf 5212/5978/5743 5167/5976/5741 5211/5975/5740\nf 5211/5975/5740 5194/5979/5744 5212/5978/5743\nf 5194/5979/5744 5238/5949/5715 5160/5951/5716\nf 5160/5951/5716 5212/5978/5743 5194/5979/5744\nf 5240/5980/5745 5176/5950/1186 5238/5949/5715\nf 5238/5949/5715 5194/5979/5744 5240/5980/5745\nf 5195/5981/5746 5207/5959/5724 5162/5948/5714\nf 5162/5948/5714 5239/5947/5713 5195/5981/5746\nf 5208/5963/5728 5163/5960/5725 5207/5959/5724\nf 5207/5959/5724 5195/5981/5746 5208/5963/5728\nf 5195/5981/5746 5237/5982/5747 5164/5964/5729\nf 5164/5964/5729 5208/5963/5728 5195/5981/5746\nf 5239/5947/5713 5176/5950/1186 5237/5982/5747\nf 5237/5982/5747 5195/5981/5746 5239/5947/5713\nf 5196/5983/5748 5237/5982/5747 5176/5950/1186\nf 5176/5950/1186 5240/5980/5745 5196/5983/5748\nf 5209/5967/5732 5164/5964/5729 5237/5982/5747\nf 5237/5982/5747 5196/5983/5748 5209/5967/5732\nf 5196/5983/5748 5210/5971/5736 5165/5968/5733\nf 5165/5968/5733 5209/5967/5732 5196/5983/5748\nf 5240/5980/5745 5166/5972/5737 5210/5971/5736\nf 5210/5971/5736 5196/5983/5748 5240/5980/5745\nf 7263/5984/5452 7264/5985/5452 7265/5986/5452\nf 7265/5986/5452 7262/5987/5452 7263/5984/5452\nf 7267/5988/1186 7268/5989/1186 7269/5990/1186\nf 7269/5990/1186 7266/5991/1186 7267/5988/1186\nf 1631/5428/5297 4801/5427/5296 9686/5992/5749\nf 4803/5431/5300 9686/5992/5749 9687/5993/5749\nf 4805/5435/5304 1632/5432/5301 9687/5993/5749\nf 1633/5436/5305 4805/5435/5304 9688/5994/5749\nf 9686/5992/5749 4801/5427/5296 1629/5424/5293\nf 9687/5993/5749 9686/5992/5749 4798/5423/5292\nf 9687/5993/5749 1630/5422/5291 4808/5443/5312\nf 9688/5994/5749 4808/5443/5312 1634/5440/5309\nf 1079/3017/2967 3726/3020/2970 9689/5995/5750\nf 1078/3013/2963 3725/3018/2968 9689/5995/5750\nf 3726/3020/2970 1074/3002/2952 9690/5996/5750\nf 3724/3014/2964 9689/5995/5750 9690/5996/5750\nf 9690/5996/5750 1074/3002/2952 3721/3001/2951\nf 9690/5996/5750 9691/5997/5750 3723/3010/2960\nf 9691/5997/5750 3721/3001/2951 1075/3000/2950\nf 9691/5997/5750 3722/3006/2956 1076/3005/2955\nf 1631/5428/5297 9686/5992/5749 4803/5431/5300\nf 4803/5431/5300 9687/5993/5749 1632/5432/5301\nf 4805/5435/5304 9687/5993/5749 9688/5994/5749\nf 1633/5436/5305 9688/5994/5749 4807/5439/5308\nf 9686/5992/5749 1629/5424/5293 4798/5423/5292\nf 9687/5993/5749 4798/5423/5292 1630/5422/5291\nf 9687/5993/5749 4808/5443/5312 9688/5994/5749\nf 9688/5994/5749 1634/5440/5309 4807/5439/5308\nf 1079/3017/2967 9689/5995/5750 3725/3018/2968\nf 1078/3013/2963 9689/5995/5750 3724/3014/2964\nf 3726/3020/2970 9690/5996/5750 9689/5995/5750\nf 3724/3014/2964 9690/5996/5750 1077/3009/2959\nf 9690/5996/5750 3721/3001/2951 9691/5997/5750\nf 9690/5996/5750 3723/3010/2960 1077/3009/2959\nf 9691/5997/5750 1075/3000/2950 3722/3006/2956\nf 9691/5997/5750 1076/3005/2955 3723/3010/2960\nusemtl Material__803_gummiSub1\nf 5785/5998/5751 5968/5999/5752 5716/6000/5753\nf 5716/6000/5753 5853/6001/5754 5785/5998/5751\nf 5856/6002/5755 5785/5998/5751 5853/6001/5754\nf 5853/6001/5754 5713/6003/5756 5856/6002/5755\nf 5785/5998/5751 5856/6002/5755 5736/6004/5757\nf 5736/6004/5757 5855/6005/5758 5785/5998/5751\nf 5968/5999/5752 5785/5998/5751 5855/6005/5758\nf 5855/6005/5758 5737/6006/5759 5968/5999/5752\nf 5786/6007/5760 5969/6008/5761 5717/6009/5762\nf 5717/6009/5762 5898/6010/5763 5786/6007/5760\nf 5859/6011/5764 5786/6007/5760 5898/6010/5763\nf 5898/6010/5763 5714/6012/5765 5859/6011/5764\nf 5786/6007/5760 5859/6011/5764 5715/6013/5766\nf 5715/6013/5766 5858/6014/5767 5786/6007/5760\nf 5969/6008/5761 5786/6007/5760 5858/6014/5767\nf 5858/6014/5767 5756/6015/5768 5969/6008/5761\nf 5787/6016/5769 5874/6017/5770 5729/6018/5771\nf 5729/6018/5771 5876/6019/5772 5787/6016/5769\nf 5877/6020/5773 5787/6016/5769 5876/6019/5772\nf 5876/6019/5772 5730/6021/5774 5877/6020/5773\nf 5787/6016/5769 5877/6020/5773 5731/6022/5775\nf 5731/6022/5775 5863/6023/5776 5787/6016/5769\nf 5874/6017/5770 5787/6016/5769 5863/6023/5776\nf 5863/6023/5776 5720/6024/5777 5874/6017/5770\nf 5788/6025/5778 5880/6026/5779 5734/6027/5780\nf 5734/6027/5780 5881/6028/5781 5788/6025/5778\nf 5862/6029/5782 5788/6025/5778 5881/6028/5781\nf 5881/6028/5781 5735/6030/5783 5862/6029/5782\nf 5788/6025/5778 5862/6029/5782 5738/6031/5784\nf 5738/6031/5784 5866/6032/5785 5788/6025/5778\nf 5880/6026/5779 5788/6025/5778 5866/6032/5785\nf 5866/6032/5785 5742/6033/5786 5880/6026/5779\nf 5789/6034/5787 5879/6035/5788 5733/6036/5789\nf 5733/6036/5789 5899/6037/5790 5789/6034/5787\nf 5863/6023/5776 5789/6034/5787 5899/6037/5790\nf 5899/6037/5790 5720/6024/5777 5863/6023/5776\nf 5789/6034/5787 5863/6023/5776 5731/6022/5775\nf 5731/6022/5775 5878/6038/5791 5789/6034/5787\nf 5879/6035/5788 5789/6034/5787 5878/6038/5791\nf 5878/6038/5791 5732/6039/5792 5879/6035/5788\nf 5790/6040/5793 5870/6041/5794 5725/6042/5795\nf 5725/6042/5795 5869/6043/5796 5790/6040/5793\nf 5973/6044/5797 5790/6040/5793 5869/6043/5796\nf 5869/6043/5796 5759/6045/5798 5973/6044/5797\nf 5790/6040/5793 5973/6044/5797 5761/6046/5799\nf 5761/6046/5799 5871/6047/5800 5790/6040/5793\nf 5870/6041/5794 5790/6040/5793 5871/6047/5800\nf 5871/6047/5800 5726/6048/5801 5870/6041/5794\nf 5791/6049/5802 5872/6050/5803 5740/6051/5804\nf 5740/6051/5804 5900/6052/5805 5791/6049/5802\nf 5974/6053/5806 5791/6049/5802 5900/6052/5805\nf 5900/6052/5805 5766/6054/5807 5974/6053/5806\nf 5791/6049/5802 5974/6053/5806 5724/6055/5808\nf 5724/6055/5808 5873/6056/5809 5791/6049/5802\nf 5872/6050/5803 5791/6049/5802 5873/6056/5809\nf 5873/6056/5809 5727/6057/5810 5872/6050/5803\nf 5792/6058/5811 5901/6059/5812 5738/6031/5784\nf 5738/6031/5784 5862/6029/5782 5792/6058/5811\nf 5882/6060/5813 5792/6058/5811 5862/6029/5782\nf 5862/6029/5782 5735/6030/5783 5882/6060/5813\nf 5792/6058/5811 5882/6060/5813 5728/6061/5814\nf 5728/6061/5814 5875/6062/5815 5792/6058/5811\nf 5901/6059/5812 5792/6058/5811 5875/6062/5815\nf 5875/6062/5815 5741/6063/5816 5901/6059/5812\nf 5793/6064/5817 5883/6065/5818 5753/6066/5819\nf 5753/6066/5819 5854/6067/5820 5793/6064/5817\nf 5884/6068/5821 5793/6064/5817 5854/6067/5820\nf 5854/6067/5820 5764/6069/5822 5884/6068/5821\nf 5793/6064/5817 5884/6068/5821 8325/6070/5823\nf 8325/6070/5823 8326/6071/5824 5793/6064/5817\nf 8327/6072/5825 8329/6073/5826 8328/6074/5827\nf 8328/6074/5827 8330/6075/5828 8327/6072/5825\nf 5794/6076/5829 5902/6077/5830 5754/6078/5831\nf 5754/6078/5831 5857/6079/5832 5794/6076/5829\nf 5885/6080/5833 5794/6076/5829 5857/6079/5832\nf 5857/6079/5832 5718/6081/5834 5885/6080/5833\nf 8331/6082/5835 8333/6083/5836 8332/6084/5837\nf 8332/6084/5837 8334/6085/5838 8331/6082/5835\nf 8335/6086/5839 8331/6082/5835 8334/6085/5838\nf 8334/6085/5838 8336/6087/5840 8335/6086/5839\nf 5795/6088/5841 8338/6089/5842 8337/6090/5843\nf 8337/6090/5843 5861/6091/5844 5795/6088/5841\nf 5886/6092/5845 5795/6088/5841 5861/6091/5844\nf 5861/6091/5844 5721/6093/5846 5886/6092/5845\nf 5795/6088/5841 5886/6092/5845 8339/6094/5847\nf 8339/6094/5847 8340/6095/5848 5795/6088/5841\nf 8338/6089/5842 5795/6088/5841 8340/6095/5848\nf 8340/6095/5848 8341/6096/5849 8338/6089/5842\nf 5796/6097/5850 5886/6092/5845 5721/6093/5846\nf 5721/6093/5846 5868/6098/5851 5796/6097/5850\nf 5887/6099/5852 5796/6097/5850 5868/6098/5851\nf 5868/6098/5851 5762/6100/5853 5887/6099/5852\nf 5796/6097/5850 5887/6099/5852 8342/6101/5854\nf 8342/6101/5854 8343/6102/5855 5796/6097/5850\nf 5886/6092/5845 5796/6097/5850 8343/6102/5855\nf 8343/6102/5855 8339/6094/5847 5886/6092/5845\nf 5797/6103/5856 8345/6104/5857 8344/6105/5858\nf 8344/6105/5858 5867/6106/5859 5797/6103/5856\nf 5888/6107/5860 5797/6103/5856 5867/6106/5859\nf 5867/6106/5859 5765/6108/5861 5888/6107/5860\nf 5797/6103/5856 5888/6107/5860 8346/6109/5862\nf 8346/6109/5862 8347/6110/5863 5797/6103/5856\nf 8345/6104/5857 5797/6103/5856 8347/6110/5863\nf 8347/6110/5863 8348/6111/5864 8345/6104/5857\nf 5798/6112/5865 5903/6113/5866 5723/6114/5867\nf 5723/6114/5867 5865/6115/5868 5798/6112/5865\nf 5889/6116/5869 5798/6112/5865 5865/6115/5868\nf 5865/6115/5868 5722/6117/5870 5889/6116/5869\nf 5798/6112/5865 5889/6116/5869 5734/6027/5780\nf 5734/6027/5780 5880/6026/5779 5798/6112/5865\nf 5903/6113/5866 5798/6112/5865 5880/6026/5779\nf 5880/6026/5779 5742/6033/5786 5903/6113/5866\nf 5799/6118/5871 8350/6119/5872 8349/6120/5873\nf 8349/6120/5873 5864/6121/5874 5799/6118/5871\nf 5890/6122/5875 5799/6118/5871 5864/6121/5874\nf 5864/6121/5874 5719/6123/5876 5890/6122/5875\nf 5799/6118/5871 5890/6122/5875 8351/6124/5877\nf 8351/6124/5877 8352/6125/5878 5799/6118/5871\nf 8350/6119/5872 5799/6118/5871 8352/6125/5878\nf 8352/6125/5878 8353/6126/5879 8350/6119/5872\nf 5800/6127/5880 5890/6122/5875 5719/6123/5876\nf 5719/6123/5876 5860/6128/5881 5800/6127/5880\nf 8354/6129/5882 5800/6127/5880 5860/6128/5881\nf 5860/6128/5881 8355/6130/5883 8354/6129/5882\nf 5800/6127/5880 8354/6129/5882 8356/6131/5884\nf 8356/6131/5884 8357/6132/5885 5800/6127/5880\nf 5890/6122/5875 5800/6127/5880 8357/6132/5885\nf 8357/6132/5885 8351/6124/5877 5890/6122/5875\nf 5801/6133/5886 5855/6005/5758 5736/6004/5757\nf 5736/6004/5757 5891/6134/5887 5801/6133/5886\nf 5898/6010/5763 5801/6133/5886 5891/6134/5887\nf 5891/6134/5887 5714/6012/5765 5898/6010/5763\nf 5801/6133/5886 5898/6010/5763 5717/6009/5762\nf 5717/6009/5762 5927/6135/5888 5801/6133/5886\nf 5892/6136/5889 5801/6133/5886 5927/6135/5888\nf 5927/6135/5888 5755/6137/5890 5892/6136/5889\nf 5801/6133/5886 5892/6136/5889 5763/6138/5891\nf 5763/6138/5891 5936/6139/5892 5801/6133/5886\nf 5855/6005/5758 5801/6133/5886 5936/6139/5892\nf 5936/6139/5892 5737/6006/5759 5855/6005/5758\nf 5802/6140/5893 5904/6141/5894 5769/6142/5895\nf 5769/6142/5895 5893/6143/5896 5802/6140/5893\nf 5910/6144/5897 5802/6140/5893 5893/6143/5896\nf 5893/6143/5896 5778/6145/5898 5910/6144/5897\nf 5802/6140/5893 5910/6144/5897 5780/6146/5899\nf 5780/6146/5899 5977/6147/5900 5802/6140/5893\nf 5904/6141/5894 5802/6140/5893 5977/6147/5900\nf 5977/6147/5900 5767/6148/5901 5904/6141/5894\nf 5803/6149/5902 5871/6047/5800 5761/6046/5799\nf 5761/6046/5799 5933/6150/5903 5803/6149/5902\nf 5894/6151/5904 5803/6149/5902 5933/6150/5903\nf 5933/6150/5903 5760/6152/5905 5894/6151/5904\nf 5803/6149/5902 5894/6151/5904 5739/6153/5906\nf 5739/6153/5906 5941/6154/5907 5803/6149/5902\nf 5900/6052/5805 5803/6149/5902 5941/6154/5907\nf 5941/6154/5907 5766/6054/5807 5900/6052/5805\nf 5803/6149/5902 5900/6052/5805 5740/6051/5804\nf 5740/6051/5804 5895/6155/5908 5803/6149/5902\nf 5871/6047/5800 5803/6149/5902 5895/6155/5908\nf 5895/6155/5908 5726/6048/5801 5871/6047/5800\nf 5804/6156/5909 5909/6157/5910 5778/6145/5898\nf 5778/6145/5898 5893/6143/5896 5804/6156/5909\nf 5905/6158/5911 5804/6156/5909 5893/6143/5896\nf 5893/6143/5896 5769/6142/5895 5905/6158/5911\nf 5804/6156/5909 5905/6158/5911 5771/6159/5912\nf 5771/6159/5912 5896/6160/5913 5804/6156/5909\nf 5909/6157/5910 5804/6156/5909 5896/6160/5913\nf 5896/6160/5913 5776/6161/5914 5909/6157/5910\nf 5805/6162/5915 5906/6163/5916 5772/6164/5917\nf 5772/6164/5917 5907/6165/5918 5805/6162/5915\nf 5908/6166/5919 5805/6162/5915 5907/6165/5918\nf 5907/6165/5918 5774/6167/5920 5908/6166/5919\nf 5805/6162/5915 5908/6166/5919 5777/6168/5921\nf 5777/6168/5921 5976/6169/5922 5805/6162/5915\nf 5906/6163/5916 5805/6162/5915 5976/6169/5922\nf 5976/6169/5922 5770/6170/5923 5906/6163/5916\nf 5806/6171/5924 5911/6172/5925 5781/6173/5926\nf 5781/6173/5926 5912/6174/5927 5806/6171/5924\nf 5913/6175/5928 8359/6176/5929 8358/6177/5930\nf 8358/6177/5930 5783/6178/5931 5913/6175/5928\nf 8359/6176/5929 5913/6175/5928 5768/6179/5932\nf 5768/6179/5932 5897/6180/5933 8359/6176/5929\nf 5911/6172/5925 5806/6171/5924 8360/6181/5934\nf 8360/6181/5934 5779/6182/5935 5911/6172/5925\nf 5807/6183/5936 5914/6184/5937 8361/6185/5938\nf 8361/6185/5938 8362/6186/5939 5807/6183/5936\nf 5915/6187/5940 5807/6183/5936 8362/6186/5939\nf 8362/6186/5939 8363/6188/5941 5915/6187/5940\nf 5807/6183/5936 5915/6187/5940 5744/6189/5942\nf 5744/6189/5942 5978/6190/5943 5807/6183/5936\nf 5914/6184/5937 5807/6183/5936 5978/6190/5943\nf 5978/6190/5943 5743/6191/5944 5914/6184/5937\nf 5808/6192/5945 5915/6187/5940 8363/6188/5941\nf 8363/6188/5941 8364/6193/5946 5808/6192/5945\nf 5916/6194/5947 5808/6192/5945 8364/6193/5946\nf 8364/6193/5946 8365/6195/5948 5916/6194/5947\nf 5808/6192/5945 5916/6194/5947 5745/6196/5949\nf 5745/6196/5949 5979/6197/5950 5808/6192/5945\nf 5915/6187/5940 5808/6192/5945 5979/6197/5950\nf 5979/6197/5950 5744/6189/5942 5915/6187/5940\nf 5809/6198/5951 8367/6199/5952 8366/6200/5953\nf 8366/6200/5953 8368/6201/5954 5809/6198/5951\nf 5917/6202/5955 8369/6203/5956 5884/6068/5821\nf 5884/6068/5821 5764/6069/5822 5917/6202/5955\nf 5809/6198/5951 8370/6204/5957 5773/6205/5958\nf 5773/6205/5958 5980/6206/5959 5809/6198/5951\nf 8367/6199/5952 5809/6198/5951 5980/6206/5959\nf 5980/6206/5959 8371/6207/5960 8367/6199/5952\nf 5810/6208/5961 5988/6209/5962 5763/6138/5891\nf 5763/6138/5891 5892/6136/5889 5810/6208/5961\nf 5918/6210/5963 5810/6208/5961 5892/6136/5889\nf 5892/6136/5889 5755/6137/5890 5918/6210/5963\nf 5810/6208/5961 5918/6210/5963 5775/6211/5964\nf 5775/6211/5964 5981/6212/5965 5810/6208/5961\nf 5988/6209/5962 5810/6208/5961 5981/6212/5965\nf 5981/6212/5965 5746/6213/5966 5988/6209/5962\nf 5811/6214/5967 5989/6215/5968 8372/6216/5969\nf 8372/6216/5969 8373/6217/5970 5811/6214/5967\nf 5919/6218/5971 5811/6214/5967 8373/6217/5970\nf 8373/6217/5970 8374/6219/5972 5919/6218/5971\nf 8375/6220/5973 8376/6221/5974 5748/6222/5975\nf 5748/6222/5975 5982/6223/5976 8375/6220/5973\nf 8377/6224/5977 8375/6220/5973 5982/6223/5976\nf 5982/6223/5976 5747/6225/5978 8377/6224/5977\nf 5812/6226/5979 8378/6227/5980 5729/6018/5771\nf 5729/6018/5771 5874/6017/5770 5812/6226/5979\nf 5920/6228/5981 5812/6226/5979 5874/6017/5770\nf 5874/6017/5770 5720/6024/5777 5920/6228/5981\nf 8379/6229/5982 8380/6230/5983 5749/6231/5984\nf 5749/6231/5984 5983/6232/5985 8379/6229/5982\nf 8376/6221/5974 8379/6229/5982 5983/6232/5985\nf 5983/6232/5985 5748/6222/5975 8376/6221/5974\nf 5813/6233/5986 5920/6228/5981 5720/6024/5777\nf 5720/6024/5777 5899/6037/5790 5813/6233/5986\nf 5921/6234/5987 5813/6233/5986 5899/6037/5790\nf 5899/6037/5790 5733/6036/5789 5921/6234/5987\nf 8381/6235/5988 8382/6236/5989 5750/6237/5990\nf 5750/6237/5990 5984/6238/5991 8381/6235/5988\nf 8380/6230/5983 8381/6235/5988 5984/6238/5991\nf 5984/6238/5991 5749/6231/5984 8380/6230/5983\nf 5814/6239/5992 8383/6240/5993 8346/6109/5862\nf 8346/6109/5862 5888/6107/5860 5814/6239/5992\nf 5922/6241/5994 5814/6239/5992 5888/6107/5860\nf 5888/6107/5860 5765/6108/5861 5922/6241/5994\nf 8384/6242/5995 8385/6243/5996 5782/6244/5997\nf 5782/6244/5997 5985/6245/5998 8384/6242/5995\nf 8382/6236/5989 8384/6242/5995 5985/6245/5998\nf 5985/6245/5998 5750/6237/5990 8382/6236/5989\nf 5815/6246/5999 5990/6247/6000 5739/6153/5906\nf 5739/6153/5906 5894/6151/5904 5815/6246/5999\nf 5923/6248/6001 5815/6246/5999 5894/6151/5904\nf 5894/6151/5904 5760/6152/5905 5923/6248/6001\nf 5815/6246/5999 5923/6248/6001 5784/6249/6002\nf 5784/6249/6002 5986/6250/6003 5815/6246/5999\nf 5990/6247/6000 5815/6246/5999 5986/6250/6003\nf 5986/6250/6003 5751/6251/6004 5990/6247/6000\nf 5816/6252/6005 5991/6253/6006 8386/6254/6007\nf 8386/6254/6007 8387/6255/6008 5816/6252/6005\nf 5914/6184/5937 5816/6252/6005 8387/6255/6008\nf 8387/6255/6008 8361/6185/5938 5914/6184/5937\nf 5816/6252/6005 5914/6184/5937 5743/6191/5944\nf 5743/6191/5944 5987/6256/6009 5816/6252/6005\nf 5991/6253/6006 5816/6252/6005 5987/6256/6009\nf 5987/6256/6009 5752/6257/6010 5991/6253/6006\nf 5817/6258/6011 5927/6135/5888 5717/6009/5762\nf 5717/6009/5762 5925/6259/6012 5817/6258/6011\nf 5926/6260/6013 8389/6261/6014 8388/6262/6015\nf 8388/6262/6015 5754/6078/5831 5926/6260/6013\nf 5817/6258/6011 8390/6263/6016 5755/6137/5890\nf 5755/6137/5890 5927/6135/5888 5817/6258/6011\nf 5818/6264/6017 5934/6265/6018 8391/6266/6019\nf 8391/6266/6019 5932/6267/6020 5818/6264/6017\nf 5933/6150/5903 5818/6264/6017 5932/6267/6020\nf 5932/6267/6020 5760/6152/5905 5933/6150/5903\nf 5818/6264/6017 5933/6150/5903 5761/6046/5799\nf 5761/6046/5799 5934/6265/6018 5818/6264/6017\nf 5819/6268/6021 5938/6269/6022 5737/6006/5759\nf 5737/6006/5759 5936/6139/5892 5819/6268/6021\nf 5937/6270/6023 5819/6268/6021 5936/6139/5892\nf 5936/6139/5892 5763/6138/5891 5937/6270/6023\nf 8392/6271/6024 8393/6272/6025 5764/6069/5822\nf 5764/6069/5822 8394/6273/6026 8392/6271/6024\nf 5820/6274/6027 5941/6154/5907 5739/6153/5906\nf 5739/6153/5906 5939/6275/6028 5820/6274/6027\nf 5940/6276/6029 5820/6274/6027 5939/6275/6028\nf 5939/6275/6028 8395/6277/6030 5940/6276/6029\nf 5820/6274/6027 5940/6276/6029 5766/6054/5807\nf 5766/6054/5807 5941/6154/5907 5820/6274/6027\nf 5821/6278/6031 5944/6279/6032 5743/6191/5944\nf 5743/6191/5944 5942/6280/6033 5821/6278/6031\nf 5943/6281/6034 8397/6282/6035 8396/6283/6036\nf 8396/6283/6036 5767/6148/5901 5943/6281/6034\nf 8398/6284/6037 8400/6285/6038 8399/6286/6039\nf 8399/6286/6039 8401/6287/6040 8398/6284/6037\nf 5822/6288/6041 5948/6289/6042 8402/6290/6043\nf 8402/6290/6043 5946/6291/6044 5822/6288/6041\nf 5947/6292/6045 8404/6293/6046 8403/6294/6047\nf 8403/6294/6047 5770/6170/5923 5947/6292/6045\nf 5822/6288/6041 8405/6295/6048 5771/6159/5912\nf 5771/6159/5912 5948/6289/6042 5822/6288/6041\nf 5823/6296/6049 5951/6297/6050 5746/6213/5966\nf 5746/6213/5966 5949/6298/6051 5823/6296/6049\nf 5950/6299/6052 8407/6300/6053 8406/6301/6054\nf 8406/6301/6054 5772/6164/5917 5950/6299/6052\nf 8408/6302/6055 8409/6303/6056 5773/6205/5958\nf 5773/6205/5958 8410/6304/6057 8408/6302/6055\nf 5824/6305/6058 5954/6306/6059 5747/6225/5978\nf 5747/6225/5978 5952/6307/6060 5824/6305/6058\nf 5953/6308/6061 8412/6309/6062 8411/6310/6063\nf 8411/6310/6063 5774/6167/5920 5953/6308/6061\nf 8413/6311/6064 8414/6312/6065 5775/6211/5964\nf 5775/6211/5964 8415/6313/6066 8413/6311/6064\nf 5825/6314/6067 5957/6315/6068 8416/6316/6069\nf 8416/6316/6069 5955/6317/6070 5825/6314/6067\nf 5956/6318/6071 5825/6314/6067 5955/6317/6070\nf 5955/6317/6070 5776/6161/5914 5956/6318/6071\nf 8417/6319/6072 8418/6320/6073 5777/6168/5921\nf 5777/6168/5921 8419/6321/6074 8417/6319/6072\nf 5826/6322/6075 5961/6323/6076 8420/6324/6077\nf 8420/6324/6077 5959/6325/6078 5826/6322/6075\nf 5960/6326/6079 5826/6322/6075 5959/6325/6078\nf 5959/6325/6078 5779/6182/5935 5960/6326/6079\nf 8421/6327/6080 8422/6328/6081 5780/6146/5899\nf 5780/6146/5899 8423/6329/6082 8421/6327/6080\nf 5827/6330/6083 5964/6331/6084 5751/6251/6004\nf 5751/6251/6004 5962/6332/6085 5827/6330/6083\nf 5963/6333/6086 8425/6334/6087 8424/6335/6088\nf 8424/6335/6088 5781/6173/5926 5963/6333/6086\nf 8426/6336/6089 8427/6337/6090 5782/6244/5997\nf 5782/6244/5997 8428/6338/6091 8426/6336/6089\nf 5828/6339/6092 5967/6340/6093 5752/6257/6010\nf 5752/6257/6010 5965/6341/6094 5828/6339/6092\nf 5966/6342/6095 8430/6343/6096 8429/6344/6097\nf 8429/6344/6097 8431/6345/6098 5966/6342/6095\nf 8432/6346/6099 8433/6347/6100 5784/6249/6002\nf 5784/6249/6002 8434/6348/6101 8432/6346/6099\nf 5829/6349/6102 5854/6067/5820 5753/6066/5819\nf 5753/6066/5819 5924/6350/6103 5829/6349/6102\nf 5968/5999/5752 8436/6351/6104 8435/6352/6105\nf 8435/6352/6105 5716/6000/5753 5968/5999/5752\nf 8436/6351/6104 5968/5999/5752 5737/6006/5759\nf 5737/6006/5759 5938/6269/6022 8436/6351/6104\nf 5854/6067/5820 5829/6349/6102 8394/6273/6026\nf 8394/6273/6026 5764/6069/5822 5854/6067/5820\nf 5830/6353/6106 5857/6079/5832 5754/6078/5831\nf 5754/6078/5831 8388/6262/6015 5830/6353/6106\nf 5969/6008/5761 8437/6354/6107 5925/6259/6012\nf 5925/6259/6012 5717/6009/5762 5969/6008/5761\nf 8437/6354/6107 5969/6008/5761 5756/6015/5768\nf 5756/6015/5768 5928/6355/6108 8437/6354/6107\nf 5857/6079/5832 5830/6353/6106 8438/6356/6109\nf 8438/6356/6109 5718/6081/5834 5857/6079/5832\nf 5831/6357/6110 5860/6128/5881 5719/6123/5876\nf 5719/6123/5876 5929/6358/6111 5831/6357/6110\nf 5970/6359/6112 5831/6357/6110 5929/6358/6111\nf 5929/6358/6111 5757/6360/6113 5970/6359/6112\nf 5831/6357/6110 5970/6359/6112 8439/6361/6114\nf 8439/6361/6114 8440/6362/6115 5831/6357/6110\nf 5860/6128/5881 5831/6357/6110 8440/6362/6115\nf 8440/6362/6115 8355/6130/5883 5860/6128/5881\nf 5832/6363/6116 5861/6091/5844 8337/6090/5843\nf 8337/6090/5843 8441/6364/6117 5832/6363/6116\nf 5971/6365/6118 5832/6363/6116 8441/6364/6117\nf 8441/6364/6117 8442/6366/6119 5971/6365/6118\nf 5832/6363/6116 5971/6365/6118 5758/6367/6120\nf 5758/6367/6120 5930/6368/6121 5832/6363/6116\nf 5861/6091/5844 5832/6363/6116 5930/6368/6121\nf 5930/6368/6121 5721/6093/5846 5861/6091/5844\nf 5833/6369/6122 5864/6121/5874 8349/6120/5873\nf 8349/6120/5873 5931/6370/6123 5833/6369/6122\nf 5972/6371/6124 5833/6369/6122 5931/6370/6123\nf 5931/6370/6123 8443/6372/6125 5972/6371/6124\nf 5833/6369/6122 5972/6371/6124 5757/6360/6113\nf 5757/6360/6113 5929/6358/6111 5833/6369/6122\nf 5864/6121/5874 5833/6369/6122 5929/6358/6111\nf 5929/6358/6111 5719/6123/5876 5864/6121/5874\nf 5834/6373/6126 8444/6374/6127 8391/6266/6019\nf 8391/6266/6019 5934/6265/6018 5834/6373/6126\nf 5973/6044/5797 5834/6373/6126 5934/6265/6018\nf 5934/6265/6018 5761/6046/5799 5973/6044/5797\nf 5834/6373/6126 5973/6044/5797 5759/6045/5798\nf 5759/6045/5798 8445/6375/6128 5834/6373/6126\nf 5865/6115/5868 8447/6376/6129 8446/6377/6130\nf 8446/6377/6130 5722/6117/5870 5865/6115/5868\nf 5835/6378/6131 5867/6106/5859 8344/6105/5858\nf 8344/6105/5858 5935/6379/6132 5835/6378/6131\nf 5974/6053/5806 8449/6380/6133 8448/6381/6134\nf 8448/6381/6134 5724/6055/5808 5974/6053/5806\nf 8449/6380/6133 5974/6053/5806 5766/6054/5807\nf 5766/6054/5807 5940/6276/6029 8449/6380/6133\nf 8450/6382/6135 8449/6380/6133 5940/6276/6029\nf 5940/6276/6029 8395/6277/6030 8450/6382/6135\nf 5836/6383/6136 5868/6098/5851 5721/6093/5846\nf 5721/6093/5846 5930/6368/6121 5836/6383/6136\nf 5975/6384/6137 5836/6383/6136 5930/6368/6121\nf 5930/6368/6121 5758/6367/6120 5975/6384/6137\nf 5836/6383/6136 5975/6384/6137 8451/6385/6138\nf 8451/6385/6138 8452/6386/6139 5836/6383/6136\nf 5868/6098/5851 5836/6383/6136 8452/6386/6139\nf 8452/6386/6139 5762/6100/5853 5868/6098/5851\nf 5837/6387/6140 5896/6160/5913 5771/6159/5912\nf 5771/6159/5912 8405/6295/6048 5837/6387/6140\nf 5976/6169/5922 8453/6388/6141 5947/6292/6045\nf 5947/6292/6045 5770/6170/5923 5976/6169/5922\nf 8453/6388/6141 5976/6169/5922 5777/6168/5921\nf 5777/6168/5921 8418/6320/6073 8453/6388/6141\nf 5896/6160/5913 5837/6387/6140 5956/6318/6071\nf 5956/6318/6071 5776/6161/5914 5896/6160/5913\nf 5838/6389/6142 8360/6181/5934 8399/6286/6039\nf 8399/6286/6039 8400/6285/6038 5838/6389/6142\nf 5977/6147/5900 8454/6390/6143 5943/6281/6034\nf 5943/6281/6034 5767/6148/5901 5977/6147/5900\nf 8454/6390/6143 5977/6147/5900 5780/6146/5899\nf 5780/6146/5899 8422/6328/6081 8454/6390/6143\nf 8360/6181/5934 5838/6389/6142 5960/6326/6079\nf 5960/6326/6079 5779/6182/5935 8360/6181/5934\nf 5839/6391/6144 5904/6141/5894 5767/6148/5901\nf 5767/6148/5901 8396/6283/6036 5839/6391/6144\nf 5978/6190/5943 8455/6392/6145 5942/6280/6033\nf 5942/6280/6033 5743/6191/5944 5978/6190/5943\nf 8455/6392/6145 5978/6190/5943 5744/6189/5942\nf 5744/6189/5942 5945/6393/6146 8455/6392/6145\nf 5904/6141/5894 5839/6391/6144 8456/6394/6147\nf 8456/6394/6147 5769/6142/5895 5904/6141/5894\nf 5840/6395/6148 5905/6158/5911 5769/6142/5895\nf 5769/6142/5895 8456/6394/6147 5840/6395/6148\nf 5979/6197/5950 8457/6396/6149 5945/6393/6146\nf 5945/6393/6146 5744/6189/5942 5979/6197/5950\nf 8457/6396/6149 5979/6197/5950 5745/6196/5949\nf 5745/6196/5949 8458/6397/6150 8457/6396/6149\nf 5905/6158/5911 5840/6395/6148 5948/6289/6042\nf 5948/6289/6042 5771/6159/5912 5905/6158/5911\nf 5841/6398/6151 5906/6163/5916 5770/6170/5923\nf 5770/6170/5923 8403/6294/6047 5841/6398/6151\nf 8459/6399/6152 8461/6400/6153 8460/6401/6154\nf 8460/6401/6154 5745/6196/5949 8459/6399/6152\nf 8462/6402/6155 5980/6206/5959 5773/6205/5958\nf 5773/6205/5958 8409/6303/6056 8462/6402/6155\nf 5906/6163/5916 5841/6398/6151 5950/6299/6052\nf 5950/6299/6052 5772/6164/5917 5906/6163/5916\nf 5842/6403/6156 5907/6165/5918 5772/6164/5917\nf 5772/6164/5917 8406/6301/6054 5842/6403/6156\nf 5981/6212/5965 8463/6404/6157 5949/6298/6051\nf 5949/6298/6051 5746/6213/5966 5981/6212/5965\nf 8463/6404/6157 5981/6212/5965 5775/6211/5964\nf 5775/6211/5964 8414/6312/6065 8463/6404/6157\nf 5907/6165/5918 5842/6403/6156 5953/6308/6061\nf 5953/6308/6061 5774/6167/5920 5907/6165/5918\nf 5843/6405/6158 5908/6166/5919 5774/6167/5920\nf 5774/6167/5920 8411/6310/6063 5843/6405/6158\nf 5982/6223/5976 8464/6406/6159 5952/6307/6060\nf 5952/6307/6060 5747/6225/5978 5982/6223/5976\nf 8464/6406/6159 5982/6223/5976 5748/6222/5975\nf 5748/6222/5975 8465/6407/6160 8464/6406/6159\nf 5908/6166/5919 5843/6405/6158 8419/6321/6074\nf 8419/6321/6074 5777/6168/5921 5908/6166/5919\nf 5844/6408/6161 5909/6157/5910 5776/6161/5914\nf 5776/6161/5914 5955/6317/6070 5844/6408/6161\nf 5983/6232/5985 8467/6409/6162 8466/6410/6163\nf 8466/6410/6163 5748/6222/5975 5983/6232/5985\nf 8467/6409/6162 5983/6232/5985 5749/6231/5984\nf 5749/6231/5984 5958/6411/6164 8467/6409/6162\nf 5909/6157/5910 5844/6408/6161 8468/6412/6165\nf 8468/6412/6165 5778/6145/5898 5909/6157/5910\nf 5845/6413/6166 5910/6144/5897 5778/6145/5898\nf 5778/6145/5898 8468/6412/6165 5845/6413/6166\nf 5984/6238/5991 8469/6414/6167 5958/6411/6164\nf 5958/6411/6164 5749/6231/5984 5984/6238/5991\nf 8469/6414/6167 5984/6238/5991 5750/6237/5990\nf 5750/6237/5990 8470/6415/6168 8469/6414/6167\nf 5910/6144/5897 5845/6413/6166 8423/6329/6082\nf 8423/6329/6082 5780/6146/5899 5910/6144/5897\nf 5846/6416/6169 5911/6172/5925 5779/6182/5935\nf 5779/6182/5935 5959/6325/6078 5846/6416/6169\nf 8471/6417/6170 5846/6416/6169 5959/6325/6078\nf 5959/6325/6078 8420/6324/6077 8471/6417/6170\nf 8472/6418/6171 5985/6245/5998 5782/6244/5997\nf 5782/6244/5997 8427/6337/6090 8472/6418/6171\nf 5911/6172/5925 5846/6416/6169 5963/6333/6086\nf 5963/6333/6086 5781/6173/5926 5911/6172/5925\nf 5847/6419/6172 5912/6174/5927 5781/6173/5926\nf 5781/6173/5926 8424/6335/6088 5847/6419/6172\nf 5986/6250/6003 8473/6420/6173 5962/6332/6085\nf 5962/6332/6085 5751/6251/6004 5986/6250/6003\nf 8473/6420/6173 5986/6250/6003 5784/6249/6002\nf 5784/6249/6002 8433/6347/6100 8473/6420/6173\nf 5912/6174/5927 5847/6419/6172 5966/6342/6095\nf 5966/6342/6095 8431/6345/6098 5912/6174/5927\nf 5848/6421/6174 5913/6175/5928 5783/6178/5931\nf 5783/6178/5931 8474/6422/6175 5848/6421/6174\nf 5987/6256/6009 8475/6423/6176 5965/6341/6094\nf 5965/6341/6094 5752/6257/6010 5987/6256/6009\nf 5848/6421/6174 8477/6424/6177 8476/6425/6178\nf 8476/6425/6178 8478/6426/6179 5848/6421/6174\nf 5913/6175/5928 5848/6421/6174 8478/6426/6179\nf 8478/6426/6179 5768/6179/5932 5913/6175/5928\nf 5849/6427/6180 8370/6204/5957 8479/6428/6181\nf 8479/6428/6181 8480/6429/6182 5849/6427/6180\nf 5988/6209/5962 8481/6430/6183 5937/6270/6023\nf 5937/6270/6023 5763/6138/5891 5988/6209/5962\nf 8481/6430/6183 5988/6209/5962 5746/6213/5966\nf 5746/6213/5966 5951/6297/6050 8481/6430/6183\nf 8370/6204/5957 5849/6427/6180 8410/6304/6057\nf 8410/6304/6057 5773/6205/5958 8370/6204/5957\nf 5850/6431/6184 5918/6210/5963 5755/6137/5890\nf 5755/6137/5890 8390/6263/6016 5850/6431/6184\nf 5989/6215/5968 8483/6432/6185 8482/6433/6186\nf 8482/6433/6186 8372/6216/5969 5989/6215/5968\nf 8484/6434/6187 8377/6224/5977 5747/6225/5978\nf 5747/6225/5978 5954/6306/6059 8484/6434/6187\nf 5918/6210/5963 5850/6431/6184 8415/6313/6066\nf 8415/6313/6066 5775/6211/5964 5918/6210/5963\nf 5851/6435/6188 5922/6241/5994 5765/6108/5861\nf 5765/6108/5861 8485/6436/6189 5851/6435/6188\nf 5990/6247/6000 8486/6437/6190 5939/6275/6028\nf 5939/6275/6028 5739/6153/5906 5990/6247/6000\nf 8486/6437/6190 5990/6247/6000 5751/6251/6004\nf 5751/6251/6004 5964/6331/6084 8486/6437/6190\nf 8385/6243/5996 8487/6438/6191 8428/6338/6091\nf 8428/6338/6091 5782/6244/5997 8385/6243/5996\nf 5852/6439/6192 5923/6248/6001 5760/6152/5905\nf 5760/6152/5905 5932/6267/6020 5852/6439/6192\nf 5991/6253/6006 8489/6440/6193 8488/6441/6194\nf 8488/6441/6194 8386/6254/6007 5991/6253/6006\nf 8489/6440/6193 5991/6253/6006 5752/6257/6010\nf 5752/6257/6010 5967/6340/6093 8489/6440/6193\nf 5923/6248/6001 5852/6439/6192 8434/6348/6101\nf 8434/6348/6101 5784/6249/6002 5923/6248/6001\nf 5994/6442/6195 5995/6443/6195 5997/6444/6195\nf 5997/6444/6195 5996/6445/6195 5994/6442/6195\nf 5992/6446/6196 5993/6447/6196 8490/6448/6196\nf 8490/6448/6196 8491/6449/6196 5992/6446/6196\nf 6010/6450/5422 6011/6451/5422 6018/6452/5422\nf 6018/6452/5422 6019/6453/5422 6010/6450/5422\nf 5998/6454/6197 5999/6455/6197 6000/6456/6198\nf 6000/6456/6198 6001/6457/6198 5998/6454/6197\nf 6020/6458/5423 6021/6459/5423 6022/6460/5423\nf 6022/6460/5423 6023/6461/5423 6020/6458/5423\nf 6023/6461/5423 6063/6462/5423 6062/6463/5423\nf 6020/6458/5423 6023/6461/5423 6062/6463/5423\nf 6020/6458/5423 6062/6463/5423 6029/6464/5423\nf 6046/6465/6199 6049/6466/6199 6050/6467/6195\nf 6050/6467/6195 6051/6468/6195 6046/6465/6199\nf 6018/6452/5422 6011/6451/5422 6012/6469/5422\nf 6012/6469/5422 6053/6470/5422 6052/6471/5422\nf 6018/6452/5422 6012/6469/5422 6052/6471/5422\nf 8492/6472/6200 8493/6473/6200 6003/6474/6201\nf 6003/6474/6201 6002/6475/6201 8492/6472/6200\nf 6018/6452/5422 6052/6471/5422 6054/6476/6202\nf 6054/6476/6202 6017/6477/5422 6018/6452/5422\nf 6001/6457/6198 6000/6456/6198 6005/6478/6198\nf 6005/6478/6198 6004/6479/6198 6001/6457/6198\nf 6063/6462/5423 6023/6461/5423 6024/6480/5423\nf 6024/6480/5423 6061/6481/6203 6063/6462/5423\nf 6002/6475/6201 6003/6474/6201 6007/6482/6204\nf 6007/6482/6204 6006/6483/6205 6002/6475/6201\nf 6017/6477/5422 6054/6476/6202 6055/6484/6206\nf 6055/6484/6206 6057/6485/6207 6017/6477/5422\nf 6004/6479/6198 6005/6478/6198 6009/6486/6208\nf 6009/6486/6208 6008/6487/6208 6004/6479/6198\nf 6061/6481/6203 6024/6480/5423 6058/6488/6209\nf 6058/6488/6209 6059/6489/6210 6061/6481/6203\nf 6001/6457/6198 6013/6490/6211 8494/6491/6197\nf 5998/6454/6197 6001/6457/6198 8494/6491/6197\nf 5998/6454/6197 8494/6491/6197 8495/6492/6197\nf 6001/6457/6198 6004/6479/6198 6014/6493/6198\nf 6014/6493/6198 6013/6490/6211 6001/6457/6198\nf 6004/6479/6198 6008/6487/6208 6056/6494/6208\nf 6056/6494/6208 6014/6493/6198 6004/6479/6198\nf 6050/6467/6195 6049/6466/6199 6048/6495/6195\nf 6050/6467/6195 6048/6495/6195 6016/6496/6195\nf 6050/6467/6195 6016/6496/6195 6015/6497/6195\nf 6036/6498/6212 6037/6499/6213 6066/6500/6213\nf 6066/6500/6213 6067/6501/6212 6036/6498/6212\nf 6037/6499/6213 6030/6502/6214 6064/6503/6214\nf 6064/6503/6214 6066/6500/6213 6037/6499/6213\nf 8496/6504/6215 6031/6505/6215 6032/6506/6215\nf 6032/6506/6215 6065/6507/6216 8497/6508/6217\nf 8496/6504/6215 6032/6506/6215 8497/6508/6217\nf 8490/6448/6196 5993/6447/6196 8498/6509/6196\nf 8498/6509/6196 8499/6510/6196 8490/6448/6196\nf 5992/6446/6196 8491/6449/6196 8500/6511/6196\nf 8500/6511/6196 8501/6512/6196 5992/6446/6196\nf 6039/6513/6215 6075/6514/6218 6074/6515/6219\nf 6038/6516/6215 6039/6513/6215 6074/6515/6219\nf 6038/6516/6215 6074/6515/6219 6045/6517/6215\nf 8502/6518/6214 6040/6519/6213 6073/6520/6213\nf 6073/6520/6213 8503/6521/6214 8502/6518/6214\nf 6040/6519/6213 6070/6522/6212 6071/6523/6212\nf 6071/6523/6212 6073/6520/6213 6040/6519/6213\nf 6046/6465/6199 6051/6468/6195 6060/6524/6195\nf 6046/6465/6199 6060/6524/6195 6025/6525/6195\nf 6047/6526/6195 6046/6465/6199 6025/6525/6195\nf 6009/6486/6208 6005/6478/6198 6027/6527/6198\nf 6027/6527/6198 6026/6528/6208 6009/6486/6208\nf 6005/6478/6198 6000/6456/6198 6028/6529/6211\nf 6028/6529/6211 6027/6527/6198 6005/6478/6198\nf 6000/6456/6198 5999/6455/6197 8504/6530/6197\nf 8504/6530/6197 8505/6531/6197 6028/6529/6211\nf 6000/6456/6198 8504/6530/6197 6028/6529/6211\nf 8506/6532/5423 8508/6533/5423 8507/6534/5423\nf 8507/6534/5423 8509/6535/5423 8506/6532/5423\nf 8490/6448/6196 8499/6510/6196 8510/6536/6196\nf 8510/6536/6196 8511/6537/6196 8490/6448/6196\nf 6018/6452/5422 6033/6538/6220 8512/6539/5422\nf 6019/6453/5422 6018/6452/5422 8512/6539/5422\nf 6019/6453/5422 8512/6539/5422 8513/6540/5422\nf 6018/6452/5422 6017/6477/5422 6034/6541/6221\nf 6034/6541/6221 6033/6538/6220 6018/6452/5422\nf 6017/6477/5422 6057/6485/6207 6068/6542/6222\nf 6068/6542/6222 6034/6541/6221 6017/6477/5422\nf 6016/6496/6195 6048/6495/6195 6069/6543/6223\nf 6069/6543/6223 6035/6544/6224 6016/6496/6195\nf 8514/6545/6225 8516/6546/5423 8515/6547/5423\nf 8515/6547/5423 8517/6548/6226 8514/6545/6225\nf 8516/6546/5423 8506/6532/5423 8509/6535/5423\nf 8509/6535/5423 8515/6547/5423 8516/6546/5423\nf 8518/6549/5422 8520/6550/5422 8519/6551/5422\nf 8519/6551/5422 8521/6552/5422 8518/6549/5422\nf 8520/6550/5422 8523/6553/5422 8522/6554/5422\nf 8522/6554/5422 8519/6551/5422 8520/6550/5422\nf 8523/6553/5422 8525/6555/6227 8524/6556/6228\nf 8524/6556/6228 8522/6554/5422 8523/6553/5422\nf 6047/6526/6195 6025/6525/6195 6072/6557/6224\nf 6072/6557/6224 6041/6558/6223 6047/6526/6195\nf 6058/6488/6209 6024/6480/5423 6043/6559/6229\nf 6043/6559/6229 6042/6560/6230 6058/6488/6209\nf 6024/6480/5423 6023/6461/5423 6044/6561/6231\nf 6044/6561/6231 6043/6559/6229 6024/6480/5423\nf 6023/6461/5423 6022/6460/5423 8526/6562/5423\nf 8526/6562/5423 8527/6563/5423 6044/6561/6231\nf 6023/6461/5423 8526/6562/5423 6044/6561/6231\nf 8500/6511/6196 8491/6449/6196 8528/6564/6196\nf 8528/6564/6196 8529/6565/6196 8500/6511/6196\nf 6006/6483/6205 8531/6566/6232 8530/6567/6232\nf 6007/6482/6204 8533/6568/6233 8532/6569/6233\nf 8534/6570/6234 8536/6571/6234 8535/6572/6234\nf 8537/6573/6235 8539/6574/6235 8538/6575/6236\nf 8540/6576/6237 8542/6577/6238 8541/6578/6238\nf 8543/6579/6239 8545/6580/6239 8544/6581/6239\nf 8546/6582/6240 8497/6508/6217 6065/6507/6216\nf 8547/6583/6241 8549/6584/6242 8548/6585/6243\nf 8550/6586/6244 8552/6587/6245 8551/6588/6246\nf 8553/6589/6247 6074/6515/6219 6075/6514/6218\nf 6046/6465/6199 8555/6590/6248 8554/6591/6248\nf 8554/6591/6248 6049/6466/6199 6046/6465/6199\nf 8556/6592/6249 6008/6487/6208 6009/6486/6208\nf 6009/6486/6208 8557/6593/6249 8556/6592/6249\nf 8558/6594/6250 8560/6595/6251 8559/6596/6252\nf 8559/6596/6252 8561/6597/6253 8558/6594/6250\nf 6054/6476/6202 8563/6598/6254 8562/6599/6255\nf 8562/6599/6255 6055/6484/6206 6054/6476/6202\nf 8539/6574/6235 8537/6573/6235 8564/6600/6256\nf 8564/6600/6256 8565/6601/6256 8539/6574/6235\nf 6008/6487/6208 8556/6592/6249 8566/6602/6249\nf 8566/6602/6249 6056/6494/6208 6008/6487/6208\nf 8567/6603/6257 8568/6604/6257 8541/6578/6238\nf 8541/6578/6238 8542/6577/6238 8567/6603/6257\nf 6059/6489/6210 8570/6605/6258 8569/6606/6259\nf 8569/6606/6259 6061/6481/6203 6059/6489/6210\nf 8571/6607/6260 8573/6608/6261 8572/6609/6262\nf 8572/6609/6262 8574/6610/6263 8571/6607/6260\nf 8557/6593/6249 6009/6486/6208 6026/6528/6208\nf 6026/6528/6208 8575/6611/6249 8557/6593/6249\nf 8576/6612/6264 6033/6538/6220 6034/6541/6221\nf 6034/6541/6221 8577/6613/6265 8576/6612/6264\nf 8578/6614/6266 8579/6615/6267 8548/6585/6243\nf 8548/6585/6243 8549/6584/6242 8578/6614/6266\nf 8580/6616/6268 6035/6544/6224 6069/6543/6223\nf 6069/6543/6223 8581/6617/6268 8580/6616/6268\nf 6057/6485/6207 8583/6618/6256 8582/6619/6256\nf 8582/6619/6256 6068/6542/6222 6057/6485/6207\nf 8584/6620/6257 8514/6545/6225 8517/6548/6226\nf 8517/6548/6226 8585/6621/6257 8584/6620/6257\nf 8586/6622/6268 6041/6558/6223 6072/6557/6224\nf 6072/6557/6224 8587/6623/6269 8586/6622/6268\nf 8552/6587/6245 8550/6586/6244 8588/6624/6270\nf 8588/6624/6270 8589/6625/6271 8552/6587/6245\nf 8590/6626/6272 6043/6559/6229 6044/6561/6231\nf 6044/6561/6231 8591/6627/6273 8590/6626/6272\nf 8525/6555/6227 8593/6628/6256 8592/6629/6256\nf 8592/6629/6256 8524/6556/6228 8525/6555/6227\nf 8594/6630/6257 6058/6488/6209 6042/6560/6230\nf 6042/6560/6230 8595/6631/6257 8594/6630/6257\nf 6078/6632/6195 6079/6633/6195 6081/6634/6195\nf 6081/6634/6195 6080/6635/6195 6078/6632/6195\nf 6076/6636/6196 6077/6637/6196 8596/6638/6196\nf 8596/6638/6196 8597/6639/6196 6076/6636/6196\nf 6094/6640/5422 6095/6641/5422 6102/6642/5422\nf 6102/6642/5422 6103/6643/5422 6094/6640/5422\nf 6082/6644/6197 6083/6645/6197 6084/6646/6198\nf 6084/6646/6198 6085/6647/6198 6082/6644/6197\nf 6104/6648/5423 6105/6649/5423 6106/6650/5423\nf 6106/6650/5423 6107/6651/5423 6104/6648/5423\nf 6107/6651/5423 6147/6652/5423 6146/6653/5423\nf 6104/6648/5423 6107/6651/5423 6146/6653/5423\nf 6104/6648/5423 6146/6653/5423 6113/6654/5423\nf 6130/6655/6199 6133/6656/6199 6134/6657/6195\nf 6134/6657/6195 6135/6658/6195 6130/6655/6199\nf 6102/6642/5422 6095/6641/5422 6096/6659/5422\nf 6096/6659/5422 6137/6660/5422 6136/6661/5422\nf 6102/6642/5422 6096/6659/5422 6136/6661/5422\nf 8598/6662/6200 8599/6663/6200 6087/6664/6201\nf 6087/6664/6201 6086/6665/6201 8598/6662/6200\nf 6102/6642/5422 6136/6661/5422 6138/6666/6202\nf 6138/6666/6202 6101/6667/5422 6102/6642/5422\nf 6085/6647/6198 6084/6646/6198 6089/6668/6198\nf 6089/6668/6198 6088/6669/6198 6085/6647/6198\nf 6147/6652/5423 6107/6651/5423 6108/6670/5423\nf 6108/6670/5423 6145/6671/6203 6147/6652/5423\nf 6086/6665/6201 6087/6664/6201 6091/6672/6204\nf 6091/6672/6204 6090/6673/6205 6086/6665/6201\nf 6101/6667/5422 6138/6666/6202 6139/6674/6274\nf 6139/6674/6274 6141/6675/6227 6101/6667/5422\nf 6088/6669/6198 6089/6668/6198 6093/6676/6208\nf 6093/6676/6208 6092/6677/6208 6088/6669/6198\nf 6145/6671/6203 6108/6670/5423 6142/6678/6225\nf 6142/6678/6225 6143/6679/6275 6145/6671/6203\nf 6085/6647/6198 6097/6680/6211 8600/6681/6197\nf 6082/6644/6197 6085/6647/6198 8600/6681/6197\nf 6082/6644/6197 8600/6681/6197 8601/6682/6197\nf 6085/6647/6198 6088/6669/6198 6098/6683/6198\nf 6098/6683/6198 6097/6680/6211 6085/6647/6198\nf 6088/6669/6198 6092/6677/6208 6140/6684/6208\nf 6140/6684/6208 6098/6683/6198 6088/6669/6198\nf 6134/6657/6195 6133/6656/6199 6132/6685/6195\nf 6134/6657/6195 6132/6685/6195 6100/6686/6195\nf 6134/6657/6195 6100/6686/6195 6099/6687/6195\nf 6120/6688/6212 6121/6689/6213 6150/6690/6213\nf 6150/6690/6213 6151/6691/6212 6120/6688/6212\nf 6121/6689/6213 6114/6692/6214 6148/6693/6214\nf 6148/6693/6214 6150/6690/6213 6121/6689/6213\nf 8602/6694/6215 6115/6695/6215 6116/6696/6215\nf 6116/6696/6215 6149/6697/6216 8603/6698/6217\nf 8602/6694/6215 6116/6696/6215 8603/6698/6217\nf 8596/6638/6196 6077/6637/6196 8604/6699/6196\nf 8604/6699/6196 8605/6700/6196 8596/6638/6196\nf 6076/6636/6196 8597/6639/6196 8606/6701/6196\nf 8606/6701/6196 8607/6702/6196 6076/6636/6196\nf 6123/6703/6215 6159/6704/6218 6158/6705/6219\nf 6122/6706/6215 6123/6703/6215 6158/6705/6219\nf 6122/6706/6215 6158/6705/6219 6129/6707/6215\nf 8608/6708/6214 6124/6709/6213 6157/6710/6213\nf 6157/6710/6213 8609/6711/6214 8608/6708/6214\nf 6124/6709/6213 6154/6712/6212 6155/6713/6212\nf 6155/6713/6212 6157/6710/6213 6124/6709/6213\nf 6130/6655/6199 6135/6658/6195 6144/6714/6195\nf 6130/6655/6199 6144/6714/6195 6109/6715/6195\nf 6131/6716/6195 6130/6655/6199 6109/6715/6195\nf 6093/6676/6208 6089/6668/6198 6111/6717/6198\nf 6111/6717/6198 6110/6718/6208 6093/6676/6208\nf 6089/6668/6198 6084/6646/6198 6112/6719/6211\nf 6112/6719/6211 6111/6717/6198 6089/6668/6198\nf 6084/6646/6198 6083/6645/6197 8610/6720/6197\nf 8610/6720/6197 8611/6721/6197 6112/6719/6211\nf 6084/6646/6198 8610/6720/6197 6112/6719/6211\nf 8612/6722/5423 8614/6723/5423 8613/6724/5423\nf 8613/6724/5423 8615/6725/5423 8612/6722/5423\nf 8596/6638/6196 8605/6700/6196 8616/6726/6196\nf 8616/6726/6196 8617/6727/6196 8596/6638/6196\nf 6102/6642/5422 6117/6728/6220 8618/6729/5422\nf 6103/6643/5422 6102/6642/5422 8618/6729/5422\nf 6103/6643/5422 8618/6729/5422 8619/6730/5422\nf 6102/6642/5422 6101/6667/5422 6118/6731/6221\nf 6118/6731/6221 6117/6728/6220 6102/6642/5422\nf 6101/6667/5422 6141/6675/6227 6152/6732/6222\nf 6152/6732/6222 6118/6731/6221 6101/6667/5422\nf 6100/6686/6195 6132/6685/6195 6153/6733/6223\nf 6153/6733/6223 6119/6734/6224 6100/6686/6195\nf 8620/6735/6225 8622/6736/5423 8621/6737/5423\nf 8621/6737/5423 8623/6738/6226 8620/6735/6225\nf 8622/6736/5423 8612/6722/5423 8615/6725/5423\nf 8615/6725/5423 8621/6737/5423 8622/6736/5423\nf 8624/6739/5422 8626/6740/5422 8625/6741/5422\nf 8625/6741/5422 8627/6742/5422 8624/6739/5422\nf 8626/6740/5422 8629/6743/5422 8628/6744/5422\nf 8628/6744/5422 8625/6741/5422 8626/6740/5422\nf 8629/6743/5422 8631/6745/6227 8630/6746/6228\nf 8630/6746/6228 8628/6744/5422 8629/6743/5422\nf 6131/6716/6195 6109/6715/6195 6156/6747/6224\nf 6156/6747/6224 6125/6748/6223 6131/6716/6195\nf 6142/6678/6225 6108/6670/5423 6127/6749/6229\nf 6127/6749/6229 6126/6750/6230 6142/6678/6225\nf 6108/6670/5423 6107/6651/5423 6128/6751/6231\nf 6128/6751/6231 6127/6749/6229 6108/6670/5423\nf 6107/6651/5423 6106/6650/5423 8632/6752/5423\nf 8632/6752/5423 8633/6753/5423 6128/6751/6231\nf 6107/6651/5423 8632/6752/5423 6128/6751/6231\nf 8606/6701/6196 8597/6639/6196 8634/6754/6196\nf 8634/6754/6196 8635/6755/6196 8606/6701/6196\nf 6090/6673/6205 8637/6756/6232 8636/6757/6232\nf 6091/6672/6204 8639/6758/6233 8638/6759/6233\nf 8640/6760/6276 8642/6761/6276 8641/6762/6276\nf 8643/6763/6277 8645/6764/6277 8644/6765/6277\nf 8646/6766/6278 8648/6767/6278 8647/6768/6278\nf 8649/6769/6279 8651/6770/6279 8650/6771/6279\nf 8652/6772/6240 8603/6698/6217 6149/6697/6216\nf 8653/6773/6241 8655/6774/6242 8654/6775/6243\nf 8656/6776/6244 8658/6777/6245 8657/6778/6246\nf 8659/6779/6247 6158/6705/6219 6159/6704/6218\nf 6130/6655/6199 8661/6780/6248 8660/6781/6248\nf 8660/6781/6248 6133/6656/6199 6130/6655/6199\nf 8662/6782/6249 6092/6677/6208 6093/6676/6208\nf 6093/6676/6208 8663/6783/6249 8662/6782/6249\nf 8664/6784/6250 8666/6785/6251 8665/6786/6252\nf 8665/6786/6252 8667/6787/6253 8664/6784/6250\nf 6138/6666/6202 8669/6788/6254 8668/6789/6255\nf 8668/6789/6255 6139/6674/6274 6138/6666/6202\nf 6139/6674/6274 8671/6790/6256 8670/6791/6256\nf 8670/6791/6256 6141/6675/6227 6139/6674/6274\nf 6092/6677/6208 8662/6782/6249 8672/6792/6249\nf 8672/6792/6249 6140/6684/6208 6092/6677/6208\nf 6142/6678/6225 8674/6793/6257 8673/6794/6257\nf 8673/6794/6257 6143/6679/6275 6142/6678/6225\nf 6143/6679/6275 8676/6795/6258 8675/6796/6259\nf 8675/6796/6259 6145/6671/6203 6143/6679/6275\nf 8677/6797/6260 8679/6798/6261 8678/6799/6262\nf 8678/6799/6262 8680/6800/6263 8677/6797/6260\nf 8663/6783/6249 6093/6676/6208 6110/6718/6208\nf 6110/6718/6208 8681/6801/6249 8663/6783/6249\nf 8682/6802/6264 6117/6728/6220 6118/6731/6221\nf 6118/6731/6221 8683/6803/6265 8682/6802/6264\nf 8684/6804/6266 8685/6805/6267 8654/6775/6243\nf 8654/6775/6243 8655/6774/6242 8684/6804/6266\nf 8686/6806/6268 6119/6734/6224 6153/6733/6223\nf 6153/6733/6223 8687/6807/6268 8686/6806/6268\nf 6141/6675/6227 8670/6791/6256 8688/6808/6256\nf 8688/6808/6256 6152/6732/6222 6141/6675/6227\nf 8689/6809/6257 8620/6735/6225 8623/6738/6226\nf 8623/6738/6226 8690/6810/6257 8689/6809/6257\nf 8691/6811/6268 6125/6748/6223 6156/6747/6224\nf 6156/6747/6224 8692/6812/6268 8691/6811/6268\nf 8658/6777/6245 8656/6776/6244 8693/6813/6270\nf 8693/6813/6270 8694/6814/6271 8658/6777/6245\nf 8695/6815/6272 6127/6749/6229 6128/6751/6231\nf 6128/6751/6231 8696/6816/6273 8695/6815/6272\nf 8631/6745/6227 8698/6817/6256 8697/6818/6256\nf 8697/6818/6256 8630/6746/6228 8631/6745/6227\nf 8674/6793/6257 6142/6678/6225 6126/6750/6230\nf 6126/6750/6230 8699/6819/6257 8674/6793/6257\nf 6162/6820/6195 6163/6821/6195 6165/6822/6195\nf 6165/6822/6195 6164/6823/6195 6162/6820/6195\nf 6160/6824/6196 6161/6825/6196 8700/6826/6196\nf 8700/6826/6196 8701/6827/6196 6160/6824/6196\nf 6178/6828/5422 6179/6829/5422 6186/6830/5422\nf 6186/6830/5422 6187/6831/5422 6178/6828/5422\nf 6166/6832/6197 6167/6833/6197 6168/6834/6198\nf 6168/6834/6198 6169/6835/6198 6166/6832/6197\nf 6188/6836/5423 6189/6837/5423 6190/6838/5423\nf 6190/6838/5423 6191/6839/5423 6188/6836/5423\nf 6191/6839/5423 6231/6840/5423 6230/6841/5423\nf 6188/6836/5423 6191/6839/5423 6230/6841/5423\nf 6188/6836/5423 6230/6841/5423 6197/6842/5423\nf 6214/6843/6199 6217/6844/6199 6218/6845/6195\nf 6218/6845/6195 6219/6846/6195 6214/6843/6199\nf 6186/6830/5422 6179/6829/5422 6180/6847/5422\nf 6180/6847/5422 6221/6848/5422 6220/6849/5422\nf 6186/6830/5422 6180/6847/5422 6220/6849/5422\nf 8702/6850/6200 8703/6851/6200 6171/6852/6201\nf 6171/6852/6201 6170/6853/6201 8702/6850/6200\nf 6186/6830/5422 6220/6849/5422 6222/6854/6202\nf 6222/6854/6202 6185/6855/5422 6186/6830/5422\nf 6169/6835/6198 6168/6834/6198 6173/6856/6198\nf 6173/6856/6198 6172/6857/6198 6169/6835/6198\nf 6231/6840/5423 6191/6839/5423 6192/6858/5423\nf 6192/6858/5423 6229/6859/6203 6231/6840/5423\nf 6170/6853/6201 6171/6852/6201 6175/6860/6204\nf 6175/6860/6204 6174/6861/6205 6170/6853/6201\nf 6185/6855/5422 6222/6854/6202 6223/6862/6274\nf 6223/6862/6274 6225/6863/6227 6185/6855/5422\nf 6172/6857/6198 6173/6856/6198 6177/6864/6208\nf 6177/6864/6208 6176/6865/6208 6172/6857/6198\nf 6229/6859/6203 6192/6858/5423 6226/6866/6225\nf 6226/6866/6225 6227/6867/6275 6229/6859/6203\nf 6169/6835/6198 6181/6868/6211 8704/6869/6197\nf 6166/6832/6197 6169/6835/6198 8704/6869/6197\nf 6166/6832/6197 8704/6869/6197 8705/6870/6197\nf 6169/6835/6198 6172/6857/6198 6182/6871/6198\nf 6182/6871/6198 6181/6868/6211 6169/6835/6198\nf 6172/6857/6198 6176/6865/6208 6224/6872/6208\nf 6224/6872/6208 6182/6871/6198 6172/6857/6198\nf 6218/6845/6195 6217/6844/6199 6216/6873/6195\nf 6218/6845/6195 6216/6873/6195 6184/6874/6195\nf 6218/6845/6195 6184/6874/6195 6183/6875/6195\nf 6204/6876/6212 6205/6877/6213 6234/6878/6213\nf 6234/6878/6213 6235/6879/6212 6204/6876/6212\nf 6205/6877/6213 6198/6880/6214 6232/6881/6214\nf 6232/6881/6214 6234/6878/6213 6205/6877/6213\nf 8706/6882/6215 6199/6883/6215 6200/6884/6215\nf 6200/6884/6215 6233/6885/6216 8707/6886/6217\nf 8706/6882/6215 6200/6884/6215 8707/6886/6217\nf 8700/6826/6196 6161/6825/6196 8708/6887/6196\nf 8708/6887/6196 8709/6888/6196 8700/6826/6196\nf 6160/6824/6196 8701/6827/6196 8710/6889/6196\nf 8710/6889/6196 8711/6890/6196 6160/6824/6196\nf 6207/6891/6215 6243/6892/6218 6242/6893/6219\nf 6206/6894/6215 6207/6891/6215 6242/6893/6219\nf 6206/6894/6215 6242/6893/6219 6213/6895/6215\nf 8712/6896/6214 6208/6897/6213 6241/6898/6213\nf 6241/6898/6213 8713/6899/6214 8712/6896/6214\nf 6208/6897/6213 6238/6900/6212 6239/6901/6212\nf 6239/6901/6212 6241/6898/6213 6208/6897/6213\nf 6214/6843/6199 6219/6846/6195 6228/6902/6195\nf 6214/6843/6199 6228/6902/6195 6193/6903/6195\nf 6215/6904/6195 6214/6843/6199 6193/6903/6195\nf 6177/6864/6208 6173/6856/6198 6195/6905/6198\nf 6195/6905/6198 6194/6906/6208 6177/6864/6208\nf 6173/6856/6198 6168/6834/6198 6196/6907/6211\nf 6196/6907/6211 6195/6905/6198 6173/6856/6198\nf 6168/6834/6198 6167/6833/6197 8714/6908/6197\nf 8714/6908/6197 8715/6909/6197 6196/6907/6211\nf 6168/6834/6198 8714/6908/6197 6196/6907/6211\nf 8716/6910/5423 8718/6911/5423 8717/6912/5423\nf 8717/6912/5423 8719/6913/5423 8716/6910/5423\nf 8700/6826/6196 8709/6888/6196 8720/6914/6196\nf 8720/6914/6196 8721/6915/6196 8700/6826/6196\nf 6186/6830/5422 6201/6916/6220 8722/6917/5422\nf 6187/6831/5422 6186/6830/5422 8722/6917/5422\nf 6187/6831/5422 8722/6917/5422 8723/6918/5422\nf 6186/6830/5422 6185/6855/5422 6202/6919/6221\nf 6202/6919/6221 6201/6916/6220 6186/6830/5422\nf 6185/6855/5422 6225/6863/6227 6236/6920/6222\nf 6236/6920/6222 6202/6919/6221 6185/6855/5422\nf 6184/6874/6195 6216/6873/6195 6237/6921/6223\nf 6237/6921/6223 6203/6922/6224 6184/6874/6195\nf 8724/6923/5423 8726/6924/5423 8725/6925/5423\nf 8725/6925/5423 8727/6926/5423 8724/6923/5423\nf 8726/6924/5423 8716/6910/5423 8719/6913/5423\nf 8719/6913/5423 8725/6925/5423 8726/6924/5423\nf 8728/6927/5422 8730/6928/5422 8729/6929/5422\nf 8729/6929/5422 8731/6930/5422 8728/6927/5422\nf 8730/6928/5422 8733/6931/5422 8732/6932/5422\nf 8732/6932/5422 8729/6929/5422 8730/6928/5422\nf 8733/6931/5422 8735/6933/6227 8734/6934/6228\nf 8734/6934/6228 8732/6932/5422 8733/6931/5422\nf 6215/6904/6195 6193/6903/6195 6240/6935/6224\nf 6240/6935/6224 6209/6936/6223 6215/6904/6195\nf 6226/6866/6225 6192/6858/5423 6211/6937/6229\nf 6211/6937/6229 6210/6938/6230 6226/6866/6225\nf 6192/6858/5423 6191/6839/5423 6212/6939/6231\nf 6212/6939/6231 6211/6937/6229 6192/6858/5423\nf 6191/6839/5423 6190/6838/5423 8736/6940/5423\nf 8736/6940/5423 8737/6941/5423 6212/6939/6231\nf 6191/6839/5423 8736/6940/5423 6212/6939/6231\nf 8710/6889/6196 8701/6827/6196 8738/6942/6196\nf 8738/6942/6196 8739/6943/6196 8710/6889/6196\nf 6174/6861/6205 8741/6944/6232 8740/6945/6232\nf 6175/6860/6204 8743/6946/6233 8742/6947/6233\nf 8744/6948/6276 8746/6949/6276 8745/6950/6276\nf 8747/6951/6277 8749/6952/6277 8748/6953/6277\nf 8750/6954/6278 8752/6955/6278 8751/6956/6278\nf 8753/6957/6279 8755/6958/6279 8754/6959/6279\nf 8756/6960/6240 8707/6886/6217 6233/6885/6216\nf 8757/6961/6241 8759/6962/6242 8758/6963/6243\nf 8760/6964/6244 8762/6965/6245 8761/6966/6246\nf 8763/6967/6247 6242/6893/6219 6243/6892/6218\nf 6214/6843/6199 8765/6968/6248 8764/6969/6248\nf 8764/6969/6248 6217/6844/6199 6214/6843/6199\nf 8766/6970/6249 6176/6865/6208 6177/6864/6208\nf 6177/6864/6208 8767/6971/6249 8766/6970/6249\nf 8768/6972/6250 8770/6973/6251 8769/6974/6252\nf 8769/6974/6252 8771/6975/6253 8768/6972/6250\nf 6222/6854/6202 8773/6976/6254 8772/6977/6255\nf 8772/6977/6255 6223/6862/6274 6222/6854/6202\nf 6223/6862/6274 8775/6978/6256 8774/6979/6256\nf 8774/6979/6256 6225/6863/6227 6223/6862/6274\nf 6176/6865/6208 8766/6970/6249 8776/6980/6249\nf 8776/6980/6249 6224/6872/6208 6176/6865/6208\nf 6226/6866/6225 8778/6981/6257 8777/6982/6257\nf 8777/6982/6257 6227/6867/6275 6226/6866/6225\nf 6227/6867/6275 8780/6983/6258 8779/6984/6259\nf 8779/6984/6259 6229/6859/6203 6227/6867/6275\nf 8781/6985/6260 8783/6986/6261 8782/6987/6262\nf 8782/6987/6262 8784/6988/6263 8781/6985/6260\nf 8767/6971/6249 6177/6864/6208 6194/6906/6208\nf 6194/6906/6208 8785/6989/6249 8767/6971/6249\nf 8786/6990/6264 6201/6916/6220 6202/6919/6221\nf 6202/6919/6221 8787/6991/6265 8786/6990/6264\nf 8788/6992/6266 8789/6993/6267 8758/6963/6243\nf 8758/6963/6243 8759/6962/6242 8788/6992/6266\nf 8790/6994/6268 6203/6922/6224 6237/6921/6223\nf 6237/6921/6223 8791/6995/6268 8790/6994/6268\nf 6225/6863/6227 8774/6979/6256 8792/6996/6256\nf 8792/6996/6256 6236/6920/6222 6225/6863/6227\nf 8793/6997/6257 8795/6998/6257 8794/6999/6257\nf 8794/6999/6257 8796/7000/6257 8793/6997/6257\nf 8797/7001/6268 6209/6936/6223 6240/6935/6224\nf 6240/6935/6224 8798/7002/6269 8797/7001/6268\nf 8762/6965/6245 8760/6964/6244 8799/7003/6270\nf 8799/7003/6270 8800/7004/6271 8762/6965/6245\nf 8801/7005/6272 6211/6937/6229 6212/6939/6231\nf 6212/6939/6231 8802/7006/6273 8801/7005/6272\nf 8735/6933/6227 8804/7007/6256 8803/7008/6256\nf 8803/7008/6256 8734/6934/6228 8735/6933/6227\nf 8778/6981/6257 6226/6866/6225 6210/6938/6230\nf 6210/6938/6230 8805/7009/6257 8778/6981/6257\nf 6418/7010/6280 6589/7011/6281 6244/7012/6282\nf 6244/7012/6282 6611/7013/6283 6418/7010/6280\nf 6586/7014/6284 6418/7010/6280 6611/7013/6283\nf 6611/7013/6283 6256/7015/6285 6586/7014/6284\nf 6418/7010/6280 6586/7014/6284 6245/7016/6286\nf 6245/7016/6286 6612/7017/6287 6418/7010/6280\nf 6587/7018/6288 6418/7010/6280 6612/7017/6287\nf 6612/7017/6287 6257/7019/6289 6587/7018/6288\nf 6418/7010/6280 6587/7018/6288 6246/7020/6290\nf 6246/7020/6290 6588/7021/6291 6418/7010/6280\nf 6589/7011/6281 6418/7010/6280 6588/7021/6291\nf 6588/7021/6291 6332/7022/6292 6589/7011/6281\nf 6419/7023/6293 6679/7024/6294 6293/7025/6295\nf 6293/7025/6295 6680/7026/6296 6419/7023/6293\nf 6741/7027/6297 6419/7023/6293 6680/7026/6296\nf 6680/7026/6296 6290/7028/6298 6741/7027/6297\nf 6419/7023/6293 6741/7027/6297 6335/7029/6299\nf 6335/7029/6299 6759/7030/6300 6419/7023/6293\nf 6677/7031/6301 6419/7023/6293 6759/7030/6300\nf 6759/7030/6300 6336/7032/6302 6677/7031/6301\nf 6419/7023/6293 6677/7031/6301 6291/7033/6303\nf 6291/7033/6303 6678/7034/6304 6419/7023/6293\nf 6679/7024/6294 6419/7023/6293 6678/7034/6304\nf 6678/7034/6304 6292/7035/6305 6679/7024/6294\nf 6420/7036/6306 6604/7037/6307 6339/7038/6308\nf 6339/7038/6308 6595/7039/6309 6420/7036/6306\nf 6603/7040/6310 6420/7036/6306 6595/7039/6309\nf 6595/7039/6309 6249/7041/6311 6603/7040/6310\nf 6420/7036/6306 6603/7040/6310 6251/7042/6312\nf 6251/7042/6312 6597/7043/6313 6420/7036/6306\nf 6604/7037/6307 6420/7036/6306 6597/7043/6313\nf 6597/7043/6313 6252/7044/6314 6604/7037/6307\nf 6421/7045/6315 6607/7046/6316 6263/7047/6317\nf 6263/7047/6317 6599/7048/6318 6421/7045/6315\nf 6606/7049/6319 6421/7045/6315 6599/7048/6318\nf 6599/7048/6318 6264/7050/6320 6606/7049/6319\nf 6421/7045/6315 6606/7049/6319 6344/7051/6321\nf 6344/7051/6321 6768/7052/6322 6421/7045/6315\nf 6607/7046/6316 6421/7045/6315 6768/7052/6322\nf 6768/7052/6322 6345/7053/6323 6607/7046/6316\nf 6422/7054/6324 6610/7055/6325 6262/7056/6326\nf 6262/7056/6326 6624/7057/6327 6422/7054/6324\nf 6609/7058/6328 6422/7054/6324 6624/7057/6327\nf 6624/7057/6327 6261/7059/6329 6609/7058/6328\nf 6422/7054/6324 6609/7058/6328 6254/7060/6330\nf 6254/7060/6330 6626/7061/6331 6422/7054/6324\nf 6610/7055/6325 6422/7054/6324 6626/7061/6331\nf 6626/7061/6331 6253/7062/6332 6610/7055/6325\nf 6423/7063/6333 6602/7064/6334 6350/7065/6335\nf 6350/7065/6335 6774/7066/6336 6423/7063/6333\nf 6590/7067/6337 6423/7063/6333 6774/7066/6336\nf 6774/7066/6336 6351/7068/6338 6590/7067/6337\nf 6423/7063/6333 6590/7067/6337 6247/7069/6339\nf 6247/7069/6339 6593/7070/6340 6423/7063/6333\nf 6602/7064/6334 6423/7063/6333 6593/7070/6340\nf 6593/7070/6340 6260/7071/6341 6602/7064/6334\nf 6424/7072/6342 6603/7040/6310 6249/7041/6311\nf 6249/7041/6311 6778/7073/6343 6424/7072/6342\nf 6602/7064/6334 6424/7072/6342 6778/7073/6343\nf 6778/7073/6343 6350/7065/6335 6602/7064/6334\nf 6424/7072/6342 6602/7064/6334 6260/7071/6341\nf 6260/7071/6341 6596/7074/6344 6424/7072/6342\nf 6603/7040/6310 6424/7072/6342 6596/7074/6344\nf 6596/7074/6344 6251/7042/6312 6603/7040/6310\nf 6425/7075/6345 6631/7076/6346 6269/7077/6347\nf 6269/7077/6347 6598/7078/6348 6425/7075/6345\nf 6629/7079/6349 8807/7080/6350 8806/7081/6351\nf 8806/7081/6351 6266/7082/6352 6629/7079/6349\nf 8807/7080/6350 6629/7079/6349 6267/7083/6353\nf 6267/7083/6353 6630/7084/6354 8807/7080/6350\nf 6631/7076/6346 6425/7075/6345 8808/7085/6355\nf 8808/7085/6355 6268/7086/6356 6631/7076/6346\nf 6426/7087/6357 6605/7088/6358 6255/7089/6359\nf 6255/7089/6359 6601/7090/6360 6426/7087/6357\nf 6591/7091/6361 6426/7087/6357 6601/7090/6360\nf 6601/7090/6360 6259/7092/6362 6591/7091/6361\nf 6426/7087/6357 6591/7091/6361 6360/7093/6363\nf 6360/7093/6363 6786/7094/6364 6426/7087/6357\nf 6605/7088/6358 6426/7087/6357 6786/7094/6364\nf 6786/7094/6364 6361/7095/6365 6605/7088/6358\nf 6427/7096/6366 6606/7049/6319 6264/7050/6320\nf 6264/7050/6320 6600/7097/6367 6427/7096/6366\nf 6605/7088/6358 6427/7096/6366 6600/7097/6367\nf 6600/7097/6367 6255/7089/6359 6605/7088/6358\nf 6427/7096/6366 6605/7088/6358 6361/7095/6365\nf 6361/7095/6365 6789/7098/6368 6427/7096/6366\nf 6606/7049/6319 6427/7096/6366 6789/7098/6368\nf 6789/7098/6368 6344/7051/6321 6606/7049/6319\nf 6428/7099/6369 6607/7046/6316 6345/7053/6323\nf 6345/7053/6323 6790/7100/6370 6428/7099/6369\nf 8809/7101/6371 6428/7099/6369 6790/7100/6370\nf 6790/7100/6370 8810/7102/6372 8809/7101/6371\nf 6428/7099/6369 8809/7101/6371 8811/7103/6373\nf 8811/7103/6373 6594/7104/6374 6428/7099/6369\nf 6607/7046/6316 6428/7099/6369 6594/7104/6374\nf 6594/7104/6374 6263/7047/6317 6607/7046/6316\nf 6429/7105/6375 6736/7106/6376 6318/7107/6377\nf 6318/7107/6377 6733/7108/6378 6429/7105/6375\nf 6734/7109/6379 6429/7105/6375 6733/7108/6378\nf 6733/7108/6378 6319/7110/6380 6734/7109/6379\nf 8812/7111/6381 8813/7112/6382 6320/7113/6383\nf 6320/7113/6383 6735/7114/6384 8812/7111/6381\nf 8814/7115/6385 8812/7111/6381 6735/7114/6384\nf 6735/7114/6384 6321/7116/6386 8814/7115/6385\nf 6430/7117/6387 6609/7058/6328 6261/7059/6329\nf 6261/7059/6329 6623/7118/6388 6430/7117/6387\nf 6608/7119/6389 6430/7117/6387 6623/7118/6388\nf 6623/7118/6388 6250/7120/6390 6608/7119/6389\nf 6430/7117/6387 6608/7119/6389 6265/7121/6391\nf 6265/7121/6391 6627/7122/6392 6430/7117/6387\nf 6609/7058/6328 6430/7117/6387 6627/7122/6392\nf 6627/7122/6392 6254/7060/6330 6609/7058/6328\nf 6431/7123/6393 6610/7055/6325 6253/7062/6332\nf 6253/7062/6332 6622/7124/6394 6431/7123/6393\nf 8815/7125/6395 6431/7123/6393 6622/7124/6394\nf 6622/7124/6394 8816/7126/6396 8815/7125/6395\nf 6431/7123/6393 8815/7125/6395 8817/7127/6397\nf 8817/7127/6397 6625/7128/6398 6431/7123/6393\nf 6610/7055/6325 6431/7123/6393 6625/7128/6398\nf 6625/7128/6398 6262/7056/6326 6610/7055/6325\nf 6432/7129/6399 6657/7130/6400 6283/7131/6401\nf 6283/7131/6401 6658/7132/6402 6432/7129/6399\nf 6621/7133/6403 8819/7134/6404 8818/7135/6405\nf 8818/7135/6405 6278/7136/6406 6621/7133/6403\nf 8820/7137/6407 8821/7138/6408 6281/7139/6409\nf 6281/7139/6409 6656/7140/6410 8820/7137/6407\nf 8822/7141/6411 8820/7137/6407 6656/7140/6410\nf 6656/7140/6410 6282/7142/6412 8822/7141/6411\nf 6433/7143/6413 8824/7144/6414 8823/7145/6415\nf 8823/7145/6415 8825/7146/6416 6433/7143/6413\nf 8826/7147/6417 6433/7143/6413 8825/7146/6416\nf 8825/7146/6416 8827/7148/6418 8826/7147/6417\nf 8828/7149/6419 6622/7124/6394 6253/7062/6332\nf 6253/7062/6332 6618/7150/6420 8828/7149/6419\nf 6594/7104/6374 8830/7151/6421 8829/7152/6422\nf 8829/7152/6422 6263/7047/6317 6594/7104/6374\nf 6434/7153/6423 8832/7154/6424 8831/7155/6425\nf 8831/7155/6425 6615/7156/6426 6434/7153/6423\nf 6623/7118/6388 8834/7157/6427 8833/7158/6428\nf 8833/7158/6428 6250/7120/6390 6623/7118/6388\nf 8834/7157/6427 6623/7118/6388 6261/7059/6329\nf 6261/7059/6329 6616/7159/6429 8834/7157/6427\nf 8835/7160/6430 8834/7157/6427 6616/7159/6429\nf 6616/7159/6429 8836/7161/6431 8835/7160/6430\nf 6435/7162/6432 8838/7163/6433 8837/7164/6434\nf 8837/7164/6434 8839/7165/6435 6435/7162/6432\nf 6624/7057/6327 8840/7166/6436 6616/7159/6429\nf 6616/7159/6429 6261/7059/6329 6624/7057/6327\nf 8840/7166/6436 6624/7057/6327 6262/7056/6326\nf 6262/7056/6326 6617/7167/6437 8840/7166/6436\nf 6597/7043/6313 8842/7168/6438 8841/7169/6439\nf 8841/7169/6439 6252/7044/6314 6597/7043/6313\nf 6436/7170/6440 6598/7078/6348 6269/7077/6347\nf 6269/7077/6347 6632/7171/6441 6436/7170/6440\nf 6633/7172/6442 8844/7173/6443 8843/7174/6444\nf 8843/7174/6444 6270/7175/6445 6633/7172/6442\nf 8844/7173/6443 6633/7172/6442 6271/7176/6446\nf 6271/7176/6446 6634/7177/6447 8844/7173/6443\nf 8806/7081/6351 8846/7178/6448 8845/7179/6449\nf 8845/7179/6449 6266/7082/6352 8806/7081/6351\nf 6437/7180/6450 6599/7048/6318 6263/7047/6317\nf 6263/7047/6317 8829/7152/6422 6437/7180/6450\nf 6626/7061/6331 8847/7181/6451 6618/7150/6420\nf 6618/7150/6420 6253/7062/6332 6626/7061/6331\nf 8847/7181/6451 6626/7061/6331 6254/7060/6330\nf 6254/7060/6330 6619/7182/6452 8847/7181/6451\nf 8848/7183/6453 8850/7184/6454 8849/7185/6455\nf 8849/7185/6455 8851/7186/6456 8848/7183/6453\nf 6438/7187/6457 8852/7188/6458 8851/7186/6456\nf 8851/7186/6456 8849/7185/6455 6438/7187/6457\nf 8853/7189/6459 6438/7187/6457 8849/7185/6455\nf 8849/7185/6455 8854/7190/6460 8853/7189/6459\nf 6438/7187/6457 8853/7189/6459 8855/7191/6461\nf 8855/7191/6461 6620/7192/6462 6438/7187/6457\nf 6600/7097/6367 8857/7193/6463 8856/7194/6464\nf 8856/7194/6464 6255/7089/6359 6600/7097/6367\nf 6439/7195/6465 6601/7090/6360 6255/7089/6359\nf 6255/7089/6359 8856/7194/6464 6439/7195/6465\nf 6628/7196/6466 8858/7197/6467 6620/7192/6462\nf 6620/7192/6462 8855/7191/6461 6628/7196/6466\nf 8859/7198/6468 8860/7199/6469 6248/7200/6470\nf 6248/7200/6470 6614/7201/6471 8859/7198/6468\nf 6601/7090/6360 6439/7195/6465 8861/7202/6472\nf 8861/7202/6472 6259/7092/6362 6601/7090/6360\nf 6440/7203/6473 6635/7204/6474 6244/7012/6282\nf 6244/7012/6282 6589/7011/6281 6440/7203/6473\nf 6636/7205/6475 6440/7203/6473 6589/7011/6281\nf 6589/7011/6281 6332/7022/6292 6636/7205/6475\nf 6440/7203/6473 6636/7205/6475 8862/7206/6476\nf 8862/7206/6476 8863/7207/6477 6440/7203/6473\nf 6635/7204/6474 6440/7203/6473 8863/7207/6477\nf 8863/7207/6477 8864/7208/6478 6635/7204/6474\nf 6441/7209/6479 8866/7210/6480 8865/7211/6481\nf 8865/7211/6481 6818/7212/6482 6441/7209/6479\nf 6637/7213/6483 6441/7209/6479 6818/7212/6482\nf 6818/7212/6482 8867/7214/6484 6637/7213/6483\nf 6441/7209/6479 6637/7213/6483 8868/7215/6485\nf 8868/7215/6485 8869/7216/6486 6441/7209/6479\nf 8866/7210/6480 6441/7209/6479 8869/7216/6486\nf 8869/7216/6486 8870/7217/6487 8866/7210/6480\nf 6442/7218/6488 8871/7219/6489 6339/7038/6308\nf 6339/7038/6308 6604/7037/6307 6442/7218/6488\nf 6638/7220/6490 6442/7218/6488 6604/7037/6307\nf 6604/7037/6307 6252/7044/6314 6638/7220/6490\nf 6442/7218/6488 6638/7220/6490 6269/7077/6347\nf 6269/7077/6347 6631/7076/6346 6442/7218/6488\nf 8871/7219/6489 6442/7218/6488 6631/7076/6346\nf 6631/7076/6346 6268/7086/6356 8871/7219/6489\nf 6443/7221/6491 6638/7220/6490 6252/7044/6314\nf 6252/7044/6314 8841/7169/6439 6443/7221/6491\nf 6639/7222/6492 8872/7223/6493 6617/7167/6437\nf 6617/7167/6437 6262/7056/6326 6639/7222/6492\nf 8872/7223/6493 6639/7222/6492 6270/7175/6445\nf 6270/7175/6445 8843/7174/6444 8872/7223/6493\nf 6638/7220/6490 6443/7221/6491 6632/7171/6441\nf 6632/7171/6441 6269/7077/6347 6638/7220/6490\nf 6444/7224/6494 6639/7222/6492 6262/7056/6326\nf 6262/7056/6326 6625/7128/6398 6444/7224/6494\nf 6640/7225/6495 6444/7224/6494 6625/7128/6398\nf 6625/7128/6398 8817/7127/6397 6640/7225/6495\nf 6444/7224/6494 6640/7225/6495 6271/7176/6446\nf 6271/7176/6446 6633/7172/6442 6444/7224/6494\nf 6639/7222/6492 6444/7224/6494 6633/7172/6442\nf 6633/7172/6442 6270/7175/6445 6639/7222/6492\nf 6445/7226/6496 8873/7227/6497 6256/7015/6285\nf 6256/7015/6285 6611/7013/6283 6445/7226/6496\nf 6635/7204/6474 6445/7226/6496 6611/7013/6283\nf 6611/7013/6283 6244/7012/6282 6635/7204/6474\nf 6445/7226/6496 6635/7204/6474 8864/7208/6478\nf 8864/7208/6478 8874/7228/6498 6445/7226/6496\nf 6640/7225/6495 8875/7229/6499 6634/7177/6447\nf 6634/7177/6447 6271/7176/6446 6640/7225/6495\nf 6446/7230/6500 6647/7231/6501 6258/7232/6502\nf 6258/7232/6502 6592/7233/6503 6446/7230/6500\nf 6648/7234/6504 6446/7230/6500 6592/7233/6503\nf 6592/7233/6503 8876/7235/6505 6648/7234/6504\nf 6446/7230/6500 6648/7234/6504 6273/7236/6506\nf 6273/7236/6506 6641/7237/6507 6446/7230/6500\nf 6647/7231/6501 6446/7230/6500 6641/7237/6507\nf 6641/7237/6507 6272/7238/6508 6647/7231/6501\nf 6447/7239/6509 8877/7240/6510 6248/7200/6470\nf 6248/7200/6470 8860/7199/6469 6447/7239/6509\nf 6649/7241/6511 8878/7242/6512 6628/7196/6466\nf 6628/7196/6466 8855/7191/6461 6649/7241/6511\nf 8879/7243/6513 8880/7244/6514 6274/7245/6515\nf 6274/7245/6515 6642/7246/6516 8879/7243/6513\nf 8881/7247/6517 8879/7243/6513 6642/7246/6516\nf 6642/7246/6516 8882/7248/6518 8881/7247/6517\nf 6448/7249/6519 8880/7244/6514 6265/7121/6391\nf 6265/7121/6391 6608/7119/6389 6448/7249/6519\nf 6650/7250/6520 8884/7251/6521 8883/7252/6522\nf 8883/7252/6522 8885/7253/6523 6650/7250/6520\nf 8886/7254/6524 8887/7255/6525 6275/7256/6526\nf 6275/7256/6526 6643/7257/6527 8886/7254/6524\nf 8880/7244/6514 6448/7249/6519 8888/7258/6528\nf 8888/7258/6528 6274/7245/6515 8880/7244/6514\nf 6449/7259/6529 8890/7260/6530 8889/7261/6531\nf 8889/7261/6531 6615/7156/6426 6449/7259/6529\nf 6651/7262/6532 6449/7259/6529 6615/7156/6426\nf 6615/7156/6426 8831/7155/6425 6651/7262/6532\nf 8891/7263/6533 8892/7264/6534 6276/7265/6535\nf 6276/7265/6535 6644/7266/6536 8891/7263/6533\nf 8887/7255/6525 8891/7263/6533 6644/7266/6536\nf 6644/7266/6536 6275/7256/6526 8887/7255/6525\nf 6450/7267/6537 8893/7268/6538 6260/7071/6341\nf 6260/7071/6341 6593/7070/6340 6450/7267/6537\nf 6652/7269/6539 6450/7267/6537 6593/7070/6340\nf 6593/7070/6340 6247/7069/6339 6652/7269/6539\nf 6450/7267/6537 6652/7269/6539 6277/7270/6540\nf 6277/7270/6540 6645/7271/6541 6450/7267/6537\nf 8894/7272/6542 8896/7273/6543 8895/7274/6544\nf 8895/7274/6544 8897/7275/6545 8894/7272/6542\nf 6451/7276/6546 8899/7277/6547 8898/7278/6548\nf 8898/7278/6548 6613/7279/6549 6451/7276/6546\nf 6647/7231/6501 6451/7276/6546 6613/7279/6549\nf 6613/7279/6549 6258/7232/6502 6647/7231/6501\nf 6451/7276/6546 6647/7231/6501 6272/7238/6508\nf 6272/7238/6508 6646/7280/6550 6451/7276/6546\nf 8899/7277/6547 6451/7276/6546 6646/7280/6550\nf 6646/7280/6550 8900/7281/6551 8899/7277/6547\nf 6452/7282/6552 6659/7283/6553 6272/7238/6508\nf 6272/7238/6508 6641/7237/6507 6452/7282/6552\nf 6660/7284/6554 8902/7285/6555 8901/7286/6556\nf 8901/7286/6556 8882/7248/6518 6660/7284/6554\nf 6452/7282/6552 8903/7287/6557 6285/7288/6558\nf 6285/7288/6558 6671/7289/6559 6452/7282/6552\nf 6659/7283/6553 6452/7282/6552 6671/7289/6559\nf 6671/7289/6559 6284/7290/6560 6659/7283/6553\nf 6453/7291/6561 6660/7284/6554 8882/7248/6518\nf 8882/7248/6518 6642/7246/6516 6453/7291/6561\nf 6661/7292/6562 6453/7291/6561 6642/7246/6516\nf 6642/7246/6516 6274/7245/6515 6661/7292/6562\nf 6453/7291/6561 6661/7292/6562 6286/7293/6563\nf 6286/7293/6563 6672/7294/6564 6453/7291/6561\nf 6660/7284/6554 6453/7291/6561 6672/7294/6564\nf 6672/7294/6564 8904/7295/6565 6660/7284/6554\nf 6454/7296/6566 6661/7292/6562 6274/7245/6515\nf 6274/7245/6515 8888/7258/6528 6454/7296/6566\nf 6662/7297/6567 8905/7298/6568 6643/7257/6527\nf 6643/7257/6527 6275/7256/6526 6662/7297/6567\nf 8905/7298/6568 6662/7297/6567 6287/7299/6569\nf 6287/7299/6569 6673/7300/6570 8905/7298/6568\nf 6661/7292/6562 6454/7296/6566 8906/7301/6571\nf 8906/7301/6571 6286/7293/6563 6661/7292/6562\nf 6455/7302/6572 6662/7297/6567 6275/7256/6526\nf 6275/7256/6526 6644/7266/6536 6455/7302/6572\nf 6663/7303/6573 6455/7302/6572 6644/7266/6536\nf 6644/7266/6536 6276/7265/6535 6663/7303/6573\nf 6455/7302/6572 6663/7303/6573 6288/7304/6574\nf 6288/7304/6574 6674/7305/6575 6455/7302/6572\nf 6662/7297/6567 6455/7302/6572 6674/7305/6575\nf 6674/7305/6575 6287/7299/6569 6662/7297/6567\nf 6456/7306/6576 8907/7307/6577 8897/7275/6545\nf 8897/7275/6545 8895/7274/6544 6456/7306/6576\nf 6664/7308/6578 6456/7306/6576 8895/7274/6544\nf 8895/7274/6544 8908/7309/6579 6664/7308/6578\nf 6456/7306/6576 6664/7308/6578 6289/7310/6580\nf 6289/7310/6580 6675/7311/6581 6456/7306/6576\nf 8907/7307/6577 6456/7306/6576 6675/7311/6581\nf 6675/7311/6581 8909/7312/6582 8907/7307/6577\nf 6457/7313/6583 8910/7314/6584 6277/7270/6540\nf 6277/7270/6540 8911/7315/6585 6457/7313/6583\nf 6659/7283/6553 8912/7316/6586 6646/7280/6550\nf 6646/7280/6550 6272/7238/6508 6659/7283/6553\nf 8912/7316/6586 6659/7283/6553 6284/7290/6560\nf 6284/7290/6560 6676/7317/6587 8912/7316/6586\nf 6664/7308/6578 8914/7318/6588 8913/7319/6589\nf 8913/7319/6589 6289/7310/6580 6664/7308/6578\nf 6458/7320/6590 6671/7289/6559 6285/7288/6558\nf 6285/7288/6558 6666/7321/6591 6458/7320/6590\nf 6653/7322/6592 6458/7320/6590 6666/7321/6591\nf 6666/7321/6591 6279/7323/6593 6653/7322/6592\nf 6458/7320/6590 6653/7322/6592 8915/7324/6594\nf 8915/7324/6594 6665/7325/6595 6458/7320/6590\nf 6671/7289/6559 6458/7320/6590 6665/7325/6595\nf 6665/7325/6595 6284/7290/6560 6671/7289/6559\nf 6459/7326/6596 6672/7294/6564 6286/7293/6563\nf 6286/7293/6563 6667/7327/6597 6459/7326/6596\nf 6654/7328/6598 6459/7326/6596 6667/7327/6597\nf 6667/7327/6597 6280/7329/6599 6654/7328/6598\nf 6459/7326/6596 6654/7328/6598 8916/7330/6600\nf 8916/7330/6600 8917/7331/6601 6459/7326/6596\nf 6672/7294/6564 6459/7326/6596 8917/7331/6601\nf 8917/7331/6601 8904/7295/6565 6672/7294/6564\nf 6460/7332/6602 6673/7300/6570 6287/7299/6569\nf 6287/7299/6569 6668/7333/6603 6460/7332/6602\nf 6655/7334/6604 6460/7332/6602 6668/7333/6603\nf 6668/7333/6603 8918/7335/6605 6655/7334/6604\nf 8919/7336/6606 8920/7337/6607 6280/7329/6599\nf 6280/7329/6599 6667/7327/6597 8919/7336/6606\nf 8906/7301/6571 8919/7336/6606 6667/7327/6597\nf 6667/7327/6597 6286/7293/6563 8906/7301/6571\nf 6461/7338/6608 6674/7305/6575 6288/7304/6574\nf 6288/7304/6574 6669/7339/6609 6461/7338/6608\nf 8921/7340/6610 6461/7338/6608 6669/7339/6609\nf 6669/7339/6609 8922/7341/6611 8921/7340/6610\nf 6461/7338/6608 8921/7340/6610 8918/7335/6605\nf 8918/7335/6605 6668/7333/6603 6461/7338/6608\nf 6674/7305/6575 6461/7338/6608 6668/7333/6603\nf 6668/7333/6603 6287/7299/6569 6674/7305/6575\nf 6462/7342/6612 6675/7311/6581 6289/7310/6580\nf 6289/7310/6580 6670/7343/6613 6462/7342/6612\nf 6657/7130/6400 6462/7342/6612 6670/7343/6613\nf 6670/7343/6613 6283/7131/6401 6657/7130/6400\nf 6462/7342/6612 6657/7130/6400 8923/7344/6614\nf 8923/7344/6614 8924/7345/6615 6462/7342/6612\nf 6675/7311/6581 6462/7342/6612 8924/7345/6615\nf 8924/7345/6615 8909/7312/6582 6675/7311/6581\nf 6463/7346/6616 6676/7317/6587 6284/7290/6560\nf 6284/7290/6560 6665/7325/6595 6463/7346/6616\nf 8925/7347/6617 6463/7346/6616 6665/7325/6595\nf 6665/7325/6595 8915/7324/6594 8925/7347/6617\nf 8926/7348/6618 6658/7132/6402 6283/7131/6401\nf 6283/7131/6401 6670/7343/6613 8926/7348/6618\nf 8913/7319/6589 8926/7348/6618 6670/7343/6613\nf 6670/7343/6613 6289/7310/6580 8913/7319/6589\nf 6464/7349/6619 6681/7350/6620 6247/7069/6339\nf 6247/7069/6339 6590/7067/6337 6464/7349/6619\nf 6747/7351/6621 6464/7349/6619 6590/7067/6337\nf 6590/7067/6337 6351/7068/6338 6747/7351/6621\nf 8927/7352/6622 8928/7353/6623 6326/7354/6624\nf 6326/7354/6624 6745/7355/6625 8927/7352/6622\nf 8929/7356/6626 8927/7352/6622 6745/7355/6625\nf 6745/7355/6625 6306/7357/6627 8929/7356/6626\nf 6465/7358/6628 6682/7359/6629 8930/7360/6630\nf 8930/7360/6630 6614/7201/6471 6465/7358/6628\nf 6683/7361/6631 8932/7362/6632 8931/7363/6633\nf 8931/7363/6633 8876/7235/6505 6683/7361/6631\nf 8932/7362/6632 6683/7361/6631 6308/7364/6634\nf 6308/7364/6634 6714/7365/6635 8932/7362/6632\nf 8933/7366/6636 8932/7362/6632 6714/7365/6635\nf 6714/7365/6635 6307/7367/6637 8933/7366/6636\nf 6466/7368/6638 6683/7361/6631 8876/7235/6505\nf 8876/7235/6505 6592/7233/6503 6466/7368/6638\nf 6684/7369/6639 6466/7368/6638 6592/7233/6503\nf 6592/7233/6503 6258/7232/6502 6684/7369/6639\nf 6466/7368/6638 6684/7369/6639 6309/7370/6640\nf 6309/7370/6640 6715/7371/6641 6466/7368/6638\nf 6683/7361/6631 6466/7368/6638 6715/7371/6641\nf 6715/7371/6641 6308/7364/6634 6683/7361/6631\nf 6467/7372/6642 6684/7369/6639 6258/7232/6502\nf 6258/7232/6502 6613/7279/6549 6467/7372/6642\nf 8929/7356/6626 6467/7372/6642 6613/7279/6549\nf 6613/7279/6549 8898/7278/6548 8929/7356/6626\nf 6467/7372/6642 8929/7356/6626 6306/7357/6627\nf 6306/7357/6627 6716/7373/6643 6467/7372/6642\nf 6684/7369/6639 6467/7372/6642 6716/7373/6643\nf 6716/7373/6643 6309/7370/6640 6684/7369/6639\nf 6468/7374/6644 6744/7375/6645 6303/7376/6646\nf 6303/7376/6646 6686/7377/6647 6468/7374/6644\nf 6721/7378/6648 6468/7374/6644 6686/7377/6647\nf 6686/7377/6647 6311/7379/6649 6721/7378/6648\nf 6468/7374/6644 6721/7378/6648 6327/7380/6650\nf 6327/7380/6650 6748/7381/6651 6468/7374/6644\nf 6744/7375/6645 6468/7374/6644 6748/7381/6651\nf 6748/7381/6651 6325/7382/6652 6744/7375/6645\nf 6469/7383/6653 6698/7384/6654 6304/7385/6655\nf 6304/7385/6655 6687/7386/6656 6469/7383/6653\nf 6722/7387/6657 6469/7383/6653 6687/7386/6656\nf 6687/7386/6656 6312/7388/6658 6722/7387/6657\nf 8934/7389/6659 8935/7390/6660 6311/7379/6649\nf 6311/7379/6649 6686/7377/6647 8934/7389/6659\nf 6698/7384/6654 6469/7383/6653 8936/7391/6661\nf 8936/7391/6661 8937/7392/6662 6698/7384/6654\nf 6470/7393/6663 6699/7394/6664 6305/7395/6665\nf 6305/7395/6665 6688/7396/6666 6470/7393/6663\nf 6723/7397/6667 6470/7393/6663 6688/7396/6666\nf 6688/7396/6666 6313/7398/6668 6723/7397/6667\nf 6470/7393/6663 6723/7397/6667 6312/7388/6658\nf 6312/7388/6658 6687/7386/6656 6470/7393/6663\nf 6699/7394/6664 6470/7393/6663 6687/7386/6656\nf 6687/7386/6656 6304/7385/6655 6699/7394/6664\nf 6471/7399/6669 6700/7400/6670 6302/7401/6671\nf 6302/7401/6671 6685/7402/6672 6471/7399/6669\nf 6724/7403/6673 6471/7399/6669 6685/7402/6672\nf 6685/7402/6672 6310/7404/6674 6724/7403/6673\nf 6471/7399/6669 6724/7403/6673 8938/7405/6675\nf 8938/7405/6675 8939/7406/6676 6471/7399/6669\nf 8940/7407/6677 8941/7408/6678 6688/7396/6666\nf 6688/7396/6666 6305/7395/6665 8940/7407/6677\nf 6472/7409/6679 6701/7410/6680 6290/7028/6298\nf 6290/7028/6298 6680/7026/6296 6472/7409/6679\nf 6702/7411/6681 6472/7409/6679 6680/7026/6296\nf 6680/7026/6296 6293/7025/6295 6702/7411/6681\nf 6472/7409/6679 6702/7411/6681 6299/7412/6682\nf 6299/7412/6682 6693/7413/6683 6472/7409/6679\nf 6701/7410/6680 6472/7409/6679 6693/7413/6683\nf 6693/7413/6683 6298/7414/6684 6701/7410/6680\nf 6473/7415/6685 6702/7411/6681 6293/7025/6295\nf 6293/7025/6295 6679/7024/6294 6473/7415/6685\nf 6703/7416/6686 6473/7415/6685 6679/7024/6294\nf 6679/7024/6294 6292/7035/6305 6703/7416/6686\nf 6473/7415/6685 6703/7416/6686 6300/7417/6687\nf 6300/7417/6687 6694/7418/6688 6473/7415/6685\nf 6702/7411/6681 6473/7415/6685 6694/7418/6688\nf 6694/7418/6688 6299/7412/6682 6702/7411/6681\nf 6474/7419/6689 6703/7416/6686 6292/7035/6305\nf 6292/7035/6305 6678/7034/6304 6474/7419/6689\nf 6704/7420/6690 6474/7419/6689 6678/7034/6304\nf 6678/7034/6304 6291/7033/6303 6704/7420/6690\nf 8942/7421/6691 8943/7422/6692 6301/7423/6693\nf 6301/7423/6693 6695/7424/6694 8942/7421/6691\nf 8944/7425/6695 8946/7426/6696 8945/7427/6697\nf 8945/7427/6697 8947/7428/6698 8944/7425/6695\nf 6475/7429/6699 6704/7420/6690 6291/7033/6303\nf 6291/7033/6303 6677/7031/6301 6475/7429/6699\nf 6885/7430/6700 6475/7429/6699 6677/7031/6301\nf 6677/7031/6301 6336/7032/6302 6885/7430/6700\nf 8948/7431/6701 8949/7432/6702 6323/7433/6703\nf 6323/7433/6703 6696/7434/6704 8948/7431/6701\nf 8950/7435/6705 8948/7431/6701 6696/7434/6704\nf 6696/7434/6704 8951/7436/6706 8950/7435/6705\nf 6476/7437/6707 6705/7438/6708 6294/7439/6709\nf 6294/7439/6709 6689/7440/6710 6476/7437/6707\nf 6888/7441/6711 6476/7437/6707 6689/7440/6710\nf 6689/7440/6710 6407/7442/6712 6888/7441/6711\nf 6476/7437/6707 6888/7441/6711 6324/7443/6713\nf 6324/7443/6713 6697/7444/6714 6476/7437/6707\nf 6705/7438/6708 6476/7437/6707 6697/7444/6714\nf 6697/7444/6714 8952/7445/6715 6705/7438/6708\nf 6477/7446/6716 6706/7447/6717 6295/7448/6718\nf 6295/7448/6718 6690/7449/6719 6477/7446/6716\nf 6707/7450/6720 6477/7446/6716 6690/7449/6719\nf 6690/7449/6719 6296/7451/6721 6707/7450/6720\nf 6477/7446/6716 6707/7450/6720 8953/7452/6722\nf 8953/7452/6722 8954/7453/6723 6477/7446/6716\nf 6706/7447/6717 6477/7446/6716 8954/7453/6723\nf 8954/7453/6723 8955/7454/6724 6706/7447/6717\nf 6478/7455/6725 6707/7450/6720 6296/7451/6721\nf 6296/7451/6721 6691/7456/6726 6478/7455/6725\nf 6708/7457/6727 6478/7455/6725 6691/7456/6726\nf 6691/7456/6726 6297/7458/6728 6708/7457/6727\nf 6478/7455/6725 6708/7457/6727 8956/7459/6729\nf 8956/7459/6729 8957/7460/6730 6478/7455/6725\nf 6707/7450/6720 6478/7455/6725 8957/7460/6730\nf 8957/7460/6730 8953/7452/6722 6707/7450/6720\nf 6479/7461/6731 6708/7457/6727 6297/7458/6728\nf 6297/7458/6728 6692/7462/6732 6479/7461/6731\nf 6705/7438/6708 6479/7461/6731 6692/7462/6732\nf 6692/7462/6732 6294/7439/6709 6705/7438/6708\nf 6479/7461/6731 6705/7438/6708 8952/7445/6715\nf 8952/7445/6715 8958/7463/6733 6479/7461/6731\nf 6708/7457/6727 6479/7461/6731 8958/7463/6733\nf 8958/7463/6733 8956/7459/6729 6708/7457/6727\nf 6480/7464/6734 6713/7465/6735 8959/7466/6736\nf 8959/7466/6736 6710/7467/6737 6480/7464/6734\nf 6742/7468/6738 8961/7469/6739 8960/7470/6740\nf 8960/7470/6740 8962/7471/6741 6742/7468/6738\nf 8961/7469/6739 6742/7468/6738 6411/7472/6742\nf 6411/7472/6742 6899/7473/6743 8961/7469/6739\nf 6713/7465/6735 6480/7464/6734 8963/7474/6744\nf 8963/7474/6744 6412/7475/6745 6713/7465/6735\nf 6481/7476/6746 8965/7477/6747 8964/7478/6748\nf 8964/7478/6748 6711/7479/6749 6481/7476/6746\nf 8966/7480/6750 6481/7476/6746 6711/7479/6749\nf 6711/7479/6749 8967/7481/6751 8966/7480/6750\nf 6481/7476/6746 8966/7480/6750 8968/7482/6752\nf 8968/7482/6752 6710/7467/6737 6481/7476/6746\nf 6714/7365/6635 8970/7483/6753 8969/7484/6754\nf 8969/7484/6754 6307/7367/6637 6714/7365/6635\nf 6482/7485/6755 8972/7486/6756 8971/7487/6757\nf 8971/7487/6757 6712/7488/6758 6482/7485/6755\nf 8973/7489/6759 8975/7490/6760 8974/7491/6761\nf 8974/7491/6761 8976/7492/6762 8973/7489/6759\nf 8975/7490/6760 8973/7489/6759 8977/7493/6763\nf 8977/7493/6763 8978/7494/6764 8975/7490/6760\nf 8979/7495/6765 8980/7496/6766 6711/7479/6749\nf 6711/7479/6749 8964/7478/6748 8979/7495/6765\nf 6483/7497/6767 8982/7498/6768 8981/7499/6769\nf 8981/7499/6769 6709/7500/6770 6483/7497/6767\nf 6692/7462/6732 8984/7501/6771 8983/7502/6772\nf 8983/7502/6772 6294/7439/6709 6692/7462/6732\nf 8985/7503/6773 8986/7504/6774 8976/7492/6762\nf 8976/7492/6762 8974/7491/6761 8985/7503/6773\nf 8982/7498/6768 6483/7497/6767 6712/7488/6758\nf 6712/7488/6758 8971/7487/6757 8982/7498/6768\nf 6484/7505/6775 6721/7378/6648 6311/7379/6649\nf 6311/7379/6649 6718/7506/6776 6484/7505/6775\nf 6696/7434/6704 6484/7505/6775 6718/7506/6776\nf 6718/7506/6776 8951/7436/6706 6696/7434/6704\nf 6484/7505/6775 6696/7434/6704 6323/7433/6703\nf 6323/7433/6703 6751/7507/6777 6484/7505/6775\nf 6721/7378/6648 6484/7505/6775 6751/7507/6777\nf 6751/7507/6777 6327/7380/6650 6721/7378/6648\nf 6485/7508/6778 6722/7387/6657 6312/7388/6658\nf 6312/7388/6658 6719/7509/6779 6485/7508/6778\nf 6695/7424/6694 6485/7508/6778 6719/7509/6779\nf 6719/7509/6779 8987/7510/6780 6695/7424/6694\nf 6485/7508/6778 6695/7424/6694 6301/7423/6693\nf 6301/7423/6693 8988/7511/6781 6485/7508/6778\nf 8935/7390/6660 8989/7512/6782 6718/7506/6776\nf 6718/7506/6776 6311/7379/6649 8935/7390/6660\nf 6486/7513/6783 6723/7397/6667 6313/7398/6668\nf 6313/7398/6668 6720/7514/6784 6486/7513/6783\nf 8990/7515/6785 8992/7516/6786 8991/7517/6787\nf 8991/7517/6787 8993/7518/6788 8990/7515/6785\nf 6486/7513/6783 8994/7519/6789 8987/7510/6780\nf 8987/7510/6780 6719/7509/6779 6486/7513/6783\nf 6723/7397/6667 6486/7513/6783 6719/7509/6779\nf 6719/7509/6779 6312/7388/6658 6723/7397/6667\nf 6487/7520/6790 6724/7403/6673 6310/7404/6674\nf 6310/7404/6674 6717/7521/6791 6487/7520/6790\nf 8995/7522/6792 6487/7520/6790 6717/7521/6791\nf 6717/7521/6791 8996/7523/6793 8995/7522/6792\nf 6487/7520/6790 8995/7522/6792 8993/7518/6788\nf 8993/7518/6788 8991/7517/6787 6487/7520/6790\nf 6724/7403/6673 6487/7520/6790 8991/7517/6787\nf 8991/7517/6787 8938/7405/6675 6724/7403/6673\nf 6488/7524/6794 6729/7525/6795 6281/7139/6409\nf 6281/7139/6409 8821/7138/6408 6488/7524/6794\nf 6730/7526/6796 8998/7527/6797 8997/7528/6798\nf 8997/7528/6798 8999/7529/6799 6730/7526/6796\nf 8998/7527/6797 6730/7526/6796 6315/7530/6800\nf 6315/7530/6800 6725/7531/6801 8998/7527/6797\nf 6729/7525/6795 6488/7524/6794 9000/7532/6802\nf 9000/7532/6802 6314/7533/6803 6729/7525/6795\nf 6489/7534/6804 9001/7535/6805 8915/7324/6594\nf 8915/7324/6594 6653/7322/6592 6489/7534/6804\nf 6731/7536/6806 6489/7534/6804 6653/7322/6592\nf 6653/7322/6592 6279/7323/6593 6731/7536/6806\nf 6489/7534/6804 6731/7536/6806 6316/7537/6807\nf 6316/7537/6807 6726/7538/6808 6489/7534/6804\nf 6730/7526/6796 9003/7539/6809 9002/7540/6810\nf 9002/7540/6810 6315/7530/6800 6730/7526/6796\nf 6490/7541/6811 9004/7542/6812 8916/7330/6600\nf 8916/7330/6600 6654/7328/6598 6490/7541/6811\nf 6732/7543/6813 6490/7541/6811 6654/7328/6598\nf 6654/7328/6598 6280/7329/6599 6732/7543/6813\nf 6490/7541/6811 6732/7543/6813 6317/7544/6814\nf 6317/7544/6814 6727/7545/6815 6490/7541/6811\nf 9004/7542/6812 6490/7541/6811 6727/7545/6815\nf 6727/7545/6815 9005/7546/6816 9004/7542/6812\nf 6491/7547/6817 6732/7543/6813 6280/7329/6599\nf 6280/7329/6599 8920/7337/6607 6491/7547/6817\nf 9006/7548/6818 9007/7549/6819 6655/7334/6604\nf 6655/7334/6604 8918/7335/6605 9006/7548/6818\nf 9007/7549/6819 9006/7548/6818 9008/7550/6820\nf 9008/7550/6820 6728/7551/6821 9007/7549/6819\nf 6732/7543/6813 6491/7547/6817 9009/7552/6822\nf 9009/7552/6822 6317/7544/6814 6732/7543/6813\nf 6492/7553/6823 6737/7554/6824 9010/7555/6825\nf 9010/7555/6825 9011/7556/6826 6492/7553/6823\nf 6738/7557/6827 6492/7553/6823 9011/7556/6826\nf 9011/7556/6826 9012/7558/6828 6738/7557/6827\nf 6492/7553/6823 6738/7557/6827 9013/7559/6829\nf 9013/7559/6829 9014/7560/6830 6492/7553/6823\nf 6737/7554/6824 6492/7553/6823 9014/7560/6830\nf 9014/7560/6830 9015/7561/6831 6737/7554/6824\nf 6493/7562/6832 9017/7563/6833 9016/7564/6834\nf 9016/7564/6834 9018/7565/6835 6493/7562/6832\nf 6739/7566/6836 9019/7567/6837 6726/7538/6808\nf 6726/7538/6808 6316/7537/6807 6739/7566/6836\nf 9019/7567/6837 6739/7566/6836 9020/7568/6838\nf 9020/7568/6838 9021/7569/6839 9019/7567/6837\nf 9017/7563/6833 6493/7562/6832 9022/7570/6840\nf 9022/7570/6840 9023/7571/6841 9017/7563/6833\nf 6494/7572/6842 9024/7573/6843 9005/7546/6816\nf 9005/7546/6816 6727/7545/6815 6494/7572/6842\nf 6740/7574/6844 6494/7572/6842 6727/7545/6815\nf 6727/7545/6815 6317/7544/6814 6740/7574/6844\nf 6494/7572/6842 6740/7574/6844 9025/7575/6845\nf 9025/7575/6845 9026/7576/6846 6494/7572/6842\nf 9024/7573/6843 6494/7572/6842 9026/7576/6846\nf 9026/7576/6846 9027/7577/6847 9024/7573/6843\nf 6495/7578/6848 6740/7574/6844 6317/7544/6814\nf 6317/7544/6814 9009/7552/6822 6495/7578/6848\nf 9028/7579/6849 9029/7580/6850 6728/7551/6821\nf 6728/7551/6821 9008/7550/6820 9028/7579/6849\nf 9029/7580/6850 9028/7579/6849 9030/7581/6851\nf 9030/7581/6851 9031/7582/6852 9029/7580/6850\nf 6740/7574/6844 6495/7578/6848 9032/7583/6853\nf 9032/7583/6853 9025/7575/6845 6740/7574/6844\nf 6496/7584/6854 6920/7585/6855 6360/7093/6363\nf 6360/7093/6363 6591/7091/6361 6496/7584/6854\nf 9033/7586/6856 6496/7584/6854 6591/7091/6361\nf 6591/7091/6361 6259/7092/6362 9033/7586/6856\nf 9034/7587/6857 8933/7366/6636 6307/7367/6637\nf 6307/7367/6637 9035/7588/6858 9034/7587/6857\nf 9036/7589/6859 9034/7587/6857 9035/7588/6858\nf 9035/7588/6858 9037/7590/6860 9036/7589/6859\nf 6497/7591/6861 6922/7592/6862 6417/7593/6863\nf 6417/7593/6863 6746/7594/6864 6497/7591/6861\nf 6685/7402/6672 9039/7595/6865 9038/7596/6866\nf 9038/7596/6866 6310/7404/6674 6685/7402/6672\nf 9039/7595/6865 6685/7402/6672 6302/7401/6671\nf 6302/7401/6671 9040/7597/6867 9039/7595/6865\nf 6922/7592/6862 6497/7591/6861 9041/7598/6868\nf 9041/7598/6868 9042/7599/6869 6922/7592/6862\nf 6498/7600/6870 6924/7601/6871 6335/7029/6299\nf 6335/7029/6299 6741/7027/6297 6498/7600/6870\nf 6701/7410/6680 6498/7600/6870 6741/7027/6297\nf 6741/7027/6297 6290/7028/6298 6701/7410/6680\nf 9043/7602/6872 9045/7603/6873 9044/7604/6874\nf 9044/7604/6874 6743/7605/6875 9043/7602/6872\nf 9046/7606/6876 9043/7602/6872 6743/7605/6875\nf 6743/7605/6875 6322/7607/6877 9046/7606/6876\nf 6499/7608/6878 6749/7609/6879 9047/7610/6880\nf 9047/7610/6880 9048/7611/6881 6499/7608/6878\nf 6706/7447/6717 6499/7608/6878 9048/7611/6881\nf 9048/7611/6881 6295/7448/6718 6706/7447/6717\nf 6499/7608/6878 6706/7447/6717 8955/7454/6724\nf 8955/7454/6724 9049/7612/6882 6499/7608/6878\nf 6749/7609/6879 6499/7608/6878 9049/7612/6882\nf 9049/7612/6882 9050/7613/6883 6749/7609/6879\nf 6500/7614/6884 6925/7615/6885 6407/7442/6712\nf 6407/7442/6712 6689/7440/6710 6500/7614/6884\nf 8983/7502/6772 6500/7614/6884 6689/7440/6710\nf 6689/7440/6710 6294/7439/6709 8983/7502/6772\nf 9051/7616/6886 9053/7617/6887 9052/7618/6888\nf 9052/7618/6888 9054/7619/6889 9051/7616/6886\nf 9055/7620/6890 9051/7616/6886 9054/7619/6889\nf 9054/7619/6889 9056/7621/6891 9055/7620/6890\nf 6501/7622/6892 6750/7623/6893 6322/7607/6877\nf 6322/7607/6877 6743/7605/6875 6501/7622/6892\nf 6717/7521/6791 9058/7624/6894 9057/7625/6895\nf 9057/7625/6895 8996/7523/6793 6717/7521/6791\nf 9058/7624/6894 6717/7521/6791 6310/7404/6674\nf 6310/7404/6674 9038/7596/6866 9058/7624/6894\nf 6750/7623/6893 6501/7622/6892 6746/7594/6864\nf 6746/7594/6864 6417/7593/6863 6750/7623/6893\nf 6502/7626/6896 6752/7627/6897 6328/7628/6898\nf 6328/7628/6898 6756/7629/6899 6502/7626/6896\nf 6588/7021/6291 6502/7626/6896 6756/7629/6899\nf 6756/7629/6899 6332/7022/6292 6588/7021/6291\nf 6502/7626/6896 6588/7021/6291 6246/7020/6290\nf 6246/7020/6290 6755/7630/6900 6502/7626/6896\nf 6754/7631/6901 6502/7626/6896 6755/7630/6900\nf 6755/7630/6900 6331/7632/6902 6754/7631/6901\nf 6502/7626/6896 6754/7631/6901 6330/7633/6903\nf 6330/7633/6903 6753/7634/6904 6502/7626/6896\nf 6752/7627/6897 6502/7626/6896 6753/7634/6904\nf 6753/7634/6904 6329/7635/6905 6752/7627/6897\nf 6503/7636/6906 6757/7637/6907 6333/7638/6908\nf 6333/7638/6908 6762/7639/6909 6503/7636/6906\nf 6761/7640/6910 6503/7636/6906 6762/7639/6909\nf 6762/7639/6909 6338/7641/6911 6761/7640/6910\nf 6503/7636/6906 6761/7640/6910 6337/7642/6912\nf 6337/7642/6912 6760/7643/6913 6503/7636/6906\nf 6759/7030/6300 6503/7636/6906 6760/7643/6913\nf 6760/7643/6913 6336/7032/6302 6759/7030/6300\nf 6503/7636/6906 6759/7030/6300 6335/7029/6299\nf 6335/7029/6299 6758/7644/6914 6503/7636/6906\nf 6757/7637/6907 6503/7636/6906 6758/7644/6914\nf 6758/7644/6914 6334/7645/6915 6757/7637/6907\nf 6504/7646/6916 6595/7039/6309 6339/7038/6308\nf 6339/7038/6308 6765/7647/6917 6504/7646/6916\nf 6764/7648/6918 6504/7646/6916 6765/7647/6917\nf 6765/7647/6917 6341/7649/6919 6764/7648/6918\nf 6504/7646/6916 6764/7648/6918 6340/7650/6920\nf 6340/7650/6920 6763/7651/6921 6504/7646/6916\nf 6595/7039/6309 6504/7646/6916 6763/7651/6921\nf 6763/7651/6921 6249/7041/6311 6595/7039/6309\nf 6505/7652/6922 6766/7653/6923 6342/7654/6924\nf 6342/7654/6924 6769/7655/6925 6505/7652/6922\nf 6768/7052/6322 6505/7652/6922 6769/7655/6925\nf 6769/7655/6925 6345/7053/6323 6768/7052/6322\nf 6505/7652/6922 6768/7052/6322 6344/7051/6321\nf 6344/7051/6321 6767/7656/6926 6505/7652/6922\nf 6766/7653/6923 6505/7652/6922 6767/7656/6926\nf 6767/7656/6926 6343/7657/6927 6766/7653/6923\nf 6506/7658/6928 6770/7659/6929 6346/7660/6930\nf 6346/7660/6930 6773/7661/6931 6506/7658/6928\nf 6772/7662/6932 6506/7658/6928 6773/7661/6931\nf 6773/7661/6931 6349/7663/6933 6772/7662/6932\nf 6506/7658/6928 6772/7662/6932 6348/7664/6934\nf 6348/7664/6934 6771/7665/6935 6506/7658/6928\nf 6770/7659/6929 6506/7658/6928 6771/7665/6935\nf 6771/7665/6935 6347/7666/6936 6770/7659/6929\nf 6507/7667/6937 6774/7066/6336 6350/7065/6335\nf 6350/7065/6335 6777/7668/6938 6507/7667/6937\nf 6776/7669/6939 6507/7667/6937 6777/7668/6938\nf 6777/7668/6938 6353/7670/6940 6776/7669/6939\nf 6507/7667/6937 6776/7669/6939 6352/7671/6941\nf 6352/7671/6941 6775/7672/6942 6507/7667/6937\nf 6774/7066/6336 6507/7667/6937 6775/7672/6942\nf 6775/7672/6942 6351/7068/6338 6774/7066/6336\nf 6508/7673/6943 6778/7073/6343 6249/7041/6311\nf 6249/7041/6311 6763/7651/6921 6508/7673/6943\nf 6779/7674/6944 6508/7673/6943 6763/7651/6921\nf 6763/7651/6921 6340/7650/6920 6779/7674/6944\nf 6508/7673/6943 6779/7674/6944 6353/7670/6940\nf 6353/7670/6940 6777/7668/6938 6508/7673/6943\nf 6778/7073/6343 6508/7673/6943 6777/7668/6938\nf 6777/7668/6938 6350/7065/6335 6778/7073/6343\nf 6509/7675/6945 6780/7676/6946 6354/7677/6947\nf 6354/7677/6947 6783/7678/6948 6509/7675/6945\nf 6782/7679/6949 6509/7675/6945 6783/7678/6948\nf 6783/7678/6948 6357/7680/6950 6782/7679/6949\nf 9059/7681/6951 9060/7682/6952 6356/7683/6953\nf 6356/7683/6953 6781/7684/6954 9059/7681/6951\nf 9061/7685/6955 9059/7681/6951 6781/7684/6954\nf 6781/7684/6954 6355/7686/6956 9061/7685/6955\nf 6510/7687/6957 6784/7688/6958 6358/7689/6959\nf 6358/7689/6959 6787/7690/6960 6510/7687/6957\nf 6786/7094/6364 6510/7687/6957 6787/7690/6960\nf 6787/7690/6960 6361/7095/6365 6786/7094/6364\nf 6510/7687/6957 6786/7094/6364 6360/7093/6363\nf 6360/7093/6363 6785/7691/6961 6510/7687/6957\nf 6784/7688/6958 6510/7687/6957 6785/7691/6961\nf 6785/7691/6961 6359/7692/6962 6784/7688/6958\nf 6511/7693/6963 6788/7694/6964 6343/7657/6927\nf 6343/7657/6927 6767/7656/6926 6511/7693/6963\nf 6789/7098/6368 6511/7693/6963 6767/7656/6926\nf 6767/7656/6926 6344/7051/6321 6789/7098/6368\nf 6511/7693/6963 6789/7098/6368 6361/7095/6365\nf 6361/7095/6365 6787/7690/6960 6511/7693/6963\nf 6788/7694/6964 6511/7693/6963 6787/7690/6960\nf 6787/7690/6960 6358/7689/6959 6788/7694/6964\nf 6512/7695/6965 6790/7100/6370 6345/7053/6323\nf 6345/7053/6323 6769/7655/6925 6512/7695/6965\nf 6791/7696/6966 6512/7695/6965 6769/7655/6925\nf 6769/7655/6925 6342/7654/6924 6791/7696/6966\nf 6512/7695/6965 6791/7696/6966 9062/7697/6967\nf 9062/7697/6967 9063/7698/6968 6512/7695/6965\nf 6790/7100/6370 6512/7695/6965 9063/7698/6968\nf 9063/7698/6968 8810/7102/6372 6790/7100/6370\nf 6513/7699/6969 6792/7700/6970 6362/7701/6971\nf 6362/7701/6971 6795/7702/6972 6513/7699/6969\nf 6794/7703/6973 9065/7704/6974 9064/7705/6975\nf 9064/7705/6975 6365/7706/6976 6794/7703/6973\nf 9065/7704/6974 6794/7703/6973 6364/7707/6977\nf 6364/7707/6977 6793/7708/6978 9065/7704/6974\nf 6792/7700/6970 6513/7699/6969 9066/7709/6979\nf 9066/7709/6979 6363/7710/6980 6792/7700/6970\nf 6514/7711/6981 6796/7712/6982 6347/7666/6936\nf 6347/7666/6936 6771/7665/6935 6514/7711/6981\nf 6798/7713/6983 6514/7711/6981 6771/7665/6935\nf 6771/7665/6935 6348/7664/6934 6798/7713/6983\nf 6514/7711/6981 6798/7713/6983 6367/7714/6984\nf 6367/7714/6984 6797/7715/6985 6514/7711/6981\nf 6796/7712/6982 6514/7711/6981 6797/7715/6985\nf 6797/7715/6985 6366/7716/6986 6796/7712/6982\nf 6515/7717/6987 6799/7718/6988 6349/7663/6933\nf 6349/7663/6933 6773/7661/6931 6515/7717/6987\nf 6800/7719/6989 6515/7717/6987 6773/7661/6931\nf 6773/7661/6931 6346/7660/6930 6800/7719/6989\nf 6515/7717/6987 6800/7719/6989 9067/7720/6990\nf 9067/7720/6990 9068/7721/6991 6515/7717/6987\nf 6799/7718/6988 6515/7717/6987 9068/7721/6991\nf 9068/7721/6991 9069/7722/6992 6799/7718/6988\nf 6516/7723/6993 6801/7724/6994 6368/7725/6995\nf 6368/7725/6995 6804/7726/6996 6516/7723/6993\nf 6803/7727/6997 9071/7728/6998 9070/7729/6999\nf 9070/7729/6999 6371/7730/7000 6803/7727/6997\nf 9071/7728/6998 6803/7727/6997 6370/7731/7001\nf 6370/7731/7001 6802/7732/7002 9071/7728/6998\nf 9072/7733/7003 9074/7734/7004 9073/7735/7005\nf 9073/7735/7005 6369/7736/7006 9072/7733/7003\nf 6517/7737/7007 9076/7738/7008 9075/7739/7009\nf 9075/7739/7009 9077/7740/7010 6517/7737/7007\nf 6805/7741/7011 9078/7742/7012 6791/7696/6966\nf 6791/7696/6966 6342/7654/6924 6805/7741/7011\nf 9079/7743/7013 9080/7744/7014 6349/7663/6933\nf 6349/7663/6933 6799/7718/6988 9079/7743/7013\nf 9076/7738/7008 6517/7737/7007 9081/7745/7015\nf 9081/7745/7015 9082/7746/7016 9076/7738/7008\nf 6518/7747/7017 6806/7748/7018 9083/7749/7019\nf 9083/7749/7019 9084/7750/7020 6518/7747/7017\nf 6807/7751/7021 9086/7752/7022 9085/7753/7023\nf 9085/7753/7023 9087/7754/7024 6807/7751/7021\nf 9086/7752/7022 6807/7751/7021 6347/7666/6936\nf 6347/7666/6936 6796/7712/6982 9086/7752/7022\nf 9088/7755/7025 9086/7752/7022 6796/7712/6982\nf 6796/7712/6982 6366/7716/6986 9088/7755/7025\nf 6519/7756/7026 9089/7757/7027 6340/7650/6920\nf 6340/7650/6920 6764/7648/6918 6519/7756/7026\nf 6808/7758/7028 6519/7756/7026 6764/7648/6918\nf 6764/7648/6918 6341/7649/6919 6808/7758/7028\nf 9090/7759/7029 9091/7760/7030 6346/7660/6930\nf 6346/7660/6930 6770/7659/6929 9090/7759/7029\nf 6807/7751/7021 9090/7759/7029 6770/7659/6929\nf 6770/7659/6929 6347/7666/6936 6807/7751/7021\nf 6520/7761/7031 6809/7762/7032 6354/7677/6947\nf 6354/7677/6947 6780/7676/6946 6520/7761/7031\nf 6811/7763/7033 9093/7764/7034 9092/7765/7035\nf 9092/7765/7035 9094/7766/7036 6811/7763/7033\nf 9095/7767/7037 9096/7768/7038 6373/7769/7039\nf 6373/7769/7039 6810/7770/7040 9095/7767/7037\nf 9097/7771/7041 9095/7767/7037 6810/7770/7040\nf 6810/7770/7040 6372/7772/7042 9097/7771/7041\nf 6521/7773/7043 6805/7741/7011 6342/7654/6924\nf 6342/7654/6924 6766/7653/6923 6521/7773/7043\nf 6812/7774/7044 9099/7775/7045 9098/7776/7046\nf 9098/7776/7046 9100/7777/7047 6812/7774/7044\nf 9101/7778/7048 9102/7779/7049 6348/7664/6934\nf 6348/7664/6934 6772/7662/6932 9101/7778/7048\nf 9080/7744/7014 9101/7778/7048 6772/7662/6932\nf 6772/7662/6932 6349/7663/6933 9080/7744/7014\nf 6522/7780/7050 6812/7774/7044 9100/7777/7047\nf 9100/7777/7047 9103/7781/7051 6522/7780/7050\nf 6813/7782/7052 9104/7783/7053 6788/7694/6964\nf 6788/7694/6964 6358/7689/6959 6813/7782/7052\nf 6522/7780/7050 9106/7784/7054 9105/7785/7055\nf 9105/7785/7055 9107/7786/7056 6522/7780/7050\nf 6812/7774/7044 6522/7780/7050 9107/7786/7056\nf 9107/7786/7056 9108/7787/7057 6812/7774/7044\nf 6523/7788/7058 6813/7782/7052 6358/7689/6959\nf 6358/7689/6959 6784/7688/6958 6523/7788/7058\nf 6815/7789/7059 6523/7788/7058 6784/7688/6958\nf 6784/7688/6958 6359/7692/6962 6815/7789/7059\nf 9109/7790/7060 9110/7791/7061 6374/7792/7062\nf 6374/7792/7062 6814/7793/7063 9109/7790/7060\nf 9106/7784/7054 9112/7794/7064 9111/7795/7065\nf 9111/7795/7065 9105/7785/7055 9106/7784/7054\nf 6524/7796/7066 6756/7629/6899 6328/7628/6898\nf 6328/7628/6898 6817/7797/7067 6524/7796/7066\nf 9113/7798/7068 6524/7796/7066 6817/7797/7067\nf 6817/7797/7067 9114/7799/7069 9113/7798/7068\nf 6524/7796/7066 9113/7798/7068 9115/7800/7070\nf 9115/7800/7070 6816/7801/7071 6524/7796/7066\nf 6756/7629/6899 6524/7796/7066 6816/7801/7071\nf 6816/7801/7071 6332/7022/6292 6756/7629/6899\nf 6525/7802/7072 9117/7803/7073 9116/7804/7074\nf 9116/7804/7074 9118/7805/7075 6525/7802/7072\nf 9060/7682/6952 6525/7802/7072 9118/7805/7075\nf 9118/7805/7075 6356/7683/6953 9060/7682/6952\nf 9119/7806/7076 9121/7807/7077 9120/7808/7078\nf 9120/7808/7078 6819/7809/7079 9119/7806/7076\nf 9122/7810/7080 9119/7806/7076 6819/7809/7079\nf 6819/7809/7079 9123/7811/7081 9122/7810/7080\nf 6526/7812/7082 6765/7647/6917 6339/7038/6308\nf 6339/7038/6308 9124/7813/7083 6526/7812/7082\nf 6783/7678/6948 6526/7812/7082 9124/7813/7083\nf 9124/7813/7083 6357/7680/6950 6783/7678/6948\nf 6526/7812/7082 6783/7678/6948 6354/7677/6947\nf 6354/7677/6947 6820/7814/7084 6526/7812/7082\nf 6765/7647/6917 6526/7812/7082 6820/7814/7084\nf 6820/7814/7084 6341/7649/6919 6765/7647/6917\nf 6527/7815/7085 6808/7758/7028 6341/7649/6919\nf 6341/7649/6919 6820/7814/7084 6527/7815/7085\nf 6809/7762/7032 6527/7815/7085 6820/7814/7084\nf 6820/7814/7084 6354/7677/6947 6809/7762/7032\nf 9125/7816/7086 9097/7771/7041 6372/7772/7042\nf 6372/7772/7042 6821/7817/7087 9125/7816/7086\nf 6808/7758/7028 6527/7815/7085 9126/7818/7088\nf 9126/7818/7088 9127/7819/7089 6808/7758/7028\nf 6528/7820/7090 6800/7719/6989 6346/7660/6930\nf 6346/7660/6930 6821/7817/7087 6528/7820/7090\nf 6810/7770/7040 6528/7820/7090 6821/7817/7087\nf 6821/7817/7087 6372/7772/7042 6810/7770/7040\nf 6528/7820/7090 6810/7770/7040 6373/7769/7039\nf 6373/7769/7039 6822/7821/7091 6528/7820/7090\nf 6800/7719/6989 6528/7820/7090 6822/7821/7091\nf 6822/7821/7091 9067/7720/6990 6800/7719/6989\nf 6529/7822/7092 6752/7627/6897 6329/7635/6905\nf 6329/7635/6905 9128/7823/7093 6529/7822/7092\nf 9096/7768/7038 9129/7824/7094 6822/7821/7091\nf 6822/7821/7091 6373/7769/7039 9096/7768/7038\nf 6529/7822/7092 9130/7825/7095 9114/7799/7069\nf 9114/7799/7069 6817/7797/7067 6529/7822/7092\nf 6752/7627/6897 6529/7822/7092 6817/7797/7067\nf 6817/7797/7067 6328/7628/6898 6752/7627/6897\nf 6530/7826/7096 6823/7827/7097 6375/7828/7098\nf 6375/7828/7098 6826/7829/7099 6530/7826/7096\nf 6825/7830/7100 6530/7826/7096 6826/7829/7099\nf 6826/7829/7099 6377/7831/7101 6825/7830/7100\nf 6530/7826/7096 6825/7830/7100 6376/7832/7102\nf 6376/7832/7102 6824/7833/7103 6530/7826/7096\nf 6823/7827/7097 6530/7826/7096 6824/7833/7103\nf 6824/7833/7103 9131/7834/7104 6823/7827/7097\nf 6531/7835/7105 6814/7793/7063 6374/7792/7062\nf 6374/7792/7062 9132/7836/7106 6531/7835/7105\nf 6828/7837/7107 9134/7838/7108 9133/7839/7109\nf 9133/7839/7109 9135/7840/7110 6828/7837/7107\nf 9134/7838/7108 6828/7837/7107 6378/7841/7111\nf 6378/7841/7111 6827/7842/7112 9134/7838/7108\nf 9111/7795/7065 9137/7843/7113 9136/7844/7114\nf 9136/7844/7114 9105/7785/7055 9111/7795/7065\nf 6532/7845/7115 6797/7715/6985 6367/7714/6984\nf 6367/7714/6984 6827/7842/7112 6532/7845/7115\nf 6830/7846/7116 6532/7845/7115 6827/7842/7112\nf 6827/7842/7112 6378/7841/7111 6830/7846/7116\nf 9138/7847/7117 9139/7848/7118 6379/7849/7119\nf 6379/7849/7119 6829/7850/7120 9138/7847/7117\nf 9140/7851/7121 9142/7852/7122 9141/7853/7123\nf 9141/7853/7123 9143/7854/7124 9140/7851/7121\nf 6533/7855/7125 6806/7748/7018 9144/7856/7126\nf 9144/7856/7126 9145/7857/7127 6533/7855/7125\nf 6832/7858/7128 9146/7859/7129 6829/7850/7120\nf 6829/7850/7120 6379/7849/7119 6832/7858/7128\nf 9146/7859/7129 6832/7858/7128 6380/7860/7130\nf 6380/7860/7130 6831/7861/7131 9146/7859/7129\nf 6806/7748/7018 6533/7855/7125 9147/7862/7132\nf 9147/7862/7132 9083/7749/7019 6806/7748/7018\nf 6534/7863/7133 6776/7669/6939 6353/7670/6940\nf 6353/7670/6940 9148/7864/7134 6534/7863/7133\nf 6834/7865/7135 9150/7866/7136 9149/7867/7137\nf 9149/7867/7137 9151/7868/7138 6834/7865/7135\nf 9152/7869/7139 9153/7870/7140 6381/7871/7141\nf 6381/7871/7141 6833/7872/7142 9152/7869/7139\nf 6776/7669/6939 6534/7863/7133 9154/7873/7143\nf 9154/7873/7143 6352/7671/6941 6776/7669/6939\nf 6535/7874/7144 6835/7875/7145 9155/7876/7146\nf 9155/7876/7146 9156/7877/7147 6535/7874/7144\nf 6836/7878/7148 6535/7874/7144 9156/7877/7147\nf 9156/7877/7147 9157/7879/7149 6836/7878/7148\nf 6535/7874/7144 6836/7878/7148 6377/7831/7101\nf 6377/7831/7101 6826/7829/7099 6535/7874/7144\nf 6835/7875/7145 6535/7874/7144 6826/7829/7099\nf 6826/7829/7099 6375/7828/7098 6835/7875/7145\nf 6536/7880/7150 6825/7830/7100 6377/7831/7101\nf 6377/7831/7101 6839/7881/7151 6536/7880/7150\nf 6838/7882/7152 6536/7880/7150 6839/7881/7151\nf 6839/7881/7151 6383/7883/7153 6838/7882/7152\nf 6536/7880/7150 6838/7882/7152 6382/7884/7154\nf 6382/7884/7154 6837/7885/7155 6536/7880/7150\nf 9158/7886/7156 9160/7887/7157 9159/7888/7158\nf 9159/7888/7158 9135/7840/7110 9158/7886/7156\nf 6537/7889/7159 6828/7837/7107 9135/7840/7110\nf 9135/7840/7110 9159/7888/7158 6537/7889/7159\nf 6841/7890/7160 6537/7889/7159 9159/7888/7158\nf 9159/7888/7158 9161/7891/7161 6841/7890/7160\nf 6537/7889/7159 6841/7890/7160 6384/7892/7162\nf 6384/7892/7162 6840/7893/7163 6537/7889/7159\nf 6828/7837/7107 6537/7889/7159 6840/7893/7163\nf 6840/7893/7163 6378/7841/7111 6828/7837/7107\nf 6538/7894/7164 6830/7846/7116 6378/7841/7111\nf 6378/7841/7111 6840/7893/7163 6538/7894/7164\nf 6843/7895/7165 6538/7894/7164 6840/7893/7163\nf 6840/7893/7163 6384/7892/7162 6843/7895/7165\nf 9162/7896/7166 9163/7897/7167 6385/7898/7168\nf 6385/7898/7168 6842/7899/7169 9162/7896/7166\nf 9139/7848/7118 9162/7896/7166 6842/7899/7169\nf 6842/7899/7169 6379/7849/7119 9139/7848/7118\nf 6539/7900/7170 6832/7858/7128 6379/7849/7119\nf 6379/7849/7119 6842/7899/7169 6539/7900/7170\nf 6845/7901/7171 6539/7900/7170 6842/7899/7169\nf 6842/7899/7169 6385/7898/7168 6845/7901/7171\nf 6539/7900/7170 6845/7901/7171 6386/7902/7172\nf 6386/7902/7172 6844/7903/7173 6539/7900/7170\nf 6832/7858/7128 6539/7900/7170 6844/7903/7173\nf 6844/7903/7173 6380/7860/7130 6832/7858/7128\nf 6540/7904/7174 6834/7865/7135 9151/7868/7138\nf 9151/7868/7138 9164/7905/7175 6540/7904/7174\nf 6847/7906/7176 6540/7904/7174 9164/7905/7175\nf 9164/7905/7175 9165/7907/7177 6847/7906/7176\nf 6540/7904/7174 6847/7906/7176 6387/7908/7178\nf 6387/7908/7178 6846/7909/7179 6540/7904/7174\nf 6834/7865/7135 6540/7904/7174 6846/7909/7179\nf 6846/7909/7179 9166/7910/7180 6834/7865/7135\nf 6541/7911/7181 9167/7912/7182 6381/7871/7141\nf 6381/7871/7141 9168/7913/7183 6541/7911/7181\nf 6848/7914/7184 9169/7915/7185 6846/7909/7179\nf 6846/7909/7179 6387/7908/7178 6848/7914/7184\nf 9170/7916/7186 9171/7917/7187 6383/7883/7153\nf 6383/7883/7153 6839/7881/7151 9170/7916/7186\nf 6836/7878/7148 9170/7916/7186 6839/7881/7151\nf 6839/7881/7151 6377/7831/7101 6836/7878/7148\nf 6542/7918/7188 6849/7919/7189 6382/7884/7154\nf 6382/7884/7154 6838/7882/7152 6542/7918/7188\nf 6851/7920/7190 6542/7918/7188 6838/7882/7152\nf 6838/7882/7152 6383/7883/7153 6851/7920/7190\nf 6542/7918/7188 6851/7920/7190 9172/7921/7191\nf 9172/7921/7191 6850/7922/7192 6542/7918/7188\nf 6849/7919/7189 6542/7918/7188 6850/7922/7192\nf 6850/7922/7192 6388/7923/7193 6849/7919/7189\nf 6543/7924/7194 6852/7925/7195 6384/7892/7162\nf 6384/7892/7162 6841/7890/7160 6543/7924/7194\nf 9173/7926/7196 6543/7924/7194 6841/7890/7160\nf 6841/7890/7160 9161/7891/7161 9173/7926/7196\nf 6543/7924/7194 9173/7926/7196 9174/7927/7197\nf 9174/7927/7197 6853/7928/7198 6543/7924/7194\nf 6852/7925/7195 6543/7924/7194 6853/7928/7198\nf 6853/7928/7198 6389/7929/7199 6852/7925/7195\nf 6544/7930/7200 6854/7931/7201 6385/7898/7168\nf 6385/7898/7168 9163/7897/7167 6544/7930/7200\nf 6852/7925/7195 9175/7932/7202 6843/7895/7165\nf 6843/7895/7165 6384/7892/7162 6852/7925/7195\nf 9175/7932/7202 6852/7925/7195 6389/7929/7199\nf 6389/7929/7199 6855/7933/7203 9175/7932/7202\nf 6854/7931/7201 6544/7930/7200 9176/7934/7204\nf 9176/7934/7204 9177/7935/7205 6854/7931/7201\nf 6545/7936/7206 6856/7937/7207 6386/7902/7172\nf 6386/7902/7172 6845/7901/7171 6545/7936/7206\nf 6854/7931/7201 6545/7936/7206 6845/7901/7171\nf 6845/7901/7171 6385/7898/7168 6854/7931/7201\nf 6545/7936/7206 6854/7931/7201 9177/7935/7205\nf 9177/7935/7205 9178/7938/7208 6545/7936/7206\nf 6856/7937/7207 6545/7936/7206 9178/7938/7208\nf 9178/7938/7208 9179/7939/7209 6856/7937/7207\nf 6546/7940/7210 6857/7941/7211 6387/7908/7178\nf 6387/7908/7178 6847/7906/7176 6546/7940/7210\nf 9180/7942/7212 6546/7940/7210 6847/7906/7176\nf 6847/7906/7176 9165/7907/7177 9180/7942/7212\nf 6546/7940/7210 9180/7942/7212 9181/7943/7213\nf 9181/7943/7213 6804/7726/6996 6546/7940/7210\nf 6857/7941/7211 6546/7940/7210 6804/7726/6996\nf 6804/7726/6996 6368/7725/6995 6857/7941/7211\nf 6547/7944/7214 6851/7920/7190 6383/7883/7153\nf 6383/7883/7153 9171/7917/7187 6547/7944/7214\nf 6857/7941/7211 9182/7945/7215 6848/7914/7184\nf 6848/7914/7184 6387/7908/7178 6857/7941/7211\nf 9182/7945/7215 6857/7941/7211 6368/7725/6995\nf 6368/7725/6995 6801/7724/6994 9182/7945/7215\nf 6851/7920/7190 6547/7944/7214 9183/7946/7216\nf 9183/7946/7216 9172/7921/7191 6851/7920/7190\nf 6548/7947/7217 6775/7672/6942 6352/7671/6941\nf 6352/7671/6941 6859/7948/7218 6548/7947/7217\nf 6858/7949/7219 9185/7950/7220 9184/7951/7221\nf 9184/7951/7221 6390/7952/7222 6858/7949/7219\nf 9185/7950/7220 6858/7949/7219 6326/7354/6624\nf 6326/7354/6624 8928/7353/6623 9185/7950/7220\nf 6775/7672/6942 6548/7947/7217 6747/7351/6621\nf 6747/7351/6621 6351/7068/6338 6775/7672/6942\nf 6549/7953/7223 9110/7791/7061 9186/7954/7224\nf 9186/7954/7224 6862/7955/7225 6549/7953/7223\nf 6861/7956/7226 9188/7957/7227 9187/7958/7228\nf 9187/7958/7228 6392/7959/7229 6861/7956/7226\nf 9188/7957/7227 6861/7956/7226 6391/7960/7230\nf 6391/7960/7230 6860/7961/7231 9188/7957/7227\nf 9189/7962/7232 9188/7957/7227 6860/7961/7231\nf 6860/7961/7231 9131/7834/7104 9189/7962/7232\nf 6550/7963/7233 6823/7827/7097 9131/7834/7104\nf 9131/7834/7104 6860/7961/7231 6550/7963/7233\nf 6864/7964/7234 6550/7963/7233 6860/7961/7231\nf 6860/7961/7231 6391/7960/7230 6864/7964/7234\nf 6550/7963/7233 6864/7964/7234 6393/7965/7235\nf 6393/7965/7235 6863/7966/7236 6550/7963/7233\nf 6823/7827/7097 6550/7963/7233 6863/7966/7236\nf 6863/7966/7236 6375/7828/7098 6823/7827/7097\nf 6551/7967/7237 6835/7875/7145 6375/7828/7098\nf 6375/7828/7098 6863/7966/7236 6551/7967/7237\nf 6865/7968/7238 6551/7967/7237 6863/7966/7236\nf 6863/7966/7236 6393/7965/7235 6865/7968/7238\nf 6551/7967/7237 6865/7968/7238 6390/7952/7222\nf 6390/7952/7222 9184/7951/7221 6551/7967/7237\nf 6835/7875/7145 6551/7967/7237 9184/7951/7221\nf 9184/7951/7221 9155/7876/7146 6835/7875/7145\nf 6552/7969/7239 6866/7970/7240 6394/7971/7241\nf 6394/7971/7241 6868/7972/7242 6552/7969/7239\nf 6748/7381/6651 6552/7969/7239 6868/7972/7242\nf 6868/7972/7242 6325/7382/6652 6748/7381/6651\nf 6552/7969/7239 6748/7381/6651 6327/7380/6650\nf 6327/7380/6650 6867/7973/7243 6552/7969/7239\nf 6866/7970/7240 6552/7969/7239 6867/7973/7243\nf 6867/7973/7243 6395/7974/7244 6866/7970/7240\nf 6553/7975/7245 6869/7976/7246 6396/7977/7247\nf 6396/7977/7247 6871/7978/7248 6553/7975/7245\nf 9190/7979/7249 6553/7975/7245 6871/7978/7248\nf 6871/7978/7248 9191/7980/7250 9190/7979/7249\nf 9192/7981/7251 6866/7970/7240 6395/7974/7244\nf 6395/7974/7244 6870/7982/7252 9192/7981/7251\nf 6869/7976/7246 6553/7975/7245 9193/7983/7253\nf 9193/7983/7253 6397/7984/7254 6869/7976/7246\nf 6554/7985/7255 6872/7986/7256 6398/7987/7257\nf 6398/7987/7257 6874/7988/7258 6554/7985/7255\nf 6869/7976/7246 6554/7985/7255 6874/7988/7258\nf 6874/7988/7258 6396/7977/7247 6869/7976/7246\nf 6554/7985/7255 6869/7976/7246 6397/7984/7254\nf 6397/7984/7254 6873/7989/7259 6554/7985/7255\nf 6872/7986/7256 6554/7985/7255 6873/7989/7259\nf 6873/7989/7259 6399/7990/7260 6872/7986/7256\nf 6555/7991/7261 6875/7992/7262 6400/7993/7263\nf 6400/7993/7263 6877/7994/7264 6555/7991/7261\nf 6872/7986/7256 9195/7995/7265 9194/7996/7266\nf 9194/7996/7266 6398/7987/7257 6872/7986/7256\nf 6555/7991/7261 9197/7997/7267 9196/7998/7268\nf 9196/7998/7268 6876/7999/7269 6555/7991/7261\nf 6875/7992/7262 6555/7991/7261 6876/7999/7269\nf 6876/7999/7269 6401/8000/7270 6875/7992/7262\nf 6556/8001/7271 9199/8002/7272 9198/8003/7273\nf 9198/8003/7273 6880/8004/7274 6556/8001/7271\nf 6879/8005/7275 9201/8006/7276 9200/8007/7277\nf 9200/8007/7277 6403/8008/7278 6879/8005/7275\nf 6556/8001/7271 9202/8009/7279 6402/8010/7280\nf 6402/8010/7280 6878/8011/7281 6556/8001/7271\nf 9199/8002/7272 6556/8001/7271 6878/8011/7281\nf 6878/8011/7281 9203/8012/7282 9199/8002/7272\nf 6557/8013/7283 9204/8014/7284 9203/8012/7282\nf 9203/8012/7282 6878/8011/7281 6557/8013/7283\nf 6882/8015/7285 6557/8013/7283 6878/8011/7281\nf 6878/8011/7281 6402/8010/7280 6882/8015/7285\nf 6557/8013/7283 6882/8015/7285 6404/8016/7286\nf 6404/8016/7286 6881/8017/7287 6557/8013/7283\nf 9204/8014/7284 6557/8013/7283 6881/8017/7287\nf 6881/8017/7287 9205/8018/7288 9204/8014/7284\nf 6558/8019/7289 9206/8020/7290 9205/8018/7288\nf 9205/8018/7288 6881/8017/7287 6558/8019/7289\nf 6884/8021/7291 9208/8022/7292 9207/8023/7293\nf 9207/8023/7293 9209/8024/7294 6884/8021/7291\nf 9210/8025/7295 9211/8026/7296 6405/8027/7297\nf 6405/8027/7297 6883/8028/7298 9210/8025/7295\nf 9212/8029/7299 9208/8022/7292 9213/8030/7300\nf 9213/8030/7300 9214/8031/7301 9212/8029/7299\nf 6559/8032/7302 9215/8033/7303 9214/8031/7301\nf 9214/8031/7301 9213/8030/7300 6559/8032/7302\nf 6886/8034/7304 9217/8035/7305 9216/8036/7306\nf 9216/8036/7306 9218/8037/7307 6886/8034/7304\nf 9217/8035/7305 6886/8034/7304 6323/7433/6703\nf 6323/7433/6703 8949/7432/6702 9217/8035/7305\nf 9219/8038/7308 9221/8039/7309 9220/8040/7310\nf 9220/8040/7310 9222/8041/7311 9219/8038/7308\nf 6560/8042/7312 6887/8043/7313 6406/8044/7314\nf 6406/8044/7314 6890/8045/7315 6560/8042/7312\nf 6889/8046/7316 6560/8042/7312 6890/8045/7315\nf 6890/8045/7315 9223/8047/7317 6889/8046/7316\nf 6560/8042/7312 6889/8046/7316 6324/7443/6713\nf 6324/7443/6713 6888/7441/6711 6560/8042/7312\nf 6887/8043/7313 6560/8042/7312 6888/7441/6711\nf 6888/7441/6711 6407/7442/6712 6887/8043/7313\nf 6561/8048/7318 6891/8049/7319 6408/8050/7320\nf 6408/8050/7320 6893/8051/7321 6561/8048/7318\nf 9224/8052/7322 6561/8048/7318 6893/8051/7321\nf 6893/8051/7321 9225/8053/7323 9224/8052/7322\nf 6561/8048/7318 9224/8052/7322 9226/8054/7324\nf 9226/8054/7324 6892/8055/7325 6561/8048/7318\nf 6891/8049/7319 6561/8048/7318 6892/8055/7325\nf 6892/8055/7325 6409/8056/7326 6891/8049/7319\nf 6562/8057/7327 6894/8058/7328 6409/8056/7326\nf 6409/8056/7326 6892/8055/7325 6562/8057/7327\nf 9227/8059/7329 6562/8057/7327 6892/8055/7325\nf 6892/8055/7325 9226/8054/7324 9227/8059/7329\nf 6562/8057/7327 9227/8059/7329 9228/8060/7330\nf 9228/8060/7330 6895/8061/7331 6562/8057/7327\nf 6894/8058/7328 6562/8057/7327 6895/8061/7331\nf 6895/8061/7331 6410/8062/7332 6894/8058/7328\nf 6563/8063/7333 6896/8064/7334 6410/8062/7332\nf 6410/8062/7332 6895/8061/7331 6563/8063/7333\nf 9229/8065/7335 6563/8063/7333 6895/8061/7331\nf 6895/8061/7331 9228/8060/7330 9229/8065/7335\nf 6563/8063/7333 9229/8065/7335 9223/8047/7317\nf 9223/8047/7317 6890/8045/7315 6563/8063/7333\nf 6896/8064/7334 6563/8063/7333 6890/8045/7315\nf 6890/8045/7315 6406/8044/7314 6896/8064/7334\nf 6564/8066/7336 6897/8067/7337 9230/8068/7338\nf 9230/8068/7338 6900/8069/7339 6564/8066/7336\nf 8963/7474/6744 9232/8070/7340 9231/8071/7341\nf 9231/8071/7341 6412/7475/6745 8963/7474/6744\nf 9233/8072/7342 6899/7473/6743 6411/7472/6742\nf 6411/7472/6742 6898/8073/7343 9233/8072/7342\nf 9234/8074/7344 9233/8072/7342 6898/8073/7343\nf 6898/8073/7343 9235/8075/7345 9234/8074/7344\nf 6565/8076/7346 6901/8077/7347 9236/8078/7348\nf 9236/8078/7348 9237/8079/7349 6565/8076/7346\nf 9238/8080/7350 9239/8081/7351 6861/7956/7226\nf 6861/7956/7226 6392/7959/7229 9238/8080/7350\nf 6565/8076/7346 6897/8067/7337 9240/8082/7352\nf 9240/8082/7352 9241/8083/7353 6565/8076/7346\nf 6901/8077/7347 6565/8076/7346 9241/8083/7353\nf 9241/8083/7353 9242/8084/7354 6901/8077/7347\nf 6566/8085/7355 6902/8086/7356 9243/8087/7357\nf 9243/8087/7357 9244/8088/7358 6566/8085/7355\nf 6901/8077/7347 9246/8089/7359 9245/8090/7360\nf 9245/8090/7360 9236/8078/7348 6901/8077/7347\nf 9247/8091/7361 9249/8092/7362 9248/8093/7363\nf 9248/8093/7363 9250/8094/7364 9247/8091/7361\nf 9251/8095/7365 9247/8091/7361 9250/8094/7364\nf 9250/8094/7364 9252/8096/7366 9251/8095/7365\nf 6567/8097/7367 6903/8098/7368 9253/8099/7369\nf 9253/8099/7369 9254/8100/7370 6567/8097/7367\nf 9255/8101/7371 6567/8097/7367 9254/8100/7370\nf 9254/8100/7370 9256/8102/7372 9255/8101/7371\nf 9257/8103/7373 9251/8095/7365 9252/8096/7366\nf 9252/8096/7366 9258/8104/7374 9257/8103/7373\nf 9259/8105/7375 9260/8106/7376 6896/8064/7334\nf 6896/8064/7334 6406/8044/7314 9259/8105/7375\nf 6568/8107/7377 6904/8108/7378 6395/7974/7244\nf 6395/7974/7244 6867/7973/7243 6568/8107/7377\nf 6751/7507/6777 6568/8107/7377 6867/7973/7243\nf 6867/7973/7243 6327/7380/6650 6751/7507/6777\nf 6568/8107/7377 6751/7507/6777 6323/7433/6703\nf 6323/7433/6703 6886/8034/7304 6568/8107/7377\nf 6904/8108/7378 6568/8107/7377 6886/8034/7304\nf 6886/8034/7304 9218/8037/7307 6904/8108/7378\nf 6569/8109/7379 6905/8110/7380 6397/7984/7254\nf 6397/7984/7254 9193/7983/7253 6569/8109/7379\nf 6904/8108/7378 9261/8111/7381 6870/7982/7252\nf 6870/7982/7252 6395/7974/7244 6904/8108/7378\nf 6569/8109/7379 9262/8112/7382 6405/8027/7297\nf 6405/8027/7297 9211/8026/7296 6569/8109/7379\nf 6905/8110/7380 6569/8109/7379 9211/8026/7296\nf 9211/8026/7296 9263/8113/7383 6905/8110/7380\nf 6570/8114/7384 6906/8115/7385 6399/7990/7260\nf 6399/7990/7260 6873/7989/7259 6570/8114/7384\nf 6905/8110/7380 6570/8114/7384 6873/7989/7259\nf 6873/7989/7259 6397/7984/7254 6905/8110/7380\nf 6570/8114/7384 6905/8110/7380 9263/8113/7383\nf 9263/8113/7383 9264/8116/7386 6570/8114/7384\nf 9265/8117/7387 9267/8118/7388 9266/8119/7389\nf 9266/8119/7389 9268/8120/7390 9265/8117/7387\nf 6571/8121/7391 6907/8122/7392 6401/8000/7270\nf 6401/8000/7270 6876/7999/7269 6571/8121/7391\nf 9265/8117/7387 6571/8121/7391 6876/7999/7269\nf 6876/7999/7269 9196/7998/7268 9265/8117/7387\nf 6571/8121/7391 9265/8117/7387 9268/8120/7390\nf 9268/8120/7390 6879/8005/7275 6571/8121/7391\nf 6907/8122/7392 6571/8121/7391 6879/8005/7275\nf 6879/8005/7275 6403/8008/7278 6907/8122/7392\nf 6572/8123/7393 6802/7732/7002 6370/7731/7001\nf 6370/7731/7001 6910/8124/7394 6572/8123/7393\nf 6909/8125/7395 6572/8123/7393 6910/8124/7394\nf 6910/8124/7394 6414/8126/7396 6909/8125/7395\nf 6572/8123/7393 6909/8125/7395 6413/8127/7397\nf 6413/8127/7397 6908/8128/7398 6572/8123/7393\nf 6802/7732/7002 6572/8123/7393 6908/8128/7398\nf 6908/8128/7398 9269/8129/7399 6802/7732/7002\nf 6573/8130/7400 6850/7922/7192 9172/7921/7191\nf 9172/7921/7191 9270/8131/7401 6573/8130/7400\nf 6912/8132/7402 9272/8133/7403 9271/8134/7404\nf 9271/8134/7404 9273/8135/7405 6912/8132/7402\nf 6573/8130/7400 9274/8136/7406 6415/8137/7407\nf 6415/8137/7407 6911/8138/7408 6573/8130/7400\nf 6850/7922/7192 6573/8130/7400 6911/8138/7408\nf 6911/8138/7408 6388/7923/7193 6850/7922/7192\nf 6574/8139/7409 6853/7928/7198 9174/7927/7197\nf 9174/7927/7197 9275/8140/7410 6574/8139/7409\nf 6914/8141/7411 6574/8139/7409 9275/8140/7410\nf 9275/8140/7410 9276/8142/7412 6914/8141/7411\nf 6574/8139/7409 6914/8141/7411 6416/8143/7413\nf 6416/8143/7413 6913/8144/7414 6574/8139/7409\nf 6853/7928/7198 6574/8139/7409 6913/8144/7414\nf 6913/8144/7414 6389/7929/7199 6853/7928/7198\nf 6575/8145/7415 6855/7933/7203 6389/7929/7199\nf 6389/7929/7199 6913/8144/7414 6575/8145/7415\nf 6915/8146/7416 6575/8145/7415 6913/8144/7414\nf 6913/8144/7414 6416/8143/7413 6915/8146/7416\nf 9277/8147/7417 9279/8148/7418 9278/8149/7419\nf 9278/8149/7419 9280/8150/7420 9277/8147/7417\nf 9176/7934/7204 9277/8147/7417 9280/8150/7420\nf 9280/8150/7420 9177/7935/7205 9176/7934/7204\nf 6576/8151/7421 6909/8125/7395 6414/8126/7396\nf 6414/8126/7396 6917/8152/7422 6576/8151/7421\nf 9281/8153/7423 6576/8151/7421 6917/8152/7422\nf 6917/8152/7422 9282/8154/7424 9281/8153/7423\nf 9283/8155/7425 9285/8156/7426 9284/8157/7427\nf 9284/8157/7427 6916/8158/7428 9283/8155/7425\nf 9286/8159/7429 9283/8155/7425 6916/8158/7428\nf 6916/8158/7428 9287/8160/7430 9286/8159/7429\nf 6577/8161/7431 9288/8162/7432 9287/8160/7430\nf 9287/8160/7430 6916/8158/7428 6577/8161/7431\nf 9289/8163/7433 6577/8161/7431 6916/8158/7428\nf 6916/8158/7428 9284/8157/7427 9289/8163/7433\nf 9290/8164/7434 9292/8165/7435 9291/8166/7436\nf 9291/8166/7436 6918/8167/7437 9290/8164/7434\nf 9274/8136/7406 9290/8164/7434 6918/8167/7437\nf 6918/8167/7437 6415/8137/7407 9274/8136/7406\nf 6578/8168/7438 6914/8141/7411 9276/8142/7412\nf 9276/8142/7412 9293/8169/7439 6578/8168/7438\nf 9294/8170/7440 6578/8168/7438 9293/8169/7439\nf 9293/8169/7439 9295/8171/7441 9294/8170/7440\nf 6578/8168/7438 9294/8170/7440 9296/8172/7442\nf 9296/8172/7442 6919/8173/7443 6578/8168/7438\nf 6914/8141/7411 6578/8168/7438 6919/8173/7443\nf 6919/8173/7443 6416/8143/7413 6914/8141/7411\nf 6579/8174/7444 6915/8146/7416 6416/8143/7413\nf 6416/8143/7413 6919/8173/7443 6579/8174/7444\nf 9297/8175/7445 6579/8174/7444 6919/8173/7443\nf 6919/8173/7443 9296/8172/7442 9297/8175/7445\nf 9298/8176/7446 9300/8177/7447 9299/8178/7448\nf 9299/8178/7448 9301/8179/7449 9298/8176/7446\nf 9279/8148/7418 9298/8176/7446 9301/8179/7449\nf 9301/8179/7449 9278/8149/7419 9279/8148/7418\nf 6580/8180/7450 6785/7691/6961 6360/7093/6363\nf 6360/7093/6363 6920/7585/6855 6580/8180/7450\nf 9302/8181/7451 9303/8182/7452 9036/7589/6859\nf 9036/7589/6859 9037/7590/6860 9302/8181/7451\nf 9303/8182/7452 9302/8181/7451 6392/7959/7229\nf 6392/7959/7229 9187/7958/7228 9303/8182/7452\nf 6785/7691/6961 6580/8180/7450 9304/8183/7453\nf 9304/8183/7453 6359/7692/6962 6785/7691/6961\nf 6581/8184/7454 6921/8185/7455 6417/7593/6863\nf 6417/7593/6863 6922/7592/6862 6581/8184/7454\nf 9305/8186/7456 6581/8184/7454 6922/7592/6862\nf 6922/7592/6862 9042/7599/6869 9305/8186/7456\nf 9306/8187/7457 9307/8188/7458 6400/7993/7263\nf 6400/7993/7263 6875/7992/7262 9306/8187/7457\nf 6921/8185/7455 6581/8184/7454 9308/8189/7459\nf 9308/8189/7459 9309/8190/7460 6921/8185/7455\nf 6582/8191/7461 6758/7644/6914 6335/7029/6299\nf 6335/7029/6299 6924/7601/6871 6582/8191/7461\nf 6923/8192/7462 9310/8193/7463 9046/7606/6876\nf 9046/7606/6876 6322/7607/6877 6923/8192/7462\nf 9310/8193/7463 6923/8192/7462 9311/8194/7464\nf 9311/8194/7464 9312/8195/7465 9310/8193/7463\nf 9313/8196/7466 9314/8197/7467 6880/8004/7274\nf 6880/8004/7274 9198/8003/7273 9313/8196/7466\nf 6583/8198/7468 9315/8199/7469 9047/7610/6880\nf 9047/7610/6880 6749/7609/6879 6583/8198/7468\nf 9316/8200/7470 6583/8198/7468 6749/7609/6879\nf 6749/7609/6879 9050/7613/6883 9316/8200/7470\nf 6583/8198/7468 9316/8200/7470 9225/8053/7323\nf 9225/8053/7323 6893/8051/7321 6583/8198/7468\nf 9315/8199/7469 6583/8198/7468 6893/8051/7321\nf 6893/8051/7321 6408/8050/7320 9315/8199/7469\nf 6584/8201/7471 6887/8043/7313 6407/7442/6712\nf 6407/7442/6712 6925/7615/6885 6584/8201/7471\nf 9317/8202/7472 9318/8203/7473 9055/7620/6890\nf 9055/7620/6890 9056/7621/6891 9317/8202/7472\nf 9318/8203/7473 9317/8202/7472 9319/8204/7474\nf 9319/8204/7474 9320/8205/7475 9318/8203/7473\nf 6887/8043/7313 6584/8201/7471 9259/8105/7375\nf 9259/8105/7375 6406/8044/7314 6887/8043/7313\nf 6585/8206/7476 6923/8192/7462 6322/7607/6877\nf 6322/7607/6877 6750/7623/6893 6585/8206/7476\nf 6921/8185/7455 6585/8206/7476 6750/7623/6893\nf 6750/7623/6893 6417/7593/6863 6921/8185/7455\nf 6585/8206/7476 6921/8185/7455 9309/8190/7460\nf 9309/8190/7460 9321/8207/7477 6585/8206/7476\nf 6923/8192/7462 6585/8206/7476 9321/8207/7477\nf 9321/8207/7477 9311/8194/7464 6923/8192/7462\nf 6928/8208/6195 6929/8209/6195 6931/8210/6195\nf 6931/8210/6195 6930/8211/6195 6928/8208/6195\nf 6926/8212/6196 6927/8213/6196 9322/8214/6196\nf 9322/8214/6196 9323/8215/6196 6926/8212/6196\nf 6944/8216/5422 6945/8217/5422 6952/8218/5422\nf 6952/8218/5422 6953/8219/5422 6944/8216/5422\nf 6932/8220/6197 6933/8221/6197 6934/8222/6198\nf 6934/8222/6198 6935/8223/6198 6932/8220/6197\nf 6954/8224/5423 6955/8225/5423 6956/8226/5423\nf 6956/8226/5423 6957/8227/5423 6954/8224/5423\nf 6957/8227/5423 6997/8228/5423 6996/8229/5423\nf 6954/8224/5423 6957/8227/5423 6996/8229/5423\nf 6954/8224/5423 6996/8229/5423 6963/8230/5423\nf 6980/8231/6199 6983/8232/6199 6984/8233/6195\nf 6984/8233/6195 6985/8234/6195 6980/8231/6199\nf 6952/8218/5422 6945/8217/5422 6946/8235/5422\nf 6946/8235/5422 6987/8236/5422 6986/8237/5422\nf 6952/8218/5422 6946/8235/5422 6986/8237/5422\nf 9324/8238/6200 9325/8239/6200 6937/8240/6201\nf 6937/8240/6201 6936/8241/6201 9324/8238/6200\nf 6952/8218/5422 6986/8237/5422 6988/8242/6202\nf 6988/8242/6202 6951/8243/5422 6952/8218/5422\nf 6935/8223/6198 6934/8222/6198 6939/8244/6198\nf 6939/8244/6198 6938/8245/6198 6935/8223/6198\nf 6997/8228/5423 6957/8227/5423 6958/8246/5423\nf 6958/8246/5423 6995/8247/6203 6997/8228/5423\nf 6936/8241/6201 6937/8240/6201 6941/8248/6204\nf 6941/8248/6204 6940/8249/6205 6936/8241/6201\nf 6951/8243/5422 6988/8242/6202 6989/8250/6206\nf 6989/8250/6206 6991/8251/6207 6951/8243/5422\nf 6938/8245/6198 6939/8244/6198 6943/8252/6208\nf 6943/8252/6208 6942/8253/6208 6938/8245/6198\nf 6995/8247/6203 6958/8246/5423 6992/8254/6209\nf 6992/8254/6209 6993/8255/6210 6995/8247/6203\nf 6935/8223/6198 6947/8256/6211 9326/8257/6197\nf 6932/8220/6197 6935/8223/6198 9326/8257/6197\nf 6932/8220/6197 9326/8257/6197 9327/8258/6197\nf 6935/8223/6198 6938/8245/6198 6948/8259/6198\nf 6948/8259/6198 6947/8256/6211 6935/8223/6198\nf 6938/8245/6198 6942/8253/6208 6990/8260/6208\nf 6990/8260/6208 6948/8259/6198 6938/8245/6198\nf 6984/8233/6195 6983/8232/6199 6982/8261/6195\nf 6984/8233/6195 6982/8261/6195 6950/8262/6195\nf 6984/8233/6195 6950/8262/6195 6949/8263/7478\nf 6970/8264/6212 6971/8265/6213 7000/8266/6213\nf 7000/8266/6213 7001/8267/6212 6970/8264/6212\nf 6971/8265/6213 6964/8268/6214 6998/8269/6214\nf 6998/8269/6214 7000/8266/6213 6971/8265/6213\nf 9328/8270/6215 6965/8271/6215 6966/8272/6215\nf 6966/8272/6215 6999/8273/6216 9329/8274/6217\nf 9328/8270/6215 6966/8272/6215 9329/8274/6217\nf 9322/8214/6196 6927/8213/6196 9330/8275/6196\nf 9330/8275/6196 9331/8276/6196 9322/8214/6196\nf 6926/8212/6196 9323/8215/6196 9332/8277/6196\nf 9332/8277/6196 9333/8278/6196 6926/8212/6196\nf 6973/8279/6215 7009/8280/6218 7008/8281/6219\nf 6972/8282/6215 6973/8279/6215 7008/8281/6219\nf 6972/8282/6215 7008/8281/6219 6979/8283/6215\nf 9334/8284/6214 6974/8285/6213 7007/8286/6213\nf 7007/8286/6213 9335/8287/6214 9334/8284/6214\nf 6974/8285/6213 7004/8288/6212 7005/8289/6212\nf 7005/8289/6212 7007/8286/6213 6974/8285/6213\nf 6980/8231/6199 6985/8234/6195 6994/8290/6195\nf 6980/8231/6199 6994/8290/6195 6959/8291/6195\nf 6981/8292/6195 6980/8231/6199 6959/8291/6195\nf 6943/8252/6208 6939/8244/6198 6961/8293/6198\nf 6961/8293/6198 6960/8294/6208 6943/8252/6208\nf 6939/8244/6198 6934/8222/6198 6962/8295/6211\nf 6962/8295/6211 6961/8293/6198 6939/8244/6198\nf 6934/8222/6198 6933/8221/6197 9336/8296/6197\nf 9336/8296/6197 9337/8297/6197 6962/8295/6211\nf 6934/8222/6198 9336/8296/6197 6962/8295/6211\nf 9338/8298/5423 9340/8299/5423 9339/8300/5423\nf 9339/8300/5423 9341/8301/5423 9338/8298/5423\nf 9322/8214/6196 9331/8276/6196 9342/8302/6196\nf 9342/8302/6196 9343/8303/6196 9322/8214/6196\nf 6952/8218/5422 6967/8304/6220 9344/8305/5422\nf 6953/8219/5422 6952/8218/5422 9344/8305/5422\nf 6953/8219/5422 9344/8305/5422 9345/8306/5422\nf 6952/8218/5422 6951/8243/5422 6968/8307/6221\nf 6968/8307/6221 6967/8304/6220 6952/8218/5422\nf 6951/8243/5422 6991/8251/6207 7002/8308/6222\nf 7002/8308/6222 6968/8307/6221 6951/8243/5422\nf 6950/8262/6195 6982/8261/6195 7003/8309/6223\nf 7003/8309/6223 6969/8310/6224 6950/8262/6195\nf 9346/8311/5423 9348/8312/5423 9347/8313/5423\nf 9347/8313/5423 9349/8314/5423 9346/8311/5423\nf 9348/8312/5423 9338/8298/5423 9341/8301/5423\nf 9341/8301/5423 9347/8313/5423 9348/8312/5423\nf 9350/8315/5422 9352/8316/5422 9351/8317/5422\nf 9351/8317/5422 9353/8318/5422 9350/8315/5422\nf 9352/8316/5422 9355/8319/5422 9354/8320/5422\nf 9354/8320/5422 9351/8317/5422 9352/8316/5422\nf 9355/8319/5422 9357/8321/6227 9356/8322/6228\nf 9356/8322/6228 9354/8320/5422 9355/8319/5422\nf 6981/8292/6195 6959/8291/6195 7006/8323/6224\nf 7006/8323/6224 6975/8324/6223 6981/8292/6195\nf 6992/8254/6209 6958/8246/5423 6977/8325/6229\nf 6977/8325/6229 6976/8326/6230 6992/8254/6209\nf 6958/8246/5423 6957/8227/5423 6978/8327/6231\nf 6978/8327/6231 6977/8325/6229 6958/8246/5423\nf 6957/8227/5423 6956/8226/5423 9358/8328/5423\nf 9358/8328/5423 9359/8329/5423 6978/8327/6231\nf 6957/8227/5423 9358/8328/5423 6978/8327/6231\nf 9332/8277/6196 9323/8215/6196 9360/8330/6196\nf 9360/8330/6196 9361/8331/6196 9332/8277/6196\nf 6940/8249/6205 9363/8332/6232 9362/8333/6232\nf 6941/8248/6204 9365/8334/6233 9364/8335/6233\nf 9366/8336/6234 9368/8337/6234 9367/8338/6234\nf 9369/8339/6235 9371/8340/6235 9370/8341/6236\nf 9372/8342/6237 9374/8343/6238 9373/8344/6238\nf 9375/8345/6239 9377/8346/6239 9376/8347/6239\nf 9378/8348/6240 9329/8274/6217 6999/8273/6216\nf 9379/8349/6241 9381/8350/6242 9380/8351/6243\nf 9382/8352/6244 9384/8353/6245 9383/8354/6246\nf 9385/8355/6247 7008/8281/6219 7009/8280/6218\nf 6980/8231/6199 9387/8356/6248 9386/8357/6248\nf 9386/8357/6248 6983/8232/6199 6980/8231/6199\nf 9388/8358/6249 6942/8253/6208 6943/8252/6208\nf 6943/8252/6208 9389/8359/6249 9388/8358/6249\nf 9390/8360/6250 9392/8361/6251 9391/8362/6252\nf 9391/8362/6252 9393/8363/6253 9390/8360/6250\nf 6988/8242/6202 9395/8364/6254 9394/8365/6255\nf 9394/8365/6255 6989/8250/6206 6988/8242/6202\nf 9371/8340/6235 9369/8339/6235 9396/8366/6256\nf 9396/8366/6256 9397/8367/6256 9371/8340/6235\nf 6942/8253/6208 9388/8358/6249 9398/8368/6249\nf 9398/8368/6249 6990/8260/6208 6942/8253/6208\nf 9399/8369/6257 9400/8370/6257 9373/8344/6238\nf 9373/8344/6238 9374/8343/6238 9399/8369/6257\nf 6993/8255/6210 9402/8371/6258 9401/8372/6259\nf 9401/8372/6259 6995/8247/6203 6993/8255/6210\nf 9403/8373/6260 9405/8374/6261 9404/8375/6262\nf 9404/8375/6262 9406/8376/6263 9403/8373/6260\nf 9389/8359/6249 6943/8252/6208 6960/8294/6208\nf 6960/8294/6208 9407/8377/6249 9389/8359/6249\nf 9408/8378/6264 6967/8304/6220 6968/8307/6221\nf 6968/8307/6221 9409/8379/6265 9408/8378/6264\nf 9410/8380/6266 9411/8381/6267 9380/8351/6243\nf 9380/8351/6243 9381/8350/6242 9410/8380/6266\nf 9412/8382/6268 6969/8310/6224 7003/8309/6223\nf 7003/8309/6223 9413/8383/6268 9412/8382/6268\nf 6991/8251/6207 9415/8384/6256 9414/8385/6256\nf 9414/8385/6256 7002/8308/6222 6991/8251/6207\nf 9416/8386/6257 9418/8387/6257 9417/8388/6257\nf 9417/8388/6257 9419/8389/6257 9416/8386/6257\nf 9420/8390/6268 6975/8324/6223 7006/8323/6224\nf 7006/8323/6224 9421/8391/6269 9420/8390/6268\nf 9384/8353/6245 9382/8352/6244 9422/8392/6270\nf 9422/8392/6270 9423/8393/6271 9384/8353/6245\nf 9424/8394/6272 6977/8325/6229 6978/8327/6231\nf 6978/8327/6231 9425/8395/6273 9424/8394/6272\nf 9357/8321/6227 9427/8396/6256 9426/8397/6256\nf 9426/8397/6256 9356/8322/6228 9357/8321/6227\nf 9428/8398/6257 6992/8254/6209 6976/8326/6230\nf 6976/8326/6230 9429/8399/6257 9428/8398/6257\nf 7010/8400/7479 7011/8401/7480 7019/8402/7481\nf 7019/8402/7481 7018/8403/7482 7010/8400/7479\nf 9430/8404/1506 7012/8405/7483 7020/8406/7484\nf 7020/8406/7484 9431/8407/7485 9430/8404/1506\nf 7012/8405/7483 7013/8408/7486 7021/8409/7487\nf 7021/8409/7487 7020/8406/7484 7012/8405/7483\nf 9432/8410/7488 7014/8411/7489 7022/8412/7490\nf 7022/8412/7490 9433/8413/7491 9432/8410/7488\nf 7014/8411/7489 7015/8414/7492 7023/8415/7492\nf 7023/8415/7492 7022/8412/7490 7014/8411/7489\nf 9434/8416/7493 7016/8417/7494 7024/8418/7495\nf 7024/8418/7495 9435/8419/7496 9434/8416/7493\nf 9436/8420/7497 7017/8421/7497 7025/8422/7497\nf 7025/8422/7497 9437/8423/7497 9436/8420/7497\nf 9438/8424/7498 7010/8400/7479 7018/8403/7482\nf 7018/8403/7482 9439/8425/7499 9438/8424/7498\nf 9440/8426/7500 9441/8427/7500 7027/8428/7501\nf 7027/8428/7501 7026/8429/7501 9440/8426/7500\nf 9431/8407/7485 7020/8406/7484 7028/8430/7502\nf 7028/8430/7502 9442/8431/7503 9431/8407/7485\nf 7020/8406/7484 7021/8409/7487 7029/8432/7504\nf 7029/8432/7504 7028/8430/7502 7020/8406/7484\nf 9433/8413/7491 7022/8412/7490 7030/8433/7505\nf 7030/8433/7505 9443/8434/7505 9433/8413/7491\nf 9444/8435/7506 9445/8436/7506 7031/8437/7507\nf 7031/8437/7507 9446/8438/7507 9444/8435/7506\nf 9435/8419/7496 7024/8418/7495 7032/8439/7508\nf 7032/8439/7508 9447/8440/7509 9435/8419/7496\nf 7024/8418/7495 9448/8441/7510 7033/8442/7511\nf 7033/8442/7511 7032/8439/7508 7024/8418/7495\nf 9439/8425/7499 7018/8403/7482 9449/8443/7512\nf 9449/8443/7512 9450/8444/7512 9439/8425/7499\nf 7026/8429/7501 7027/8428/7501 7035/8445/7513\nf 7035/8445/7513 7034/8446/7513 7026/8429/7501\nf 9442/8431/7503 7028/8430/7502 7036/8447/7514\nf 7036/8447/7514 9451/8448/7515 9442/8431/7503\nf 7028/8430/7502 7029/8432/7504 7037/8449/7516\nf 7037/8449/7516 7036/8447/7514 7028/8430/7502\nf 9443/8434/7505 7030/8433/7505 7038/8450/7517\nf 7038/8450/7517 9452/8451/7517 9443/8434/7505\nf 9446/8438/7507 7031/8437/7507 7039/8452/7518\nf 7039/8452/7518 9453/8453/7518 9446/8438/7507\nf 9447/8440/7509 7032/8439/7508 7040/8454/7519\nf 7040/8454/7519 9454/8455/7520 9447/8440/7509\nf 7032/8439/7508 7033/8442/7511 7041/8456/7521\nf 7041/8456/7521 7040/8454/7519 7032/8439/7508\nf 9455/8457/7522 9457/8458/7522 9456/8459/7523\nf 9456/8459/7523 9458/8460/7523 9455/8457/7522\nf 7034/8446/7513 7035/8445/7513 7043/8461/7524\nf 7043/8461/7524 7042/8462/7524 7034/8446/7513\nf 9451/8448/7515 7036/8447/7514 7044/8463/7525\nf 7044/8463/7525 9459/8464/7526 9451/8448/7515\nf 7036/8447/7514 7037/8449/7516 7045/8465/7527\nf 7045/8465/7527 7044/8463/7525 7036/8447/7514\nf 9460/8466/7528 9461/8467/7528 7046/8468/7529\nf 7046/8468/7529 9462/8469/7529 9460/8466/7528\nf 9453/8453/7518 7039/8452/7518 7047/8470/7530\nf 7047/8470/7530 9463/8471/7530 9453/8453/7518\nf 9454/8455/7520 7040/8454/7519 7048/8472/7531\nf 7048/8472/7531 9464/8473/7532 9454/8455/7520\nf 7040/8454/7519 7041/8456/7521 7049/8474/7533\nf 7049/8474/7533 7048/8472/7531 7040/8454/7519\nf 9458/8460/7523 9456/8459/7523 9465/8475/7534\nf 9465/8475/7534 9466/8476/7534 9458/8460/7523\nf 9467/8477/7535 9468/8478/7535 7051/8479/7536\nf 7051/8479/7536 7050/8480/7536 9467/8477/7535\nf 9459/8464/7526 7044/8463/7525 7052/8481/7537\nf 7052/8481/7537 9469/8482/7538 9459/8464/7526\nf 7044/8463/7525 7045/8465/7527 7053/8483/7539\nf 7053/8483/7539 7052/8481/7537 7044/8463/7525\nf 9462/8469/7529 7046/8468/7529 7054/8484/7540\nf 7054/8484/7540 9470/8485/7540 9462/8469/7529\nf 9471/8486/7541 9472/8487/7541 7055/8488/7542\nf 7055/8488/7542 9473/8489/7542 9471/8486/7541\nf 9464/8473/7532 7048/8472/7531 7056/8490/7543\nf 7056/8490/7543 9474/8491/7544 9464/8473/7532\nf 7048/8472/7531 7049/8474/7533 7057/8492/7545\nf 7057/8492/7545 7056/8490/7543 7048/8472/7531\nf 9466/8476/7534 9465/8475/7534 9475/8493/7546\nf 9475/8493/7546 9476/8494/7546 9466/8476/7534\nf 7050/8480/7536 7051/8479/7536 7059/8495/7547\nf 7059/8495/7547 7058/8496/7547 7050/8480/7536\nf 9469/8482/7538 7052/8481/7537 7060/8497/7548\nf 7060/8497/7548 9477/8498/7549 9469/8482/7538\nf 7052/8481/7537 7053/8483/7539 7061/8499/7550\nf 7061/8499/7550 7060/8497/7548 7052/8481/7537\nf 9470/8485/7540 7054/8484/7540 7062/8500/7551\nf 7062/8500/7551 9478/8501/7551 9470/8485/7540\nf 9473/8489/7542 7055/8488/7542 7063/8502/7552\nf 7063/8502/7552 9479/8503/7552 9473/8489/7542\nf 9474/8491/7544 7056/8490/7543 7064/8504/7553\nf 7064/8504/7553 9480/8505/7554 9474/8491/7544\nf 7056/8490/7543 7057/8492/7545 7065/8506/7555\nf 7065/8506/7555 7064/8504/7553 7056/8490/7543\nf 9481/8507/7556 9483/8508/7556 9482/8509/7557\nf 9482/8509/7557 9484/8510/7557 9481/8507/7556\nf 7058/8496/7547 7059/8495/7547 7067/8511/7558\nf 7067/8511/7558 7066/8512/7558 7058/8496/7547\nf 9477/8498/7549 7060/8497/7548 7068/8513/7559\nf 7068/8513/7559 9485/8514/7560 9477/8498/7549\nf 7060/8497/7548 7061/8499/7550 7069/8515/7561\nf 7069/8515/7561 7068/8513/7559 7060/8497/7548\nf 9486/8516/7562 9487/8517/7562 7070/8518/7562\nf 7070/8518/7562 9488/8519/7562 9486/8516/7562\nf 9489/8520/7563 9490/8521/7563 7071/8522/7564\nf 7071/8522/7564 9491/8523/7565 9489/8520/7563\nf 9480/8505/7554 7064/8504/7553 7072/8524/7566\nf 7072/8524/7566 9492/8525/7567 9480/8505/7554\nf 7064/8504/7553 7065/8506/7555 7073/8526/7568\nf 7073/8526/7568 7072/8524/7566 7064/8504/7553\nf 9484/8510/7557 9482/8509/7557 9493/8527/7569\nf 9493/8527/7569 9494/8528/7569 9484/8510/7557\nf 9495/8529/7570 9496/8530/7570 7075/8531/7488\nf 7075/8531/7488 7074/8532/7488 9495/8529/7570\nf 9485/8514/7560 7068/8513/7559 7076/8533/7571\nf 7076/8533/7571 9497/8534/7486 9485/8514/7560\nf 7068/8513/7559 7069/8515/7561 7077/8535/1506\nf 7077/8535/1506 7076/8533/7571 7068/8513/7559\nf 9498/8536/7572 9491/8523/7565 7078/8537/7479\nf 7078/8537/7479 9499/8538/7480 9498/8536/7572\nf 9491/8523/7565 7071/8522/7564 7079/8539/7498\nf 7079/8539/7498 7078/8537/7479 9491/8523/7565\nf 9492/8525/7567 7072/8524/7566 7080/8540/7573\nf 7080/8540/7573 9500/8541/7574 9492/8525/7567\nf 7072/8524/7566 7073/8526/7568 7081/8542/7575\nf 7081/8542/7575 7080/8540/7573 7072/8524/7566\nf 9494/8528/7569 9493/8527/7569 9501/8543/7576\nf 9501/8543/7576 9502/8544/7576 9494/8528/7569\nf 7074/8532/7488 7075/8531/7488 7083/8545/7491\nf 7083/8545/7491 7082/8546/7491 7074/8532/7488\nf 9497/8534/7486 7076/8533/7571 7084/8547/7577\nf 7084/8547/7577 9503/8548/7487 9497/8534/7486\nf 7076/8533/7571 7077/8535/1506 7085/8549/7485\nf 7085/8549/7485 7084/8547/7577 7076/8533/7571\nf 9499/8538/7480 7078/8537/7479 7086/8550/7482\nf 7086/8550/7482 9504/8551/7481 9499/8538/7480\nf 7078/8537/7479 7079/8539/7498 7087/8552/7499\nf 7087/8552/7499 7086/8550/7482 7078/8537/7479\nf 9505/8553/7497 9506/8554/7497 7088/8555/7497\nf 7088/8555/7497 9507/8556/7497 9505/8553/7497\nf 7080/8540/7573 7081/8542/7575 7089/8557/7578\nf 7089/8557/7578 9508/8558/7579 7080/8540/7573\nf 7081/8542/7575 9510/8559/7492 9509/8560/7492\nf 9509/8560/7492 7089/8557/7578 7081/8542/7575\nf 7082/8546/7491 7083/8545/7491 7091/8561/7580\nf 7091/8561/7580 7090/8562/7580 7082/8546/7491\nf 9503/8548/7487 7084/8547/7577 7092/8563/7581\nf 7092/8563/7581 9511/8564/7504 9503/8548/7487\nf 7084/8547/7577 7085/8549/7485 7093/8565/7503\nf 7093/8565/7503 7092/8563/7581 7084/8547/7577\nf 9512/8566/7500 9513/8567/7500 7094/8568/7501\nf 7094/8568/7501 9514/8569/7501 9512/8566/7500\nf 7086/8550/7482 7087/8552/7499 7095/8570/7512\nf 7095/8570/7512 9515/8571/7512 7086/8550/7482\nf 9516/8572/7510 9508/8558/7579 7096/8573/7582\nf 7096/8573/7582 9517/8574/7511 9516/8572/7510\nf 9508/8558/7579 7089/8557/7578 7097/8575/7509\nf 7097/8575/7509 7096/8573/7582 9508/8558/7579\nf 9518/8576/7506 9520/8577/7506 9519/8578/7507\nf 9519/8578/7507 9521/8579/7507 9518/8576/7506\nf 9522/8580/7517 9523/8581/7517 7099/8582/7583\nf 7099/8582/7583 7098/8583/7583 9522/8580/7517\nf 9511/8564/7504 7092/8563/7581 7100/8584/7584\nf 7100/8584/7584 9524/8585/7516 9511/8564/7504\nf 7092/8563/7581 7093/8565/7503 7101/8586/7515\nf 7101/8586/7515 7100/8584/7584 7092/8563/7581\nf 9514/8569/7501 7094/8568/7501 7102/8587/7513\nf 7102/8587/7513 9525/8588/7513 9514/8569/7501\nf 9526/8589/7522 9527/8590/7522 7103/8591/7523\nf 7103/8591/7523 9528/8592/7523 9526/8589/7522\nf 9517/8574/7511 7096/8573/7582 7104/8593/7585\nf 7104/8593/7585 9529/8594/7521 9517/8574/7511\nf 7096/8573/7582 7097/8575/7509 7105/8595/7520\nf 7105/8595/7520 7104/8593/7585 7096/8573/7582\nf 9521/8579/7507 9519/8578/7507 9530/8596/7518\nf 9530/8596/7518 9531/8597/7518 9521/8579/7507\nf 7098/8583/7583 7099/8582/7583 7107/8598/7529\nf 7107/8598/7529 7106/8599/7529 7098/8583/7583\nf 9524/8585/7516 7100/8584/7584 7108/8600/7586\nf 7108/8600/7586 9532/8601/7527 9524/8585/7516\nf 7100/8584/7584 7101/8586/7515 7109/8602/7526\nf 7109/8602/7526 7108/8600/7586 7100/8584/7584\nf 9525/8588/7513 7102/8587/7513 7110/8603/7524\nf 7110/8603/7524 9533/8604/7524 9525/8588/7513\nf 9528/8592/7523 7103/8591/7523 7111/8605/7534\nf 7111/8605/7534 9534/8606/7534 9528/8592/7523\nf 9529/8594/7521 7104/8593/7585 7112/8607/7587\nf 7112/8607/7587 9535/8608/7533 9529/8594/7521\nf 7104/8593/7585 7105/8595/7520 7113/8609/7532\nf 7113/8609/7532 7112/8607/7587 7104/8593/7585\nf 9531/8597/7518 9530/8596/7518 9536/8610/7530\nf 9536/8610/7530 9537/8611/7530 9531/8597/7518\nf 7106/8599/7529 7107/8598/7529 7115/8612/7588\nf 7115/8612/7588 7114/8613/7588 7106/8599/7529\nf 9532/8601/7527 7108/8600/7586 7116/8614/7589\nf 7116/8614/7589 9538/8615/7539 9532/8601/7527\nf 7108/8600/7586 7109/8602/7526 7117/8616/7538\nf 7117/8616/7538 7116/8614/7589 7108/8600/7586\nf 9539/8617/7535 9540/8618/7535 7118/8619/7536\nf 7118/8619/7536 9541/8620/7536 9539/8617/7535\nf 9534/8606/7534 7111/8605/7534 7119/8621/7546\nf 7119/8621/7546 9542/8622/7546 9534/8606/7534\nf 9535/8608/7533 7112/8607/7587 7120/8623/7590\nf 7120/8623/7590 9543/8624/7545 9535/8608/7533\nf 7112/8607/7587 7113/8609/7532 7121/8625/7591\nf 7121/8625/7591 7120/8623/7590 7112/8607/7587\nf 9544/8626/7541 9546/8627/7541 9545/8628/7542\nf 9545/8628/7542 9547/8629/7542 9544/8626/7541\nf 9548/8630/7551 9549/8631/7551 7123/8632/7592\nf 7123/8632/7592 7122/8633/7592 9548/8630/7551\nf 9538/8615/7539 7116/8614/7589 7124/8634/7593\nf 7124/8634/7593 9550/8635/7550 9538/8615/7539\nf 7116/8614/7589 7117/8616/7538 7125/8636/7549\nf 7125/8636/7549 7124/8634/7593 7116/8614/7589\nf 9541/8620/7536 7118/8619/7536 7126/8637/7594\nf 7126/8637/7594 9551/8638/7594 9541/8620/7536\nf 9552/8639/7556 9553/8640/7556 7127/8641/7557\nf 7127/8641/7557 9554/8642/7557 9552/8639/7556\nf 9543/8624/7545 7120/8623/7590 7128/8643/7595\nf 7128/8643/7595 9555/8644/7555 9543/8624/7545\nf 7120/8623/7590 7121/8625/7591 7129/8645/7554\nf 7129/8645/7554 7128/8643/7595 7120/8623/7590\nf 9547/8629/7542 9545/8628/7542 9556/8646/7552\nf 9556/8646/7552 9557/8647/7552 9547/8629/7542\nf 7122/8633/7592 7123/8632/7592 7131/8648/7562\nf 7131/8648/7562 7130/8649/7562 7122/8633/7592\nf 9550/8635/7550 7124/8634/7593 7132/8650/7596\nf 7132/8650/7596 9558/8651/7561 9550/8635/7550\nf 7124/8634/7593 7125/8636/7549 7133/8652/7560\nf 7133/8652/7560 7132/8650/7596 7124/8634/7593\nf 9559/8653/7558 9560/8654/7558 7134/8655/7597\nf 7134/8655/7597 9561/8656/7597 9559/8653/7558\nf 9554/8642/7557 7127/8641/7557 7135/8657/7598\nf 7135/8657/7598 9562/8658/7598 9554/8642/7557\nf 9555/8644/7555 7128/8643/7595 7136/8659/7599\nf 7136/8659/7599 9563/8660/7568 9555/8644/7555\nf 7128/8643/7595 7129/8645/7554 7137/8661/7567\nf 7137/8661/7567 7136/8659/7599 7128/8643/7595\nf 9564/8662/7563 9566/8663/7563 9565/8664/7565\nf 9565/8664/7565 9567/8665/7564 9564/8662/7563\nf 9565/8664/7565 9568/8666/7572 7011/8401/7480\nf 7011/8401/7480 7010/8400/7479 9565/8664/7565\nf 9558/8651/7561 7132/8650/7596 7012/8405/7483\nf 7012/8405/7483 9430/8404/1506 9558/8651/7561\nf 7132/8650/7596 7133/8652/7560 7013/8408/7486\nf 7013/8408/7486 7012/8405/7483 7132/8650/7596\nf 9561/8656/7597 7134/8655/7597 7014/8411/7489\nf 7014/8411/7489 9432/8410/7488 9561/8656/7597\nf 9569/8667/7576 9571/8668/7576 9570/8669/7576\nf 9570/8669/7576 9572/8670/7576 9569/8667/7576\nf 9563/8660/7568 7136/8659/7599 7016/8417/7494\nf 7016/8417/7494 9434/8416/7493 9563/8660/7568\nf 7136/8659/7599 7137/8661/7567 9573/8671/7574\nf 9573/8671/7574 7016/8417/7494 7136/8659/7599\nf 9567/8665/7564 9565/8664/7565 7010/8400/7479\nf 7010/8400/7479 9438/8424/7498 9567/8665/7564\nf 7200/8672/539 7138/8673/7600 7141/8674/7601\nf 7141/8674/7601 7273/8675/539 7200/8672/539\nf 7138/8673/7600 7139/8676/7602 7171/8677/7603\nf 7171/8677/7603 7141/8674/7601 7138/8673/7600\nf 7206/8678/539 7196/8679/7604 7144/8680/7605\nf 7144/8680/7605 7143/8681/7606 7206/8678/539\nf 7164/8682/7607 7163/8683/7608 7187/8684/7609\nf 7187/8684/7609 7188/8685/7610 7164/8682/7607\nf 7270/8686/7611 7143/8681/7606 7144/8680/7605\nf 7144/8680/7605 7174/8687/7612 7270/8686/7611\nf 7174/8687/7612 7145/8688/7613 7179/8689/7614\nf 7179/8689/7614 7147/8690/7615 7174/8687/7612\nf 7218/8691/7616 7198/8692/7616 7150/8693/7617\nf 7150/8693/7617 7149/8694/7618 7218/8691/7616\nf 7167/8695/7619 7166/8696/7620 7193/8697/7621\nf 7193/8697/7621 7194/8698/7621 7167/8695/7619\nf 7272/8699/7622 7149/8694/7618 7150/8693/7617\nf 7150/8693/7617 7182/8700/7623 7272/8699/7622\nf 7182/8700/7623 7151/8701/7624 7153/8702/7625\nf 7153/8702/7625 7152/8703/7626 7182/8700/7623\nf 7168/8704/7627 7142/8705/7628 7186/8706/7629\nf 7186/8706/7629 7154/8707/7630 7168/8704/7627\nf 7175/8708/7631 7173/8709/7632 7189/8710/7633\nf 7189/8710/7633 7156/8711/7634 7175/8708/7631\nf 7172/8712/7635 7162/8713/5423 7197/8714/5423\nf 7197/8714/5423 7157/8715/7636 7172/8712/7635\nf 7176/8716/7637 7148/8717/7637 7192/8718/7638\nf 7192/8718/7638 7158/8719/7639 7176/8716/7637\nf 7183/8720/7640 7181/8721/7640 7195/8722/7641\nf 7195/8722/7641 7160/8723/7642 7183/8720/7640\nf 7180/8724/7643 7165/8725/7644 7199/8726/7645\nf 7199/8726/7645 7161/8727/7646 7180/8724/7643\nf 7140/8728/539 7170/8729/7647 7196/8679/7604\nf 7196/8679/7604 7206/8678/539 7140/8728/539\nf 7184/8730/7648 7155/8731/7649 7163/8683/7608\nf 7163/8683/7608 7164/8682/7607 7184/8730/7648\nf 7162/8713/5423 7169/8732/5423 7185/8733/5423\nf 7185/8733/5423 7197/8714/5423 7162/8713/5423\nf 7146/8734/7650 7178/8735/7651 7198/8692/7616\nf 7198/8692/7616 7218/8691/7616 7146/8734/7650\nf 7190/8736/7652 7159/8737/7652 7166/8696/7620\nf 7166/8696/7620 7167/8695/7619 7190/8736/7652\nf 7165/8725/7644 7177/8738/7653 7191/8739/7654\nf 7191/8739/7654 7199/8726/7645 7165/8725/7644\nf 7141/8674/7601 9575/8740/7655 9574/8741/7656\nf 9574/8741/7656 7170/8729/7647 7141/8674/7601\nf 7144/8680/7605 9577/8742/7657 9576/8743/7658\nf 9576/8743/7658 7174/8687/7612 7144/8680/7605\nf 7147/8690/7615 9579/8744/7659 9578/8745/7660\nf 9578/8745/7660 7178/8735/7651 7147/8690/7615\nf 7150/8693/7617 9581/8746/7661 9580/8747/7662\nf 9580/8747/7662 7182/8700/7623 7150/8693/7617\nf 9582/8748/7663 9584/8749/7664 9583/8750/7665\nf 9585/8751/7666 9586/8752/7667 7189/8710/7633\nf 9587/8753/7668 9589/8754/7669 9588/8755/7670\nf 9590/8756/7671 9591/8757/7672 7195/8722/7641\nf 9575/8740/7655 7141/8674/7601 7171/8677/7603\nf 7171/8677/7603 9592/8758/7673 9575/8740/7655\nf 9593/8759/7674 9595/8760/7674 9594/8761/7674\nf 9594/8761/7674 9596/8762/7674 9593/8759/7674\nf 9597/8763/7675 7145/8688/7613 7174/8687/7612\nf 7174/8687/7612 9576/8743/7658 9597/8763/7675\nf 9579/8744/7659 7147/8690/7615 7179/8689/7614\nf 7179/8689/7614 9598/8764/7676 9579/8744/7659\nf 7180/8724/7643 9600/8765/7677 9599/8766/7678\nf 9599/8766/7678 7165/8725/7644 7180/8724/7643\nf 9601/8767/7679 7151/8701/7624 7182/8700/7623\nf 7182/8700/7623 9580/8747/7662 9601/8767/7679\nf 9602/8768/7680 7154/8707/7630 7186/8706/7629\nf 7186/8706/7629 9603/8769/7681 9602/8768/7680\nf 9604/8770/7682 7156/8711/7634 7189/8710/7633\nf 7189/8710/7633 9586/8752/7667 9604/8770/7682\nf 9605/8771/7683 9607/8772/7684 9606/8773/7685\nf 9606/8773/7685 9608/8774/7686 9605/8771/7683\nf 9609/8775/7687 7168/8704/7627 7154/8707/7630\nf 7154/8707/7630 9610/8776/7688 9609/8775/7687\nf 9611/8777/7689 7172/8712/7635 7157/8715/7636\nf 7157/8715/7636 9612/8778/7690 9611/8777/7689\nf 9613/8779/7691 7158/8719/7639 7192/8718/7638\nf 7192/8718/7638 9614/8780/7691 9613/8779/7691\nf 9615/8781/7692 7160/8723/7642 7195/8722/7641\nf 7195/8722/7641 9591/8757/7672 9615/8781/7692\nf 9616/8782/7693 7161/8727/7646 7199/8726/7645\nf 7199/8726/7645 9617/8783/7694 9616/8782/7693\nf 7177/8738/7653 9619/8784/7695 9618/8785/7695\nf 9618/8785/7695 7191/8739/7654 7177/8738/7653\nf 9620/8786/7696 7180/8724/7643 7161/8727/7646\nf 7161/8727/7646 9621/8787/7696 9620/8786/7696\nf 9622/8788/7674 7196/8679/7604 7170/8729/7647\nf 7170/8729/7647 9574/8741/7656 9622/8788/7674\nf 9623/8789/7697 9624/8790/7698 9583/8750/7665\nf 9583/8750/7665 9584/8749/7664 9623/8789/7697\nf 9625/8791/7699 9627/8792/7700 9626/8793/7701\nf 9626/8793/7701 9628/8794/7702 9625/8791/7699\nf 9629/8795/7703 9630/8796/7704 9588/8755/7670\nf 9588/8755/7670 9589/8754/7669 9629/8795/7703\nf 7201/8797/7705 7200/8672/539 7273/8675/539\nf 7273/8675/539 7202/8798/7706 7201/8797/7705\nf 7201/8797/7705 7202/8798/7706 7205/8799/7707\nf 7205/8799/7707 7204/8800/7708 7201/8797/7705\nf 7206/8678/539 7143/8681/7606 7208/8801/7709\nf 7208/8801/7709 7207/8802/7710 7206/8678/539\nf 7210/8803/7711 7209/8804/7712 7212/8805/7713\nf 7212/8805/7713 7211/8806/7714 7210/8803/7711\nf 7208/8801/7709 7143/8681/7606 7270/8686/7611\nf 7270/8686/7611 7213/8807/7715 7208/8801/7709\nf 7213/8807/7715 7214/8808/7716 7217/8809/7614\nf 7217/8809/7614 7216/8810/7717 7213/8807/7715\nf 7218/8691/7616 7149/8694/7618 7220/8811/7718\nf 7220/8811/7718 7219/8812/7616 7218/8691/7616\nf 7222/8813/7619 7221/8814/7621 7224/8815/7621\nf 7224/8815/7621 7223/8816/7620 7222/8813/7619\nf 7220/8811/7718 7149/8694/7618 7272/8699/7622\nf 7272/8699/7622 7226/8817/7719 7220/8811/7718\nf 7226/8817/7719 7227/8818/7720 7229/8819/7721\nf 7229/8819/7721 7228/8820/7722 7226/8817/7719\nf 7230/8821/7723 7233/8822/7724 7232/8823/7725\nf 7232/8823/7725 7231/8824/7726 7230/8821/7723\nf 7234/8825/7727 7237/8826/7728 7236/8827/7729\nf 7236/8827/7729 7235/8828/7730 7234/8825/7727\nf 7238/8829/7731 7241/8830/7732 7240/8831/5422\nf 7240/8831/5422 7239/8832/7733 7238/8829/7731\nf 7242/8833/7637 7245/8834/7639 7244/8835/7638\nf 7244/8835/7638 7243/8836/7637 7242/8833/7637\nf 7246/8837/7640 7249/8838/7642 7248/8839/7734\nf 7248/8839/7734 7247/8840/7640 7246/8837/7640\nf 7250/8841/7735 7253/8842/7736 7252/8843/7737\nf 7252/8843/7737 7251/8844/7738 7250/8841/7735\nf 7140/8728/539 7206/8678/539 7207/8802/7710\nf 7207/8802/7710 7203/8845/7739 7140/8728/539\nf 7254/8846/7740 7210/8803/7711 7211/8806/7714\nf 7211/8806/7714 7255/8847/7741 7254/8846/7740\nf 7239/8832/7733 7240/8831/5422 7257/8848/5422\nf 7257/8848/5422 7256/8849/5422 7239/8832/7733\nf 7146/8734/7650 7218/8691/7616 7219/8812/7616\nf 7219/8812/7616 7215/8850/7742 7146/8734/7650\nf 7258/8851/7652 7222/8813/7619 7223/8816/7620\nf 7223/8816/7620 7259/8852/7652 7258/8851/7652\nf 7251/8844/7738 7252/8843/7737 7261/8853/7743\nf 7261/8853/7743 7260/8854/7744 7251/8844/7738\nf 7202/8798/7706 7203/8845/7739 9631/8855/7745\nf 9631/8855/7745 9632/8856/7746 7202/8798/7706\nf 7208/8801/7709 7213/8807/7715 9633/8857/7747\nf 9633/8857/7747 9634/8858/7748 7208/8801/7709\nf 7214/8808/7716 7215/8850/7742 9635/8859/7749\nf 9635/8859/7749 9636/8860/7750 7214/8808/7716\nf 7220/8811/7718 7226/8817/7719 9637/8861/7751\nf 9637/8861/7751 9638/8862/7752 7220/8811/7718\nf 9639/8863/7753 9641/8864/7754 9640/8865/7755\nf 9642/8866/7756 7236/8827/7729 9643/8867/7757\nf 9644/8868/7758 9646/8869/7759 9645/8870/7760\nf 9647/8871/7761 7248/8839/7734 9648/8872/7762\nf 9632/8856/7746 9649/8873/7763 7205/8799/7707\nf 7205/8799/7707 7202/8798/7706 9632/8856/7746\nf 7238/8829/7731 7239/8832/7733 9650/8874/7764\nf 9650/8874/7764 9651/8875/7764 7238/8829/7731\nf 9652/8876/7765 9633/8857/7747 7213/8807/7715\nf 7213/8807/7715 7216/8810/7717 9652/8876/7765\nf 9636/8860/7750 9653/8877/7676 7217/8809/7614\nf 7217/8809/7614 7214/8808/7716 9636/8860/7750\nf 7250/8841/7735 7251/8844/7738 9654/8878/7766\nf 9654/8878/7766 9655/8879/7767 7250/8841/7735\nf 9656/8880/7768 9637/8861/7751 7226/8817/7719\nf 7226/8817/7719 7228/8820/7722 9656/8880/7768\nf 9657/8881/7769 9658/8882/7770 7232/8823/7725\nf 7232/8823/7725 7233/8822/7724 9657/8881/7769\nf 9659/8883/7771 9643/8867/7757 7236/8827/7729\nf 7236/8827/7729 7237/8826/7728 9659/8883/7771\nf 9660/8884/7772 9662/8885/7773 9661/8886/7774\nf 9661/8886/7774 9663/8887/7775 9660/8884/7772\nf 9664/8888/7776 9665/8889/7777 7233/8822/7724\nf 7233/8822/7724 7230/8821/7723 9664/8888/7776\nf 9666/8890/7778 9667/8891/7779 7241/8830/7732\nf 7241/8830/7732 7238/8829/7731 9666/8890/7778\nf 9668/8892/7691 9669/8893/7691 7244/8835/7638\nf 7244/8835/7638 7245/8834/7639 9668/8892/7691\nf 9670/8894/7692 9648/8872/7762 7248/8839/7734\nf 7248/8839/7734 7249/8838/7642 9670/8894/7692\nf 9671/8895/7780 9672/8896/7781 7252/8843/7737\nf 7252/8843/7737 7253/8842/7736 9671/8895/7780\nf 7260/8854/7744 7261/8853/7743 9673/8897/7782\nf 9673/8897/7782 9674/8898/7782 7260/8854/7744\nf 9675/8899/7783 9676/8900/7783 7253/8842/7736\nf 7253/8842/7736 7250/8841/7735 9675/8899/7783\nf 9677/8901/7764 9631/8855/7745 7203/8845/7739\nf 7203/8845/7739 7207/8802/7710 9677/8901/7764\nf 9678/8902/7784 9640/8865/7755 9641/8864/7754\nf 9641/8864/7754 9679/8903/7785 9678/8902/7784\nf 9680/8904/7786 9682/8905/7787 9681/8906/7788\nf 9681/8906/7788 9683/8907/7789 9680/8904/7786\nf 9684/8908/7790 9645/8870/7760 9646/8869/7759\nf 9646/8869/7759 9685/8909/7791 9684/8908/7790\nf 7147/8690/7615 7271/8910/7611 7270/8686/7611\nf 7270/8686/7611 7174/8687/7612 7147/8690/7615\nf 7271/8910/7611 7214/8808/7716 7213/8807/7715\nf 7213/8807/7715 7270/8686/7611 7271/8910/7611\nf 7147/8690/7615 7178/8735/7651 7146/8734/7650\nf 7146/8734/7650 7271/8910/7611 7147/8690/7615\nf 7271/8910/7611 7146/8734/7650 7215/8850/7742\nf 7215/8850/7742 7214/8808/7716 7271/8910/7611\nf 7152/8703/7626 7225/8911/7622 7272/8699/7622\nf 7272/8699/7622 7182/8700/7623 7152/8703/7626\nf 7225/8911/7622 7227/8818/7720 7226/8817/7719\nf 7226/8817/7719 7272/8699/7622 7225/8911/7622\nf 7170/8729/7647 7140/8728/539 7273/8675/539\nf 7273/8675/539 7141/8674/7601 7170/8729/7647\nf 7273/8675/539 7140/8728/539 7203/8845/7739\nf 7203/8845/7739 7202/8798/7706 7273/8675/539\nusemtl Material__803_chromeSub2\nf 5258/8912/7792 5257/8913/5422 5241/8914/5422\nf 5241/8914/5422 5242/8915/7792 5258/8912/7792\nf 5259/8916/7793 5258/8912/7792 5242/8915/7792\nf 5242/8915/7792 5243/8917/7793 5259/8916/7793\nf 5260/8918/7794 5259/8916/7793 5243/8917/7793\nf 5243/8917/7793 5244/8919/7794 5260/8918/7794\nf 5261/8920/7795 5260/8918/7794 5244/8919/7794\nf 5244/8919/7794 5245/8921/7795 5261/8920/7795\nf 5262/8922/7796 5261/8920/7795 5245/8921/7795\nf 5245/8921/7795 5246/8923/7796 5262/8922/7796\nf 5263/8924/7797 5262/8922/7796 5246/8923/7796\nf 5246/8923/7796 5247/8925/7797 5263/8924/7797\nf 5264/8926/7798 5263/8924/7797 5247/8925/7797\nf 5247/8925/7797 5248/8927/7798 5264/8926/7798\nf 5265/8928/5423 5264/8926/7798 5248/8927/7798\nf 5248/8927/7798 5249/8929/5423 5265/8928/5423\nf 5266/8930/7799 5265/8928/5423 5249/8929/5423\nf 5249/8929/5423 5250/8931/7799 5266/8930/7799\nf 5267/8932/7674 5266/8930/7799 5250/8931/7799\nf 5250/8931/7799 5251/8933/7674 5267/8932/7674\nf 5268/8934/7800 5267/8932/7674 5251/8933/7674\nf 5251/8933/7674 5252/8935/7800 5268/8934/7800\nf 5269/8936/539 5268/8934/7800 5252/8935/7800\nf 5252/8935/7800 5253/8937/539 5269/8936/539\nf 5270/8938/7801 5269/8936/539 5253/8937/539\nf 5253/8937/539 5254/8939/7801 5270/8938/7801\nf 5271/8940/7802 5270/8938/7801 5254/8939/7801\nf 5254/8939/7801 5255/8941/7802 5271/8940/7802\nf 5272/8942/7803 8018/8943/7804 8017/8944/7804\nf 8017/8944/7804 5256/8945/7803 5272/8942/7803\nf 5257/8913/5422 5272/8942/7803 5256/8945/7803\nf 5256/8945/7803 5241/8914/5422 5257/8913/5422\nf 8019/8946/1186 8021/8947/1186 8020/8948/1186\nf 8020/8948/1186 8023/8949/1186 8022/8950/1186\nf 8022/8950/1186 8025/8951/1186 8024/8952/1186\nf 8020/8948/1186 8022/8950/1186 8024/8952/1186\nf 8024/8952/1186 8027/8953/1186 8026/8954/1186\nf 8026/8954/1186 8029/8955/1186 8028/8956/1186\nf 8024/8952/1186 8026/8954/1186 8028/8956/1186\nf 8020/8948/1186 8024/8952/1186 8028/8956/1186\nf 8028/8956/1186 8031/8957/1186 8030/8958/1186\nf 8030/8958/1186 8033/8959/1186 8032/8960/1186\nf 8028/8956/1186 8030/8958/1186 8032/8960/1186\nf 8020/8948/1186 8028/8956/1186 8032/8960/1186\nf 8019/8946/1186 8020/8948/1186 8032/8960/1186\nf 8019/8946/1186 8032/8960/1186 8034/8961/1186\nf 5286/8962/7805 5285/8963/5422 5273/8964/5422\nf 5273/8964/5422 5274/8965/7805 5286/8962/7805\nf 5287/8966/7806 5286/8962/7805 5274/8965/7805\nf 5274/8965/7805 5275/8967/7806 5287/8966/7806\nf 5288/8968/7795 5287/8966/7806 5275/8967/7806\nf 5275/8967/7806 5276/8969/7795 5288/8968/7795\nf 5289/8970/7807 5288/8968/7795 5276/8969/7795\nf 5276/8969/7795 5277/8971/7807 5289/8970/7807\nf 5290/8972/7808 5289/8970/7807 5277/8971/7807\nf 5277/8971/7807 5278/8973/7808 5290/8972/7808\nf 5291/8974/5423 5290/8972/7808 5278/8973/7808\nf 5278/8973/7808 5279/8975/5423 5291/8974/5423\nf 5292/8976/7809 5291/8974/5423 5279/8975/5423\nf 5279/8975/5423 5280/8977/7809 5292/8976/7809\nf 5293/8978/7810 5292/8976/7809 5280/8977/7809\nf 5280/8977/7809 5281/8979/7810 5293/8978/7810\nf 5294/8980/539 5293/8978/7810 5281/8979/7810\nf 5281/8979/7810 5282/8981/539 5294/8980/539\nf 5295/8982/7811 5294/8980/539 5282/8981/539\nf 5282/8981/539 5283/8983/7811 5295/8982/7811\nf 5296/8984/7812 8036/8985/7764 8035/8986/7764\nf 8035/8986/7764 5284/8987/7812 5296/8984/7812\nf 5285/8963/5422 5296/8984/7812 5284/8987/7812\nf 5284/8987/7812 5273/8964/5422 5285/8963/5422\nf 8037/8988/1186 8039/8989/1186 8038/8990/1186\nf 8038/8990/1186 8041/8991/1186 8040/8992/1186\nf 8040/8992/1186 8043/8993/1186 8042/8994/1186\nf 8038/8990/1186 8040/8992/1186 8042/8994/1186\nf 8042/8994/1186 8045/8995/1186 8044/8996/1186\nf 8044/8996/1186 8047/8997/1186 8046/8998/1186\nf 8042/8994/1186 8044/8996/1186 8046/8998/1186\nf 8038/8990/1186 8042/8994/1186 8046/8998/1186\nf 8037/8988/1186 8038/8990/1186 8046/8998/1186\nf 8037/8988/1186 8046/8998/1186 8048/8999/1186\nf 5308/9000/7813 5307/9001/5422 5297/9002/5422\nf 5297/9002/5422 5298/9003/7813 5308/9000/7813\nf 5309/9004/7814 5308/9000/7813 5298/9003/7813\nf 5298/9003/7813 5299/9005/7814 5309/9004/7814\nf 5310/9006/7815 5309/9004/7814 5299/9005/7814\nf 5299/9005/7814 5300/9007/7815 5310/9006/7815\nf 5311/9008/7816 5310/9006/7815 5300/9007/7815\nf 5300/9007/7815 5301/9009/7816 5311/9008/7816\nf 5312/9010/5423 5311/9008/7816 5301/9009/7816\nf 5301/9009/7816 5302/9011/5423 5312/9010/5423\nf 5313/9012/7817 5312/9010/5423 5302/9011/5423\nf 5302/9011/5423 5303/9013/7817 5313/9012/7817\nf 5314/9014/7818 8050/9015/7819 8049/9016/7819\nf 8049/9016/7819 5304/9017/7818 5314/9014/7818\nf 5315/9018/7820 5314/9014/7818 5304/9017/7818\nf 5304/9017/7818 5305/9019/7820 5315/9018/7820\nf 5316/9020/7821 5315/9018/7820 5305/9019/7820\nf 5305/9019/7820 5306/9021/7821 5316/9020/7821\nf 5307/9001/5422 5316/9020/7821 5306/9021/7821\nf 5306/9021/7821 5297/9002/5422 5307/9001/5422\nf 8051/9022/1186 8053/9023/1186 8052/9024/1186\nf 8052/9024/1186 8055/9025/1186 8054/9026/1186\nf 8054/9026/1186 8057/9027/1186 8056/9028/1186\nf 8052/9024/1186 8054/9026/1186 8056/9028/1186\nf 8056/9028/1186 8059/9029/1186 8058/9030/1186\nf 8052/9024/1186 8056/9028/1186 8058/9030/1186\nf 8051/9022/1186 8052/9024/1186 8058/9030/1186\nf 8051/9022/1186 8058/9030/1186 8060/9031/1186\nf 5330/9032/7805 5329/9033/5422 5317/9034/5422\nf 5317/9034/5422 5318/9035/7805 5330/9032/7805\nf 5331/9036/7806 5330/9032/7805 5318/9035/7805\nf 5318/9035/7805 5319/9037/7806 5331/9036/7806\nf 5332/9038/7795 5331/9036/7806 5319/9037/7806\nf 5319/9037/7806 5320/9039/7795 5332/9038/7795\nf 5333/9040/7807 5332/9038/7795 5320/9039/7795\nf 5320/9039/7795 5321/9041/7807 5333/9040/7807\nf 5334/9042/7808 5333/9040/7807 5321/9041/7807\nf 5321/9041/7807 5322/9043/7808 5334/9042/7808\nf 5335/9044/5423 5334/9042/7808 5322/9043/7808\nf 5322/9043/7808 5323/9045/5423 5335/9044/5423\nf 5336/9046/7809 5335/9044/5423 5323/9045/5423\nf 5323/9045/5423 5324/9047/7809 5336/9046/7809\nf 5337/9048/7810 5336/9046/7809 5324/9047/7809\nf 5324/9047/7809 5325/9049/7810 5337/9048/7810\nf 5338/9050/539 5337/9048/7810 5325/9049/7810\nf 5325/9049/7810 5326/9051/539 5338/9050/539\nf 5339/9052/7811 5338/9050/539 5326/9051/539\nf 5326/9051/539 5327/9053/7811 5339/9052/7811\nf 5340/9054/7812 8062/9055/7764 8061/9056/7764\nf 8061/9056/7764 5328/9057/7812 5340/9054/7812\nf 5329/9033/5422 5340/9054/7812 5328/9057/7812\nf 5328/9057/7812 5317/9034/5422 5329/9033/5422\nf 8063/9058/1186 8065/9059/1186 8064/9060/1186\nf 8064/9060/1186 8067/9061/1186 8066/9062/1186\nf 8066/9062/1186 8069/9063/1186 8068/9064/1186\nf 8064/9060/1186 8066/9062/1186 8068/9064/1186\nf 8068/9064/1186 8071/9065/1186 8070/9066/1186\nf 8070/9066/1186 8073/9067/1186 8072/9068/1186\nf 8068/9064/1186 8070/9066/1186 8072/9068/1186\nf 8064/9060/1186 8068/9064/1186 8072/9068/1186\nf 8063/9058/1186 8064/9060/1186 8072/9068/1186\nf 8063/9058/1186 8072/9068/1186 8074/9069/1186\nf 5354/9070/7812 5353/9071/5422 5341/9072/5422\nf 5341/9072/5422 5342/9073/7812 5354/9070/7812\nf 5355/9074/7822 5354/9070/7812 5342/9073/7812\nf 5342/9073/7812 5343/9075/7822 5355/9074/7822\nf 5356/9076/539 5355/9074/7822 5343/9075/7822\nf 5343/9075/7822 5344/9077/539 5356/9076/539\nf 5357/9078/7810 5356/9076/539 5344/9077/539\nf 5344/9077/539 5345/9079/7810 5357/9078/7810\nf 5358/9080/7809 5357/9078/7810 5345/9079/7810\nf 5345/9079/7810 5346/9081/7809 5358/9080/7809\nf 5359/9082/5423 5358/9080/7809 5346/9081/7809\nf 5346/9081/7809 5347/9083/5423 5359/9082/5423\nf 5360/9084/7808 5359/9082/5423 5347/9083/5423\nf 5347/9083/5423 5348/9085/7808 5360/9084/7808\nf 5361/9086/7807 5360/9084/7808 5348/9085/7808\nf 5348/9085/7808 5349/9087/7807 5361/9086/7807\nf 5362/9088/7823 5361/9086/7807 5349/9087/7807\nf 5349/9087/7807 5350/9089/7823 5362/9088/7823\nf 5363/9090/7806 8076/9091/7824 8075/9092/7824\nf 8075/9092/7824 5351/9093/7806 5363/9090/7806\nf 5364/9094/7805 5363/9090/7806 5351/9093/7806\nf 5351/9093/7806 5352/9095/7805 5364/9094/7805\nf 5353/9071/5422 5364/9094/7805 5352/9095/7805\nf 5352/9095/7805 5341/9072/5422 5353/9071/5422\nf 8077/9096/5452 8079/9097/5452 8078/9098/5452\nf 8078/9098/5452 8081/9099/5452 8080/9100/5452\nf 8080/9100/5452 8083/9101/5452 8082/9102/5452\nf 8078/9098/5452 8080/9100/5452 8082/9102/5452\nf 8082/9102/5452 8085/9103/5452 8084/9104/5452\nf 8084/9104/5452 8087/9105/5452 8086/9106/5452\nf 8082/9102/5452 8084/9104/5452 8086/9106/5452\nf 8078/9098/5452 8082/9102/5452 8086/9106/5452\nf 8077/9096/5452 8078/9098/5452 8086/9106/5452\nf 8077/9096/5452 8086/9106/5452 8088/9107/5452\nf 5382/9108/7803 5381/9109/5422 5365/9110/5422\nf 5365/9110/5422 5366/9111/7803 5382/9108/7803\nf 5383/9112/7764 5382/9108/7803 5366/9111/7803\nf 5366/9111/7803 5367/9113/7764 5383/9112/7764\nf 5384/9114/7801 5383/9112/7764 5367/9113/7764\nf 5367/9113/7764 5368/9115/7801 5384/9114/7801\nf 5385/9116/539 5384/9114/7801 5368/9115/7801\nf 5368/9115/7801 5369/9117/539 5385/9116/539\nf 5386/9118/7800 5385/9116/539 5369/9117/539\nf 5369/9117/539 5370/9119/7800 5386/9118/7800\nf 5387/9120/7674 5386/9118/7800 5370/9119/7800\nf 5370/9119/7800 5371/9121/7674 5387/9120/7674\nf 5388/9122/7799 5387/9120/7674 5371/9121/7674\nf 5371/9121/7674 5372/9123/7799 5388/9122/7799\nf 5389/9124/5423 5388/9122/7799 5372/9123/7799\nf 5372/9123/7799 5373/9125/5423 5389/9124/5423\nf 5390/9126/7798 5389/9124/5423 5373/9125/5423\nf 5373/9125/5423 5374/9127/7798 5390/9126/7798\nf 5391/9128/7797 5390/9126/7798 5374/9127/7798\nf 5374/9127/7798 5375/9129/7797 5391/9128/7797\nf 5392/9130/7796 5391/9128/7797 5375/9129/7797\nf 5375/9129/7797 5376/9131/7796 5392/9130/7796\nf 5393/9132/7795 5392/9130/7796 5376/9131/7796\nf 5376/9131/7796 5377/9133/7795 5393/9132/7795\nf 5394/9134/7794 5393/9132/7795 5377/9133/7795\nf 5377/9133/7795 5378/9135/7794 5394/9134/7794\nf 5395/9136/7825 5394/9134/7794 5378/9135/7794\nf 5378/9135/7794 5379/9137/7825 5395/9136/7825\nf 5396/9138/7792 8090/9139/7826 8089/9140/7826\nf 8089/9140/7826 5380/9141/7792 5396/9138/7792\nf 5381/9109/5422 5396/9138/7792 5380/9141/7792\nf 5380/9141/7792 5365/9110/5422 5381/9109/5422\nf 8091/9142/5452 8093/9143/5452 8092/9144/5452\nf 8092/9144/5452 8095/9145/5452 8094/9146/5452\nf 8094/9146/5452 8097/9147/5452 8096/9148/5452\nf 8092/9144/5452 8094/9146/5452 8096/9148/5452\nf 8096/9148/5452 8099/9149/5452 8098/9150/5452\nf 8098/9150/5452 8101/9151/5452 8100/9152/5452\nf 8096/9148/5452 8098/9150/5452 8100/9152/5452\nf 8092/9144/5452 8096/9148/5452 8100/9152/5452\nf 8100/9152/5452 8103/9153/5452 8102/9154/5452\nf 8102/9154/5452 8105/9155/5452 8104/9156/5452\nf 8100/9152/5452 8102/9154/5452 8104/9156/5452\nf 8092/9144/5452 8100/9152/5452 8104/9156/5452\nf 8091/9142/5452 8092/9144/5452 8104/9156/5452\nf 8091/9142/5452 8104/9156/5452 8106/9157/5452\nf 5408/9158/7821 5407/9159/5422 5397/9160/5422\nf 5397/9160/5422 5398/9161/7821 5408/9158/7821\nf 5409/9162/7820 5408/9158/7821 5398/9161/7821\nf 5398/9161/7821 5399/9163/7820 5409/9162/7820\nf 5410/9164/7818 5409/9162/7820 5399/9163/7820\nf 5399/9163/7820 5400/9165/7818 5410/9164/7818\nf 5411/9166/7827 5410/9164/7818 5400/9165/7818\nf 5400/9165/7818 5401/9167/7827 5411/9166/7827\nf 5412/9168/5423 5411/9166/7827 5401/9167/7827\nf 5401/9167/7827 5402/9169/5423 5412/9168/5423\nf 5413/9170/7816 5412/9168/5423 5402/9169/5423\nf 5402/9169/5423 5403/9171/7816 5413/9170/7816\nf 5414/9172/7815 5413/9170/7816 5403/9171/7816\nf 5403/9171/7816 5404/9173/7815 5414/9172/7815\nf 5415/9174/7814 5414/9172/7815 5404/9173/7815\nf 5404/9173/7815 5405/9175/7814 5415/9174/7814\nf 5416/9176/7828 5415/9174/7814 5405/9175/7814\nf 5405/9175/7814 5406/9177/7828 5416/9176/7828\nf 5407/9159/5422 8108/9178/7829 8107/9179/7829\nf 8107/9179/7829 5397/9160/5422 5407/9159/5422\nf 8109/9180/5452 8111/9181/5452 8110/9182/5452\nf 8110/9182/5452 8113/9183/5452 8112/9184/5452\nf 8112/9184/5452 8115/9185/5452 8114/9186/5452\nf 8110/9182/5452 8112/9184/5452 8114/9186/5452\nf 8114/9186/5452 8117/9187/5452 8116/9188/5452\nf 8110/9182/5452 8114/9186/5452 8116/9188/5452\nf 8109/9180/5452 8110/9182/5452 8116/9188/5452\nf 8109/9180/5452 8116/9188/5452 8118/9189/5452\nf 5430/9190/7812 5429/9191/5422 5417/9192/5422\nf 5417/9192/5422 5418/9193/7812 5430/9190/7812\nf 5431/9194/7822 5430/9190/7812 5418/9193/7812\nf 5418/9193/7812 5419/9195/7822 5431/9194/7822\nf 5432/9196/539 5431/9194/7822 5419/9195/7822\nf 5419/9195/7822 5420/9197/539 5432/9196/539\nf 5433/9198/7810 5432/9196/539 5420/9197/539\nf 5420/9197/539 5421/9199/7810 5433/9198/7810\nf 5434/9200/7809 5433/9198/7810 5421/9199/7810\nf 5421/9199/7810 5422/9201/7809 5434/9200/7809\nf 5435/9202/5423 5434/9200/7809 5422/9201/7809\nf 5422/9201/7809 5423/9203/5423 5435/9202/5423\nf 5436/9204/7808 5435/9202/5423 5423/9203/5423\nf 5423/9203/5423 5424/9205/7808 5436/9204/7808\nf 5437/9206/7807 5436/9204/7808 5424/9205/7808\nf 5424/9205/7808 5425/9207/7807 5437/9206/7807\nf 5438/9208/7795 5437/9206/7807 5425/9207/7807\nf 5425/9207/7807 5426/9209/7795 5438/9208/7795\nf 5439/9210/7824 5438/9208/7795 5426/9209/7795\nf 5426/9209/7795 5427/9211/7824 5439/9210/7824\nf 5440/9212/7805 8120/9213/7793 8119/9214/7793\nf 8119/9214/7793 5428/9215/7805 5440/9212/7805\nf 5429/9191/5422 5440/9212/7805 5428/9215/7805\nf 5428/9215/7805 5417/9192/5422 5429/9191/5422\nf 5474/9216/5452 5475/9217/5452 5476/9218/5452\nf 5476/9218/5452 5465/9219/5452 5466/9220/5452\nf 5466/9220/5452 5467/9221/5452 5468/9222/5452\nf 5476/9218/5452 5466/9220/5452 5468/9222/5452\nf 5468/9222/5452 5469/9223/5452 5470/9224/5452\nf 5470/9224/5452 5471/9225/5452 5472/9226/5452\nf 5468/9222/5452 5470/9224/5452 5472/9226/5452\nf 5476/9218/5452 5468/9222/5452 5472/9226/5452\nf 5474/9216/5452 5476/9218/5452 5472/9226/5452\nf 5474/9216/5452 5472/9226/5452 5473/9227/5452\nf 5441/9228/7830 8122/9229/7830 8121/9230/7831\nf 8121/9230/7831 5442/9231/7831 5441/9228/7830\nf 5442/9231/7831 8121/9230/7831 8123/9232/7832\nf 8123/9232/7832 5443/9233/7832 5442/9231/7831\nf 5443/9233/7832 8123/9232/7832 8124/9234/7833\nf 8124/9234/7833 5444/9235/7833 5443/9233/7832\nf 5444/9235/7833 8124/9234/7833 8125/9236/7834\nf 8125/9236/7834 5445/9237/7835 5444/9235/7833\nf 5445/9237/7835 8125/9236/7834 8126/9238/7836\nf 8126/9238/7836 5446/9239/7836 5445/9237/7835\nf 5446/9239/7836 8126/9238/7836 8127/9240/7837\nf 8127/9240/7837 5447/9241/7837 5446/9239/7836\nf 5447/9241/7837 8127/9240/7837 8128/9242/7838\nf 8128/9242/7838 5448/9243/7838 5447/9241/7837\nf 5448/9243/7838 8128/9242/7838 8129/9244/7839\nf 8129/9244/7839 5449/9245/7839 5448/9243/7838\nf 5449/9245/7839 8129/9244/7839 8130/9246/7840\nf 8130/9246/7840 5450/9247/7840 5449/9245/7839\nf 5450/9247/7840 8130/9246/7840 8131/9248/7841\nf 8131/9248/7841 5451/9249/7841 5450/9247/7840\nf 5451/9249/7841 8131/9248/7841 8132/9250/7842\nf 8132/9250/7842 5452/9251/7842 5451/9249/7841\nf 5452/9251/7842 8132/9250/7842 8122/9229/7830\nf 8122/9229/7830 5441/9228/7830 5452/9251/7842\nf 5454/9252/5452 5453/9253/5452 8133/9254/5452\nf 8133/9254/5452 8134/9255/5452 5454/9252/5452\nf 5455/9256/5452 5454/9252/5452 8134/9255/5452\nf 8134/9255/5452 8135/9257/5452 5455/9256/5452\nf 5456/9258/5452 5455/9256/5452 8135/9257/5452\nf 8135/9257/5452 8136/9259/5452 5456/9258/5452\nf 5457/9260/5452 5456/9258/5452 8136/9259/5452\nf 8136/9259/5452 8137/9261/5452 5457/9260/5452\nf 5458/9262/5452 5457/9260/5452 8137/9261/5452\nf 8137/9261/5452 8138/9263/5452 5458/9262/5452\nf 5459/9264/5452 5458/9262/5452 8138/9263/5452\nf 8138/9263/5452 8139/9265/5452 5459/9264/5452\nf 5460/9266/5452 5459/9264/5452 8139/9265/5452\nf 8139/9265/5452 8140/9267/5452 5460/9266/5452\nf 5461/9268/5452 5460/9266/5452 8140/9267/5452\nf 8140/9267/5452 8141/9269/5452 5461/9268/5452\nf 5462/9270/5452 5461/9268/5452 8141/9269/5452\nf 8141/9269/5452 8142/9271/5452 5462/9270/5452\nf 5463/9272/5452 5462/9270/5452 8142/9271/5452\nf 8142/9271/5452 8143/9273/5452 5463/9272/5452\nf 5464/9274/5452 5463/9272/5452 8143/9273/5452\nf 8143/9273/5452 8144/9275/5452 5464/9274/5452\nf 5453/9253/5452 5464/9274/5452 8144/9275/5452\nf 8144/9275/5452 8133/9254/5452 5453/9253/5452\nf 8145/9276/7808 8147/9277/5423 8146/9278/5423\nf 8146/9278/5423 8148/9279/7808 8145/9276/7808\nf 8149/9280/7807 8145/9276/7808 8148/9279/7808\nf 8148/9279/7808 8150/9281/7807 8149/9280/7807\nf 8151/9282/7795 8149/9280/7807 8150/9281/7807\nf 8150/9281/7807 8152/9283/7795 8151/9282/7795\nf 8153/9284/7806 8151/9282/7795 8152/9283/7795\nf 8152/9283/7795 8154/9285/7806 8153/9284/7806\nf 8155/9286/7805 8153/9284/7806 8154/9285/7806\nf 8154/9285/7806 8156/9287/7805 8155/9286/7805\nf 8157/9288/5422 8155/9286/7805 8156/9287/7805\nf 8156/9287/7805 8158/9289/5422 8157/9288/5422\nf 8159/9290/7812 8157/9288/5422 8158/9289/5422\nf 8158/9289/5422 8160/9291/7812 8159/9290/7812\nf 8161/9292/7822 8159/9290/7812 8160/9291/7812\nf 8160/9291/7812 8162/9293/7822 8161/9292/7822\nf 8163/9294/539 8161/9292/7822 8162/9293/7822\nf 8162/9293/7822 8164/9295/539 8163/9294/539\nf 8165/9296/7810 8163/9294/539 8164/9295/539\nf 8164/9295/539 8166/9297/7810 8165/9296/7810\nf 8167/9298/7674 8165/9296/7810 8166/9297/7810\nf 8166/9297/7810 8168/9299/7674 8167/9298/7674\nf 8147/9277/5423 8170/9300/7843 8169/9301/7843\nf 8169/9301/7843 8146/9278/5423 8147/9277/5423\nf 5477/9302/5423 5493/9303/5423 5494/9304/7798\nf 5494/9304/7798 5478/9305/7798 5477/9302/5423\nf 5478/9305/7798 5494/9304/7798 5495/9306/7797\nf 5495/9306/7797 5479/9307/7797 5478/9305/7798\nf 5479/9307/7797 5495/9306/7797 5496/9308/7796\nf 5496/9308/7796 5480/9309/7796 5479/9307/7797\nf 5480/9309/7796 5496/9308/7796 5497/9310/7795\nf 5497/9310/7795 5481/9311/7795 5480/9309/7796\nf 5481/9311/7795 5497/9310/7795 5498/9312/7794\nf 5498/9312/7794 5482/9313/7794 5481/9311/7795\nf 5482/9313/7794 5498/9312/7794 5499/9314/7793\nf 5499/9314/7793 5483/9315/7793 5482/9313/7794\nf 5483/9315/7793 5499/9314/7793 5500/9316/7792\nf 5500/9316/7792 5484/9317/7792 5483/9315/7793\nf 5484/9317/7792 5500/9316/7792 5501/9318/5422\nf 5501/9318/5422 5485/9319/5422 5484/9317/7792\nf 5485/9319/5422 5501/9318/5422 5502/9320/7803\nf 5502/9320/7803 5486/9321/7803 5485/9319/5422\nf 5486/9321/7803 5502/9320/7803 5503/9322/7764\nf 5503/9322/7764 5487/9323/7764 5486/9321/7803\nf 5487/9323/7764 5503/9322/7764 5504/9324/7801\nf 5504/9324/7801 5488/9325/7801 5487/9323/7764\nf 5488/9325/7801 5504/9324/7801 5505/9326/539\nf 5505/9326/539 5489/9327/539 5488/9325/7801\nf 5489/9327/539 5505/9326/539 5506/9328/7800\nf 5506/9328/7800 5490/9329/7800 5489/9327/539\nf 5490/9329/7800 5506/9328/7800 5507/9330/7844\nf 5507/9330/7844 5491/9331/7844 5490/9329/7800\nf 8171/9332/7845 8172/9333/7845 5508/9334/7799\nf 5508/9334/7799 5492/9335/7799 8171/9332/7845\nf 5492/9335/7799 5508/9334/7799 5493/9303/5423\nf 5493/9303/5423 5477/9302/5423 5492/9335/7799\nf 8173/9336/1186 8175/9337/1186 8174/9338/1186\nf 8174/9338/1186 8177/9339/1186 8176/9340/1186\nf 8173/9336/1186 8174/9338/1186 8176/9340/1186\nf 8176/9340/1186 8179/9341/1186 8178/9342/1186\nf 8178/9342/1186 8181/9343/1186 8180/9344/1186\nf 8176/9340/1186 8178/9342/1186 8180/9344/1186\nf 8173/9336/1186 8176/9340/1186 8180/9344/1186\nf 8180/9344/1186 8183/9345/1186 8182/9346/1186\nf 8182/9346/1186 8185/9347/1186 8184/9348/1186\nf 8180/9344/1186 8182/9346/1186 8184/9348/1186\nf 8173/9336/1186 8180/9344/1186 8184/9348/1186\nf 8184/9348/1186 8187/9349/1186 8186/9350/1186\nf 8173/9336/1186 8184/9348/1186 8186/9350/1186\nf 8188/9351/1186 8173/9336/1186 8186/9350/1186\nf 5509/9352/5423 5521/9353/5423 5522/9354/7808\nf 5522/9354/7808 5510/9355/7808 5509/9352/5423\nf 5510/9355/7808 5522/9354/7808 5523/9356/7807\nf 5523/9356/7807 5511/9357/7807 5510/9355/7808\nf 5511/9357/7807 5523/9356/7807 5524/9358/7795\nf 5524/9358/7795 5512/9359/7795 5511/9357/7807\nf 5512/9359/7795 5524/9358/7795 5525/9360/7806\nf 5525/9360/7806 5513/9361/7806 5512/9359/7795\nf 5513/9361/7806 5525/9360/7806 5526/9362/7805\nf 5526/9362/7805 5514/9363/7805 5513/9361/7806\nf 5514/9363/7805 5526/9362/7805 5527/9364/5422\nf 5527/9364/5422 5515/9365/5422 5514/9363/7805\nf 5515/9365/5422 5527/9364/5422 5528/9366/7812\nf 5528/9366/7812 5516/9367/7812 5515/9365/5422\nf 5516/9367/7812 5528/9366/7812 5529/9368/7822\nf 5529/9368/7822 5517/9369/7822 5516/9367/7812\nf 5517/9369/7822 5529/9368/7822 5530/9370/539\nf 5530/9370/539 5518/9371/539 5517/9369/7822\nf 5518/9371/539 5530/9370/539 5531/9372/7846\nf 5531/9372/7846 5519/9373/7846 5518/9371/539\nf 8189/9374/7674 8190/9375/7674 5532/9376/7809\nf 5532/9376/7809 5520/9377/7809 8189/9374/7674\nf 5520/9377/7809 5532/9376/7809 5521/9353/5423\nf 5521/9353/5423 5509/9352/5423 5520/9377/7809\nf 8191/9378/1186 8193/9379/1186 8192/9380/1186\nf 8192/9380/1186 8195/9381/1186 8194/9382/1186\nf 8191/9378/1186 8192/9380/1186 8194/9382/1186\nf 8194/9382/1186 8197/9383/1186 8196/9384/1186\nf 8196/9384/1186 8199/9385/1186 8198/9386/1186\nf 8194/9382/1186 8196/9384/1186 8198/9386/1186\nf 8191/9378/1186 8194/9382/1186 8198/9386/1186\nf 8198/9386/1186 8201/9387/1186 8200/9388/1186\nf 8191/9378/1186 8198/9386/1186 8200/9388/1186\nf 8202/9389/1186 8191/9378/1186 8200/9388/1186\nf 5533/9390/5423 5543/9391/5423 5544/9392/7816\nf 5544/9392/7816 5534/9393/7816 5533/9390/5423\nf 5534/9393/7816 5544/9392/7816 5545/9394/7815\nf 5545/9394/7815 5535/9395/7815 5534/9393/7816\nf 5535/9395/7815 5545/9394/7815 5546/9396/7814\nf 5546/9396/7814 5536/9397/7814 5535/9395/7815\nf 5536/9397/7814 5546/9396/7814 5547/9398/7813\nf 5547/9398/7813 5537/9399/7813 5536/9397/7814\nf 5537/9399/7813 5547/9398/7813 5548/9400/5422\nf 5548/9400/5422 5538/9401/5422 5537/9399/7813\nf 5538/9401/5422 5548/9400/5422 5549/9402/7847\nf 5549/9402/7847 5539/9403/7847 5538/9401/5422\nf 8203/9404/7848 8204/9405/7848 5550/9406/7820\nf 5550/9406/7820 5540/9407/7820 8203/9404/7848\nf 5540/9407/7820 5550/9406/7820 5551/9408/7818\nf 5551/9408/7818 5541/9409/7818 5540/9407/7820\nf 5541/9409/7818 5551/9408/7818 5552/9410/7827\nf 5552/9410/7827 5542/9411/7827 5541/9409/7818\nf 5542/9411/7827 5552/9410/7827 5543/9391/5423\nf 5543/9391/5423 5533/9390/5423 5542/9411/7827\nf 8205/9412/1186 8207/9413/1186 8206/9414/1186\nf 8206/9414/1186 8209/9415/1186 8208/9416/1186\nf 8205/9412/1186 8206/9414/1186 8208/9416/1186\nf 8208/9416/1186 8211/9417/1186 8210/9418/1186\nf 8205/9412/1186 8208/9416/1186 8210/9418/1186\nf 8210/9418/1186 8213/9419/1186 8212/9420/1186\nf 8205/9412/1186 8210/9418/1186 8212/9420/1186\nf 8214/9421/1186 8205/9412/1186 8212/9420/1186\nf 5553/9422/5423 5565/9423/5423 5566/9424/7808\nf 5566/9424/7808 5554/9425/7808 5553/9422/5423\nf 5554/9425/7808 5566/9424/7808 5567/9426/7807\nf 5567/9426/7807 5555/9427/7807 5554/9425/7808\nf 5555/9427/7807 5567/9426/7807 5568/9428/7795\nf 5568/9428/7795 5556/9429/7795 5555/9427/7807\nf 5556/9429/7795 5568/9428/7795 5569/9430/7806\nf 5569/9430/7806 5557/9431/7806 5556/9429/7795\nf 5557/9431/7806 5569/9430/7806 5570/9432/7805\nf 5570/9432/7805 5558/9433/7805 5557/9431/7806\nf 5558/9433/7805 5570/9432/7805 5571/9434/5422\nf 5571/9434/5422 5559/9435/5422 5558/9433/7805\nf 5559/9435/5422 5571/9434/5422 5572/9436/7812\nf 5572/9436/7812 5560/9437/7812 5559/9435/5422\nf 5560/9437/7812 5572/9436/7812 5573/9438/7822\nf 5573/9438/7822 5561/9439/7822 5560/9437/7812\nf 5561/9439/7822 5573/9438/7822 5574/9440/539\nf 5574/9440/539 5562/9441/539 5561/9439/7822\nf 5562/9441/539 5574/9440/539 5575/9442/7846\nf 5575/9442/7846 5563/9443/7846 5562/9441/539\nf 8215/9444/7674 8216/9445/7674 5576/9446/7809\nf 5576/9446/7809 5564/9447/7809 8215/9444/7674\nf 5564/9447/7809 5576/9446/7809 5565/9423/5423\nf 5565/9423/5423 5553/9422/5423 5564/9447/7809\nf 8217/9448/1186 8219/9449/1186 8218/9450/1186\nf 8218/9450/1186 8221/9451/1186 8220/9452/1186\nf 8217/9448/1186 8218/9450/1186 8220/9452/1186\nf 8220/9452/1186 8223/9453/1186 8222/9454/1186\nf 8222/9454/1186 8225/9455/1186 8224/9456/1186\nf 8220/9452/1186 8222/9454/1186 8224/9456/1186\nf 8217/9448/1186 8220/9452/1186 8224/9456/1186\nf 8224/9456/1186 8227/9457/1186 8226/9458/1186\nf 8217/9448/1186 8224/9456/1186 8226/9458/1186\nf 8228/9459/1186 8217/9448/1186 8226/9458/1186\nf 5577/9460/5423 5589/9461/5423 5590/9462/7809\nf 5590/9462/7809 5578/9463/7809 5577/9460/5423\nf 5578/9463/7809 5590/9462/7809 5591/9464/7810\nf 5591/9464/7810 5579/9465/7810 5578/9463/7809\nf 5579/9465/7810 5591/9464/7810 5592/9466/539\nf 5592/9466/539 5580/9467/539 5579/9465/7810\nf 5580/9467/539 5592/9466/539 5593/9468/7822\nf 5593/9468/7822 5581/9469/7822 5580/9467/539\nf 5581/9469/7822 5593/9468/7822 5594/9470/7812\nf 5594/9470/7812 5582/9471/7812 5581/9469/7822\nf 5582/9471/7812 5594/9470/7812 5595/9472/5422\nf 5595/9472/5422 5583/9473/5422 5582/9471/7812\nf 5583/9473/5422 5595/9472/5422 5596/9474/7805\nf 5596/9474/7805 5584/9475/7805 5583/9473/5422\nf 5584/9475/7805 5596/9474/7805 5597/9476/7806\nf 5597/9476/7806 5585/9477/7806 5584/9475/7805\nf 5585/9477/7806 5597/9476/7806 5598/9478/7824\nf 5598/9478/7824 5586/9479/7824 5585/9477/7806\nf 8229/9480/7823 8230/9481/7823 5599/9482/7807\nf 5599/9482/7807 5587/9483/7807 8229/9480/7823\nf 5587/9483/7807 5599/9482/7807 5600/9484/7808\nf 5600/9484/7808 5588/9485/7808 5587/9483/7807\nf 5588/9485/7808 5600/9484/7808 5589/9461/5423\nf 5589/9461/5423 5577/9460/5423 5588/9485/7808\nf 8231/9486/5452 8233/9487/5452 8232/9488/5452\nf 8232/9488/5452 8235/9489/5452 8234/9490/5452\nf 8231/9486/5452 8232/9488/5452 8234/9490/5452\nf 8234/9490/5452 8237/9491/5452 8236/9492/5452\nf 8236/9492/5452 8239/9493/5452 8238/9494/5452\nf 8234/9490/5452 8236/9492/5452 8238/9494/5452\nf 8231/9486/5452 8234/9490/5452 8238/9494/5452\nf 8238/9494/5452 8241/9495/5452 8240/9496/5452\nf 8231/9486/5452 8238/9494/5452 8240/9496/5452\nf 8242/9497/5452 8231/9486/5452 8240/9496/5452\nf 5601/9498/5423 5617/9499/5423 5618/9500/7799\nf 5618/9500/7799 5602/9501/7799 5601/9498/5423\nf 5602/9501/7799 5618/9500/7799 5619/9502/7674\nf 5619/9502/7674 5603/9503/7674 5602/9501/7799\nf 5603/9503/7674 5619/9502/7674 5620/9504/7800\nf 5620/9504/7800 5604/9505/7800 5603/9503/7674\nf 5604/9505/7800 5620/9504/7800 5621/9506/539\nf 5621/9506/539 5605/9507/539 5604/9505/7800\nf 5605/9507/539 5621/9506/539 5622/9508/7801\nf 5622/9508/7801 5606/9509/7801 5605/9507/539\nf 5606/9509/7801 5622/9508/7801 5623/9510/7764\nf 5623/9510/7764 5607/9511/7764 5606/9509/7801\nf 5607/9511/7764 5623/9510/7764 5624/9512/7803\nf 5624/9512/7803 5608/9513/7803 5607/9511/7764\nf 5608/9513/7803 5624/9512/7803 5625/9514/5422\nf 5625/9514/5422 5609/9515/5422 5608/9513/7803\nf 5609/9515/5422 5625/9514/5422 5626/9516/7792\nf 5626/9516/7792 5610/9517/7792 5609/9515/5422\nf 5610/9517/7792 5626/9516/7792 5627/9518/7793\nf 5627/9518/7793 5611/9519/7793 5610/9517/7792\nf 5611/9519/7793 5627/9518/7793 5628/9520/7794\nf 5628/9520/7794 5612/9521/7794 5611/9519/7793\nf 5612/9521/7794 5628/9520/7794 5629/9522/7795\nf 5629/9522/7795 5613/9523/7795 5612/9521/7794\nf 5613/9523/7795 5629/9522/7795 5630/9524/7796\nf 5630/9524/7796 5614/9525/7796 5613/9523/7795\nf 5614/9525/7796 5630/9524/7796 5631/9526/7849\nf 5631/9526/7849 5615/9527/7849 5614/9525/7796\nf 8243/9528/7850 8244/9529/7850 5632/9530/7798\nf 5632/9530/7798 5616/9531/7798 8243/9528/7850\nf 5616/9531/7798 5632/9530/7798 5617/9499/5423\nf 5617/9499/5423 5601/9498/5423 5616/9531/7798\nf 8245/9532/5452 8247/9533/5452 8246/9534/5452\nf 8246/9534/5452 8249/9535/5452 8248/9536/5452\nf 8245/9532/5452 8246/9534/5452 8248/9536/5452\nf 8248/9536/5452 8251/9537/5452 8250/9538/5452\nf 8250/9538/5452 8253/9539/5452 8252/9540/5452\nf 8248/9536/5452 8250/9538/5452 8252/9540/5452\nf 8245/9532/5452 8248/9536/5452 8252/9540/5452\nf 8252/9540/5452 8255/9541/5452 8254/9542/5452\nf 8254/9542/5452 8257/9543/5452 8256/9544/5452\nf 8252/9540/5452 8254/9542/5452 8256/9544/5452\nf 8245/9532/5452 8252/9540/5452 8256/9544/5452\nf 8256/9544/5452 8259/9545/5452 8258/9546/5452\nf 8245/9532/5452 8256/9544/5452 8258/9546/5452\nf 8260/9547/5452 8245/9532/5452 8258/9546/5452\nf 5633/9548/5423 5643/9549/5423 5644/9550/7827\nf 5644/9550/7827 5634/9551/7827 5633/9548/5423\nf 5634/9551/7827 5644/9550/7827 5645/9552/7818\nf 5645/9552/7818 5635/9553/7818 5634/9551/7827\nf 5635/9553/7818 5645/9552/7818 5646/9554/7820\nf 5646/9554/7820 5636/9555/7820 5635/9553/7818\nf 5636/9555/7820 5646/9554/7820 5647/9556/7821\nf 5647/9556/7821 5637/9557/7821 5636/9555/7820\nf 5637/9557/7821 5647/9556/7821 5648/9558/5422\nf 5648/9558/5422 5638/9559/5422 5637/9557/7821\nf 5638/9559/5422 5648/9558/5422 5649/9560/7813\nf 5649/9560/7813 5639/9561/7813 5638/9559/5422\nf 5639/9561/7813 5649/9560/7813 5650/9562/7814\nf 5650/9562/7814 5640/9563/7814 5639/9561/7813\nf 5640/9563/7814 5650/9562/7814 5651/9564/7815\nf 5651/9564/7815 5641/9565/7815 5640/9563/7814\nf 5641/9565/7815 5651/9564/7815 5652/9566/7851\nf 5652/9566/7851 5642/9567/7851 5641/9565/7815\nf 8261/9568/7852 8262/9569/7852 5643/9549/5423\nf 5643/9549/5423 5633/9548/5423 8261/9568/7852\nf 8263/9570/5452 8265/9571/5452 8264/9572/5452\nf 8264/9572/5452 8267/9573/5452 8266/9574/5452\nf 8263/9570/5452 8264/9572/5452 8266/9574/5452\nf 8266/9574/5452 8269/9575/5452 8268/9576/5452\nf 8263/9570/5452 8266/9574/5452 8268/9576/5452\nf 8268/9576/5452 8271/9577/5452 8270/9578/5452\nf 8263/9570/5452 8268/9576/5452 8270/9578/5452\nf 8272/9579/5452 8263/9570/5452 8270/9578/5452\nf 5653/9580/5423 5665/9581/5423 5666/9582/7809\nf 5666/9582/7809 5654/9583/7809 5653/9580/5423\nf 5654/9583/7809 5666/9582/7809 5667/9584/7810\nf 5667/9584/7810 5655/9585/7810 5654/9583/7809\nf 5655/9585/7810 5667/9584/7810 5668/9586/539\nf 5668/9586/539 5656/9587/539 5655/9585/7810\nf 5656/9587/539 5668/9586/539 5669/9588/7822\nf 5669/9588/7822 5657/9589/7822 5656/9587/539\nf 5657/9589/7822 5669/9588/7822 5670/9590/7812\nf 5670/9590/7812 5658/9591/7812 5657/9589/7822\nf 5658/9591/7812 5670/9590/7812 5671/9592/5422\nf 5671/9592/5422 5659/9593/5422 5658/9591/7812\nf 5659/9593/5422 5671/9592/5422 5672/9594/7805\nf 5672/9594/7805 5660/9595/7805 5659/9593/5422\nf 5660/9595/7805 5672/9594/7805 5673/9596/7806\nf 5673/9596/7806 5661/9597/7806 5660/9595/7805\nf 5661/9597/7806 5673/9596/7806 5674/9598/7795\nf 5674/9598/7795 5662/9599/7795 5661/9597/7806\nf 5662/9599/7795 5674/9598/7795 5675/9600/7823\nf 5675/9600/7823 5663/9601/7823 5662/9599/7795\nf 8273/9602/7797 8274/9603/7797 5676/9604/7808\nf 5676/9604/7808 5664/9605/7808 8273/9602/7797\nf 5664/9605/7808 5676/9604/7808 5665/9581/5423\nf 5665/9581/5423 5653/9580/5423 5664/9605/7808\nf 5712/9606/5452 5711/9607/5452 5710/9608/5452\nf 5710/9608/5452 5709/9609/5452 5708/9610/5452\nf 5712/9606/5452 5710/9608/5452 5708/9610/5452\nf 5708/9610/5452 5707/9611/5452 5706/9612/5452\nf 5706/9612/5452 5705/9613/5452 5704/9614/5452\nf 5708/9610/5452 5706/9612/5452 5704/9614/5452\nf 5712/9606/5452 5708/9610/5452 5704/9614/5452\nf 5704/9614/5452 5703/9615/5452 5702/9616/5452\nf 5712/9606/5452 5704/9614/5452 5702/9616/5452\nf 5701/9617/5452 5712/9606/5452 5702/9616/5452\nf 8275/9618/7836 8276/9619/7853 5677/9620/7853\nf 5677/9620/7853 5678/9621/7836 8275/9618/7836\nf 8277/9622/7834 8275/9618/7836 5678/9621/7836\nf 5678/9621/7836 5679/9623/7834 8277/9622/7834\nf 8278/9624/7833 8277/9622/7834 5679/9623/7834\nf 5679/9623/7834 5680/9625/7833 8278/9624/7833\nf 8279/9626/7854 8278/9624/7833 5680/9625/7833\nf 5680/9625/7833 5681/9627/7854 8279/9626/7854\nf 8280/9628/7831 8279/9626/7854 5681/9627/7854\nf 5681/9627/7854 5682/9629/7831 8280/9628/7831\nf 8281/9630/7830 8280/9628/7831 5682/9629/7831\nf 5682/9629/7831 5683/9631/7830 8281/9630/7830\nf 8282/9632/7842 8281/9630/7830 5683/9631/7830\nf 5683/9631/7830 5684/9633/7842 8282/9632/7842\nf 8283/9634/7841 8282/9632/7842 5684/9633/7842\nf 5684/9633/7842 5685/9635/7841 8283/9634/7841\nf 8284/9636/7840 8283/9634/7841 5685/9635/7841\nf 5685/9635/7841 5686/9637/7840 8284/9636/7840\nf 8285/9638/7839 8284/9636/7840 5686/9637/7840\nf 5686/9637/7840 5687/9639/7839 8285/9638/7839\nf 8286/9640/7838 8285/9638/7839 5687/9639/7839\nf 5687/9639/7839 5688/9641/7838 8286/9640/7838\nf 8276/9619/7853 8286/9640/7838 5688/9641/7838\nf 5688/9641/7838 5677/9620/7853 8276/9619/7853\nf 8287/9642/5452 5689/9643/5452 5690/9644/5452\nf 5690/9644/5452 8288/9645/5452 8287/9642/5452\nf 8288/9645/5452 5690/9644/5452 5691/9646/5452\nf 5691/9646/5452 8289/9647/5452 8288/9645/5452\nf 8289/9647/5452 5691/9646/5452 5692/9648/5452\nf 5692/9648/5452 8290/9649/5452 8289/9647/5452\nf 8290/9649/5452 5692/9648/5452 5693/9650/5452\nf 5693/9650/5452 8291/9651/5452 8290/9649/5452\nf 8291/9651/5452 5693/9650/5452 5694/9652/5452\nf 5694/9652/5452 8292/9653/5452 8291/9651/5452\nf 8292/9653/5452 5694/9652/5452 5695/9654/5452\nf 5695/9654/5452 8293/9655/5452 8292/9653/5452\nf 8293/9655/5452 5695/9654/5452 5696/9656/5452\nf 5696/9656/5452 8294/9657/5452 8293/9655/5452\nf 8294/9657/5452 5696/9656/5452 5697/9658/5452\nf 5697/9658/5452 8295/9659/5452 8294/9657/5452\nf 8295/9659/5452 5697/9658/5452 5698/9660/5452\nf 5698/9660/5452 8296/9661/5452 8295/9659/5452\nf 8296/9661/5452 5698/9660/5452 5699/9662/5452\nf 5699/9662/5452 8297/9663/5452 8296/9661/5452\nf 8297/9663/5452 5699/9662/5452 5700/9664/5452\nf 5700/9664/5452 8298/9665/5452 8297/9663/5452\nf 8298/9665/5452 5700/9664/5452 5689/9643/5452\nf 5689/9643/5452 8287/9642/5452 8298/9665/5452\nf 8299/9666/5422 8301/9667/5422 8300/9668/7805\nf 8300/9668/7805 8302/9669/7805 8299/9666/5422\nf 8302/9669/7805 8300/9668/7805 8303/9670/7806\nf 8303/9670/7806 8304/9671/7806 8302/9669/7805\nf 8304/9671/7806 8303/9670/7806 8305/9672/7795\nf 8305/9672/7795 8306/9673/7795 8304/9671/7806\nf 8306/9673/7795 8305/9672/7795 8307/9674/7807\nf 8307/9674/7807 8308/9675/7807 8306/9673/7795\nf 8308/9675/7807 8307/9674/7807 8309/9676/7808\nf 8309/9676/7808 8310/9677/7808 8308/9675/7807\nf 8310/9677/7808 8309/9676/7808 8311/9678/5423\nf 8311/9678/5423 8312/9679/5423 8310/9677/7808\nf 8312/9679/5423 8311/9678/5423 8313/9680/7809\nf 8313/9680/7809 8314/9681/7809 8312/9679/5423\nf 8314/9681/7809 8313/9680/7809 8315/9682/7810\nf 8315/9682/7810 8316/9683/7810 8314/9681/7809\nf 8316/9683/7810 8315/9682/7810 8317/9684/539\nf 8317/9684/539 8318/9685/539 8316/9683/7810\nf 8318/9685/539 8317/9684/539 8319/9686/7822\nf 8319/9686/7822 8320/9687/7822 8318/9685/539\nf 8320/9687/7822 8319/9686/7822 8321/9688/7764\nf 8321/9688/7764 8322/9689/7764 8320/9687/7822\nf 8323/9690/7855 8324/9691/7855 8301/9667/5422\nf 8301/9667/5422 8299/9666/5422 8323/9690/7855\n"
  },
  {
    "path": "src/JitterDemo/assets/dragon.LICENSE",
    "content": "This file is licensed under the Creative Commons Attribution-Share Alike 4.0 International license.\nhttps://creativecommons.org/licenses/by-sa/4.0/deed.en\n\nhttp://graphics.stanford.edu/data/3Dscanrep/\nhttp://www-graphics.stanford.edu\n\nsee: https://en.wikipedia.org/wiki/Stanford_dragon\n"
  },
  {
    "path": "src/JitterDemo/assets/level.LICENSE",
    "content": "de_dust2 1.6 by CalciumOxide on Thingiverse: https://www.thingiverse.com/thing:3481976\n\nThis thing was created by Thingiverse user CalciumOxide, and is licensed under cc-nc.\n\nhttps://creativecommons.org/licenses/by-nc/4.0/\n"
  },
  {
    "path": "src/JitterDemo/assets/level.obj",
    "content": "# Blender v3.0.1 OBJ File: 'level.blend'\n# www.blender.org\nmtllib level.mtl\no de_dust2_Full\nv -42.219818 20.410124 84.395325\nv -38.989807 13.950089 84.395325\nv -42.219818 13.950089 84.395325\nv -38.989807 20.410124 84.395325\nv -35.759796 20.410124 90.855347\nv -42.219818 20.410124 90.855347\nv -38.989807 20.410124 81.165283\nv -35.759796 20.410124 81.165283\nv -35.759796 13.950089 81.165283\nv -38.989807 13.950089 81.165283\nv -77.750031 7.490053 65.015198\nv -90.670105 7.490053 32.715027\nv -90.670105 7.490053 65.015198\nv -77.750031 7.490053 32.715027\nv -64.829956 7.490053 65.015198\nv -68.059967 7.490053 32.715027\nv -64.829956 7.490053 32.715027\nv -64.829956 7.490053 55.325134\nv -59.984924 7.490053 55.325134\nv -59.984924 7.490053 52.095154\nv -58.369904 7.490053 32.715027\nv -59.177429 7.490053 51.287659\nv -58.369904 7.490053 51.287659\nv -90.670105 9.105062 31.100037\nv -90.670105 9.105062 32.715027\nv -90.670105 13.950089 26.255005\nv -90.670105 13.950089 31.100037\nv -90.670105 -5.000000 90.855347\nv -90.670105 13.950089 90.855347\nv -90.670105 -5.000000 26.255005\nv -80.980042 -5.000000 26.255005\nv -85.825073 9.105062 26.255005\nv -85.825073 13.950089 26.255005\nv -80.980042 9.105062 26.255005\nv -35.759796 13.950089 90.855347\nv -59.984924 -5.000000 52.095154\nv -59.984924 7.490053 65.015198\nv -59.984924 -5.000000 65.015198\nv -59.984924 12.335080 65.015198\nv -59.984924 12.335080 55.325134\nv -64.829956 12.335080 65.015198\nv -42.219818 13.950089 90.855347\nv -58.369904 -5.000000 65.015198\nv -58.369904 13.950089 69.860229\nv -58.369904 -5.000000 69.860229\nv -58.369904 13.950089 65.822693\nv -58.369904 15.565098 65.822693\nv -58.369904 15.565098 65.015198\nv -77.750031 8.297558 32.715027\nv -77.750031 9.105062 32.715027\nv -76.135010 8.297558 31.100037\nv -76.135010 9.105062 31.100037\nv -70.482483 13.950089 65.822693\nv -77.750031 15.565098 65.015198\nv -58.369904 9.105062 32.715027\nv -64.829956 8.297558 32.715027\nv -64.829956 9.105062 32.715027\nv -68.059967 8.297558 32.715027\nv -66.444946 9.105062 31.100037\nv -68.059967 8.297558 31.100037\nv -66.444946 8.297558 31.100037\nv -68.059967 9.105062 31.100037\nv -77.750031 13.950089 90.855347\nv -76.942505 15.565098 90.855347\nv -76.942505 13.950089 90.855347\nv -77.750031 15.565098 90.855347\nv -76.942505 13.950089 75.512756\nv -76.942505 13.950089 79.550293\nv -64.829956 12.335080 55.325134\nv -76.942505 15.565098 65.822693\nv -73.712494 17.180107 75.512756\nv -73.712494 13.950089 75.512756\nv -76.942505 17.180107 75.512756\nv -73.712494 13.950089 72.282776\nv -73.712494 17.180107 72.282776\nv -76.942505 17.180107 72.282776\nv -70.482483 20.410124 72.282776\nv -70.482483 13.950089 72.282776\nv -70.482483 20.410124 65.822693\nv -76.942505 20.410124 65.822693\nv -85.825073 13.950089 31.100037\nv -85.825073 9.105062 31.100037\nv -76.942505 20.410124 72.282776\nv -100.360138 13.950089 90.855347\nv -100.360138 -5.000000 108.281006\nv -100.360138 13.950089 108.281006\nv -100.360138 -5.000000 90.855347\nv -80.172546 9.105062 25.447510\nv -80.172546 -5.000000 25.447510\nv -80.172546 9.105062 23.024963\nv -80.172546 -5.000000 23.024963\nv -74.519989 -5.000000 23.024963\nv -74.519989 9.105062 23.024963\nv -79.365021 9.105062 23.024963\nv -68.059967 -5.000000 23.024963\nv -58.369904 9.105062 23.024963\nv -58.369904 -5.000000 23.024963\nv -68.059967 9.105062 23.024963\nv -58.369904 -5.000000 51.287659\nv -59.177429 -5.000000 51.287659\nv -56.754913 13.950089 71.475281\nv -56.754913 -5.000000 71.475281\nv -35.759796 13.950089 71.475281\nv -35.759796 -5.000000 71.475281\nv -35.759796 -5.000000 90.855347\nv -64.829956 7.490053 -86.795654\nv -59.984924 -5.000000 -86.795654\nv -64.829956 -5.000000 -86.795654\nv -59.984924 7.490053 -86.795654\nv -64.829956 -5.000000 -87.603149\nv -64.829956 7.490053 -87.603149\nv -0.229614 1.030018 -26.232788\nv -0.229614 -5.000000 -26.232788\nv -1.844604 -5.000000 -26.232788\nv -1.844604 1.030018 -26.232788\nv -87.440063 9.105062 -64.993042\nv -90.670105 9.105062 -68.223022\nv -90.670105 9.105062 -64.993042\nv -89.862579 9.105062 -84.373047\nv -89.862579 9.105062 -86.795654\nv -89.055084 9.105062 -99.715698\nv -87.440063 9.105062 -99.715698\nv -87.440063 9.105062 -94.870605\nv -87.440063 9.105062 -64.185547\nv -82.595062 9.105062 -90.025635\nv -80.980042 9.105062 -64.993042\nv -80.172546 9.105062 -87.603149\nv -75.327515 9.105062 -64.993042\nv -75.327515 9.105062 -87.603149\nv -82.595062 9.105062 -94.870605\nv -93.092590 9.105062 -87.603149\nv -93.900116 9.105062 -98.100708\nv -93.900116 9.105062 -87.603149\nv -90.670105 9.105062 -98.100708\nv -92.285095 9.105062 -86.795654\nv -90.670105 9.105062 -101.330688\nv -89.055084 9.105062 -101.330688\nv -93.900116 9.105062 -73.067993\nv -93.900116 9.105062 -68.223022\nv -93.092590 9.105062 -73.067993\nv -92.285095 9.105062 -73.875488\nv -92.285095 9.105062 -84.373047\nv -89.055084 13.950089 -101.330688\nv -90.670105 12.335080 -101.330688\nv -90.670105 13.950089 -101.330688\nv -90.670105 12.335080 -98.100708\nv -93.900116 12.335080 -98.100708\nv -93.900116 15.565098 -101.330688\nv -93.900116 15.565098 -98.100708\nv -93.900116 17.180107 -106.175781\nv -93.900116 13.950089 -102.945679\nv -93.900116 17.180107 -102.945679\nv -93.900116 -5.000000 -87.603149\nv -93.900116 -5.000000 -106.175781\nv -93.900116 13.950089 -101.330688\nv -93.900116 9.105062 -106.175781\nv -93.092590 -5.000000 -87.603149\nv -92.285095 -5.000000 -86.795654\nv -92.285095 13.950089 -86.795654\nv -89.862579 13.950089 -86.795654\nv -89.862579 13.950089 -84.373047\nv -92.285095 13.950089 -84.373047\nv -79.365021 9.105062 0.869080\nv -80.980042 -5.000000 0.414856\nv -79.365021 -5.000000 0.869080\nv -80.980042 9.105062 0.414856\nv 15.920471 7.490053 45.635132\nv 19.150513 -5.000000 48.865112\nv 19.150513 7.490053 48.865112\nv 15.920471 -5.000000 45.635132\nv 38.530640 -5.000000 -12.505188\nv 38.530640 7.490053 -17.350220\nv 38.530640 12.335080 -12.505188\nv 38.530640 -5.000000 -43.125366\nv 38.530640 7.490053 -31.885376\nv 38.530640 10.720071 -31.885376\nv 38.530640 12.335080 -31.885376\nv 38.530640 12.335080 -40.767822\nv 38.530640 15.565098 -40.767822\nv 38.530640 18.795116 -40.767822\nv 38.530640 13.950089 -43.125366\nv 38.530640 18.795116 -43.997925\nv 38.530640 12.335080 -43.125366\nv 38.530640 13.950089 -43.997925\nv 38.530640 15.565098 -43.997925\nv 38.530640 12.335080 -17.350220\nv 1.385437 -5.000000 -21.387817\nv 2.192932 7.490053 -20.580200\nv 2.192932 -5.000000 -20.580200\nv 1.385437 7.490053 -21.387817\nv 77.290833 7.490053 -39.960327\nv 78.905823 -5.000000 -39.960327\nv 77.290833 -5.000000 -39.960327\nv 78.905823 7.490053 -39.960327\nv 78.905823 7.490053 -46.420410\nv 78.905823 -5.000000 -46.420410\nv 94.248413 10.720071 42.405090\nv 94.248413 -5.000000 46.968140\nv 94.248413 10.720071 46.968140\nv 94.248413 -5.000000 42.405090\nv 40.145630 13.950089 -43.125366\nv 40.145630 -5.000000 -43.125366\nv 38.530640 12.335080 -43.997925\nv -90.670105 -5.000000 -12.505188\nv -97.130127 -5.000000 0.414856\nv -97.130127 -5.000000 -12.505188\nv -84.210052 -5.000000 -12.505188\nv -84.210052 -5.000000 -31.885376\nv -71.289978 -5.000000 -12.505188\nv -78.204254 -5.000000 2.029846\nv -77.750031 -5.000000 3.644897\nv -77.750031 -5.000000 10.104919\nv -74.519989 -5.000000 10.104919\nv -74.519989 -5.000000 17.281006\nv -71.289978 -5.000000 -9.275208\nv -68.059967 -5.000000 17.281006\nv -70.835754 -5.000000 -7.660156\nv -69.674988 -5.000000 -6.499390\nv -68.059967 -5.000000 -6.045166\nv -64.829956 -5.000000 6.874878\nv -48.679871 -5.000000 -6.045166\nv -46.257355 -5.000000 6.874878\nv -82.595062 -5.000000 -106.175781\nv -92.285095 -5.000000 -73.875488\nv -90.670105 -5.000000 -31.885376\nv -82.595062 -5.000000 -90.025635\nv -76.942505 -5.000000 -31.885376\nv -80.172546 -5.000000 -87.603149\nv -74.519989 -5.000000 -29.462769\nv -74.519989 -5.000000 -22.195312\nv -68.059967 -5.000000 -25.425293\nv -58.369904 -5.000000 -35.115356\nv -55.139893 -5.000000 -81.950562\nv -55.139893 -5.000000 -35.115356\nv -55.139893 -5.000000 -46.420410\nv -13.149658 -5.000000 108.281006\nv -13.149658 -5.000000 90.855347\nv -13.149658 -5.000000 26.255005\nv -16.379669 -5.000000 29.485046\nv -16.379669 -5.000000 26.255005\nv -16.379669 -5.000000 48.865112\nv -13.149658 -5.000000 48.865112\nv -13.149658 -5.000000 -15.735229\nv -13.149658 -5.000000 -9.275208\nv -14.764679 -5.000000 -18.965210\nv -48.679871 -5.000000 -18.965210\nv -38.989807 -5.000000 -6.045166\nv -43.834839 -5.000000 6.067383\nv -41.412323 -5.000000 4.452393\nv -39.797302 -5.000000 2.029846\nv -14.764679 -5.000000 -6.045166\nv -19.609711 -5.000000 45.635132\nv -19.609711 -5.000000 32.715027\nv -38.989807 -5.000000 -0.392639\nv -64.829956 -5.000000 10.104919\nv -68.059967 -5.000000 -22.195312\nv -3.459595 -5.000000 45.635132\nv 6.230469 -5.000000 29.485046\nv 12.690491 -5.000000 45.635132\nv -1.844604 -5.000000 -22.195312\nv 1.385437 -5.000000 -22.195312\nv 6.230469 -5.000000 -9.275208\nv 9.460449 -5.000000 32.715027\nv 12.690491 -5.000000 32.715027\nv 32.070557 -5.000000 32.715027\nv 19.150513 -5.000000 81.165283\nv 20.765503 -5.000000 -69.030518\nv 15.920471 -5.000000 -62.570435\nv 15.920471 -5.000000 -69.030518\nv 17.535522 -5.000000 -44.805420\nv 20.765503 -5.000000 -44.805420\nv 27.225586 -5.000000 -69.030518\nv 25.610535 -5.000000 -44.805420\nv 25.610535 -5.000000 -20.580200\nv 37.723145 -5.000000 -80.335571\nv 25.610535 -5.000000 -71.453003\nv 25.610535 -5.000000 -80.335571\nv 26.418030 -5.000000 -71.453003\nv 27.225586 -5.000000 -70.645508\nv 44.990662 -5.000000 -2.815186\nv 38.530640 -5.000000 6.874878\nv 38.530640 -5.000000 3.644897\nv 38.530640 -5.000000 19.794983\nv 40.145630 -5.000000 19.794983\nv 40.145630 -5.000000 23.024963\nv 40.145630 -5.000000 42.405090\nv 40.145630 -5.000000 45.635132\nv 64.370789 -5.000000 -80.335571\nv 52.258179 -5.000000 -79.528076\nv 52.258179 -5.000000 -80.335571\nv 51.450684 -5.000000 -78.720581\nv 38.530640 -5.000000 -78.720581\nv 40.145630 -5.000000 -44.805420\nv 64.370789 -5.000000 -44.805420\nv 64.370789 -5.000000 -46.420410\nv 51.450684 -5.000000 23.832520\nv 49.835693 -5.000000 23.832520\nv 51.450684 -5.000000 42.405090\nv 35.300598 -5.000000 45.635132\nv 35.300598 -5.000000 77.935303\nv 49.835693 -5.000000 77.935303\nv 49.835693 -5.000000 19.794983\nv 38.530640 -5.000000 42.405090\nv 38.530640 -5.000000 23.024963\nv 15.920471 -5.000000 -22.195312\nv 9.460449 -5.000000 -21.387817\nv 9.460449 -5.000000 -22.195312\nv 9.460449 -5.000000 -12.505188\nv 15.920471 -5.000000 -20.580200\nv 20.765503 -5.000000 -12.505188\nv 20.765503 -5.000000 -20.580200\nv 37.723145 -5.000000 -79.528076\nv -11.534668 -5.000000 -22.195312\nv -13.149658 -5.000000 -22.195312\nv -13.149658 -5.000000 19.794983\nv -6.689636 -5.000000 81.165283\nv 12.690491 -5.000000 108.038696\nv -6.689636 -5.000000 48.865112\nv -6.689636 -5.000000 75.455383\nv -3.459595 -5.000000 84.395325\nv 12.690491 -5.000000 84.395325\nv 15.920471 -5.000000 84.395325\nv 32.070557 -5.000000 108.038696\nv 11.075439 -5.000000 -57.725464\nv 12.690491 -5.000000 -41.575317\nv 8.652954 -5.000000 -20.580200\nv -51.909882 -5.000000 -81.950562\nv -51.909882 -5.000000 -46.420410\nv -51.909882 -5.000000 -79.047241\nv -47.064850 -5.000000 -79.047241\nv -51.909882 -5.000000 -44.805420\nv -47.064850 -5.000000 -71.453003\nv -17.994690 -5.000000 -44.805420\nv -44.642334 -5.000000 -71.453003\nv -38.989807 -5.000000 -70.645508\nv -18.169495 -5.000000 -70.645508\nv -14.764679 -5.000000 -67.516602\nv -13.149658 -5.000000 -39.960327\nv -0.229614 -5.000000 -67.415527\nv -13.149658 -5.000000 -26.232788\nv -11.534668 -5.000000 -26.232788\nv 90.210876 -5.000000 -96.485718\nv 64.370789 -5.000000 -96.485718\nv 103.130981 -5.000000 -57.725464\nv 93.440918 -5.000000 -28.655273\nv 90.210876 -5.000000 -57.725464\nv 96.670959 -5.000000 -31.885376\nv 103.130981 -5.000000 -31.885376\nv 103.130981 -5.000000 6.874878\nv 103.130981 -5.000000 46.968140\nv 77.290833 -5.000000 -2.815186\nv 77.290833 -5.000000 42.405090\nv 77.290833 -5.000000 45.635132\nv 93.440918 -5.000000 45.635132\nv 58.718201 -5.000000 19.794983\nv 61.140747 -5.000000 22.217468\nv 61.140747 -5.000000 46.968140\nv 75.675842 -5.000000 42.405090\nv 75.675842 -5.000000 46.968140\nv -93.092590 -5.000000 -73.067993\nv -93.900116 -5.000000 -56.110474\nv -93.900116 -5.000000 -73.067993\nv -93.900116 -5.000000 -46.420410\nv -93.900116 -5.000000 -31.885376\nv -94.707611 -5.000000 -46.420410\nv -94.707611 -5.000000 -56.110474\nv 93.440918 -1.392496 45.635132\nv 49.835693 7.490053 77.935303\nv 49.835693 7.490053 44.272461\nv 49.835693 7.490053 43.818237\nv 49.835693 7.490053 42.405090\nv 19.150513 7.490053 81.165283\nv 93.440918 11.527575 42.405090\nv 94.248413 11.527575 42.405090\nv 49.835693 7.490053 23.832520\nv 51.450684 7.490053 42.405090\nv 51.450684 7.490053 28.677490\nv 51.450684 12.335080 28.677490\nv 51.450684 12.335080 23.832520\nv 8.652954 7.490053 -20.580200\nv 9.460449 7.490053 -21.387817\nv -55.139893 7.490053 -35.115356\nv -58.369904 7.490053 -35.115356\nv -82.595062 9.105062 -106.175781\nv -82.595062 13.950089 -94.870605\nv -87.440063 13.950089 -94.870605\nv 32.070557 12.335080 -31.885376\nv 25.610535 12.335080 -56.917969\nv 25.610535 12.335080 -31.885376\nv 26.418030 12.335080 -56.917969\nv 27.225586 12.335080 -57.725464\nv 27.225586 12.335080 -69.030518\nv 27.225586 12.335080 -70.645508\nv 35.300598 12.335080 -40.767822\nv 32.878113 12.335080 -31.885376\nv 26.418030 12.335080 -71.453003\nv 25.610535 12.335080 -80.335571\nv 25.610535 12.335080 -71.453003\nv 37.723145 12.335080 -80.335571\nv 35.300598 12.335080 -43.997925\nv 37.723145 12.335080 -79.528076\nv 76.483337 12.335080 -58.532959\nv 68.408264 12.335080 -59.340454\nv 68.408264 12.335080 -58.532959\nv 68.408264 12.335080 -61.762939\nv 69.165344 12.335080 -64.942505\nv 73.253296 12.335080 -66.608032\nv 76.483337 12.335080 -66.608032\nv 38.530640 12.335080 -78.720581\nv 38.530640 12.335080 -44.805420\nv 39.338135 12.335080 -44.805420\nv 39.338135 12.335080 -63.377930\nv 51.450684 12.335080 -78.720581\nv 57.910706 12.335080 -63.377930\nv 52.258179 12.335080 -79.528076\nv 52.258179 12.335080 -80.335571\nv 64.370789 12.335080 -80.335571\nv 65.178284 12.335080 -63.377930\nv 64.370789 12.335080 -81.143066\nv 66.793274 12.335080 -81.143066\nv 65.228760 12.335080 -62.620972\nv 65.985779 12.335080 -65.554443\nv 66.036255 12.335080 -65.750000\nv 73.253296 12.335080 -81.143066\nv 73.253296 12.335080 -69.838013\nv 76.483337 12.335080 -69.838013\nv 76.483337 12.335080 -81.143066\nv 65.985779 12.335080 -62.425537\nv 65.985779 12.335080 -61.762939\nv 68.357788 12.335080 -61.813477\nv 65.178284 12.335080 -61.762939\nv -87.440063 13.950089 -99.715698\nv -82.595062 15.565098 -99.715698\nv -82.595062 13.950089 -99.715698\nv -89.055084 15.565098 -99.715698\nv -16.379669 13.950089 26.255005\nv -13.149658 7.490053 26.255005\nv -13.149658 10.720071 26.255005\nv -13.149658 13.950089 26.255005\nv 77.290833 12.335080 -57.725464\nv 64.370789 7.490053 -57.725464\nv 77.290833 7.490053 -57.725464\nv 64.370789 12.335080 -57.725464\nv -74.519989 7.490053 -87.603149\nv -74.519989 10.720071 -87.603149\nv -75.327515 10.720071 -87.603149\nv -97.130127 15.565098 -12.505188\nv -97.130127 9.105062 -6.045166\nv -97.130127 15.565098 -6.045166\nv -97.130127 9.105062 0.414856\nv 0.577881 7.490053 -10.890198\nv 0.577881 9.105062 -22.195312\nv -0.229614 9.105062 -22.195312\nv -0.229614 7.490053 -22.195312\nv -1.844604 1.030018 -22.195312\nv -0.229614 1.030018 -22.195312\nv 1.385437 7.490053 -22.195312\nv 76.483337 13.142585 -82.758057\nv 74.060791 12.335080 -82.758057\nv 76.483337 12.335080 -82.758057\nv 74.060791 13.142585 -82.758057\nv 51.450684 13.950089 -2.815186\nv 61.140747 7.490053 -2.815186\nv 57.910706 10.720071 -2.815186\nv 57.910706 13.950089 -2.815186\nv 61.140747 10.720071 -2.815186\nv 57.910706 7.490053 0.414856\nv 57.910706 13.950089 3.644897\nv 57.910706 7.490053 3.644897\nv 57.910706 10.720071 0.414856\nv 61.140747 10.720071 0.414856\nv -45.449829 9.105062 0.414856\nv -46.257355 5.875044 0.414856\nv -45.449829 5.875044 0.414856\nv -46.257355 6.682549 0.414856\nv -47.064850 6.682549 0.414856\nv -47.064850 7.490053 0.414856\nv -48.679871 7.490053 0.414856\nv -48.679871 8.297558 0.414856\nv -50.294861 8.297558 0.414856\nv -50.294861 9.105062 0.414856\nv -45.449829 4.260036 -1.200134\nv -45.449829 5.067540 -0.392639\nv -45.449829 4.260036 -0.392639\nv -45.449829 3.452531 -2.815186\nv -45.449829 3.452531 -1.200134\nv -45.449829 2.645027 -4.430176\nv -45.449829 2.645027 -2.815186\nv -45.449829 1.837522 -6.045166\nv -45.449829 1.837522 -4.430176\nv -45.449829 5.067540 0.414856\nv -45.449829 9.912567 0.414856\nv -45.449829 9.912567 -6.045166\nv -51.909882 9.105062 0.414856\nv -51.909882 9.912567 0.414856\nv 33.685608 7.490053 -12.505188\nv 20.765503 7.490053 -20.580200\nv 20.765503 7.490053 -12.505188\nv 25.610535 7.490053 -20.580200\nv 25.610535 7.490053 -23.810303\nv 32.070557 7.490053 -22.195312\nv 32.878113 7.490053 -22.195312\nv 32.878113 7.490053 -24.617798\nv 32.878113 7.490053 -31.885376\nv 33.685608 7.490053 -17.350220\nv 32.070557 7.490053 -23.810303\nv 61.140747 7.490053 0.414856\nv 9.460449 7.490053 -22.195312\nv 12.690491 7.490053 -22.195312\nv 15.920471 13.950089 -22.195312\nv 12.690491 10.720071 -22.195312\nv 12.690491 13.950089 -22.195312\nv 12.690491 7.490053 -18.965210\nv 12.690491 10.720071 -18.965210\nv 12.690491 13.950089 -18.965210\nv 15.920471 13.950089 -18.965210\nv -55.139893 7.490053 -81.950562\nv -51.909882 18.795116 -81.950562\nv -55.139893 18.795116 -81.950562\nv -54.332397 20.410124 -81.950562\nv -52.717377 20.410124 -81.950562\nv -55.139893 13.950089 -78.720581\nv -55.139893 7.490053 -78.720581\nv -55.139893 14.757593 -78.720581\nv -55.139893 18.795116 -78.720581\nv 14.305481 5.875044 -60.955444\nv 11.075439 1.030018 -57.725464\nv 11.075439 5.875044 -57.725464\nv 14.305481 1.030018 -60.955444\nv 15.920471 1.030018 -62.570435\nv 14.305481 5.875044 -54.495483\nv 17.535522 5.875044 -57.725464\nv 32.070557 9.105062 -25.425293\nv 25.610535 8.297558 -25.425293\nv 32.070557 8.297558 -25.425293\nv 25.610535 9.105062 -25.425293\nv 32.070557 8.297558 -23.810303\nv -52.717377 20.410124 -56.110474\nv -54.332397 20.410124 -72.803589\nv -54.332397 20.410124 -56.110474\nv -52.717377 20.410124 -72.803589\nv -51.909882 18.795116 -72.803589\nv -51.909882 18.795116 -56.110474\nv 32.070557 9.912567 -28.655273\nv 32.070557 9.912567 -27.040283\nv 32.070557 10.720071 -28.655273\nv 51.450684 13.950089 3.644897\nv -0.229614 7.490053 19.794983\nv -0.229614 5.875044 -10.890198\nv -0.229614 1.030018 -6.045166\nv -0.229614 5.875044 -15.735229\nv -0.229614 1.030018 -15.735229\nv -0.229614 1.030018 -10.890198\nv -5.074615 1.030018 -10.890198\nv -5.074615 5.875044 -10.890198\nv 0.577881 9.105062 19.794983\nv 0.577881 7.490053 19.794983\nv -0.229614 9.105062 19.794983\nv -90.670105 17.180107 -102.945679\nv -90.670105 17.180107 -106.175781\nv -82.595062 7.490053 -32.692871\nv -82.595062 7.490053 -31.885376\nv -76.942505 7.490053 -31.885376\nv -77.750031 7.490053 -35.115356\nv -76.135010 7.490053 -59.340454\nv -74.519989 7.490053 -29.462769\nv -76.135010 7.490053 -64.185547\nv -74.519989 7.490053 -64.185547\nv -83.402557 7.490053 -33.500366\nv -87.440063 7.490053 -62.570435\nv -91.477600 7.490053 -33.500366\nv -80.980042 7.490053 -62.570435\nv -92.285095 7.490053 -31.885376\nv -93.900116 7.479455 -38.345337\nv -93.900116 7.490053 -31.885376\nv -93.900116 7.490053 -46.420410\nv -93.900116 7.490053 -56.110474\nv -93.900116 7.490053 -64.185547\nv -92.285095 7.490053 -32.692871\nv -87.440063 7.490053 -64.185547\nv -94.707611 7.490053 -56.110474\nv -94.707611 7.490053 -46.420410\nv -93.921295 7.490053 -38.387695\nv -68.059967 7.490053 -22.195312\nv -74.519989 7.490053 -22.195312\nv -70.078735 7.490053 -27.444092\nv -74.519989 7.490053 -84.322632\nv -73.195190 7.490053 -83.565552\nv -71.289978 7.490053 -68.223022\nv -71.693726 7.490053 -82.707642\nv -68.059967 7.490053 -25.425293\nv -47.872345 7.490053 -44.805420\nv -51.909882 7.490053 -46.420410\nv -51.909882 7.490053 -44.805420\nv -51.304260 7.490053 -50.710205\nv -45.449829 7.490053 -47.227905\nv -45.449982 7.490334 -49.657227\nv -47.872345 7.490053 -47.227905\nv -45.449921 7.490192 -49.537720\nv -55.745514 7.490053 -51.820557\nv -55.392242 7.490053 -51.669189\nv -55.139893 7.490053 -46.420410\nv -55.084381 7.490053 -52.330322\nv -53.322998 7.490053 -56.110474\nv -51.965393 7.490053 -50.200562\nv -51.909882 7.490053 -56.110474\nv -51.657532 7.490053 -50.861694\nv -51.909882 7.490053 -57.725464\nv -45.449829 7.490053 -57.725464\nv -53.777222 7.490053 -56.110474\nv -55.139893 7.490053 -56.110474\nv -66.041199 7.490053 -27.444092\nv -61.599945 7.490053 -72.260498\nv -59.984924 7.490053 -72.260498\nv -55.139893 7.490053 -72.260498\nv -61.599945 7.490053 -75.490601\nv -59.984924 7.490053 -75.490601\nv -58.369904 7.490053 -75.490601\nv -58.369904 7.490053 -78.720581\nv -71.289978 7.490053 -83.414185\nv -71.289978 7.490053 -70.645508\nv -68.059967 7.490053 -71.453003\nv -71.203461 7.490053 -83.565552\nv -70.078735 7.490053 -85.533936\nv -68.059967 7.490053 -68.223022\nv -68.059967 7.490053 -29.462769\nv -68.059967 7.490053 -70.645508\nv -72.904999 7.490053 -87.148926\nv -74.519989 7.490053 -85.988159\nv -71.289978 7.490053 -86.226074\nv -74.519989 9.105062 -85.988159\nv -74.519989 10.720071 -64.185547\nv -74.519989 9.105062 -84.322632\nv -76.135010 12.335080 -59.340454\nv -76.135010 12.335080 -64.185547\nv -80.980042 12.335080 -59.340454\nv -80.980042 12.335080 -64.185547\nv -80.980042 8.297558 -62.570435\nv -80.980042 8.297558 -64.185547\nv -80.980042 10.720071 -64.185547\nv -87.440063 8.297558 -62.570435\nv -87.440063 8.297558 -64.185547\nv -93.900116 10.720071 -64.185547\nv -87.440063 10.720071 -64.185547\nv -93.900116 10.720071 -64.993042\nv -93.900116 12.335080 -68.223022\nv -93.900116 12.335080 -64.993042\nv -90.670105 8.297558 -31.885376\nv -92.285095 8.297558 -31.885376\nv -92.285095 8.297558 -32.692871\nv -91.477600 8.297558 -33.500366\nv -83.402557 8.297558 -33.500366\nv -82.595062 8.297558 -32.692871\nv -82.595062 8.297558 -31.885376\nv -77.750031 10.720071 -31.885376\nv -80.980042 10.720071 -31.885376\nv -77.750031 13.950089 -31.885376\nv -80.980042 13.950089 -31.885376\nv -84.210052 8.297558 -31.885376\nv -80.980042 10.720071 -35.115356\nv -77.750031 10.720071 -35.115356\nv -68.059967 10.345013 -25.425293\nv -70.078735 10.345013 -27.444092\nv -68.059967 10.345013 -29.462769\nv -66.041199 10.345013 -27.444092\nv -53.562225 12.587425 -46.773682\nv -51.657532 15.488890 -50.861694\nv -51.304260 15.460122 -50.710205\nv -51.906342 15.211815 -49.398071\nv -45.449829 7.491378 -44.805542\nv -40.847076 5.955795 -44.805420\nv -17.994690 1.030018 -44.805420\nv -26.069733 1.030018 -44.805420\nv -35.759796 4.260036 -44.805420\nv -47.872345 9.912567 -47.227905\nv -47.872345 9.912567 -44.805420\nv -45.449829 9.912567 -47.227905\nv -44.440765 7.153690 -49.650513\nv -35.759796 4.260036 -57.725464\nv -40.855164 5.932047 -49.650391\nv -51.909882 8.600372 -66.608032\nv -47.064850 8.600372 -66.608032\nv -45.449829 8.600372 -66.608032\nv -51.909882 13.914734 -79.047241\nv -51.909882 14.757593 -72.803589\nv -51.909882 13.914734 -71.453003\nv -51.909882 14.757593 -78.720581\nv -51.909882 18.795116 -78.720581\nv -51.909882 13.142585 -66.608032\nv -51.909882 13.142585 -71.453003\nv -53.322998 10.720071 -56.110474\nv -53.777222 10.720071 -56.110474\nv -55.139893 18.795116 -56.110474\nv -53.487549 12.587425 -55.757202\nv -55.745514 15.460122 -51.820557\nv -55.143433 15.211815 -53.132812\nv -55.139893 18.795116 -72.803589\nv -55.139893 10.720071 -72.260498\nv -55.139893 14.757593 -72.803589\nv -55.139893 10.720071 -73.067993\nv -55.139893 13.142585 -73.067993\nv -55.139893 13.950089 -75.490601\nv -55.139893 13.142585 -75.490601\nv -61.599945 10.720071 -72.260498\nv -61.599945 10.720071 -75.490601\nv -58.369904 10.720071 -75.490601\nv -58.369904 13.950089 -78.720581\nv -72.904999 10.720071 -87.148926\nv -71.289978 7.490053 -83.565552\nv -70.078735 10.720071 -85.533936\nv -71.693726 10.720071 -82.707642\nv -68.059967 13.950089 -68.223022\nv -68.059967 13.950089 -71.453003\nv -71.289978 13.950089 -68.223022\nv -71.289978 13.950089 -71.453003\nv 38.530640 7.490053 3.644897\nv 38.530640 7.490053 6.874878\nv -13.149658 1.030018 -22.195312\nv -13.149658 1.030018 -15.735229\nv 25.610535 8.297558 -23.810303\nv 25.610535 9.105062 -27.040283\nv 25.610535 9.912567 -28.655273\nv 25.610535 9.912567 -27.040283\nv 25.610535 10.720071 -30.270264\nv 25.610535 10.720071 -28.655273\nv 25.610535 11.527575 -31.885376\nv 25.610535 11.527575 -30.270264\nv 25.610535 10.720071 -44.805420\nv 25.610535 10.720071 -56.917969\nv 35.300598 7.490053 45.635132\nv 32.070557 7.490053 42.405090\nv 77.290833 -0.988743 42.405090\nv 77.290833 -2.200000 45.635132\nv -54.332397 20.410124 -78.720581\nv -42.219818 1.837522 -18.965210\nv -48.679871 5.067540 -18.965210\nv -42.219818 5.067540 -18.965210\nv -14.764679 1.837522 -18.965210\nv -48.679871 5.067540 -15.735229\nv -42.219818 5.067540 -15.735229\nv -42.219818 1.837522 -15.735229\nv -14.764679 1.837522 -6.045166\nv -27.684753 1.837522 -10.890198\nv -13.149658 1.837522 -9.275208\nv -14.764679 1.837522 -15.735229\nv -13.149658 1.837522 -15.735229\nv -38.989807 1.837522 -4.430176\nv -38.989807 1.837522 -6.045166\nv -32.529785 1.837522 -10.890198\nv -32.529785 1.837522 -6.045166\nv -48.679871 1.837522 -15.735229\nv -48.679871 1.837522 -6.045166\nv -58.369904 13.950089 -75.490601\nv -57.562408 13.142585 -75.490601\nv -57.562408 10.720071 -75.490601\nv 64.370789 13.142585 -82.758057\nv 64.370789 13.142585 -81.143066\nv 64.370789 13.950089 -96.485718\nv 64.370789 13.950089 -82.758057\nv -26.069733 1.030018 -57.725464\nv -29.299744 2.914027 -64.185547\nv -29.299744 2.106522 -57.725464\nv -29.299744 3.317779 -67.415527\nv -29.299744 3.721531 -70.645508\nv -26.069733 2.645027 -70.645508\nv -0.229614 1.030018 -57.725464\nv -14.764679 2.253875 -67.516602\nv -18.169495 2.645027 -70.645508\nv -0.229614 2.241274 -67.415527\nv -0.229614 1.464051 -61.198730\nv -29.299744 5.875044 -67.415527\nv -29.299744 6.278797 -67.415527\nv -29.299744 6.278797 -70.645508\nv -29.299744 5.875044 -64.185547\nv -32.529785 4.260036 -66.338989\nv -32.529785 4.192912 -65.800537\nv -32.529785 5.875044 -64.185547\nv -32.529785 5.875044 -65.800537\nv -32.529785 3.183531 -57.725464\nv -32.731659 4.260036 -65.800537\nv -32.529785 4.798540 -70.645508\nv -32.529785 6.278797 -69.030518\nv -32.529785 4.596664 -69.030518\nv -32.529785 6.278797 -70.645508\nv -35.759796 5.673168 -69.030518\nv -44.642334 10.720071 -71.453003\nv -44.642334 8.634186 -69.030518\nv -44.642334 10.720071 -69.030518\nv -44.642334 8.937000 -71.453003\nv -38.989807 6.951885 -70.645508\nv -35.759796 7.490053 -69.030518\nv -35.759796 7.490053 -65.800537\nv -35.759796 5.370354 -66.608032\nv -44.642334 8.331372 -66.608032\nv -47.064850 9.206000 -71.453003\nv -47.064850 10.720071 -66.608032\nv -47.064850 10.720071 -69.030518\nv -47.064850 10.720071 -71.453003\nv -44.642334 10.720071 -66.608032\nv -57.562408 13.142585 -73.067993\nv -57.562408 10.720071 -73.067993\nv -51.909882 9.206000 -71.453003\nv -47.064850 13.142585 -71.453003\nv 6.230469 7.490053 -9.275208\nv 9.460449 7.490053 -12.505188\nv -6.689636 7.490053 48.865112\nv -3.459595 7.490053 45.635132\nv 40.145630 7.490053 44.221985\nv 40.145630 7.490053 45.635132\nv 40.145630 7.490053 43.767761\nv 40.145630 7.490053 42.405090\nv -51.909882 9.912567 -2.815186\nv -48.679871 9.912567 -2.815186\nv -48.679871 9.912567 -6.045166\nv -51.909882 9.105062 -2.815186\nv 15.920471 7.490053 -20.580200\nv -30.914764 2.645027 -57.725464\nv 103.130981 10.720071 46.968140\nv 103.130981 10.720071 6.874878\nv -32.529785 7.490053 -69.030518\nv -11.534668 1.030018 -26.232788\nv -13.149658 1.030018 -39.960327\nv -13.149658 1.030018 -26.232788\nv -7.754517 1.030018 -22.301270\nv -11.534668 1.030018 -24.062622\nv -13.149658 1.030018 -9.275208\nv -13.149658 1.030018 -6.045166\nv -13.149658 1.030018 -10.890198\nv -11.534668 1.030018 -22.195312\nv -11.534668 1.030018 -23.608398\nv -7.244781 1.030018 -21.589600\nv -7.093384 1.030018 -21.993408\nv -6.285889 1.030018 -25.728149\nv -5.781189 1.030018 -25.492920\nv 12.690491 1.030018 -41.575317\nv 8.652954 1.030018 -44.805420\nv 14.305481 1.030018 -54.495483\nv 17.535522 1.030018 -44.805420\nv 17.535522 1.030018 -57.725464\nv 20.765503 1.030018 -44.805420\nv 15.920471 1.030018 -69.030518\nv 20.765503 1.030018 -69.030518\nv -6.134460 1.030018 -26.081421\nv -1.844604 1.030018 -24.062622\nv 1.385437 1.030018 -52.880371\nv 5.422913 1.030018 -44.805420\nv 6.230469 1.030018 -52.880371\nv 1.385437 1.030018 -57.725464\nv -5.074615 1.030018 -15.735229\nv -1.844604 1.030018 -23.658813\nv -32.529785 6.278797 -67.415527\nv -39.292847 10.518268 -49.650391\nv -43.885315 12.082735 -49.650391\nv 12.690491 7.490053 45.635132\nv -70.835754 9.105062 -7.660156\nv -71.289978 9.105062 -9.275208\nv -69.674988 9.105062 -6.499390\nv -68.059967 9.105062 -6.045166\nv -90.670105 9.105062 -6.045166\nv -90.670105 15.565098 -6.045166\nv -90.670105 15.565098 -12.505188\nv -78.204254 9.105062 2.029846\nv -77.750031 9.105062 3.644897\nv -77.750031 9.105062 10.104919\nv -74.519989 9.105062 10.104919\nv -71.289978 9.105062 -12.505188\nv -84.210052 9.105062 -12.505188\nv -85.825073 18.795116 -102.138184\nv -88.247589 17.987612 -102.138184\nv -85.825073 17.987612 -102.138184\nv -89.055084 15.565098 -102.138184\nv -88.247589 15.565098 -102.138184\nv -89.055084 18.795116 -102.138184\nv -53.939240 12.587425 -55.757202\nv -55.139893 9.105062 -2.815186\nv -55.139893 12.335080 -2.815186\nv -51.909882 12.335080 -2.815186\nv -55.392242 15.488890 -51.669189\nv -54.710419 15.211815 -53.132812\nv -53.981628 14.151965 -54.697266\nv -54.425751 14.151965 -54.697266\nv -53.110535 12.587425 -46.773682\nv -53.272552 10.720071 -46.420410\nv -52.339355 15.211815 -49.398071\nv -52.624023 14.151965 -47.833496\nv -53.726776 10.720071 -46.420410\nv -38.989807 2.645027 -2.815186\nv -38.989807 2.645027 -4.430176\nv -38.989807 3.452531 -2.815186\nv -38.989807 4.260036 -0.392639\nv -39.797302 4.260036 2.029846\nv -90.670105 9.105062 -12.505188\nv -53.068146 14.151965 -47.833496\nv -32.529785 6.682549 -6.045166\nv -32.529785 6.682549 -10.890198\nv -27.684753 6.682549 -10.890198\nv -27.684753 6.682549 -6.045166\nv 6.230469 7.490053 19.794983\nv 38.530640 7.490053 42.405090\nv 40.145630 9.105062 -52.880371\nv 38.530640 9.105062 -49.650391\nv 38.530640 9.105062 -52.880371\nv 40.145630 9.105062 -49.650391\nv 38.530640 6.127389 -45.158691\nv 38.530640 4.260036 -44.805420\nv 38.530640 7.691929 -46.218506\nv 38.530640 8.751779 -47.783081\nv 38.530640 10.720071 -69.030518\nv 38.530640 8.751779 -54.747803\nv 38.530640 7.691929 -56.312378\nv 38.530640 6.127389 -57.372192\nv 38.530640 4.260036 -57.725464\nv 38.530640 1.030018 -69.030518\nv 40.145630 8.751779 -54.747803\nv 40.145630 7.691929 -56.312378\nv 40.145630 6.127389 -57.372192\nv 40.145630 4.260036 -44.805420\nv 40.145630 6.127389 -45.158691\nv 40.145630 7.691929 -46.218506\nv 40.145630 1.433770 -44.805420\nv 38.530640 1.030018 -44.805420\nv -68.059967 10.720071 -25.425293\nv -66.041199 10.720071 -27.444092\nv -66.041199 13.199972 -27.444092\nv -68.059967 13.199972 -25.425293\nv -68.059967 13.950089 -25.425293\nv -66.041199 13.950089 -27.444092\nv -70.078735 13.199972 -27.444092\nv -70.078735 13.950089 -27.444092\nv 75.675842 7.490053 46.968140\nv 77.290833 9.105062 42.405090\nv 75.675842 9.105062 42.405090\nv -45.449829 9.912567 -44.805420\nv 40.145630 8.751779 -47.783081\nv 40.145630 4.260036 -57.725464\nv -90.670105 9.105062 -31.885376\nv -84.210052 9.105062 -31.885376\nv -80.980042 10.720071 -64.993042\nv -75.327515 10.720071 -64.993042\nv 8.652954 7.490053 -41.575317\nv 8.652954 7.490053 -44.805420\nv 5.422913 7.490053 -41.575317\nv 6.230469 5.875044 -52.880371\nv 6.230469 5.875044 -57.725464\nv 1.385437 5.875044 -52.880371\nv 1.385437 9.105062 -57.725464\nv 1.385437 5.875044 -54.495483\nv 1.385437 9.105062 -54.495483\nv 4.615417 5.875044 -57.725464\nv 4.615417 9.105062 -57.725464\nv 93.440918 8.297558 -28.655273\nv 96.670959 9.105062 -31.885376\nv 38.530640 13.950089 -44.805420\nv 39.338135 13.950089 -44.805420\nv -11.181366 6.127389 -23.898071\nv -7.244781 9.000087 -21.589600\nv -8.556976 8.751779 -22.207397\nv -13.149658 7.490053 19.794983\nv -5.074615 5.875044 -15.735229\nv -2.197876 6.127389 -23.823364\nv -6.134460 9.000087 -26.081421\nv -4.822266 8.751779 -25.463623\nv 90.210876 7.490053 -57.725464\nv 90.210876 13.950089 -83.565552\nv 90.210876 13.950089 -96.485718\nv 32.070557 7.490053 108.038696\nv 12.690491 7.490053 108.038696\nv 93.440918 8.297558 6.874878\nv 93.440918 9.105062 6.874878\nv 95.055908 9.912567 6.874878\nv 93.440918 9.912567 6.874878\nv 95.055908 10.720071 6.874878\nv -13.149658 13.950089 90.855347\nv -13.149658 10.720071 65.822693\nv -13.149658 7.490053 68.245239\nv -13.149658 10.720071 68.245239\nv -13.149658 13.950089 62.592712\nv -13.149658 13.950089 65.822693\nv -13.149658 15.565098 89.240356\nv -13.149658 15.565098 90.855347\nv -13.149658 7.490053 89.240356\nv -13.149658 7.490053 61.785217\nv -13.149658 10.720071 62.592712\nv -13.149658 10.720071 61.785217\nv -13.149658 7.490053 48.865112\nv 9.460449 7.490053 32.715027\nv 6.230469 7.490053 29.485046\nv -89.055084 13.950089 -106.175781\nv -89.055084 15.565098 -105.368164\nv -89.055084 15.565098 -106.175781\nv -13.149658 13.950089 108.281006\nv 90.210876 8.297558 6.874878\nv 90.210876 8.297558 16.564941\nv 90.210876 7.490053 6.874878\nv 76.483337 13.950089 -82.758057\nv 65.985779 13.142585 -82.758057\nv 39.338135 13.950089 -63.377930\nv 40.145630 13.950089 -62.570435\nv 57.910706 13.950089 -63.377930\nv 64.370789 13.950089 -62.570435\nv 65.178284 13.950089 -63.377930\nv 65.178284 13.950089 -58.532959\nv 65.178284 13.950089 -61.762939\nv 65.230286 13.950089 -96.485229\nv 64.421204 13.950089 -93.356567\nv 67.550293 13.950089 -92.549072\nv 68.357788 13.950089 -95.678223\nv 64.370789 13.950089 -57.725464\nv 77.290833 13.950089 -57.725464\nv 68.408264 13.950089 -58.532959\nv 76.483337 13.950089 -58.532959\nv 76.483337 13.950089 -66.608032\nv 76.483337 13.950089 -69.838013\nv 77.290833 13.950089 -83.565552\nv 12.690491 7.490053 84.395325\nv -3.459595 7.490053 84.395325\nv 40.145630 1.433770 -57.725464\nv 77.290833 12.335080 -77.105591\nv 26.418030 10.720071 -56.917969\nv 27.225586 10.720071 -57.725464\nv 35.300598 15.565098 -43.997925\nv 76.483337 13.142585 -81.143066\nv 64.370789 8.095682 -62.570435\nv 49.835693 7.490053 -62.570435\nv 49.835693 4.461912 -62.570435\nv 44.990662 7.490053 -62.570435\nv 44.990662 9.508815 -62.570435\nv 64.370789 12.335080 -62.570435\nv 41.760620 9.508815 -62.570435\nv 40.145630 6.278797 -62.570435\nv 41.760620 6.278797 -62.570435\nv 40.145630 6.278797 -57.725464\nv 40.145630 2.039398 -62.570435\nv 41.760620 6.278797 -59.340454\nv 44.990662 6.278797 -57.725464\nv 44.990662 6.278797 -59.340454\nv 41.760620 9.508815 -59.340454\nv 44.990662 9.508815 -59.340454\nv 44.990662 7.490053 -59.340454\nv 49.835693 7.490053 -57.725464\nv 44.990662 7.490053 -57.725464\nv 49.835693 3.856283 -57.725464\nv 103.130981 10.720071 -57.725464\nv 98.285950 9.508815 -36.730347\nv 98.285950 9.508815 -31.885376\nv 103.130981 10.720071 -36.730347\nv 103.130981 14.353841 -31.885376\nv 98.285950 14.353841 -31.885376\nv 74.060791 12.335080 -81.950562\nv 77.290833 8.321263 -61.050293\nv 77.290833 11.426638 -60.248901\nv 77.290833 12.233748 -63.376465\nv 77.290833 9.105062 -64.185547\nv 80.520874 8.299085 -61.056030\nv 80.520874 9.105062 -64.185547\nv 80.520874 11.426638 -60.248901\nv 80.520874 12.234142 -63.377930\nv 103.130981 14.353841 -36.730347\nv 33.685608 12.335080 -17.350220\nv 33.685608 12.335080 -12.505188\nv -1.844604 4.260036 -24.062622\nv -1.844604 4.260036 -23.658813\nv -2.197876 6.127389 -24.228638\nv 35.300598 15.565098 -40.767822\nv 35.300598 18.795116 -43.997925\nv 35.300598 18.795116 -40.767822\nv 64.370789 7.490053 -44.805420\nv 32.070557 11.527575 -31.885376\nv 32.070557 11.527575 -30.270264\nv -43.834839 5.875044 6.067383\nv -41.412323 5.875044 4.452393\nv -6.285889 9.028854 -25.728149\nv -4.822266 8.751779 -25.046265\nv -3.257751 7.691929 -24.317505\nv -3.257751 7.691929 -24.727783\nv 77.290833 7.490053 -2.815186\nv 44.990662 7.490053 -2.815186\nv 51.450684 7.490053 3.644897\nv 15.920471 10.720071 -18.965210\nv 15.920471 7.490053 -18.965210\nv -52.717377 20.410124 -78.720581\nv 27.225586 10.720071 -69.030518\nv 12.690491 7.490053 32.715027\nv 32.070557 10.720071 -30.270264\nv 32.070557 9.105062 -27.040283\nv 65.178284 12.873416 -61.762939\nv 65.178284 12.335080 -58.532959\nv 68.408264 15.565098 -61.762939\nv 65.178284 15.565098 -61.762939\nv 27.225586 1.030018 -69.030518\nv -85.825073 18.795116 -101.330688\nv -89.055084 18.795116 -105.368164\nv -85.825073 18.795116 -105.368164\nv -85.825073 18.795116 -104.560669\nv -85.825073 15.565098 -105.368164\nv -85.825073 15.565098 -104.560669\nv -82.595062 15.565098 -104.560669\nv -82.595062 18.795116 -104.560669\nv -82.595062 18.795116 -101.330688\nv -85.825073 15.565098 -101.330688\nv -82.595062 15.565098 -101.330688\nv 46.605652 7.490053 28.677490\nv 46.605652 12.335080 28.677490\nv 46.605652 12.335080 23.832520\nv 46.605652 7.490053 23.832520\nv 43.123291 15.211815 42.834595\nv 43.925781 7.490053 42.460632\nv 44.586914 7.490053 42.152771\nv 44.586914 15.488890 42.152771\nv 44.435486 7.490053 41.799438\nv 44.435486 15.460122 41.799438\nv -47.064850 13.142585 -66.608032\nv -47.064850 13.914734 -71.453003\nv -47.064850 13.914734 -79.047241\nv -39.292633 10.518195 -44.805420\nv -43.885315 12.082735 -44.805420\nv -32.529785 5.875044 -67.415527\nv -32.529785 7.490053 -65.800537\nv 15.920471 7.490053 84.395325\nv 5.422913 7.490053 -44.805420\nv -55.139893 12.335080 -6.045166\nv -55.139893 9.105062 -6.045166\nv -51.909882 12.335080 -6.045166\nv -48.679871 13.142585 -6.045166\nv -51.909882 13.142585 -6.045166\nv -16.379669 10.720071 29.485046\nv -16.379669 13.950089 29.485046\nv -16.379669 7.490053 29.485046\nv -19.609711 7.490053 32.715027\nv -6.689636 7.490053 75.455383\nv 12.690491 9.105062 90.855347\nv 12.310486 7.585054 90.855347\nv 12.690491 7.490053 90.855347\nv -6.689636 12.335080 90.855347\nv -6.689636 13.950089 90.855347\nv 12.690491 7.490053 89.240356\nv 12.690491 9.105062 89.240356\nv 91.825928 9.105062 6.874878\nv 95.055908 10.720071 16.564941\nv 98.285950 14.353841 -36.730347\nv 93.440918 11.527575 16.564941\nv 93.440918 8.297558 19.794983\nv 93.440918 8.297558 16.564941\nv 93.440918 10.720071 16.564941\nv 61.140747 7.490053 46.968140\nv 91.825928 9.105062 16.564941\nv 95.055908 9.912567 16.564941\nv 38.530640 7.490053 23.024963\nv 40.145630 7.490053 23.024963\nv 40.145630 7.490053 19.794983\nv 38.530640 7.490053 19.794983\nv -19.609711 7.490053 45.635132\nv 40.498901 12.587425 43.605774\nv 43.123291 15.211815 42.401550\nv 40.145630 10.720071 43.767761\nv 40.145630 10.720071 44.221985\nv 41.558777 14.151965 43.119202\nv 41.558777 14.151965 43.563354\nv 40.498901 12.587425 44.057434\nv 46.858032 15.211815 45.205627\nv 45.394409 15.488890 45.887451\nv 46.858032 15.211815 45.638672\nv 48.422546 14.151965 44.920959\nv 48.422546 14.151965 44.476868\nv 49.482422 12.587425 43.982727\nv 49.482422 12.587425 44.434448\nv 45.545837 15.460122 46.240723\nv 49.835693 10.720071 44.272461\nv 49.835693 10.720071 43.818237\nv 45.545837 7.490053 46.240723\nv 45.935913 7.490053 45.635132\nv 45.394409 7.490053 45.887451\nv 46.055542 7.490053 45.579590\nv 68.408264 15.565098 -58.532959\nv 65.178284 15.565098 -58.532959\nv 68.357788 15.566674 -61.813477\nv 69.165344 15.565098 -64.942505\nv 65.424316 15.565098 -62.570435\nv 66.036255 15.565098 -65.750000\nv 65.228760 15.565098 -62.620972\nv 32.070557 7.490053 81.165283\nv 32.070557 7.490053 32.715027\nv -41.412323 5.067540 4.452393\nv 61.140747 7.490053 41.177917\nv 61.140747 7.490053 40.978333\nv 61.140747 7.490053 22.217468\nv 49.835693 7.490053 19.794983\nv -50.294861 9.105062 6.874878\nv -50.294861 8.297558 6.874878\nv -46.257355 6.682549 6.874878\nv -64.829956 9.105062 6.874878\nv -48.679871 7.490053 6.874878\nv -46.257355 7.490053 6.874878\nv -48.679871 8.297558 6.874878\nv 35.300598 7.490053 77.935303\nv -16.379669 7.490053 48.865112\nv 58.718201 7.490053 19.794983\nv -43.834839 6.682549 6.067383\nv 90.210876 -2.200000 45.635132\nv -68.059967 9.105062 17.281006\nv -64.829956 9.105062 10.104919\nv -89.055084 9.105062 -106.175781\nv -39.797302 5.067540 2.029846\nv -7.093384 9.028854 -21.993408\nv -8.556976 8.751779 -22.675171\nv -11.534668 4.260036 -24.062622\nv -11.534668 4.260036 -23.608398\nv -10.121521 7.691929 -23.404053\nv -11.181366 6.127389 -23.442383\nv -10.121521 7.691929 -22.943237\nv -68.059967 13.950089 -29.462769\nv -68.059967 13.199972 -29.462769\nv -48.679871 13.142585 -2.815186\nv -51.909882 13.142585 -2.815186\nv -90.670105 12.335080 -68.223022\nv -90.670105 10.720071 -64.993042\nv -90.670105 12.335080 -64.993042\nv -87.440063 10.720071 -64.993042\nv 65.985779 12.335080 -59.340454\nv 65.985779 12.335080 -58.532959\nv 73.253296 15.565098 -66.608032\nv 76.483337 15.565098 -66.608032\nv 4.615417 9.105062 -54.495483\nv 4.615417 5.875044 -54.495483\nv 65.228760 17.180107 -96.485718\nv 68.357788 17.180107 -95.678223\nv 67.550293 17.180107 -92.549072\nv 64.421631 17.180107 -93.358154\nv 76.483337 15.565098 -69.838013\nv -9.919647 10.720071 68.245239\nv -9.919647 7.490053 68.245239\nv -9.919647 7.490053 61.785217\nv -9.919647 10.720071 65.822693\nv -9.919647 10.720071 62.592712\nv -9.919647 10.720071 61.785217\nv -9.919647 13.950089 65.822693\nv -9.919647 13.950089 62.592712\nv 32.070557 7.490053 74.705261\nv 28.840576 7.490053 77.935303\nv 35.300598 12.335080 77.935303\nv 32.070557 12.335080 81.165283\nv 35.300598 17.180107 77.935303\nv 32.070557 17.180107 81.165283\nv 32.070557 12.335080 74.705261\nv 28.840576 12.335080 77.935303\nv 32.070557 17.180107 74.705261\nv 28.840576 17.180107 77.935303\nv -90.670105 15.565098 -98.100708\nv -90.670105 15.565098 -101.330688\nv -90.670105 13.950089 -102.945679\nv -90.670105 13.950089 -106.175781\nv -82.595062 15.565098 -106.175781\nv 90.210876 7.490053 19.794983\nv 91.825928 8.297558 16.564941\nv 94.248413 11.527575 16.564941\nv 75.675842 9.105062 19.794983\nv 77.290833 7.490053 19.794983\nv 75.675842 7.490053 19.794983\nv 77.290833 9.105062 19.794983\nv -6.689636 13.950089 89.240356\nv -6.689636 7.490053 81.165283\nv -13.149658 13.950089 29.485046\nv -13.149658 10.720071 29.485046\nv -13.149658 7.490053 29.485046\nv -68.059967 10.720071 -29.462769\nv -70.078735 10.720071 -27.444092\nv 73.253296 15.565098 -69.838013\nv -80.980042 13.950089 -35.115356\nv -77.750031 13.950089 -35.115356\nv -85.825073 17.987612 -99.715698\nv -88.247589 17.987612 -99.715698\nv -74.519989 9.105062 17.281006\nv -76.942505 15.565098 79.550293\nv 38.530640 1.030018 -57.725464\nv 6.230469 -5.000000 19.794983\nv -88.247589 15.565098 -99.715698\nv -74.519989 10.720071 -85.988159\nv -80.980042 7.490053 -59.340454\nv -38.989807 3.452531 -0.392639\nv 51.450684 7.490053 -2.815186\nv 93.440918 9.105062 16.564941\nv -85.825073 17.987612 -101.330688\nv 32.070557 -5.000000 81.165283\nv 93.440918 -5.000000 6.874878\nv 93.440918 -0.181235 42.405090\nv 0.577881 7.490053 -22.195312\nv -32.529785 3.991037 -64.185547\nv -53.726776 7.490053 -46.420410\nv -74.519989 10.720071 -84.322632\nv 91.825928 8.297558 6.874878\nv 32.878113 10.720071 -31.885376\nv 94.248413 10.720071 16.564941\nv -68.059967 9.105062 10.104919\nv 0.577881 9.105062 -10.890198\nv -80.980042 7.490053 -31.885376\nv -80.980042 7.490053 -35.115356\nv -27.684753 1.837522 -6.045166\nv -14.764679 1.837522 -9.275208\nv -35.759796 5.269417 -65.800537\nv -35.759796 5.875213 -70.645508\nv 75.675842 7.490053 42.405090\nv -68.059967 -5.000000 10.104919\nv 90.210876 7.490053 16.564941\nv 25.610535 1.030018 -44.805420\nv -0.229614 -5.000000 -41.575317\nv -70.482483 15.565098 65.822693\nv -76.942505 15.565098 75.512756\nv -0.229614 1.030018 -41.575317\nv -93.900116 13.950089 -106.175781\nv -14.764679 -5.000000 -9.275208\nv 32.070557 -5.000000 42.405090\nv -0.229614 -5.000000 -57.725464\nv 51.450684 7.490053 23.832520\nv -76.135010 10.720071 -64.185547\nv 64.370789 7.490053 -46.420410\nv -85.825073 15.565098 -99.715698\nv -14.764679 -5.000000 -15.735229\nv 8.652954 1.030018 -41.575317\nv -77.750031 7.490053 -31.885376\nv -53.272552 7.490053 -46.420410\nv -32.529785 4.260036 -65.800537\nv 93.440918 -5.000000 42.405090\nv 38.530640 -5.000000 -44.805420\nv 6.230469 1.030018 -57.725464\nv -71.289978 7.490053 -71.453003\nv -80.980042 9.105062 -64.185547\nv 49.835693 -5.000000 42.405090\nv 93.440918 9.912567 16.564941\nv 5.422913 1.030018 -41.575317\nv 38.530640 10.720071 -44.805420\nv -76.942505 15.565098 72.282776\nvn 0.0000 0.0000 -1.0000\nvn 0.0000 1.0000 0.0000\nvn -1.0000 0.0000 0.0000\nvn 1.0000 0.0000 0.0000\nvn 0.0000 0.0000 1.0000\nvn 0.7071 0.0000 0.7071\nvn -0.7071 0.0000 0.7071\nvn 0.0000 0.9701 -0.2425\nvn -0.7071 0.0000 -0.7071\nvn 0.7071 0.0000 -0.7071\nvn -0.2707 0.0000 0.9627\nvn 0.7072 0.0000 -0.7071\nvn 0.0000 -1.0000 0.0000\nvn -0.7072 0.0000 -0.7071\nvn 0.8944 0.4472 0.0000\nvn 0.0000 1.0000 -0.0016\nvn -0.0118 0.9999 0.0013\nvn 0.4456 0.8952 0.0012\nvn 0.0000 1.0000 0.0001\nvn 0.9311 0.3647 -0.0000\nvn -0.0002 1.0000 -0.0000\nvn -0.8899 -0.2478 0.3830\nvn -1.0000 0.0000 -0.0026\nvn -0.9064 -0.0000 -0.4224\nvn -0.9065 -0.0002 -0.4221\nvn 0.3941 0.0000 -0.9191\nvn 0.9089 0.0000 0.4170\nvn 0.0001 0.0002 1.0000\nvn 0.3164 0.9486 -0.0000\nvn 0.3162 0.9487 0.0000\nvn 0.3225 0.9465 0.0075\nvn 0.3044 0.9525 -0.0052\nvn 0.0000 0.9923 0.1240\nvn 0.9065 -0.0002 0.4221\nvn 0.9064 -0.0000 0.4224\nvn -0.3938 0.0000 0.9192\nvn -0.9089 -0.0000 -0.4170\nvn -0.8682 0.0000 -0.4961\nvn 0.4961 0.0000 -0.8682\nvn 0.8682 0.0000 0.4962\nvn 0.8682 0.0000 0.4961\nvn 0.8682 0.0001 0.4962\nvn 0.8683 0.0000 0.4961\nvn -0.4961 0.0000 0.8683\nvn -0.4962 0.0000 0.8682\nvn -0.4961 0.0000 0.8682\nvn -0.8944 0.4472 0.0000\nvn 0.3140 0.9421 0.1178\nvn 1.0000 0.0001 0.0000\nvn 0.3140 0.9421 0.1177\nvn 0.3133 0.9423 0.1178\nvn 0.3140 0.9421 0.1179\nvn 0.3138 0.9421 0.1180\nvn 0.3133 0.9424 0.1175\nvn 0.3141 0.9421 0.1178\nvn 0.3163 0.9487 -0.0000\nvn 0.0044 -0.0067 -1.0000\nvn 0.0005 0.0013 -1.0000\nvn 0.9627 0.0000 -0.2707\nvn 0.2707 0.0000 -0.9627\nvn -0.9627 0.0000 0.2707\nvn 0.0000 -0.1859 0.9826\nvn -0.9089 0.0000 -0.4171\nvn 0.9065 0.0000 0.4222\nvn -0.3939 0.0000 0.9192\nvn 0.9064 0.0000 0.4223\nvn -0.0003 0.9825 -0.1861\nvn 0.9065 0.0001 0.4223\nvn 0.0000 0.7071 -0.7071\nvn 0.9066 0.0003 0.4221\nvn 0.0000 0.5609 -0.8279\nvn 0.0000 0.8279 -0.5609\nvn 0.9089 0.0000 0.4171\nvn 0.0000 -0.7071 -0.7071\nvn 0.9090 -0.0004 0.4167\nvn 0.0000 0.1859 0.9826\nvn 0.0002 0.9825 0.1861\nvn 0.1240 0.0000 -0.9923\nvn 0.9487 0.0000 0.3162\nvn 0.0000 0.5608 0.8279\nvn -0.9066 0.0004 -0.4220\nvn 0.0000 -0.9826 0.1859\nvn 0.0000 -0.8279 0.5608\nvn 0.0000 -0.5608 0.8279\nvn 0.0000 -0.1859 -0.9826\nvn 0.0000 -0.5608 -0.8279\nvn 0.0000 -0.0001 1.0000\nvn 0.0000 -0.8279 -0.5608\nvn 0.0000 -0.9826 -0.1859\nvn 0.4224 -0.0000 -0.9064\nvn 0.4221 -0.0002 -0.9065\nvn 0.9364 0.0000 0.3511\nvn -0.4258 0.0000 0.9048\nvn -0.4223 -0.0000 0.9064\nvn -0.4224 0.0001 0.9064\nvn -0.9191 0.0000 -0.3940\nvn 0.4258 0.0000 -0.9048\nvn 0.0000 1.0000 0.0035\nvn -0.2408 0.9631 0.1204\nvn -0.2425 0.9701 0.0000\nvn -0.2426 0.9701 -0.0000\nvn -0.0071 -0.9701 -0.2425\nvn 0.0000 -0.9684 -0.2494\nvn 0.0000 -0.2499 0.9683\nvn 0.0000 0.9683 0.2499\nvn 0.0000 0.2504 -0.9682\nvn -0.0005 0.2499 -0.9683\nvn 0.9826 0.1859 0.0000\nvn 0.4259 0.0001 -0.9048\nvn 0.2408 -0.9631 -0.1204\nvn 0.0000 0.8944 0.4472\nvn 0.0003 0.8944 0.4472\nvn 0.4257 0.0000 -0.9048\nvn 0.4260 0.0000 -0.9047\nvn 0.1859 0.9826 0.0000\nvn 0.8279 0.5609 0.0000\nvn 0.4252 -0.0007 -0.9051\nvn -0.4220 0.0005 0.9066\nvn 0.5609 0.8279 0.0000\nvn -0.4222 0.0000 0.9065\nvn -0.0145 0.0000 -0.9999\nvn 0.4221 -0.0000 0.9065\nvn 0.4224 -0.0000 0.9064\nvn 0.4223 0.0000 0.9065\nvn 0.9191 0.0000 -0.3939\nvn 0.9466 -0.3225 0.0000\nvn -0.9466 0.3225 0.0000\nvn -0.9466 0.3224 -0.0002\nvn -0.9466 0.3225 0.0001\nvn -0.9466 0.3225 0.0009\nvn 0.3225 0.9466 0.0000\nvn -0.4170 0.0000 -0.9089\nvn -0.1859 0.9826 0.0000\nvn -0.5609 0.8279 0.0000\nvn 0.7071 -0.7071 0.0000\nvn -0.1861 0.9825 -0.0002\nvn -0.8279 0.5609 0.0000\nvn -0.9826 0.1859 0.0000\nvn 0.1860 0.9825 0.0000\nvn 0.7071 0.7071 0.0000\nvn 0.1860 0.9825 0.0003\nvn 0.9683 0.0000 0.2499\nvn -0.0005 1.0000 -0.0001\nvn 0.0001 1.0000 -0.0005\nvn -0.2499 0.0000 0.9683\nvn -0.2500 0.0001 0.9683\nvn -0.2502 0.0000 0.9682\nvn 0.6766 0.0000 -0.7363\nvn 0.0000 0.9826 -0.1859\nvn 0.0000 0.8279 0.5608\nvn 0.1414 0.0000 -0.9899\nvn 0.0000 0.9826 0.1859\nvn 0.5547 0.0000 0.8321\nvn 0.3162 0.0000 0.9487\nvn 0.0070 0.0000 -1.0000\nvn 0.0094 0.0000 1.0000\nvn 0.8321 0.0000 0.5547\nvn 0.5547 0.0000 0.8320\nvn -0.4260 0.0000 0.9047\nvn 0.4223 0.0000 -0.9064\nvn -0.1861 0.9825 0.0002\nvn 0.4222 0.0000 -0.9065\nvn -0.4257 0.0000 0.9049\nvn 0.4222 0.0002 -0.9065\nvn -0.8279 0.5608 0.0000\nvn 0.4221 0.0003 -0.9065\nvn -0.5608 0.8279 0.0000\nvn -0.4252 -0.0007 0.9051\nvn -0.4259 0.0001 0.9048\nvn -0.9065 0.0001 -0.4223\nvn -0.9064 0.0000 -0.4223\nvn -0.9065 0.0000 -0.4222\nvn -0.9090 -0.0003 -0.4168\nvn 0.2499 -0.0000 -0.9683\nvn -0.2504 0.0005 0.9682\nvn -0.9682 0.0000 -0.2504\nvn -0.9683 -0.0005 -0.2499\nvn 0.9923 0.0000 -0.1240\nvn -0.4223 0.0001 0.9065\nvn 0.1861 0.9825 -0.0002\nvn 0.3939 0.0000 -0.9191\nvn -0.4224 0.0000 -0.9064\nvn -0.4211 -0.0002 -0.9070\nvn -0.4223 -0.0000 -0.9064\nvn 0.4170 0.0000 0.9089\nvn -0.9191 0.0000 0.3940\nvn 0.0000 0.9363 0.3511\nvn -0.2279 0.9117 0.3419\nvn 0.4223 0.0000 0.9064\nvn -0.4168 0.0000 -0.9090\nvn -0.4224 -0.0001 -0.9064\nvn 0.4220 0.0004 0.9066\nvn -0.4220 0.0005 -0.9066\nvn 0.4168 -0.0003 0.9090\nvn -0.4167 -0.0004 -0.9090\nvn 0.4168 0.0000 0.9090\nvn -0.4223 0.0000 -0.9065\nvn 0.4170 -0.0001 0.9089\nvn 0.2425 0.9701 0.0000\nvn -0.9683 0.0000 -0.2499\nvn 0.0000 0.9701 0.2425\nvn 0.0071 0.9763 0.2165\nvn -0.0049 0.9684 0.2494\nvn 0.0144 0.0000 -0.9999\nusemtl None\ns off\nf 1//1 2//1 3//1\nf 2//1 1//1 4//1\nf 5//2 1//2 6//2\nf 1//2 5//2 4//2\nf 4//2 5//2 7//2\nf 7//2 5//2 8//2\nf 7//1 9//1 10//1\nf 9//1 7//1 8//1\nf 11//2 12//2 13//2\nf 12//2 11//2 14//2\nf 14//2 11//2 15//2\nf 14//2 15//2 16//2\nf 16//2 18//2 17//2\nf 17//2 18//2 19//2\nf 17//2 19//2 20//2\nf 17//2 20//2 21//2\nf 21//2 20//2 22//2\nf 21//2 22//2 23//2\nf 24//3 12//3 25//3\nf 26//3 24//3 27//3\nf 13//3 28//3 29//3\nf 28//3 13//3 30//3\nf 30//3 13//3 12//3\nf 30//3 12//3 24//3\nf 30//3 24//3 26//3\nf 26//1 31//1 30//1\nf 31//1 26//1 32//1\nf 32//1 26//1 33//1\nf 34//1 31//1 32//1\nf 9//4 5//4 35//4\nf 5//4 9//4 8//4\nf 36//4 37//4 38//4\nf 37//4 36//4 39//4\nf 39//4 36//4 19//4\nf 19//4 36//4 20//4\nf 40//4 39//4 19//4\nf 41//1 37//1 15//1\nf 37//1 41//1 39//1\nf 35//2 3//2 42//2\nf 3//2 35//2 2//2\nf 2//2 35//2 10//2\nf 10//2 35//2 9//2\nf 43//4 44//4 45//4\nf 44//4 43//4 46//4\nf 46//4 43//4 47//4\nf 47//4 43//4 48//4\nf 49//5 12//5 14//5\nf 12//5 49//5 25//5\nf 25//5 49//5 50//5\nf 51//6 50//6 49//6\nf 50//6 51//6 52//6\nf 47//5 53//5 46//5\nf 53//5 47//5 1306//5\nf 54//1 15//1 11//1\nf 15//1 54//1 41//1\nf 41//1 54//1 39//1\nf 37//1 43//1 38//1\nf 43//1 37//1 48//1\nf 48//1 37//1 39//1\nf 48//1 39//1 54//1\nf 55//5 17//5 21//5\nf 17//5 55//5 56//5\nf 56//5 55//5 57//5\nf 56//5 16//5 17//5\nf 16//5 56//5 58//5\nf 59//5 60//5 61//5\nf 60//5 59//5 62//5\nf 58//2 51//2 49//2\nf 51//2 58//2 60//2\nf 60//2 58//2 56//2\nf 60//2 56//2 61//2\nf 59//7 56//7 57//7\nf 56//7 59//7 61//7\nf 58//5 14//5 16//5\nf 14//5 58//5 49//5\nf 63//8 13//8 29//8\nf 13//8 63//8 11//8\nf 62//5 51//5 60//5\nf 51//5 62//5 52//5\nf 64//5 63//5 65//5\nf 63//5 64//5 66//5\nf 67//4 1273//4 68//4\nf 1273//4 67//4 1307//4\nf 68//4 64//4 65//4\nf 64//4 68//4 1273//4\nf 54//3 63//3 66//3\nf 63//3 54//3 11//3\nf 69//1 19//1 18//1\nf 19//1 69//1 40//1\nf 7//3 2//3 4//3\nf 2//3 7//3 10//3\nf 64//2 54//2 66//2\nf 54//2 1273//2 1307//2\nf 54//2 70//2 48//2\nf 48//2 70//2 1306//2\nf 48//2 1306//2 47//2\nf 71//5 67//5 72//5\nf 67//5 71//5 1307//5\nf 1307//5 71//5 73//5\nf 74//4 71//4 72//4\nf 71//4 74//4 75//4\nf 76//3 1307//3 73//3\nf 1307//3 76//3 1331//3\nf 71//2 76//2 73//2\nf 76//2 71//2 75//2\nf 53//4 77//4 78//4\nf 77//4 1306//4 79//4\nf 80//1 1306//1 70//1\nf 1306//1 80//1 79//1\nf 69//3 15//3 41//3\nf 15//3 69//3 18//3\nf 1//3 42//3 6//3\nf 42//3 1//3 3//3\nf 39//2 69//2 41//2\nf 69//2 39//2 40//2\nf 81//5 24//5 82//5\nf 24//5 81//5 27//5\nf 81//2 26//2 27//2\nf 26//2 81//2 33//2\nf 32//4 81//4 82//4\nf 81//4 32//4 33//4\nf 5//5 42//5 35//5\nf 42//5 5//5 6//5\nf 80//3 76//3 83//3\nf 76//3 80//3 1331//3\nf 1331//3 80//3 70//3\nf 77//5 74//5 78//5\nf 74//5 77//5 75//5\nf 75//5 77//5 76//5\nf 76//5 77//5 83//5\nf 77//2 80//2 83//2\nf 80//2 77//2 79//2\nf 84//3 85//3 86//3\nf 85//3 84//3 87//3\nf 84//1 28//1 87//1\nf 28//1 84//1 29//1\nf 88//9 31//9 34//9\nf 31//9 88//9 89//9\nf 90//3 89//3 88//3\nf 89//3 90//3 91//3\nf 90//1 92//1 91//1\nf 92//1 94//1 93//1\nf 95//1 96//1 97//1\nf 96//1 95//1 98//1\nf 97//4 23//4 99//4\nf 23//4 97//4 21//4\nf 21//4 97//4 55//4\nf 55//4 97//4 96//4\nf 23//5 100//5 99//5\nf 100//5 23//5 22//5\nf 22//6 36//6 100//6\nf 36//6 22//6 20//6\nf 45//10 101//10 102//10\nf 101//10 45//10 44//10\nf 102//1 103//1 104//1\nf 103//1 102//1 101//1\nf 104//4 35//4 105//4\nf 35//4 104//4 9//4\nf 9//4 104//4 103//4\nf 106//1 107//1 108//1\nf 107//1 106//1 109//1\nf 110//4 106//4 108//4\nf 106//4 110//4 111//4\nf 1305//4 112//4 113//4\nf 112//4 1305//4 1308//4\nf 112//5 114//5 113//5\nf 114//5 112//5 115//5\nf 116//2 117//2 118//2\nf 117//2 116//2 119//2\nf 119//2 116//2 120//2\nf 120//2 116//2 121//2\nf 121//2 123//2 122//2\nf 1326//2 116//2 124//2\nf 116//2 1326//2 123//2\nf 123//2 1326//2 125//2\nf 125//2 1326//2 126//2\nf 125//2 126//2 127//2\nf 127//2 126//2 128//2\nf 127//2 128//2 129//2\nf 130//2 123//2 125//2\nf 131//2 132//2 133//2\nf 132//2 131//2 134//2\nf 134//2 131//2 135//2\nf 134//2 135//2 120//2\nf 134//2 120//2 136//2\nf 136//2 120//2 137//2\nf 137//2 120//2 121//2\nf 117//2 138//2 139//2\nf 138//2 117//2 140//2\nf 140//2 117//2 141//2\nf 141//2 117//2 142//2\nf 142//2 117//2 119//2\nf 143//5 136//5 137//5\nf 136//5 143//5 144//5\nf 144//5 143//5 145//5\nf 136//4 146//4 134//4\nf 146//4 136//4 144//4\nf 146//5 132//5 134//5\nf 132//5 146//5 147//5\nf 148//3 147//3 149//3\nf 147//3 148//3 132//3\nf 150//3 151//3 152//3\nf 132//3 153//3 133//3\nf 153//3 132//3 154//3\nf 154//3 132//3 155//3\nf 155//3 132//3 148//3\nf 154//3 155//3 151//3\nf 151//3 1309//3 156//3\nf 131//5 153//5 157//5\nf 153//5 131//5 133//5\nf 135//7 157//7 158//7\nf 157//7 135//7 131//7\nf 159//1 120//1 135//1\nf 120//1 159//1 160//1\nf 120//4 161//4 119//4\nf 161//4 120//4 160//4\nf 161//5 142//5 119//5\nf 142//5 161//5 162//5\nf 163//11 164//11 165//11\nf 164//11 163//11 166//11\nf 167//7 168//7 169//7\nf 168//7 167//7 170//7\nf 171//4 172//4 173//4\nf 172//4 171//4 174//4\nf 172//4 174//4 175//4\nf 175//4 174//4 176//4\nf 176//4 174//4 177//4\nf 177//4 174//4 178//4\nf 178//4 174//4 179//4\nf 179//4 174//4 180//4\nf 180//4 183//4 181//4\nf 180//4 181//4 182//4\nf 181//4 185//4 182//4\nf 186//4 173//4 172//4\nf 187//12 188//12 189//12\nf 188//12 187//12 190//12\nf 191//1 192//1 193//1\nf 192//1 191//1 194//1\nf 195//3 192//3 194//3\nf 192//3 195//3 196//3\nf 197//3 198//3 199//3\nf 198//3 197//3 200//3\nf 201//5 174//5 202//5\nf 174//5 201//5 183//5\nf 183//5 201//5 181//5\nf 203//3 183//3 181//3\nf 181//3 184//3 203//3\nf 204//13 205//13 206//13\nf 205//13 204//13 164//13\nf 164//13 204//13 207//13\nf 207//13 204//13 208//13\nf 164//13 207//13 209//13\nf 164//13 209//13 165//13\nf 165//13 209//13 210//13\nf 210//13 209//13 211//13\nf 211//13 209//13 212//13\nf 212//13 209//13 213//13\nf 213//13 209//13 214//13\nf 214//13 209//13 215//13\nf 214//13 215//13 216//13\nf 216//13 215//13 217//13\nf 216//13 217//13 218//13\nf 218//13 1302//13 216//13\nf 97//13 36//13 95//13\nf 36//13 97//13 100//13\nf 100//13 97//13 99//13\nf 219//13 220//13 1302//13\nf 220//13 219//13 221//13\nf 220//13 221//13 222//13\nf 223//13 153//13 154//13\nf 153//13 223//13 157//13\nf 157//13 223//13 158//13\nf 158//13 223//13 224//13\nf 224//13 223//13 225//13\nf 225//13 223//13 204//13\nf 204//13 223//13 208//13\nf 208//13 223//13 226//13\nf 208//13 226//13 227//13\nf 227//13 226//13 228//13\nf 227//13 228//13 110//13\nf 227//13 110//13 229//13\nf 229//13 110//13 230//13\nf 230//13 110//13 231//13\nf 231//13 110//13 108//13\nf 231//13 108//13 232//13\nf 232//13 108//13 107//13\nf 232//13 107//13 233//13\nf 232//13 235//13 234//13\nf 28//13 85//13 87//13\nf 85//13 28//13 236//13\nf 236//13 28//13 105//13\nf 105//13 28//13 102//13\nf 102//13 28//13 45//13\nf 45//13 28//13 31//13\nf 45//13 31//13 89//13\nf 45//13 89//13 92//13\nf 45//13 92//13 38//13\nf 38//13 92//13 95//13\nf 95//13 92//13 216//13\nf 38//13 95//13 36//13\nf 45//13 38//13 43//13\nf 105//13 102//13 104//13\nf 236//13 105//13 237//13\nf 238//13 239//13 240//13\nf 239//13 238//13 241//13\nf 241//13 238//13 242//13\nf 243//13 1310//13 1317//13\nf 1310//13 243//13 244//13\nf 245//13 221//13 246//13\nf 221//13 245//13 247//13\nf 221//13 247//13 222//13\nf 222//13 247//13 248//13\nf 248//13 247//13 249//13\nf 249//13 247//13 250//13\nf 247//13 1317//13 1310//13\nf 239//13 252//13 253//13\nf 252//13 239//13 241//13\nf 254//13 250//13 247//13\nf 255//13 1302//13 220//13\nf 256//13 230//13 231//13\nf 257//13 258//13 259//13\nf 258//13 257//13 260//13\nf 260//13 257//13 114//13\nf 258//13 260//13 187//13\nf 187//13 260//13 261//13\nf 258//13 187//13 189//13\nf 189//13 1275//13 258//13\nf 259//13 258//13 263//13\nf 259//13 263//13 264//13\nf 259//13 264//13 265//13\nf 259//13 265//13 170//13\nf 170//13 265//13 168//13\nf 168//13 265//13 266//13\nf 267//13 268//13 269//13\nf 268//13 267//13 270//13\nf 270//13 267//13 271//13\nf 271//13 267//13 272//13\nf 271//13 272//13 273//13\nf 273//13 272//13 274//13\nf 275//13 276//13 277//13\nf 276//13 275//13 278//13\nf 278//13 275//13 279//13\nf 279//13 275//13 272//13\nf 280//13 281//13 282//13\nf 281//13 280//13 283//13\nf 283//13 280//13 284//13\nf 284//13 280//13 285//13\nf 285//13 280//13 286//13\nf 286//13 280//13 287//13\nf 288//13 289//13 290//13\nf 291//13 1323//13 292//13\nf 1323//13 291//13 293//13\nf 293//13 291//13 294//13\nf 294//13 291//13 289//13\nf 289//13 295//13 294//13\nf 296//13 1327//13 297//13\nf 1327//13 296//13 298//13\nf 299//13 1283//13 1311//13\nf 1283//13 299//13 300//13\nf 300//13 299//13 287//13\nf 300//13 287//13 301//13\nf 301//13 287//13 280//13\nf 280//13 297//13 1327//13\nf 285//13 303//13 304//13\nf 303//13 285//13 286//13\nf 305//13 306//13 307//13\nf 306//13 305//13 308//13\nf 308//13 305//13 309//13\nf 308//13 309//13 310//13\nf 310//13 309//13 311//13\nf 310//13 311//13 274//13\nf 310//13 274//13 171//13\nf 171//13 274//13 272//13\nf 171//13 272//13 312//13\nf 312//13 272//13 275//13\nf 312//13 1323//13 174//13\nf 313//13 243//13 314//13\nf 243//13 313//13 244//13\nf 244//13 313//13 315//13\nf 315//13 313//13 238//13\nf 238//13 313//13 242//13\nf 242//13 313//13 237//13\nf 237//13 313//13 236//13\nf 236//13 313//13 316//13\nf 236//13 316//13 317//13\nf 313//13 319//13 316//13\nf 317//13 316//13 320//13\nf 317//13 320//13 321//13\nf 317//13 321//13 322//13\nf 317//13 322//13 323//13\nf 323//13 322//13 266//13\nf 266//13 1311//13 1283//13\nf 324//13 1305//13 1312//13\nf 1305//13 324//13 325//13\nf 325//13 324//13 268//13\nf 325//13 268//13 270//13\nf 326//13 262//13 189//13\nf 262//13 326//13 308//13\nf 308//13 326//13 306//13\nf 327//13 235//13 233//13\nf 235//13 329//13 328//13\nf 328//13 329//13 330//13\nf 328//13 330//13 331//13\nf 331//13 330//13 332//13\nf 331//13 332//13 333//13\nf 333//13 332//13 334//13\nf 333//13 334//13 335//13\nf 333//13 335//13 336//13\nf 333//13 336//13 337//13\nf 333//13 337//13 338//13\nf 338//13 337//13 339//13\nf 338//13 339//13 340//13\nf 340//13 339//13 341//13\nf 341//13 339//13 313//13\nf 313//13 339//13 318//13\nf 318//13 339//13 114//13\nf 318//13 114//13 257//13\nf 114//13 1312//13 1305//13\nf 31//13 28//13 30//13\nf 92//13 89//13 91//13\nf 216//13 92//13 214//13\nf 342//13 288//13 343//13\nf 288//13 342//13 295//13\nf 295//13 342//13 196//13\nf 196//13 342//13 192//13\nf 344//13 345//13 346//13\nf 345//13 344//13 347//13\nf 347//13 344//13 348//13\nf 349//13 1322//13 1284//13\nf 1322//13 349//13 200//13\nf 200//13 349//13 198//13\nf 198//13 349//13 350//13\nf 192//13 351//13 193//13\nf 351//13 192//13 352//13\nf 352//13 192//13 353//13\nf 353//13 192//13 354//13\nf 354//13 192//13 346//13\nf 346//13 192//13 342//13\nf 346//13 1284//13 1322//13\nf 351//13 302//13 280//13\nf 302//13 351//13 355//13\nf 355//13 351//13 356//13\nf 356//13 351//13 357//13\nf 357//13 351//13 358//13\nf 358//13 351//13 352//13\nf 359//13 357//13 358//13\nf 360//13 361//13 362//13\nf 361//13 360//13 363//13\nf 363//13 360//13 364//13\nf 364//13 360//13 225//13\nf 225//13 360//13 224//13\nf 361//13 365//13 366//13\nf 365//13 361//13 363//13\nf 1322//4 367//4 354//4\nf 367//4 1322//4 1285//4\nf 1327//4 368//4 301//4\nf 368//4 1327//4 369//4\nf 369//4 1327//4 370//4\nf 370//4 1327//4 371//4\nf 169//3 266//3 372//3\nf 266//3 169//3 168//3\nf 197//5 1322//5 200//5\nf 1322//5 197//5 1285//5\nf 1285//5 197//5 373//5\nf 373//5 197//5 374//5\nf 375//1 296//1 297//1\nf 296//1 375//1 1313//1\nf 296//4 376//4 298//4\nf 376//4 296//4 377//4\nf 377//4 296//4 378//4\nf 378//4 1313//4 379//4\nf 380//14 306//14 326//14\nf 306//14 380//14 381//14\nf 382//5 232//5 234//5\nf 232//5 382//5 383//5\nf 226//10 127//10 228//10\nf 127//10 226//10 125//10\nf 223//4 125//4 226//4\nf 125//4 223//4 130//4\nf 130//4 223//4 384//4\nf 385//5 123//5 130//5\nf 123//5 385//5 386//5\nf 387//2 388//2 389//2\nf 388//2 387//2 390//2\nf 390//2 387//2 391//2\nf 391//2 387//2 392//2\nf 392//2 387//2 393//2\nf 177//2 394//2 395//2\nf 394//2 177//2 178//2\nf 396//2 397//2 398//2\nf 397//2 396//2 399//2\nf 399//2 396//2 393//2\nf 399//2 393//2 387//2\nf 399//2 387//2 395//2\nf 399//2 395//2 400//2\nf 400//2 395//2 394//2\nf 399//2 400//2 401//2\nf 402//2 403//2 404//2\nf 403//2 402//2 405//2\nf 405//2 402//2 406//2\nf 406//2 402//2 407//2\nf 407//2 402//2 408//2\nf 203//2 401//2 400//2\nf 401//2 410//2 409//2\nf 409//2 410//2 411//2\nf 409//2 411//2 412//2\nf 409//2 412//2 413//2\nf 413//2 412//2 414//2\nf 413//2 414//2 415//2\nf 415//2 414//2 416//2\nf 416//2 414//2 417//2\nf 417//2 414//2 418//2\nf 417//2 418//2 419//2\nf 419//2 418//2 420//2\nf 420//2 418//2 421//2\nf 420//2 421//2 422//2\nf 420//2 422//2 423//2\nf 420//2 423//2 406//2\nf 420//2 406//2 424//2\nf 406//2 425//2 424//2\nf 424//2 425//2 426//2\nf 424//2 426//2 427//2\nf 405//2 428//2 429//2\nf 428//2 405//2 430//2\nf 430//2 405//2 406//2\nf 431//2 421//2 418//2\nf 421//2 431//2 429//2\nf 421//2 429//2 428//2\nf 275//4 401//4 312//4\nf 401//4 275//4 399//4\nf 413//9 289//9 291//9\nf 289//9 413//9 415//9\nf 432//3 123//3 386//3\nf 123//3 432//3 122//3\nf 433//5 432//5 434//5\nf 432//5 121//5 122//5\nf 121//5 432//5 435//5\nf 432//5 1316//5 1276//5\nf 436//1 238//1 240//1\nf 238//1 436//1 437//1\nf 437//1 436//1 438//1\nf 438//1 436//1 439//1\nf 159//3 142//3 162//3\nf 142//3 224//3 141//3\nf 224//3 142//3 158//3\nf 142//3 135//3 158//3\nf 440//5 441//5 442//5\nf 441//5 440//5 443//5\nf 127//1 110//1 228//1\nf 110//1 127//1 444//1\nf 444//1 127//1 129//1\nf 444//1 129//1 445//1\nf 445//1 129//1 446//1\nf 111//1 110//1 444//1\nf 447//3 448//3 449//3\nf 448//3 205//3 450//3\nf 205//3 448//3 206//3\nf 206//3 448//3 447//3\nf 1286//4 1294//4 451//4\nf 1294//4 1286//4 452//4\nf 453//1 1286//1 454//1\nf 1286//1 453//1 452//1\nf 455//1 261//1 260//1\nf 261//1 455//1 456//1\nf 261//1 456//1 457//1\nf 456//1 1286//1 457//1\nf 458//1 460//1 459//1\nf 459//1 461//1 458//1\nf 462//1 463//1 1280//1\nf 463//1 462//1 464//1\nf 464//1 462//1 465//1\nf 466//1 463//1 464//1\nf 467//4 468//4 469//4\nf 468//4 467//4 470//4\nf 468//4 470//4 465//4\nf 465//4 470//4 464//4\nf 471//2 464//2 470//2\nf 464//2 471//2 466//2\nf 472//5 473//5 474//5\nf 473//5 472//5 475//5\nf 475//5 472//5 476//5\nf 476//5 472//5 477//5\nf 477//5 472//5 478//5\nf 478//5 472//5 479//5\nf 479//5 472//5 480//5\nf 480//5 472//5 481//5\nf 482//4 483//4 484//4\nf 485//4 482//4 486//4\nf 487//4 485//4 488//4\nf 489//4 487//4 490//4\nf 483//4 474//4 491//4\nf 474//4 483//4 472//4\nf 472//4 483//4 492//4\nf 492//4 483//4 493//4\nf 493//4 483//4 482//4\nf 493//4 482//4 485//4\nf 493//4 485//4 487//4\nf 493//4 487//4 489//4\nf 492//5 481//5 472//5\nf 481//5 492//5 494//5\nf 494//5 492//5 495//5\nf 496//2 497//2 498//2\nf 497//2 496//2 499//2\nf 499//2 496//2 500//2\nf 500//2 496//2 501//2\nf 501//2 496//2 502//2\nf 502//2 496//2 503//2\nf 503//2 496//2 504//2\nf 504//2 496//2 505//2\nf 504//2 505//2 175//2\nf 175//2 505//2 172//2\nf 506//2 500//2 501//2\nf 463//4 471//4 507//4\nf 471//4 463//4 466//4\nf 508//1 305//1 307//1\nf 305//1 508//1 509//1\nf 305//1 509//1 510//1\nf 510//1 509//1 511//1\nf 510//1 511//1 512//1\nf 511//3 513//3 514//3\nf 513//3 511//3 509//3\nf 512//3 514//3 515//3\nf 514//3 512//3 511//3\nf 516//2 512//2 515//2\nf 512//2 516//2 510//2\nf 517//1 327//1 233//1\nf 327//1 517//1 518//1\nf 518//1 517//1 519//1\nf 518//1 519//1 520//1\nf 518//1 520//1 521//1\nf 517//3 523//3 522//3\nf 522//3 524//3 517//3\nf 524//3 525//3 517//3\nf 525//3 519//3 517//3\nf 526//9 527//9 528//9\nf 527//9 526//9 324//9\nf 324//9 526//9 529//9\nf 324//9 529//9 268//9\nf 268//9 529//9 530//9\nf 531//2 526//2 528//2\nf 526//2 531//2 532//2\nf 533//5 534//5 535//5\nf 534//5 533//5 536//5\nf 535//3 537//3 533//3\nf 538//2 539//2 540//2\nf 539//2 538//2 541//2\nf 542//15 538//15 543//15\nf 538//15 542//15 541//15\nf 544//3 545//3 546//3\nf 468//2 462//2 547//2\nf 462//2 468//2 465//2\nf 548//3 549//3 550//3\nf 549//3 548//3 454//3\nf 549//3 454//3 551//3\nf 551//3 454//3 552//3\nf 552//3 454//3 456//3\nf 553//3 550//3 549//3\nf 549//5 554//5 553//5\nf 554//5 549//5 555//5\nf 451//4 556//4 557//4\nf 556//4 451//4 1294//4\nf 556//2 453//2 558//2\nf 453//2 1294//2 452//2\nf 556//5 548//5 557//5\nf 548//5 556//5 558//5\nf 559//2 150//2 152//2\nf 150//2 559//2 560//2\nf 1295//2 561//2 562//2\nf 563//2 564//2 1319//2\nf 564//2 1278//2 1296//2\nf 1278//2 564//2 565//2\nf 565//2 564//2 563//2\nf 565//2 563//2 566//2\nf 565//2 566//2 567//2\nf 567//2 566//2 568//2\nf 569//2 570//2 571//2\nf 570//2 569//2 572//2\nf 572//2 569//2 561//2\nf 561//2 1296//2 1278//2\nf 573//16 574//16 575//16\nf 574//17 573//17 576//17\nf 576//2 573//2 577//2\nf 577//2 573//2 578//2\nf 578//2 573//2 579//2\nf 578//2 579//2 580//2\nf 580//2 579//2 571//2\nf 580//2 571//2 570//2\nf 576//2 581//2 582//2\nf 581//2 576//2 577//2\nf 576//18 583//18 574//18\nf 584//2 566//2 585//2\nf 566//2 584//2 586//2\nf 566//2 586//2 568//2\nf 568//2 586//2 587//2\nf 587//2 586//2 588//2\nf 588//2 586//2 589//2\nf 588//2 589//2 590//2\nf 586//2 584//2 591//2\nf 592//2 593//2 594//2\nf 593//2 592//2 595//2\nf 596//19 597//19 598//19\nf 597//20 596//20 599//20\nf 382//2 600//2 383//2\nf 600//2 382//2 601//2\nf 601//2 382//2 602//2\nf 601//2 602//2 603//2\nf 603//2 602//2 1288//2\nf 603//2 1288//2 604//2\nf 604//2 1288//2 605//2\nf 604//2 605//2 606//2\nf 606//2 605//2 607//2\nf 606//2 607//2 608//2\nf 608//2 607//2 609//2\nf 609//2 607//2 595//2\nf 609//2 595//2 598//2\nf 598//2 595//2 592//2\nf 609//21 598//21 597//21\nf 595//2 1320//2 593//2\nf 610//2 611//2 600//2\nf 383//2 106//2 612//2\nf 106//2 383//2 613//2\nf 613//2 383//2 614//2\nf 614//2 383//2 615//2\nf 615//2 383//2 600//2\nf 615//2 600//2 611//2\nf 106//2 616//2 109//2\nf 616//2 106//2 613//2\nf 109//2 616//2 617//2\nf 109//2 617//2 618//2\nf 109//2 618//2 619//2\nf 109//2 619//2 517//2\nf 517//2 619//2 523//2\nf 621//2 1325//2 590//2\nf 620//2 1325//2 622//2\nf 620//2 622//2 623//2\nf 623//2 622//2 624//2\nf 586//2 625//2 589//2\nf 625//2 586//2 626//2\nf 625//2 626//2 612//2\nf 625//2 612//2 627//2\nf 627//2 612//2 622//2\nf 628//2 629//2 587//2\nf 629//2 628//2 444//2\nf 444//2 628//2 111//2\nf 111//2 628//2 630//2\nf 111//2 630//2 624//2\nf 111//2 624//2 622//2\nf 111//2 622//2 612//2\nf 111//2 612//2 106//2\nf 444//4 631//4 629//4\nf 631//4 444//4 1277//4\nf 1277//4 444//4 445//4\nf 587//4 632//4 568//4\nf 632//4 633//4 1289//4\nf 632//5 567//5 568//5\nf 567//5 632//5 1314//5\nf 567//4 634//4 565//4\nf 634//4 1314//4 635//4\nf 634//5 1278//5 565//5\nf 1278//5 634//5 636//5\nf 637//3 1278//3 636//3\nf 1278//3 637//3 638//3\nf 638//3 640//3 1326//3\nf 572//3 1278//3 638//3\nf 638//5 570//5 572//5\nf 570//5 638//5 641//5\nf 642//3 570//3 641//3\nf 570//3 642//3 580//3\nf 642//5 578//5 580//5\nf 578//5 642//5 643//5\nf 643//5 642//5 124//5\nf 643//5 124//5 644//5\nf 645//3 578//3 643//3\nf 646//3 645//3 647//3\nf 578//3 361//3 577//3\nf 361//3 578//3 362//3\nf 362//3 578//3 645//3\nf 362//3 645//3 139//3\nf 139//3 645//3 646//3\nf 362//3 139//3 138//3\nf 581//1 361//1 366//1\nf 361//1 581//1 577//1\nf 581//3 365//3 582//3\nf 365//3 581//3 366//3\nf 576//5 365//5 363//5\nf 365//5 576//5 582//5\nf 574//3 364//3 575//3\nf 364//3 574//3 363//3\nf 363//22 574//22 583//22\nf 363//23 583//23 576//23\nf 648//5 364//5 225//5\nf 364//5 648//5 573//5\nf 573//5 648//5 649//5\nf 575//5 364//5 573//5\nf 650//3 573//3 649//3\nf 573//3 650//3 579//3\nf 651//9 579//9 650//9\nf 579//9 651//9 571//9\nf 651//1 569//1 571//1\nf 569//1 651//1 652//1\nf 569//10 653//10 561//10\nf 653//10 569//10 652//10\nf 561//4 654//4 562//4\nf 654//4 561//4 653//4\nf 655//5 1295//5 1319//5\nf 1295//5 655//5 656//5\nf 656//5 655//5 657//5\nf 656//5 657//5 658//5\nf 563//5 208//5 227//5\nf 208//5 1319//5 1295//5\nf 208//5 562//5 659//5\nf 659//5 562//5 654//5\nf 660//3 1295//3 656//3\nf 1295//3 660//3 1296//3\nf 660//1 564//1 1296//1\nf 564//1 660//1 661//1\nf 564//4 655//4 1319//4\nf 655//4 564//4 661//4\nf 563//7 229//7 566//7\nf 229//7 563//7 227//7\nf 566//3 230//3 585//3\nf 230//3 566//3 229//3\nf 584//5 230//5 256//5\nf 230//5 584//5 585//5\nf 231//4 584//4 256//4\nf 584//4 231//4 591//4\nf 591//2 626//2 586//2\nf 626//2 591//2 612//2\nf 662//7 586//7 591//7\nf 586//7 662//7 663//7\nf 664//9 586//9 663//9\nf 586//9 664//9 626//9\nf 626//10 665//10 612//10\nf 665//10 626//10 664//10\nf 232//6 591//6 231//6\nf 591//6 232//6 612//6\nf 612//6 232//6 383//6\nf 235//4 382//4 234//4\nf 382//4 235//4 602//4\nf 593//5 235//5 328//5\nf 235//5 1320//5 1288//5\nf 1320//2 605//2 1288//2\nf 605//2 1320//2 595//2\nf 605//2 595//2 607//2\nf 666//24 605//24 1288//24\nf 605//25 666//25 607//25\nf 667//26 595//26 607//26\nf 595//26 667//26 668//26\nf 595//27 669//27 1320//27\nf 593//3 331//3 594//3\nf 331//3 593//3 328//3\nf 670//28 592//28 671//28\nf 672//5 331//5 333//5\nf 331//5 672//5 673//5\nf 331//5 673//5 594//5\nf 594//5 673//5 674//5\nf 594//5 674//5 671//5\nf 594//5 671//5 592//5\nf 675//3 592//3 676//3\nf 592//3 675//3 598//3\nf 675//1 596//1 598//1\nf 596//1 675//1 677//1\nf 678//29 609//29 597//29\nf 609//30 678//30 679//30\nf 679//31 678//31 680//31\nf 679//32 680//32 671//32\nf 679//30 671//30 674//30\nf 609//33 681//33 608//33\nf 681//33 609//33 682//33\nf 682//33 609//33 683//33\nf 327//4 684//4 329//4\nf 684//4 685//4 686//4\nf 685//4 684//4 687//4\nf 687//4 684//4 688//4\nf 688//4 684//4 518//4\nf 518//4 684//4 327//4\nf 608//4 543//4 606//4\nf 543//4 608//4 542//4\nf 542//4 608//4 689//4\nf 689//4 608//4 681//4\nf 542//4 689//4 686//4\nf 686//4 689//4 690//4\nf 542//4 686//4 685//4\nf 543//5 604//5 606//5\nf 604//5 543//5 691//5\nf 691//5 543//5 692//5\nf 692//5 611//5 610//5\nf 611//5 692//5 693//5\nf 693//5 692//5 543//5\nf 693//5 543//5 538//5\nf 693//5 538//5 540//5\nf 603//34 694//34 601//34\nf 694//35 603//35 604//35\nf 601//13 600//13 610//13\nf 610//13 603//13 601//13\nf 610//13 604//13 603//13\nf 695//36 600//36 601//36\nf 610//37 600//37 696//37\nf 697//3 611//3 693//3\nf 611//3 697//3 698//3\nf 698//3 697//3 699//3\nf 698//3 699//3 700//3\nf 700//3 699//3 701//3\nf 699//3 702//3 701//3\nf 702//3 699//3 524//3\nf 702//3 524//3 522//3\nf 703//3 701//3 702//3\nf 615//3 611//3 698//3\nf 698//5 614//5 615//5\nf 614//5 698//5 613//5\nf 613//5 698//5 704//5\nf 617//2 616//2 613//2\nf 613//2 614//2 617//2\nf 705//3 613//3 704//3\nf 613//3 705//3 616//3\nf 705//1 617//1 616//1\nf 617//1 705//1 618//1\nf 618//1 705//1 706//1\nf 707//1 523//1 619//1\nf 523//1 707//1 522//1\nf 109//10 233//10 107//10\nf 233//10 109//10 517//10\nf 629//4 633//4 587//4\nf 633//4 629//4 631//4\nf 708//38 633//38 1289//38\nf 633//38 708//38 587//38\nf 587//38 708//38 628//38\nf 628//2 587//2 588//2\nf 588//2 709//2 628//2\nf 709//2 630//2 628//2\nf 708//39 630//39 628//39\nf 630//39 708//39 624//39\nf 624//39 708//39 710//39\nf 624//2 630//2 709//2\nf 709//2 623//2 624//2\nf 620//40 711//40 590//40\nf 711//41 620//41 710//41\nf 710//42 620//42 623//42\nf 710//43 623//43 624//43\nf 623//2 709//2 620//2\nf 709//2 588//2 590//2\nf 590//2 620//2 709//2\nf 711//44 588//44 590//44\nf 588//45 711//45 587//45\nf 587//46 711//46 633//46\nf 633//46 711//46 1289//46\nf 625//2 621//2 589//2\nf 621//2 625//2 627//2\nf 627//4 712//4 625//4\nf 712//4 627//4 713//4\nf 713//4 627//4 622//4\nf 627//2 1325//2 621//2\nf 1325//2 627//2 622//2\nf 712//5 589//5 625//5\nf 589//5 712//5 714//5\nf 715//3 589//3 714//3\nf 589//3 715//3 621//3\nf 621//3 715//3 1325//3\nf 716//3 281//3 717//3\nf 281//3 716//3 282//3\nf 718//3 243//3 719//3\nf 243//3 718//3 314//3\nf 534//3 500//3 720//3\nf 721//3 534//3 536//3\nf 722//3 721//3 723//3\nf 724//3 722//3 725//3\nf 726//3 724//3 727//3\nf 388//3 726//3 389//3\nf 726//3 388//3 728//3\nf 728//3 388//3 729//3\nf 500//3 274//3 499//3\nf 274//3 500//3 273//3\nf 273//3 500//3 534//3\nf 273//3 534//3 721//3\nf 273//3 721//3 722//3\nf 273//3 722//3 724//3\nf 273//3 724//3 726//3\nf 726//3 1304//3 273//3\nf 416//3 289//3 415//3\nf 289//3 416//3 290//3\nf 1311//10 730//10 299//10\nf 730//10 1311//10 731//10\nf 732//3 353//3 733//3\nf 353//3 732//3 352//3\nf 520//47 525//47 734//47\nf 525//47 520//47 519//47\nf 246//1 735//1 245//1\nf 735//1 246//1 736//1\nf 735//1 736//1 737//1\nf 738//1 245//1 735//1\nf 737//2 736//2 739//2\nf 739//2 740//2 737//2\nf 737//4 740//4 741//4\nf 741//4 735//4 737//4\nf 742//2 743//2 1297//2\nf 744//2 745//2 1298//2\nf 745//2 744//2 746//2\nf 747//2 489//2 490//2\nf 489//2 747//2 741//2\nf 741//2 747//2 735//2\nf 735//2 747//2 748//2\nf 735//2 748//2 749//2\nf 735//2 749//2 738//2\nf 749//2 748//2 750//2\nf 738//2 749//2 743//2\nf 743//2 1298//2 745//2\nf 489//2 751//2 752//2\nf 751//2 489//2 741//2\nf 539//47 693//47 540//47\nf 693//47 539//47 697//47\nf 702//2 707//2 753//2\nf 707//2 702//2 522//2\nf 702//5 754//5 703//5\nf 754//5 706//5 755//5\nf 706//5 754//5 753//5\nf 753//5 754//5 702//5\nf 756//3 419//3 757//3\nf 758//3 756//3 759//3\nf 419//3 288//3 417//3\nf 288//3 419//3 343//3\nf 343//3 419//3 756//3\nf 343//3 756//3 758//3\nf 760//48 761//48 762//48\nf 761//48 760//48 763//48\nf 763//48 760//48 764//48\nf 764//48 760//48 765//48\nf 766//33 765//33 760//33\nf 765//33 766//33 767//33\nf 765//33 767//33 768//33\nf 767//33 766//33 769//33\nf 769//49 766//49 770//49\nf 764//4 771//4 763//4\nf 771//4 764//4 772//4\nf 772//4 764//4 773//4\nf 763//4 774//4 761//4\nf 774//4 763//4 771//4\nf 775//3 776//3 1321//3\nf 776//3 1287//3 777//3\nf 777//3 1321//3 776//3\nf 779//48 1299//48 679//48\nf 1299//50 779//50 780//50\nf 780//51 1287//51 776//51\nf 781//3 783//3 782//3\nf 782//3 784//3 781//3\nf 783//52 1300//52 785//52\nf 1300//48 783//48 781//48\nf 786//4 788//4 787//4\nf 787//4 789//4 786//4\nf 790//48 789//48 787//48\nf 791//3 1299//3 792//3\nf 1299//3 791//3 793//3\nf 793//3 791//3 785//3\nf 793//48 787//48 794//48\nf 787//48 793//48 785//48\nf 679//48 683//48 609//48\nf 683//53 679//53 794//53\nf 794//48 1299//48 793//48\nf 795//4 796//4 682//4\nf 796//4 795//4 797//4\nf 797//4 795//4 798//4\nf 799//2 797//2 796//2\nf 797//2 799//2 788//2\nf 701//2 754//2 800//2\nf 754//2 701//2 703//2\nf 701//5 801//5 700//5\nf 801//5 701//5 800//5\nf 704//2 801//2 705//2\nf 801//2 704//2 698//2\nf 705//2 801//2 706//2\nf 801//2 698//2 700//2\nf 755//2 706//2 801//2\nf 690//1 795//1 802//1\nf 795//1 690//1 798//1\nf 798//1 690//1 803//1\nf 308//6 804//6 262//6\nf 804//6 308//6 805//6\nf 257//6 806//6 318//6\nf 806//6 257//6 807//6\nf 808//3 287//3 809//3\nf 287//3 808//3 286//3\nf 286//3 808//3 810//3\nf 286//3 810//3 811//3\nf 788//4 799//4 794//4\nf 794//4 787//4 788//4\nf 492//2 812//2 495//2\nf 812//2 492//2 813//2\nf 813//2 492//2 814//2\nf 814//2 492//2 493//2\nf 812//3 494//3 495//3\nf 494//3 812//3 815//3\nf 775//54 780//54 776//54\nf 816//1 311//1 309//1\nf 311//1 816//1 497//1\nf 774//5 1287//5 761//5\nf 1287//5 774//5 777//5\nf 817//55 1287//55 779//55\nf 1287//55 817//55 761//55\nf 761//55 817//55 762//55\nf 349//4 818//4 350//4\nf 818//4 349//4 819//4\nf 785//48 790//48 787//48\nf 790//52 785//52 1300//52\nf 785//1 782//1 783//1\nf 782//1 785//1 791//1\nf 782//1 791//1 820//1\nf 821//2 822//2 823//2\nf 824//2 821//2 825//2\nf 550//2 826//2 827//2\nf 826//2 550//2 828//2\nf 828//2 550//2 719//2\nf 719//2 550//2 554//2\nf 719//2 554//2 718//2\nf 718//2 554//2 829//2\nf 829//2 554//2 830//2\nf 830//2 554//2 831//2\nf 831//2 554//2 832//2\nf 832//2 554//2 833//2\nf 833//2 554//2 834//2\nf 554//2 550//2 553//2\nf 835//2 836//2 1318//2\nf 836//2 835//2 527//2\nf 527//2 835//2 837//2\nf 837//2 835//2 838//2\nf 837//2 838//2 839//2\nf 839//2 838//2 840//2\nf 839//2 530//2 529//2\nf 530//2 839//2 841//2\nf 841//2 839//2 842//2\nf 842//2 839//2 840//2\nf 672//2 760//2 673//2\nf 760//2 672//2 766//2\nf 766//2 672//2 822//2\nf 766//2 822//2 821//2\nf 766//2 821//2 824//2\nf 766//2 824//2 832//2\nf 766//2 832//2 833//2\nf 766//2 833//2 843//2\nf 766//2 843//2 115//2\nf 115//2 843//2 844//2\nf 115//2 1308//2 766//2\nf 766//2 1308//2 845//2\nf 845//2 1308//2 1329//2\nf 845//2 1329//2 846//2\nf 845//2 846//2 847//2\nf 847//2 846//2 836//2\nf 847//2 836//2 1324//2\nf 1324//2 836//2 527//2\nf 848//2 766//2 845//2\nf 552//2 455//2 849//2\nf 455//2 552//2 456//2\nf 834//2 849//2 850//2\nf 849//2 834//2 554//2\nf 850//2 849//2 455//2\nf 672//7 338//7 822//7\nf 338//7 672//7 333//7\nf 673//30 679//30 674//30\nf 679//30 673//30 779//30\nf 779//56 673//56 817//56\nf 817//56 673//56 762//56\nf 762//30 673//30 760//30\nf 772//2 782//2 851//2\nf 782//2 772//2 784//2\nf 784//2 772//2 773//2\nf 852//1 680//1 678//1\nf 678//57 597//57 852//57\nf 597//58 853//58 852//58\nf 854//5 257//5 259//5\nf 257//5 854//5 807//5\nf 796//5 682//5 683//5\nf 683//5 794//5 799//5\nf 799//5 796//5 683//5\nf 215//59 855//59 217//59\nf 855//59 215//59 856//59\nf 857//60 219//60 218//60\nf 219//60 857//60 858//60\nf 855//10 218//10 217//10\nf 218//10 855//10 857//10\nf 449//5 448//5 859//5\nf 859//5 860//5 449//5\nf 861//2 447//2 449//2\nf 449//2 860//2 861//2\nf 862//61 211//61 863//61\nf 211//61 862//61 210//61\nf 863//3 212//3 864//3\nf 212//3 863//3 211//3\nf 865//5 212//5 213//5\nf 212//5 865//5 864//5\nf 209//4 856//4 215//4\nf 856//4 209//4 866//4\nf 867//1 209//1 207//1\nf 209//1 867//1 866//1\nf 163//7 210//7 862//7\nf 210//7 163//7 165//7\nf 697//1 685//1 699//1\nf 685//1 697//1 542//1\nf 542//1 697//1 539//1\nf 542//1 539//1 541//1\nf 822//3 340//3 823//3\nf 340//3 822//3 338//3\nf 868//5 869//5 870//5\nf 869//5 871//5 872//5\nf 871//5 869//5 873//5\nf 873//5 869//5 868//5\nf 874//62 692//62 691//62\nf 691//62 694//62 874//62\nf 692//63 696//63 874//63\nf 610//37 696//37 692//37\nf 692//1 604//1 610//1\nf 604//1 692//1 691//1\nf 691//64 694//64 604//64\nf 812//5 875//5 815//5\nf 875//5 812//5 876//5\nf 876//5 812//5 877//5\nf 878//65 695//65 601//65\nf 694//66 878//66 601//66\nf 879//67 695//67 878//67\nf 694//68 879//68 878//68\nf 879//69 874//69 696//69\nf 874//69 879//69 694//69\nf 694//70 880//70 879//70\nf 881//71 694//71 874//71\nf 694//71 881//71 880//71\nf 879//72 881//72 696//72\nf 881//72 879//72 880//72\nf 696//37 600//37 695//37\nf 669//73 882//73 883//73\nf 884//74 882//74 666//74\nf 882//74 884//74 669//74\nf 669//75 885//75 882//75\nf 669//27 883//27 1320//27\nf 882//76 886//76 883//76\nf 886//76 882//76 666//76\nf 883//5 1288//5 1320//5\nf 1288//5 883//5 886//5\nf 668//27 669//27 595//27\nf 668//77 667//77 884//77\nf 887//2 487//2 488//2\nf 487//2 887//2 888//2\nf 247//4 1279//4 254//4\nf 1279//4 247//4 887//4\nf 887//4 247//4 747//4\nf 747//4 247//4 748//4\nf 888//4 887//4 747//4\nf 889//4 1279//4 887//4\nf 1279//2 485//2 486//2\nf 485//2 1279//2 889//2\nf 482//78 1279//78 486//78\nf 1279//78 482//78 890//78\nf 254//79 891//79 250//79\nf 891//79 1279//79 890//79\nf 447//1 204//1 206//1\nf 204//1 447//1 892//1\nf 892//1 447//1 861//1\nf 885//80 666//80 882//80\nf 666//80 885//80 893//80\nf 884//81 666//81 893//81\nf 749//3 750//3 894//3\nf 894//3 895//3 749//3\nf 896//1 743//1 749//1\nf 749//1 895//1 896//1\nf 896//2 895//2 894//2\nf 894//2 897//2 896//2\nf 739//5 751//5 741//5\nf 741//5 740//5 739//5\nf 262//4 898//4 1275//4\nf 898//4 262//4 804//4\nf 811//5 303//5 286//5\nf 303//5 811//5 899//5\nf 900//13 901//13 902//13\nf 901//13 900//13 903//13\nf 1330//3 904//3 905//3\nf 904//3 1330//3 906//3\nf 906//3 1330//3 907//3\nf 907//3 1330//3 901//3\nf 901//3 1330//3 908//3\nf 901//3 908//3 902//3\nf 902//3 908//3 909//3\nf 909//3 908//3 910//3\nf 910//3 908//3 911//3\nf 911//3 908//3 912//3\nf 912//3 908//3 1274//3\nf 1274//3 908//3 913//3\nf 914//82 902//82 909//82\nf 902//82 914//82 900//82\nf 915//83 909//83 910//83\nf 909//83 915//83 914//83\nf 915//84 911//84 916//84\nf 911//84 915//84 910//84\nf 904//85 917//85 905//85\nf 917//85 904//85 918//85\nf 906//86 918//86 904//86\nf 918//86 906//86 919//86\nf 905//1 920//1 921//1\nf 920//1 905//1 917//1\nf 665//6 591//6 612//6\nf 591//6 665//6 662//6\nf 662//6 665//6 922//6\nf 922//6 665//6 923//6\nf 922//6 923//6 924//6\nf 922//6 924//6 925//6\nf 925//6 924//6 926//6\nf 926//6 924//6 927//6\nf 926//7 928//7 925//7\nf 928//7 926//7 929//7\nf 358//4 930//4 359//4\nf 930//4 358//4 1301//4\nf 732//5 358//5 352//5\nf 358//5 732//5 1301//5\nf 1301//5 732//5 931//5\nf 1301//5 931//5 932//5\nf 933//2 675//2 676//2\nf 675//2 933//2 677//2\nf 670//5 676//5 592//5\nf 676//87 670//87 933//87\nf 934//88 906//88 907//88\nf 906//88 934//88 919//88\nf 916//62 912//62 935//62\nf 912//62 916//62 911//62\nf 903//89 907//89 901//89\nf 907//89 903//89 934//89\nf 936//1 659//1 648//1\nf 659//1 936//1 937//1\nf 208//4 867//4 207//4\nf 867//4 659//4 937//4\nf 244//5 1298//5 1310//5\nf 1298//5 244//5 826//5\nf 1298//5 826//5 744//5\nf 828//4 744//4 826//4\nf 744//4 828//4 746//4\nf 746//4 828//4 719//4\nf 631//4 1289//4 633//4\nf 1289//4 631//4 1277//4\nf 1314//2 938//2 640//2\nf 938//2 1314//2 939//2\nf 939//2 1314//2 632//2\nf 939//2 632//2 446//2\nf 446//2 1289//2 1277//2\nf 707//3 706//3 753//3\nf 706//3 707//3 618//3\nf 618//3 707//3 619//3\nf 836//4 940//4 1318//4\nf 940//4 836//4 941//4\nf 940//5 1329//5 1318//5\nf 1329//5 940//5 942//5\nf 835//5 1305//5 325//5\nf 1305//5 1318//5 1329//5\nf 840//5 270//5 271//5\nf 270//5 840//5 838//5\nf 841//1 267//1 269//1\nf 267//1 841//1 842//1\nf 529//10 532//10 839//10\nf 532//10 529//10 526//10\nf 839//6 531//6 837//6\nf 531//6 839//6 532//6\nf 528//7 837//7 531//7\nf 837//7 528//7 527//7\nf 1324//4 943//4 847//4\nf 943//4 1324//4 944//4\nf 943//5 845//5 847//5\nf 845//5 943//5 945//5\nf 946//3 947//3 948//3\nf 947//3 845//3 945//3\nf 845//3 947//3 848//3\nf 848//3 947//3 946//3\nf 766//1 324//1 1312//1\nf 324//1 848//1 1324//1\nf 946//1 1324//1 848//1\nf 1324//1 946//1 949//1\nf 949//1 946//1 950//1\nf 944//1 1324//1 949//1\nf 347//6 951//6 345//6\nf 951//6 347//6 952//6\nf 953//1 411//1 410//1\nf 411//1 953//1 954//1\nf 953//3 203//3 184//3\nf 203//3 953//3 410//3\nf 821//5 340//5 341//5\nf 340//5 821//5 823//5\nf 830//3 313//3 829//3\nf 313//3 830//3 341//3\nf 341//3 830//3 825//3\nf 341//3 825//3 821//3\nf 831//2 825//2 830//2\nf 825//2 831//2 824//2\nf 824//2 831//2 832//2\nf 955//90 824//90 825//90\nf 824//91 955//91 832//91\nf 832//92 956//92 831//92\nf 957//93 830//93 831//93\nf 718//1 313//1 314//1\nf 313//1 718//1 829//1\nf 958//3 238//3 437//3\nf 238//3 958//3 315//3\nf 548//8 827//8 958//8\nf 827//8 548//8 550//8\nf 959//3 554//3 555//3\nf 554//3 959//3 849//3\nf 959//1 552//1 849//1\nf 552//1 959//1 551//1\nf 114//4 455//4 260//4\nf 455//4 114//4 850//4\nf 850//4 114//4 844//4\nf 844//4 114//4 115//4\nf 960//94 834//94 850//94\nf 834//95 960//95 833//95\nf 834//2 843//2 833//2\nf 843//2 834//2 844//2\nf 844//2 834//2 850//2\nf 843//96 833//96 961//96\nf 962//97 844//97 843//97\nf 342//4 963//4 346//4\nf 963//4 342//4 964//4\nf 964//4 342//4 965//4\nf 966//5 317//5 323//5\nf 317//5 966//5 967//5\nf 968//1 349//1 1284//1\nf 349//1 968//1 819//1\nf 819//1 968//1 969//1\nf 819//1 969//1 970//1\nf 970//1 969//1 971//1\nf 819//1 970//1 972//1\nf 141//9 360//9 140//9\nf 360//9 141//9 224//9\nf 35//1 237//1 105//1\nf 237//1 35//1 973//1\nf 974//3 975//3 976//3\nf 977//3 974//3 978//3\nf 979//3 973//3 980//3\nf 973//3 979//3 237//3\nf 237//3 979//3 981//3\nf 237//3 981//3 242//3\nf 242//3 981//3 975//3\nf 242//3 975//3 974//3\nf 242//3 974//3 982//3\nf 982//3 974//3 983//3\nf 983//3 974//3 977//3\nf 982//3 983//3 984//3\nf 242//3 982//3 985//3\nf 258//10 986//10 263//10\nf 986//10 258//10 987//10\nf 435//3 143//3 121//3\nf 143//3 435//3 871//3\nf 143//3 871//3 988//3\nf 988//3 871//3 989//3\nf 988//3 989//3 990//3\nf 137//3 121//3 143//3\nf 446//3 128//3 939//3\nf 128//3 446//3 129//3\nf 991//2 84//2 86//2\nf 84//2 991//2 29//2\nf 29//2 991//2 63//2\nf 63//2 991//2 65//2\nf 65//2 991//2 68//2\nf 68//2 991//2 67//2\nf 67//2 991//2 72//2\nf 72//2 991//2 74//2\nf 74//2 991//2 42//2\nf 74//2 42//2 78//2\nf 78//2 42//2 53//2\nf 53//2 42//2 44//2\nf 44//2 42//2 101//2\nf 42//2 991//2 35//2\nf 35//2 991//2 973//2\nf 101//2 3//2 103//2\nf 3//2 101//2 42//2\nf 103//2 3//2 10//2\nf 10//2 3//2 2//2\nf 103//2 10//2 9//2\nf 46//2 53//2 44//2\nf 992//3 1303//3 993//3\nf 1303//3 992//3 994//3\nf 995//5 461//5 458//5\nf 461//5 995//5 996//5\nf 996//5 995//5 756//5\nf 756//5 995//5 759//5\nf 201//2 184//2 181//2\nf 184//2 201//2 954//2\nf 954//2 201//2 997//2\nf 997//2 201//2 998//2\nf 997//2 998//2 999//2\nf 999//2 998//2 1000//2\nf 999//2 1000//2 1001//2\nf 1000//2 1003//2 1001//2\nf 954//2 953//2 184//2\nf 1004//2 758//2 1005//2\nf 759//2 1005//2 758//2\nf 1005//2 759//2 995//2\nf 1005//2 995//2 1006//2\nf 1006//2 995//2 1007//2\nf 1008//2 1002//2 1000//2\nf 1002//2 1008//2 1009//2\nf 1002//2 1009//2 1010//2\nf 1010//2 1009//2 1011//2\nf 1011//2 1009//2 1012//2\nf 1012//2 1009//2 1013//2\nf 1013//2 1009//2 995//2\nf 1007//2 965//2 1004//2\nf 965//2 1007//2 1014//2\nf 1014//2 1007//2 995//2\nf 1014//2 995//2 1009//2\nf 965//2 1014//2 964//2\nf 758//1 342//1 343//1\nf 342//1 758//1 965//1\nf 965//98 758//98 1004//98\nf 320//1 1015//1 321//1\nf 1015//1 320//1 1016//1\nf 1017//5 912//5 1274//5\nf 912//5 1017//5 935//5\nf 1018//4 1009//4 440//4\nf 1009//4 1018//4 1014//4\nf 391//9 1019//9 390//9\nf 1019//9 391//9 1020//9\nf 1021//1 203//1 400//1\nf 203//1 1021//1 184//1\nf 184//1 1021//1 185//1\nf 1323//3 174//3 183//3\nf 183//3 203//3 1323//3\nf 203//3 1330//3 905//3\nf 995//3 426//3 1013//3\nf 426//3 995//3 1022//3\nf 1022//3 995//3 458//3\nf 427//3 426//3 1022//3\nf 1023//5 1024//5 1025//5\nf 1024//5 1023//5 1026//5\nf 1026//5 1023//5 1027//5\nf 1027//5 1023//5 1028//5\nf 1027//5 1028//5 1029//5\nf 1029//5 1030//5 1031//5\nf 1030//5 1029//5 998//5\nf 998//5 1029//5 1028//5\nf 998//5 1028//5 1000//5\nf 1028//3 441//3 443//3\nf 441//3 1028//3 1023//3\nf 293//4 201//4 202//4\nf 201//4 920//4 917//4\nf 201//4 917//4 918//4\nf 201//4 918//4 919//4\nf 201//4 919//4 934//4\nf 201//4 934//4 998//4\nf 998//4 934//4 903//4\nf 998//4 903//4 900//4\nf 998//4 900//4 914//4\nf 998//4 914//4 915//4\nf 998//4 915//4 916//4\nf 998//4 916//4 1032//4\nf 1032//4 916//4 935//4\nf 998//4 1032//4 1030//4\nf 1024//1 1025//1 1031//1\nf 1031//1 1026//1 1024//1\nf 1031//1 1029//1 1026//1\nf 1029//1 1027//1 1026//1\nf 1025//1 1033//1 1030//1\nf 1030//1 1031//1 1025//1\nf 1032//2 1034//2 1030//2\nf 1034//2 1032//2 1035//2\nf 1034//2 1035//2 1036//2\nf 1031//2 1030//2 1034//2\nf 1029//3 1034//3 1037//3\nf 1034//3 1029//3 1031//3\nf 1038//2 1029//2 1037//2\nf 1029//2 1038//2 1027//2\nf 1026//4 1038//4 1039//4\nf 1038//4 1026//4 1027//4\nf 1040//2 1039//2 1041//2\nf 1039//2 1040//2 1026//2\nf 1026//2 1040//2 1024//2\nf 1025//4 1040//4 1042//4\nf 1040//4 1025//4 1024//4\nf 441//99 1025//99 1042//99\nf 1025//99 441//99 1023//99\nf 409//1 291//1 292//1\nf 291//1 409//1 413//1\nf 968//100 963//100 994//100\nf 963//100 968//100 951//100\nf 963//100 951//100 1043//100\nf 1043//100 951//100 952//100\nf 1043//101 952//101 1044//101\nf 1044//100 952//100 1045//100\nf 1043//100 1044//100 1046//100\nf 348//5 952//5 347//5\nf 952//5 348//5 1045//5\nf 1045//5 348//5 1047//5\nf 1045//5 1047//5 1048//5\nf 339//4 766//4 1312//4\nf 766//4 339//4 770//4\nf 770//4 339//4 769//4\nf 427//13 424//13 1049//13\nf 1049//13 459//13 427//13\nf 459//13 460//13 427//13\nf 1022//5 424//5 427//5\nf 424//5 1022//5 420//5\nf 420//5 1022//5 419//5\nf 419//5 1022//5 757//5\nf 458//4 1022//4 427//4\nf 427//4 460//4 458//4\nf 1022//2 756//2 757//2\nf 756//2 1022//2 996//2\nf 996//2 1022//2 461//2\nf 461//2 1022//2 458//2\nf 1050//4 440//4 442//4\nf 440//4 1050//4 1051//4\nf 440//49 1052//49 1018//49\nf 1052//4 440//4 1051//4\nf 1018//4 1052//4 1053//4\nf 1009//5 443//5 440//5\nf 443//5 1009//5 1008//5\nf 1000//3 443//3 1008//3\nf 443//3 1000//3 1028//3\nf 1054//102 1050//102 1053//102\nf 1053//103 1055//103 1054//103\nf 1052//3 1050//3 1051//3\nf 1056//104 1050//104 1054//104\nf 1050//104 1056//104 1051//104\nf 1056//105 1052//105 1051//105\nf 1052//105 1056//105 1057//105\nf 1053//3 1050//3 1052//3\nf 1052//106 1055//106 1053//106\nf 1055//107 1052//107 1057//107\nf 728//1 921//1 1304//1\nf 921//1 728//1 905//1\nf 905//1 728//1 1330//1\nf 348//4 1046//4 1047//4\nf 1046//4 348//4 344//4\nf 1046//4 344//4 1043//4\nf 1058//4 1047//4 1046//4\nf 346//1 1043//1 344//1\nf 1043//1 346//1 963//1\nf 1059//1 172//1 505//1\nf 172//1 1059//1 186//1\nf 173//2 1059//2 1060//2\nf 1059//2 173//2 186//2\nf 1059//3 496//3 1060//3\nf 496//3 1059//3 505//3\nf 498//5 310//5 496//5\nf 171//5 496//5 310//5\nf 496//5 171//5 173//5\nf 496//5 173//5 1060//5\nf 537//5 500//5 506//5\nf 500//5 537//5 720//5\nf 537//2 534//2 720//2\nf 534//2 537//2 535//2\nf 1061//108 960//108 1062//108\nf 960//108 1061//108 1063//108\nf 962//109 1063//109 1061//109\nf 179//5 394//5 178//5\nf 394//5 179//5 1064//5\nf 1021//3 394//3 1064//3\nf 394//3 1021//3 400//3\nf 1065//1 185//1 1021//1\nf 185//1 1065//1 182//1\nf 180//2 1065//2 1066//2\nf 1065//2 180//2 182//2\nf 180//5 1064//5 179//5\nf 1064//5 180//5 1066//5\nf 920//100 1274//100 921//100\nf 1274//100 920//100 1017//100\nf 1017//100 920//100 1067//100\nf 1017//100 1067//100 1042//100\nf 1042//100 1315//100 441//100\nf 1042//110 1017//110 1033//110\nf 1033//110 1025//110 1042//110\nf 1042//5 935//5 1017//5\nf 935//5 1042//5 1040//5\nf 935//5 1040//5 1035//5\nf 1035//5 1040//5 1041//5\nf 1032//5 935//5 1035//5\nf 1033//3 1017//3 935//3\nf 935//3 1032//3 1033//3\nf 1032//3 1030//3 1033//3\nf 1068//3 1069//3 387//3\nf 506//3 501//3 537//3\nf 1070//2 474//2 473//2\nf 474//2 1070//2 1071//2\nf 502//111 537//111 501//111\nf 537//111 502//111 533//111\nf 533//111 502//111 545//111\nf 545//111 502//111 546//111\nf 546//111 502//111 1069//111\nf 1069//112 502//112 387//112\nf 387//111 502//111 395//111\nf 502//2 506//2 501//2\nf 506//2 502//2 503//2\nf 397//1 275//1 277//1\nf 275//1 397//1 399//1\nf 962//113 1061//113 844//113\nf 549//2 959//2 555//2\nf 959//2 549//2 551//2\nf 453//3 548//3 558//3\nf 548//3 453//3 454//3\nf 961//96 833//96 1072//96\nf 961//114 962//114 843//114\nf 962//115 961//115 1073//115\nf 1072//94 833//94 960//94\nf 293//13 174//13 1323//13\nf 174//13 293//13 202//13\nf 1063//116 1074//116 960//116\nf 1074//116 1063//116 1075//116\nf 962//117 1075//117 1063//117\nf 1073//118 960//118 1074//118\nf 1074//119 962//119 1073//119\nf 962//119 1074//119 1075//119\nf 960//120 850//120 1062//120\nf 280//1 1076//1 351//1\nf 280//1 1280//1 463//1\nf 716//9 280//9 282//9\nf 280//9 716//9 1077//9\nf 462//3 1078//3 547//3\nf 1078//3 462//3 1280//3\nf 508//3 306//3 381//3\nf 306//3 508//3 307//3\nf 261//4 190//4 187//4\nf 190//4 261//4 457//4\nf 305//4 816//4 309//4\nf 816//4 1079//4 1080//4\nf 1079//4 816//4 516//4\nf 516//4 816//4 510//4\nf 510//4 816//4 305//4\nf 1079//5 513//5 1080//5\nf 513//5 1079//5 514//5\nf 790//1 336//1 335//1\nf 336//1 790//1 764//1\nf 336//1 764//1 765//1\nf 764//121 1300//121 781//121\nf 781//1 773//1 764//1\nf 773//1 781//1 784//1\nf 768//1 336//1 765//1\nf 1081//2 520//2 734//2\nf 520//2 1081//2 521//2\nf 294//5 920//5 293//5\nf 920//5 294//5 1067//5\nf 295//4 1067//4 294//4\nf 1067//4 295//4 1315//4\nf 997//3 411//3 954//3\nf 411//3 997//3 412//3\nf 997//1 414//1 412//1\nf 414//1 997//1 999//1\nf 908//13 1020//13 1082//13\nf 1019//13 728//13 729//13\nf 728//13 1019//13 1330//13\nf 1330//13 1019//13 1020//13\nf 1330//13 1020//13 908//13\nf 392//3 1020//3 391//3\nf 1020//3 392//3 1082//3\nf 503//4 395//4 502//4\nf 503//4 1291//4 395//4\nf 176//5 504//5 175//5\nf 504//5 176//5 1291//5\nf 177//5 1291//5 176//5\nf 1291//5 177//5 395//5\nf 986//1 264//1 263//1\nf 264//1 986//1 1083//1\nf 387//5 726//5 1068//5\nf 726//5 387//5 389//5\nf 1084//3 546//3 1069//3\nf 1069//5 724//5 1084//5\nf 724//5 1069//5 727//5\nf 546//2 724//2 725//2\nf 724//2 546//2 1084//2\nf 1069//2 726//2 727//2\nf 726//2 1069//2 1068//2\nf 545//2 722//2 723//2\nf 722//2 545//2 544//2\nf 546//5 722//5 544//5\nf 722//5 546//5 725//5\nf 138//1 360//1 362//1\nf 360//1 138//1 140//1\nf 1085//3 533//3 545//3\nf 1086//4 1002//4 1087//4\nf 1087//4 431//4 1086//4\nf 1086//1 429//1 431//1\nf 429//1 1086//1 405//1\nf 405//1 1086//1 1088//1\nf 1088//1 1086//1 1003//1\nf 1088//1 1003//1 1089//1\nf 418//4 1086//4 431//4\nf 908//5 1090//5 913//5\nf 1090//5 908//5 1082//5\nf 166//5 205//5 164//5\nf 205//5 166//5 450//5\nf 870//3 1282//3 1091//3\nf 1091//3 868//3 870//3\nf 868//2 1092//2 873//2\nf 1092//2 1094//2 1093//2\nf 1095//4 1094//4 1096//4\nf 1094//4 1095//4 1093//4\nf 1094//1 1097//1 1096//1\nf 1097//1 1094//1 1098//1\nf 1099//2 868//2 1091//2\nf 868//2 1099//2 1094//2\nf 1094//2 1099//2 1098//2\nf 1099//5 1100//5 1101//5\nf 1100//5 1099//5 1282//5\nf 1282//5 1099//5 1091//5\nf 378//5 1102//5 377//5\nf 1102//5 378//5 1103//5\nf 1104//3 1102//3 1103//3\nf 1102//3 1104//3 1105//3\nf 378//2 1104//2 1103//2\nf 1104//2 378//2 379//2\nf 1106//122 1107//122 1108//122\nf 1107//123 1106//123 808//123\nf 1109//124 1106//124 1108//124\nf 1110//125 1109//125 1108//125\nf 1109//125 1110//125 1111//125\nf 803//4 1112//4 796//4\nf 796//4 797//4 803//4\nf 797//4 798//4 803//4\nf 796//5 681//5 682//5\nf 681//5 796//5 689//5\nf 689//5 796//5 1112//5\nf 1112//2 690//2 689//2\nf 690//2 1112//2 803//2\nf 330//4 795//4 332//4\nf 795//4 330//4 798//4\nf 798//4 330//4 803//4\nf 803//4 330//4 1113//4\nf 1113//4 330//4 1114//4\nf 788//2 798//2 797//2\nf 798//2 788//2 786//2\nf 795//1 334//1 332//1\nf 334//1 795//1 789//1\nf 789//1 795//1 786//1\nf 786//1 795//1 798//1\nf 1113//5 690//5 803//5\nf 690//5 1113//5 686//5\nf 670//4 677//4 933//4\nf 677//4 670//4 596//4\nf 680//126 1115//126 671//126\nf 1115//126 680//126 852//126\nf 670//127 1116//127 853//127\nf 853//128 596//128 670//128\nf 853//129 599//129 596//129\nf 853//130 597//130 599//130\nf 1115//5 670//5 671//5\nf 670//5 1115//5 1116//5\nf 1115//131 853//131 1116//131\nf 853//131 1115//131 852//131\nf 774//2 778//2 777//2\nf 778//2 774//2 1117//2\nf 1117//2 774//2 771//2\nf 778//5 780//5 1321//5\nf 780//5 778//5 1299//5\nf 1299//5 778//5 792//5\nf 792//5 778//5 1118//5\nf 372//9 322//9 1119//9\nf 322//9 372//9 266//9\nf 772//5 1117//5 771//5\nf 1117//5 772//5 851//5\nf 1117//4 1118//4 778//4\nf 1118//4 1117//4 851//4\nf 1118//4 851//4 820//4\nf 820//4 851//4 782//4\nf 1118//2 791//2 792//2\nf 791//2 1118//2 820//2\nf 1321//13 780//13 775//13\nf 1120//3 1329//3 942//3\nf 1329//3 1120//3 846//3\nf 736//3 751//3 739//3\nf 751//3 221//3 752//3\nf 221//3 751//3 246//3\nf 246//3 751//3 736//3\nf 1121//1 814//1 1122//1\nf 814//1 1121//1 1123//1\nf 814//1 1123//1 1124//1\nf 1124//1 1123//1 1125//1\nf 858//1 221//1 219//1\nf 221//1 858//1 752//1\nf 752//1 858//1 489//1\nf 489//1 858//1 1122//1\nf 489//1 1122//1 493//1\nf 493//1 1122//1 814//1\nf 436//3 1126//3 1127//3\nf 1126//3 436//3 1128//3\nf 1128//3 436//3 239//3\nf 239//3 436//3 240//3\nf 1128//9 253//9 1129//9\nf 253//9 1128//9 239//9\nf 416//1 288//1 290//1\nf 288//1 416//1 417//1\nf 1120//1 836//1 846//1\nf 836//1 1120//1 941//1\nf 940//2 1120//2 942//2\nf 1120//2 940//2 941//2\nf 1310//4 742//4 251//4\nf 742//4 1310//4 1298//4\nf 712//2 715//2 714//2\nf 715//2 712//2 713//2\nf 715//1 622//1 1325//1\nf 622//1 715//1 713//1\nf 711//2 708//2 1289//2\nf 708//2 711//2 710//2\nf 318//4 1130//4 319//4\nf 1130//4 318//4 806//4\nf 1131//5 1132//5 1133//5\nf 1131//5 1134//5 1132//5\nf 1134//5 1131//5 1135//5\nf 1136//4 1131//4 1133//4\nf 1131//4 1136//4 1137//4\nf 1290//1 994//1 992//1\nf 968//1 1290//1 1138//1\nf 968//1 1138//1 969//1\nf 191//3 351//3 1076//3\nf 351//3 191//3 193//3\nf 818//2 197//2 199//2\nf 197//2 818//2 1292//2\nf 1292//2 818//2 1139//2\nf 1139//2 818//2 972//2\nf 972//2 818//2 819//2\nf 1047//2 1140//2 1048//2\nf 1140//2 1047//2 1058//2\nf 1141//3 1285//3 373//3\nf 1285//3 1141//3 1142//3\nf 1142//3 1144//3 1328//3\nf 930//5 357//5 359//5\nf 357//5 930//5 1145//5\nf 818//5 198//5 350//5\nf 198//5 818//5 199//5\nf 1281//2 1138//2 1146//2\nf 1138//2 1281//2 969//2\nf 971//3 1281//3 1328//3\nf 1281//3 971//3 969//3\nf 972//3 1147//3 1139//3\nf 1147//3 972//3 970//3\nf 1147//2 971//2 1328//2\nf 971//2 1147//2 970//2\nf 1148//3 303//3 899//3\nf 303//3 1148//3 304//3\nf 1148//1 285//1 304//1\nf 285//1 1148//1 1149//1\nf 1150//3 285//3 1149//3\nf 285//3 1150//3 284//3\nf 1150//5 283//5 284//5\nf 283//5 1150//5 1151//5\nf 1129//3 252//3 1152//3\nf 252//3 1129//3 253//3\nf 897//5 750//5 1297//5\nf 750//5 897//5 894//5\nf 742//5 247//5 251//5\nf 247//5 1297//5 750//5\nf 195//5 295//5 196//5\nf 295//5 195//5 1315//5\nf 1153//132 1111//132 1110//132\nf 1111//132 1153//132 1154//132\nf 1111//133 1154//133 1106//133\nf 376//5 1327//5 298//5\nf 1327//5 376//5 371//5\nf 1107//2 810//2 808//2\nf 810//2 1107//2 1110//2\nf 1110//2 1107//2 1108//2\nf 1155//3 808//3 1156//3\nf 808//3 1155//3 810//3\nf 1106//134 1157//134 1158//134\nf 1157//134 1106//134 1154//134\nf 1153//135 1106//135 1159//135\nf 1106//135 1153//135 1154//135\nf 1109//136 1111//136 1106//136\nf 1158//137 1153//137 1159//137\nf 1153//137 1158//137 1157//137\nf 1159//138 1155//138 1156//138\nf 1155//138 1159//138 1153//138\nf 1160//139 1161//139 1162//139\nf 1163//119 1160//119 1162//119\nf 1160//119 1163//119 1164//119\nf 1165//140 1160//140 1162//140\nf 1162//140 1166//140 1165//140\nf 1162//141 1161//141 1167//141\nf 1166//116 1164//116 1163//116\nf 1164//116 1166//116 1165//116\nf 1168//108 1165//108 1166//108\nf 1165//108 1168//108 1169//108\nf 370//4 1168//4 369//4\nf 1168//4 370//4 1169//4\nf 1170//2 1171//2 1172//2\nf 1171//2 1170//2 369//2\nf 1171//2 369//2 1173//2\nf 1173//2 369//2 370//2\nf 393//3 1082//3 392//3\nf 1082//3 393//3 1090//3\nf 1090//3 393//3 272//3\nf 272//3 393//3 279//3\nf 1174//2 1089//2 1175//2\nf 1089//2 1174//2 1088//2\nf 406//142 1176//142 430//142\nf 1176//142 406//142 1177//142\nf 1178//2 1179//2 1180//2\nf 1179//143 1178//143 1176//143\nf 1179//144 1176//144 1177//144\nf 1176//145 428//145 430//145\nf 428//146 1176//146 421//146\nf 421//145 1176//145 1178//145\nf 1180//147 421//147 1178//147\nf 533//2 721//2 536//2\nf 721//2 533//2 1085//2\nf 545//5 721//5 1085//5\nf 721//5 545//5 723//5\nf 768//148 337//148 336//148\nf 337//148 768//148 767//148\nf 1283//4 966//4 323//4\nf 966//4 1283//4 1181//4\nf 189//1 380//1 326//1\nf 380//1 189//1 188//1\nf 921//1 293//1 1323//1\nf 293//1 921//1 920//1\nf 892//4 860//4 859//4\nf 860//4 892//4 861//4\nf 879//149 696//149 695//149\nf 265//4 731//4 1311//4\nf 731//4 265//4 1182//4\nf 885//150 884//150 893//150\nf 884//150 885//150 669//150\nf 685//2 524//2 699//2\nf 524//2 685//2 687//2\nf 518//15 1081//15 688//15\nf 1081//15 518//15 521//15\nf 789//151 335//151 334//151\nf 335//151 789//151 790//151\nf 668//152 884//152 669//152\nf 245//4 745//4 1317//4\nf 745//4 245//4 738//4\nf 1183//153 248//153 249//153\nf 248//153 1183//153 1070//153\nf 1070//153 1183//153 1071//153\nf 1184//3 357//3 1145//3\nf 357//3 1184//3 356//3\nf 356//3 1184//3 1185//3\nf 356//3 1185//3 1186//3\nf 302//4 375//4 297//4\nf 375//4 302//4 1187//4\nf 730//1 287//1 299//1\nf 287//1 730//1 809//1\nf 345//4 968//4 1284//4\nf 968//4 345//4 951//4\nf 480//4 1188//4 1189//4\nf 1188//4 480//4 481//4\nf 1190//5 220//5 222//5\nf 220//5 1190//5 1191//5\nf 1191//5 1190//5 1192//5\nf 1192//5 1190//5 1193//5\nf 1191//5 1192//5 1189//5\nf 1189//5 1192//5 1194//5\nf 1191//5 1189//5 1188//5\nf 300//6 1181//6 1283//6\nf 1181//6 300//6 1195//6\nf 745//1 243//1 1317//1\nf 243//1 745//1 719//1\nf 719//1 745//1 746//1\nf 991//5 85//5 236//5\nf 85//5 991//5 86//5\nf 936//3 204//3 892//3\nf 204//3 648//3 225//3\nf 401//10 292//10 312//10\nf 292//10 401//10 409//10\nf 684//1 330//1 329//1\nf 330//1 684//1 1114//1\nf 368//5 300//5 301//5\nf 300//5 368//5 1195//5\nf 1152//7 241//7 1196//7\nf 241//7 1152//7 252//7\nf 396//7 279//7 393//7\nf 279//7 396//7 278//7\nf 396//5 276//5 278//5\nf 276//5 396//5 398//5\nf 1197//5 302//5 355//5\nf 302//5 1197//5 1187//5\nf 985//5 241//5 242//5\nf 241//5 985//5 1196//5\nf 1186//7 355//7 356//7\nf 355//7 1186//7 1197//7\nf 1070//154 222//154 248//154\nf 222//154 1070//154 1190//154\nf 1190//154 1070//154 1198//154\nf 367//5 1199//5 354//5\nf 354//5 733//5 353//5\nf 733//5 354//5 1199//5\nf 1302//4 1200//4 216//4\nf 1200//4 1302//4 1293//4\nf 1201//5 1302//5 255//5\nf 1302//5 1201//5 1293//5\nf 156//1 223//1 154//1\nf 223//1 1202//1 384//1\nf 767//155 339//155 337//155\nf 339//155 767//155 769//155\nf 317//156 991//156 236//156\nf 991//156 317//156 967//156\nf 841//3 268//3 530//3\nf 268//3 841//3 269//3\nf 250//157 1183//157 249//157\nf 1183//157 891//157 1203//157\nf 838//158 325//158 270//158\nf 325//158 838//158 835//158\nf 487//1 747//1 490//1\nf 747//1 487//1 888//1\nf 397//3 276//3 398//3\nf 276//3 397//3 277//3\nf 956//159 957//159 831//159\nf 1204//92 956//92 832//92\nf 1204//160 832//160 955//160\nf 1204//161 1205//161 956//161\nf 955//162 825//162 1206//162\nf 1206//3 830//3 1207//3\nf 830//3 1206//3 825//3\nf 957//163 1207//163 830//163\nf 956//133 1205//133 957//133\nf 1204//164 955//164 1205//164\nf 1208//165 1209//165 1210//165\nf 1209//137 1208//137 955//137\nf 1205//166 955//166 1208//166\nf 896//4 897//4 1297//4\nf 1297//4 743//4 896//4\nf 955//138 1207//138 1209//138\nf 1207//138 955//138 1206//138\nf 957//167 1208//167 1210//167\nf 1208//167 957//167 1205//167\nf 957//168 1210//168 1209//168\nf 957//169 1209//169 1207//169\nf 1211//9 928//9 929//9\nf 928//9 1211//9 1212//9\nf 926//2 1211//2 929//2\nf 1211//2 926//2 927//2\nf 1213//2 1125//2 1214//2\nf 1125//2 1213//2 1124//2\nf 814//4 1213//4 813//4\nf 1213//4 814//4 1124//4\nf 1213//5 812//5 813//5\nf 812//5 1213//5 877//5\nf 877//5 1213//5 1214//5\nf 1121//3 875//3 876//3\nf 875//3 1121//3 1122//3\nf 877//2 1121//2 876//2\nf 1121//2 877//2 1123//2\nf 1125//3 877//3 1214//3\nf 877//3 1125//3 1123//3\nf 667//170 666//170 884//170\nf 607//171 666//171 667//171\nf 666//172 1288//172 886//172\nf 874//173 696//173 881//173\nf 646//1 117//1 139//1\nf 117//1 646//1 1215//1\nf 117//4 1216//4 118//4\nf 1216//4 117//4 1217//4\nf 1217//4 117//4 1215//4\nf 1216//1 116//1 118//1\nf 116//1 1216//1 1218//1\nf 116//4 644//4 124//4\nf 644//4 116//4 1218//4\nf 1326//5 642//5 639//5\nf 642//5 1326//5 124//5\nf 938//3 1326//3 640//3\nf 1326//3 938//3 126//3\nf 938//1 128//1 126//1\nf 128//1 938//1 939//1\nf 405//2 429//2 1219//2\nf 1219//2 403//2 405//2\nf 1012//3 402//3 1011//3\nf 402//3 1012//3 408//3\nf 1010//1 402//1 404//1\nf 402//1 1010//1 1011//1\nf 1220//2 1219//2 1087//2\nf 403//2 1219//2 1220//2\nf 1220//2 404//2 403//2\nf 1010//1 404//1 1220//1\nf 1220//1 1087//1 1010//1\nf 1087//1 1002//1 1010//1\nf 403//4 1010//4 404//4\nf 1010//4 403//4 1174//4\nf 1174//4 403//4 1088//4\nf 1088//4 403//4 405//4\nf 999//1 418//1 414//1\nf 418//1 999//1 1001//1\nf 429//2 431//2 1087//2\nf 1087//2 1219//2 429//2\nf 418//4 1003//4 1086//4\nf 1003//4 418//4 1001//4\nf 1086//4 1003//4 1002//4\nf 1089//3 1002//3 1175//3\nf 1002//3 1089//3 1003//3\nf 426//4 1012//4 408//4\nf 1012//4 426//4 1013//4\nf 1012//5 407//5 408//5\nf 407//5 1012//5 1221//5\nf 1221//5 1012//5 1222//5\nf 1174//5 1002//5 1010//5\nf 1002//5 1174//5 1175//5\nf 1223//2 946//2 948//2\nf 946//2 1223//2 950//2\nf 844//4 1062//4 850//4\nf 1062//4 844//4 1061//4\nf 1223//5 947//5 1224//5\nf 947//5 1223//5 948//5\nf 943//2 947//2 945//2\nf 947//2 943//2 1224//2\nf 1224//2 943//2 949//2\nf 949//2 943//2 944//2\nf 949//4 1223//4 1224//4\nf 1223//4 949//4 950//4\nf 1225//174 1007//174 1004//174\nf 1007//174 1225//174 1226//174\nf 1007//142 1227//142 1006//142\nf 1227//142 1007//142 1226//142\nf 1227//145 1005//145 1006//145\nf 1005//175 1227//175 1228//175\nf 1228//176 1004//176 1005//176\nf 1004//177 1228//177 1225//177\nf 1013//4 1222//4 1012//4\nf 1222//4 1013//4 1229//4\nf 388//1 1019//1 729//1\nf 1019//1 388//1 390//1\nf 1194//2 480//2 1189//2\nf 480//2 1194//2 479//2\nf 1140//1 1046//1 1044//1\nf 1046//1 1140//1 1058//1\nf 1140//3 1045//3 1048//3\nf 1045//3 1140//3 1044//3\nf 478//4 1194//4 1192//4\nf 1194//4 478//4 479//4\nf 1193//2 478//2 1192//2\nf 478//2 1193//2 477//2\nf 476//178 1193//178 1190//178\nf 1193//178 476//178 477//178\nf 1190//2 475//2 476//2\nf 475//2 1190//2 1198//2\nf 473//125 1198//125 1070//125\nf 1198//125 473//125 475//125\nf 1230//5 975//5 1231//5\nf 975//5 1230//5 976//5\nf 1232//4 1230//4 1231//4\nf 1230//4 1232//4 1233//4\nf 1233//4 1232//4 1234//4\nf 1234//4 1232//4 1235//4\nf 984//1 1232//1 982//1\nf 1232//1 984//1 1235//1\nf 1230//2 974//2 976//2\nf 974//2 1230//2 1233//2\nf 1236//5 974//5 1233//5\nf 974//5 1236//5 978//5\nf 1236//2 977//2 978//2\nf 977//2 1236//2 1237//2\nf 977//1 1234//1 983//1\nf 1234//1 977//1 1237//1\nf 1234//2 984//2 983//2\nf 984//2 1234//2 1235//2\nf 1181//2 1238//2 1239//2\nf 1238//2 1181//2 1195//2\nf 1240//6 1181//6 1195//6\nf 1181//6 1240//6 1241//6\nf 1241//6 1240//6 1242//6\nf 1241//6 1242//6 1243//6\nf 1238//10 1240//10 1195//10\nf 1240//10 1238//10 1244//10\nf 1244//9 1239//9 1245//9\nf 1239//9 1244//9 1238//9\nf 1245//7 1181//7 1241//7\nf 1181//7 1245//7 1239//7\nf 1244//10 1242//10 1240//10\nf 1242//10 1244//10 1246//10\nf 1243//2 1246//2 1247//2\nf 1246//2 1243//2 1242//2\nf 1247//7 1241//7 1243//7\nf 1241//7 1247//7 1245//7\nf 1072//179 960//179 1073//179\nf 1063//140 1073//140 960//140\nf 1073//140 1063//140 962//140\nf 1073//180 961//180 1072//180\nf 1205//135 1209//135 955//135\nf 1209//135 1205//135 957//135\nf 1248//5 147//5 146//5\nf 147//5 1248//5 149//5\nf 1248//2 148//2 149//2\nf 148//2 1248//2 1249//2\nf 148//1 145//1 155//1\nf 145//1 148//1 1249//1\nf 145//2 151//2 155//2\nf 151//2 145//2 1250//2\nf 1250//2 145//2 143//2\nf 1250//2 143//2 1251//2\nf 1251//2 143//2 988//2\nf 559//5 151//5 1250//5\nf 151//5 559//5 152//5\nf 150//1 1251//1 1309//1\nf 1251//1 150//1 560//1\nf 1309//1 1202//1 156//1\nf 1202//1 1251//1 988//1\nf 384//4 385//4 130//4\nf 385//4 384//4 434//4\nf 434//4 384//4 433//4\nf 433//4 384//4 1101//4\nf 1101//4 384//4 1099//4\nf 1099//4 384//4 1097//4\nf 1097//4 384//4 1252//4\nf 1098//4 1099//4 1097//4\nf 988//1 384//1 1202//1\nf 384//1 988//1 1252//1\nf 1252//1 988//1 990//1\nf 1097//2 1095//2 1096//2\nf 1095//2 990//2 989//2\nf 990//2 1095//2 1252//2\nf 1252//2 1095//2 1097//2\nf 433//2 1100//2 1316//2\nf 1100//2 433//2 1101//2\nf 385//2 432//2 386//2\nf 432//2 385//2 434//2\nf 161//2 159//2 162//2\nf 159//2 161//2 160//2\nf 648//2 650//2 649//2\nf 650//2 648//2 651//2\nf 651//2 648//2 652//2\nf 652//2 648//2 659//2\nf 652//2 659//2 654//2\nf 652//2 654//2 653//2\nf 1092//1 1095//1 989//1\nf 1095//1 1092//1 1093//1\nf 638//2 642//2 641//2\nf 642//2 638//2 639//2\nf 644//2 645//2 643//2\nf 645//2 644//2 1216//2\nf 1216//2 644//2 1218//2\nf 891//2 482//2 484//2\nf 482//2 891//2 890//2\nf 483//181 891//181 484//181\nf 891//181 483//181 1203//181\nf 1183//2 483//2 491//2\nf 483//2 1183//2 1203//2\nf 491//10 1071//10 1183//10\nf 1071//10 491//10 474//10\nf 637//1 1314//1 640//1\nf 1314//1 637//1 635//1\nf 1217//2 646//2 647//2\nf 646//2 1217//2 1215//2\nf 1142//100 1303//100 1253//100\nf 1303//100 1142//100 1143//100\nf 1281//5 1254//5 1143//5\nf 1254//5 1281//5 1146//5\nf 1254//5 1303//5 1143//5\nf 374//2 1141//2 373//2\nf 1141//2 374//2 1255//2\nf 1141//1 1292//1 1144//1\nf 1292//1 1141//1 1255//1\nf 1144//1 1147//1 1328//1\nf 1147//1 1292//1 1139//1\nf 1292//4 374//4 197//4\nf 374//4 1292//4 1255//4\nf 485//1 887//1 488//1\nf 887//1 485//1 889//1\nf 468//5 1078//5 469//5\nf 1078//5 468//5 547//5\nf 1160//182 1171//182 1172//182\nf 1171//183 1160//183 1173//183\nf 1173//184 1160//184 370//184\nf 1153//132 1110//132 810//132\nf 1166//185 1170//185 369//185\nf 1161//186 1170//186 1167//186\nf 1170//186 1161//186 1172//186\nf 688//5 524//5 687//5\nf 524//5 688//5 525//5\nf 525//5 688//5 1081//5\nf 525//5 1081//5 734//5\nf 1256//1 1257//1 1258//1\nf 1257//1 1256//1 1259//1\nf 1257//4 931//4 732//4\nf 931//4 1257//4 1259//4\nf 1256//3 1301//3 932//3\nf 1301//3 1256//3 1258//3\nf 931//2 1256//2 932//2\nf 1256//2 931//2 1259//2\nf 471//5 467//5 507//5\nf 467//5 471//5 470//5\nf 1199//187 732//187 733//187\nf 732//187 1199//187 1257//187\nf 1257//187 1199//187 1253//187\nf 367//188 1253//188 1199//188\nf 1253//188 1285//188 1142//188\nf 1254//2 992//2 993//2\nf 992//2 1254//2 1290//2\nf 1138//3 1254//3 1146//3\nf 1254//3 1138//3 1290//3\nf 1217//5 645//5 1216//5\nf 645//5 1217//5 647//5\nf 1104//1 375//1 1105//1\nf 375//1 1104//1 1313//1\nf 1313//1 1104//1 379//1\nf 1106//189 1156//189 808//189\nf 1153//190 810//190 1155//190\nf 1106//123 1159//123 1156//123\nf 1160//191 1165//191 1169//191\nf 1106//192 1158//192 1159//192\nf 1160//193 1164//193 1165//193\nf 1162//194 1166//194 1163//194\nf 1154//195 1153//195 1157//195\nf 1166//196 369//196 1168//196\nf 979//1 1136//1 981//1\nf 1136//1 979//1 1260//1\nf 1136//1 1260//1 1137//1\nf 316//10 1016//10 320//10\nf 1016//10 316//10 1261//10\nf 1161//197 1160//197 1172//197\nf 1166//185 1167//185 1170//185\nf 1167//198 1166//198 1162//198\nf 1160//184 1169//184 370//184\nf 1131//199 1260//199 1135//199\nf 1260//199 1131//199 1137//199\nf 1135//5 973//5 1134//5\nf 973//5 1135//5 980//5\nf 967//199 973//199 991//199\nf 973//199 967//199 1134//199\nf 1134//199 967//199 1132//199\nf 1132//199 967//199 1133//199\nf 1262//2 436//2 1127//2\nf 436//2 1262//2 439//2\nf 1135//199 979//199 980//199\nf 979//199 1135//199 1260//199\nf 220//4 1201//4 255//4\nf 1201//4 220//4 1191//4\nf 438//4 1262//4 1263//4\nf 1262//4 438//4 439//4\nf 437//4 1263//4 1264//4\nf 1263//4 437//4 438//4\nf 1113//2 684//2 686//2\nf 684//2 1113//2 1114//2\nf 1263//5 1128//5 1264//5\nf 1128//5 1263//5 1126//5\nf 1262//5 1126//5 1263//5\nf 1126//5 1262//5 1127//5\nf 664//10 923//10 665//10\nf 923//10 664//10 1265//10\nf 1265//10 924//10 923//10\nf 924//10 1265//10 1212//10\nf 1212//10 927//10 924//10\nf 927//10 1212//10 1211//10\nf 925//7 1266//7 922//7\nf 1266//7 925//7 928//7\nf 922//7 663//7 662//7\nf 663//7 922//7 1266//7\nf 754//3 801//3 800//3\nf 801//3 754//3 755//3\nf 423//2 422//2 428//2\nf 428//2 430//2 423//2\nf 430//2 406//2 423//2\nf 422//2 421//2 428//2\nf 1179//200 421//200 1180//200\nf 421//200 1179//200 422//200\nf 422//200 1179//200 423//200\nf 1179//174 406//174 423//174\nf 406//174 1179//174 1177//174\nf 1246//9 1245//9 1247//9\nf 1245//9 1246//9 1244//9\nf 1234//4 1236//4 1233//4\nf 1236//4 1234//4 1237//4\nf 1267//1 426//1 425//1\nf 426//1 1267//1 1013//1\nf 1013//1 1267//1 1229//1\nf 1267//3 407//3 1221//3\nf 407//3 1267//3 425//3\nf 1222//2 1267//2 1221//2\nf 1267//2 1222//2 1229//2\nf 516//5 514//5 1079//5\nf 514//5 516//5 515//5\nf 1065//3 1064//3 1066//3\nf 1064//3 1065//3 1021//3\nf 1039//5 1034//5 1036//5\nf 1034//5 1039//5 1037//5\nf 1037//5 1039//5 1038//5\nf 1036//3 1035//3 1041//3\nf 1041//3 1039//3 1036//3\nf 1227//2 1225//2 1228//2\nf 1225//2 1227//2 1226//2\nf 1054//4 1057//4 1056//4\nf 1057//4 1054//4 1055//4\nf 634//2 637//2 636//2\nf 637//2 634//2 635//2\nf 1268//1 661//1 660//1\nf 661//1 1268//1 1269//1\nf 1268//3 656//3 658//3\nf 656//3 1268//3 660//3\nf 1265//9 663//9 1266//9\nf 663//9 1265//9 664//9\nf 1270//5 1276//5 1316//5\nf 1276//5 1270//5 1271//5\nf 1276//2 871//2 435//2\nf 871//2 1276//2 872//2\nf 1092//3 871//3 873//3\nf 871//3 1092//3 989//3\nf 1100//4 1270//4 1316//4\nf 1270//4 1100//4 1282//4\nf 869//3 1276//3 1271//3\nf 1276//3 869//3 872//3\nf 657//2 1268//2 658//2\nf 1268//2 657//2 1269//2\nf 661//4 657//4 655//4\nf 657//4 661//4 1269//4\nf 1212//9 1266//9 928//9\nf 1266//9 1212//9 1265//9\nf 144//4 1248//4 146//4\nf 1248//4 145//4 1249//4\nf 1251//4 559//4 1250//4\nf 559//4 1251//4 560//4\nf 1270//2 869//2 1271//2\nf 869//2 1282//2 870//2\nf 865//2 863//2 864//2\nf 1200//2 865//2 1272//2\nf 865//2 1200//2 856//2\nf 856//2 1200//2 855//2\nf 855//2 1200//2 857//2\nf 857//2 1293//2 858//2\nf 858//2 1293//2 1201//2\nf 858//2 1201//2 1191//2\nf 858//2 1191//2 1122//2\nf 1122//2 1191//2 875//2\nf 1188//2 875//2 1191//2\nf 875//2 1188//2 494//2\nf 494//2 1188//2 481//2\nf 815//2 875//2 494//2\nf 166//2 448//2 450//2\nf 448//2 166//2 859//2\nf 859//2 166//2 892//2\nf 892//2 166//2 936//2\nf 936//2 166//2 867//2\nf 867//2 166//2 866//2\nf 866//2 166//2 163//2\nf 866//2 163//2 862//2\nf 866//2 862//2 863//2\nf 866//2 863//2 865//2\nf 866//2 865//2 856//2\nf 937//2 936//2 867//2\nf 1272//3 92//3 93//3\nf 92//3 1272//3 214//3\nf 59//2 98//2 62//2\nf 98//2 59//2 96//2\nf 96//2 59//2 57//2\nf 96//2 57//2 55//2\nf 50//2 24//2 25//2\nf 24//2 50//2 82//2\nf 82//2 50//2 32//2\nf 32//2 50//2 34//2\nf 34//2 50//2 88//2\nf 88//2 50//2 90//2\nf 90//2 50//2 94//2\nf 94//2 50//2 93//2\nf 93//2 50//2 52//2\nf 93//2 52//2 62//2\nf 93//2 62//2 1272//2\nf 1272//2 98//2 1200//2\nf 216//4 98//4 95//4\nf 98//4 216//4 1200//4\nf 827//3 315//3 958//3\nf 315//3 827//3 244//3\nf 244//3 827//3 826//3\nf 981//2 1261//2 975//2\nf 1261//2 981//2 1016//2\nf 1016//2 981//2 1136//2\nf 975//2 1261//2 1231//2\nf 1231//2 1261//2 1232//2\nf 1016//2 1136//2 1015//2\nf 1232//2 985//2 982//2\nf 985//2 1232//2 1264//2\nf 1264//2 1232//2 437//2\nf 437//2 1232//2 958//2\nf 958//2 1232//2 548//2\nf 548//2 1232//2 806//2\nf 1232//2 1130//2 806//2\nf 548//2 806//2 807//2\nf 548//2 807//2 854//2\nf 548//2 854//2 557//2\nf 557//2 854//2 987//2\nf 987//2 854//2 986//2\nf 986//2 854//2 1083//2\nf 898//2 557//2 987//2\nf 1196//2 1129//2 1152//2\nf 1129//2 1196//2 1128//2\nf 1128//2 1196//2 985//2\nf 1128//2 985//2 1264//2\nf 1275//4 987//4 258//4\nf 987//4 1275//4 898//4\nf 994//2 716//2 717//2\nf 716//2 994//2 1078//2\nf 716//2 1078//2 1077//2\nf 1078//2 994//2 469//2\nf 469//2 994//2 467//2\nf 467//2 994//2 507//2\nf 507//2 994//2 463//2\nf 463//2 994//2 1076//2\nf 1076//2 994//2 191//2\nf 191//2 994//2 194//2\nf 194//2 994//2 195//2\nf 195//2 441//2 1315//2\nf 441//2 195//2 442//2\nf 442//2 195//2 963//2\nf 963//2 195//2 994//2\nf 1280//2 1077//2 1078//2\nf 717//3 283//3 1151//3\nf 283//3 717//3 281//3\nf 319//4 1261//4 316//4\nf 1261//4 319//4 1130//4\nf 1015//1 322//1 321//1\nf 322//1 1015//1 1119//1\nf 170//5 854//5 259//5\nf 854//5 170//5 167//5\nf 966//2 1133//2 967//2\nf 1133//2 966//2 1136//2\nf 1136//2 966//2 1015//2\nf 1015//2 966//2 1119//2\nf 1119//2 966//2 372//2\nf 372//2 966//2 169//2\nf 169//2 966//2 1239//2\nf 1239//2 966//2 1181//2\nf 1110//2 811//2 810//2\nf 811//2 1110//2 1149//2\nf 1149//2 1110//2 1150//2\nf 1195//2 731//2 1238//2\nf 731//2 1195//2 730//2\nf 730//2 1195//2 368//2\nf 730//2 368//2 809//2\nf 809//2 368//2 808//2\nf 808//2 368//2 1107//2\nf 1107//2 368//2 1108//2\nf 1108//2 368//2 1172//2\nf 1172//2 368//2 1170//2\nf 1170//2 368//2 369//2\nf 370//2 1102//2 1173//2\nf 1102//2 370//2 371//2\nf 1102//2 371//2 377//2\nf 377//2 371//2 376//2\nf 930//2 1184//2 1145//2\nf 1184//2 930//2 1185//2\nf 1185//2 930//2 1186//2\nf 1150//2 717//2 1151//2\nf 717//2 1150//2 994//2\nf 994//2 1150//2 1187//2\nf 1187//2 1150//2 1105//2\nf 1105//2 1150//2 1110//2\nf 1105//2 1110//2 1108//2\nf 1105//2 1108//2 1172//2\nf 1105//2 1172//2 1171//2\nf 1105//2 1171//2 1173//2\nf 1105//2 1173//2 1102//2\nf 1187//2 1105//2 375//2\nf 994//2 1187//2 1197//2\nf 994//2 1197//2 1186//2\nf 994//2 1186//2 1258//2\nf 1186//2 1301//2 1258//2\nf 994//2 1258//2 1257//2\nf 1257//2 1303//2 994//2\nf 811//2 1148//2 899//2\nf 1148//2 811//2 1149//2\nf 167//2 1083//2 854//2\nf 1083//2 167//2 1182//2\nf 1182//2 167//2 169//2\nf 1182//2 169//2 1239//2\nf 1239//2 731//2 1182//2\nf 264//1 1182//1 265//1\nf 1182//1 264//1 1083//1\nf 963//201 1050//201 442//201\nf 1050//202 963//202 1054//202\nf 1054//203 963//203 1055//203\nf 1055//201 1018//201 1053//201\nf 1018//201 1055//201 1014//201\nf 1014//201 1055//201 964//201\nf 964//201 1055//201 963//201\nf 865//3 214//3 1272//3\nf 214//3 865//3 213//3\nf 216//1 214//1 1272//1\nf 1272//1 1200//1 216//1\nf 898//2 451//2 557//2\nf 451//2 898//2 1286//2\nf 1286//2 898//2 190//2\nf 190//2 898//2 188//2\nf 188//2 898//2 804//2\nf 188//2 804//2 380//2\nf 380//2 804//2 805//2\nf 380//2 805//2 381//2\nf 381//2 805//2 498//2\nf 381//2 498//2 513//2\nf 381//2 513//2 508//2\nf 513//2 498//2 1080//2\nf 1080//2 498//2 816//2\nf 816//2 498//2 497//2\nf 509//2 508//2 513//2\nf 457//2 1286//2 190//2\nf 310//5 805//5 308//5\nf 805//5 310//5 498//5\nf 497//1 274//1 311//1\nf 274//1 497//1 499//1\nf 1304//5 271//5 273//5\nf 271//5 1304//5 840//5\nf 1304//2 842//2 840//2\nf 842//2 1304//2 1090//2\nf 1090//2 1304//2 921//2\nf 1090//2 1274//2 913//2\nf 842//1 272//1 267//1\nf 272//1 842//1 1090//1\nf 16//2 15//2 18//2\nf 54//2 64//2 1273//2\nf 1307//2 1331//2 54//2\nf 1331//2 70//2 54//2\nf 77//4 53//4 1306//4\nf 92//1 90//1 94//1\nf 121//2 116//2 123//2\nf 156//3 154//3 151//3\nf 151//3 150//3 1309//3\nf 180//4 174//4 183//4\nf 181//4 184//4 185//4\nf 218//13 219//13 1302//13\nf 232//13 233//13 235//13\nf 247//13 245//13 1317//13\nf 1310//13 251//13 247//13\nf 189//13 262//13 1275//13\nf 289//13 288//13 295//13\nf 1327//13 301//13 280//13\nf 280//13 302//13 297//13\nf 174//13 171//13 312//13\nf 312//13 292//13 1323//13\nf 313//13 318//13 319//13\nf 1283//13 323//13 266//13\nf 266//13 265//13 1311//13\nf 235//13 327//13 329//13\nf 114//13 339//13 1312//13\nf 1305//13 113//13 114//13\nf 1322//13 354//13 346//13\nf 346//13 345//13 1284//13\nf 378//4 296//4 1313//4\nf 401//2 203//2 410//2\nf 406//2 407//2 425//2\nf 1276//5 435//5 432//5\nf 432//5 433//5 1316//5\nf 142//3 159//3 135//3\nf 456//1 454//1 1286//1\nf 453//2 556//2 1294//2\nf 1278//2 572//2 561//2\nf 561//2 1295//2 1296//2\nf 590//2 589//2 621//2\nf 1325//2 620//2 590//2\nf 632//4 587//4 633//4\nf 634//4 567//4 1314//4\nf 638//3 637//3 640//3\nf 1326//3 639//3 638//3\nf 208//5 563//5 1319//5\nf 1295//5 562//5 208//5\nf 235//5 593//5 1320//5\nf 1288//5 602//5 235//5\nf 726//3 728//3 1304//3\nf 745//2 738//2 743//2\nf 743//2 742//2 1298//2\nf 777//3 778//3 1321//3\nf 780//51 779//51 1287//51\nf 794//48 679//48 1299//48\nf 115//2 112//2 1308//2\nf 891//79 254//79 1279//79\nf 867//4 208//4 659//4\nf 446//2 632//2 1289//2\nf 1277//2 445//2 446//2\nf 1305//5 835//5 1318//5\nf 1329//5 1308//5 1305//5\nf 324//1 766//1 848//1\nf 1324//1 527//1 324//1\nf 1000//2 1002//2 1003//2\nf 203//3 410//3 1330//3\nf 905//3 921//3 203//3\nf 921//3 1323//3 203//3\nf 201//4 293//4 920//4\nf 1042//100 1067//100 1315//100\nf 463//1 1076//1 280//1\nf 280//1 1077//1 1280//1\nf 764//204 790//204 1300//204\nf 503//4 504//4 1291//4\nf 1092//2 868//2 1094//2\nf 1290//1 968//1 994//1\nf 1142//3 1141//3 1144//3\nf 1328//3 1281//3 1142//3\nf 1281//3 1143//3 1142//3\nf 247//5 742//5 1297//5\nf 750//5 748//5 247//5\nf 204//3 936//3 648//3\nf 223//1 156//1 1202//1\nf 1183//157 250//157 891//157\nf 1202//1 1309//1 1251//1\nf 1254//5 993//5 1303//5\nf 1147//1 1144//1 1292//1\nf 1253//188 367//188 1285//188\nf 1248//4 144//4 145//4\nf 869//2 1270//2 1282//2\nf 857//2 1200//2 1293//2\nf 1272//2 62//2 98//2\nf 1232//2 1261//2 1130//2\nf 1186//2 930//2 1301//2\nf 1257//2 1253//2 1303//2\nf 1239//2 1238//2 731//2\nf 1090//2 921//2 1274//2\n"
  },
  {
    "path": "src/JitterDemo/assets/teapot_hull.obj",
    "content": "# Blender v3.0.1 OBJ File: ''\n# www.blender.org\nmtllib teapot_hull.mtl\no geometry_0.002\nv -0.006595 57.805569 -36.537769\nv -0.004422 58.825485 -35.995827\nv 4.965154 57.805714 -36.238091\nv 10.050929 57.806252 -35.190212\nv 14.533181 57.806530 -33.636158\nv 22.647009 57.805637 -28.873335\nv 28.175053 57.805664 -23.548847\nv 31.734545 57.805408 -18.351068\nv 33.673985 57.805683 -14.450691\nv 35.097485 57.805939 -10.312224\nv 32.109489 57.805542 -10.311352\nv -0.006820 57.805542 -33.711391\nv -0.006820 63.134457 -10.311359\nv -0.006729 63.317886 -26.833252\nv -0.006523 62.454124 -30.601892\nv -0.006258 61.454723 -32.928249\nv -0.005839 60.164410 -34.734756\nv 4.632404 60.016628 -34.632607\nv 4.776755 58.728970 -35.731026\nv 34.213539 59.217865 -10.312323\nv 31.360018 61.466839 -10.319868\nv 28.418900 62.565575 -10.311272\nv 4.971883 65.927254 -10.311152\nv -0.004505 66.180794 -10.311270\nv 4.492048 61.606655 -32.387657\nv 9.555465 58.805195 -34.763557\nv 10.759564 61.321869 -31.496861\nv 9.794300 60.042046 -33.537766\nv 33.208008 58.723091 -14.284647\nv 32.142078 60.019047 -13.854864\nv 7.172393 62.493244 -29.754839\nv 6.033379 63.221771 -26.770365\nv 31.004818 58.907650 -18.389336\nv 14.133914 58.776783 -33.246014\nv 13.771989 62.460953 -27.474174\nv 16.794428 61.427761 -28.515339\nv 30.255795 60.016502 -17.656982\nv 28.561897 58.887009 -22.052404\nv 16.228689 59.894001 -31.255167\nv 18.432241 58.920963 -30.967772\nv 18.560198 57.805843 -31.633268\nv 14.350317 63.350246 -22.783758\nv 28.602385 61.413353 -16.704058\nv 25.180058 59.550465 -25.144955\nv 27.643225 60.059605 -21.478371\nv 22.160938 58.879467 -28.488655\nv 21.481468 60.064407 -27.632607\nv 25.777967 61.743240 -19.939482\nv 27.438166 62.396500 -14.250781\nv 19.991524 62.368095 -23.752432\nv 22.202625 61.413822 -24.676924\nv 22.380136 62.637997 -20.161076\nv 20.975470 63.440865 -16.121517\nv 23.812124 63.529282 -10.312107\nvn 0.0551 0.6516 -0.7566\nvn -0.1597 -0.9625 0.2192\nvn 0.0531 0.4685 -0.8819\nvn 0.0379 0.6852 -0.7274\nvn 0.0581 0.4897 -0.8700\nvn 0.1405 0.6516 -0.7454\nvn 0.1486 0.6815 -0.7166\nvn 0.8323 0.4746 -0.2863\nvn 0.8161 0.5109 -0.2702\nvn 0.0164 0.9187 -0.3947\nvn 0.7016 0.6634 -0.2602\nvn 0.0364 0.9353 -0.3521\nvn 0.0991 0.9082 -0.4067\nvn 0.2279 0.7727 -0.5924\nvn 0.0175 0.9852 -0.1707\nvn 0.6720 0.6625 -0.3309\nvn 0.7894 0.4720 -0.3925\nvn 0.7731 0.4982 -0.3926\nvn 0.2402 0.6595 -0.7123\nvn 0.1282 0.9249 -0.3579\nvn 0.2507 0.7075 -0.6608\nvn 0.0178 0.9746 -0.2234\nvn 0.6661 0.6685 -0.3309\nvn 0.2912 0.4576 -0.8401\nvn 0.2769 0.4903 -0.8264\nvn 0.1757 0.9048 -0.3878\nvn 0.2382 0.8257 -0.5114\nvn 0.0502 0.9860 -0.1588\nvn 0.0217 0.9731 -0.2292\nvn 0.6090 0.7721 -0.1815\nvn 0.3585 0.6009 -0.7144\nvn 0.3911 0.5043 -0.7699\nvn 0.3914 0.4774 -0.7867\nvn 0.2056 0.9246 -0.3206\nvn 0.0606 0.9856 -0.1581\nvn 0.4924 0.8064 -0.3276\nvn 0.5656 0.6750 -0.4737\nvn 0.0769 0.9750 -0.2087\nvn 0.0784 0.9777 -0.1950\nvn 0.2469 0.9057 -0.3445\nvn 0.3274 0.7941 -0.5121\nvn 0.4702 0.8198 -0.3269\nvn 0.3910 0.9033 -0.1765\nvn 0.1345 0.9704 -0.2006\nvn 0.3267 0.8271 -0.4573\nvn 0.0416 0.8166 -0.5757\nvn 0.3421 0.9170 -0.2051\nvn 0.3468 0.9294 -0.1262\nvn 0.6192 0.5517 -0.5587\nvn 0.6125 0.4696 -0.6359\nvn 0.5928 0.4957 -0.6347\nvn 0.4728 0.6779 -0.5630\nvn 0.4382 0.8021 -0.4057\nvn 0.4274 0.8205 -0.3796\nvn 0.2618 0.9337 -0.2443\nvn 0.2812 0.9191 -0.2761\nvn 0.4181 0.7835 -0.4597\nvn 0.2615 0.9473 -0.1851\nvn 0.1937 0.9729 -0.1260\nvn 0.1352 0.9797 -0.1477\nvn 0.1412 0.9758 -0.1672\nvn 0.1090 0.9865 -0.1218\nvn 0.1887 0.9762 -0.1070\nvn 0.2039 0.9746 -0.0926\nvn 0.1259 0.9891 -0.0765\nvn -1.0000 0.0022 -0.0001\nvn 0.0000 -1.0000 -0.0001\nvn -1.0000 0.0008 -0.0002\nvn -1.0000 -0.0002 0.0002\nvn -1.0000 0.0001 -0.0001\nvn -1.0000 0.0002 -0.0002\nvn -1.0000 0.0002 -0.0004\nvn -1.0000 -0.0000 -0.0011\nvn 0.1176 0.8153 -0.5669\nvn 0.0003 -1.0000 -0.0007\nvn 0.0001 -1.0000 0.0000\nvn -0.0001 -1.0000 0.0001\nvn 0.0002 -1.0000 -0.0002\nvn 0.7419 0.4376 -0.5080\nvn 0.7337 0.4687 -0.4920\nvn -0.0000 -0.0000 1.0000\nvn -0.0000 -0.0001 1.0000\nvn 0.6095 0.6784 -0.4103\nvn 0.0003 0.0010 1.0000\nvn 0.0000 -1.0000 -0.0000\nvn 0.0006 -1.0000 -0.0015\nvn 0.1641 0.5004 -0.8501\nvn 0.0001 0.0001 1.0000\nvn 0.4886 0.4878 -0.7234\nvn -0.0001 -0.0004 1.0000\nvn 0.0004 0.0028 1.0000\nvn 0.4127 0.6769 -0.6094\nvn 0.3882 0.7030 -0.5959\nvn 0.5295 0.8064 -0.2633\nvn 0.5097 0.8298 -0.2271\nvn 0.0079 0.0134 0.9999\nvn 0.0387 0.8131 -0.5808\nvn 0.1167 0.8139 -0.5692\nvn 0.6084 0.6806 -0.4083\nvn 0.1791 0.4602 -0.8695\nvn 0.4889 0.4818 -0.7272\nusemtl Default_OBJ.002\ns off\nf 2//1 18//1 19//1\nf 12//2 11//2 13//2\nf 2//3 3//3 1//3\nf 17//4 18//4 2//4\nf 3//5 2//5 19//5\nf 19//6 18//6 26//6\nf 18//7 28//7 26//7\nf 10//8 9//8 29//8\nf 10//9 29//9 20//9\nf 16//10 15//10 25//10\nf 29//11 30//11 20//11\nf 15//12 31//12 25//12\nf 25//13 31//13 27//13\nf 27//14 39//14 28//14\nf 24//15 32//15 14//15\nf 29//16 33//16 30//16\nf 29//17 9//17 8//17\nf 29//18 8//18 33//18\nf 28//19 34//19 26//19\nf 31//20 35//20 27//20\nf 28//21 39//21 34//21\nf 14//22 32//22 15//22\nf 33//23 37//23 30//23\nf 34//24 5//24 4//24\nf 34//25 4//25 26//25\nf 35//26 36//26 27//26\nf 27//27 36//27 39//27\nf 24//28 23//28 32//28\nf 15//29 32//29 31//29\nf 30//30 21//30 20//30\nf 34//31 39//31 40//31\nf 34//32 40//32 41//32\nf 34//33 41//33 5//33\nf 35//34 50//34 36//34\nf 23//35 42//35 32//35\nf 37//36 45//36 43//36\nf 38//37 44//37 45//37\nf 31//38 32//38 35//38\nf 35//39 32//39 42//39\nf 50//40 51//40 36//40\nf 39//41 36//41 47//41\nf 43//42 45//42 48//42\nf 21//43 43//43 49//43\nf 35//44 42//44 50//44\nf 36//45 51//45 47//45\nf 18//46 16//46 25//46\nf 43//47 48//47 49//47\nf 49//48 22//48 21//48\nf 38//49 7//49 44//49\nf 44//50 7//50 6//50\nf 44//51 6//51 46//51\nf 46//52 47//52 44//52\nf 45//53 44//53 51//53\nf 45//54 51//54 48//54\nf 50//55 52//55 48//55\nf 50//56 48//56 51//56\nf 47//57 51//57 44//57\nf 49//58 48//58 52//58\nf 49//59 52//59 53//59\nf 42//60 53//60 52//60\nf 42//61 52//61 50//61\nf 23//62 53//62 42//62\nf 53//63 54//63 49//63\nf 49//64 54//64 22//64\nf 23//65 54//65 53//65\nf 12//66 2//66 1//66\nf 3//67 8//67 1//67\nf 13//68 24//68 12//68\nf 24//69 14//69 12//69\nf 14//70 15//70 12//70\nf 15//71 16//71 12//71\nf 16//72 17//72 12//72\nf 17//73 2//73 12//73\nf 28//74 25//74 27//74\nf 4//75 41//75 3//75\nf 41//67 8//67 3//67\nf 9//76 10//76 8//76\nf 10//76 11//76 8//76\nf 41//77 6//77 8//77\nf 6//78 7//78 8//78\nf 7//79 38//79 8//79\nf 38//80 33//80 8//80\nf 23//81 24//81 13//81\nf 11//82 23//82 13//82\nf 45//83 33//83 38//83\nf 10//84 23//84 11//84\nf 8//85 12//85 1//85\nf 5//86 41//86 4//86\nf 26//87 3//87 19//87\nf 20//88 23//88 10//88\nf 40//89 6//89 41//89\nf 20//90 22//90 23//90\nf 22//91 54//91 23//91\nf 40//92 47//92 46//92\nf 39//93 47//93 40//93\nf 37//94 43//94 30//94\nf 43//95 21//95 30//95\nf 21//96 22//96 20//96\nf 18//97 17//97 16//97\nf 28//98 18//98 25//98\nf 45//99 37//99 33//99\nf 8//85 11//85 12//85\nf 26//100 4//100 3//100\nf 40//101 46//101 6//101\no geometry_1.002\nv -0.013484 57.788525 -36.548210\nv -0.007043 58.818039 -35.995529\nv -0.006820 57.788525 -33.738831\nv -32.063408 57.788525 -10.313916\nv -32.626400 57.786488 -16.867575\nv -27.479321 57.788490 -24.385965\nv -22.797735 57.788429 -28.760271\nv -16.337326 57.786526 -32.912834\nv -9.964095 57.789009 -35.224014\nv -4.818059 57.788788 -36.261627\nv -4.939846 59.990070 -34.645805\nv -0.007255 60.127617 -34.769249\nv -0.007857 61.426872 -32.985310\nv -0.006902 62.452282 -30.592264\nv -0.006981 63.311787 -26.865370\nv -0.015882 66.208160 -10.313177\nv -0.006820 63.134373 -10.314016\nv -4.814950 58.695194 -35.752636\nv -4.277049 61.626392 -32.385460\nv -6.465405 65.762527 -10.313819\nv -27.604595 62.804146 -10.314017\nv -31.027582 61.597141 -10.314042\nv -33.382477 60.037354 -10.314277\nv -35.126396 57.804493 -10.316096\nv -9.551099 58.803177 -34.764805\nv -10.758188 61.353275 -31.452557\nv -14.449471 58.717987 -33.157913\nv -10.083522 60.032391 -33.475498\nv -13.991083 60.032246 -32.080204\nv -9.183270 62.411842 -29.411097\nv -33.317131 58.771824 -13.961535\nv -5.253506 62.876057 -28.707001\nv -17.685968 60.004238 -30.263836\nv -16.655369 61.406189 -28.640587\nv -13.999311 62.412628 -27.497437\nv -31.419865 60.107704 -15.352797\nv -31.213875 58.940792 -17.985620\nv -13.579688 63.362061 -23.213593\nv -18.402906 58.922607 -30.980516\nv -29.478119 61.424870 -15.123213\nv -22.111593 58.887169 -28.517141\nv -21.444124 60.042534 -27.711842\nv -19.648672 62.359581 -24.080544\nv -28.518938 58.870079 -22.135141\nv -20.446543 61.361877 -26.170317\nv -27.830027 60.030495 -21.331377\nv -25.523138 58.819592 -25.600864\nv -24.762255 60.011272 -24.812868\nv -23.503227 61.410599 -23.383728\nv -27.357895 62.424412 -14.191297\nv -25.756466 61.687107 -20.134413\nv -22.895378 62.626053 -19.620398\nv -20.099874 63.394485 -17.554056\nv -23.855082 63.539047 -10.316866\nvn -0.0524 0.4726 -0.8797\nvn 1.0000 -0.0050 -0.0024\nvn -0.0565 0.4890 -0.8705\nvn -0.0550 0.6457 -0.7616\nvn -0.0373 0.6830 -0.7294\nvn -0.0372 0.8078 -0.5883\nvn 0.1605 -0.9623 0.2196\nvn -0.0430 0.8152 -0.5775\nvn 0.0000 -0.0003 1.0000\nvn -0.0007 -0.0003 1.0000\nvn -0.1438 0.6349 -0.7590\nvn -0.1232 0.8116 -0.5710\nvn -0.1152 0.8204 -0.5601\nvn -0.0124 0.9191 -0.3938\nvn -0.1570 0.6816 -0.7147\nvn -0.2475 0.6482 -0.7202\nvn -0.2080 0.7858 -0.5825\nvn -0.0959 0.9120 -0.3989\nvn -0.0515 0.9414 -0.3335\nvn -0.0430 0.9424 -0.3316\nvn -0.7683 0.6003 -0.2221\nvn -0.0213 0.9848 -0.1723\nvn -0.2797 0.4882 -0.8267\nvn -0.3117 0.4057 -0.8592\nvn -0.2513 0.6646 -0.7036\nvn -0.1449 0.9196 -0.3651\nvn -0.6741 0.6940 -0.2529\nvn -0.6945 0.6361 -0.3363\nvn -0.0507 0.9852 -0.1640\nvn -0.3338 0.6646 -0.6685\nvn -0.2374 0.8247 -0.5133\nvn -0.3338 0.6644 -0.6687\nvn -0.2657 0.8066 -0.5280\nvn -0.1764 0.9051 -0.3870\nvn -0.8672 0.3711 -0.3320\nvn -0.7452 0.5573 -0.3661\nvn -0.0682 0.9869 -0.1461\nvn -0.3748 0.5666 -0.7338\nvn -0.2076 0.9213 -0.3289\nvn -0.0020 0.9744 -0.2247\nvn -0.4934 0.4088 -0.7678\nvn -0.4917 0.4693 -0.7335\nvn -0.3254 0.8080 -0.4913\nvn -0.3252 0.8121 -0.4846\nvn -0.2349 0.9090 -0.3443\nvn -0.0825 0.9747 -0.2079\nvn -0.0785 0.9756 -0.2052\nvn -0.5071 0.8024 -0.3148\nvn -0.5921 0.7186 -0.3648\nvn -0.6249 0.6599 -0.4171\nvn -0.7502 0.4388 -0.4947\nvn -0.1044 0.9865 -0.1260\nvn -0.4894 0.6710 -0.5570\nvn -0.4155 0.6693 -0.6159\nvn -0.1314 0.9705 -0.2022\nvn -0.2810 0.9034 -0.3240\nvn -0.3665 0.9181 -0.1510\nvn -0.4770 0.8219 -0.3112\nvn -0.7708 0.3571 -0.5276\nvn -0.5565 0.6704 -0.4908\nvn -0.4882 0.6764 -0.5515\nvn -0.3889 0.8090 -0.4407\nvn -0.3938 0.8059 -0.4421\nvn -0.3304 0.9371 -0.1128\nvn -0.3418 0.9169 -0.2059\nvn -0.6305 0.5447 -0.5530\nvn -0.5685 0.4997 -0.6535\nvn -0.6262 0.3984 -0.6702\nvn -0.5513 0.6757 -0.4895\nvn -0.1378 0.9767 -0.1644\nvn -0.2759 0.9225 -0.2698\nvn -0.2619 0.9331 -0.2464\nvn -0.2749 0.9423 -0.1910\nvn -0.4379 0.8179 -0.3733\nvn -0.4441 0.8038 -0.3958\nvn -0.1264 0.9883 -0.0853\nvn -0.1463 0.9754 -0.1648\nvn -0.1837 0.9763 -0.1148\nvn -0.1913 0.9756 -0.1077\nvn -0.1836 0.9763 -0.1147\nvn 0.0001 -1.0000 -0.0000\nvn -0.0001 -1.0000 -0.0011\nvn -0.0006 -1.0000 -0.0027\nvn -0.5335 0.8215 -0.2013\nvn 1.0000 0.0002 -0.0000\nvn 1.0000 0.0003 0.0002\nvn 1.0000 0.0004 -0.0006\nvn 1.0000 0.0000 0.0000\nvn 0.0002 -1.0000 0.0003\nvn 0.0001 -1.0000 0.0001\nvn -0.0009 -1.0000 -0.0009\nvn 1.0000 0.0029 0.0000\nvn -0.0002 0.0013 1.0000\nvn -0.0000 0.0001 1.0000\nvn -0.0000 -0.0001 1.0000\nvn -0.0001 0.0001 1.0000\nvn -0.0052 -1.0000 0.0008\nvn -0.0007 -1.0000 -0.0008\nvn -0.1750 0.4644 -0.8682\nvn -0.0019 0.0137 0.9999\nvn -0.4089 0.6767 -0.6123\nvn -0.5411 0.8170 -0.1994\nvn -0.1682 0.4831 -0.8593\nusemtl Default_OBJ.002\ns off\nf 55//102 64//102 56//102\nf 56//103 57//103 55//103\nf 64//104 72//104 56//104\nf 56//105 72//105 65//105\nf 56//106 65//106 66//106\nf 66//107 65//107 67//107\nf 57//108 71//108 58//108\nf 65//109 73//109 67//109\nf 58//110 71//110 70//110\nf 58//111 77//111 78//111\nf 72//112 79//112 65//112\nf 65//113 82//113 80//113\nf 65//114 80//114 73//114\nf 67//115 73//115 68//115\nf 65//116 79//116 82//116\nf 79//117 81//117 82//117\nf 82//118 83//118 80//118\nf 80//119 84//119 73//119\nf 73//120 84//120 86//120\nf 68//121 73//121 86//121\nf 78//122 77//122 85//122\nf 70//123 69//123 86//123\nf 63//124 81//124 79//124\nf 81//125 63//125 62//125\nf 83//126 82//126 81//126\nf 80//127 89//127 84//127\nf 85//128 77//128 90//128\nf 85//129 90//129 91//129\nf 70//130 86//130 92//130\nf 81//131 93//131 83//131\nf 80//132 83//132 88//132\nf 83//133 93//133 87//133\nf 87//134 88//134 83//134\nf 80//135 88//135 89//135\nf 78//136 85//136 59//136\nf 85//137 91//137 59//137\nf 70//138 92//138 74//138\nf 81//139 62//139 93//139\nf 89//140 88//140 97//140\nf 68//141 86//141 69//141\nf 93//142 62//142 61//142\nf 93//143 61//143 95//143\nf 88//144 87//144 96//144\nf 88//145 96//145 99//145\nf 88//146 99//146 97//146\nf 89//147 92//147 84//147\nf 84//148 92//148 86//148\nf 90//149 94//149 100//149\nf 90//150 100//150 91//150\nf 91//151 100//151 98//151\nf 91//152 98//152 59//152\nf 74//153 92//153 107//153\nf 95//154 101//154 96//154\nf 96//155 93//155 95//155\nf 89//156 97//156 92//156\nf 97//157 99//157 103//157\nf 94//158 76//158 104//158\nf 94//159 105//159 100//159\nf 59//160 98//160 60//160\nf 98//161 100//161 101//161\nf 96//162 101//162 102//162\nf 96//163 103//163 99//163\nf 96//164 102//164 103//164\nf 104//165 76//165 75//165\nf 104//166 105//166 94//166\nf 98//167 101//167 60//167\nf 95//168 61//168 101//168\nf 101//169 61//169 60//169\nf 102//170 101//170 100//170\nf 92//171 97//171 107//171\nf 97//172 103//172 105//172\nf 97//173 105//173 106//173\nf 104//174 106//174 105//174\nf 105//175 103//175 100//175\nf 100//176 103//176 102//176\nf 74//177 107//177 108//177\nf 106//178 107//178 97//178\nf 104//179 108//179 106//179\nf 75//180 108//180 104//180\nf 108//181 107//181 106//181\nf 57//182 62//182 55//182\nf 62//183 64//183 55//183\nf 62//184 63//184 64//184\nf 90//185 76//185 94//185\nf 66//186 57//186 56//186\nf 66//187 67//187 57//187\nf 67//188 68//188 57//188\nf 68//189 69//189 57//189\nf 69//189 71//189 57//189\nf 58//190 59//190 57//190\nf 59//191 62//191 57//191\nf 59//192 61//192 62//192\nf 70//193 71//193 69//193\nf 70//194 74//194 75//194\nf 70//195 75//195 76//195\nf 70//196 76//196 77//196\nf 70//197 77//197 58//197\nf 78//198 59//198 58//198\nf 60//199 61//199 59//199\nf 79//200 64//200 63//200\nf 108//201 75//201 74//201\nf 96//202 87//202 93//202\nf 90//203 77//203 76//203\nf 79//204 72//204 64//204\no geometry_2.002\nv -21.617357 34.122139 -41.263264\nv -21.617378 34.121754 -38.587406\nv -21.617378 57.788525 -26.009310\nv -21.617224 57.785744 -29.634121\nv -21.617344 50.026363 -34.040905\nv -21.616234 44.391254 -37.020428\nv -21.617218 40.098335 -38.967796\nv -18.257410 34.122334 -42.888897\nv -12.385886 34.121655 -44.882217\nv -6.309052 34.121799 -46.091400\nv -0.011666 34.122040 -46.500553\nv -0.006820 34.121758 -44.085312\nv -0.006817 37.609802 -45.336926\nv -0.007160 42.016933 -43.717690\nv -0.008493 45.013771 -42.462029\nv -0.008098 55.796234 -37.543491\nv -0.007747 57.788414 -36.530865\nv -0.006820 57.788525 -33.742432\nv -5.439300 57.788742 -36.188038\nv -10.160952 57.788692 -35.176350\nv -14.826732 57.787857 -33.525841\nv -17.823847 57.787537 -32.036804\nv -19.102509 57.785397 -31.310616\nv -17.912975 36.045025 -42.389458\nv -17.811121 39.061474 -41.281994\nv -12.970057 36.234177 -44.013184\nv -16.933546 42.376682 -40.254242\nv -6.283219 37.387913 -45.034794\nv -0.628809 37.640930 -45.330559\nv -16.846680 46.455559 -38.402344\nv -14.199665 39.181385 -42.504543\nv -0.630370 49.063694 -40.646690\nv -4.413845 56.498581 -36.926186\nv -20.289162 50.262558 -34.784683\nv -14.999471 54.397301 -35.254707\nv -15.499918 46.670052 -38.827465\nv -11.481278 38.756302 -43.507675\nv -11.468575 45.153820 -40.896992\nv -10.594352 35.696110 -44.761738\nv -5.979128 41.058594 -43.698181\nv -11.576991 41.893631 -42.261272\nv -10.121586 49.073616 -39.413998\nv -7.157808 44.981262 -41.849602\nv -4.800716 48.833771 -40.479828\nv -6.171741 50.542252 -39.520546\nv -10.117232 55.852268 -36.185688\nv -11.686590 50.658707 -38.222595\nv -5.441142 45.657143 -41.833778\nvn -0.0005 -1.0000 -0.0012\nvn 0.2192 -0.4579 0.8616\nvn 1.0000 -0.0007 -0.0020\nvn 0.3116 -0.3805 0.8707\nvn -0.4158 0.2977 -0.8594\nvn -0.4253 0.3245 -0.8449\nvn -0.3086 0.2906 -0.9057\nvn 0.0061 0.3165 -0.9486\nvn -0.3078 0.2879 -0.9068\nvn -0.4082 0.3672 -0.8358\nvn -0.4112 0.3766 -0.8301\nvn -0.4066 0.3849 -0.8286\nvn -0.3332 0.3957 -0.8558\nvn -0.3103 0.3555 -0.8817\nvn -0.3119 0.3367 -0.8884\nvn -0.3060 0.3295 -0.8932\nvn 0.0469 0.4146 -0.9088\nvn -0.4459 0.4323 -0.7838\nvn -0.3333 0.4134 -0.8474\nvn -0.2973 0.3665 -0.8816\nvn -0.2774 0.3436 -0.8972\nvn -0.5005 0.4046 -0.7654\nvn -0.4116 0.4041 -0.8169\nvn -0.3004 0.3896 -0.8706\nvn -0.2763 0.3475 -0.8960\nvn -0.1786 0.3041 -0.9357\nvn -0.3982 0.4165 -0.8173\nvn -0.2949 0.3772 -0.8779\nvn -0.1865 0.3258 -0.9269\nvn -0.1871 0.2848 -0.9401\nvn -0.1782 0.3497 -0.9198\nvn -0.1816 0.3583 -0.9158\nvn -0.0644 0.3462 -0.9360\nvn -0.0596 0.3527 -0.9338\nvn 0.0077 0.3449 -0.9386\nvn -0.1126 0.4245 -0.8984\nvn -0.2986 0.4456 -0.8440\nvn -0.2924 0.4368 -0.8507\nvn -0.2900 0.4241 -0.8579\nvn -0.2993 0.4163 -0.8585\nvn -0.2904 0.4088 -0.8652\nvn -0.1822 0.4021 -0.8973\nvn -0.1845 0.3846 -0.9045\nvn -0.1775 0.3754 -0.9097\nvn -0.1437 0.3862 -0.9112\nvn -0.1033 0.4227 -0.9004\nvn -0.1218 0.4099 -0.9040\nvn -0.1812 0.4230 -0.8878\nvn -0.1754 0.4066 -0.8966\nvn -0.0608 0.3857 -0.9206\nvn -0.0642 0.3814 -0.9222\nvn -0.0634 0.3076 -0.9494\nvn -0.1870 0.4507 -0.8728\nvn -0.1768 0.4259 -0.8873\nvn -0.1510 0.4045 -0.9020\nvn -0.0001 -1.0000 -0.0001\nvn 0.0000 -1.0000 0.0000\nvn -1.0000 0.0000 -0.0000\nvn -1.0000 0.0002 -0.0008\nvn -1.0000 0.0001 0.0004\nvn -0.2243 0.3171 -0.9215\nvn -0.2157 0.3161 -0.9239\nvn 0.0000 -1.0000 0.0001\nvn 0.0000 -1.0000 -0.0001\nvn 1.0000 -0.0000 0.0000\nvn 0.0000 1.0000 0.0000\nvn -0.0002 1.0000 -0.0003\nvn -0.0010 1.0000 -0.0008\nvn -0.0587 0.4014 -0.9140\nvn -0.0595 0.4224 -0.9045\nvn 1.0000 -0.0025 0.0071\nvn 1.0000 0.0017 -0.0039\nvn 1.0000 0.0014 -0.0031\nvn 1.0000 0.0002 -0.0003\nvn 0.0001 1.0000 -0.0000\nvn -0.0558 0.4620 -0.8851\nvn 0.0002 1.0000 0.0012\nvn -0.0001 1.0000 0.0001\nvn -0.0121 0.9998 -0.0184\nvn -0.4013 0.4322 -0.8076\nvn -0.4062 0.4279 -0.8074\nvn -0.5015 0.4273 -0.7523\nvn -0.0526 0.4525 -0.8902\nvn -0.2440 0.4171 -0.8755\nvn -0.2456 0.4157 -0.8757\nvn -0.0618 0.3051 -0.9503\nvn -0.0583 0.4009 -0.9143\nvn -0.0594 0.4223 -0.9045\nvn -0.4984 0.4270 -0.7545\nusemtl Default_OBJ.002\ns off\nf 109//205 116//205 117//205\nf 110//206 120//206 111//206\nf 120//207 119//207 121//207\nf 120//208 126//208 111//208\nf 109//209 132//209 116//209\nf 109//210 133//210 132//210\nf 109//210 115//210 133//210\nf 116//211 132//211 134//211\nf 119//212 137//212 121//212\nf 134//213 117//213 116//213\nf 133//214 115//214 135//214\nf 135//215 115//215 114//215\nf 135//216 114//216 138//216\nf 135//217 138//217 144//217\nf 133//218 135//218 139//218\nf 133//219 139//219 132//219\nf 132//220 139//220 134//220\nf 124//221 123//221 140//221\nf 131//222 130//222 142//222\nf 138//223 143//223 144//223\nf 135//224 149//224 139//224\nf 134//225 139//225 145//225\nf 142//226 114//226 113//226\nf 138//227 114//227 142//227\nf 144//228 146//228 135//228\nf 139//229 149//229 145//229\nf 118//230 147//230 136//230\nf 138//231 142//231 143//231\nf 135//232 146//232 149//232\nf 147//233 145//233 136//233\nf 118//234 117//234 147//234\nf 136//235 145//235 148//235\nf 148//236 145//236 149//236\nf 136//237 148//237 137//237\nf 137//238 148//238 122//238\nf 137//239 122//239 121//239\nf 141//240 153//240 127//240\nf 143//241 129//241 128//241\nf 143//242 128//242 154//242\nf 154//243 155//243 143//243\nf 143//244 155//244 144//244\nf 144//245 155//245 146//245\nf 146//246 150//246 151//246\nf 149//247 146//247 151//247\nf 148//248 149//248 151//248\nf 151//249 156//249 148//249\nf 152//250 153//250 141//250\nf 153//251 152//251 156//251\nf 150//252 154//252 153//252\nf 153//253 151//253 150//253\nf 156//254 123//254 122//254\nf 156//255 122//255 148//255\nf 137//256 118//256 136//256\nf 127//257 154//257 128//257\nf 127//258 153//258 154//258\nf 153//259 156//259 151//259\nf 109//260 117//260 110//260\nf 117//261 120//261 110//261\nf 111//262 113//262 110//262\nf 113//263 114//263 110//263\nf 114//264 115//264 110//264\nf 115//262 109//262 110//262\nf 134//265 145//265 117//265\nf 145//266 147//266 117//266\nf 118//267 119//267 117//267\nf 119//268 120//268 117//268\nf 121//269 126//269 120//269\nf 126//270 127//270 111//270\nf 127//271 130//271 111//271\nf 130//272 112//272 111//272\nf 112//262 113//262 111//262\nf 140//273 156//273 152//273\nf 152//274 124//274 140//274\nf 122//275 123//275 121//275\nf 123//276 124//276 121//276\nf 124//277 125//277 121//277\nf 125//278 126//278 121//278\nf 125//279 127//279 126//279\nf 125//280 141//280 127//280\nf 128//281 129//281 127//281\nf 129//282 130//282 127//282\nf 131//283 112//283 130//283\nf 129//284 143//284 130//284\nf 143//285 142//285 130//285\nf 131//286 113//286 112//286\nf 141//287 125//287 124//287\nf 150//288 155//288 154//288\nf 155//289 150//289 146//289\nf 137//290 119//290 118//290\nf 140//291 123//291 156//291\nf 152//292 141//292 124//292\nf 131//293 142//293 113//293\no geometry_3.002\nv -35.269260 57.724724 9.913306\nv -34.685097 58.747372 9.919498\nv -33.463852 60.073532 9.915801\nv -31.189861 61.595524 9.914171\nv -28.324129 62.630745 9.914873\nv -23.329567 63.620598 9.914210\nv -3.429576 66.168442 9.913308\nv 2.781106 66.196892 9.913988\nv 9.960983 65.390259 9.914147\nv 9.958168 62.402023 9.914140\nv 9.961049 57.728111 32.376602\nv 9.962338 57.731701 35.238853\nv 5.294174 57.729446 36.242561\nv 0.112273 57.727959 36.581177\nv -5.008788 57.728508 36.277939\nv -10.081551 57.728874 35.226158\nv -14.609143 57.728142 33.640614\nv -18.459023 57.728088 31.723732\nv -22.810158 57.727997 28.797632\nv -27.796671 57.728218 24.055967\nv -31.717754 57.727993 18.466671\nv -33.641552 57.728462 14.605716\nv -33.320576 58.770088 13.953783\nv -31.205973 58.907646 18.046259\nv -31.391972 59.966969 15.821580\nv 9.962027 63.372208 24.835363\nv 9.959321 60.027714 33.502876\nv -30.486979 61.392368 12.941717\nv -28.504009 58.887291 22.127111\nv -28.590908 61.415714 16.697573\nv -27.743502 60.023247 21.448011\nv -27.509748 62.452904 13.725533\nv 9.108517 58.914093 34.775417\nv -25.516043 58.815708 25.613131\nv -25.777409 61.683479 20.118053\nv 4.776003 58.728531 35.730389\nv -24.776741 60.013062 24.793856\nv -23.476774 61.408344 23.413057\nv 9.952760 61.450050 31.505495\nv 3.245868 60.059219 34.770367\nv -22.025675 58.889614 28.577202\nv -21.432119 60.041145 27.722622\nv -22.941338 62.629971 19.534466\nv -22.441319 63.452358 13.755628\nv 0.045448 58.808662 36.010189\nv -19.142902 63.297371 19.318798\nv 2.263921 61.420410 32.985313\nv -18.492161 58.882534 30.964012\nv -17.713377 59.995220 30.259647\nv -20.277399 61.721325 25.566547\nv -16.656370 61.401634 28.646109\nv 9.959681 62.406948 29.179956\nv -14.379378 58.730095 33.176208\nv 2.139515 63.263367 27.102608\nv 2.813992 62.457642 30.530663\nv -4.961843 59.986908 34.645180\nv -13.984393 60.031857 32.082825\nv -13.648026 62.153187 28.437567\nv -17.400938 62.626297 24.678429\nv -5.606788 63.207012 26.937595\nv -4.838555 58.671314 35.769360\nv -9.597413 58.798328 34.758404\nv -10.071563 60.029263 33.482151\nv -2.315155 62.676525 29.751236\nv -4.235733 61.623978 32.397163\nv -10.756112 61.372395 31.413889\nv -11.905979 63.301800 24.324144\nv -10.026971 62.437138 29.105154\nvn -0.0253 0.0205 -0.9995\nvn -0.0061 -1.0000 0.0029\nvn -0.8344 0.4750 0.2796\nvn 0.1007 -0.9740 -0.2027\nvn -0.7142 0.6583 0.2378\nvn -0.7143 0.6068 0.3487\nvn -0.6731 0.6965 0.2487\nvn -0.8465 0.4444 0.2933\nvn -0.7836 0.4847 0.3886\nvn -0.7851 0.4801 0.3913\nvn -0.5692 0.7938 0.2140\nvn -0.5054 0.8259 0.2500\nvn -0.5469 0.8172 0.1818\nvn -0.5126 0.7949 0.3245\nvn -0.3722 0.9101 0.1822\nvn -0.3660 0.9190 0.1466\nvn 0.3737 0.5597 0.7397\nvn 0.1851 0.4716 0.8621\nvn -0.5582 0.6680 0.4922\nvn -0.4725 0.8194 0.3245\nvn 0.1633 0.5158 0.8410\nvn -0.6352 0.5367 0.5554\nvn -0.3319 0.9217 0.2009\nvn -0.3375 0.9342 0.1157\nvn 0.1106 0.9849 0.1332\nvn -0.5507 0.6755 0.4903\nvn -0.4433 0.8044 0.3955\nvn -0.4376 0.8177 0.3738\nvn -0.2758 0.9426 0.1882\nvn 0.1359 0.6988 0.7023\nvn 0.1312 0.6748 0.7263\nvn -0.6381 0.3773 0.6711\nvn -0.5648 0.5052 0.6525\nvn -0.4898 0.6681 0.5601\nvn -0.4876 0.6777 0.5504\nvn -0.1927 0.9737 0.1219\nvn -0.1937 0.9772 0.0870\nvn -0.1932 0.9772 0.0875\nvn 0.1057 0.8179 0.5656\nvn 0.1126 0.8096 0.5761\nvn 0.0599 0.4798 0.8753\nvn -0.3943 0.8054 0.4426\nvn -0.2691 0.9259 0.2652\nvn -0.2586 0.9318 0.2546\nvn -0.1648 0.9784 0.1250\nvn 0.0566 0.6261 0.7777\nvn 0.0575 0.4692 0.8812\nvn -0.4929 0.4716 0.7311\nvn -0.3742 0.8179 0.4370\nvn -0.3252 0.8080 0.4913\nvn -0.3246 0.8225 0.4671\nvn -0.2229 0.9447 0.2407\nvn -0.4931 0.4683 0.7332\nvn -0.3968 0.4966 0.7720\nvn -0.1608 0.9715 0.1739\nvn 0.0354 0.9849 0.1694\nvn -0.0045 0.9858 0.1681\nvn 0.0783 0.9219 0.3796\nvn 0.0739 0.9126 0.4022\nvn -0.0163 0.7907 0.6119\nvn -0.0169 0.7254 0.6881\nvn -0.0523 0.4640 0.8843\nvn -0.3959 0.4593 0.7951\nvn -0.2060 0.9185 0.3376\nvn -0.1959 0.9295 0.3126\nvn -0.0108 0.9854 0.1700\nvn -0.0273 0.8122 0.5827\nvn -0.0557 0.6456 0.7616\nvn -0.0567 0.4819 0.8744\nvn -0.2804 0.4884 0.8264\nvn -0.2662 0.8062 0.5283\nvn -0.2508 0.6661 0.7024\nvn -0.2365 0.8253 0.5128\nvn -0.1210 0.9877 0.0993\nvn 0.0070 0.9738 0.2275\nvn -0.0062 0.9216 0.3880\nvn -0.2471 0.6500 0.7187\nvn -0.2941 0.4566 0.8396\nvn -0.1571 0.6810 0.7152\nvn -0.2069 0.7878 0.5801\nvn -0.1925 0.8870 0.4197\nvn -0.1199 0.9631 0.2410\nvn -0.1104 0.9811 0.1587\nvn -0.1267 0.9893 0.0726\nvn -0.0149 0.9328 0.3602\nvn -0.1443 0.6350 0.7589\nvn -0.1161 0.8204 0.5599\nvn -0.1227 0.8133 0.5688\nvn -0.1413 0.9152 0.3774\nvn -0.1053 0.9705 0.2169\nvn -0.0968 0.9855 0.1391\nvn -0.0113 0.9801 0.1981\nvn -0.0534 0.9849 0.1645\nvn -0.0571 0.9412 0.3330\nvn -0.4100 0.6752 0.6132\nvn -0.0503 0.9691 0.2416\nvn -0.0944 0.9150 0.3922\nvn -0.0700 0.9764 0.2041\nvn -0.0009 -1.0000 0.0007\nvn 0.0014 -0.0031 -1.0000\nvn -0.0001 -0.0002 -1.0000\nvn 0.0000 -0.0005 -1.0000\nvn 0.0001 -0.0010 -1.0000\nvn -0.0000 -0.0003 -1.0000\nvn -0.0000 0.0000 -1.0000\nvn -0.0001 0.0011 -1.0000\nvn 0.0000 -1.0000 0.0001\nvn -0.0001 -1.0000 0.0002\nvn -0.0002 -1.0000 0.0002\nvn -0.0000 -1.0000 0.0000\nvn -0.7448 0.4150 0.5225\nvn 1.0000 -0.0009 -0.0003\nvn 1.0000 -0.0015 -0.0004\nvn 0.0008 -1.0000 0.0013\nvn 0.0003 -1.0000 0.0007\nvn -0.0001 -1.0000 0.0007\nvn -0.0004 -1.0000 0.0016\nvn 0.0492 0.9750 0.2166\nvn -0.1684 0.4914 0.8545\nvn -0.6024 0.6999 0.3836\nvn 1.0000 -0.0001 -0.0001\nvn 1.0000 0.0018 0.0009\nvn 1.0000 0.0024 0.0014\nvn -0.7268 0.4877 0.4837\nvn -0.3338 0.6636 0.6695\nvn 0.9997 0.0208 0.0115\nvn -0.4144 0.6704 0.6155\nvn 0.0484 0.9744 0.2195\nvn -0.1801 0.4615 0.8687\nvn -0.6217 0.6643 0.4150\nvn -0.3366 0.6605 0.6712\nusemtl Default_OBJ.002\ns off\nf 157//294 158//294 159//294\nf 157//295 177//295 178//295\nf 157//296 179//296 158//296\nf 157//297 166//297 167//297\nf 158//298 179//298 159//298\nf 179//299 180//299 181//299\nf 179//300 181//300 159//300\nf 157//301 178//301 179//301\nf 179//302 178//302 180//302\nf 180//303 178//303 177//303\nf 181//304 184//304 159//304\nf 181//305 186//305 184//305\nf 184//306 160//306 159//306\nf 181//307 187//307 186//307\nf 184//308 186//308 188//308\nf 184//309 188//309 160//309\nf 168//310 183//310 189//310\nf 168//311 189//311 169//311\nf 185//312 190//312 187//312\nf 187//313 191//313 186//313\nf 189//314 192//314 169//314\nf 185//315 176//315 190//315\nf 186//316 191//316 188//316\nf 160//317 188//317 161//317\nf 182//318 165//318 164//318\nf 187//319 190//319 193//319\nf 187//320 193//320 194//320\nf 187//321 194//321 191//321\nf 188//322 191//322 199//322\nf 183//323 196//323 189//323\nf 189//324 196//324 192//324\nf 190//325 176//325 175//325\nf 190//326 175//326 197//326\nf 190//327 197//327 198//327\nf 190//328 198//328 193//328\nf 188//329 199//329 200//329\nf 161//330 188//330 162//330\nf 188//331 200//331 162//331\nf 195//332 203//332 196//332\nf 195//333 196//333 183//333\nf 192//334 201//334 169//334\nf 193//335 198//335 194//335\nf 194//336 206//336 191//336\nf 191//337 206//337 199//337\nf 199//338 202//338 200//338\nf 196//339 201//339 192//339\nf 201//340 170//340 169//340\nf 197//341 175//341 204//341\nf 198//342 206//342 194//342\nf 198//343 205//343 207//343\nf 198//344 207//344 206//344\nf 206//345 215//345 199//345\nf 175//346 174//346 204//346\nf 204//347 174//347 209//347\nf 199//348 215//348 202//348\nf 164//349 210//349 182//349\nf 164//350 163//350 210//350\nf 208//351 211//351 195//351\nf 195//352 211//352 203//352\nf 196//353 203//353 212//353\nf 196//354 212//354 201//354\nf 170//355 201//355 171//355\nf 209//356 174//356 173//356\nf 206//357 207//357 214//357\nf 206//358 214//358 215//358\nf 163//359 216//359 210//359\nf 203//360 221//360 212//360\nf 212//361 217//361 201//361\nf 171//362 201//362 217//362\nf 209//363 172//363 218//363\nf 205//364 213//364 207//364\nf 213//365 209//365 219//365\nf 213//366 222//366 207//366\nf 200//367 202//367 163//367\nf 210//368 220//368 211//368\nf 203//369 211//369 221//369\nf 209//370 218//370 219//370\nf 173//371 172//371 209//371\nf 219//372 218//372 212//372\nf 213//373 219//373 222//373\nf 222//374 214//374 207//374\nf 214//375 224//375 215//375\nf 202//376 215//376 223//376\nf 163//377 162//377 200//377\nf 211//378 220//378 221//378\nf 217//379 212//379 218//379\nf 212//380 221//380 222//380\nf 212//381 222//381 219//381\nf 222//382 224//382 214//382\nf 224//383 223//383 215//383\nf 202//384 223//384 163//384\nf 210//385 216//385 220//385\nf 163//386 223//386 216//386\nf 220//387 224//387 221//387\nf 198//388 204//388 205//388\nf 220//389 216//389 224//389\nf 224//390 222//390 221//390\nf 223//391 224//391 216//391\nf 175//392 177//392 157//392\nf 159//393 160//393 161//393\nf 159//394 161//394 162//394\nf 159//395 162//395 163//395\nf 159//396 163//396 164//396\nf 159//397 164//397 165//397\nf 159//398 165//398 166//398\nf 159//399 166//399 157//399\nf 167//400 170//400 157//400\nf 170//401 175//401 157//401\nf 176//402 177//402 175//402\nf 170//400 173//400 175//400\nf 173//403 174//403 175//403\nf 176//404 185//404 177//404\nf 165//405 168//405 166//405\nf 168//406 167//406 166//406\nf 168//407 169//407 167//407\nf 169//408 170//408 167//408\nf 171//409 173//409 170//409\nf 171//410 172//410 173//410\nf 210//411 208//411 182//411\nf 218//412 171//412 217//412\nf 187//413 181//413 180//413\nf 182//414 168//414 165//414\nf 182//415 208//415 168//415\nf 208//416 183//416 168//416\nf 185//417 180//417 177//417\nf 205//418 209//418 213//418\nf 208//419 195//419 183//419\nf 198//420 197//420 204//420\nf 210//421 211//421 208//421\nf 218//422 172//422 171//422\nf 185//423 187//423 180//423\nf 205//424 204//424 209//424\no geometry_4.002\nv 23.665640 34.121975 -40.200016\nv 32.402004 34.122734 -33.586826\nv 36.954048 34.121788 -28.514704\nv 40.233433 34.123577 -23.627415\nv 42.861332 34.122124 -18.321032\nv 44.849800 34.121593 -12.507958\nv 45.331150 34.127377 -10.311537\nv 42.921261 34.121754 -10.311353\nv 23.665075 34.121754 -37.350616\nv 23.665075 57.805542 -24.148113\nv 23.664743 57.798107 -28.018560\nv 23.665144 51.812641 -31.663759\nv 23.665089 47.050446 -34.285381\nv 23.665054 42.058624 -36.836975\nv 23.665188 37.131592 -39.055588\nv 32.110844 57.805542 -10.311352\nv 35.112442 57.805637 -10.313568\nv 33.598629 57.804878 -14.652881\nv 32.032314 57.804794 -17.819229\nv 29.694983 57.804379 -21.526371\nv 25.706341 57.804699 -26.208677\nv 42.830769 41.155556 -10.311453\nv 41.246830 44.894707 -10.311355\nv 38.633030 50.649433 -10.311420\nv 36.437897 55.213234 -10.312478\nv 28.171953 36.263447 -36.375957\nv 26.942368 39.079815 -36.025288\nv 28.600014 34.121872 -36.890263\nv 43.933548 36.594437 -12.835606\nv 43.731422 38.165833 -11.431972\nv 27.724413 52.705647 -27.658140\nv 28.154049 57.805058 -23.501663\nv 42.487793 39.165123 -14.269326\nv 42.449806 35.813091 -17.977461\nv 42.108639 41.938183 -12.033480\nv 34.926373 55.044102 -14.984872\nv 27.142206 41.191879 -34.900475\nv 32.097244 38.047192 -32.115871\nv 29.837921 55.753895 -23.067162\nv 24.866261 49.888313 -31.913252\nv 41.016087 44.769073 -11.627065\nv 39.503742 48.099316 -11.541891\nv 32.217823 49.229225 -24.979773\nv 29.136295 48.306042 -29.121073\nv 39.899704 35.954929 -23.052366\nv 41.334488 39.094700 -17.663889\nv 37.917511 48.716496 -15.335009\nv 38.441059 46.179508 -17.059200\nv 34.276012 51.388786 -20.133286\nv 26.100733 44.948181 -33.748947\nv 33.725410 34.123516 -32.245213\nv 30.886278 42.683525 -30.810688\nv 34.175556 39.511780 -28.960140\nv 29.411491 45.042885 -30.793821\nv 38.591526 39.737007 -22.648666\nv 39.935337 43.017200 -17.033510\nv 35.847115 47.273819 -21.152620\nv 31.234083 57.802479 -19.220360\nv 36.111511 36.573864 -28.325407\nv 33.682312 45.311649 -25.930132\nv 37.475269 42.952240 -22.048740\nv 38.056927 36.201153 -25.749496\nv 34.683289 41.965473 -26.918919\nv 36.074898 38.926964 -26.962545\nvn -0.7635 -0.3485 0.5437\nvn -0.8197 -0.2789 0.5003\nvn -0.0000 1.0000 0.0000\nvn -0.0015 1.0000 -0.0019\nvn 0.0001 0.0000 1.0000\nvn -0.0000 -0.0000 1.0000\nvn 0.5295 0.3016 -0.7929\nvn 0.5320 0.2968 -0.7931\nvn 0.5287 0.3283 -0.7828\nvn 0.8518 0.4354 -0.2913\nvn 0.6676 0.4358 -0.6037\nvn 0.8923 0.3303 -0.3077\nvn 0.9085 0.3558 -0.2192\nvn 0.9017 0.3467 -0.2583\nvn 0.9334 0.3321 -0.1358\nvn 0.8466 0.4427 -0.2954\nvn 0.6157 0.3413 -0.7102\nvn 0.6774 0.4296 -0.5971\nvn 0.8951 0.3476 -0.2793\nvn 0.9025 0.3780 -0.2067\nvn 0.5139 0.3522 -0.7822\nvn 0.5208 0.3624 -0.7730\nvn 0.5723 0.3426 -0.7450\nvn 0.6284 0.3153 -0.7111\nvn 0.6260 0.2982 -0.7206\nvn 0.6826 0.4236 -0.5955\nvn 0.7005 0.4593 -0.5463\nvn 0.5984 0.4292 -0.6766\nvn 0.5485 0.4349 -0.7141\nvn 0.8909 0.3324 -0.3096\nvn 0.9031 0.3826 -0.1949\nvn 0.8721 0.4194 -0.2521\nvn 0.8367 0.4153 -0.3570\nvn 0.6953 0.3572 -0.6237\nvn 0.6198 0.3584 -0.6981\nvn 0.6815 0.4184 -0.6004\nvn 0.6006 0.4191 -0.6809\nvn 0.5949 0.4260 -0.6816\nvn 0.5086 0.4152 -0.7543\nvn 0.5182 0.4087 -0.7513\nvn 0.8478 0.3280 -0.4168\nvn 0.8427 0.3364 -0.4204\nvn 0.8350 0.3641 -0.4125\nvn 0.8577 0.2897 -0.4247\nvn 0.8572 0.2945 -0.4225\nvn 0.8864 0.4081 -0.2186\nvn 0.8929 0.4056 -0.1953\nvn 0.8593 0.4206 -0.2909\nvn 0.8581 0.4218 -0.2929\nvn 0.8543 0.4010 -0.3306\nvn 0.8164 0.4171 -0.3993\nvn 0.7823 0.4345 -0.4464\nvn 0.5206 0.3789 -0.7651\nvn 0.6081 0.3819 -0.6960\nvn 0.7101 0.3154 -0.6295\nvn 0.6783 0.3035 -0.6692\nvn 0.6887 0.4036 -0.6024\nvn 0.6269 0.3966 -0.6706\nvn 0.6008 0.4060 -0.6886\nvn 0.8334 0.3665 -0.4136\nvn 0.7984 0.3080 -0.5174\nvn 0.7934 0.3291 -0.5120\nvn 0.8753 0.3806 -0.2983\nvn 0.8665 0.4011 -0.2971\nvn 0.8668 0.3969 -0.3019\nvn 0.8154 0.4120 -0.4066\nvn 0.6084 0.3852 -0.6939\nvn 0.7091 0.3330 -0.6215\nvn 0.6947 0.3870 -0.6064\nvn 0.6989 0.3664 -0.6143\nvn 0.7222 0.2964 -0.6249\nvn 0.6879 0.3967 -0.6077\nvn 0.6028 0.4037 -0.6883\nvn 0.7510 0.4226 -0.5073\nvn 0.8259 0.3869 -0.4101\nvn 0.7838 0.3382 -0.5208\nvn 0.8201 0.3949 -0.4141\nvn 0.9073 0.2838 -0.3103\nvn 0.5075 0.3922 -0.7672\nvn 0.7229 0.3473 -0.5973\nvn 0.7768 0.3246 -0.5397\nvn 0.7797 0.3099 -0.5440\nvn 0.7575 0.4070 -0.5104\nvn 0.7566 0.4142 -0.5059\nvn 0.7663 0.3819 -0.5167\nvn 0.7656 0.3939 -0.5087\nvn 0.7952 0.2879 -0.5337\nvn 0.7385 0.3465 -0.5784\nvn 0.7740 0.3620 -0.5195\nvn 0.7738 0.3652 -0.5176\nvn -1.0000 -0.0000 0.0001\nvn 0.0023 -1.0000 0.0021\nvn -0.0000 -1.0000 0.0000\nvn 0.0001 -1.0000 -0.0001\nvn 0.0006 -1.0000 -0.0004\nvn 0.0016 -1.0000 -0.0010\nvn -0.0012 -1.0000 0.0006\nvn 0.0021 -1.0000 -0.0011\nvn -0.0012 -1.0000 0.0003\nvn 0.8799 0.3631 -0.3065\nvn -1.0000 -0.0005 0.0008\nvn 0.9273 0.3085 -0.2119\nvn 0.0006 0.0005 1.0000\nvn 0.0007 0.0008 1.0000\nvn 0.0002 1.0000 -0.0002\nvn -1.0000 0.0007 -0.0013\nvn -1.0000 0.0003 -0.0005\nvn -1.0000 -0.0001 0.0001\nvn 0.0010 1.0000 -0.0005\nvn 0.0000 1.0000 -0.0001\nvn 0.0015 1.0000 -0.0009\nvn -0.0002 1.0000 0.0001\nvn 0.8069 0.4287 -0.4063\nvn 0.8067 0.4359 -0.3991\nvn 0.0253 0.9995 -0.0161\nvn 0.7515 0.4290 -0.5012\nvn 0.7522 0.4281 -0.5010\nvn 0.9052 0.2949 -0.3060\nvn -1.0000 0.0001 -0.0002\nvn 0.8800 0.3652 -0.3037\nvn 0.9265 0.3163 -0.2039\nusemtl Default_OBJ.002\ns off\nf 233//425 232//425 240//425\nf 233//426 240//426 234//426\nf 234//427 240//427 241//427\nf 234//428 245//428 235//428\nf 232//429 231//429 246//429\nf 232//429 246//429 247//429\nf 232//430 247//430 248//430\nf 239//431 250//431 225//431\nf 250//432 252//432 225//432\nf 239//433 251//433 250//433\nf 249//434 260//434 241//434\nf 245//435 256//435 255//435\nf 253//436 258//436 257//436\nf 254//437 259//437 246//437\nf 254//438 253//438 259//438\nf 254//439 246//439 231//439\nf 260//440 242//440 241//440\nf 250//441 261//441 262//441\nf 255//442 256//442 263//442\nf 257//443 259//443 253//443\nf 259//444 265//444 246//444\nf 239//445 238//445 251//445\nf 251//446 238//446 261//446\nf 251//447 261//447 250//447\nf 250//448 262//448 226//448\nf 250//449 226//449 252//449\nf 255//450 263//450 267//450\nf 256//451 244//451 263//451\nf 235//452 245//452 255//452\nf 264//453 236//453 235//453\nf 258//454 270//454 257//454\nf 265//455 247//455 246//455\nf 266//456 249//456 248//456\nf 260//457 271//457 272//457\nf 262//458 276//458 277//458\nf 261//459 276//459 262//459\nf 268//460 255//460 267//460\nf 255//461 268//461 264//461\nf 264//462 235//462 255//462\nf 264//463 237//463 236//463\nf 264//464 274//464 237//464\nf 269//465 270//465 258//465\nf 270//466 269//466 279//466\nf 270//467 279//467 280//467\nf 229//468 228//468 269//468\nf 229//469 269//469 258//469\nf 266//470 248//470 265//470\nf 265//471 248//471 247//471\nf 266//472 271//472 249//472\nf 271//473 260//473 249//473\nf 272//474 271//474 280//474\nf 260//475 272//475 273//475\nf 243//476 273//476 282//476\nf 261//477 238//477 274//477\nf 261//478 274//478 276//478\nf 275//479 262//479 283//479\nf 275//480 226//480 262//480\nf 268//481 267//481 284//481\nf 268//482 276//482 278//482\nf 268//483 274//483 264//483\nf 280//484 279//484 285//484\nf 269//485 228//485 286//485\nf 269//486 286//486 279//486\nf 259//487 280//487 265//487\nf 265//488 271//488 266//488\nf 271//489 265//489 280//489\nf 281//490 273//490 272//490\nf 274//491 278//491 276//491\nf 262//492 277//492 283//492\nf 276//493 284//493 287//493\nf 276//494 287//494 277//494\nf 283//495 227//495 275//495\nf 268//496 284//496 276//496\nf 278//497 274//497 268//497\nf 263//498 273//498 267//498\nf 280//499 285//499 272//499\nf 279//500 286//500 288//500\nf 272//501 285//501 281//501\nf 258//502 230//502 229//502\nf 274//503 238//503 237//503\nf 277//504 287//504 283//504\nf 283//505 288//505 286//505\nf 283//506 286//506 227//506\nf 284//507 267//507 281//507\nf 281//508 267//508 273//508\nf 284//509 285//509 287//509\nf 285//510 284//510 281//510\nf 228//511 227//511 286//511\nf 287//512 288//512 283//512\nf 288//513 287//513 279//513\nf 279//514 287//514 285//514\nf 235//515 233//515 234//515\nf 231//516 232//516 230//516\nf 232//517 233//517 230//517\nf 233//518 225//518 230//518\nf 225//517 252//517 230//517\nf 252//519 226//519 230//519\nf 226//520 275//520 230//520\nf 275//521 227//521 230//521\nf 227//522 228//522 230//522\nf 228//523 229//523 230//523\nf 280//524 257//524 270//524\nf 248//430 240//430 232//430\nf 235//525 239//525 225//525\nf 231//526 253//526 254//526\nf 249//527 240//527 248//527\nf 249//528 241//528 240//528\nf 241//529 245//529 234//529\nf 236//530 237//530 235//530\nf 237//531 238//531 235//531\nf 238//532 239//532 235//532\nf 242//533 243//533 241//533\nf 243//534 244//534 241//534\nf 244//535 256//535 241//535\nf 256//536 245//536 241//536\nf 273//537 243//537 260//537\nf 243//538 242//538 260//538\nf 282//539 244//539 243//539\nf 282//540 263//540 244//540\nf 282//541 273//541 263//541\nf 258//542 253//542 230//542\nf 235//543 225//543 233//543\nf 280//544 259//544 257//544\nf 231//545 230//545 253//545\no geometry_5.002\nv -21.619694 57.788525 -26.009201\nv -21.619694 34.121754 -38.585644\nv -21.619711 34.122066 -41.247440\nv -21.619888 38.532505 -39.617542\nv -21.621029 44.599606 -36.921761\nv -21.619595 48.873718 -34.676735\nv -21.619745 57.786823 -29.632040\nv -23.719057 57.788448 -27.976006\nv -26.247818 57.787991 -25.664057\nv -29.155554 57.787472 -22.304438\nv -31.577135 57.786888 -18.688225\nv -33.551941 57.788280 -14.750148\nv -35.115540 57.788723 -10.322416\nv -32.067738 57.788525 -10.311352\nv -42.884533 34.121754 -10.311353\nv -45.311527 34.121742 -10.311376\nv -44.850006 34.123779 -12.484262\nv -42.907402 34.122238 -18.224846\nv -40.312119 34.122158 -23.474300\nv -28.529881 34.122013 -36.942822\nv -23.848864 34.121883 -40.085384\nv -36.399292 55.309502 -10.309573\nv -39.184875 49.467926 -10.311477\nv -41.897163 43.408459 -10.311463\nv -44.287945 37.317360 -10.311481\nv -24.952089 49.462921 -32.115005\nv -23.027113 56.364670 -29.482361\nv -23.131771 36.046692 -39.816406\nv -34.514198 56.643372 -13.861627\nv -23.106932 38.992798 -38.630924\nv -27.513556 53.189236 -27.551035\nv -40.492970 45.931923 -11.640241\nv -28.088335 36.427376 -36.377644\nv -26.106762 44.887047 -33.773140\nv -36.697662 50.859993 -15.810840\nv -38.497429 47.578251 -15.214561\nv -26.840219 39.233082 -36.024540\nv -23.080891 42.085423 -37.214886\nv -43.245766 38.905315 -12.286836\nv -43.939419 36.428501 -12.986079\nv -27.100683 41.365917 -34.850197\nv -29.406757 47.278111 -29.505274\nv -32.220417 49.171230 -25.028112\nv -39.379810 44.451038 -16.792267\nv -42.274662 41.831322 -11.626652\nv -42.269039 36.365620 -17.944225\nv -29.683352 56.072960 -23.008741\nv -30.810991 42.832874 -30.799648\nv -40.869141 41.319134 -16.465256\nv -34.383244 51.081211 -20.223000\nv -40.834007 39.857918 -18.068367\nv -36.425461 46.615852 -20.673721\nv -32.096870 37.899040 -32.197803\nv -33.718029 45.050999 -26.065786\nv -38.604515 40.993484 -21.574053\nv -34.784939 41.265247 -27.236830\nv -33.346512 34.122849 -32.678181\nv -39.713688 36.209206 -23.224630\nv -36.181545 36.747128 -28.145250\nv -35.992725 39.170868 -26.924953\nv -37.242809 43.227036 -22.217842\nv -38.497921 39.210514 -23.163378\nv -36.984192 34.122215 -28.471811\nvn 1.0000 0.0000 -0.0000\nvn 0.0001 1.0000 0.0000\nvn 0.7986 -0.2824 0.5315\nvn 0.7507 -0.3431 0.5646\nvn 0.0000 -1.0000 0.0000\nvn -0.0036 0.0071 1.0000\nvn -0.4432 0.2839 -0.8502\nvn -0.4077 0.3165 -0.8565\nvn -0.5109 0.4271 -0.7460\nvn -0.5470 0.4683 -0.6939\nvn -0.9335 0.2990 -0.1980\nvn -0.5030 0.4257 -0.7522\nvn -0.5949 0.4259 -0.6817\nvn -0.5958 0.4288 -0.6790\nvn -0.8513 0.4393 -0.2868\nvn -0.8317 0.4711 -0.2938\nvn -0.5265 0.3069 -0.7928\nvn -0.5228 0.3220 -0.7893\nvn -0.6063 0.4390 -0.6631\nvn -0.6030 0.4178 -0.6796\nvn -0.8742 0.4169 -0.2489\nvn -0.8330 0.4313 -0.3465\nvn -0.5323 0.2964 -0.7930\nvn -0.5254 0.3323 -0.7833\nvn -0.4760 0.3694 -0.7981\nvn -0.4332 0.3659 -0.8237\nvn -0.4457 0.3374 -0.8292\nvn -0.9194 0.3215 -0.2266\nvn -0.9220 0.3153 -0.2249\nvn -0.6016 0.4019 -0.6903\nvn -0.6796 0.4172 -0.6035\nvn -0.8565 0.4230 -0.2957\nvn -0.8969 0.4015 -0.1854\nvn -0.8671 0.3967 -0.3014\nvn -0.8971 0.3891 -0.2091\nvn -0.5628 0.3449 -0.7512\nvn -0.5185 0.3596 -0.7758\nvn -0.9150 0.3492 -0.2020\nvn -0.9061 0.2912 -0.3067\nvn -0.6766 0.4312 -0.5969\nvn -0.6759 0.4483 -0.5849\nvn -0.6073 0.3841 -0.6954\nvn -0.8516 0.4070 -0.3304\nvn -0.8767 0.3800 -0.2949\nvn -0.8735 0.3841 -0.2991\nvn -0.8069 0.4303 -0.4048\nvn -0.8087 0.4288 -0.4027\nvn -0.5199 0.3624 -0.7735\nvn -0.5185 0.3806 -0.7657\nvn -0.5130 0.3872 -0.7661\nvn -0.8914 0.3356 -0.3046\nvn -0.9041 0.2958 -0.3083\nvn -0.6819 0.4249 -0.5954\nvn -0.6078 0.3929 -0.6901\nvn -0.6197 0.3592 -0.6978\nvn -0.8849 0.3603 -0.2952\nvn -0.9176 0.3601 -0.1685\nvn -0.8576 0.3706 -0.3566\nvn -0.8222 0.4053 -0.3997\nvn -0.8146 0.4136 -0.4066\nvn -0.8879 0.3426 -0.3071\nvn -0.8753 0.3477 -0.3361\nvn -0.6149 0.3427 -0.7103\nvn -0.6889 0.3947 -0.6080\nvn -0.6889 0.4023 -0.6030\nvn -0.8321 0.3766 -0.4072\nvn -0.7478 0.4359 -0.5007\nvn -0.7522 0.4292 -0.5000\nvn -0.7507 0.4242 -0.5065\nvn -0.7807 0.4051 -0.4758\nvn -0.6976 0.3577 -0.6207\nvn -0.7623 0.4056 -0.5044\nvn -0.8394 0.3407 -0.4235\nvn -0.8563 0.2962 -0.4232\nvn -0.8561 0.2965 -0.4233\nvn -0.7117 0.3154 -0.6277\nvn -0.6957 0.3839 -0.6071\nvn -0.7708 0.3669 -0.5209\nvn -0.7650 0.3771 -0.5220\nvn -0.7456 0.3451 -0.5701\nvn -0.7618 0.4044 -0.5061\nvn -0.6334 0.3003 -0.7132\nvn -0.8451 0.3324 -0.4188\nvn -0.8108 0.3617 -0.4601\nvn -0.7086 0.3430 -0.6167\nvn -0.7219 0.2984 -0.6243\nvn -0.8282 0.3445 -0.4420\nvn -0.7735 0.3639 -0.5190\nvn -0.7886 0.3074 -0.5325\nvn -0.7844 0.3266 -0.5273\nvn -0.7845 0.3285 -0.5259\nvn -0.7961 0.2917 -0.5302\nvn 1.0000 0.0003 -0.0006\nvn 1.0000 0.0031 -0.0065\nvn -0.0001 -1.0000 -0.0001\nvn 0.0001 -1.0000 0.0001\nvn 0.0016 1.0000 0.0010\nvn -0.0005 1.0000 -0.0005\nvn 0.0006 -0.0003 1.0000\nvn -0.0000 -0.0001 1.0000\nvn -0.0096 -0.9999 -0.0030\nvn -0.0004 -1.0000 -0.0002\nvn 0.0003 -1.0000 0.0001\nvn -0.0004 -1.0000 -0.0003\nvn -0.0001 -1.0000 -0.0000\nvn -0.0012 0.0004 1.0000\nvn -0.0005 1.0000 -0.0003\nvn -0.0007 1.0000 -0.0005\nvn -0.0015 1.0000 -0.0009\nvn 0.0017 1.0000 0.0005\nvn -0.8600 0.4186 -0.2919\nvn -0.8617 0.4172 -0.2889\nvn -0.0112 0.0050 0.9999\nvn -0.0022 0.0009 1.0000\nvn -0.5091 0.4004 -0.7619\nvn -0.8259 0.3847 -0.4121\nvn -0.8249 0.3868 -0.4122\nvn -0.6331 0.2965 -0.7151\nvn -0.5116 0.4039 -0.7584\nusemtl Default_OBJ.002\ns off\nf 289//546 294//546 295//546\nf 289//547 301//547 302//547\nf 289//548 302//548 290//548\nf 290//549 302//549 303//549\nf 290//550 303//550 304//550\nf 302//551 301//551 310//551\nf 309//552 316//552 291//552\nf 291//553 316//553 292//553\nf 314//554 315//554 295//554\nf 315//555 296//555 295//555\nf 313//556 305//556 304//556\nf 295//557 294//557 314//557\nf 314//558 319//558 315//558\nf 315//559 319//559 296//559\nf 310//560 301//560 317//560\nf 301//561 300//561 317//561\nf 316//562 309//562 321//562\nf 316//563 321//563 318//563\nf 296//564 319//564 297//564\nf 314//565 330//565 319//565\nf 320//566 311//566 310//566\nf 317//567 300//567 323//567\nf 321//568 309//568 308//568\nf 318//569 321//569 325//569\nf 318//570 326//570 293//570\nf 318//571 293//571 292//571\nf 316//572 318//572 292//572\nf 313//573 327//573 328//573\nf 313//574 328//574 305//574\nf 314//575 322//575 330//575\nf 319//576 330//576 331//576\nf 317//577 323//577 310//577\nf 311//578 320//578 312//578\nf 320//579 324//579 332//579\nf 320//580 333//580 312//580\nf 325//581 321//581 329//581\nf 318//582 325//582 326//582\nf 327//583 313//583 333//583\nf 328//584 306//584 305//584\nf 319//585 335//585 297//585\nf 297//586 335//586 298//586\nf 329//587 336//587 322//587\nf 323//588 332//588 324//588\nf 320//589 337//589 333//589\nf 332//590 337//590 320//590\nf 300//591 299//591 338//591\nf 300//592 338//592 323//592\nf 325//593 329//593 326//593\nf 326//594 329//594 322//594\nf 326//595 322//595 293//595\nf 327//596 334//596 328//596\nf 328//597 334//597 306//597\nf 319//598 331//598 335//598\nf 322//599 336//599 330//599\nf 329//600 341//600 336//600\nf 333//601 337//601 327//601\nf 333//602 313//602 312//602\nf 332//603 339//603 337//603\nf 332//604 323//604 340//604\nf 323//605 338//605 340//605\nf 327//606 337//606 334//606\nf 334//607 337//607 339//607\nf 329//608 321//608 341//608\nf 336//609 342//609 330//609\nf 330//610 342//610 331//610\nf 339//611 332//611 343//611\nf 298//612 335//612 299//612\nf 299//613 335//613 338//613\nf 338//614 335//614 331//614\nf 338//615 349//615 340//615\nf 341//616 344//616 336//616\nf 331//617 349//617 338//617\nf 339//618 343//618 346//618\nf 334//619 346//619 307//619\nf 334//620 307//620 306//620\nf 345//621 347//621 341//621\nf 342//622 336//622 344//622\nf 344//623 348//623 349//623\nf 344//624 349//624 342//624\nf 344//625 347//625 348//625\nf 342//626 349//626 331//626\nf 321//627 345//627 341//627\nf 339//628 346//628 334//628\nf 349//629 350//629 343//629\nf 341//630 347//630 344//630\nf 345//631 351//631 347//631\nf 350//632 346//632 343//632\nf 350//633 349//633 348//633\nf 347//634 351//634 346//634\nf 347//635 346//635 348//635\nf 348//636 346//636 350//636\nf 346//637 351//637 307//637\nf 290//546 291//546 294//546\nf 291//638 292//638 294//638\nf 292//639 293//639 294//639\nf 289//546 290//546 294//546\nf 304//640 291//640 290//640\nf 304//641 309//641 291//641\nf 296//642 301//642 295//642\nf 301//643 289//643 295//643\nf 310//644 303//644 302//644\nf 310//645 304//645 303//645\nf 305//646 306//646 304//646\nf 306//647 307//647 304//647\nf 307//640 351//640 304//640\nf 351//648 345//648 304//648\nf 345//649 308//649 304//649\nf 308//650 309//650 304//650\nf 310//651 313//651 304//651\nf 297//652 301//652 296//652\nf 297//653 298//653 301//653\nf 298//654 299//654 301//654\nf 299//655 300//655 301//655\nf 323//656 324//656 310//656\nf 324//657 320//657 310//657\nf 311//658 312//658 310//658\nf 312//659 313//659 310//659\nf 322//660 294//660 293//660\nf 343//661 332//661 349//661\nf 332//662 340//662 349//662\nf 321//663 308//663 345//663\nf 322//664 314//664 294//664\no geometry_6.002\nv 36.580353 57.743961 0.035298\nv 36.037594 58.779076 0.001179\nv 35.216412 57.744793 10.080432\nv 33.677956 57.744289 14.511361\nv 31.659124 57.746227 18.565411\nv 28.917263 57.742939 22.647049\nv 24.194857 57.740044 27.690678\nv 18.511978 57.743320 31.691830\nv 14.584823 57.744247 33.648354\nv 9.947945 57.713074 35.261986\nv 32.209236 57.743889 -10.311352\nv 35.158447 57.744434 -10.306320\nv 36.289749 57.757339 -4.928551\nv 34.807442 59.807663 4.951386\nv 34.818829 60.110558 -0.032543\nv 34.808109 59.807667 -4.942179\nv 32.608864 61.507614 4.339924\nv 36.286682 57.758911 4.942169\nv 32.615273 61.663994 0.425407\nv 32.609856 61.507496 -4.331055\nv 34.779896 58.825798 9.438024\nv 31.529118 61.343781 10.570337\nv 33.498833 60.062366 9.890536\nv 34.567776 58.791660 -10.309861\nv 33.425961 60.017666 -10.306324\nv 31.474403 61.405163 -10.304220\nv 29.823881 62.659615 2.551207\nv 29.460310 62.406906 9.073242\nv 32.119453 60.023132 13.890906\nv 33.262184 58.746021 14.128342\nv 29.719500 62.567238 -5.826978\nv 9.961050 62.342892 -10.311352\nv 21.817568 63.803284 -10.311424\nv 27.836145 62.728355 -10.311483\nv 27.514738 62.413475 14.004576\nv 28.612349 61.416977 16.668200\nv 26.424183 63.184788 8.043429\nv 30.261856 60.009979 17.642904\nv 30.930395 58.901711 18.527672\nv 26.490435 63.299515 -5.332211\nv 27.187370 63.249237 1.695688\nv 25.800297 61.746796 19.887001\nv 28.536167 58.881977 22.095600\nv 9.965129 58.645771 34.731205\nv 9.964549 60.024738 33.492352\nv 9.961499 62.165356 30.053555\nv 9.961143 63.609646 23.382246\nv 9.960087 66.148476 3.528004\nv 9.960877 66.187057 -2.799062\nv 9.961081 65.342033 -10.311306\nv 22.752892 63.383537 14.038231\nv 22.363691 62.642586 20.155731\nv 27.613796 60.063160 21.503756\nv 25.573549 58.854309 25.502995\nv 18.312347 63.303677 19.998632\nv 20.021629 62.368332 23.732656\nv 23.483456 61.372475 23.490767\nv 24.802994 60.024754 24.739550\nv 14.102646 58.776348 33.260674\nv 22.076872 58.836880 28.591850\nv 13.995005 60.025719 32.069008\nv 20.408705 61.406937 26.103640\nv 21.487219 60.059208 27.636808\nv 18.051035 59.494072 30.676735\nv 12.901810 61.410389 30.474165\nv 13.728574 62.454720 27.518951\nv 16.786825 61.406635 28.566109\nv 13.794726 63.447750 22.453484\nvn 0.0390 -0.9992 0.0054\nvn 0.0335 -0.9994 -0.0047\nvn 0.7364 0.6752 0.0427\nvn 0.8083 0.5833 0.0797\nvn 0.8838 0.4651 0.0515\nvn 0.8852 0.4625 -0.0506\nvn 0.8082 0.5835 -0.0796\nvn 0.7375 0.6740 -0.0432\nvn 0.6022 0.7968 0.0498\nvn 0.6021 0.7968 -0.0505\nvn 0.5805 0.8136 0.0334\nvn 0.8040 0.5799 0.1318\nvn 0.5721 0.8197 -0.0276\nvn 0.8024 0.5788 -0.1455\nvn 0.5702 0.8127 0.1202\nvn 0.5876 0.8011 0.1144\nvn 0.7138 0.6832 0.1539\nvn 0.8693 0.4594 0.1823\nvn 0.8568 0.4827 -0.1814\nvn 0.7222 0.6730 -0.1597\nvn 0.5863 0.8012 -0.1197\nvn 0.5749 0.8089 -0.1232\nvn 0.3611 0.9317 0.0378\nvn 0.3508 0.9348 0.0558\nvn 0.4008 0.9114 0.0934\nvn 0.5829 0.7853 0.2087\nvn 0.7168 0.6536 0.2430\nvn 0.3582 0.9331 -0.0311\nvn 0.3261 0.9452 -0.0145\nvn 0.0017 -0.0024 -1.0000\nvn 0.0049 0.0079 -1.0000\nvn 0.0029 0.0056 -1.0000\nvn 0.3830 0.9195 -0.0886\nvn 0.3679 0.9186 0.1439\nvn 0.8390 0.4596 0.2914\nvn 0.8236 0.4960 0.2750\nvn 0.3399 0.9341 -0.1092\nvn 0.2317 0.9715 0.0506\nvn 0.3916 0.9031 0.1765\nvn 0.5147 0.8242 0.2363\nvn 0.6987 0.6712 0.2475\nvn 0.6713 0.6625 0.3324\nvn 0.7871 0.4765 0.3917\nvn 0.7724 0.4999 0.3917\nvn -0.2014 -0.9745 -0.0991\nvn 0.2073 0.9777 0.0349\nvn 0.2200 0.9718 0.0855\nvn 0.3403 0.9181 0.2032\nvn 0.5302 0.8053 0.2653\nvn 0.6665 0.6673 0.3323\nvn -1.0000 0.0000 -0.0000\nvn 0.1988 0.9713 0.1303\nvn 0.2614 0.9476 0.1836\nvn 0.4937 0.8056 0.3275\nvn 0.7269 0.4807 0.4905\nvn 0.2129 0.9756 -0.0544\nvn 0.1690 0.9851 0.0303\nvn 0.1994 0.9758 0.0898\nvn 0.4701 0.8200 0.3266\nvn 0.6036 0.6871 0.4045\nvn 0.5534 0.6760 0.4866\nvn 0.7297 0.4762 0.4906\nvn 0.1754 0.9823 -0.0653\nvn 0.1666 0.9860 0.0060\nvn 0.1595 0.9851 0.0650\nvn 0.1549 0.9795 0.1285\nvn 0.2624 0.9337 0.2434\nvn 0.2835 0.9179 0.2776\nvn 0.4366 0.8218 0.3661\nvn 0.1638 0.9850 -0.0541\nvn 0.1706 0.9853 -0.0099\nvn 0.2904 0.4524 0.8432\nvn 0.2823 0.4706 0.8360\nvn 0.2364 0.6494 0.7228\nvn 0.4452 0.8030 0.3962\nvn 0.5501 0.6791 0.4859\nvn 0.6683 0.4021 0.6259\nvn 0.6534 0.4956 0.5722\nvn 0.5516 0.5495 0.6275\nvn 0.1279 0.9856 -0.1109\nvn 0.2825 0.9041 0.3205\nvn 0.4871 0.6790 0.5493\nvn 0.4889 0.6712 0.5572\nvn 0.3183 0.6685 0.6721\nvn 0.2439 0.6803 0.6912\nvn 0.3917 0.4783 0.7860\nvn 0.3917 0.5365 0.7475\nvn 0.1255 0.9863 0.1067\nvn 0.1520 0.9729 0.1741\nvn 0.3976 0.8021 0.4455\nvn 0.2894 0.7891 0.5418\nvn 0.2590 0.8102 0.5258\nvn 0.1981 0.8033 0.5616\nvn 0.1410 0.8405 0.5231\nvn 0.1311 0.9741 0.1840\nvn 0.3846 0.8105 0.4419\nvn 0.2064 0.9240 0.3220\nvn 0.2269 0.9149 0.3339\nvn 0.3288 0.7894 0.5184\nvn 0.4230 0.6757 0.6037\nvn 0.4560 0.5332 0.7125\nvn 0.0974 0.9878 0.1212\nvn 0.1291 0.9728 0.1924\nvn 0.3282 0.8119 0.4828\nvn 0.5270 0.4030 0.7482\nvn 0.1840 0.9095 0.3729\nvn 0.0724 0.9893 0.1265\nvn 0.1805 0.9104 0.3722\nvn 0.0880 0.9773 0.1927\nvn 0.0671 0.9752 0.2111\nvn 0.0015 -1.0000 0.0003\nvn 0.0009 -1.0000 -0.0002\nvn 0.0002 -1.0000 -0.0006\nvn 0.0017 -1.0000 0.0005\nvn 0.0095 -0.9999 0.0143\nvn 0.0228 -0.9987 0.0463\nvn -0.9971 0.0508 0.0571\nvn -0.9998 0.0150 0.0102\nvn -1.0000 0.0042 0.0010\nvn -1.0000 0.0032 0.0005\nvn -1.0000 0.0010 -0.0001\nvn -1.0000 0.0004 -0.0002\nvn 0.0024 -1.0000 0.0012\nvn 0.0032 -1.0000 0.0024\nvn -0.0000 -0.0000 -1.0000\nvn 0.0005 0.0004 -1.0000\nvn 0.0074 -1.0000 0.0042\nvn 0.2224 0.9749 -0.0135\nvn 0.6071 0.6800 0.4111\nvn 0.2190 0.9756 -0.0147\nusemtl Default_OBJ.002\ns off\nf 352//665 369//665 354//665\nf 352//666 363//666 364//666\nf 353//667 366//667 365//667\nf 353//668 365//668 369//668\nf 353//669 369//669 352//669\nf 352//670 364//670 353//670\nf 353//671 364//671 367//671\nf 353//672 367//672 366//672\nf 366//673 368//673 365//673\nf 367//674 371//674 366//674\nf 366//675 370//675 368//675\nf 365//676 372//676 369//676\nf 366//677 371//677 370//677\nf 367//678 364//678 375//678\nf 368//679 373//679 374//679\nf 368//680 374//680 365//680\nf 365//681 374//681 372//681\nf 369//682 372//682 354//682\nf 364//683 363//683 375//683\nf 375//684 376//684 367//684\nf 367//685 376//685 371//685\nf 371//686 376//686 377//686\nf 368//687 370//687 378//687\nf 368//688 378//688 379//688\nf 368//689 379//689 373//689\nf 373//690 380//690 374//690\nf 374//691 381//691 372//691\nf 371//692 382//692 370//692\nf 370//693 382//693 378//693\nf 375//694 363//694 362//694\nf 375//695 385//695 377//695\nf 375//696 377//696 376//696\nf 377//697 382//697 371//697\nf 379//698 386//698 373//698\nf 381//699 355//699 354//699\nf 381//700 354//700 372//700\nf 377//701 385//701 382//701\nf 378//702 388//702 379//702\nf 386//703 387//703 373//703\nf 373//704 387//704 380//704\nf 380//705 381//705 374//705\nf 381//706 380//706 390//706\nf 381//707 356//707 355//707\nf 381//708 390//708 356//708\nf 362//709 361//709 383//709\nf 392//710 388//710 378//710\nf 379//711 388//711 386//711\nf 386//712 393//712 387//712\nf 387//713 389//713 380//713\nf 389//714 390//714 380//714\nf 383//715 400//715 401//715\nf 386//716 402//716 403//716\nf 386//717 403//717 393//717\nf 389//718 387//718 404//718\nf 394//719 357//719 390//719\nf 382//720 385//720 391//720\nf 388//721 392//721 399//721\nf 388//722 402//722 386//722\nf 387//723 393//723 404//723\nf 404//724 390//724 389//724\nf 394//725 404//725 405//725\nf 390//726 357//726 356//726\nf 391//727 385//727 384//727\nf 392//728 400//728 399//728\nf 399//729 402//729 388//729\nf 402//730 406//730 403//730\nf 393//731 403//731 407//731\nf 393//732 407//732 408//732\nf 404//733 393//733 408//733\nf 384//734 400//734 391//734\nf 391//735 400//735 392//735\nf 361//736 360//736 410//736\nf 361//737 410//737 395//737\nf 395//738 410//738 396//738\nf 408//739 409//739 404//739\nf 409//740 405//740 404//740\nf 405//741 358//741 357//741\nf 405//742 357//742 394//742\nf 405//743 411//743 358//743\nf 401//744 400//744 384//744\nf 408//745 407//745 413//745\nf 409//746 414//746 405//746\nf 405//747 414//747 411//747\nf 410//748 415//748 412//748\nf 412//749 396//749 410//749\nf 360//750 359//750 410//750\nf 410//751 359//751 415//751\nf 399//752 406//752 402//752\nf 406//753 407//753 403//753\nf 409//754 408//754 414//754\nf 415//755 418//755 412//755\nf 412//756 418//756 416//756\nf 412//757 416//757 396//757\nf 396//758 416//758 397//758\nf 406//759 419//759 407//759\nf 408//760 413//760 414//760\nf 407//761 417//761 418//761\nf 407//762 418//762 413//762\nf 414//763 418//763 415//763\nf 414//764 415//764 411//764\nf 411//765 415//765 359//765\nf 399//766 419//766 406//766\nf 419//767 417//767 407//767\nf 413//768 418//768 414//768\nf 359//769 358//769 411//769\nf 416//770 418//770 417//770\nf 399//771 398//771 419//771\nf 417//772 397//772 416//772\nf 419//773 398//773 417//773\nf 417//774 398//774 397//774\nf 354//775 361//775 352//775\nf 361//776 363//776 352//776\nf 361//777 362//777 363//777\nf 355//778 361//778 354//778\nf 358//779 359//779 361//779\nf 359//780 360//780 361//780\nf 395//781 396//781 361//781\nf 396//782 397//782 361//782\nf 397//783 398//783 361//783\nf 398//784 399//784 361//784\nf 399//785 400//785 361//785\nf 400//786 383//786 361//786\nf 355//787 357//787 361//787\nf 357//788 358//788 361//788\nf 383//789 385//789 362//789\nf 385//790 375//790 362//790\nf 356//791 357//791 355//791\nf 401//789 385//789 383//789\nf 401//789 384//789 385//789\nf 382//792 392//792 378//792\nf 404//793 394//793 390//793\nf 382//794 391//794 392//794\no geometry_7.002\nv -0.006074 34.122017 -46.509487\nv -0.006821 34.121758 -44.085068\nv -0.006821 57.805542 -33.712616\nv -0.006452 57.805264 -36.522339\nv -0.006848 47.307194 -41.434246\nv -0.006971 36.980244 -45.563965\nv 6.319373 34.121742 -46.091244\nv 12.351065 34.121624 -44.891815\nv 18.168175 34.122051 -42.931145\nv 23.662109 34.122433 -40.201904\nv 23.665075 34.121754 -37.350735\nv 23.665075 57.805542 -24.146460\nv 23.662197 35.850601 -39.607178\nv 23.664995 43.379322 -36.200634\nv 23.665295 52.301361 -31.403072\nv 23.663877 57.804939 -28.001583\nv 18.507263 57.803368 -31.674458\nv 14.327095 57.804443 -33.744030\nv 10.313806 57.805576 -35.124733\nv 5.982935 57.803940 -36.075024\nv 4.535742 57.804775 -36.278263\nv 6.372007 37.005157 -45.152111\nv 0.717056 38.868839 -44.885025\nv 5.448976 38.733349 -44.620090\nv 22.126680 57.799385 -29.295670\nv -0.005526 55.538132 -37.669838\nv 11.606992 37.534821 -43.942020\nv 6.329638 41.095913 -43.624973\nv 0.888686 47.296120 -41.437138\nv -0.005134 42.069263 -43.698772\nv 12.989627 36.231766 -44.006912\nv 6.415877 45.263500 -41.863628\nv 11.581709 41.837551 -42.283573\nv 18.045725 35.827034 -42.418427\nv 22.657927 40.073658 -38.429768\nv 4.856121 49.540653 -40.164856\nv 4.553918 43.246014 -42.924610\nv 16.191500 39.697002 -41.624928\nv 18.357811 38.935062 -41.072575\nv 21.717546 43.837746 -37.238201\nv 19.424149 53.089363 -33.741299\nv 6.053944 50.296211 -39.651157\nv 11.533298 45.171040 -40.868523\nv 10.140512 49.029106 -39.428608\nv 16.952589 42.629723 -40.140694\nv 21.019426 48.230011 -35.431618\nv 10.322384 54.543793 -36.777111\nv 15.479109 48.452904 -37.991287\nv 16.924488 46.801407 -38.198631\nv 15.395144 52.538021 -36.025375\nvn -0.0001 -1.0000 0.0002\nvn -0.2411 -0.4726 0.8477\nvn -0.3471 -0.3762 0.8590\nvn 1.0000 0.0000 -0.0001\nvn 0.0628 0.3080 -0.9493\nvn 0.0479 0.4511 -0.8912\nvn 0.1857 0.3012 -0.9353\nvn 0.1860 0.3008 -0.9354\nvn 0.1163 0.3484 -0.9301\nvn 0.5812 0.4279 -0.6922\nvn 0.0022 0.4159 -0.9094\nvn -0.0172 0.3441 -0.9388\nvn 0.2487 0.3096 -0.9178\nvn 0.1780 0.3458 -0.9213\nvn 0.4260 0.2885 -0.8575\nvn 0.4268 0.2943 -0.8551\nvn 0.4223 0.3241 -0.8465\nvn 0.0635 0.4267 -0.9021\nvn 0.0530 0.4199 -0.9060\nvn 0.0019 0.3968 -0.9179\nvn 0.0559 0.3884 -0.9198\nvn 0.0624 0.3592 -0.9312\nvn 0.0644 0.3622 -0.9299\nvn 0.0740 0.3636 -0.9286\nvn 0.1782 0.3799 -0.9077\nvn 0.1841 0.3544 -0.9168\nvn 0.1049 0.3853 -0.9168\nvn 0.3078 0.2942 -0.9048\nvn 0.4271 0.3357 -0.8396\nvn 0.5031 0.3725 -0.7798\nvn 0.5534 0.3432 -0.7589\nvn 0.3069 0.3301 -0.8927\nvn 0.0913 0.3962 -0.9136\nvn 0.1828 0.3864 -0.9040\nvn 0.2947 0.3770 -0.8781\nvn 0.2970 0.3687 -0.8808\nvn 0.3438 0.3439 -0.8738\nvn 0.5026 0.3960 -0.7685\nvn 0.1311 0.4069 -0.9040\nvn 0.0683 0.3978 -0.9149\nvn 0.3058 0.2880 -0.9075\nvn 0.1819 0.4008 -0.8979\nvn 0.1750 0.4068 -0.8966\nvn 0.2857 0.4142 -0.8642\nvn 0.3453 0.3509 -0.8704\nvn 0.3342 0.3996 -0.8536\nvn 0.5222 0.4039 -0.7511\nvn 0.4050 0.4161 -0.8141\nvn 0.4002 0.4322 -0.8081\nvn 0.3023 0.3965 -0.8668\nvn 0.1791 0.4215 -0.8890\nvn 0.2398 0.4142 -0.8780\nvn 0.4057 0.3880 -0.8276\nvn 0.4123 0.4018 -0.8176\nvn 0.4046 0.4163 -0.8142\nvn 0.1919 0.4439 -0.8753\nvn 0.1754 0.4247 -0.8882\nvn 0.2932 0.4195 -0.8591\nvn 0.3501 0.4120 -0.8412\nvn 0.2963 0.4296 -0.8530\nvn 0.2934 0.4326 -0.8525\nvn 0.0600 0.3135 -0.9477\nvn -1.0000 -0.0002 -0.0003\nvn -1.0000 0.0026 -0.0060\nvn -1.0000 -0.0010 0.0026\nvn -0.9999 0.0042 -0.0105\nvn -1.0000 -0.0000 0.0001\nvn -0.0000 -1.0000 -0.0001\nvn -0.0000 -1.0000 0.0000\nvn -0.0000 1.0000 0.0000\nvn -0.0000 1.0000 -0.0001\nvn 0.0002 1.0000 -0.0017\nvn 0.2844 0.3463 -0.8940\nvn 0.0001 -1.0000 -0.0000\nvn 0.0002 -1.0000 -0.0002\nvn 1.0000 0.0001 -0.0010\nvn 1.0000 -0.0000 0.0001\nvn 1.0000 0.0004 -0.0003\nvn 0.0001 1.0000 -0.0002\nvn 0.0011 1.0000 -0.0020\nvn 0.0003 1.0000 -0.0002\nvn 0.0023 0.9999 -0.0121\nvn 0.0621 0.3165 -0.9466\nvn 0.2886 0.3468 -0.8924\nvn 1.0000 0.0010 -0.0030\nvn 0.4962 0.4260 -0.7565\nvn 0.1260 0.4276 -0.8952\nvn 0.0179 0.9995 -0.0255\nvn 0.4142 0.3671 -0.8328\nvn 0.4968 0.4277 -0.7552\nvn 0.3995 0.4314 -0.8089\nvn -1.0000 0.0001 -0.0001\nvn 0.0597 0.3227 -0.9446\nvn 0.1158 0.4264 -0.8971\nvn 0.4144 0.3676 -0.8326\nvn 0.4960 0.4283 -0.7553\nusemtl Default_OBJ.002\ns off\nf 420//795 426//795 427//795\nf 421//796 430//796 431//796\nf 421//797 431//797 422//797\nf 430//798 433//798 434//798\nf 420//799 441//799 426//799\nf 423//800 440//800 445//800\nf 426//801 441//801 446//801\nf 426//802 446//802 427//802\nf 441//803 443//803 447//803\nf 435//804 434//804 444//804\nf 445//805 448//805 424//805\nf 442//806 425//806 449//806\nf 427//807 446//807 450//807\nf 441//808 447//808 446//808\nf 428//809 453//809 429//809\nf 429//810 453//810 432//810\nf 432//811 453//811 458//811\nf 440//812 455//812 445//812\nf 448//813 445//813 455//813\nf 449//814 424//814 448//814\nf 449//815 448//815 456//815\nf 449//816 443//816 442//816\nf 443//817 449//817 456//817\nf 443//818 456//818 447//818\nf 447//819 451//819 452//819\nf 447//820 452//820 446//820\nf 447//821 456//821 451//821\nf 453//822 428//822 450//822\nf 458//823 454//823 432//823\nf 454//824 459//824 433//824\nf 454//825 433//825 432//825\nf 450//826 457//826 453//826\nf 456//827 455//827 451//827\nf 451//828 462//828 452//828\nf 452//829 462//829 464//829\nf 452//830 464//830 457//830\nf 453//831 457//831 458//831\nf 459//832 465//832 433//832\nf 461//833 451//833 455//833\nf 455//834 456//834 448//834\nf 450//835 428//835 427//835\nf 463//836 462//836 451//836\nf 463//837 451//837 461//837\nf 462//838 466//838 467//838\nf 457//839 464//839 458//839\nf 464//840 467//840 468//840\nf 465//841 434//841 433//841\nf 460//842 465//842 468//842\nf 460//843 437//843 436//843\nf 462//844 467//844 464//844\nf 463//845 461//845 466//845\nf 463//846 466//846 462//846\nf 468//847 459//847 464//847\nf 465//848 459//848 468//848\nf 468//849 469//849 460//849\nf 439//850 438//850 466//850\nf 439//851 466//851 461//851\nf 466//852 469//852 467//852\nf 467//853 469//853 468//853\nf 469//854 466//854 437//854\nf 437//855 466//855 438//855\nf 441//856 420//856 425//856\nf 420//857 421//857 425//857\nf 423//858 445//858 425//858\nf 445//859 424//859 425//859\nf 424//860 449//860 425//860\nf 422//861 425//861 421//861\nf 427//862 421//862 420//862\nf 427//863 430//863 421//863\nf 431//864 438//864 422//864\nf 438//865 423//865 422//865\nf 438//866 440//866 423//866\nf 452//867 450//867 446//867\nf 428//868 429//868 427//868\nf 429//869 430//869 427//869\nf 429//870 433//870 430//870\nf 434//871 431//871 430//871\nf 434//872 435//872 431//872\nf 435//873 438//873 431//873\nf 435//874 436//874 438//874\nf 436//875 437//875 438//875\nf 439//876 440//876 438//876\nf 443//877 425//877 442//877\nf 457//878 450//878 452//878\nf 432//879 433//879 429//879\nf 465//880 460//880 434//880\nf 461//881 440//881 439//881\nf 444//882 436//882 435//882\nf 454//883 464//883 459//883\nf 444//884 460//884 436//884\nf 460//885 469//885 437//885\nf 422//886 423//886 425//886\nf 443//887 441//887 425//887\nf 461//888 455//888 440//888\nf 454//889 458//889 464//889\nf 444//890 434//890 460//890\no geometry_8.002\nv 67.896873 43.901733 -2.166313\nv 64.432564 34.122063 4.283037\nv 64.520859 43.900791 -6.849093\nv 60.278648 43.929306 -7.568547\nv 57.018902 43.900753 -3.051901\nv 57.169796 43.901115 3.758094\nv 60.637604 43.921654 7.606590\nv 64.317902 43.900063 6.958313\nv 67.087357 43.901157 4.071162\nv 62.994400 34.123180 7.176496\nv 61.217850 34.133865 9.093618\nv 54.697098 34.122433 9.975238\nv 48.554527 34.418365 6.955729\nv 48.584091 34.129246 -7.341630\nv 55.269325 34.121914 -10.093007\nv 59.476135 34.132721 -10.030471\nv 64.782310 34.125420 -3.317214\nv 62.539295 34.134491 -7.836401\nv 58.692543 34.125866 10.157623\nv 48.586605 35.935341 -1.785411\nvn 0.9504 -0.3079 0.0436\nvn 0.0077 1.0000 -0.0058\nvn 0.9583 -0.2574 0.1243\nvn -0.0002 -1.0000 -0.0003\nvn 0.8722 -0.2269 -0.4334\nvn 0.8067 -0.1049 -0.5816\nvn 0.8720 -0.2273 0.4335\nvn 0.7302 -0.0906 0.6772\nvn 0.5819 -0.0359 -0.8124\nvn 0.7195 -0.0775 0.6901\nvn 0.1643 0.2277 -0.9598\nvn 0.3869 0.0781 0.9188\nvn 0.0138 0.2426 -0.9700\nvn 0.1706 0.2165 0.9613\nvn -0.3490 0.3968 -0.8490\nvn -0.0443 0.2600 0.9646\nvn -1.0000 0.0083 -0.0022\nvn -0.5877 0.6916 -0.4198\nvn -0.3817 0.4293 0.8186\nvn -0.5534 0.6698 0.4951\nvn -0.6868 0.6914 -0.2244\nvn -0.7151 0.6891 0.1170\nvn -0.6854 0.7280 0.0151\nvn 0.0035 1.0000 0.0005\nvn 0.0026 -1.0000 -0.0032\nvn 0.0031 -1.0000 -0.0036\nvn 0.0007 -1.0000 -0.0004\nvn -0.0086 1.0000 0.0001\nvn 0.0071 0.9999 0.0072\nvn 0.0003 -1.0000 0.0005\nvn 0.0016 1.0000 0.0029\nvn -0.0579 -0.9981 0.0201\nvn 0.0008 -1.0000 0.0020\nvn 0.0090 -0.9999 0.0140\nvn -0.0009 -1.0000 0.0006\nvn -0.0020 1.0000 -0.0035\nusemtl Default_OBJ.002\ns off\nf 470//891 471//891 486//891\nf 470//892 472//892 473//892\nf 470//893 478//893 471//893\nf 483//894 471//894 481//894\nf 470//895 486//895 487//895\nf 470//896 487//896 472//896\nf 478//897 479//897 471//897\nf 479//898 478//898 480//898\nf 485//899 472//899 487//899\nf 480//900 478//900 477//900\nf 472//901 485//901 473//901\nf 480//902 477//902 488//902\nf 473//903 485//903 484//903\nf 488//904 477//904 476//904\nf 484//905 483//905 473//905\nf 476//906 481//906 488//906\nf 483//907 482//907 489//907\nf 473//908 483//908 474//908\nf 482//909 481//909 476//909\nf 482//910 476//910 475//910\nf 483//911 489//911 474//911\nf 482//912 475//912 489//912\nf 489//913 475//913 474//913\nf 476//914 478//914 470//914\nf 484//915 485//915 486//915\nf 485//916 487//916 486//916\nf 471//917 484//917 486//917\nf 474//918 475//918 473//918\nf 477//919 478//919 476//919\nf 479//920 481//920 471//920\nf 475//921 470//921 473//921\nf 481//922 482//922 483//922\nf 479//923 488//923 481//923\nf 479//924 480//924 488//924\nf 483//925 484//925 471//925\nf 475//926 476//926 470//926\no geometry_9.002\nv -31.982754 0.978311 -10.936550\nv -30.086290 1.135085 -16.528364\nv -33.452507 1.576084 -11.059184\nv -33.642273 1.058751 -4.786501\nv -30.355560 0.479850 -8.030732\nv -27.248743 1.091156 -20.718418\nv -28.193026 2.110425 -22.600088\nv -33.198071 2.225419 -14.595112\nv -31.656675 3.341127 -18.873064\nv -30.833832 2.192037 -19.031269\nv -28.667133 3.341536 -23.216429\nv -23.744514 3.341796 -28.258785\nv -25.597881 2.134424 -25.642036\nv -22.514997 2.123200 -28.279392\nv -20.555925 1.097771 -27.412609\nv -18.862431 2.182788 -30.917328\nv -16.886641 1.171116 -30.000259\nv -23.929098 1.013177 -24.042404\nv -21.351877 0.472302 -22.993708\nv -26.703751 0.500580 -16.706118\nv -21.471157 0.100403 -18.232817\nv -13.651196 -0.290660 -18.327936\nv -15.268382 0.161974 -24.508177\nv -15.380786 0.581540 -27.976202\nv -12.745453 0.957243 -31.174629\nv -10.927172 1.598266 -33.536743\nv -6.522162 1.034480 -33.354145\nv -9.992106 2.181623 -34.746563\nv -4.242169 2.196256 -35.870461\nv -14.572693 2.245891 -33.228462\nv -16.368755 3.342025 -33.047401\nv -10.892063 3.341177 -35.128387\nv -4.822470 3.341300 -36.448315\nv -0.426367 3.346564 -36.683151\nv -36.198502 3.346846 -6.187400\nv -34.286106 3.340692 -13.485535\nv -34.687283 2.168723 -10.107382\nv -35.587337 2.075295 -5.054927\nv -35.927647 2.017926 0.182953\nv -35.629913 2.069261 4.692489\nv -33.612095 1.060183 4.979790\nv -33.747551 0.993147 -0.006673\nv -30.710949 0.404663 1.844190\nv -27.885410 0.148439 -6.313303\nv -23.511122 -0.067823 -11.781129\nv -6.300971 -0.017103 -26.210453\nv -7.438180 0.460228 -30.311106\nv -0.426404 0.985115 -33.679291\nv -0.426622 2.068301 -35.971710\nv -0.426490 0.310724 -30.021828\nv -0.427351 -0.746920 0.332436\nv -0.426678 -0.511043 -17.358849\nv -0.426451 -0.613342 12.438381\nv -0.426749 2.081189 35.973019\nv -0.426434 0.319071 30.127714\nv -8.741527 -0.505621 15.578556\nv -0.426700 -0.201198 24.098520\nv -8.195800 -0.057756 25.129862\nv -6.103074 0.468024 30.611353\nv -12.906080 0.433490 28.267374\nv -20.271627 0.527875 24.465813\nv -6.416601 1.055181 33.412891\nv -0.426408 1.009876 33.795441\nv -4.596181 2.083617 35.637386\nv -9.706547 2.099284 34.692745\nv -11.034256 1.598601 33.504269\nv -16.323536 2.102351 32.198624\nv -17.346094 1.431139 30.391869\nv -21.692808 2.093893 28.830046\nv -21.727974 1.153184 26.717625\nv -25.548315 2.074153 25.537165\nv -28.532467 2.082165 22.091471\nv -26.801939 1.056425 21.091478\nv -29.408144 1.138581 17.790762\nv -32.295464 2.103261 16.150757\nv -32.321243 1.489480 13.647795\nv -32.007614 0.982924 10.903822\nv -29.851124 0.523187 10.508420\nv -34.697369 2.068874 9.650587\nv -26.782976 -0.027595 0.677597\nv -20.968149 -0.288980 8.571944\nv -17.751135 -0.495526 -1.173187\nv -14.506951 -0.490891 -10.760352\nv -0.427101 -0.126833 -25.292795\nv -16.592482 -0.291296 15.644700\nv -17.728106 0.124993 22.380592\nv -14.388314 0.961015 30.531178\nv -25.772188 0.451808 17.560827\nv -23.936911 1.015014 24.043760\nv -26.194237 0.148182 12.114499\nvn -0.3619 -0.9203 -0.1485\nvn -0.2169 -0.9751 -0.0458\nvn -0.1695 -0.9828 -0.0737\nvn -0.3980 -0.8754 -0.2745\nvn -0.3919 -0.8837 -0.2561\nvn -0.4467 -0.8642 -0.2315\nvn -0.4291 -0.8824 -0.1929\nvn -0.8225 -0.4030 -0.4014\nvn -0.7686 -0.4945 -0.4059\nvn -0.6933 -0.5179 -0.5012\nvn -0.7333 -0.4556 -0.5047\nvn -0.6607 -0.3838 -0.6451\nvn -0.5476 -0.5417 -0.6378\nvn -0.2775 -0.8717 -0.4040\nvn -0.2641 -0.8779 -0.3994\nvn -0.3060 -0.8838 -0.3539\nvn -0.2974 -0.8995 -0.3202\nvn -0.3192 -0.8997 -0.2977\nvn -0.1507 -0.9808 -0.1239\nvn -0.1528 -0.9797 -0.1297\nvn -0.1891 -0.9749 -0.1178\nvn -0.0992 -0.9919 -0.0800\nvn -0.0504 -0.9978 -0.0420\nvn -0.0506 -0.9969 -0.0598\nvn -0.0705 -0.9943 -0.0794\nvn -0.1386 -0.9768 -0.1632\nvn -0.1152 -0.9805 -0.1595\nvn -0.0797 -0.9899 -0.1172\nvn -0.1184 -0.9735 -0.1955\nvn -0.1059 -0.9361 -0.3355\nvn -0.1511 -0.9184 -0.3656\nvn -0.1930 -0.8811 -0.4317\nvn -0.3972 -0.5266 -0.7516\nvn -0.2311 -0.8614 -0.4524\nvn -0.3266 -0.3932 -0.8595\nvn -0.2805 -0.4896 -0.8256\nvn -0.1911 -0.4376 -0.8786\nvn -0.1638 -0.5094 -0.8448\nvn -0.0936 -0.8666 -0.4902\nvn -0.0913 -0.8701 -0.4844\nvn -0.0466 -0.4688 -0.8821\nvn -0.0004 1.0000 -0.0006\nvn -0.5032 -0.4957 -0.7079\nvn -0.5107 -0.3469 -0.7867\nvn -0.0004 1.0000 -0.0004\nvn -0.0041 1.0000 -0.0019\nvn -0.8280 -0.5382 -0.1575\nvn -0.8987 -0.3703 -0.2352\nvn -0.8106 -0.5167 -0.2755\nvn -0.5397 -0.8202 -0.1895\nvn -0.4944 -0.8630 -0.1040\nvn -0.4520 -0.8878 -0.0869\nvn -0.3690 -0.9253 -0.0875\nvn -0.4269 -0.9041 -0.0218\nvn -0.4585 -0.8878 -0.0395\nvn -0.8768 -0.4768 -0.0622\nvn -0.9923 0.1060 0.0643\nvn -0.4515 -0.8914 0.0400\nvn -0.4236 -0.9055 0.0237\nvn -0.1820 -0.9832 -0.0140\nvn -0.1903 -0.9816 -0.0177\nvn -0.0674 -0.9976 -0.0145\nvn -0.1032 -0.9937 -0.0433\nvn -0.1050 -0.9934 -0.0466\nvn -0.1882 -0.9779 -0.0913\nvn -0.0921 -0.9942 -0.0550\nvn -0.0434 -0.9986 -0.0313\nvn -0.0499 -0.9917 -0.1184\nvn -0.0646 -0.9835 -0.1688\nvn -0.0587 -0.9776 -0.2021\nvn -0.1079 -0.9732 -0.2032\nvn -0.0301 -0.9037 -0.4270\nvn -0.0419 -0.8921 -0.4498\nvn -0.0395 -0.4859 -0.8731\nvn 0.0004 -0.9994 0.0353\nvn -0.0121 -0.9988 0.0475\nvn -0.0070 -0.9963 0.0860\nvn -0.0174 -0.9946 0.1020\nvn -0.0447 -0.9951 0.0887\nvn -0.0320 -0.9937 0.1075\nvn -0.0100 -0.9827 0.1851\nvn -0.0204 -0.9790 0.2029\nvn -0.0350 -0.8967 0.4412\nvn -0.0362 -0.8955 0.4436\nvn 0.0149 0.9997 0.0174\nvn -0.0020 0.9995 0.0317\nvn -0.0029 0.9995 0.0324\nvn -0.0146 0.9991 0.0399\nvn -0.2170 -0.7890 0.5748\nvn -0.2972 -0.8279 0.4757\nvn -0.0324 0.9983 0.0491\nvn -0.2755 -0.8764 0.3949\nvn -0.3277 -0.8610 0.3889\nvn -0.0550 0.9968 0.0585\nvn -0.0709 0.9954 0.0637\nvn -0.3705 -0.8886 0.2704\nvn -0.1126 0.9908 0.0748\nvn -0.4424 -0.8529 0.2772\nvn -0.4194 -0.8807 0.2203\nvn -0.3099 -0.9407 0.1382\nvn -0.4187 -0.9004 0.1184\nvn -0.5436 -0.8139 0.2052\nvn -0.2970 0.9491 0.1047\nvn -0.6489 0.7510 0.1221\nvn -0.4554 -0.8862 0.0856\nvn -0.4121 -0.9056 0.0998\nvn -0.2010 -0.9787 0.0417\nvn -0.1872 -0.9818 0.0320\nvn -0.2012 -0.9794 0.0186\nvn -0.1033 -0.9944 0.0206\nvn -0.1116 -0.9937 -0.0074\nvn -0.0508 -0.9987 0.0044\nvn -0.0152 -0.9999 0.0076\nvn -0.0540 -0.9985 -0.0110\nvn -0.0451 -0.9989 -0.0158\nvn -0.0077 -0.9999 -0.0133\nvn -0.0141 -0.9999 -0.0052\nvn -0.0146 -0.9995 -0.0281\nvn -0.0111 -0.9988 -0.0484\nvn -0.0132 -0.9988 -0.0470\nvn -0.0042 -0.9957 -0.0921\nvn -0.0397 -0.9937 -0.1047\nvn -0.0322 -0.9974 -0.0646\nvn -0.0181 -0.9815 -0.1907\nvn -0.0135 -0.9833 -0.1813\nvn -0.0166 -0.9937 -0.1111\nvn -0.0269 -0.9985 0.0484\nvn -0.0352 -0.9978 0.0557\nvn -0.0685 -0.9918 0.1081\nvn -0.1243 -0.9739 0.1901\nvn -0.0976 -0.9815 0.1648\nvn -0.1627 -0.9110 0.3789\nvn -0.1635 -0.9498 0.2669\nvn -0.1912 -0.8799 0.4351\nvn -0.0897 -0.9926 0.0824\nvn -0.1445 -0.9815 0.1259\nvn -0.1450 -0.9812 0.1270\nvn -0.1494 -0.9734 0.1737\nvn -0.3109 -0.9007 0.3034\nvn -0.3179 -0.9008 0.2959\nvn -0.3510 -0.8864 0.3019\nvn -0.1773 -0.9773 0.1157\nvn -0.1301 -0.9894 0.0652\nvn -0.1791 -0.9794 0.0937\nvn -0.1910 -0.9771 0.0942\nvn -0.1127 -0.9933 0.0248\nvn -0.0589 -0.9976 0.0361\nvn -0.0706 -0.9973 0.0190\nvn -0.0643 -0.9966 0.0508\nvn -0.0773 -0.9951 0.0615\nvn -0.0271 -0.9995 0.0165\nvn -0.0251 -0.9996 0.0129\nvn -0.1045 -0.9417 0.3198\nvn -0.0601 -0.9801 0.1890\nvn -0.0601 -0.9783 0.1983\nvn -0.0088 -0.9999 0.0110\nvn -0.1247 -0.9921 -0.0120\nvn -0.1912 -0.8182 -0.5423\nvn -0.3491 -0.8861 -0.3048\nvn -0.6450 -0.5259 -0.5544\nvn 1.0000 -0.0005 -0.0001\nvn 1.0000 0.0003 0.0002\nvn 1.0000 0.0000 0.0000\nvn 1.0000 -0.0003 -0.0003\nvn -0.0016 1.0000 -0.0072\nvn -0.0009 1.0000 -0.0029\nvn 1.0000 0.0003 0.0000\nvn 1.0000 -0.0003 -0.0000\nvn 1.0000 0.0002 0.0000\nvn 1.0000 -0.0008 -0.0001\nvn 1.0000 0.0001 0.0000\nvn -0.0007 1.0000 -0.0006\nvn -0.0017 1.0000 -0.0010\nvn -0.0937 -0.8757 0.4736\nvn -0.0911 -0.8734 0.4784\nusemtl Default_OBJ.002\ns off\nf 492//927 491//927 490//927\nf 490//928 494//928 493//928\nf 494//929 490//929 509//929\nf 495//930 499//930 496//930\nf 495//931 491//931 499//931\nf 499//932 491//932 497//932\nf 497//933 491//933 492//933\nf 497//934 525//934 498//934\nf 497//935 498//935 499//935\nf 499//936 500//936 496//936\nf 498//937 500//937 499//937\nf 501//938 502//938 500//938\nf 502//939 501//939 503//939\nf 503//940 505//940 504//940\nf 505//941 506//941 504//941\nf 504//942 502//942 503//942\nf 504//943 507//943 502//943\nf 507//944 495//944 502//944\nf 508//945 509//945 495//945\nf 508//946 495//946 507//946\nf 495//947 509//947 491//947\nf 508//948 510//948 509//948\nf 510//949 511//949 534//949\nf 510//950 512//950 511//950\nf 510//951 508//951 512//951\nf 508//952 507//952 504//952\nf 513//953 508//953 504//953\nf 513//954 512//954 508//954\nf 504//955 506//955 513//955\nf 516//956 514//956 515//956\nf 514//957 506//957 515//957\nf 519//958 515//958 506//958\nf 519//959 505//959 520//959\nf 519//960 506//960 505//960\nf 521//961 519//961 520//961\nf 521//962 517//962 519//962\nf 517//963 521//963 522//963\nf 518//964 517//964 522//964\nf 518//965 515//965 517//965\nf 516//966 515//966 518//966\nf 522//967 523//967 518//967\nf 520//968 501//968 523//968\nf 503//969 501//969 505//969\nf 501//970 520//970 505//970\nf 501//971 524//971 523//971\nf 525//972 524//972 498//972\nf 524//973 526//973 527//973\nf 524//974 525//974 526//974\nf 525//975 497//975 526//975\nf 526//976 497//976 492//976\nf 526//977 492//977 527//977\nf 527//978 492//978 493//978\nf 490//979 493//979 492//979\nf 493//980 531//980 528//980\nf 493//981 528//981 527//981\nf 527//982 528//982 524//982\nf 528//983 529//983 524//983\nf 530//984 529//984 528//984\nf 530//985 528//985 531//985\nf 531//986 494//986 532//986\nf 531//987 493//987 494//987\nf 533//988 534//988 569//988\nf 533//989 494//989 534//989\nf 509//990 534//990 494//990\nf 509//991 490//991 491//991\nf 510//992 534//992 509//992\nf 572//993 534//993 511//993\nf 536//994 512//994 513//994\nf 514//995 536//995 513//995\nf 514//996 516//996 536//996\nf 514//997 513//997 506//997\nf 516//998 538//998 537//998\nf 518//999 538//999 516//999\nf 538//1000 518//1000 523//1000\nf 546//1001 545//1001 542//1001\nf 546//1002 547//1002 545//1002\nf 546//1003 544//1003 547//1003\nf 544//1004 548//1004 547//1004\nf 575//1005 547//1005 549//1005\nf 547//1006 548//1006 549//1006\nf 548//1007 544//1007 552//1007\nf 552//1008 551//1008 548//1008\nf 543//1009 551//1009 552//1009\nf 543//1010 553//1010 551//1010\nf 543//1011 523//1011 524//1011\nf 553//1012 543//1012 524//1012\nf 553//1013 524//1013 554//1013\nf 556//1014 554//1014 524//1014\nf 554//1015 556//1015 555//1015\nf 556//1016 558//1016 557//1016\nf 556//1017 524//1017 558//1017\nf 558//1018 559//1018 557//1018\nf 560//1019 559//1019 558//1019\nf 560//1020 558//1020 524//1020\nf 561//1021 560//1021 524//1021\nf 561//1022 563//1022 562//1022\nf 561//1023 524//1023 564//1023\nf 564//1024 563//1024 561//1024\nf 564//1025 565//1025 563//1025\nf 566//1026 563//1026 565//1026\nf 565//1027 568//1027 566//1027\nf 568//1028 565//1028 564//1028\nf 568//1029 564//1029 524//1029\nf 529//1030 568//1030 524//1030\nf 529//1031 530//1031 568//1031\nf 566//1032 568//1032 530//1032\nf 566//1033 530//1033 567//1033\nf 532//1034 567//1034 530//1034\nf 530//1035 531//1035 532//1035\nf 569//1036 579//1036 532//1036\nf 569//1037 532//1037 533//1037\nf 570//1038 569//1038 571//1038\nf 571//1039 540//1039 545//1039\nf 569//1040 534//1040 571//1040\nf 571//1041 534//1041 572//1041\nf 540//1042 572//1042 541//1042\nf 572//1043 540//1043 571//1043\nf 572//1044 511//1044 541//1044\nf 535//1045 573//1045 541//1045\nf 535//1046 541//1046 511//1046\nf 573//1047 535//1047 539//1047\nf 535//1048 512//1048 536//1048\nf 512//1049 535//1049 511//1049\nf 536//1050 516//1050 537//1050\nf 536//1051 537//1051 539//1051\nf 536//1052 539//1052 535//1052\nf 547//1053 574//1053 545//1053\nf 574//1054 547//1054 575//1054\nf 549//1055 550//1055 575//1055\nf 550//1056 576//1056 559//1056\nf 549//1057 576//1057 550//1057\nf 576//1058 555//1058 557//1058\nf 576//1059 557//1059 559//1059\nf 556//1060 557//1060 555//1060\nf 550//1061 577//1061 575//1061\nf 562//1062 577//1062 550//1062\nf 562//1063 550//1063 578//1063\nf 559//1064 578//1064 550//1064\nf 578//1065 559//1065 560//1065\nf 578//1066 560//1066 562//1066\nf 561//1067 562//1067 560//1067\nf 562//1068 563//1068 577//1068\nf 567//1069 579//1069 577//1069\nf 577//1070 563//1070 567//1070\nf 567//1071 563//1071 566//1071\nf 579//1072 567//1072 532//1072\nf 570//1073 574//1073 579//1073\nf 569//1074 570//1074 579//1074\nf 579//1075 574//1075 575//1075\nf 575//1076 577//1076 579//1076\nf 545//1077 574//1077 570//1077\nf 545//1078 570//1078 571//1078\nf 551//1079 555//1079 576//1079\nf 549//1080 548//1080 576//1080\nf 548//1081 551//1081 576//1081\nf 542//1082 545//1082 540//1082\nf 533//1083 532//1083 494//1083\nf 517//1084 515//1084 519//1084\nf 496//1085 502//1085 495//1085\nf 496//1086 500//1086 502//1086\nf 541//1087 573//1087 523//1087\nf 573//1088 539//1088 523//1088\nf 539//1089 537//1089 523//1089\nf 537//1090 538//1090 523//1090\nf 522//1091 521//1091 523//1091\nf 521//1092 520//1092 523//1092\nf 543//1093 552//1093 523//1093\nf 552//1089 544//1089 523//1089\nf 544//1094 546//1094 523//1094\nf 546//1095 542//1095 523//1095\nf 542//1096 540//1096 523//1096\nf 540//1097 541//1097 523//1097\nf 500//1098 524//1098 501//1098\nf 500//1099 498//1099 524//1099\nf 555//1100 551//1100 554//1100\nf 551//1101 553//1101 554//1101\no geometry_10.002\nv -31.318785 15.865563 -35.821827\nv -31.318876 18.907734 -37.002716\nv -31.318705 21.824333 -37.347176\nv -31.318787 27.112806 -36.744270\nv -31.318930 34.118263 -34.557190\nv -31.318741 34.118252 -31.288261\nv -31.318741 15.864429 -32.427265\nv -44.516941 15.864429 -6.085573\nv -47.154129 15.866018 -6.086396\nv -45.501713 15.872385 -13.855223\nv -43.639107 15.869387 -19.037519\nv -41.001099 15.879367 -24.330870\nv -37.481186 15.864902 -29.394766\nv -33.464966 15.878188 -33.984722\nv -43.696362 34.121754 -6.085572\nv -46.147579 34.113625 -6.092906\nv -47.303974 29.567406 -6.085393\nv -48.955189 19.065022 -6.076069\nv -33.317547 34.121624 -32.683098\nv -37.088257 34.120266 -28.356415\nv -39.768585 34.120800 -24.362074\nv -42.794956 34.121548 -18.505663\nv -44.797657 34.120071 -12.783852\nv -34.390778 18.848114 -34.248653\nv -38.038803 16.636757 -29.173389\nv -47.283619 29.122816 -7.011180\nv -34.510906 21.560204 -34.504959\nv -38.453266 18.867842 -29.659554\nv -45.768494 30.687696 -12.733498\nv -41.771820 18.766014 -24.635061\nv -33.361454 32.357567 -33.401794\nv -45.075157 18.846586 -17.743740\nv -38.624283 21.935755 -29.833986\nv -34.426399 24.424305 -34.414024\nv -42.147545 21.876900 -24.548374\nv -46.251587 28.332661 -12.879100\nv -43.546825 32.397682 -17.927803\nv -46.610218 24.871899 -13.399073\nv -46.667118 21.510384 -13.719355\nv -43.820469 18.871519 -20.612516\nv -37.694977 30.305546 -29.249287\nv -44.834553 21.604736 -19.081562\nv -34.260414 28.029312 -33.881893\nv -43.966541 29.506380 -18.814503\nv -44.453205 26.464819 -19.030285\nv -38.381008 26.362623 -29.590284\nv -41.831661 25.389303 -24.605791\nv -44.726650 24.176683 -19.059011\nv -41.049984 30.554970 -24.160803\nv -41.525066 27.880404 -24.414551\nvn 1.0000 -0.0001 -0.0003\nvn -0.0333 -0.9989 -0.0320\nvn 0.8973 -0.0275 0.4407\nvn 0.8933 -0.0402 0.4476\nvn -0.0030 0.0024 1.0000\nvn -0.0013 0.0011 1.0000\nvn -0.0007 1.0000 -0.0003\nvn 0.0002 1.0000 -0.0000\nvn 0.0003 1.0000 0.0000\nvn -0.0010 1.0000 -0.0001\nvn -0.0033 1.0000 0.0003\nvn -0.6247 -0.2826 -0.7279\nvn -0.6410 -0.2639 -0.7207\nvn -0.7089 -0.3339 -0.6212\nvn -0.9599 0.2439 -0.1382\nvn -0.8570 -0.4819 -0.1827\nvn -0.6632 -0.0995 -0.7418\nvn -0.7548 -0.3952 -0.5235\nvn -0.9454 0.2646 -0.1905\nvn -0.9507 0.2501 -0.1833\nvn -0.7456 -0.0954 -0.6596\nvn -0.6583 -0.0883 -0.7476\nvn -0.8020 -0.2656 -0.5351\nvn -0.6523 0.2999 -0.6962\nvn -0.9175 -0.2609 -0.3002\nvn -0.7513 -0.0791 -0.6552\nvn -0.6663 0.0433 -0.7444\nvn -0.8019 -0.2703 -0.5328\nvn -0.8292 -0.0777 -0.5536\nvn -0.8306 -0.0850 -0.5503\nvn -0.9833 0.1545 -0.0958\nvn -0.9038 0.2882 -0.3163\nvn -0.9580 0.2087 -0.1966\nvn -0.9608 0.0424 -0.2741\nvn -0.9453 -0.0926 -0.3126\nvn -0.7481 0.0431 -0.6622\nvn -0.6445 0.0866 -0.7597\nvn -0.6232 0.2331 -0.7465\nvn -0.7296 0.2637 -0.6310\nvn -0.7248 0.2753 -0.6316\nvn -0.9432 -0.0747 -0.3237\nvn -0.8997 -0.2935 -0.3232\nvn -0.8881 -0.0947 -0.4498\nvn -0.8845 -0.2575 -0.3891\nvn -0.6457 0.2154 -0.7326\nvn -0.7274 0.2231 -0.6489\nvn -0.9166 0.2547 -0.3082\nvn -0.9257 0.2094 -0.3150\nvn -0.9198 0.2309 -0.3174\nvn -0.9380 0.1162 -0.3264\nvn -0.9099 -0.1141 -0.3989\nvn -0.7556 0.0773 -0.6505\nvn -0.7401 0.1314 -0.6595\nvn -0.6681 0.1387 -0.7310\nvn -0.8927 -0.0831 -0.4429\nvn -0.8817 0.2506 -0.3997\nvn -0.9461 0.0466 -0.3206\nvn -0.8906 0.0728 -0.4489\nvn -0.8975 0.0415 -0.4391\nvn -0.7438 0.1850 -0.6423\nvn -0.8699 0.2493 -0.4256\nvn -0.8908 0.1120 -0.4404\nvn -0.8017 0.2541 -0.5410\nvn -0.8023 0.2579 -0.5384\nvn -0.8525 0.2815 -0.4406\nvn -0.8266 0.1435 -0.5442\nvn -0.8137 0.1891 -0.5497\nvn -0.8848 0.1429 -0.4436\nvn -0.8141 0.1965 -0.5464\nvn -0.8837 0.1723 -0.4353\nvn -0.8764 0.1974 -0.4394\nvn -0.0002 -1.0000 -0.0003\nvn 1.0000 -0.0000 -0.0000\nvn -0.0001 -1.0000 -0.0001\nvn -0.0006 -1.0000 -0.0002\nvn -0.0021 -1.0000 -0.0008\nvn -0.0241 -0.9996 -0.0139\nvn 1.0000 0.0000 -0.0001\nvn 0.0017 1.0000 0.0000\nvn 0.0013 1.0000 0.0005\nvn 0.0021 -0.0001 1.0000\nvn -0.0003 -0.0034 1.0000\nvn -0.9303 0.1718 -0.3242\nvn -0.0095 -1.0000 -0.0028\nvn -0.9712 0.1437 -0.1902\nvn -0.9696 0.1315 -0.2062\nvn -0.7210 -0.2727 -0.6371\nvn -0.8598 -0.2770 -0.4290\nvn -0.8306 0.0657 -0.5529\nvn -0.9456 0.0425 -0.3224\nvn -0.9370 0.1449 -0.3179\nvn -0.7174 -0.2803 -0.6378\nvn -0.8597 -0.2749 -0.4306\nvn -0.8267 0.0761 -0.5575\nusemtl Default_OBJ.002\ns off\nf 580//1102 581//1102 582//1102\nf 580//1103 592//1103 593//1103\nf 586//1104 585//1104 594//1104\nf 586//1105 594//1105 587//1105\nf 594//1106 595//1106 596//1106\nf 594//1107 596//1107 597//1107\nf 594//1108 598//1108 599//1108\nf 594//1109 599//1109 600//1109\nf 594//1110 600//1110 601//1110\nf 594//1111 601//1111 602//1111\nf 594//1112 602//1112 595//1112\nf 593//1113 581//1113 580//1113\nf 593//1114 603//1114 581//1114\nf 593//1115 592//1115 604//1115\nf 595//1116 605//1116 596//1116\nf 588//1117 597//1117 589//1117\nf 603//1118 606//1118 581//1118\nf 604//1119 592//1119 591//1119\nf 602//1120 608//1120 595//1120\nf 595//1121 608//1121 605//1121\nf 603//1122 607//1122 606//1122\nf 606//1123 582//1123 581//1123\nf 604//1124 609//1124 607//1124\nf 584//1125 610//1125 598//1125\nf 597//1126 611//1126 589//1126\nf 606//1127 607//1127 612//1127\nf 606//1128 613//1128 582//1128\nf 591//1129 609//1129 604//1129\nf 607//1130 614//1130 612//1130\nf 607//1131 609//1131 614//1131\nf 605//1132 597//1132 596//1132\nf 602//1133 601//1133 616//1133\nf 608//1134 615//1134 605//1134\nf 597//1135 617//1135 618//1135\nf 597//1136 618//1136 611//1136\nf 606//1137 612//1137 613//1137\nf 582//1138 613//1138 583//1138\nf 584//1139 583//1139 610//1139\nf 610//1140 620//1140 599//1140\nf 610//1141 599//1141 598//1141\nf 611//1142 618//1142 621//1142\nf 611//1143 590//1143 589//1143\nf 609//1144 619//1144 614//1144\nf 590//1145 611//1145 619//1145\nf 583//1146 622//1146 610//1146\nf 610//1147 622//1147 620//1147\nf 616//1148 608//1148 602//1148\nf 608//1149 623//1149 615//1149\nf 608//1150 616//1150 623//1150\nf 617//1151 624//1151 627//1151\nf 611//1152 621//1152 619//1152\nf 612//1153 625//1153 613//1153\nf 613//1154 625//1154 622//1154\nf 613//1155 622//1155 583//1155\nf 614//1156 619//1156 621//1156\nf 616//1157 601//1157 623//1157\nf 627//1158 618//1158 617//1158\nf 614//1159 627//1159 626//1159\nf 621//1160 627//1160 614//1160\nf 622//1161 625//1161 620//1161\nf 601//1162 628//1162 623//1162\nf 627//1163 624//1163 626//1163\nf 620//1164 628//1164 599//1164\nf 599//1165 628//1165 600//1165\nf 628//1166 601//1166 600//1166\nf 626//1167 629//1167 625//1167\nf 625//1168 629//1168 620//1168\nf 626//1169 624//1169 629//1169\nf 620//1170 629//1170 628//1170\nf 629//1171 624//1171 623//1171\nf 628//1172 629//1172 623//1172\nf 592//1173 580//1173 586//1173\nf 580//1174 582//1174 586//1174\nf 582//1174 585//1174 586//1174\nf 587//1175 592//1175 586//1175\nf 587//1176 588//1176 592//1176\nf 588//1177 590//1177 592//1177\nf 590//1178 591//1178 592//1178\nf 583//1174 584//1174 582//1174\nf 584//1179 585//1179 582//1179\nf 584//1180 598//1180 585//1180\nf 598//1181 594//1181 585//1181\nf 597//1182 587//1182 594//1182\nf 597//1183 588//1183 587//1183\nf 624//1184 615//1184 623//1184\nf 589//1185 590//1185 588//1185\nf 605//1186 615//1186 597//1186\nf 615//1187 617//1187 597//1187\nf 603//1188 604//1188 607//1188\nf 619//1189 591//1189 590//1189\nf 626//1190 612//1190 614//1190\nf 627//1191 621//1191 618//1191\nf 624//1192 617//1192 615//1192\nf 603//1193 593//1193 604//1193\nf 619//1194 609//1194 591//1194\nf 626//1195 625//1195 612//1195\no geometry_11.002\nv 36.437084 2.846844 -0.014092\nv -0.425933 2.846313 -36.413044\nv -0.425933 2.847041 36.413364\nv 4.820461 2.846136 -36.148617\nv -0.424447 2.049673 -35.973450\nv 4.265617 2.208548 -35.879150\nv 10.153072 2.205617 -34.725330\nv 10.544698 2.845847 -34.914989\nv 16.175611 2.846780 -32.797256\nv 14.239754 2.219946 -33.349499\nv 10.102130 1.530822 -33.626114\nv 15.179415 1.059830 -30.573425\nv 6.525030 1.042893 -33.369595\nv 18.556814 0.482923 -25.361971\nv 21.832220 1.156386 -26.686726\nv 18.302391 2.180820 -31.257147\nv 21.839621 2.846023 -29.277576\nv 22.156609 2.152248 -28.601572\nv 25.892477 2.845154 -25.878597\nv 25.697609 2.189985 -25.595802\nv 28.874409 2.842691 -22.402529\nv 31.220930 2.179979 -18.356955\nv 31.822973 2.846670 -17.923874\nv 33.389877 2.224704 -14.103972\nv 30.570351 1.093651 -15.385690\nv 33.653587 1.550532 -10.115005\nv 33.424007 1.050970 -6.339017\nv 35.857552 2.215107 -4.294972\nv 36.125751 2.846225 -4.899552\nv 34.773922 2.217302 -10.014462\nv 34.424332 2.845045 -12.227993\nv 36.052624 2.108265 0.014851\nv 35.859669 2.219038 4.319134\nv 36.135216 2.847010 4.832819\nv 34.777576 2.215758 9.991363\nv 33.648251 1.547827 10.111091\nv 30.122175 1.177728 16.669836\nv 33.387836 2.224941 14.110880\nv 31.273817 2.182575 18.267204\nv 34.261047 2.845553 12.780428\nv 24.196659 2.846493 27.512087\nv 30.171244 2.844585 20.712065\nv 28.717936 1.945049 21.603800\nv 25.710001 2.232985 25.638769\nv 22.534924 2.136111 28.280693\nv 24.213503 1.144373 24.447971\nv 20.993469 1.101976 27.086735\nv 18.640854 2.179992 31.062540\nv 18.364819 2.847250 31.581203\nv 14.221398 2.216493 33.354439\nv 12.224342 2.846382 34.431946\nv 4.795535 2.846996 36.149265\nv 10.138961 2.206398 34.728580\nv 15.354871 1.066342 30.510061\nv 10.120475 1.545104 33.652454\nv 4.272730 2.210429 35.880413\nv 6.326169 1.060577 33.451103\nv -0.424494 2.050292 35.974293\nv -0.426222 0.994567 33.749020\nv -0.426449 -0.298170 23.132721\nv -0.426382 0.393723 30.634163\nv 7.901579 0.465431 30.309568\nv 8.131824 0.100593 26.976530\nv 6.065915 -0.301200 21.721235\nv 8.508519 -0.620234 9.694903\nv -0.426435 -0.698838 5.204770\nv 11.679450 -0.633038 -2.269987\nv 20.613852 -0.381834 2.300179\nv 26.396708 -0.046918 2.350724\nv 18.082800 -0.289989 14.146214\nv 25.636312 0.137351 12.970964\nv 25.931055 -0.019837 -6.924315\nv 30.642389 0.477116 -6.207119\nv 25.148193 0.176782 -14.470524\nv 18.055531 -0.301002 -13.922522\nv 8.494227 -0.013552 -25.799984\nv -0.426185 -0.272821 -23.367670\nv 11.022236 -0.482088 -14.552311\nv -0.426267 -0.620262 -12.520144\nv -0.426382 0.394043 -30.636585\nv 8.800117 0.489392 -30.217560\nv -0.426272 1.002398 -33.770218\nv 21.840403 0.297659 -20.934370\nv 24.224426 1.096609 -24.198421\nv 27.011177 0.971459 -20.271723\nv 28.929417 0.636539 -14.292472\nv 28.712006 1.947163 -21.615591\nv 33.760193 1.001771 0.050012\nv 33.496426 1.069711 6.210653\nv 30.242369 0.826800 13.912440\nv 27.015112 0.970091 20.255957\nv 17.524115 0.549985 26.555462\nv 15.934736 0.067183 23.063305\nv 31.020172 0.482021 4.895506\nv 22.968323 0.429762 20.922792\nvn 0.0456 -0.4223 -0.9053\nvn 0.0339 -0.4828 -0.8751\nvn 0.1943 -0.3860 -0.9018\nvn 0.3405 -0.2540 -0.9053\nvn 0.2894 -0.4303 -0.8550\nvn 0.1744 -0.8427 -0.5093\nvn 0.1762 -0.8856 -0.4297\nvn 0.1054 -0.9413 -0.3206\nvn 0.0744 -0.9717 -0.2243\nvn 0.0790 -0.9839 -0.1601\nvn 0.2172 -0.8723 -0.4381\nvn 0.3862 -0.5234 -0.7596\nvn 0.5084 -0.2686 -0.8182\nvn 0.4955 -0.4794 -0.7243\nvn 0.5853 -0.4127 -0.6980\nvn 0.5767 -0.4623 -0.6736\nvn 0.6768 -0.4521 -0.5810\nvn 0.7764 -0.3693 -0.5108\nvn 0.7942 -0.4572 -0.4002\nvn 0.4474 -0.8671 -0.2191\nvn 0.4350 -0.8827 -0.1779\nvn 0.5154 -0.8513 -0.0980\nvn 0.4874 -0.8690 -0.0853\nvn 0.8439 -0.5120 -0.1601\nvn 0.9439 -0.2469 -0.2191\nvn 0.8096 -0.5186 -0.2749\nvn 0.5151 -0.8389 -0.1758\nvn 0.8980 -0.4364 -0.0572\nvn 0.8850 -0.4627 -0.0515\nvn 0.8867 -0.4595 0.0516\nvn 0.8967 -0.4391 0.0559\nvn 0.8483 -0.5043 0.1615\nvn 0.5143 -0.8520 0.0976\nvn 0.3454 -0.9289 0.1333\nvn 0.4242 -0.8879 0.1779\nvn 0.5149 -0.8391 0.1756\nvn 0.4500 -0.8655 0.2200\nvn 0.8574 -0.2776 0.4333\nvn 0.7961 -0.5418 0.2698\nvn 0.9510 -0.2130 0.2242\nvn 0.0011 1.0000 0.0007\nvn 0.8695 -0.2075 0.4483\nvn 0.6538 -0.6023 0.4580\nvn 0.7415 -0.1604 0.6515\nvn 0.5329 -0.5765 0.6193\nvn 0.3656 -0.8686 0.3345\nvn 0.3089 -0.8792 0.3628\nvn 0.3350 -0.8662 0.3708\nvn 0.2761 -0.8738 0.4003\nvn 0.5232 -0.4242 0.7391\nvn 0.5311 -0.3720 0.7613\nvn 0.4085 -0.4488 0.7948\nvn 0.4116 -0.2115 0.8865\nvn 0.2741 -0.5175 0.8106\nvn 0.2210 -0.8704 0.4400\nvn 0.1762 -0.8862 0.4286\nvn 0.1749 -0.8402 0.5133\nvn 0.1014 -0.8484 0.5196\nvn 0.0855 -0.8707 0.4844\nvn 0.1669 -0.4968 0.8517\nvn 0.2167 -0.2716 0.9377\nvn 0.0339 -0.4823 0.8753\nvn 0.0458 -0.4204 0.9062\nvn 0.0277 -0.9031 0.4285\nvn -1.0000 0.0004 -0.0000\nvn 0.0182 -0.9807 0.1949\nvn 0.0158 -0.9818 0.1894\nvn 0.0128 -0.9939 0.1097\nvn 0.0051 -0.9958 0.0918\nvn 0.0148 -0.9974 0.0704\nvn 0.0284 -0.9975 0.0651\nvn 0.0308 -0.9984 0.0474\nvn 0.0202 -0.9993 0.0306\nvn 0.0055 -0.9996 0.0276\nvn -0.0024 -0.9997 0.0223\nvn 0.0073 -1.0000 0.0030\nvn 0.0027 -1.0000 -0.0044\nvn 0.0333 -0.9994 -0.0102\nvn 0.0281 -0.9995 0.0137\nvn 0.0243 -0.9997 0.0075\nvn 0.0576 -0.9981 0.0201\nvn 0.0650 -0.9963 0.0556\nvn 0.0598 -0.9980 0.0216\nvn 0.0579 -0.9983 -0.0058\nvn 0.1061 -0.9943 -0.0082\nvn 0.1227 -0.9914 -0.0455\nvn 0.1104 -0.9932 -0.0373\nvn 0.0647 -0.9974 -0.0327\nvn 0.0300 -0.9984 -0.0483\nvn 0.0466 -0.9988 -0.0123\nvn 0.0270 -0.9995 -0.0137\nvn 0.0064 -0.9995 -0.0320\nvn 0.0098 -0.9999 -0.0128\nvn 0.0040 -0.9958 -0.0914\nvn 0.0154 -0.9936 -0.1121\nvn 0.0300 -0.9028 -0.4291\nvn 0.0393 -0.8923 -0.4498\nvn 0.0845 -0.8725 -0.4813\nvn 0.1009 -0.8500 -0.5171\nvn 0.0537 -0.9926 -0.1093\nvn 0.1242 -0.9742 -0.1883\nvn 0.2367 -0.8929 -0.3829\nvn 0.2739 -0.8715 -0.4068\nvn 0.3388 -0.8570 -0.3883\nvn 0.3312 -0.8803 -0.3396\nvn 0.1380 -0.9781 -0.1561\nvn 0.1352 -0.9807 -0.1413\nvn 0.1449 -0.9803 -0.1341\nvn 0.1412 -0.9849 -0.1005\nvn 0.1936 -0.9741 -0.1167\nvn 0.3926 -0.8882 -0.2388\nvn 0.3432 -0.9113 -0.2272\nvn 0.3205 -0.9119 -0.2565\nvn 0.3506 -0.8804 -0.3193\nvn 0.6376 -0.5705 -0.5177\nvn 0.6806 -0.5494 -0.4847\nvn 0.4602 -0.8868 -0.0428\nvn 0.4341 -0.9004 -0.0298\nvn 0.4349 -0.9000 0.0285\nvn 0.4649 -0.8843 0.0436\nvn 0.3151 -0.9434 0.1034\nvn 0.4912 -0.8667 0.0871\nvn 0.1379 -0.9892 0.0497\nvn 0.2176 -0.9670 0.1326\nvn 0.3220 -0.9123 0.2531\nvn 0.3346 -0.9121 0.2371\nvn 0.4121 -0.8752 0.2534\nvn 0.6570 -0.5379 0.5282\nvn 0.2381 -0.8926 0.3829\nvn 0.0747 -0.9827 0.1693\nvn 0.1248 -0.9727 0.1955\nvn 0.0815 -0.9916 0.1000\nvn 0.0520 -0.9923 0.1122\nvn 0.0394 -0.8899 0.4545\nvn 0.0725 -0.9727 0.2206\nvn 0.1036 -0.9430 0.3163\nvn 0.0528 -0.9922 0.1131\nvn 0.0696 -0.9958 0.0600\nvn 0.1003 -0.9947 0.0244\nvn 0.2207 -0.9751 0.0202\nvn 0.2029 -0.9777 0.0549\nvn 0.2012 -0.9794 -0.0181\nvn 0.1768 -0.9842 -0.0056\nvn 0.1156 -0.9933 -0.0035\nvn 0.1315 -0.9881 0.0804\nvn 0.1474 -0.9843 0.0972\nvn 0.1542 -0.9775 0.1437\nvn 0.2213 -0.9724 -0.0744\nvn 0.1989 -0.9781 -0.0614\nvn 0.1241 -0.9889 -0.0820\nvn 0.0632 -0.9967 -0.0510\nvn 0.0167 -0.9988 -0.0454\nvn 0.0526 -0.9954 -0.0807\nvn 0.0454 -0.9971 -0.0606\nvn 0.3194 -0.9418 -0.1052\nvn -0.0000 1.0000 -0.0000\nvn 0.8803 -0.2519 -0.4021\nvn 0.1660 -0.5029 -0.8482\nvn 0.0006 1.0000 -0.0002\nvn 0.0001 1.0000 -0.0000\nvn 0.0020 1.0000 -0.0006\nvn 0.0080 0.9999 -0.0062\nvn 0.0010 1.0000 -0.0009\nvn 0.0004 1.0000 -0.0004\nvn 0.0002 1.0000 0.0001\nvn 0.0006 1.0000 0.0003\nvn 0.0003 1.0000 -0.0013\nvn 0.0001 1.0000 -0.0004\nvn 0.0186 -0.9824 -0.1859\nvn 0.0000 1.0000 0.0001\nvn 0.0003 1.0000 0.0010\nvn -1.0000 0.0002 0.0000\nvn -1.0000 -0.0019 -0.0001\nvn -1.0000 -0.0021 0.0005\nvn 0.1362 -0.9792 0.1504\nvn 0.1330 -0.9798 0.1495\nvn -1.0000 0.0021 -0.0002\nvn -1.0000 0.0018 0.0000\nvn -1.0000 -0.0004 -0.0000\nvn -1.0000 0.0001 -0.0000\nvn -1.0000 0.0003 -0.0000\nvn 0.0167 -0.9815 -0.1906\nusemtl Default_OBJ.002\ns off\nf 635//1196 631//1196 633//1196\nf 635//1197 634//1197 631//1197\nf 637//1198 636//1198 633//1198\nf 637//1199 638//1199 639//1199\nf 637//1200 639//1200 636//1200\nf 639//1201 640//1201 636//1201\nf 639//1202 641//1202 640//1202\nf 642//1203 640//1203 641//1203\nf 710//1204 642//1204 641//1204\nf 643//1205 710//1205 641//1205\nf 639//1206 645//1206 641//1206\nf 645//1207 639//1207 638//1207\nf 646//1208 645//1208 638//1208\nf 647//1209 645//1209 646//1209\nf 646//1210 648//1210 647//1210\nf 647//1211 648//1211 649//1211\nf 648//1212 650//1212 649//1212\nf 650//1213 652//1213 651//1213\nf 651//1214 652//1214 653//1214\nf 653//1215 654//1215 651//1215\nf 653//1216 655//1216 654//1216\nf 657//1217 655//1217 659//1217\nf 657//1218 656//1218 655//1218\nf 659//1219 658//1219 657//1219\nf 659//1220 660//1220 658//1220\nf 659//1221 653//1221 660//1221\nf 659//1222 655//1222 653//1222\nf 657//1223 658//1223 630//1223\nf 661//1224 657//1224 630//1224\nf 662//1225 661//1225 630//1225\nf 663//1226 662//1226 630//1226\nf 662//1227 663//1227 664//1227\nf 664//1228 665//1228 662//1228\nf 665//1229 666//1229 719//1229\nf 665//1230 667//1230 666//1230\nf 665//1231 664//1231 667//1231\nf 667//1232 668//1232 666//1232\nf 667//1233 669//1233 668//1233\nf 669//1234 667//1234 664//1234\nf 669//1235 664//1235 663//1235\nf 671//1236 669//1236 670//1236\nf 669//1237 671//1237 668//1237\nf 671//1238 672//1238 668//1238\nf 670//1239 673//1239 671//1239\nf 673//1240 670//1240 674//1240\nf 672//1241 673//1241 675//1241\nf 675//1242 674//1242 676//1242\nf 675//1243 673//1243 674//1243\nf 674//1244 677//1244 676//1244\nf 670//1245 677//1245 674//1245\nf 677//1246 670//1246 678//1246\nf 678//1247 679//1247 677//1247\nf 678//1248 680//1248 679//1248\nf 682//1249 679//1249 680//1249\nf 677//1250 679//1250 683//1250\nf 683//1251 679//1251 684//1251\nf 679//1252 682//1252 684//1252\nf 685//1253 684//1253 682//1253\nf 685//1254 686//1254 684//1254\nf 685//1255 682//1255 681//1255\nf 680//1256 681//1256 682//1256\nf 685//1257 632//1257 687//1257\nf 685//1258 681//1258 632//1258\nf 688//1259 686//1259 687//1259\nf 690//1260 688//1260 689//1260\nf 686//1261 688//1261 691//1261\nf 690//1262 691//1262 688//1262\nf 690//1263 692//1263 691//1263\nf 689//1264 692//1264 690//1264\nf 689//1265 693//1265 692//1265\nf 693//1266 722//1266 692//1266\nf 693//1267 699//1267 722//1267\nf 693//1268 694//1268 699//1268\nf 694//1269 693//1269 689//1269\nf 689//1270 695//1270 694//1270\nf 695//1271 696//1271 694//1271\nf 696//1272 695//1272 708//1272\nf 696//1273 704//1273 697//1273\nf 697//1274 699//1274 694//1274\nf 694//1275 696//1275 697//1275\nf 699//1276 697//1276 698//1276\nf 699//1277 700//1277 722//1277\nf 700//1278 699//1278 698//1278\nf 697//1279 701//1279 698//1279\nf 701//1280 702//1280 698//1280\nf 703//1281 715//1281 702//1281\nf 703//1282 702//1282 701//1282\nf 704//1283 703//1283 701//1283\nf 707//1284 705//1284 704//1284\nf 704//1285 701//1285 697//1285\nf 704//1286 696//1286 707//1286\nf 707//1287 708//1287 706//1287\nf 696//1288 708//1288 707//1288\nf 706//1289 709//1289 705//1289\nf 705//1290 709//1290 710//1290\nf 642//1291 711//1291 634//1291\nf 634//1292 635//1292 642//1292\nf 635//1293 640//1293 642//1293\nf 635//1294 636//1294 640//1294\nf 710//1295 643//1295 705//1295\nf 643//1296 641//1296 644//1296\nf 641//1297 645//1297 644//1297\nf 647//1298 644//1298 645//1298\nf 644//1299 647//1299 649//1299\nf 713//1300 644//1300 649//1300\nf 713//1301 643//1301 644//1301\nf 713//1302 712//1302 643//1302\nf 714//1303 712//1303 713//1303\nf 715//1304 712//1304 714//1304\nf 654//1305 715//1305 714//1305\nf 716//1306 651//1306 654//1306\nf 714//1307 716//1307 654//1307\nf 713//1308 716//1308 714//1308\nf 713//1309 649//1309 716//1309\nf 650//1310 716//1310 649//1310\nf 650//1311 651//1311 716//1311\nf 657//1312 661//1312 656//1312\nf 656//1313 661//1313 717//1313\nf 717//1314 661//1314 718//1314\nf 661//1315 662//1315 718//1315\nf 718//1316 665//1316 719//1316\nf 718//1317 662//1317 665//1317\nf 700//1318 723//1318 719//1318\nf 719//1319 666//1319 720//1319\nf 672//1320 675//1320 720//1320\nf 672//1321 720//1321 666//1321\nf 672//1322 666//1322 668//1322\nf 671//1323 673//1323 672//1323\nf 677//1324 683//1324 676//1324\nf 683//1325 691//1325 721//1325\nf 721//1326 676//1326 683//1326\nf 721//1327 722//1327 724//1327\nf 691//1328 692//1328 722//1328\nf 686//1329 685//1329 687//1329\nf 686//1330 691//1330 683//1330\nf 686//1331 683//1331 684//1331\nf 721//1332 691//1332 722//1332\nf 722//1333 700//1333 724//1333\nf 723//1334 700//1334 698//1334\nf 723//1335 717//1335 718//1335\nf 719//1336 723//1336 718//1336\nf 656//1337 717//1337 702//1337\nf 717//1338 723//1338 702//1338\nf 723//1339 698//1339 702//1339\nf 700//1340 719//1340 724//1340\nf 720//1341 724//1341 719//1341\nf 720//1342 675//1342 724//1342\nf 715//1343 654//1343 656//1343\nf 715//1344 656//1344 702//1344\nf 703//1345 712//1345 715//1345\nf 712//1346 703//1346 704//1346\nf 707//1347 706//1347 705//1347\nf 705//1348 643//1348 712//1348\nf 704//1349 705//1349 712//1349\nf 656//1350 654//1350 655//1350\nf 631//1351 678//1351 638//1351\nf 660//1352 653//1352 652//1352\nf 635//1353 633//1353 636//1353\nf 658//1354 652//1354 630//1354\nf 652//1355 663//1355 630//1355\nf 660//1356 652//1356 658//1356\nf 650//1357 648//1357 652//1357\nf 648//1358 646//1358 652//1358\nf 646//1359 638//1359 652//1359\nf 638//1351 663//1351 652//1351\nf 678//1360 670//1360 663//1360\nf 670//1361 669//1361 663//1361\nf 638//1351 678//1351 663//1351\nf 637//1362 633//1362 638//1362\nf 633//1363 631//1363 638//1363\nf 709//1364 642//1364 710//1364\nf 632//1365 681//1365 678//1365\nf 681//1366 680//1366 678//1366\nf 689//1367 632//1367 631//1367\nf 634//1368 689//1368 631//1368\nf 689//1369 687//1369 632//1369\nf 675//1370 676//1370 724//1370\nf 676//1371 721//1371 724//1371\nf 688//1372 687//1372 689//1372\nf 634//1373 711//1373 689//1373\nf 711//1367 709//1367 689//1367\nf 709//1374 706//1374 689//1374\nf 706//1375 708//1375 689//1375\nf 708//1376 695//1376 689//1376\nf 631//1351 632//1351 678//1351\nf 709//1377 711//1377 642//1377\no geometry_12.002\nv 60.590942 27.917566 7.594780\nv 56.823780 22.626589 7.597827\nv 46.830406 15.852167 7.607268\nv 44.250595 15.885171 7.536829\nv 44.902248 27.917419 9.935982\nv 43.956757 27.944103 13.101075\nv 56.194508 27.920317 11.004087\nv 59.317993 27.850845 9.053223\nv 45.750328 15.874422 12.911100\nv 43.062237 15.852165 12.886703\nvn -0.0013 1.0000 -0.0088\nvn 0.0023 1.0000 0.0022\nvn 0.1099 0.9839 0.1409\nvn -0.1446 0.2010 -0.9689\nvn 0.6723 -0.4784 0.5649\nvn 0.5975 -0.4669 0.6519\nvn -0.9735 0.0758 -0.2158\nvn -0.9523 0.1085 -0.2854\nvn -0.0128 -0.9999 0.0016\nvn 0.4996 -0.3048 0.8108\nvn -0.0089 -0.0171 0.9998\nvn 0.5573 -0.8220 0.1169\nvn 0.1689 0.0096 0.9856\nvn 0.0083 -0.0065 -0.9999\nvn 0.0267 -0.0409 -0.9988\nvn 0.0083 -1.0000 -0.0043\nusemtl Default_OBJ.002\ns off\nf 725//1378 729//1378 730//1378\nf 725//1379 730//1379 731//1379\nf 725//1380 731//1380 732//1380\nf 725//1381 728//1381 729//1381\nf 725//1382 732//1382 726//1382\nf 726//1383 732//1383 733//1383\nf 728//1384 734//1384 730//1384\nf 728//1385 730//1385 729//1385\nf 733//1386 728//1386 727//1386\nf 732//1387 731//1387 733//1387\nf 733//1388 730//1388 734//1388\nf 726//1389 733//1389 727//1389\nf 731//1390 730//1390 733//1390\nf 726//1391 728//1391 725//1391\nf 726//1392 727//1392 728//1392\nf 733//1393 734//1393 728//1393\no geometry_13.002\nv 24.523140 34.119762 -36.780518\nv 24.523140 13.789572 -36.316441\nv 24.516237 18.839703 -41.841915\nv 24.520430 21.544380 -42.137192\nv 24.518194 25.328995 -41.904095\nv 24.511633 30.411161 -40.900425\nv 24.512632 34.118641 -39.709137\nv 18.311609 34.118221 -42.881580\nv 12.234291 34.119617 -44.916813\nv 6.520885 34.116798 -46.089405\nv -0.421416 34.118340 -46.502205\nv -0.426442 34.119766 -44.087002\nv -0.426442 13.789572 -43.720058\nv -0.424592 13.790504 -46.436356\nv 5.912559 13.790350 -46.071327\nv 18.177624 13.790113 -42.863033\nv 24.514729 13.792013 -39.636135\nv -0.422474 29.707760 -47.662144\nv -0.422085 25.533123 -48.384468\nv -0.423946 22.077795 -48.596317\nv -0.423031 19.268026 -48.431179\nv -0.421177 16.344330 -47.688709\nv 24.519854 16.255524 -41.048553\nv 6.524373 30.192421 -47.118149\nv 18.803062 16.251757 -43.917709\nv 6.551385 14.909497 -46.594852\nv 18.927963 18.965199 -44.643093\nv 18.684658 30.428526 -43.796307\nv 13.344056 18.593008 -46.500706\nv 6.521131 17.270315 -47.524071\nv 12.987656 31.785749 -45.408371\nv 6.542830 27.111387 -47.733597\nv 12.834200 28.970421 -46.150764\nv 12.773217 13.803523 -44.756458\nv 12.014977 16.390192 -46.189495\nv 19.040342 21.598598 -44.844818\nv 6.860399 19.052301 -47.919350\nv 18.966841 27.754536 -44.277210\nv 12.910316 21.482548 -46.948273\nv 13.045954 25.444193 -46.649418\nv 7.273588 24.233528 -47.945011\nv 18.910686 24.305521 -44.779369\nv 6.522509 21.762196 -48.196537\nvn 1.0000 0.0007 -0.0022\nvn 0.0001 1.0000 -0.0004\nvn 0.0005 1.0000 -0.0007\nvn -0.2810 0.0219 0.9595\nvn -0.2844 0.0173 0.9585\nvn 0.0007 -1.0000 -0.0007\nvn -1.0000 0.0008 -0.0021\nvn -1.0000 0.0001 -0.0013\nvn -1.0000 0.0007 -0.0024\nvn -1.0000 -0.0000 -0.0007\nvn 0.4379 0.2749 -0.8560\nvn 0.4040 -0.4556 -0.7932\nvn 0.4019 -0.4450 -0.8003\nvn 0.0502 -0.4398 -0.8967\nvn 0.0514 -0.4471 -0.8930\nvn 0.4306 0.2580 -0.8649\nvn 0.4328 -0.2640 -0.8620\nvn 0.4292 -0.2517 -0.8675\nvn 0.0557 -0.2457 -0.9677\nvn 0.0706 -0.3646 -0.9285\nvn 0.3195 0.2583 -0.9117\nvn 0.3040 0.2893 -0.9077\nvn 0.0630 0.1959 -0.9786\nvn 0.1939 0.2617 -0.9455\nvn 0.4442 -0.0979 -0.8906\nvn 0.2961 -0.4387 -0.8484\nvn 0.2836 -0.3998 -0.8716\nvn 0.2965 -0.3066 -0.9045\nvn 0.3204 -0.2584 -0.9114\nvn 0.3200 -0.0979 -0.9423\nvn 0.3248 -0.0860 -0.9419\nvn 0.0616 -0.2273 -0.9719\nvn 0.1655 -0.3594 -0.9184\nvn 0.1646 -0.4935 -0.8540\nvn 0.0534 0.1703 -0.9840\nvn 0.1852 0.1936 -0.9634\nvn 0.4406 -0.0872 -0.8935\nvn 0.1907 -0.2492 -0.9495\nvn 0.2041 -0.1199 -0.9716\nvn 0.1832 -0.4348 -0.8817\nvn 0.3242 0.1311 -0.9369\nvn 0.3161 0.1514 -0.9365\nvn 0.4429 0.0429 -0.8955\nvn 0.4476 0.0552 -0.8925\nvn 0.1904 -0.2470 -0.9501\nvn 0.3237 0.0384 -0.9454\nvn 0.0547 -0.0586 -0.9968\nvn 0.0670 -0.0933 -0.9934\nvn 0.4350 0.1228 -0.8920\nvn 0.1996 0.1489 -0.9685\nvn 0.1933 0.1206 -0.9737\nvn 0.0579 0.2539 -0.9655\nvn 0.1880 -0.0767 -0.9792\nvn 0.3139 0.0607 -0.9475\nvn 0.0601 0.0611 -0.9963\nvn 0.2052 0.0666 -0.9765\nvn 0.1934 0.0410 -0.9803\nvn 1.0000 -0.0000 -0.0005\nvn 1.0000 0.0015 -0.0036\nvn 0.0000 1.0000 -0.0000\nvn 1.0000 -0.0035 -0.0025\nvn 1.0000 -0.0003 -0.0008\nvn 0.0000 -1.0000 -0.0001\nvn 0.9999 -0.0032 -0.0149\nvn 0.9999 0.0038 -0.0126\nvn 0.0005 1.0000 -0.0049\nvn -0.0000 1.0000 -0.0006\nvn -1.0000 -0.0000 -0.0004\nvn 0.0000 -1.0000 -0.0002\nvn 0.0072 -0.9996 -0.0277\nvn -0.0000 -1.0000 -0.0003\nvn 0.1924 0.2404 -0.9514\nvn 0.4503 0.1736 -0.8759\nvn 0.3224 0.2004 -0.9252\nvn 0.0721 0.0913 -0.9932\nvn 0.0703 0.0798 -0.9943\nvn -1.0000 -0.0004 -0.0020\nvn -1.0000 -0.0028 -0.0083\nvn 0.0575 0.2532 -0.9657\nvn 0.1898 0.2491 -0.9497\nvn 0.4362 0.2037 -0.8765\nvn 0.3147 0.2260 -0.9219\nusemtl Default_OBJ.002\ns off\nf 735//1394 738//1394 739//1394\nf 735//1395 741//1395 742//1395\nf 735//1396 742//1396 743//1396\nf 735//1397 746//1397 736//1397\nf 736//1398 746//1398 747//1398\nf 736//1399 750//1399 751//1399\nf 746//1400 745//1400 752//1400\nf 746//1401 752//1401 753//1401\nf 746//1402 753//1402 754//1402\nf 746//1403 748//1403 747//1403\nf 741//1404 740//1404 742//1404\nf 751//1405 750//1405 757//1405\nf 757//1406 750//1406 759//1406\nf 748//1407 756//1407 760//1407\nf 748//1408 760//1408 749//1408\nf 740//1409 762//1409 742//1409\nf 759//1410 737//1410 757//1410\nf 759//1411 761//1411 737//1411\nf 756//1412 755//1412 764//1412\nf 760//1413 756//1413 764//1413\nf 762//1414 765//1414 742//1414\nf 742//1415 765//1415 743//1415\nf 758//1416 766//1416 752//1416\nf 744//1417 743//1417 765//1417\nf 737//1418 761//1418 738//1418\nf 750//1419 768//1419 759//1419\nf 759//1420 768//1420 769//1420\nf 759//1421 769//1421 763//1421\nf 761//1422 759//1422 763//1422\nf 761//1423 763//1423 773//1423\nf 761//1424 773//1424 770//1424\nf 755//1425 771//1425 764//1425\nf 760//1426 764//1426 769//1426\nf 760//1427 768//1427 749//1427\nf 752//1428 766//1428 753//1428\nf 758//1429 767//1429 766//1429\nf 761//1430 770//1430 738//1430\nf 769//1431 764//1431 763//1431\nf 763//1432 771//1432 773//1432\nf 760//1433 769//1433 768//1433\nf 772//1434 776//1434 774//1434\nf 772//1435 774//1435 767//1435\nf 738//1436 770//1436 776//1436\nf 738//1437 776//1437 739//1437\nf 763//1438 764//1438 771//1438\nf 773//1439 776//1439 770//1439\nf 755//1440 754//1440 777//1440\nf 755//1441 777//1441 771//1441\nf 772//1442 739//1442 776//1442\nf 766//1443 767//1443 774//1443\nf 766//1444 774//1444 775//1444\nf 745//1445 758//1445 752//1445\nf 773//1446 771//1446 777//1446\nf 773//1447 774//1447 776//1447\nf 754//1448 753//1448 777//1448\nf 775//1449 774//1449 773//1449\nf 777//1450 775//1450 773//1450\nf 736//1451 738//1451 735//1451\nf 739//1452 741//1452 735//1452\nf 743//1453 746//1453 735//1453\nf 751//1454 757//1454 736//1454\nf 757//1455 738//1455 736//1455\nf 747//1456 750//1456 736//1456\nf 757//1457 737//1457 738//1457\nf 740//1458 741//1458 739//1458\nf 744//1459 745//1459 743//1459\nf 745//1460 746//1460 743//1460\nf 754//1461 748//1461 746//1461\nf 747//1462 749//1462 750//1462\nf 749//1463 768//1463 750//1463\nf 748//1464 749//1464 747//1464\nf 758//1465 765//1465 767//1465\nf 772//1466 740//1466 739//1466\nf 767//1467 762//1467 772//1467\nf 766//1468 775//1468 753//1468\nf 775//1469 777//1469 753//1469\nf 755//1470 748//1470 754//1470\nf 755//1471 756//1471 748//1471\nf 745//1472 744//1472 758//1472\nf 758//1473 744//1473 765//1473\nf 772//1474 762//1474 740//1474\nf 767//1475 765//1475 762//1475\no geometry_14.002\nv 62.690701 27.859131 -0.001719\nv 59.946011 27.916859 -0.007793\nv 57.059044 27.916859 7.607265\nv 62.154015 27.826504 4.154932\nv 54.065414 18.287376 0.002337\nv 48.420788 15.852399 -0.006677\nv 44.912956 15.914560 -0.017163\nv 45.821842 19.241026 7.607198\nv 44.253475 15.852166 7.607264\nv 46.849903 15.845916 7.597104\nv 57.474239 23.029640 7.433867\nv 60.657967 27.834696 7.577897\nv 58.214340 21.447577 0.114334\nv 53.660824 20.033945 7.523949\nv 54.109051 18.705498 3.707076\nvn 0.0210 0.9997 0.0080\nvn 0.0229 0.9997 0.0094\nvn 0.0332 0.9994 0.0121\nvn 0.0865 -0.0784 -0.9932\nvn 0.0022 -0.0019 -1.0000\nvn -0.6028 0.7552 -0.2576\nvn -0.5953 0.7711 -0.2257\nvn -0.0000 0.0000 1.0000\nvn 0.0039 -0.0041 1.0000\nvn 0.7675 -0.6062 0.2086\nvn 0.8166 -0.5683 0.1010\nvn 0.7787 -0.5262 0.3416\nvn -0.9050 0.4188 -0.0748\nvn -0.0177 -0.9998 -0.0045\nvn 0.6681 -0.7105 0.2211\nvn 0.4958 -0.8005 0.3368\nvn 0.5887 -0.7395 0.3265\nvn 0.6025 -0.7939 0.0825\nvn 0.3947 -0.9153 0.0808\nvn 0.4096 -0.9070 0.0975\nvn 0.0080 -0.0076 0.9999\nvn 0.0029 -0.0031 -1.0000\nvn 0.0334 -0.0369 0.9988\nvn 0.0975 -0.0943 0.9908\nvn -0.0024 -1.0000 -0.0084\nusemtl Default_OBJ.002\ns off\nf 778//1476 779//1476 780//1476\nf 778//1477 780//1477 789//1477\nf 778//1478 789//1478 781//1478\nf 778//1479 790//1479 782//1479\nf 778//1480 784//1480 779//1480\nf 779//1481 784//1481 785//1481\nf 779//1482 785//1482 780//1482\nf 780//1483 785//1483 786//1483\nf 780//1484 786//1484 787//1484\nf 781//1485 788//1485 790//1485\nf 781//1486 790//1486 778//1486\nf 781//1487 789//1487 788//1487\nf 784//1488 786//1488 785//1488\nf 787//1489 784//1489 783//1489\nf 790//1490 788//1490 792//1490\nf 787//1491 792//1491 791//1491\nf 788//1492 791//1492 792//1492\nf 792//1493 782//1493 790//1493\nf 783//1494 782//1494 787//1494\nf 787//1495 782//1495 792//1495\nf 787//1496 789//1496 780//1496\nf 782//1497 784//1497 778//1497\nf 782//1497 783//1497 784//1497\nf 787//1498 791//1498 789//1498\nf 791//1499 788//1499 789//1499\nf 787//1500 786//1500 784//1500\no geometry_15.002\nv 65.404381 51.228897 -5.954454\nv 69.395592 51.228550 -4.785595\nv 71.982712 51.229832 0.224565\nv 68.874352 51.225708 5.263247\nv 60.686264 51.226093 4.185338\nv 59.329357 51.229736 0.453051\nv 60.223293 51.229897 -3.384144\nv 62.526184 51.256996 -5.529314\nv 71.439949 57.472141 -5.345934\nv 78.632004 59.185719 -4.198786\nv 69.232742 58.953300 -4.099025\nv 82.334579 58.928532 -1.938592\nv 81.865623 59.948559 0.004756\nv 61.123264 53.094307 -3.347212\nv 65.093300 56.738052 -3.861511\nv 66.871567 59.218052 -2.269939\nv 65.387878 58.832779 0.723020\nv 62.681744 56.389286 -1.621376\nv 82.299217 58.929932 1.966454\nv 68.306313 59.018559 3.766285\nv 78.681824 59.177277 4.201086\nv 60.931309 54.390751 0.880638\nv 63.252823 56.547752 2.254634\nv 71.426422 57.500385 5.334116\nv 63.720596 55.661045 3.843276\nv 62.970734 51.246052 5.694048\nvn -0.0138 -0.9995 -0.0275\nvn -0.1400 0.2293 -0.9632\nvn -0.0237 0.6229 -0.7819\nvn 0.4408 -0.4546 -0.7739\nvn 0.2967 0.8732 -0.3867\nvn -0.5170 0.4615 -0.7209\nvn -0.0262 0.9840 -0.1763\nvn -0.0237 0.9867 -0.1609\nvn -0.6465 0.3257 -0.6899\nvn 0.5357 -0.7979 -0.2764\nvn -0.5999 0.5751 -0.5563\nvn -0.5417 0.6934 -0.4752\nvn -0.3995 0.6806 -0.6142\nvn 0.5975 -0.8018 0.0057\nvn 0.9143 0.4049 0.0081\nvn -0.1291 0.9896 0.0634\nvn -0.0556 0.9974 0.0462\nvn -0.0220 0.9861 0.1646\nvn 0.2987 0.8724 0.3870\nvn -0.5694 0.8023 -0.1790\nvn -0.8446 0.4999 -0.1916\nvn -0.8799 0.4288 -0.2050\nvn -0.8670 0.4640 -0.1816\nvn 0.5295 -0.7832 0.3260\nvn -0.0412 0.6756 0.7361\nvn -0.7027 0.7076 0.0736\nvn 0.4474 -0.4484 0.7738\nvn -0.4971 0.7532 0.4307\nvn -0.4951 0.6884 0.5300\nvn -0.7025 0.7075 0.0763\nvn 0.1720 -0.0811 0.9817\nvn 0.0726 -0.0408 0.9965\nvn -0.8633 0.3950 0.3142\nvn -0.0000 -1.0000 -0.0003\nvn -0.5063 0.4051 0.7613\nvn -0.0004 -1.0000 -0.0005\nvn 0.1739 -0.0724 -0.9821\nvn 0.2723 -0.2475 -0.9298\nvn -0.0016 -1.0000 -0.0004\nvn -0.0022 -0.9999 0.0166\nvn -0.6993 0.5165 0.4942\nvn -0.7372 0.5145 0.4380\nvn -0.2596 0.3904 -0.8833\nvn -0.2474 0.3812 -0.8908\nvn 0.0009 -1.0000 -0.0002\nvn -0.2530 0.3930 0.8841\nvn -0.2867 0.4114 0.8652\nusemtl Default_OBJ.002\ns off\nf 793//1501 799//1501 800//1501\nf 800//1502 801//1502 793//1502\nf 801//1503 803//1503 802//1503\nf 794//1504 802//1504 804//1504\nf 802//1505 805//1505 804//1505\nf 800//1506 806//1506 807//1506\nf 803//1507 808//1507 802//1507\nf 802//1508 808//1508 805//1508\nf 800//1509 799//1509 806//1509\nf 804//1510 795//1510 794//1510\nf 807//1511 806//1511 810//1511\nf 807//1512 810//1512 808//1512\nf 807//1513 808//1513 803//1513\nf 804//1514 811//1514 795//1514\nf 805//1515 811//1515 804//1515\nf 808//1516 809//1516 812//1516\nf 808//1517 812//1517 805//1517\nf 805//1518 812//1518 813//1518\nf 805//1519 813//1519 811//1519\nf 808//1520 810//1520 809//1520\nf 806//1521 814//1521 810//1521\nf 799//1522 798//1522 806//1522\nf 806//1523 798//1523 814//1523\nf 811//1524 796//1524 795//1524\nf 812//1525 816//1525 813//1525\nf 810//1526 814//1526 809//1526\nf 811//1527 813//1527 796//1527\nf 809//1528 815//1528 812//1528\nf 812//1529 815//1529 817//1529\nf 814//1530 815//1530 809//1530\nf 813//1531 816//1531 796//1531\nf 816//1532 818//1532 796//1532\nf 798//1533 797//1533 814//1533\nf 796//1534 793//1534 794//1534\nf 818//1535 817//1535 797//1535\nf 797//1536 799//1536 793//1536\nf 801//1537 802//1537 793//1537\nf 802//1538 794//1538 793//1538\nf 798//1539 799//1539 797//1539\nf 796//1540 818//1540 797//1540\nf 817//1541 815//1541 797//1541\nf 815//1542 814//1542 797//1542\nf 807//1543 803//1543 800//1543\nf 803//1544 801//1544 800//1544\nf 795//1545 796//1545 794//1545\nf 816//1546 812//1546 818//1546\nf 812//1547 817//1547 818//1547\nf 796//1534 797//1534 793//1534\no geometry_16.002\nv -17.241714 15.869932 -44.338554\nv -12.735866 15.864509 -45.801132\nv -6.393898 15.863967 -47.024761\nv -0.427885 15.875939 -47.483688\nv -0.426442 15.864430 -44.910683\nv -17.242319 15.864430 -41.575710\nv -17.242319 34.121754 -40.690704\nv -17.242281 34.117729 -43.260616\nv -17.242388 30.673731 -44.244678\nv -17.242258 26.930696 -45.039570\nv -17.242481 21.310463 -45.482922\nv -12.528967 16.835463 -46.239254\nv -0.428505 19.461002 -48.441761\nv -0.427753 23.046112 -48.564381\nv -0.426568 28.419544 -47.925930\nv -0.426773 34.120255 -46.492104\nv -0.426442 34.121758 -44.087345\nv -6.415457 34.119682 -46.095016\nv -13.410405 19.482668 -46.638184\nv -6.501784 17.788307 -47.677902\nv -6.717462 20.000168 -48.056976\nv -12.861154 34.118893 -44.778767\nv -12.993281 23.606276 -46.854588\nv -6.780746 22.450779 -48.135044\nv -12.738199 30.647837 -45.777172\nv -12.920697 27.838238 -46.339260\nv -6.838276 25.391607 -47.907486\nv -6.607431 29.143808 -47.349926\nvn -0.2906 -0.3414 -0.8939\nvn 0.1943 -0.0475 0.9798\nvn 0.1978 -0.0442 0.9792\nvn -0.0001 1.0000 -0.0006\nvn -0.0008 1.0000 -0.0016\nvn -0.3192 -0.2443 -0.9156\nvn -0.1758 -0.3735 -0.9108\nvn -0.1706 -0.3253 -0.9301\nvn -0.3659 -0.1916 -0.9107\nvn -0.0719 -0.3242 -0.9433\nvn -0.3162 0.2607 -0.9122\nvn -0.2973 -0.0200 -0.9546\nvn -0.2072 -0.0304 -0.9778\nvn -0.2045 -0.0364 -0.9782\nvn -0.0751 -0.1756 -0.9816\nvn -0.0503 -0.2579 -0.9649\nvn -0.3104 0.2526 -0.9164\nvn -0.3423 0.0739 -0.9367\nvn -0.1885 0.0721 -0.9794\nvn -0.0643 -0.0334 -0.9974\nvn -0.0639 -0.0341 -0.9974\nvn -0.1930 0.2649 -0.9448\nvn -0.1835 0.2470 -0.9515\nvn -0.1958 0.2046 -0.9591\nvn -0.0743 0.0755 -0.9944\nvn -0.0617 0.2435 -0.9679\nvn -0.3090 0.1202 -0.9434\nvn -0.2016 0.1218 -0.9719\nvn -0.0585 0.1178 -0.9913\nvn -0.1875 0.1556 -0.9699\nvn -0.0742 0.1510 -0.9857\nvn -1.0000 -0.0002 -0.0002\nvn -1.0000 -0.0000 0.0000\nvn -1.0000 -0.0000 0.0001\nvn -1.0000 0.0001 -0.0006\nvn -0.0019 -1.0000 -0.0020\nvn -0.0001 -1.0000 -0.0001\nvn 0.0000 -1.0000 0.0001\nvn -0.0002 1.0000 -0.0010\nvn -0.1875 -0.2071 -0.9602\nvn 0.0017 -1.0000 -0.0045\nvn 1.0000 -0.0001 -0.0006\nvn 1.0000 0.0000 -0.0003\nvn 1.0000 -0.0003 0.0004\nvn 1.0000 0.0001 -0.0001\nvn -0.0001 1.0000 0.0002\nvn -0.3141 0.2058 -0.9268\nvn 1.0000 -0.0003 -0.0016\nvn -0.0641 0.2464 -0.9671\nvn -0.2005 -0.1845 -0.9622\nvn -0.3200 0.1968 -0.9267\nusemtl Default_OBJ.002\ns off\nf 820//1548 819//1548 830//1548\nf 824//1549 823//1549 825//1549\nf 823//1550 835//1550 825//1550\nf 825//1551 835//1551 834//1551\nf 825//1552 840//1552 826//1552\nf 830//1553 819//1553 837//1553\nf 830//1554 821//1554 820//1554\nf 830//1555 838//1555 821//1555\nf 837//1556 819//1556 829//1556\nf 821//1557 838//1557 822//1557\nf 826//1558 840//1558 827//1558\nf 837//1559 829//1559 841//1559\nf 837//1560 841//1560 842//1560\nf 837//1561 842//1561 839//1561\nf 838//1562 839//1562 831//1562\nf 838//1563 831//1563 822//1563\nf 840//1564 843//1564 827//1564\nf 829//1565 828//1565 841//1565\nf 841//1566 845//1566 842//1566\nf 839//1567 842//1567 832//1567\nf 839//1568 832//1568 831//1568\nf 843//1569 840//1569 836//1569\nf 843//1570 836//1570 846//1570\nf 843//1571 846//1571 844//1571\nf 842//1572 845//1572 832//1572\nf 846//1573 834//1573 833//1573\nf 828//1574 844//1574 841//1574\nf 841//1575 844//1575 845//1575\nf 845//1576 833//1576 832//1576\nf 844//1577 846//1577 845//1577\nf 845//1578 846//1578 833//1578\nf 819//1579 824//1579 829//1579\nf 824//1580 825//1580 829//1580\nf 825//1580 826//1580 829//1580\nf 826//1581 827//1581 829//1581\nf 827//1582 828//1582 829//1582\nf 820//1583 824//1583 819//1583\nf 820//1584 821//1584 824//1584\nf 821//1585 823//1585 824//1585\nf 834//1586 840//1586 825//1586\nf 839//1587 830//1587 837//1587\nf 822//1588 823//1588 821//1588\nf 822//1589 832//1589 823//1589\nf 832//1590 835//1590 823//1590\nf 832//1591 833//1591 835//1591\nf 833//1592 834//1592 835//1592\nf 836//1593 840//1593 834//1593\nf 844//1594 827//1594 843//1594\nf 832//1595 822//1595 831//1595\nf 846//1596 836//1596 834//1596\nf 839//1597 838//1597 830//1597\nf 844//1598 828//1598 827//1598\no geometry_17.002\nv 35.685886 34.121307 30.021389\nv 32.491982 34.121754 30.021505\nv 33.579411 15.852165 30.021503\nv 37.012070 15.857682 30.016047\nv 38.208321 18.976978 30.008825\nv 38.469776 21.508024 30.013317\nv 38.346184 24.215986 30.010525\nv 37.303791 29.477093 30.020109\nv 37.246456 34.117252 28.155296\nv 40.251778 34.112648 23.663685\nv 42.801678 34.120026 18.501757\nv 44.726753 34.121193 12.887219\nv 42.221752 34.121754 12.886705\nv 43.060871 15.852165 12.886704\nv 46.921261 26.852627 12.882596\nv 47.043335 21.758625 12.886200\nv 46.487396 18.025803 12.889332\nv 45.707603 15.851156 12.887962\nv 43.956379 15.861090 18.263298\nv 41.043308 15.878481 24.278471\nv 38.608879 16.454851 28.263998\nv 38.513092 28.430817 28.790668\nv 43.726818 29.684299 19.216879\nv 41.522774 27.968925 24.437843\nv 44.187057 25.989336 19.756466\nv 41.876606 18.781347 24.453270\nv 44.755390 21.790207 19.280272\nv 44.619637 18.844479 18.938837\nv 42.145580 22.300270 24.560900\nvn -0.8689 -0.0399 -0.4934\nvn -0.8738 -0.0520 -0.4835\nvn 0.0002 0.0007 -1.0000\nvn 0.7414 0.2581 0.6194\nvn 0.9096 0.2744 0.3119\nvn 0.7861 0.2388 0.5700\nvn 0.9053 0.2448 0.3471\nvn 0.8997 -0.3228 0.2937\nvn 0.7305 -0.4523 0.5116\nvn 0.7546 -0.2880 0.5896\nvn 0.8069 0.2400 0.5397\nvn 0.8109 0.2353 0.5357\nvn 0.9084 0.1690 0.3825\nvn 0.9225 0.0821 0.3772\nvn 0.9413 0.0228 0.3367\nvn 0.9079 -0.2737 0.3174\nvn 0.8620 -0.2864 0.4183\nvn 0.8625 -0.2732 0.4259\nvn 0.8049 -0.2458 0.5401\nvn 0.8059 -0.2633 0.5303\nvn 0.8655 0.2348 0.4425\nvn 0.8679 0.2502 0.4291\nvn 0.7658 0.1506 0.6251\nvn 0.8857 0.1732 0.4308\nvn 0.8221 0.1280 0.5548\nvn 0.8829 0.1069 0.4573\nvn 0.8969 0.0719 0.4363\nvn 0.9406 -0.1398 0.3093\nvn 0.8260 0.0383 0.5624\nvn 0.8326 0.1033 0.5442\nvn 0.8919 -0.0924 0.4426\nvn 0.9382 -0.0822 0.3361\nvn 0.0000 -0.0003 1.0000\nvn 0.0001 1.0000 -0.0000\nvn 0.0005 1.0000 0.0003\nvn 0.0003 0.0000 1.0000\nvn 0.0016 -0.0003 1.0000\nvn 0.0033 -0.0004 1.0000\nvn 0.0187 0.0019 0.9998\nvn 0.0094 0.9999 0.0057\nvn 0.0002 1.0000 0.0003\nvn 0.0140 0.9999 0.0083\nvn -0.0009 -0.0000 -1.0000\nvn 0.0005 -0.0005 -1.0000\nvn 0.0081 -1.0000 0.0045\nvn 0.0298 -0.9994 0.0173\nvn 0.0146 -0.0033 0.9999\nvn -0.0004 -1.0000 0.0002\nvn 0.0016 -0.0007 -1.0000\nvn 0.0070 -0.0019 -1.0000\nvn 0.8299 -0.0867 0.5511\nvn 0.8903 -0.0818 0.4479\nvn 0.0016 -1.0000 0.0009\nvn 0.8319 -0.0804 0.5491\nusemtl Default_OBJ.002\ns off\nf 848//1599 859//1599 860//1599\nf 848//1600 860//1600 849//1600\nf 859//1601 858//1601 861//1601\nf 847//1602 854//1602 855//1602\nf 858//1603 857//1603 861//1603\nf 854//1604 868//1604 855//1604\nf 861//1605 857//1605 869//1605\nf 864//1606 863//1606 865//1606\nf 867//1607 850//1607 866//1607\nf 867//1608 851//1608 850//1608\nf 868//1609 856//1609 855//1609\nf 868//1610 870//1610 856//1610\nf 861//1611 869//1611 871//1611\nf 861//1612 871//1612 873//1612\nf 861//1613 873//1613 862//1613\nf 863//1614 874//1614 865//1614\nf 865//1615 874//1615 866//1615\nf 866//1616 874//1616 872//1616\nf 872//1617 851//1617 867//1617\nf 872//1618 867//1618 866//1618\nf 870//1619 869//1619 856//1619\nf 857//1620 856//1620 869//1620\nf 868//1621 854//1621 853//1621\nf 870//1622 871//1622 869//1622\nf 853//1623 870//1623 868//1623\nf 870//1624 875//1624 871//1624\nf 871//1625 875//1625 873//1625\nf 863//1626 862//1626 874//1626\nf 852//1627 875//1627 853//1627\nf 853//1628 875//1628 870//1628\nf 873//1629 872//1629 874//1629\nf 873//1630 874//1630 862//1630\nf 854//1631 847//1631 848//1631\nf 847//1632 857//1632 848//1632\nf 857//1633 859//1633 848//1633\nf 849//1634 854//1634 848//1634\nf 849//1635 850//1635 854//1635\nf 850//1636 852//1636 854//1636\nf 852//1637 853//1637 854//1637\nf 855//1638 857//1638 847//1638\nf 858//1639 859//1639 857//1639\nf 855//1640 856//1640 857//1640\nf 861//1641 860//1641 859//1641\nf 861//1642 864//1642 860//1642\nf 864//1643 865//1643 850//1643\nf 865//1644 866//1644 850//1644\nf 851//1645 852//1645 850//1645\nf 850//1646 860//1646 864//1646\nf 862//1647 864//1647 861//1647\nf 862//1648 863//1648 864//1648\nf 872//1649 852//1649 851//1649\nf 873//1650 875//1650 872//1650\nf 850//1651 849//1651 860//1651\nf 872//1652 875//1652 852//1652\no geometry_18.002\nv -0.426442 3.341588 -33.363407\nv -20.478924 3.341588 -26.474871\nv -20.478924 3.341588 -30.538656\nv -16.507778 3.341635 -32.977642\nv -7.274176 3.341309 -36.171070\nv -0.426684 3.341589 -36.684319\nv -0.427122 9.588500 -43.265366\nv -0.426718 12.969300 -45.969559\nv -0.427684 15.863258 -47.442467\nv -0.426442 15.863206 -44.910629\nv -20.478924 15.863206 -40.069370\nv -20.479261 15.849592 -42.898548\nv -20.481365 10.769305 -39.496399\nv -6.359950 15.862103 -47.032825\nv -12.571906 15.863154 -45.833263\nv -18.450901 15.859417 -43.854477\nv -16.955011 9.532583 -39.881836\nv -6.135913 9.968772 -43.232891\nv -6.228045 13.221539 -45.757153\nv -18.155470 12.624867 -42.131451\nv -11.503810 9.572533 -41.778725\nv -12.645836 13.957028 -44.876663\nv -12.429164 12.029798 -43.638844\nvn 0.0000 -1.0000 -0.0000\nvn 1.0000 -0.0000 -0.0001\nvn 0.2448 0.6573 0.7128\nvn 0.1614 0.7259 0.6686\nvn -1.0000 -0.0003 0.0000\nvn -0.3649 -0.7167 -0.5942\nvn -0.0515 -0.7243 -0.6875\nvn -0.3189 -0.7158 -0.6212\nvn -0.0521 -0.7240 -0.6879\nvn -0.0523 -0.4530 -0.8900\nvn -0.0619 -0.4367 -0.8975\nvn -0.3762 -0.4621 -0.8030\nvn -0.2224 -0.7330 -0.6429\nvn -0.4455 -0.4980 -0.7440\nvn -0.2892 -0.4204 -0.8600\nvn -0.0460 -0.6240 -0.7801\nvn -0.1707 -0.4355 -0.8838\nvn -0.2196 -0.7307 -0.6464\nvn -0.3004 -0.6346 -0.7120\nvn -0.3001 -0.4697 -0.8303\nvn -0.1343 -0.7117 -0.6896\nvn -0.0555 -0.6131 -0.7880\nvn -0.1712 -0.4366 -0.8832\nvn -0.2581 -0.6319 -0.7309\nvn -0.2477 -0.6423 -0.7253\nvn -0.1491 -0.6089 -0.7791\nvn -0.1585 -0.6332 -0.7576\nvn -0.1750 -0.5459 -0.8194\nvn -0.2662 -0.5419 -0.7972\nvn 0.0000 -1.0000 0.0001\nvn 1.0000 -0.0002 -0.0002\nvn -1.0000 0.0005 0.0005\nvn -0.0001 -1.0000 -0.0002\nvn 1.0000 -0.0001 0.0000\nvn 1.0000 0.0001 -0.0005\nvn 0.0000 1.0000 0.0000\nvn -0.0012 1.0000 -0.0016\nvn -0.0071 1.0000 -0.0048\nvn -1.0000 0.0005 0.0001\nvn -0.0004 1.0000 -0.0029\nusemtl Default_OBJ.002\ns off\nf 876//1653 880//1653 881//1653\nf 876//1654 881//1654 882//1654\nf 876//1655 885//1655 877//1655\nf 877//1656 885//1656 886//1656\nf 877//1657 888//1657 878//1657\nf 878//1658 888//1658 879//1658\nf 881//1659 880//1659 882//1659\nf 879//1660 888//1660 892//1660\nf 882//1661 880//1661 893//1661\nf 884//1662 883//1662 894//1662\nf 884//1663 894//1663 889//1663\nf 887//1664 891//1664 895//1664\nf 879//1665 892//1665 880//1665\nf 895//1666 888//1666 887//1666\nf 891//1667 890//1667 897//1667\nf 882//1668 893//1668 883//1668\nf 889//1669 894//1669 890//1669\nf 880//1670 892//1670 896//1670\nf 892//1671 888//1671 895//1671\nf 895//1672 891//1672 897//1672\nf 893//1673 880//1673 896//1673\nf 893//1674 894//1674 883//1674\nf 894//1675 897//1675 890//1675\nf 892//1676 895//1676 898//1676\nf 892//1677 898//1677 896//1677\nf 894//1678 893//1678 898//1678\nf 896//1679 898//1679 893//1679\nf 894//1680 898//1680 897//1680\nf 895//1681 897//1681 898//1681\nf 877//1682 880//1682 876//1682\nf 882//1683 885//1683 876//1683\nf 878//1653 880//1653 877//1653\nf 886//1684 888//1684 877//1684\nf 878//1685 879//1685 880//1685\nf 883//1686 885//1686 882//1686\nf 883//1687 884//1687 885//1687\nf 884//1688 886//1688 885//1688\nf 884//1688 890//1688 886//1688\nf 890//1689 891//1689 886//1689\nf 891//1690 887//1690 886//1690\nf 887//1691 888//1691 886//1691\nf 889//1692 890//1692 884//1692\no geometry_19.002\nv 35.679310 34.121288 30.021505\nv 37.148247 29.903906 30.021322\nv 38.163055 25.441786 30.021883\nv 38.435379 21.542187 30.022501\nv 38.127987 18.869892 30.023510\nv 36.983032 15.868083 30.021069\nv 33.578522 15.852165 30.021505\nv 32.490479 34.121754 30.021507\nv 18.245199 34.121754 40.237530\nv 18.265020 34.120731 42.898903\nv 23.841503 34.120991 40.113415\nv 28.337404 34.118649 37.125729\nv 33.038631 34.121353 32.987785\nv 33.696926 15.851473 33.672905\nv 29.231966 15.866707 37.669453\nv 24.079937 15.871471 41.148293\nv 18.248434 15.850865 43.901901\nv 18.245199 15.852164 41.147854\nv 18.243919 18.695463 44.852306\nv 18.247318 22.402229 45.156651\nv 18.246000 27.388449 44.598568\nv 33.511673 31.517483 33.562366\nv 34.069164 17.712521 34.176994\nv 19.366392 16.379889 43.690151\nv 18.251080 30.423479 43.986534\nv 34.638859 27.683344 33.549892\nv 24.176481 30.304752 41.110027\nv 33.478069 27.294489 34.782593\nv 29.345818 29.858942 37.738098\nv 34.416412 20.258139 34.486801\nv 20.519724 18.868828 43.866924\nv 29.491592 27.541622 38.194324\nv 29.715324 18.928961 38.421360\nv 24.665789 18.854136 41.778721\nv 19.561512 25.197062 44.398933\nv 24.502102 26.528046 41.724091\nv 34.472221 23.092194 34.511864\nv 19.273724 21.522137 44.740097\nv 29.704998 24.595137 38.544872\nv 29.802803 21.487015 38.630177\nv 24.652800 21.468012 42.065945\nv 24.570688 24.188774 41.989887\nvn -0.5824 -0.0347 -0.8121\nvn 0.0047 -1.0000 -0.0003\nvn -0.0003 -1.0000 -0.0005\nvn -0.5868 -0.0403 -0.8087\nvn -1.0000 0.0025 0.0040\nvn -1.0000 0.0060 0.0074\nvn 0.7188 0.2718 0.6399\nvn 0.6352 0.2747 0.7219\nvn 0.7303 0.2543 0.6341\nvn 0.7067 -0.3132 0.6345\nvn 0.3129 -0.3005 0.9010\nvn 0.4311 0.2632 0.8631\nvn 0.7284 0.2120 0.6515\nvn 0.7247 -0.2769 0.6310\nvn 0.3765 -0.4779 0.7937\nvn 0.4265 0.2538 0.8681\nvn 0.6816 0.1981 0.7044\nvn 0.6321 0.2548 0.7318\nvn 0.6318 -0.3179 0.7070\nvn 0.4008 -0.2483 0.8819\nvn 0.5445 0.2443 0.8024\nvn 0.7526 -0.0863 0.6527\nvn 0.7281 -0.1798 0.6614\nvn 0.6297 -0.2775 0.7255\nvn 0.7492 0.1705 0.6401\nvn 0.5350 0.2571 0.8048\nvn 0.7460 -0.0206 0.6656\nvn 0.6607 -0.1789 0.7290\nvn 0.7576 0.0530 0.6505\nvn 0.6534 -0.0838 0.7524\nvn 0.4020 -0.1104 0.9090\nvn 0.3168 -0.0779 0.9453\nvn 0.3187 0.1055 0.9420\nvn 0.6618 0.1088 0.7417\nvn 0.7033 0.1212 0.7005\nvn 0.6490 0.1361 0.7485\nvn 0.5476 0.1947 0.8138\nvn 0.5434 0.1802 0.8199\nvn 0.7379 0.1127 0.6655\nvn 0.6651 -0.0197 0.7465\nvn 0.5531 -0.0866 0.8286\nvn 0.5524 -0.0883 0.8289\nvn 0.4135 0.0520 0.9090\nvn 0.4491 0.1139 0.8862\nvn 0.5532 0.1378 0.8216\nvn 0.6529 0.0413 0.7563\nvn 0.5545 0.0403 0.8312\nvn 0.4451 0.0384 0.8946\nvn 0.4408 0.0487 0.8963\nvn 0.5477 0.1103 0.8293\nvn 0.0001 1.0000 0.0001\nvn 0.4311 0.1809 0.8840\nvn 0.0001 1.0000 0.0002\nvn 0.0039 1.0000 0.0051\nvn -0.0001 0.0000 -1.0000\nvn 0.0006 0.0000 -1.0000\nvn 0.0013 -0.0001 -1.0000\nvn 0.0045 -0.0009 -1.0000\nvn -0.0001 -1.0000 -0.0002\nvn -1.0000 -0.0000 -0.0003\nvn -1.0000 0.0003 0.0006\nvn 0.0001 1.0000 0.0004\nvn 0.4475 -0.0955 0.8892\nvn 0.0098 -0.9998 0.0148\nvn -1.0000 -0.0020 0.0012\nvn 0.0139 -0.9997 0.0219\nvn -1.0000 0.0004 0.0061\nvn 0.4310 0.1781 0.8846\nvn 0.4327 -0.2670 0.8611\nvn 0.6455 0.1864 0.7407\nvn 0.5380 -0.2742 0.7971\nvn 0.5544 0.0400 0.8313\nvn 0.4327 0.1775 0.8839\nvn 0.4428 -0.0858 0.8925\nvn 0.4358 -0.2631 0.8607\nvn -0.0000 0.0000 -1.0000\nvn 0.6506 0.2060 0.7309\nvn 0.5344 -0.2802 0.7975\nusemtl Default_OBJ.002\ns off\nf 906//1693 905//1693 907//1693\nf 905//1694 904//1694 912//1694\nf 905//1695 915//1695 916//1695\nf 905//1696 916//1696 907//1696\nf 907//1697 919//1697 923//1697\nf 907//1698 923//1698 908//1698\nf 911//1699 920//1699 899//1699\nf 911//1700 910//1700 920//1700\nf 920//1701 900//1701 899//1701\nf 904//1702 921//1702 912//1702\nf 915//1703 922//1703 917//1703\nf 908//1704 925//1704 909//1704\nf 920//1705 924//1705 900//1705\nf 904//1706 903//1706 921//1706\nf 922//1707 915//1707 914//1707\nf 908//1708 923//1708 925//1708\nf 920//1709 926//1709 924//1709\nf 910//1710 927//1710 920//1710\nf 921//1711 913//1711 912//1711\nf 922//1712 929//1712 917//1712\nf 910//1713 925//1713 927//1713\nf 903//1714 902//1714 928//1714\nf 928//1715 921//1715 903//1715\nf 921//1716 931//1716 913//1716\nf 900//1717 924//1717 901//1717\nf 910//1718 909//1718 925//1718\nf 902//1719 935//1719 928//1719\nf 921//1720 928//1720 931//1720\nf 902//1721 901//1721 935//1721\nf 928//1722 938//1722 931//1722\nf 917//1723 929//1723 936//1723\nf 936//1724 918//1724 917//1724\nf 919//1725 918//1725 933//1725\nf 926//1726 937//1726 935//1726\nf 926//1727 935//1727 924//1727\nf 926//1728 930//1728 937//1728\nf 925//1729 930//1729 927//1729\nf 930//1730 925//1730 934//1730\nf 924//1731 935//1731 901//1731\nf 928//1732 935//1732 938//1732\nf 938//1733 939//1733 931//1733\nf 931//1734 939//1734 932//1734\nf 936//1735 933//1735 918//1735\nf 933//1736 940//1736 934//1736\nf 934//1737 937//1737 930//1737\nf 938//1738 935//1738 937//1738\nf 940//1739 938//1739 937//1739\nf 936//1740 939//1740 940//1740\nf 936//1741 940//1741 933//1741\nf 934//1742 940//1742 937//1742\nf 911//1743 899//1743 906//1743\nf 925//1744 919//1744 934//1744\nf 907//1745 909//1745 906//1745\nf 909//1743 911//1743 906//1743\nf 909//1746 910//1746 911//1746\nf 900//1747 904//1747 899//1747\nf 900//1748 901//1748 904//1748\nf 901//1749 902//1749 904//1749\nf 902//1750 903//1750 904//1750\nf 912//1751 915//1751 905//1751\nf 916//1752 917//1752 907//1752\nf 917//1753 919//1753 907//1753\nf 908//1754 909//1754 907//1754\nf 939//1755 929//1755 932//1755\nf 913//1756 915//1756 912//1756\nf 917//1757 916//1757 915//1757\nf 913//1758 914//1758 915//1758\nf 918//1759 919//1759 917//1759\nf 933//1760 934//1760 919//1760\nf 929//1761 914//1761 932//1761\nf 905//1747 899//1747 904//1747\nf 926//1762 927//1762 930//1762\nf 913//1763 932//1763 914//1763\nf 940//1764 939//1764 938//1764\nf 925//1765 923//1765 919//1765\nf 939//1766 936//1766 929//1766\nf 929//1767 922//1767 914//1767\nf 905//1768 906//1768 899//1768\nf 926//1769 920//1769 927//1769\nf 913//1770 931//1770 932//1770\no geometry_20.002\nv 46.451202 13.787406 -0.009074\nv 45.684032 13.789190 -9.111456\nv 40.192158 13.786356 -23.572910\nv 36.814880 13.787320 -28.620070\nv 32.959881 13.786347 -32.974377\nv 28.649607 13.775681 -36.809628\nv 26.275974 13.781913 -38.414082\nv 26.275360 13.786214 -35.129688\nv 43.753620 13.787579 -0.007793\nv 31.480822 2.847162 -0.007793\nv 36.411491 2.847162 -0.008016\nv 44.230495 10.608305 -0.008832\nv 26.275135 2.847162 -17.469727\nv 26.277493 2.846416 -25.406607\nv 29.047609 2.847183 -22.174616\nv 32.968872 2.847009 -15.800631\nv 35.982967 2.846747 -6.647724\nv 26.280447 9.932442 -35.048992\nv 45.191105 12.442620 -6.283065\nv 30.826326 9.744675 -30.843498\nv 43.379070 10.112607 -5.910732\nv 34.472004 9.746524 -26.698172\nv 43.902527 12.308744 -12.238666\nv 32.199810 12.043976 -32.157692\nv 42.271667 10.182669 -11.878019\nv 35.942581 12.003049 -27.854385\nv 37.536293 9.669962 -21.969807\nv 40.074284 9.750376 -17.021351\nv 41.937008 12.191128 -17.764669\nv 42.895424 13.785580 -18.105291\nv 39.134914 12.002886 -23.112387\nvn -0.6317 0.7086 0.3143\nvn -0.8702 0.4188 0.2594\nvn -0.0003 -1.0000 0.0001\nvn 0.8191 -0.5722 -0.0419\nvn 0.8763 -0.4761 -0.0739\nvn 0.4575 -0.7166 -0.5265\nvn 0.7832 -0.6188 -0.0610\nvn 0.5270 -0.7126 -0.4632\nvn 0.5307 -0.7153 -0.4547\nvn 0.7777 -0.6093 -0.1546\nvn 0.5099 -0.6358 -0.5795\nvn 0.4525 -0.5866 -0.6717\nvn 0.5138 -0.5984 -0.6148\nvn 0.5828 -0.7134 -0.3892\nvn 0.6372 -0.6440 -0.4234\nvn 0.6393 -0.6372 -0.4304\nvn 0.5606 -0.5392 -0.6285\nvn 0.7010 -0.6996 -0.1383\nvn 0.7286 -0.6346 -0.2579\nvn 0.7466 -0.6155 -0.2525\nvn 0.7979 -0.5378 -0.2723\nvn 0.8460 -0.4643 -0.2621\nvn 0.6315 -0.5374 -0.5589\nvn 0.6299 -0.5453 -0.5531\nvn 0.6970 -0.5421 -0.4693\nvn 0.5892 -0.7221 -0.3625\nvn 0.7687 -0.6218 -0.1500\nvn 0.7012 -0.5368 -0.4693\nvn 0.6883 -0.6394 -0.3426\nvn 0.6335 -0.7074 -0.3134\nvn 0.7518 -0.5425 -0.3748\nvn 0.6941 -0.6337 -0.3414\nvn 0.7572 -0.5352 -0.3745\nvn 0.0005 -0.0003 1.0000\nvn 0.0001 1.0000 0.0002\nvn 0.0000 -0.0001 1.0000\nvn 0.0004 -0.0003 1.0000\nvn -0.0003 1.0000 0.0001\nvn 0.6592 -0.7199 -0.2171\nvn 0.5786 -0.6376 -0.5086\nvn 0.0029 1.0000 -0.0013\nvn 0.0013 1.0000 -0.0007\nvn -0.0001 1.0000 -0.0001\nvn 0.0000 -1.0000 0.0000\nvn -0.0001 -1.0000 0.0001\nvn 0.0001 1.0000 -0.0003\nvn 0.0004 1.0000 -0.0013\nvn -1.0000 -0.0003 -0.0002\nvn -1.0000 -0.0005 -0.0003\nvn -1.0000 -0.0040 -0.0032\nvn 0.0011 -1.0000 -0.0007\nvn 0.0002 -1.0000 -0.0001\nvn 0.0187 0.9995 -0.0238\nvn 0.7024 -0.7104 -0.0453\nvn 0.7714 -0.6177 -0.1530\nvn 0.6597 -0.7182 -0.2215\nvn 0.5787 -0.6369 -0.5094\nvn 0.7039 -0.7091 -0.0420\nusemtl Default_OBJ.002\ns off\nf 949//1771 948//1771 950//1771\nf 950//1772 948//1772 953//1772\nf 950//1773 953//1773 954//1773\nf 941//1774 952//1774 959//1774\nf 959//1775 942//1775 941//1775\nf 954//1776 958//1776 960//1776\nf 952//1777 961//1777 959//1777\nf 954//1778 960//1778 962//1778\nf 954//1779 962//1779 955//1779\nf 959//1780 963//1780 942//1780\nf 958//1781 964//1781 960//1781\nf 947//1782 946//1782 958//1782\nf 958//1783 946//1783 964//1783\nf 962//1784 967//1784 955//1784\nf 962//1785 971//1785 967//1785\nf 962//1786 966//1786 971//1786\nf 946//1787 945//1787 964//1787\nf 961//1788 957//1788 965//1788\nf 965//1789 968//1789 969//1789\nf 963//1790 965//1790 969//1790\nf 963//1791 969//1791 970//1791\nf 963//1792 970//1792 942//1792\nf 964//1793 945//1793 944//1793\nf 964//1794 944//1794 966//1794\nf 966//1795 944//1795 971//1795\nf 967//1796 956//1796 955//1796\nf 965//1797 959//1797 961//1797\nf 944//1798 943//1798 971//1798\nf 967//1799 971//1799 968//1799\nf 967//1800 968//1800 956//1800\nf 971//1801 943//1801 969//1801\nf 969//1802 968//1802 971//1802\nf 970//1803 969//1803 943//1803\nf 949//1804 952//1804 941//1804\nf 942//1805 949//1805 941//1805\nf 950//1806 951//1806 949//1806\nf 951//1807 952//1807 949//1807\nf 942//1808 948//1808 949//1808\nf 956//1809 965//1809 957//1809\nf 960//1810 966//1810 962//1810\nf 970//1811 943//1811 942//1811\nf 943//1812 944//1812 942//1812\nf 944//1813 948//1813 942//1813\nf 954//1814 951//1814 950//1814\nf 954//1815 957//1815 951//1815\nf 944//1816 945//1816 948//1816\nf 945//1817 947//1817 948//1817\nf 947//1818 953//1818 948//1818\nf 947//1819 954//1819 953//1819\nf 947//1820 958//1820 954//1820\nf 955//1821 956//1821 954//1821\nf 956//1822 957//1822 954//1822\nf 946//1823 947//1823 945//1823\nf 961//1824 951//1824 957//1824\nf 965//1825 963//1825 959//1825\nf 956//1826 968//1826 965//1826\nf 960//1827 964//1827 966//1827\nf 961//1828 952//1828 951//1828\no geometry_21.002\nv -38.068794 9.292281 20.211508\nv -32.400906 9.275952 28.589142\nv -26.385529 9.276613 34.106689\nv -19.185379 9.274864 38.649521\nv -8.425583 9.276569 42.210136\nv -0.427237 9.276595 42.942024\nv -0.426442 9.276628 39.631508\nv -13.486092 2.098524 20.289766\nv -29.802240 2.097752 20.319813\nv -0.426442 2.098524 24.281796\nv -0.461940 2.117476 36.087559\nv -11.657727 2.120795 34.218189\nv -19.528770 2.097852 30.428663\nv -25.546597 2.108366 25.626284\nvn -0.0050 1.0000 0.0053\nvn -0.0010 1.0000 0.0020\nvn -0.0007 1.0000 0.0017\nvn -0.0001 1.0000 0.0008\nvn 0.0004 1.0000 0.0000\nvn -0.0018 -0.0172 -0.9999\nvn 0.2139 0.8849 -0.4138\nvn 0.2079 0.7030 -0.6801\nvn 0.0000 -1.0000 -0.0002\nvn -0.0093 -0.9999 0.0094\nvn -0.6028 -0.6865 0.4065\nvn -0.5498 -0.7086 0.4423\nvn -0.4898 -0.6891 0.5341\nvn -0.0660 -0.6899 0.7209\nvn -0.4425 -0.7060 0.5530\nvn -0.1151 -0.7165 0.6881\nvn -0.3883 -0.6861 0.6152\nvn -0.2313 -0.6765 0.6992\nvn -0.3031 -0.7116 0.6339\nvn 0.0000 -1.0000 -0.0000\nvn 1.0000 -0.0077 0.0030\nvn 1.0000 -0.0005 0.0002\nvn 0.0006 -1.0000 0.0016\nvn -0.0020 -0.9999 0.0102\nusemtl Default_OBJ.002\ns off\nf 972//1829 973//1829 974//1829\nf 972//1830 974//1830 975//1830\nf 972//1831 975//1831 976//1831\nf 972//1832 976//1832 977//1832\nf 972//1833 977//1833 978//1833\nf 972//1834 979//1834 980//1834\nf 972//1835 978//1835 981//1835\nf 972//1836 981//1836 979//1836\nf 980//1837 979//1837 981//1837\nf 980//1838 984//1838 985//1838\nf 980//1839 973//1839 972//1839\nf 980//1840 985//1840 973//1840\nf 985//1841 974//1841 973//1841\nf 977//1842 976//1842 982//1842\nf 984//1843 974//1843 985//1843\nf 982//1844 976//1844 983//1844\nf 984//1845 975//1845 974//1845\nf 983//1846 976//1846 975//1846\nf 984//1847 983//1847 975//1847\nf 981//1848 984//1848 980//1848\nf 982//1849 981//1849 977//1849\nf 981//1850 978//1850 977//1850\nf 982//1851 984//1851 981//1851\nf 982//1852 983//1852 984//1852\no geometry_22.002\nv 9.566212 76.361816 -3.448798\nv 9.825579 77.380447 -0.001048\nv 9.803939 75.770927 1.201278\nv 5.542234 68.557121 0.203761\nv 9.258948 78.148888 -1.856289\nv 8.437949 78.152649 4.391130\nv 4.106397 68.553970 3.856833\nv 0.265608 68.555336 5.543643\nv -3.550224 68.554085 4.361355\nv -5.643945 68.553314 0.152069\nv -4.017173 68.554398 -3.909536\nv -0.186521 68.555084 -5.550200\nv 4.092326 68.550369 -4.059578\nv 7.282921 76.534889 -7.207301\nv 6.473866 78.389603 -6.674279\nv 7.108346 79.169983 0.874319\nv 9.250637 76.538002 4.123790\nv 6.398796 79.114403 -3.622295\nv 7.282922 76.534889 7.207306\nv 4.192622 76.493706 -9.221743\nv 5.545828 78.483963 7.105191\nv 0.350663 75.894234 -9.980979\nv 0.046245 77.371063 -9.828700\nv 2.021594 78.186096 -9.180271\nv 1.505078 79.483521 -5.237911\nv 2.201972 79.281433 6.130620\nv 4.198163 76.555405 9.208091\nv 0.969415 79.710403 2.580287\nv 1.610387 78.063393 9.418155\nv 0.254347 75.886436 9.982427\nv -4.107628 78.058640 -8.634007\nv -2.780414 79.086044 -6.993576\nv -3.938359 76.439850 -9.330579\nv -2.780425 79.086044 6.993583\nv -4.107628 78.058640 8.634010\nv -3.778520 76.472687 9.421986\nv -7.207949 76.484940 -7.281655\nv -9.380792 76.494301 -3.872589\nv -7.021544 78.437004 -5.863512\nv -7.208431 76.479797 7.282322\nv -9.992941 76.004189 0.003118\nv -5.415618 79.439026 -1.417035\nv -6.302455 79.143318 3.772604\nv -7.501151 78.182083 5.635442\nv -8.970782 78.258179 -2.448653\nv -9.296639 76.399460 4.032565\nv -9.401473 78.078964 1.631644\nvn 0.9967 -0.0569 -0.0582\nvn 0.8624 -0.4947 -0.1070\nvn 0.9389 0.3045 -0.1606\nvn 0.6858 0.7222 0.0897\nvn 0.7982 -0.5382 -0.2706\nvn 0.7392 -0.4812 -0.4712\nvn 0.4935 0.8674 0.0643\nvn 0.8871 0.4121 0.2078\nvn 0.9818 0.1051 0.1583\nvn 0.7671 0.4624 -0.4447\nvn 0.7603 0.5001 -0.4145\nvn 0.3564 0.9319 -0.0678\nvn 0.4218 0.8844 -0.1997\nvn 0.8065 -0.5163 0.2882\nvn 0.7940 -0.5220 0.3116\nvn 0.7353 -0.4895 0.4687\nvn 0.4831 -0.4814 -0.7313\nvn 0.2699 0.9474 0.1720\nvn 0.7992 0.3177 0.5103\nvn 0.1716 0.1360 -0.9757\nvn 0.4887 0.4312 -0.7585\nvn 0.1470 0.9632 -0.2251\nvn 0.3978 0.5287 -0.7498\nvn 0.1866 0.9703 0.1536\nvn 0.5987 0.5634 0.5692\nvn 0.4708 -0.4942 0.7309\nvn 0.3421 -0.5251 0.7793\nvn 0.1959 0.2743 -0.9415\nvn 0.3797 0.5477 0.7456\nvn 0.4828 0.4690 0.7395\nvn 0.1661 0.1492 0.9748\nvn 0.2478 -0.5015 0.8289\nvn 0.1231 0.9473 -0.2956\nvn 0.1099 0.9906 0.0815\nvn 0.1147 0.9246 0.3632\nvn -0.1916 -0.4969 -0.8464\nvn -0.0759 0.7270 -0.6824\nvn 0.0380 0.9507 -0.3079\nvn -0.3333 -0.5319 -0.7785\nvn -0.1405 0.0729 -0.9874\nvn -0.1998 0.3696 -0.9075\nvn -0.0620 0.8677 -0.4933\nvn 0.0241 0.9360 0.3511\nvn -0.1236 0.4209 0.8987\nvn -0.0882 0.3011 0.9495\nvn -0.1906 -0.5087 0.8396\nvn -0.2515 -0.5263 0.8122\nvn -0.4653 -0.4983 -0.7316\nvn -0.0171 0.9919 0.1258\nvn -0.0679 0.8693 0.4896\nvn -0.7340 -0.4937 -0.4665\nvn -0.5498 0.5247 -0.6499\nvn -0.5042 0.2963 -0.8111\nvn -0.0557 0.9945 -0.0893\nvn -0.0233 0.9993 -0.0306\nvn -0.4631 -0.4867 0.7407\nvn -0.7870 -0.5302 -0.3154\nvn -0.2363 0.8980 -0.3712\nvn -0.1886 0.9704 -0.1506\nvn -0.0633 0.9942 0.0869\nvn -0.0704 0.9965 0.0448\nvn -0.5048 0.2978 0.8102\nvn -0.5508 0.5295 0.6452\nvn -0.8451 -0.4972 -0.1964\nvn -0.7622 0.4266 -0.4870\nvn -0.7604 0.5057 -0.4075\nvn 0.2428 -0.5143 -0.8225\nvn -0.2838 0.9523 -0.1121\nvn -0.7996 0.4751 0.3673\nvn -0.7926 0.3481 0.5007\nvn -0.9755 0.1579 0.1531\nvn -0.7551 -0.5373 0.3757\nvn -0.7194 -0.5070 0.4748\nvn -0.8488 -0.4915 0.1949\nvn -0.3290 0.9443 0.0067\nvn -0.3153 0.9490 0.0002\nvn -0.4289 0.8851 0.1808\nvn 0.0033 -1.0000 0.0004\nvn -0.0005 -1.0000 -0.0005\nvn -0.0005 -1.0000 -0.0016\nvn -0.2627 0.9159 0.3036\nvn 0.0828 0.9963 -0.0232\nvn -0.9388 0.3339 -0.0844\nvn 0.0000 -1.0000 0.0009\nvn -0.0000 -1.0000 0.0002\nvn 0.2793 -0.5257 -0.8035\nvn -0.2711 0.8991 0.3438\nvn 0.0808 0.9964 -0.0251\nvn -0.9448 0.3086 -0.1102\nvn -0.0001 -1.0000 0.0005\nusemtl Default_OBJ.002\ns off\nf 986//1853 987//1853 988//1853\nf 988//1854 989//1854 986//1854\nf 987//1855 986//1855 990//1855\nf 987//1856 990//1856 991//1856\nf 986//1857 989//1857 998//1857\nf 986//1858 998//1858 999//1858\nf 990//1859 1001//1859 991//1859\nf 987//1860 991//1860 1002//1860\nf 987//1861 1002//1861 988//1861\nf 986//1862 999//1862 1000//1862\nf 986//1863 1000//1863 990//1863\nf 990//1864 1003//1864 1001//1864\nf 1000//1865 1003//1865 990//1865\nf 988//1866 1002//1866 989//1866\nf 1002//1867 992//1867 989//1867\nf 1002//1868 1004//1868 992//1868\nf 998//1869 1005//1869 999//1869\nf 991//1870 1001//1870 1006//1870\nf 991//1871 1004//1871 1002//1871\nf 1005//1872 1007//1872 1008//1872\nf 999//1873 1005//1873 1000//1873\nf 1003//1874 1000//1874 1010//1874\nf 1000//1875 1005//1875 1009//1875\nf 1001//1876 1011//1876 1006//1876\nf 991//1877 1006//1877 1004//1877\nf 992//1878 1004//1878 1012//1878\nf 992//1879 1012//1879 993//1879\nf 1008//1880 1009//1880 1005//1880\nf 1006//1881 1014//1881 1012//1881\nf 1006//1882 1012//1882 1004//1882\nf 1012//1883 1014//1883 1015//1883\nf 1012//1884 1015//1884 993//1884\nf 1000//1885 1009//1885 1010//1885\nf 1001//1886 1013//1886 1011//1886\nf 1006//1887 1011//1887 1014//1887\nf 997//1888 1018//1888 1007//1888\nf 1008//1889 1016//1889 1009//1889\nf 1009//1890 1017//1890 1010//1890\nf 997//1891 996//1891 1018//1891\nf 1007//1892 1018//1892 1008//1892\nf 1008//1893 1018//1893 1016//1893\nf 1016//1894 1017//1894 1009//1894\nf 1011//1895 1019//1895 1014//1895\nf 1014//1896 1020//1896 1021//1896\nf 1014//1897 1021//1897 1015//1897\nf 993//1898 1015//1898 1021//1898\nf 993//1899 1021//1899 994//1899\nf 1018//1900 996//1900 1022//1900\nf 1011//1901 1013//1901 1019//1901\nf 1019//1902 1020//1902 1014//1902\nf 996//1903 1023//1903 1022//1903\nf 1022//1904 1024//1904 1016//1904\nf 1022//1905 1016//1905 1018//1905\nf 1010//1906 1017//1906 1027//1906\nf 1010//1907 1027//1907 1013//1907\nf 1021//1908 1025//1908 994//1908\nf 996//1909 995//1909 1023//1909\nf 1016//1910 1024//1910 1017//1910\nf 1017//1911 1024//1911 1027//1911\nf 1013//1912 1028//1912 1019//1912\nf 1013//1913 1027//1913 1028//1913\nf 1020//1914 1025//1914 1021//1914\nf 1025//1915 1020//1915 1029//1915\nf 1023//1916 995//1916 1026//1916\nf 1022//1917 1023//1917 1024//1917\nf 1024//1918 1023//1918 1030//1918\nf 1005//1919 997//1919 1007//1919\nf 1024//1920 1030//1920 1027//1920\nf 1029//1921 1032//1921 1031//1921\nf 1029//1922 1031//1922 1025//1922\nf 1031//1923 1032//1923 1026//1923\nf 1031//1924 995//1924 994//1924\nf 1031//1925 994//1925 1025//1925\nf 995//1926 1031//1926 1026//1926\nf 1030//1927 1032//1927 1028//1927\nf 1030//1928 1028//1928 1027//1928\nf 1028//1929 1032//1929 1029//1929\nf 992//1930 998//1930 989//1930\nf 995//1931 996//1931 998//1931\nf 996//1932 997//1932 998//1932\nf 1029//1933 1019//1933 1028//1933\nf 1013//1934 1003//1934 1010//1934\nf 1030//1935 1026//1935 1032//1935\nf 993//1936 994//1936 992//1936\nf 995//1937 992//1937 994//1937\nf 1005//1938 998//1938 997//1938\nf 1029//1939 1020//1939 1019//1939\nf 1013//1940 1001//1940 1003//1940\nf 1030//1941 1023//1941 1026//1941\nf 995//1942 998//1942 992//1942\no geometry_23.002\nv -61.131989 34.121704 -1.584641\nv -63.084236 34.121803 -5.129446\nv -65.734520 34.126114 -6.042069\nv -69.845734 34.118862 -3.403808\nv -70.568909 34.122765 0.534187\nv -68.906776 34.120819 4.921708\nv -65.742287 34.130356 6.027298\nv -62.223915 34.122665 4.404105\nv -49.198742 23.901787 -0.480841\nv -49.199135 22.552580 3.929839\nv -49.197182 20.209793 5.977589\nv -49.189816 17.734093 5.766694\nv -49.200352 16.189400 3.893140\nv -49.195969 15.313054 0.128721\nv -49.199810 16.181587 -3.893386\nv -49.197796 17.463268 -5.556890\nv -49.196320 20.713903 -5.972485\nv -56.347996 22.687328 5.906037\nv -64.028267 29.425995 5.833260\nv -61.284130 25.092142 5.229817\nv -55.620781 20.737358 5.217070\nv -66.712257 31.170750 5.217760\nv -53.213146 18.332460 3.963651\nv -56.712582 23.131220 -5.929533\nv -64.052689 29.448477 -5.833081\nv -64.742592 27.027054 3.767002\nv -59.036575 21.743956 3.370497\nv -52.297436 17.192526 2.302978\nv -68.482101 31.403776 3.211543\nv -55.636246 20.752466 -5.221673\nv -61.284130 25.092144 -5.229816\nv -65.954544 30.258270 -5.253971\nv -64.922874 26.214493 1.237058\nv -64.742584 27.027048 -3.767001\nv -68.383888 34.115108 -5.210141\nv -53.874821 17.853661 0.000004\nv -69.012733 31.266983 0.130588\nv -53.268482 18.364420 -3.962995\nv -59.070847 21.763802 -3.361407\nv -66.657341 28.177513 -1.196504\nv -63.564342 24.961582 -1.215770\nv -59.170490 21.247841 0.036120\nv -68.536644 31.476210 -3.200811\nv -52.439949 17.275879 -2.306678\nvn 0.0020 1.0000 -0.0011\nvn 0.0023 1.0000 0.0003\nvn 0.6398 0.7597 0.1165\nvn 0.6521 0.7250 0.2218\nvn 0.5222 0.5615 0.6419\nvn 0.6269 0.6739 -0.3909\nvn 0.6285 0.6965 -0.3461\nvn 0.3761 0.4441 0.8132\nvn -0.0191 -0.0263 0.9995\nvn -0.0394 -0.0849 0.9956\nvn -0.0668 -0.0654 0.9956\nvn 0.3031 0.3692 -0.8785\nvn -0.2710 -0.2990 0.9150\nvn -0.2650 -0.4076 0.8739\nvn -0.4396 -0.3909 0.8087\nvn -0.0002 1.0000 -0.0012\nvn -0.0122 -0.0203 -0.9997\nvn -0.3773 -0.6961 0.6109\nvn -0.3716 -0.7153 0.5918\nvn -0.0464 -0.1267 -0.9909\nvn -0.0743 -0.0712 -0.9947\nvn -0.3208 -0.4196 0.8491\nvn -0.5590 -0.4979 0.6631\nvn -0.5002 -0.6521 0.5697\nvn -0.5742 -0.6568 0.4887\nvn -0.6921 -0.4589 0.5572\nvn -0.4130 -0.3773 -0.8289\nvn -0.4401 -0.8349 0.3305\nvn -0.2379 -0.3743 -0.8962\nvn -0.3022 -0.3949 -0.8676\nvn -0.2677 -0.2971 -0.9166\nvn -0.3694 -0.2225 -0.9022\nvn -0.2957 -0.1485 -0.9437\nvn -0.4782 -0.7318 0.4856\nvn -0.3963 -0.8943 0.2077\nvn -0.6743 -0.5081 0.5358\nvn -0.7516 -0.6105 0.2496\nvn -0.6427 -0.7149 0.2754\nvn -0.8774 -0.3462 0.3322\nvn -0.5612 -0.5104 -0.6516\nvn -0.4774 -0.8754 0.0757\nvn -0.7841 -0.5993 0.1616\nvn -0.8552 -0.4899 0.1690\nvn -0.3892 -0.7009 -0.5977\nvn -0.5004 -0.6523 -0.5693\nvn -0.5742 -0.6565 -0.4892\nvn -0.5063 -0.8154 0.2806\nvn -0.7821 -0.6206 0.0568\nvn -0.7201 -0.6923 -0.0452\nvn -0.6304 -0.7637 0.1390\nvn -0.3828 -0.7316 -0.5641\nvn -0.6419 -0.7134 -0.2811\nvn -0.7035 -0.6752 -0.2218\nvn -0.7465 -0.6000 -0.2875\nvn -0.6708 -0.5026 -0.5454\nvn -0.6779 -0.4201 -0.6033\nvn -0.7136 -0.3978 -0.5767\nvn -0.5379 -0.8304 0.1452\nvn -0.5347 -0.8356 0.1263\nvn -0.4742 -0.8772 -0.0753\nvn -0.6499 -0.7595 0.0280\nvn -0.8766 -0.4559 -0.1539\nvn -0.4787 -0.7310 -0.4864\nvn -0.8164 -0.5572 -0.1517\nvn -0.6167 -0.7754 -0.1358\nvn -0.8794 -0.4480 -0.1611\nvn -0.4423 -0.8349 -0.3275\nvn -0.5393 -0.8301 -0.1419\nvn -0.5360 -0.8350 -0.1243\nvn -0.3976 -0.8970 -0.1933\nvn -0.5066 -0.8148 -0.2821\nvn -0.0037 1.0000 0.0018\nvn -0.3258 -0.1486 0.9337\nvn -0.3144 -0.1532 0.9368\nvn -0.0064 1.0000 -0.0073\nvn -0.0027 1.0000 -0.0015\nvn 1.0000 0.0028 0.0022\nvn 1.0000 0.0012 -0.0003\nvn 1.0000 -0.0005 -0.0007\nvn 0.9999 -0.0115 0.0038\nvn 1.0000 -0.0010 -0.0007\nvn 1.0000 0.0022 0.0008\nvn 1.0000 -0.0039 -0.0018\nvn 0.0003 1.0000 0.0007\nusemtl Default_OBJ.002\ns off\nf 1033//1943 1034//1943 1035//1943\nf 1033//1944 1039//1944 1040//1944\nf 1033//1945 1040//1945 1041//1945\nf 1041//1946 1040//1946 1042//1946\nf 1042//1947 1040//1947 1043//1947\nf 1041//1948 1049//1948 1034//1948\nf 1041//1949 1034//1949 1033//1949\nf 1043//1950 1040//1950 1039//1950\nf 1043//1951 1039//1951 1050//1951\nf 1043//1952 1050//1952 1044//1952\nf 1039//1953 1051//1953 1050//1953\nf 1049//1954 1035//1954 1034//1954\nf 1050//1955 1051//1955 1052//1955\nf 1044//1956 1050//1956 1053//1956\nf 1051//1957 1054//1957 1052//1957\nf 1033//1958 1037//1958 1039//1958\nf 1049//1959 1056//1959 1035//1959\nf 1044//1960 1053//1960 1055//1960\nf 1044//1961 1055//1961 1045//1961\nf 1049//1962 1048//1962 1056//1962\nf 1056//1963 1057//1963 1035//1963\nf 1050//1964 1052//1964 1053//1964\nf 1052//1965 1054//1965 1058//1965\nf 1052//1966 1059//1966 1053//1966\nf 1052//1967 1058//1967 1059//1967\nf 1054//1968 1038//1968 1061//1968\nf 1057//1969 1063//1969 1064//1969\nf 1045//1970 1055//1970 1060//1970\nf 1048//1971 1062//1971 1056//1971\nf 1056//1972 1062//1972 1063//1972\nf 1056//1973 1063//1973 1057//1973\nf 1057//1974 1064//1974 1067//1974\nf 1057//1975 1067//1975 1035//1975\nf 1059//1976 1055//1976 1053//1976\nf 1045//1977 1060//1977 1046//1977\nf 1058//1978 1054//1978 1061//1978\nf 1058//1979 1061//1979 1065//1979\nf 1058//1980 1065//1980 1059//1980\nf 1038//1981 1037//1981 1061//1981\nf 1063//1982 1066//1982 1064//1982\nf 1060//1983 1068//1983 1046//1983\nf 1065//1984 1061//1984 1069//1984\nf 1061//1985 1037//1985 1069//1985\nf 1062//1986 1048//1986 1070//1986\nf 1063//1987 1062//1987 1071//1987\nf 1063//1988 1071//1988 1066//1988\nf 1059//1989 1060//1989 1055//1989\nf 1069//1990 1072//1990 1065//1990\nf 1065//1991 1072//1991 1073//1991\nf 1065//1992 1074//1992 1059//1992\nf 1048//1993 1047//1993 1070//1993\nf 1066//1994 1071//1994 1073//1994\nf 1066//1995 1073//1995 1072//1995\nf 1066//1996 1072//1996 1075//1996\nf 1075//1997 1064//1997 1066//1997\nf 1064//1998 1075//1998 1067//1998\nf 1075//1999 1036//1999 1067//1999\nf 1060//2000 1059//2000 1074//2000\nf 1060//2001 1074//2001 1068//2001\nf 1046//2002 1068//2002 1076//2002\nf 1065//2003 1073//2003 1074//2003\nf 1069//2004 1037//2004 1075//2004\nf 1070//2005 1071//2005 1062//2005\nf 1069//2006 1075//2006 1072//2006\nf 1073//2007 1071//2007 1074//2007\nf 1037//2008 1036//2008 1075//2008\nf 1047//2009 1076//2009 1070//2009\nf 1074//2010 1071//2010 1076//2010\nf 1074//2011 1076//2011 1068//2011\nf 1076//2012 1047//2012 1046//2012\nf 1076//2013 1071//2013 1070//2013\nf 1037//2014 1038//2014 1039//2014\nf 1038//2015 1054//2015 1039//2015\nf 1054//2016 1051//2016 1039//2016\nf 1067//2017 1036//2017 1035//2017\nf 1036//2018 1037//2018 1035//2018\nf 1044//2019 1042//2019 1043//2019\nf 1041//2020 1044//2020 1049//2020\nf 1044//2021 1048//2021 1049//2021\nf 1045//2022 1046//2022 1044//2022\nf 1046//2023 1048//2023 1044//2023\nf 1041//2024 1042//2024 1044//2024\nf 1046//2025 1047//2025 1048//2025\nf 1033//2026 1035//2026 1037//2026\no geometry_24.002\nv -20.480888 3.341588 -26.472292\nv -20.482244 9.180532 -37.814590\nv -20.480690 12.081911 -40.538975\nv -20.480698 15.860965 -42.886494\nv -20.480888 15.863206 -40.068237\nv -32.725571 3.341587 -6.085575\nv -36.216114 3.341383 -6.087635\nv -34.244442 3.341257 -13.570567\nv -30.003199 3.341294 -21.613007\nv -24.764803 3.341439 -27.333937\nv -20.490488 3.341120 -30.556961\nv -24.284849 15.863162 -40.959564\nv -29.321756 15.861899 -37.543884\nv -33.700577 15.861890 -33.669441\nv -37.489136 15.861914 -29.389656\nv -41.001152 15.862980 -24.213017\nv -43.828674 15.862273 -18.477112\nv -45.755882 15.861836 -12.845758\nv -47.130314 15.862987 -6.085541\nv -44.516361 15.863204 -6.085575\nv -46.467621 14.484445 -6.087552\nv -45.094830 12.263795 -6.088108\nv -42.759869 9.493461 -6.085870\nv -22.410774 9.616488 -37.208088\nv -26.619310 9.495366 -34.239132\nv -42.137249 9.924554 -11.494163\nv -23.455505 13.880019 -40.322113\nv -30.676277 9.586891 -30.785849\nv -27.855661 11.956230 -35.898712\nv -23.101648 12.025002 -39.159077\nv -44.546730 13.325565 -12.469166\nv -39.892860 9.525536 -16.916452\nv -32.157185 11.996633 -32.154011\nv -28.441675 13.928699 -37.053963\nv -43.103081 14.138943 -18.123127\nv -37.496849 9.640792 -22.005560\nv -33.013401 14.199426 -33.273808\nv -41.870098 12.047121 -17.676140\nv -34.268860 9.591443 -26.727262\nv -35.999168 12.048799 -27.826429\nv -37.053307 13.911584 -28.424337\nv -40.219398 13.867941 -23.632702\nv -39.016418 11.774837 -22.963804\nvn 1.0000 -0.0043 -0.0023\nvn 0.7483 0.4880 0.4494\nvn 0.0002 1.0000 -0.0008\nvn 0.6473 0.6095 0.4578\nvn 0.0000 0.0000 1.0000\nvn -0.3497 -0.7297 -0.5875\nvn -0.4096 -0.7329 -0.5432\nvn -0.3833 -0.7245 -0.5729\nvn -0.6787 -0.7218 -0.1357\nvn -0.6573 -0.7334 -0.1732\nvn -0.4082 -0.4296 -0.8055\nvn -0.8866 -0.4260 -0.1802\nvn -0.6583 -0.7200 -0.2195\nvn -0.4585 -0.7211 -0.5195\nvn -0.4289 -0.6432 -0.6343\nvn -0.3579 -0.6476 -0.6727\nvn -0.3559 -0.4931 -0.7938\nvn -0.8766 -0.4451 -0.1830\nvn -0.7573 -0.6384 -0.1381\nvn -0.4284 -0.6398 -0.6381\nvn -0.5051 -0.6424 -0.5763\nvn -0.3462 -0.6421 -0.6840\nvn -0.3822 -0.5421 -0.7483\nvn -0.8399 -0.5192 -0.1585\nvn -0.7813 -0.6014 -0.1672\nvn -0.5032 -0.7310 -0.4608\nvn -0.5081 -0.6397 -0.5767\nvn -0.4679 -0.5318 -0.7059\nvn -0.4936 -0.4463 -0.7464\nvn -0.8494 -0.4467 -0.2811\nvn -0.7580 -0.6061 -0.2409\nvn -0.7232 -0.6430 -0.2520\nvn -0.6148 -0.7270 -0.3059\nvn -0.6006 -0.7342 -0.3167\nvn -0.5160 -0.7252 -0.4559\nvn -0.5747 -0.6416 -0.5080\nvn -0.5563 -0.5381 -0.6332\nvn -0.5563 -0.5368 -0.6343\nvn -0.4685 -0.5460 -0.6946\nvn -0.5088 -0.4218 -0.7505\nvn -0.5808 -0.6362 -0.5079\nvn -0.5877 -0.4397 -0.6792\nvn -0.8579 -0.4215 -0.2936\nvn -0.7995 -0.5312 -0.2805\nvn -0.5806 -0.7150 -0.3895\nvn -0.6784 -0.4233 -0.6005\nvn -0.6038 -0.4120 -0.6824\nvn -0.6758 -0.4427 -0.5893\nvn -0.8122 -0.4242 -0.4004\nvn -0.8072 -0.4330 -0.4012\nvn -0.7623 -0.5290 -0.3730\nvn -0.6348 -0.6438 -0.4272\nvn -0.6964 -0.5482 -0.4630\nvn -0.6976 -0.5443 -0.4659\nvn -0.7470 -0.5491 -0.3749\nvn -0.7481 -0.4381 -0.4983\nvn -0.7510 -0.4200 -0.5095\nvn 0.0002 -1.0000 0.0001\nvn 1.0000 0.0011 0.0017\nvn 1.0000 -0.0002 0.0001\nvn 1.0000 -0.0003 -0.0003\nvn -0.0006 -0.0007 1.0000\nvn 0.0001 -1.0000 0.0000\nvn 0.0000 -1.0000 0.0000\nvn -0.0003 -1.0000 -0.0003\nvn -0.0000 1.0000 0.0000\nvn -0.0005 1.0000 -0.0001\nvn -0.0001 1.0000 -0.0001\nvn -0.0018 1.0000 -0.0005\nvn -0.0088 -0.0057 0.9999\nvn -0.0055 -0.0038 1.0000\nvn 0.0006 0.0004 1.0000\nvn -0.0011 1.0000 -0.0012\nvn -0.0006 1.0000 -0.0005\nvn -0.0010 1.0000 -0.0009\nvn -0.6349 -0.5317 -0.5605\nvn -0.6883 -0.6417 -0.3384\nvn -0.6359 -0.6404 -0.4307\nvn -0.6339 -0.5373 -0.5563\nvn -0.6880 -0.6419 -0.3385\nusemtl Default_OBJ.002\ns off\nf 1077//2027 1087//2027 1078//2027\nf 1077//2028 1081//2028 1082//2028\nf 1081//2029 1080//2029 1088//2029\nf 1081//2030 1096//2030 1082//2030\nf 1082//2031 1096//2031 1095//2031\nf 1087//2032 1100//2032 1078//2032\nf 1087//2033 1086//2033 1101//2033\nf 1087//2034 1101//2034 1100//2034\nf 1099//2035 1102//2035 1083//2035\nf 1083//2036 1102//2036 1084//2036\nf 1080//2037 1103//2037 1088//2037\nf 1095//2038 1094//2038 1097//2038\nf 1084//2039 1102//2039 1108//2039\nf 1086//2040 1104//2040 1101//2040\nf 1101//2041 1105//2041 1100//2041\nf 1100//2042 1106//2042 1078//2042\nf 1080//2043 1079//2043 1103//2043\nf 1097//2044 1094//2044 1107//2044\nf 1102//2045 1099//2045 1098//2045\nf 1100//2046 1105//2046 1106//2046\nf 1101//2047 1104//2047 1105//2047\nf 1106//2048 1079//2048 1078//2048\nf 1103//2049 1079//2049 1106//2049\nf 1097//2050 1107//2050 1098//2050\nf 1102//2051 1098//2051 1107//2051\nf 1086//2052 1085//2052 1104//2052\nf 1105//2053 1104//2053 1109//2053\nf 1103//2054 1106//2054 1110//2054\nf 1103//2055 1110//2055 1088//2055\nf 1094//2056 1111//2056 1107//2056\nf 1102//2057 1107//2057 1114//2057\nf 1102//2058 1114//2058 1108//2058\nf 1084//2059 1108//2059 1112//2059\nf 1084//2060 1112//2060 1085//2060\nf 1104//2061 1085//2061 1115//2061\nf 1104//2062 1115//2062 1109//2062\nf 1109//2063 1113//2063 1105//2063\nf 1105//2064 1113//2064 1110//2064\nf 1105//2065 1110//2065 1106//2065\nf 1110//2066 1089//2066 1088//2066\nf 1115//2067 1116//2067 1109//2067\nf 1110//2068 1113//2068 1089//2068\nf 1094//2069 1093//2069 1111//2069\nf 1114//2070 1107//2070 1111//2070\nf 1112//2071 1115//2071 1085//2071\nf 1113//2072 1091//2072 1090//2072\nf 1113//2073 1090//2073 1089//2073\nf 1113//2074 1117//2074 1091//2074\nf 1093//2075 1092//2075 1111//2075\nf 1111//2076 1092//2076 1118//2076\nf 1111//2077 1118//2077 1114//2077\nf 1119//2078 1115//2078 1112//2078\nf 1116//2079 1119//2079 1118//2079\nf 1116//2080 1118//2080 1117//2080\nf 1118//2081 1119//2081 1114//2081\nf 1118//2082 1092//2082 1117//2082\nf 1117//2083 1092//2083 1091//2083\nf 1082//2084 1087//2084 1077//2084\nf 1078//2085 1079//2085 1080//2085\nf 1078//2086 1080//2086 1081//2086\nf 1078//2087 1081//2087 1077//2087\nf 1095//2088 1083//2088 1082//2088\nf 1083//2089 1087//2089 1082//2089\nf 1083//2090 1084//2090 1087//2090\nf 1084//2090 1085//2090 1087//2090\nf 1085//2091 1086//2091 1087//2091\nf 1088//2092 1092//2092 1081//2092\nf 1092//2092 1096//2092 1081//2092\nf 1092//2093 1093//2093 1096//2093\nf 1093//2094 1095//2094 1096//2094\nf 1093//2095 1094//2095 1095//2095\nf 1097//2096 1098//2096 1095//2096\nf 1098//2097 1099//2097 1095//2097\nf 1099//2098 1083//2098 1095//2098\nf 1089//2099 1090//2099 1088//2099\nf 1090//2100 1092//2100 1088//2100\nf 1090//2101 1091//2101 1092//2101\nf 1109//2102 1117//2102 1113//2102\nf 1119//2103 1108//2103 1114//2103\nf 1119//2104 1116//2104 1115//2104\nf 1109//2105 1116//2105 1117//2105\nf 1119//2106 1112//2106 1108//2106\no geometry_25.002\nv 18.244930 34.121788 42.888359\nv 18.245199 34.121754 40.238228\nv -0.426442 34.121750 44.087399\nv -0.418741 34.120213 46.527912\nv 6.536551 34.117905 46.089069\nv 18.245405 30.296217 44.012573\nv 18.244980 24.636185 44.984451\nv 18.245306 21.392225 45.125175\nv 18.243906 18.705400 44.862404\nv 18.245203 15.852214 43.889633\nv 18.245199 15.852164 41.149574\nv -0.426442 15.852164 44.904995\nv 12.445627 15.857528 45.891533\nv 6.453090 15.888759 47.110916\nv -0.416072 15.862338 47.518841\nv -0.421884 18.756910 48.320709\nv -0.420984 21.446079 48.598919\nv -0.424282 25.593363 48.367592\nv -0.421659 29.976406 47.608444\nv 13.082836 34.110332 44.745232\nv 12.809859 28.973255 46.154594\nv 13.347328 18.607414 46.504536\nv 6.844021 18.928228 47.899139\nv 6.512762 28.969481 47.402145\nv 12.967406 21.541471 46.935410\nv 6.875813 24.976030 47.958084\nv 13.041152 25.398569 46.656158\nv 6.651179 21.757254 48.171482\nvn -0.0000 1.0000 -0.0000\nvn 0.0000 1.0000 0.0006\nvn 0.0005 1.0000 0.0032\nvn 0.0056 0.9997 0.0219\nvn -0.1969 -0.0488 -0.9792\nvn -0.2017 -0.0438 -0.9785\nvn -1.0000 -0.0031 0.0040\nvn 0.3257 0.2666 0.9071\nvn 0.3103 -0.3066 0.8998\nvn 0.3085 -0.3022 0.9019\nvn 0.0582 -0.2664 0.9621\nvn 0.3058 0.2368 0.9222\nvn 0.1950 0.2498 0.9484\nvn 0.0620 -0.2580 0.9641\nvn 0.0610 0.2518 0.9659\nvn 0.1884 0.2419 0.9518\nvn 0.2028 -0.1165 0.9723\nvn 0.1905 -0.2727 0.9431\nvn 0.0600 -0.1027 0.9929\nvn 0.1946 0.1486 0.9696\nvn 0.1920 0.1524 0.9695\nvn 0.3207 -0.0924 0.9427\nvn 0.3182 -0.0973 0.9430\nvn 0.1892 -0.2692 0.9443\nvn 0.0641 -0.0913 0.9938\nvn 0.3252 0.0410 0.9448\nvn 0.1887 -0.0813 0.9787\nvn 0.0578 0.0556 0.9968\nvn 0.0540 0.1704 0.9839\nvn 0.2018 0.0669 0.9771\nvn 0.3136 0.0626 0.9475\nvn 0.0675 0.1436 0.9873\nvn 0.1935 0.0515 0.9798\nvn 0.0611 0.0618 0.9962\nvn 1.0000 0.0002 0.0001\nvn 1.0000 0.0002 0.0014\nvn 1.0000 -0.0003 -0.0023\nvn 1.0000 -0.0000 0.0014\nvn 1.0000 -0.0000 -0.0000\nvn 1.0000 -0.0000 -0.0001\nvn -1.0000 0.0000 0.0006\nvn -1.0000 0.0010 0.0026\nvn -1.0000 0.0015 0.0032\nvn 0.3224 0.1520 0.9343\nvn 0.0002 -1.0000 0.0032\nvn 0.0000 -1.0000 0.0000\nvn 0.0001 -1.0000 0.0039\nvn -1.0000 -0.0004 0.0016\nvn -1.0000 -0.0004 0.0071\nvn 0.0076 -0.9980 0.0627\nvn 0.0645 0.2463 0.9670\nvn 0.3280 0.1598 0.9311\nusemtl Default_OBJ.002\ns off\nf 1120//2107 1121//2107 1122//2107\nf 1120//2108 1122//2108 1123//2108\nf 1120//2109 1123//2109 1124//2109\nf 1120//2110 1124//2110 1139//2110\nf 1121//2111 1130//2111 1131//2111\nf 1121//2112 1131//2112 1122//2112\nf 1131//2113 1134//2113 1135//2113\nf 1125//2114 1120//2114 1139//2114\nf 1129//2115 1128//2115 1132//2115\nf 1128//2116 1141//2116 1132//2116\nf 1134//2117 1133//2117 1135//2117\nf 1139//2118 1140//2118 1125//2118\nf 1139//2119 1124//2119 1140//2119\nf 1135//2120 1133//2120 1142//2120\nf 1138//2121 1124//2121 1123//2121\nf 1140//2122 1124//2122 1143//2122\nf 1141//2123 1144//2123 1142//2123\nf 1141//2124 1133//2124 1132//2124\nf 1135//2125 1142//2125 1136//2125\nf 1140//2126 1145//2126 1146//2126\nf 1140//2127 1143//2127 1145//2127\nf 1127//2128 1144//2128 1128//2128\nf 1128//2129 1144//2129 1141//2129\nf 1141//2130 1142//2130 1133//2130\nf 1136//2131 1142//2131 1147//2131\nf 1127//2132 1126//2132 1144//2132\nf 1144//2133 1147//2133 1142//2133\nf 1136//2134 1147//2134 1137//2134\nf 1138//2135 1137//2135 1143//2135\nf 1146//2136 1145//2136 1144//2136\nf 1126//2137 1146//2137 1144//2137\nf 1145//2138 1143//2138 1137//2138\nf 1147//2139 1144//2139 1145//2139\nf 1145//2140 1137//2140 1147//2140\nf 1125//2141 1121//2141 1120//2141\nf 1126//2142 1127//2142 1125//2142\nf 1127//2143 1128//2143 1125//2143\nf 1128//2144 1129//2144 1125//2144\nf 1129//2145 1130//2145 1125//2145\nf 1130//2146 1121//2146 1125//2146\nf 1131//2147 1137//2147 1122//2147\nf 1137//2148 1138//2148 1122//2148\nf 1138//2149 1123//2149 1122//2149\nf 1126//2150 1140//2150 1146//2150\nf 1132//2151 1131//2151 1129//2151\nf 1131//2152 1130//2152 1129//2152\nf 1132//2153 1134//2153 1131//2153\nf 1135//2154 1137//2154 1131//2154\nf 1135//2155 1136//2155 1137//2155\nf 1133//2156 1134//2156 1132//2156\nf 1138//2157 1143//2157 1124//2157\nf 1126//2158 1125//2158 1140//2158\no geometry_26.002\nv 71.759026 51.230080 -1.491012\nv 67.725945 43.901615 2.551152\nv 66.802727 51.218433 -6.177229\nv 62.323135 51.216053 -5.432294\nv 60.126900 51.217129 -3.439351\nv 59.366276 51.240433 1.098730\nv 61.315670 51.226406 4.752736\nv 65.099648 51.227982 6.030643\nv 70.398041 51.230572 4.014841\nv 64.857018 43.900906 6.655324\nv 60.504932 43.897247 7.490493\nv 57.362724 43.904972 4.410023\nv 57.087753 43.900715 -3.380925\nv 59.011646 43.901367 -6.623929\nv 63.503510 43.888378 -7.522053\nv 67.250702 43.901337 -3.669458\nvn 0.9008 -0.3729 0.2227\nvn 0.0007 -1.0000 -0.0005\nvn 0.0037 -1.0000 -0.0002\nvn 0.8585 -0.5086 -0.0656\nvn 0.7575 -0.3819 0.5295\nvn 0.6984 -0.2279 -0.6785\nvn 0.6768 -0.1734 -0.7154\nvn 0.3547 0.0678 0.9325\nvn 0.1878 0.0773 0.9792\nvn -0.1896 0.2409 -0.9518\nvn -0.1591 0.2470 -0.9559\nvn -0.6184 0.3910 -0.6817\nvn -0.2983 0.3628 0.8828\nvn -0.6615 0.3255 0.6756\nvn -0.8110 0.3330 -0.4810\nvn -0.8028 0.4133 0.4299\nvn -0.9128 0.3779 -0.1549\nvn -0.9601 0.2775 0.0337\nvn 0.0013 -1.0000 0.0008\nvn 0.0013 1.0000 -0.0017\nvn -0.0033 -1.0000 -0.0022\nvn -0.0012 1.0000 -0.0043\nvn -0.0021 1.0000 0.0049\nvn 0.0003 1.0000 0.0021\nvn -0.0049 1.0000 -0.0060\nvn -0.0031 -1.0000 0.0007\nvn -0.0013 -1.0000 0.0010\nvn -0.0018 1.0000 -0.0005\nusemtl Default_OBJ.002\ns off\nf 1148//2159 1156//2159 1149//2159\nf 1160//2160 1157//2160 1158//2160\nf 1149//2161 1162//2161 1163//2161\nf 1148//2162 1149//2162 1163//2162\nf 1156//2163 1157//2163 1149//2163\nf 1163//2164 1162//2164 1148//2164\nf 1148//2165 1162//2165 1150//2165\nf 1156//2166 1155//2166 1157//2166\nf 1155//2167 1158//2167 1157//2167\nf 1162//2168 1161//2168 1151//2168\nf 1162//2169 1151//2169 1150//2169\nf 1151//2170 1161//2170 1152//2170\nf 1155//2171 1154//2171 1158//2171\nf 1158//2172 1154//2172 1159//2172\nf 1152//2173 1161//2173 1160//2173\nf 1154//2174 1153//2174 1159//2174\nf 1152//2175 1160//2175 1153//2175\nf 1160//2176 1159//2176 1153//2176\nf 1149//2177 1157//2177 1162//2177\nf 1156//2178 1150//2178 1153//2178\nf 1160//2179 1161//2179 1162//2179\nf 1151//2180 1153//2180 1150//2180\nf 1154//2181 1155//2181 1153//2181\nf 1155//2182 1156//2182 1153//2182\nf 1151//2183 1152//2183 1153//2183\nf 1159//2184 1160//2184 1158//2184\nf 1160//2185 1162//2185 1157//2185\nf 1156//2186 1148//2186 1150//2186\no geometry_27.002\nv 26.273165 2.847162 -17.467175\nv -0.423828 2.847163 -31.481857\nv -0.422101 2.847162 -36.409729\nv 4.777267 2.847085 -36.151173\nv 12.488244 2.846787 -34.353603\nv 19.917871 2.847053 -30.664459\nv 26.262674 2.847613 -25.527224\nv 26.275084 10.036076 -35.119133\nv 26.249260 13.793329 -38.526604\nv 26.273151 13.784964 -35.128235\nv -0.423828 13.787580 -43.720268\nv -0.422870 13.786066 -46.428963\nv -0.421289 10.848025 -44.436539\nv 18.218866 13.785648 -42.853485\nv 6.417921 13.771509 -46.049789\nv 5.905806 10.247120 -43.506516\nv 22.001982 9.689288 -37.541618\nv 22.986107 11.985552 -39.187546\nv 11.980989 10.225604 -42.275791\nv 16.956932 9.714517 -40.058708\nv 17.871723 12.078148 -41.808384\nv 12.106851 13.724387 -44.922745\nvn 1.0000 -0.0035 -0.0013\nvn -0.1670 0.8382 0.5191\nvn -0.3302 0.7037 0.6291\nvn -0.0007 1.0000 0.0025\nvn 0.4366 -0.7202 -0.5392\nvn 0.0366 -0.7073 -0.7060\nvn 0.0351 -0.7078 -0.7055\nvn 0.3904 -0.7091 -0.5872\nvn 0.0446 -0.5607 -0.8268\nvn 0.4173 -0.6408 -0.6444\nvn 0.0623 -0.5900 -0.8050\nvn 0.1377 -0.7087 -0.6919\nvn 0.1581 -0.7175 -0.6784\nvn 0.3089 -0.7194 -0.6221\nvn 0.3077 -0.7184 -0.6239\nvn 0.3401 -0.6410 -0.6881\nvn 0.3413 -0.6398 -0.6886\nvn 0.4624 -0.5939 -0.6584\nvn 0.1569 -0.5994 -0.7849\nvn 0.1518 -0.5928 -0.7909\nvn 0.3767 -0.5381 -0.7540\nvn 0.4186 -0.4718 -0.7760\nvn 0.2268 -0.7054 -0.6715\nvn 0.2580 -0.6374 -0.7261\nvn 0.2466 -0.5903 -0.7686\nvn 0.2744 -0.5420 -0.7943\nvn 1.0000 0.0005 -0.0070\nvn 1.0000 0.0005 0.0003\nvn 0.0006 1.0000 -0.0028\nvn -0.0001 1.0000 -0.0006\nvn -0.0000 -1.0000 0.0000\nvn 0.0001 -1.0000 -0.0001\nvn -0.0000 -1.0000 0.0002\nvn -0.0000 -1.0000 -0.0001\nvn 0.0338 0.9910 -0.1292\nvn 0.0030 0.9999 -0.0154\nvn -1.0000 -0.0008 -0.0004\nvn -1.0000 -0.0007 -0.0008\nvn -1.0000 -0.0004 -0.0004\nusemtl Default_OBJ.002\ns off\nf 1164//2187 1170//2187 1171//2187\nf 1164//2188 1173//2188 1174//2188\nf 1164//2189 1174//2189 1165//2189\nf 1174//2190 1173//2190 1172//2190\nf 1170//2191 1169//2191 1171//2191\nf 1176//2192 1179//2192 1167//2192\nf 1176//2193 1167//2193 1166//2193\nf 1171//2194 1169//2194 1180//2194\nf 1175//2195 1178//2195 1176//2195\nf 1171//2196 1180//2196 1181//2196\nf 1178//2197 1179//2197 1176//2197\nf 1167//2198 1179//2198 1182//2198\nf 1167//2199 1182//2199 1168//2199\nf 1169//2200 1168//2200 1180//2200\nf 1180//2201 1168//2201 1183//2201\nf 1180//2202 1183//2202 1184//2202\nf 1180//2203 1184//2203 1181//2203\nf 1171//2204 1181//2204 1172//2204\nf 1179//2205 1185//2205 1182//2205\nf 1179//2206 1178//2206 1185//2206\nf 1181//2207 1184//2207 1177//2207\nf 1181//2208 1177//2208 1172//2208\nf 1168//2209 1182//2209 1183//2209\nf 1182//2210 1184//2210 1183//2210\nf 1185//2211 1184//2211 1182//2211\nf 1185//2212 1177//2212 1184//2212\nf 1172//2213 1173//2213 1171//2213\nf 1173//2214 1164//2214 1171//2214\nf 1177//2215 1175//2215 1172//2215\nf 1175//2216 1174//2216 1172//2216\nf 1165//2217 1168//2217 1164//2217\nf 1168//2218 1170//2218 1164//2218\nf 1168//2219 1169//2219 1170//2219\nf 1165//2217 1166//2217 1168//2217\nf 1166//2220 1167//2220 1168//2220\nf 1185//2221 1178//2221 1177//2221\nf 1178//2222 1175//2222 1177//2222\nf 1176//2223 1174//2223 1175//2223\nf 1176//2224 1166//2224 1174//2224\nf 1166//2225 1165//2225 1174//2225\no geometry_28.002\nv 16.389061 2.848190 26.956825\nv -0.426441 2.848189 31.484995\nv 36.109798 15.852163 26.956825\nv 39.169601 15.805796 26.956909\nv 36.483795 11.845451 26.966043\nv 34.118076 9.632031 26.956667\nv 24.628340 2.842982 27.044994\nv 18.377750 2.848192 31.584364\nv 12.274364 2.847831 34.409458\nv 4.669291 2.848124 36.167530\nv -0.425546 2.848189 36.408951\nv -0.422358 9.740665 43.439404\nv -0.424335 11.874174 45.191399\nv -0.422241 13.724277 46.424820\nv -0.421155 15.852909 47.474224\nv -0.426441 15.852162 44.905212\nv 6.391833 15.850991 47.028111\nv 12.771446 15.851713 45.776783\nv 18.390234 15.848807 43.870548\nv 24.125359 15.852302 41.042717\nv 29.323343 15.851188 37.534988\nv 33.662201 15.851030 33.702679\nv 37.519306 15.851293 29.347399\nv 30.808258 9.604897 30.679329\nv 26.720949 9.727358 34.431957\nv 37.044411 13.900181 28.415886\nv 32.146538 11.970033 32.144180\nv 5.821334 10.273532 43.540562\nv 6.560364 13.557478 45.906521\nv 27.830355 11.961060 35.917637\nv 33.016651 14.212825 33.275478\nv 22.941422 11.997008 39.225719\nv 22.114393 9.711895 37.499367\nv 12.382869 13.962098 44.933918\nv 28.372498 13.928055 37.099823\nv 11.907423 10.142293 42.216072\nv 23.639812 14.158173 40.414879\nv 12.243879 12.233723 43.844822\nv 17.857224 12.065322 41.803230\nv 16.979967 9.690243 40.029522\nv 18.133238 13.667908 42.816223\nvn -0.2419 0.3668 -0.8983\nvn 0.0107 -0.0279 -0.9996\nvn -0.3235 0.6795 -0.6585\nvn -0.0001 1.0000 -0.0003\nvn 0.0152 0.9998 -0.0086\nvn 0.5203 -0.7213 0.4573\nvn 0.4649 -0.7095 0.5295\nvn 0.0331 -0.7137 0.6997\nvn 0.0490 -0.7076 0.7049\nvn 0.0559 -0.4415 0.8955\nvn 0.0587 -0.4351 0.8985\nvn 0.7400 -0.4279 0.5190\nvn 0.5762 -0.6405 0.5077\nvn 0.5076 -0.6427 0.5739\nvn 0.5877 -0.6302 0.5074\nvn 0.7483 -0.5065 0.4284\nvn 0.5078 -0.6376 0.5793\nvn 0.6751 -0.4452 0.5882\nvn 0.6359 -0.5298 0.5612\nvn 0.6312 -0.5547 0.5421\nvn 0.5562 -0.5361 0.6350\nvn 0.5562 -0.5353 0.6356\nvn 0.3899 -0.7137 0.5819\nvn 0.4054 -0.7232 0.5591\nvn 0.0416 -0.6341 0.7722\nvn 0.1354 -0.7086 0.6925\nvn 0.1568 -0.7179 0.6782\nvn 0.1536 -0.6224 0.7675\nvn 0.1458 -0.5997 0.7868\nvn 0.0485 -0.5541 0.8310\nvn 0.1745 -0.4222 0.8895\nvn 0.1777 -0.4311 0.8846\nvn 0.6781 -0.4238 0.6005\nvn 0.5859 -0.4432 0.6785\nvn 0.0605 -0.5924 0.8034\nvn 0.1752 -0.5349 0.8265\nvn 0.6023 -0.4151 0.6819\nvn 0.3410 -0.6421 0.6866\nvn 0.2262 -0.7064 0.6707\nvn 0.2694 -0.5288 0.8049\nvn 0.2896 -0.4440 0.8479\nvn 0.2885 -0.4389 0.8510\nvn 0.4282 -0.6383 0.6397\nvn 0.3746 -0.5406 0.7532\nvn 0.3405 -0.6401 0.6887\nvn 0.3128 -0.7120 0.6286\nvn 0.2564 -0.6374 0.7266\nvn 0.2518 -0.6195 0.7435\nvn 0.2715 -0.5472 0.7917\nvn 0.3769 -0.5370 0.7547\nvn 0.2920 -0.7189 0.6308\nvn 0.4021 -0.4173 0.8150\nvn 0.3919 -0.4375 0.8094\nvn 0.0000 0.0000 -1.0000\nvn 0.0167 -0.0137 -0.9998\nvn 0.0003 1.0000 0.0002\nvn 0.0000 1.0000 0.0000\nvn 0.0016 -1.0000 0.0034\nvn 0.0001 -1.0000 0.0008\nvn -0.0002 -1.0000 0.0000\nvn -0.0006 -1.0000 -0.0023\nvn 0.0008 1.0000 0.0009\nvn 0.0006 1.0000 0.0006\nvn 0.0002 1.0000 0.0005\nvn 0.0030 1.0000 0.0073\nvn -1.0000 -0.0002 0.0002\nvn -1.0000 -0.0005 0.0006\nvn -1.0000 -0.0004 0.0021\nvn -1.0000 -0.0013 0.0036\nvn 0.0005 1.0000 0.0030\nvn 0.5058 -0.4235 0.7515\nvn 0.4665 -0.5465 0.6954\nvn -0.0000 -1.0000 0.0001\nvn -1.0000 -0.0067 0.0070\nvn 0.4282 -0.6382 0.6398\nvn 0.5073 -0.4210 0.7519\nvn 0.4662 -0.5374 0.7028\nusemtl Default_OBJ.002\ns off\nf 1186//2226 1187//2226 1188//2226\nf 1186//2227 1191//2227 1192//2227\nf 1187//2228 1201//2228 1188//2228\nf 1188//2229 1201//2229 1200//2229\nf 1188//2230 1208//2230 1189//2230\nf 1192//2231 1191//2231 1209//2231\nf 1209//2232 1210//2232 1192//2232\nf 1196//2233 1195//2233 1197//2233\nf 1195//2234 1213//2234 1197//2234\nf 1200//2235 1199//2235 1214//2235\nf 1200//2236 1214//2236 1202//2236\nf 1211//2237 1189//2237 1208//2237\nf 1191//2238 1212//2238 1209//2238\nf 1209//2239 1212//2239 1210//2239\nf 1212//2240 1191//2240 1190//2240\nf 1211//2241 1190//2241 1189//2241\nf 1212//2242 1215//2242 1210//2242\nf 1208//2243 1216//2243 1211//2243\nf 1211//2244 1216//2244 1212//2244\nf 1211//2245 1212//2245 1190//2245\nf 1212//2246 1216//2246 1215//2246\nf 1215//2247 1216//2247 1220//2247\nf 1210//2248 1218//2248 1193//2248\nf 1210//2249 1193//2249 1192//2249\nf 1198//2250 1197//2250 1213//2250\nf 1213//2251 1195//2251 1221//2251\nf 1195//2252 1194//2252 1221//2252\nf 1213//2253 1221//2253 1223//2253\nf 1213//2254 1223//2254 1214//2254\nf 1199//2255 1198//2255 1214//2255\nf 1202//2256 1214//2256 1203//2256\nf 1219//2257 1203//2257 1214//2257\nf 1208//2258 1207//2258 1216//2258\nf 1216//2259 1206//2259 1220//2259\nf 1213//2260 1214//2260 1198//2260\nf 1214//2261 1223//2261 1219//2261\nf 1216//2262 1207//2262 1206//2262\nf 1218//2263 1217//2263 1225//2263\nf 1194//2264 1225//2264 1221//2264\nf 1219//2265 1223//2265 1226//2265\nf 1219//2266 1226//2266 1204//2266\nf 1219//2267 1204//2267 1203//2267\nf 1218//2268 1215//2268 1217//2268\nf 1224//2269 1217//2269 1226//2269\nf 1217//2270 1224//2270 1225//2270\nf 1218//2271 1225//2271 1193//2271\nf 1225//2272 1224//2272 1221//2272\nf 1223//2273 1221//2273 1224//2273\nf 1226//2274 1223//2274 1224//2274\nf 1222//2275 1226//2275 1217//2275\nf 1225//2276 1194//2276 1193//2276\nf 1205//2277 1204//2277 1222//2277\nf 1222//2278 1204//2278 1226//2278\nf 1188//2279 1189//2279 1191//2279\nf 1189//2280 1190//2280 1191//2280\nf 1186//2279 1188//2279 1191//2279\nf 1205//2281 1208//2281 1188//2281\nf 1200//2282 1205//2282 1188//2282\nf 1193//2283 1194//2283 1192//2283\nf 1194//2284 1196//2284 1192//2284\nf 1196//2285 1187//2285 1192//2285\nf 1187//2286 1186//2286 1192//2286\nf 1206//2287 1207//2287 1205//2287\nf 1207//2288 1208//2288 1205//2288\nf 1200//2289 1203//2289 1205//2289\nf 1203//2290 1204//2290 1205//2290\nf 1196//2291 1201//2291 1187//2291\nf 1196//2292 1198//2292 1201//2292\nf 1198//2293 1200//2293 1201//2293\nf 1198//2294 1199//2294 1200//2294\nf 1202//2295 1203//2295 1200//2295\nf 1220//2296 1205//2296 1222//2296\nf 1220//2297 1217//2297 1215//2297\nf 1195//2298 1196//2298 1194//2298\nf 1197//2299 1198//2299 1196//2299\nf 1218//2300 1210//2300 1215//2300\nf 1220//2301 1206//2301 1205//2301\nf 1220//2302 1222//2302 1217//2302\no geometry_29.002\nv -42.527912 9.310103 -6.124538\nv -35.505398 2.099695 -6.054932\nv -42.965885 9.275367 0.001799\nv -42.310349 9.276236 8.042300\nv -38.185005 9.336377 20.271870\nv -23.562124 2.098525 -6.085573\nv -13.488695 2.098524 20.289762\nv -30.013248 2.098180 20.251566\nv -34.123959 2.117314 11.886370\nv -35.974247 2.111799 2.310623\nvn -0.0377 0.9993 0.0030\nvn -0.0227 0.9997 0.0027\nvn -0.0026 -0.0122 -0.9999\nvn 0.2810 0.9586 -0.0472\nvn 0.3524 0.9261 -0.1346\nvn 0.0000 -1.0000 -0.0000\nvn -0.7150 -0.6969 -0.0551\nvn -0.0023 -0.0054 1.0000\nvn -0.7088 -0.7043 -0.0387\nvn -0.7238 -0.6874 0.0591\nvn -0.6304 -0.7125 0.3081\nvn -0.6871 -0.7142 0.1332\nvn -0.7004 -0.6723 0.2396\nvn -0.0057 -1.0000 0.0011\nvn -0.0096 -1.0000 0.0024\nvn -0.0001 -1.0000 -0.0000\nusemtl Default_OBJ.002\ns off\nf 1227//2303 1229//2303 1230//2303\nf 1227//2304 1230//2304 1231//2304\nf 1227//2305 1232//2305 1228//2305\nf 1227//2306 1231//2306 1233//2306\nf 1227//2307 1233//2307 1232//2307\nf 1234//2308 1232//2308 1233//2308\nf 1228//2309 1229//2309 1227//2309\nf 1231//2310 1234//2310 1233//2310\nf 1228//2311 1236//2311 1229//2311\nf 1229//2312 1236//2312 1230//2312\nf 1231//2313 1235//2313 1234//2313\nf 1236//2314 1235//2314 1230//2314\nf 1231//2315 1230//2315 1235//2315\nf 1234//2316 1236//2316 1228//2316\nf 1234//2317 1235//2317 1236//2317\nf 1234//2318 1228//2318 1232//2318\no geometry_30.002\nv -31.317343 34.118576 -31.288485\nv -17.243696 34.121754 -40.690598\nv -31.317360 34.121670 -34.521400\nv -31.316919 28.640463 -36.418369\nv -31.316750 23.233274 -37.296558\nv -31.316078 19.104578 -37.084141\nv -31.316462 15.870961 -35.820942\nv -31.317362 15.864429 -32.429756\nv -17.243696 15.864430 -41.574696\nv -17.267817 34.122925 -43.331654\nv -23.727890 34.121372 -40.171814\nv -28.499086 34.119064 -36.991516\nv -17.241846 15.907274 -44.367207\nv -17.242714 21.535553 -45.518333\nv -17.244011 26.619406 -45.082619\nv -29.072334 15.878213 -37.790905\nv -24.232368 15.886898 -41.068863\nv -19.054251 15.873398 -43.625900\nv -17.246084 31.926331 -43.934822\nv -19.302517 28.660126 -43.938995\nv -24.047203 30.501173 -41.140572\nv -29.507267 18.912661 -38.565937\nv -18.721251 18.782797 -44.692307\nv -24.659386 18.832819 -41.775661\nv -29.309690 29.966766 -37.736385\nv -19.174398 21.131029 -44.787857\nv -29.695799 21.860477 -38.722019\nv -24.383888 21.855934 -42.235851\nv -24.483469 25.817200 -41.871655\nv -19.024492 24.278618 -44.731159\nv -29.366243 25.934212 -38.599056\nvn 0.5441 -0.0524 0.8374\nvn 0.5551 -0.0402 0.8308\nvn 0.0004 1.0000 0.0010\nvn 1.0000 -0.0000 0.0007\nvn 1.0000 0.0001 -0.0001\nvn 1.0000 0.0003 -0.0006\nvn 1.0000 0.0006 -0.0012\nvn 0.9999 0.0124 -0.0091\nvn -0.3814 0.2413 -0.8924\nvn -0.4170 0.2524 -0.8731\nvn -0.4233 0.2689 -0.8652\nvn -0.6325 -0.2818 -0.7215\nvn -0.6265 -0.2760 -0.7290\nvn -0.3583 -0.2849 -0.8891\nvn -0.4270 -0.2690 -0.8633\nvn -0.4266 -0.2678 -0.8639\nvn -0.5347 -0.2697 -0.8009\nvn -0.1717 -0.1974 -0.9652\nvn -0.3164 0.2004 -0.9272\nvn -0.6368 -0.0813 -0.7668\nvn -0.5512 -0.0792 -0.8306\nvn -0.5501 -0.0764 -0.8316\nvn -0.3330 -0.1024 -0.9373\nvn -0.4385 -0.1208 -0.8906\nvn -0.5353 0.2621 -0.8029\nvn -0.5437 0.2499 -0.8012\nvn -0.6778 -0.0379 -0.7343\nvn -0.4485 -0.0944 -0.8888\nvn -0.4476 0.1785 -0.8763\nvn -0.3689 0.1427 -0.9185\nvn -0.6178 0.1728 -0.7671\nvn -0.5506 0.0627 -0.8324\nvn -0.4355 0.0369 -0.8994\nvn -0.3597 0.0339 -0.9324\nvn -0.5448 0.1786 -0.8193\nvn -0.5470 0.1824 -0.8170\nvn -0.4299 0.1341 -0.8929\nvn -0.6226 0.0739 -0.7791\nvn -0.5542 0.0699 -0.8294\nvn -0.4471 0.0707 -0.8917\nvn -0.6611 0.1203 -0.7406\nvn -0.2951 0.0815 -0.9520\nvn -1.0000 0.0000 0.0000\nvn 0.0002 1.0000 0.0004\nvn -0.0008 1.0000 -0.0011\nvn -0.0050 1.0000 -0.0067\nvn -0.0013 -1.0000 -0.0019\nvn -1.0000 -0.0000 -0.0002\nvn -1.0000 -0.0000 -0.0001\nvn -1.0000 -0.0002 -0.0004\nvn -1.0000 0.0000 -0.0003\nvn 0.0124 -0.9998 -0.0153\nvn -0.0078 -0.9999 -0.0126\nvn -0.0144 -0.9996 -0.0240\nvn -0.6372 0.2549 -0.7273\nvn -0.5380 -0.2802 -0.7951\nvn -0.0017 -1.0000 -0.0029\nvn -0.6417 0.2508 -0.7248\nusemtl Default_OBJ.002\ns off\nf 1237//2319 1244//2319 1245//2319\nf 1237//2320 1245//2320 1238//2320\nf 1238//2321 1239//2321 1237//2321\nf 1238//2322 1245//2322 1249//2322\nf 1238//2323 1249//2323 1250//2323\nf 1238//2324 1250//2324 1251//2324\nf 1238//2325 1251//2325 1255//2325\nf 1238//2326 1255//2326 1246//2326\nf 1246//2327 1255//2327 1256//2327\nf 1246//2328 1256//2328 1257//2328\nf 1246//2329 1257//2329 1247//2329\nf 1243//2330 1242//2330 1252//2330\nf 1252//2331 1242//2331 1258//2331\nf 1254//2332 1259//2332 1249//2332\nf 1253//2333 1260//2333 1254//2333\nf 1254//2334 1260//2334 1259//2334\nf 1253//2335 1258//2335 1260//2335\nf 1259//2336 1250//2336 1249//2336\nf 1255//2337 1251//2337 1256//2337\nf 1242//2338 1263//2338 1258//2338\nf 1258//2339 1263//2339 1260//2339\nf 1260//2340 1263//2340 1264//2340\nf 1259//2341 1262//2341 1250//2341\nf 1259//2342 1260//2342 1262//2342\nf 1247//2343 1257//2343 1248//2343\nf 1248//2344 1257//2344 1261//2344\nf 1242//2345 1241//2345 1263//2345\nf 1262//2346 1260//2346 1264//2346\nf 1256//2347 1265//2347 1257//2347\nf 1256//2348 1251//2348 1266//2348\nf 1261//2349 1267//2349 1240//2349\nf 1263//2350 1265//2350 1264//2350\nf 1262//2351 1264//2351 1266//2351\nf 1262//2352 1266//2352 1250//2352\nf 1257//2353 1265//2353 1267//2353\nf 1257//2354 1267//2354 1261//2354\nf 1256//2355 1266//2355 1265//2355\nf 1263//2356 1241//2356 1267//2356\nf 1263//2357 1267//2357 1265//2357\nf 1264//2358 1265//2358 1266//2358\nf 1241//2359 1240//2359 1267//2359\nf 1266//2360 1251//2360 1250//2360\nf 1239//2361 1244//2361 1237//2361\nf 1246//2362 1239//2362 1238//2362\nf 1246//2363 1247//2363 1239//2363\nf 1247//2364 1248//2364 1239//2364\nf 1243//2365 1245//2365 1244//2365\nf 1240//2366 1244//2366 1239//2366\nf 1240//2367 1241//2367 1244//2367\nf 1241//2368 1242//2368 1244//2368\nf 1242//2369 1243//2369 1244//2369\nf 1254//2370 1249//2370 1245//2370\nf 1252//2371 1254//2371 1243//2371\nf 1252//2372 1253//2372 1254//2372\nf 1261//2373 1239//2373 1248//2373\nf 1253//2374 1252//2374 1258//2374\nf 1243//2375 1254//2375 1245//2375\nf 1261//2376 1240//2376 1239//2376\no geometry_31.002\nv 28.503626 57.743477 18.290779\nv 31.795866 57.742577 18.290253\nv 33.866821 53.932323 18.291281\nv 36.639660 48.555302 18.290798\nv 39.622536 42.373291 18.290779\nv 42.418797 35.488087 18.290560\nv 42.857342 34.122299 18.293139\nv 40.217968 34.121754 18.290777\nv 9.961048 57.743889 32.336857\nv 9.964581 57.743664 35.254704\nv 14.636835 57.743881 33.629330\nv 17.975628 57.743355 31.983324\nv 19.333406 57.742104 31.195602\nv 21.839153 57.743244 29.504124\nv 23.096966 57.742493 28.542324\nv 25.995514 57.742809 25.993979\nv 29.143097 57.742699 22.347595\nv 31.345810 57.742466 19.093819\nv 40.200432 34.122017 23.680742\nv 36.914024 34.122208 28.564219\nv 32.975922 34.121670 33.040150\nv 23.535837 34.121998 40.281837\nv 18.174791 34.121990 42.928905\nv 12.502468 34.121605 44.850220\nv 9.961048 34.121754 45.380760\nv 9.961048 34.121754 42.954277\nv 9.961324 35.888454 44.828342\nv 9.961046 40.295662 43.229439\nv 9.961036 46.560429 40.593964\nv 9.962963 53.441536 37.397114\nv 35.059780 49.304878 20.693743\nv 29.790775 55.881805 23.021685\nv 37.033764 44.261967 21.720169\nv 11.607357 51.968620 37.611099\nv 31.313129 51.682381 24.289558\nv 33.143562 46.784557 25.567308\nv 39.895317 35.859989 23.120899\nv 13.039401 36.385727 43.939064\nv 11.669970 38.333721 43.620968\nv 13.965192 56.541145 34.529564\nv 38.283192 41.881493 21.414480\nv 38.603142 39.191235 23.010111\nv 31.683754 44.981236 28.447659\nv 34.818508 41.066490 27.324617\nv 36.337002 42.721146 23.941711\nv 11.580989 41.650627 42.358845\nv 11.619218 45.205395 40.824318\nv 15.875832 49.926178 37.150249\nv 28.899343 49.086624 28.865288\nv 41.158936 38.791836 18.291407\nv 36.038601 39.142521 26.880329\nv 37.864162 36.218826 26.025324\nv 14.763371 38.945282 42.407360\nv 16.974230 46.441490 38.349201\nv 36.054886 36.763844 28.291639\nv 32.161743 37.660744 32.246220\nv 30.818750 42.748039 30.847496\nv 18.082769 35.990761 42.345943\nv 17.098181 42.509975 40.138237\nv 21.019667 47.922699 35.592922\nv 19.945147 52.127300 33.979946\nv 17.680096 39.529907 41.140289\nv 25.663280 48.928822 31.815331\nv 33.351376 35.745262 31.889938\nv 22.766783 39.465881 38.639133\nv 23.239033 35.955673 39.801308\nv 21.816662 43.850800 37.183361\nv 26.082104 45.021809 33.721943\nv 28.350002 37.495270 35.682873\nv 23.702440 52.250137 31.406500\nv 26.862303 42.054440 34.681210\nv 28.554316 34.122078 36.925640\nv 26.963078 39.019276 36.035835\nv 26.201691 36.352821 37.688892\nvn -0.5784 -0.2869 -0.7636\nvn -0.5967 -0.3290 -0.7320\nvn -1.0000 0.0008 0.0010\nvn -1.0000 0.0010 0.0012\nvn 0.7535 0.4265 0.5003\nvn 0.1954 0.2927 0.9360\nvn 0.2721 0.4289 0.8614\nvn 0.7433 0.4409 0.5031\nvn 0.7525 0.4248 0.5033\nvn 0.8131 0.4193 0.4038\nvn 0.8616 0.2775 0.4249\nvn 0.2846 0.4305 0.8565\nvn 0.7532 0.4147 0.5106\nvn 0.7623 0.4017 0.5075\nvn 0.8578 0.2878 0.4260\nvn 0.2133 0.4116 0.8861\nvn 0.2582 0.4150 0.8725\nvn 0.2911 0.4638 0.8368\nvn 0.6770 0.4473 0.5844\nvn 0.8107 0.3670 0.4561\nvn 0.7003 0.3891 0.5985\nvn 0.7575 0.3841 0.5279\nvn 0.7627 0.3943 0.5127\nvn 0.8172 0.4036 0.4114\nvn 0.8487 0.3235 0.4185\nvn 0.1735 0.3359 0.9258\nvn 0.2900 0.4111 0.8642\nvn 0.2955 0.4244 0.8559\nvn 0.3466 0.4303 0.8335\nvn 0.6780 0.4265 0.5987\nvn 0.6777 0.4261 0.5993\nvn 0.6878 0.4128 0.5970\nvn 0.8267 0.3807 0.4144\nvn 0.7821 0.3697 0.5017\nvn 0.8357 0.3503 0.4230\nvn 0.8361 0.3588 0.4150\nvn 0.7687 0.3664 0.5243\nvn 0.8242 0.3977 0.4032\nvn 0.7832 0.3360 0.5232\nvn 0.7934 0.3249 0.5147\nvn 0.7972 0.3073 0.5196\nvn 0.2829 0.3450 0.8949\nvn 0.2820 0.3478 0.8941\nvn 0.1961 0.3533 0.9147\nvn 0.1912 0.3873 0.9019\nvn 0.6878 0.4052 0.6023\nvn 0.7753 0.3609 0.5183\nvn 0.8388 0.3395 0.4256\nvn 0.7476 0.3427 0.5690\nvn 0.7946 0.2874 0.5347\nvn 0.3078 0.3273 0.8934\nvn 0.3068 0.2918 0.9059\nvn 0.3087 0.2971 0.9036\nvn 0.2978 0.3661 0.8816\nvn 0.2950 0.3760 0.8784\nvn 0.1686 0.3822 0.9086\nvn 0.3045 0.3987 0.8651\nvn 0.4081 0.4160 0.8126\nvn 0.3997 0.4283 0.8104\nvn 0.6960 0.3831 0.6073\nvn 0.6798 0.3984 0.6158\nvn 0.7780 0.3095 0.5467\nvn 0.7755 0.3261 0.5407\nvn 0.6975 0.3552 0.6223\nvn 0.7072 0.3423 0.6186\nvn 0.3172 0.3380 0.8861\nvn 0.3111 0.3569 0.8808\nvn 0.3341 0.3991 0.8539\nvn 0.4113 0.4003 0.8189\nvn 0.4067 0.4092 0.8168\nvn 0.3996 0.4283 0.8105\nvn 0.5981 0.4258 0.6789\nvn 0.7098 0.3246 0.6252\nvn 0.7204 0.2989 0.6259\nvn 0.4239 0.2887 0.8585\nvn 0.4247 0.2932 0.8565\nvn 0.4521 0.4353 0.7785\nvn 0.5973 0.4262 0.6794\nvn 0.6892 0.3059 0.6568\nvn 0.4150 0.3617 0.8348\nvn 0.5181 0.3308 0.7888\nvn 0.5038 0.4186 0.7556\nvn 0.5012 0.4276 0.7522\nvn 0.5098 0.3977 0.7628\nvn 0.5475 0.4336 0.7157\nvn 0.5775 0.4266 0.6960\nvn 0.5487 0.4134 0.7266\nvn 0.6068 0.3844 0.6957\nvn 0.7202 0.2824 0.6337\nvn 0.5494 0.3213 0.7713\nvn 0.5514 0.3176 0.7714\nvn 0.4070 0.3889 0.8265\nvn 0.5220 0.3368 0.7836\nvn 0.4168 0.3665 0.8319\nvn 0.5137 0.4105 0.7534\nvn 0.5049 0.4304 0.7482\nvn 0.5730 0.3498 0.7412\nvn 0.4190 0.3357 0.8436\nvn 0.5150 0.3685 0.7739\nvn 0.5163 0.3833 0.7659\nvn 0.5188 0.3627 0.7741\nvn 0.0003 1.0000 0.0003\nvn 0.0002 1.0000 0.0003\nvn 0.7875 0.4303 0.4411\nvn 0.7909 0.4300 0.4355\nvn 0.0129 0.0067 -0.9999\nvn 0.0014 0.0007 -1.0000\nvn -0.0018 -0.0009 -1.0000\nvn 0.0028 0.0013 -1.0000\nvn -1.0000 -0.0000 -0.0000\nvn -0.0000 1.0000 0.0001\nvn 0.0001 1.0000 -0.0002\nvn -0.0000 1.0000 -0.0016\nvn 0.0003 1.0000 0.0012\nvn -0.0002 1.0000 -0.0010\nvn 0.0002 1.0000 0.0004\nvn 0.0001 1.0000 0.0000\nvn 0.0000 1.0000 -0.0000\nvn 0.0009 -0.0016 -1.0000\nvn 0.0002 -1.0000 0.0002\nvn -0.0000 -1.0000 -0.0000\nvn -0.0001 -1.0000 0.0000\nvn -1.0000 0.0008 0.0022\nvn -1.0000 -0.0004 -0.0011\nvn -0.0000 -1.0000 -0.0001\nvn 0.0001 -1.0000 0.0001\nvn 0.2340 0.3147 0.9199\nvn 0.2088 0.3118 0.9269\nvn -0.0001 -1.0000 -0.0002\nvn 0.0002 -1.0000 0.0003\nvn 0.0002 -1.0000 0.0004\nvn -0.0001 -0.0000 -1.0000\nvn 0.6066 0.4002 0.6869\nvn 0.5322 0.2890 0.7958\nvn 0.5284 0.2942 0.7964\nvn 0.6303 0.3051 0.7138\nvn 0.6173 0.3556 0.7018\nvn 0.4188 0.3352 0.8440\nvn -0.0002 -0.0001 -1.0000\nvn 0.6080 0.3988 0.6865\nvn 0.6293 0.3019 0.7161\nvn 0.6174 0.3559 0.7016\nusemtl Default_OBJ.002\ns off\nf 1268//2377 1275//2377 1276//2377\nf 1275//2378 1293//2378 1276//2378\nf 1276//2379 1296//2379 1297//2379\nf 1276//2380 1297//2380 1277//2380\nf 1285//2381 1299//2381 1298//2381\nf 1292//2382 1291//2382 1294//2382\nf 1277//2383 1297//2383 1301//2383\nf 1285//2384 1284//2384 1299//2384\nf 1298//2385 1299//2385 1302//2385\nf 1270//2386 1298//2386 1271//2386\nf 1274//2387 1273//2387 1286//2387\nf 1277//2388 1301//2388 1307//2388\nf 1298//2389 1302//2389 1303//2389\nf 1300//2390 1298//2390 1303//2390\nf 1286//2391 1273//2391 1304//2391\nf 1297//2392 1296//2392 1314//2392\nf 1297//2393 1314//2393 1301//2393\nf 1307//2394 1278//2394 1277//2394\nf 1284//2395 1283//2395 1299//2395\nf 1300//2396 1309//2396 1308//2396\nf 1303//2397 1310//2397 1311//2397\nf 1303//2398 1311//2398 1312//2398\nf 1303//2399 1312//2399 1300//2399\nf 1300//2400 1271//2400 1298//2400\nf 1273//2401 1317//2401 1304//2401\nf 1306//2402 1295//2402 1294//2402\nf 1301//2403 1314//2403 1315//2403\nf 1315//2404 1307//2404 1301//2404\nf 1307//2405 1315//2405 1278//2405\nf 1299//2406 1283//2406 1302//2406\nf 1302//2407 1283//2407 1316//2407\nf 1302//2408 1316//2408 1303//2408\nf 1308//2409 1272//2409 1300//2409\nf 1312//2410 1309//2410 1300//2410\nf 1308//2411 1309//2411 1317//2411\nf 1308//2412 1317//2412 1272//2412\nf 1311//2413 1318//2413 1312//2413\nf 1272//2414 1271//2414 1300//2414\nf 1309//2415 1318//2415 1319//2415\nf 1309//2416 1319//2416 1304//2416\nf 1304//2417 1319//2417 1286//2417\nf 1305//2418 1320//2418 1306//2418\nf 1306//2419 1320//2419 1313//2419\nf 1313//2420 1295//2420 1306//2420\nf 1314//2421 1296//2421 1313//2421\nf 1303//2422 1316//2422 1310//2422\nf 1312//2423 1318//2423 1309//2423\nf 1309//2424 1304//2424 1317//2424\nf 1311//2425 1322//2425 1318//2425\nf 1286//2426 1319//2426 1287//2426\nf 1305//2427 1325//2427 1320//2427\nf 1290//2428 1305//2428 1291//2428\nf 1305//2429 1290//2429 1325//2429\nf 1320//2430 1326//2430 1313//2430\nf 1313//2431 1326//2431 1314//2431\nf 1313//2432 1296//2432 1295//2432\nf 1315//2433 1314//2433 1326//2433\nf 1315//2434 1327//2434 1328//2434\nf 1315//2435 1328//2435 1278//2435\nf 1311//2436 1310//2436 1324//2436\nf 1310//2437 1316//2437 1324//2437\nf 1322//2438 1287//2438 1319//2438\nf 1322//2439 1319//2439 1318//2439\nf 1311//2440 1324//2440 1323//2440\nf 1311//2441 1323//2441 1322//2441\nf 1325//2442 1329//2442 1320//2442\nf 1320//2443 1329//2443 1326//2443\nf 1315//2444 1326//2444 1321//2444\nf 1321//2445 1334//2445 1327//2445\nf 1321//2446 1327//2446 1315//2446\nf 1328//2447 1279//2447 1278//2447\nf 1316//2448 1283//2448 1330//2448\nf 1322//2449 1323//2449 1331//2449\nf 1322//2450 1331//2450 1287//2450\nf 1290//2451 1289//2451 1325//2451\nf 1325//2452 1289//2452 1333//2452\nf 1328//2453 1280//2453 1279//2453\nf 1283//2454 1282//2454 1330//2454\nf 1331//2455 1323//2455 1288//2455\nf 1329//2456 1332//2456 1326//2456\nf 1333//2457 1341//2457 1332//2457\nf 1328//2458 1327//2458 1337//2458\nf 1328//2459 1337//2459 1280//2459\nf 1327//2460 1334//2460 1335//2460\nf 1282//2461 1281//2461 1337//2461\nf 1282//2462 1337//2462 1330//2462\nf 1330//2463 1337//2463 1335//2463\nf 1324//2464 1335//2464 1338//2464\nf 1287//2465 1331//2465 1288//2465\nf 1336//2466 1340//2466 1341//2466\nf 1336//2467 1341//2467 1339//2467\nf 1326//2468 1334//2468 1321//2468\nf 1332//2469 1341//2469 1340//2469\nf 1334//2470 1326//2470 1332//2470\nf 1327//2471 1335//2471 1337//2471\nf 1281//2472 1280//2472 1337//2472\nf 1338//2473 1340//2473 1336//2473\nf 1329//2474 1333//2474 1332//2474\nf 1334//2475 1332//2475 1338//2475\nf 1334//2476 1338//2476 1335//2476\nf 1340//2477 1338//2477 1332//2477\nf 1268//2478 1276//2478 1269//2478\nf 1276//2479 1285//2479 1269//2479\nf 1285//2480 1298//2480 1269//2480\nf 1298//2481 1270//2481 1269//2481\nf 1270//2482 1271//2482 1269//2482\nf 1271//2483 1272//2483 1269//2483\nf 1272//2484 1317//2484 1269//2484\nf 1317//2485 1273//2485 1269//2485\nf 1293//2486 1296//2486 1276//2486\nf 1277//2487 1278//2487 1276//2487\nf 1278//2488 1279//2488 1276//2488\nf 1279//2489 1280//2489 1276//2489\nf 1280//2490 1281//2490 1276//2490\nf 1281//2491 1282//2491 1276//2491\nf 1282//2492 1283//2492 1276//2492\nf 1283//2493 1284//2493 1276//2493\nf 1284//2494 1285//2494 1276//2494\nf 1274//2495 1275//2495 1273//2495\nf 1274//2496 1291//2496 1275//2496\nf 1291//2497 1293//2497 1275//2497\nf 1291//2498 1292//2498 1293//2498\nf 1292//2486 1296//2486 1293//2486\nf 1292//2499 1294//2499 1296//2499\nf 1294//2500 1295//2500 1296//2500\nf 1286//2501 1291//2501 1274//2501\nf 1287//2502 1291//2502 1286//2502\nf 1305//2503 1306//2503 1291//2503\nf 1306//2504 1294//2504 1291//2504\nf 1287//2505 1288//2505 1291//2505\nf 1288//2506 1339//2506 1291//2506\nf 1339//2502 1289//2502 1291//2502\nf 1289//2507 1290//2507 1291//2507\nf 1275//2508 1269//2508 1273//2508\nf 1335//2509 1316//2509 1330//2509\nf 1341//2510 1289//2510 1339//2510\nf 1341//2511 1333//2511 1289//2511\nf 1336//2512 1288//2512 1323//2512\nf 1323//2513 1338//2513 1336//2513\nf 1329//2514 1325//2514 1333//2514\nf 1275//2515 1268//2515 1269//2515\nf 1335//2516 1324//2516 1316//2516\nf 1336//2517 1339//2517 1288//2517\nf 1323//2518 1324//2518 1338//2518\no geometry_32.002\nv 9.957970 57.724838 35.244892\nv 9.958215 57.724968 32.378258\nv -18.986925 57.724968 28.105026\nv -18.985968 57.722195 31.400797\nv -17.846827 57.724281 32.063160\nv -14.948657 57.724335 33.501305\nv -8.632800 57.722816 35.571087\nv -4.461530 57.724167 36.330200\nv 0.237223 57.724945 36.566402\nv 4.467400 57.724140 36.328056\nv 6.182457 57.724621 36.079529\nv 9.958302 52.848225 37.669662\nv 9.958080 46.552681 40.598049\nv 9.958301 40.327976 43.232941\nv 9.958216 34.127285 45.410759\nv 9.958215 34.124062 42.954361\nv 6.365607 34.124123 46.083698\nv -0.029055 34.124058 46.502373\nv -6.339599 34.124077 46.092049\nv -12.609538 34.124008 44.831871\nv -17.207912 34.124077 43.265831\nv -18.986500 34.125416 42.556805\nv -18.986925 34.124062 39.889217\nv -18.986902 38.922859 40.759712\nv -18.987179 50.450581 35.347454\nv 6.093959 50.066830 39.752346\nv 6.399531 37.118362 45.106091\nv -17.929588 36.010540 42.394840\nv 6.466314 41.690407 43.366665\nv 5.339109 38.965324 44.544632\nv -17.711493 39.256039 41.239540\nv -15.362391 52.354092 36.135204\nv 0.019936 55.955914 37.471821\nv 6.228622 45.680977 41.710289\nv -0.057511 35.636490 46.033890\nv -14.199626 39.193604 42.500118\nv -18.986120 42.756004 39.105629\nv -16.509605 42.995621 40.136608\nv -12.574823 36.868572 43.913895\nv -12.701786 57.723904 34.366413\nv 4.834941 49.402111 40.228939\nv 4.443915 43.056824 43.017143\nv 0.002929 38.991375 44.876137\nv -16.816513 46.816662 38.239998\nv -15.601265 47.769802 38.270679\nv -10.178100 56.280739 35.947529\nv -0.645843 49.083641 40.637657\nv 1.005888 47.149494 41.501911\nv -0.061786 42.822552 43.396858\nv -11.342117 45.615810 40.727062\nv -6.030250 40.683323 43.839149\nv -11.603730 41.830166 42.280186\nv -11.427461 37.490196 43.995277\nv -10.448422 52.515533 37.725395\nv -4.730545 49.115623 40.363644\nv -5.691472 57.724106 36.168690\nv -6.090903 49.907253 39.827614\nv -6.238718 37.403790 45.034805\nv -5.450739 42.883587 43.007114\nv -7.004276 44.987347 41.874805\nvn 0.1335 -0.4053 -0.9044\nvn 0.0011 -1.0000 0.0013\nvn 0.0943 -0.4447 -0.8907\nvn -1.0000 0.0003 0.0003\nvn 0.1942 0.4368 0.8784\nvn 0.1736 0.4243 0.8887\nvn 0.1752 0.3038 0.9365\nvn -0.4557 0.4247 0.7823\nvn 0.1820 0.4147 0.8916\nvn 0.1206 0.3515 0.9284\nvn -0.3557 0.2762 0.8929\nvn -0.3076 0.2993 0.9032\nvn -0.4009 0.4281 0.8100\nvn -0.4016 0.4284 0.8094\nvn 0.1149 0.4258 0.8975\nvn 0.1295 0.4276 0.8946\nvn 0.1940 0.3251 0.9256\nvn 0.1711 0.3482 0.9217\nvn 0.0602 0.3247 0.9439\nvn 0.0617 0.3226 0.9445\nvn 0.0654 0.3090 0.9488\nvn -0.4096 0.3615 0.8376\nvn -0.3871 0.3731 0.8432\nvn -0.3049 0.3056 0.9020\nvn -0.3232 0.4367 0.8396\nvn 0.0628 0.4259 0.9026\nvn 0.0503 0.4501 0.8915\nvn 0.1271 0.4076 0.9043\nvn 0.1028 0.3865 0.9165\nvn 0.0864 0.3650 0.9270\nvn 0.0624 0.2964 0.9530\nvn -0.3062 0.3292 0.8932\nvn -0.3128 0.3371 0.8880\nvn -0.3096 0.3592 0.8804\nvn -0.3334 0.3975 0.8549\nvn -0.3862 0.3850 0.8382\nvn -0.3438 0.4112 0.8442\nvn -0.0447 0.4595 0.8871\nvn 0.0132 0.4173 0.9087\nvn 0.0537 0.4205 0.9057\nvn 0.0866 0.3963 0.9140\nvn 0.1795 0.3862 0.9048\nvn 0.1728 0.4059 0.8974\nvn 0.1842 0.3832 0.9051\nvn 0.0573 0.3886 0.9196\nvn 0.0597 0.3606 0.9308\nvn 0.0596 0.3604 0.9309\nvn -0.2979 0.3668 0.8813\nvn -0.4200 0.3982 0.8155\nvn -0.3961 0.4153 0.8189\nvn -0.2922 0.4267 0.8559\nvn 0.0702 0.3977 0.9148\nvn -0.0591 0.3266 0.9433\nvn -0.0654 0.3080 0.9491\nvn -0.0620 0.2943 0.9537\nvn -0.3001 0.3962 0.8677\nvn -0.2339 0.3111 0.9212\nvn -0.2923 0.4163 0.8610\nvn -0.2913 0.4255 0.8568\nvn -0.2482 0.4848 0.8387\nvn -0.1178 0.4259 0.8971\nvn -0.0623 0.4250 0.9030\nvn -0.0074 0.4027 0.9153\nvn -0.0595 0.3587 0.9316\nvn -0.0641 0.3454 0.9363\nvn -0.2930 0.3802 0.8773\nvn -0.1881 0.2986 0.9357\nvn -0.2891 0.4131 0.8636\nvn -0.1743 0.4247 0.8884\nvn -0.1865 0.4304 0.8832\nvn -0.0574 0.4223 0.9046\nvn -0.1072 0.4246 0.8990\nvn -0.0583 0.3980 0.9155\nvn -0.0618 0.3958 0.9163\nvn -0.0629 0.3675 0.9279\nvn -0.1821 0.3068 0.9342\nvn -0.1839 0.4121 0.8924\nvn -0.1800 0.4290 0.8852\nvn -0.1787 0.3470 0.9207\nvn -0.1834 0.3548 0.9168\nvn -0.1773 0.3751 0.9099\nvn -0.1838 0.3839 0.9049\nvn -0.1783 0.4061 0.8963\nvn -0.1457 0.3833 0.9121\nvn -0.0001 1.0000 0.0000\nvn -0.0001 1.0000 -0.0003\nvn 0.0002 1.0000 0.0005\nvn -0.0003 1.0000 -0.0002\nvn -0.0000 1.0000 0.0000\nvn 1.0000 0.0001 0.0001\nvn 1.0000 -0.0000 -0.0000\nvn -0.0000 1.0000 0.0001\nvn -0.0007 1.0000 0.0012\nvn 1.0000 0.0008 0.0017\nvn 1.0000 -0.0001 -0.0001\nvn 0.0000 -1.0000 0.0000\nvn -1.0000 -0.0000 -0.0001\nvn -0.0023 1.0000 0.0008\nvn -0.0001 1.0000 0.0002\nvn 0.0002 1.0000 -0.0000\nvn 0.0003 1.0000 -0.0001\nvn -0.1244 0.4008 0.9077\nvn -0.1214 0.3995 0.9087\nvn 0.0043 -0.9999 -0.0127\nvn -0.0004 -1.0000 0.0005\nvn -0.0000 -1.0000 0.0001\nvn -1.0000 0.0000 0.0002\nvn -1.0000 -0.0003 -0.0006\nvn -1.0000 0.0028 0.0060\nvn -0.2520 0.3468 0.9035\nvn -0.2788 0.3491 0.8946\nvn -0.4067 0.3305 0.8517\nvn -0.4343 0.3160 0.8436\nusemtl Default_OBJ.002\ns off\nf 1343//2519 1357//2519 1344//2519\nf 1357//2520 1356//2520 1358//2520\nf 1357//2521 1364//2521 1344//2521\nf 1344//2522 1366//2522 1345//2522\nf 1352//2523 1353//2523 1342//2523\nf 1353//2524 1352//2524 1367//2524\nf 1358//2525 1356//2525 1368//2525\nf 1346//2526 1345//2526 1366//2526\nf 1353//2527 1367//2527 1354//2527\nf 1368//2528 1370//2528 1371//2528\nf 1369//2529 1363//2529 1362//2529\nf 1369//2530 1362//2530 1361//2530\nf 1366//2531 1373//2531 1347//2531\nf 1366//2532 1347//2532 1346//2532\nf 1351//2533 1382//2533 1367//2533\nf 1351//2534 1367//2534 1352//2534\nf 1356//2535 1355//2535 1368//2535\nf 1368//2536 1355//2536 1370//2536\nf 1371//2537 1384//2537 1376//2537\nf 1371//2538 1376//2538 1368//2538\nf 1368//2539 1376//2539 1358//2539\nf 1372//2540 1378//2540 1365//2540\nf 1372//2541 1379//2541 1378//2541\nf 1369//2542 1361//2542 1380//2542\nf 1347//2543 1373//2543 1381//2543\nf 1351//2544 1374//2544 1382//2544\nf 1374//2545 1351//2545 1350//2545\nf 1367//2546 1382//2546 1375//2546\nf 1370//2547 1375//2547 1383//2547\nf 1370//2548 1383//2548 1371//2548\nf 1376//2549 1359//2549 1358//2549\nf 1369//2550 1380//2550 1377//2550\nf 1369//2551 1377//2551 1372//2551\nf 1372//2552 1377//2552 1379//2552\nf 1379//2553 1386//2553 1385//2553\nf 1379//2554 1385//2554 1378//2554\nf 1373//2555 1385//2555 1386//2555\nf 1374//2556 1350//2556 1349//2556\nf 1374//2557 1388//2557 1389//2557\nf 1374//2558 1389//2558 1382//2558\nf 1382//2559 1383//2559 1375//2559\nf 1375//2560 1370//2560 1354//2560\nf 1375//2561 1354//2561 1367//2561\nf 1370//2562 1355//2562 1354//2562\nf 1383//2563 1389//2563 1390//2563\nf 1371//2564 1383//2564 1390//2564\nf 1371//2565 1390//2565 1384//2565\nf 1377//2566 1393//2566 1379//2566\nf 1385//2567 1366//2567 1378//2567\nf 1366//2568 1385//2568 1373//2568\nf 1381//2569 1373//2569 1387//2569\nf 1382//2570 1389//2570 1383//2570\nf 1376//2571 1384//2571 1399//2571\nf 1376//2572 1399//2572 1360//2572\nf 1376//2573 1360//2573 1359//2573\nf 1379//2574 1391//2574 1386//2574\nf 1380//2575 1361//2575 1394//2575\nf 1373//2576 1386//2576 1395//2576\nf 1373//2577 1395//2577 1387//2577\nf 1387//2578 1348//2578 1381//2578\nf 1349//2579 1397//2579 1398//2579\nf 1374//2580 1349//2580 1396//2580\nf 1389//2581 1388//2581 1390//2581\nf 1384//2582 1390//2582 1392//2582\nf 1384//2583 1392//2583 1399//2583\nf 1393//2584 1391//2584 1379//2584\nf 1394//2585 1361//2585 1360//2585\nf 1386//2586 1391//2586 1395//2586\nf 1395//2587 1398//2587 1397//2587\nf 1395//2588 1348//2588 1387//2588\nf 1396//2589 1388//2589 1374//2589\nf 1398//2590 1396//2590 1349//2590\nf 1388//2591 1396//2591 1390//2591\nf 1390//2592 1396//2592 1400//2592\nf 1390//2593 1400//2593 1392//2593\nf 1394//2594 1360//2594 1399//2594\nf 1395//2595 1391//2595 1398//2595\nf 1397//2596 1348//2596 1395//2596\nf 1394//2597 1399//2597 1392//2597\nf 1394//2598 1392//2598 1393//2598\nf 1393//2599 1392//2599 1401//2599\nf 1393//2600 1401//2600 1391//2600\nf 1391//2601 1401//2601 1398//2601\nf 1392//2602 1400//2602 1401//2602\nf 1397//2603 1349//2603 1343//2603\nf 1349//2604 1350//2604 1343//2604\nf 1350//2605 1351//2605 1343//2605\nf 1351//2606 1352//2606 1343//2606\nf 1352//2607 1342//2607 1343//2607\nf 1342//2608 1353//2608 1343//2608\nf 1353//2609 1357//2609 1343//2609\nf 1344//2610 1397//2610 1343//2610\nf 1344//2611 1348//2611 1397//2611\nf 1354//2612 1355//2612 1353//2612\nf 1355//2613 1356//2613 1353//2613\nf 1356//2609 1357//2609 1353//2609\nf 1358//2614 1361//2614 1357//2614\nf 1361//2614 1364//2614 1357//2614\nf 1364//2615 1366//2615 1344//2615\nf 1345//2616 1346//2616 1344//2616\nf 1346//2617 1347//2617 1344//2617\nf 1347//2618 1381//2618 1344//2618\nf 1381//2619 1348//2619 1344//2619\nf 1401//2620 1396//2620 1398//2620\nf 1401//2621 1400//2621 1396//2621\nf 1359//2614 1361//2614 1358//2614\nf 1362//2622 1363//2622 1361//2622\nf 1363//2623 1364//2623 1361//2623\nf 1359//2624 1360//2624 1361//2624\nf 1363//2625 1366//2625 1364//2625\nf 1363//2626 1365//2626 1366//2626\nf 1365//2627 1378//2627 1366//2627\nf 1393//2628 1380//2628 1394//2628\nf 1393//2629 1377//2629 1380//2629\nf 1372//2630 1365//2630 1369//2630\nf 1365//2631 1363//2631 1369//2631\no geometry_33.002\nv 31.486609 2.846920 -0.007793\nv 36.438583 2.846956 -0.004406\nv 36.150665 2.846896 4.723075\nv 34.363743 2.846510 12.470582\nv 30.660711 2.846827 20.024574\nv 24.817884 2.847558 26.931206\nv 16.387260 2.846919 26.956825\nv 44.935051 15.852166 -0.007793\nv 43.493263 9.822411 -0.006496\nv 34.318333 9.780345 26.955578\nv 39.181583 15.833008 26.956890\nv 36.110394 15.852165 26.956825\nv 41.023178 15.852645 24.165674\nv 43.731148 15.852343 18.693104\nv 45.611687 15.851484 13.258113\nv 48.523697 15.877160 0.029810\nv 43.449085 10.200681 6.028940\nv 45.148975 12.469982 6.616002\nv 44.593502 13.499532 12.721530\nv 42.272999 10.125157 11.619302\nv 36.828503 12.286815 26.957087\nv 40.322765 13.957564 23.554874\nv 42.994473 13.983843 18.183846\nv 38.368385 10.812696 22.641611\nv 41.788227 12.072140 17.904600\nv 40.003483 9.664965 16.967413\nvn -0.6478 0.6699 -0.3628\nvn 0.0007 -0.0010 -1.0000\nvn 0.0030 -0.0077 1.0000\nvn 0.0005 -0.0011 1.0000\nvn -0.5418 0.8216 -0.1773\nvn 0.0001 -1.0000 0.0000\nvn 0.7025 -0.7104 0.0428\nvn 0.7865 -0.6115 0.0866\nvn 0.7682 -0.6385 0.0456\nvn 0.7045 -0.7080 0.0495\nvn 0.8835 -0.4266 0.1937\nvn 0.8406 -0.5164 0.1636\nvn 0.7846 -0.5957 0.1718\nvn 0.7713 -0.6176 0.1539\nvn 0.5269 -0.7236 0.4458\nvn 0.6334 -0.6346 0.4428\nvn 0.7522 -0.4370 0.4932\nvn 0.6910 -0.7099 0.1358\nvn 0.6779 -0.7183 0.1563\nvn 0.5945 -0.7033 0.3898\nvn 0.8530 -0.4350 0.2883\nvn 0.8580 -0.4192 0.2969\nvn 0.7929 -0.5412 0.2801\nvn 0.7596 -0.6024 0.2452\nvn 0.7271 -0.6379 0.2537\nvn 0.7195 -0.4774 0.5045\nvn 0.6989 -0.5626 0.4416\nvn 0.8098 -0.4285 0.4007\nvn 0.6728 -0.7048 0.2249\nvn 0.7584 -0.5333 0.3747\nvn 0.6246 -0.7107 0.3237\nvn 0.6926 -0.6417 0.3294\nvn 0.7328 -0.5654 0.3787\nvn 0.6245 -0.7185 0.3062\nvn 0.0002 -1.0000 0.0000\nvn -0.0002 -1.0000 -0.0001\nvn 0.0003 -0.0003 -1.0000\nvn -0.0000 0.0001 1.0000\nvn 0.0105 -0.0027 -0.9999\nvn -0.0069 1.0000 -0.0023\nvn 0.0062 0.9999 0.0112\nvn 0.0006 1.0000 0.0012\nvn 0.0058 1.0000 0.0028\nvn 0.0167 0.9998 0.0056\nvn 0.0000 -1.0000 0.0000\nusemtl Default_OBJ.002\ns off\nf 1402//2632 1408//2632 1409//2632\nf 1402//2633 1410//2633 1403//2633\nf 1408//2634 1407//2634 1411//2634\nf 1408//2635 1411//2635 1422//2635\nf 1408//2636 1413//2636 1409//2636\nf 1402//2637 1407//2637 1408//2637\nf 1410//2638 1404//2638 1403//2638\nf 1417//2639 1419//2639 1418//2639\nf 1417//2640 1418//2640 1410//2640\nf 1410//2641 1418//2641 1404//2641\nf 1417//2642 1416//2642 1420//2642\nf 1417//2643 1420//2643 1419//2643\nf 1419//2644 1420//2644 1421//2644\nf 1419//2645 1421//2645 1418//2645\nf 1407//2646 1406//2646 1411//2646\nf 1411//2647 1425//2647 1422//2647\nf 1412//2648 1423//2648 1414//2648\nf 1418//2649 1421//2649 1404//2649\nf 1404//2650 1421//2650 1405//2650\nf 1411//2651 1406//2651 1425//2651\nf 1416//2652 1424//2652 1420//2652\nf 1424//2653 1416//2653 1415//2653\nf 1420//2654 1424//2654 1426//2654\nf 1420//2655 1426//2655 1421//2655\nf 1421//2656 1426//2656 1427//2656\nf 1423//2657 1412//2657 1422//2657\nf 1423//2658 1422//2658 1425//2658\nf 1423//2659 1424//2659 1414//2659\nf 1405//2660 1421//2660 1427//2660\nf 1424//2659 1415//2659 1414//2659\nf 1424//2661 1423//2661 1426//2661\nf 1425//2662 1406//2662 1427//2662\nf 1425//2663 1427//2663 1426//2663\nf 1425//2664 1426//2664 1423//2664\nf 1406//2665 1405//2665 1427//2665\nf 1403//2666 1404//2666 1405//2666\nf 1403//2667 1405//2667 1406//2667\nf 1403//2667 1406//2667 1407//2667\nf 1409//2668 1410//2668 1402//2668\nf 1422//2669 1413//2669 1408//2669\nf 1417//2670 1410//2670 1409//2670\nf 1413//2671 1417//2671 1409//2671\nf 1412//2669 1413//2669 1422//2669\nf 1412//2672 1414//2672 1413//2672\nf 1414//2673 1417//2673 1413//2673\nf 1414//2674 1415//2674 1417//2674\nf 1415//2675 1416//2675 1417//2675\nf 1402//2676 1403//2676 1407//2676\no geometry_34.002\nv 42.922222 34.121754 -10.311353\nv 32.211956 57.743889 -10.311352\nv 35.154716 57.744045 -10.309847\nv 45.660263 34.637169 -10.278669\nv 48.595360 34.172199 -7.248462\nv 42.929295 34.145527 18.290165\nv 40.221066 34.121754 18.290777\nv 28.503511 57.742985 18.289959\nv 31.812807 57.741711 18.288841\nv 34.279892 57.744190 13.179687\nv 36.245510 57.743923 5.159904\nv 36.500721 57.743889 -3.503959\nv 48.586754 36.164078 0.201853\nv 48.603638 34.178612 7.207449\nv 37.491577 46.962402 18.289335\nvn 0.0005 0.0002 -1.0000\nvn 0.0112 0.0038 -0.9999\nvn 0.1791 -0.9315 -0.3165\nvn 0.0087 -1.0000 0.0004\nvn -0.8926 -0.4428 -0.0843\nvn -0.9045 -0.4101 -0.1173\nvn 0.0002 0.0002 1.0000\nvn 0.0003 0.0002 1.0000\nvn 0.7047 0.3195 -0.6335\nvn 1.0000 0.0065 -0.0006\nvn 0.8358 0.4178 0.3562\nvn 0.8323 0.3532 0.4272\nvn 0.8747 0.4685 -0.1243\nvn 0.8653 0.4712 -0.1711\nvn 0.8135 0.4286 0.3930\nvn 0.8582 0.4683 0.2103\nvn 0.8733 0.4693 0.1309\nvn 0.8703 0.4918 0.0256\nvn 0.0078 -1.0000 0.0007\nvn -0.0002 1.0000 0.0000\nvn -0.0001 1.0000 -0.0000\nvn 0.0001 1.0000 -0.0000\nvn 0.0088 -1.0000 0.0015\nvn 0.0004 1.0000 0.0007\nusemtl Default_OBJ.002\ns off\nf 1428//2677 1429//2677 1430//2677\nf 1428//2678 1430//2678 1431//2678\nf 1428//2679 1431//2679 1432//2679\nf 1428//2680 1432//2680 1441//2680\nf 1428//2681 1434//2681 1435//2681\nf 1428//2682 1435//2682 1429//2682\nf 1434//2683 1433//2683 1442//2683\nf 1434//2683 1442//2683 1436//2683\nf 1434//2684 1436//2684 1435//2684\nf 1432//2685 1431//2685 1430//2685\nf 1432//2686 1440//2686 1441//2686\nf 1441//2687 1437//2687 1442//2687\nf 1441//2688 1442//2688 1433//2688\nf 1432//2689 1439//2689 1440//2689\nf 1432//2690 1430//2690 1439//2690\nf 1436//2691 1442//2691 1437//2691\nf 1441//2692 1438//2692 1437//2692\nf 1441//2693 1440//2693 1438//2693\nf 1440//2694 1439//2694 1438//2694\nf 1441//2695 1434//2695 1428//2695\nf 1435//2696 1437//2696 1429//2696\nf 1437//2697 1430//2697 1429//2697\nf 1437//2698 1439//2698 1430//2698\nf 1433//2699 1434//2699 1441//2699\nf 1436//2700 1437//2700 1435//2700\nf 1438//2698 1439//2698 1437//2698\no geometry_35.002\nv -18.986979 34.124229 42.555271\nv -23.667805 34.124336 40.212147\nv -33.189785 34.124603 32.838249\nv -40.223450 34.124451 23.638350\nv -42.907970 34.124413 18.211746\nv -44.876778 34.124187 12.414827\nv -45.389557 34.124084 9.911548\nv -42.963642 34.124062 9.911532\nv -18.986927 34.124062 39.887955\nv -18.986927 57.724968 28.104319\nv -18.990198 57.724449 31.411381\nv -18.988005 55.679802 32.602825\nv -18.987078 46.130520 37.508266\nv -18.987024 39.452633 40.553646\nv -32.369640 57.724968 9.911533\nv -35.264069 57.723831 9.910964\nv -34.715881 57.724834 11.649633\nv -33.412659 57.724545 15.118312\nv -31.969692 57.724350 18.024878\nv -31.295452 57.723530 19.197796\nv -29.548592 57.724293 21.799740\nv -28.653992 57.724056 22.980034\nv -26.208012 57.724480 25.759647\nv -22.482862 57.722912 29.060383\nv -44.793259 36.023460 9.911883\nv -43.292721 40.176853 9.911530\nv -40.544971 46.696232 9.911555\nv -38.332668 51.497250 9.912535\nv -23.100294 36.074223 39.824097\nv -36.510201 55.149750 10.216454\nv -23.049192 39.271141 38.544361\nv -22.199671 42.244186 37.723103\nv -26.269176 36.339561 37.646042\nv -21.235106 47.205006 35.837040\nv -40.397141 46.275505 11.449883\nv -35.079311 54.832066 14.864776\nv -26.857824 39.117855 36.064941\nv -43.577873 38.416332 11.711747\nv -27.255884 40.907822 34.961422\nv -28.250689 36.921795 36.017265\nv -28.519518 34.124153 36.950314\nv -24.668821 50.182285 31.906578\nv -26.031563 45.045513 33.746544\nv -43.791401 36.456608 13.398704\nv -42.314426 41.735035 11.632280\nv -38.003155 48.388466 15.527068\nv -38.380592 46.379692 16.973835\nv -34.136040 52.357407 19.398096\nv -30.963943 42.244942 30.981737\nv -26.399239 56.353893 26.536051\nv -28.827005 49.248241 28.834036\nv -42.326759 39.194328 14.704427\nv -40.906281 41.249165 16.442806\nv -39.734463 43.766357 16.671137\nv -35.177567 49.028854 20.732904\nv -29.416599 44.959286 30.837080\nv -32.027714 38.275959 32.070408\nv -31.937069 35.679420 33.337952\nv -42.336136 36.074989 18.028334\nv -37.050919 44.193882 21.752337\nv -30.901249 52.761452 24.005478\nv -39.559811 42.285519 18.490725\nv -33.027378 47.247967 25.395409\nv -31.361023 44.934429 28.843473\nv -41.114655 39.119526 18.108442\nv -34.894512 41.351982 27.062445\nv -36.159592 36.788864 28.147078\nv -36.924202 34.124203 28.556355\nv -39.676212 36.232807 23.276796\nv -38.541782 39.835335 22.661274\nv -35.962341 39.186581 26.959602\nvn 0.7370 -0.3308 -0.5895\nvn 0.7724 -0.2837 -0.5682\nvn -0.0003 1.0000 0.0005\nvn -0.0000 1.0000 -0.0001\nvn -0.0004 1.0000 0.0009\nvn -0.0005 1.0000 0.0002\nvn 0.0002 -0.0001 -1.0000\nvn -0.4140 0.3201 0.8521\nvn -0.4278 0.2946 0.8545\nvn -0.8540 0.4453 0.2690\nvn -0.9364 0.2939 0.1918\nvn -0.4276 0.3522 0.8326\nvn -0.4289 0.3416 0.8363\nvn -0.5170 0.3252 0.7918\nvn -0.5208 0.3099 0.7955\nvn -0.5030 0.4347 0.7470\nvn -0.8950 0.4411 0.0659\nvn -0.8533 0.4319 0.2922\nvn -0.5235 0.3349 0.7834\nvn -0.5069 0.4291 0.7476\nvn -0.5004 0.4213 0.7563\nvn -0.9263 0.3143 0.2076\nvn -0.8764 0.4173 0.2404\nvn -0.8344 0.4533 0.3135\nvn -0.5619 0.3400 0.7541\nvn -0.5335 0.2927 0.7935\nvn -0.4050 0.4178 0.8133\nvn -0.4204 0.3927 0.8180\nvn -0.5905 0.4292 0.6834\nvn -0.9135 0.3180 0.2538\nvn -0.9251 0.3342 0.1803\nvn -0.8903 0.4102 0.1977\nvn -0.8352 0.4160 0.3596\nvn -0.8164 0.4182 0.3982\nvn -0.4036 0.3796 0.8325\nvn -0.5099 0.3905 0.7665\nvn -0.5187 0.3786 0.7666\nvn -0.6077 0.3839 0.6952\nvn -0.5411 0.3264 0.7750\nvn -0.5470 0.3117 0.7769\nvn -0.5127 0.4068 0.7561\nvn -0.5891 0.4589 0.6651\nvn -0.5979 0.4242 0.6801\nvn -0.8951 0.3429 0.2850\nvn -0.9140 0.3528 0.2002\nvn -0.8939 0.3471 0.2835\nvn -0.9057 0.2917 0.3076\nvn -0.6076 0.3834 0.6956\nvn -0.6202 0.3577 0.6981\nvn -0.6003 0.4061 0.6890\nvn -0.9046 0.2942 0.3086\nvn -0.8922 0.3306 0.3077\nvn -0.9012 0.3883 0.1928\nvn -0.9081 0.3828 0.1697\nvn -0.8659 0.3990 0.3016\nvn -0.8516 0.4022 0.3363\nvn -0.8338 0.3863 0.3944\nvn -0.8157 0.4163 0.4017\nvn -0.7822 0.4309 0.4500\nvn -0.6021 0.4043 0.6885\nvn -0.6176 0.3418 0.7083\nvn -0.6252 0.3246 0.7097\nvn -0.6249 0.3004 0.7206\nvn -0.6771 0.4255 0.6004\nvn -0.8842 0.3419 0.3184\nvn -0.8844 0.3615 0.2954\nvn -0.8171 0.4034 0.4119\nvn -0.7765 0.4283 0.4621\nvn -0.6344 0.3970 0.6633\nvn -0.6592 0.3112 0.6845\nvn -0.6345 0.2796 0.7206\nvn -0.6864 0.4152 0.5970\nvn -0.6731 0.3968 0.6241\nvn -0.8791 0.3440 0.3299\nvn -0.8575 0.3664 0.3612\nvn -0.8469 0.3698 0.3822\nvn -0.8261 0.3890 0.4078\nvn -0.7541 0.4251 0.5006\nvn -0.7503 0.4283 0.5036\nvn -0.6989 0.3573 0.6196\nvn -0.7184 0.3024 0.6265\nvn -0.7088 0.3430 0.6164\nvn -0.7107 0.3153 0.6289\nvn -0.8760 0.3818 0.2946\nvn -0.6869 0.4048 0.6036\nvn -0.8575 0.2913 0.4242\nvn -0.8558 0.2950 0.4249\nvn -0.8353 0.3601 0.4154\nvn -0.8282 0.3709 0.4201\nvn -0.7632 0.4023 0.5056\nvn -0.7168 0.4369 0.5434\nvn -0.6984 0.3907 0.5997\nvn -0.8464 0.3286 0.4191\nvn -0.8414 0.3371 0.4225\nvn -0.7737 0.3716 0.5131\nvn -0.7534 0.4184 0.5073\nvn -0.6946 0.3821 0.6095\nvn -0.7628 0.3879 0.5174\nvn -0.7843 0.3361 0.5214\nvn -0.7758 0.3579 0.5196\nvn -0.7491 0.3425 0.5671\nvn -0.7930 0.2970 0.5320\nvn -0.7877 0.3080 0.5336\nvn -0.7837 0.3263 0.5286\nvn 1.0000 0.0000 0.0000\nvn -0.0001 -1.0000 0.0001\nvn -0.0000 -1.0000 0.0001\nvn 0.0000 -1.0000 -0.0002\nvn -0.0001 -1.0000 0.0002\nvn -0.0000 -1.0000 0.0000\nvn 1.0000 0.0003 0.0004\nvn -0.0002 -1.0000 0.0001\nvn -0.0001 -1.0000 0.0000\nvn -0.0000 -0.0000 -1.0000\nvn -0.0004 1.0000 -0.0004\nvn 0.0000 1.0000 0.0001\nvn 0.0012 1.0000 0.0000\nvn -0.0008 1.0000 0.0002\nvn -0.0001 1.0000 0.0001\nvn 1.0000 0.0017 0.0010\nvn -0.8614 0.4175 0.2894\nvn -0.0018 0.0007 -1.0000\nvn 0.0005 -0.0003 -1.0000\nvn -0.0010 0.0004 -1.0000\nvn -0.0142 0.0068 -0.9999\nvn -0.6771 0.4320 0.5958\nvn -0.6782 0.4302 0.5958\nvn -0.8084 0.4306 0.4014\nvn -0.5187 0.3621 0.7745\nvn -0.8762 0.3811 0.2950\nvn -0.8589 0.4199 0.2931\nvn -0.8085 0.4293 0.4026\nvn -0.5187 0.3622 0.7744\nusemtl Default_OBJ.002\ns off\nf 1451//2701 1450//2701 1457//2701\nf 1451//2702 1457//2702 1452//2702\nf 1452//2703 1463//2703 1464//2703\nf 1452//2704 1464//2704 1465//2704\nf 1452//2705 1465//2705 1466//2705\nf 1452//2706 1466//2706 1453//2706\nf 1450//2707 1458//2707 1457//2707\nf 1443//2708 1456//2708 1471//2708\nf 1443//2709 1471//2709 1444//2709\nf 1458//2710 1472//2710 1459//2710\nf 1449//2711 1448//2711 1467//2711\nf 1456//2712 1474//2712 1473//2712\nf 1456//2713 1473//2713 1471//2713\nf 1471//2714 1473//2714 1475//2714\nf 1471//2715 1475//2715 1444//2715\nf 1453//2716 1466//2716 1454//2716\nf 1458//2717 1470//2717 1472//2717\nf 1472//2718 1478//2718 1459//2718\nf 1473//2719 1479//2719 1475//2719\nf 1466//2720 1484//2720 1454//2720\nf 1454//2721 1484//2721 1476//2721\nf 1467//2722 1448//2722 1480//2722\nf 1472//2723 1470//2723 1477//2723\nf 1478//2724 1460//2724 1459//2724\nf 1479//2725 1481//2725 1482//2725\nf 1444//2726 1475//2726 1483//2726\nf 1454//2727 1476//2727 1455//2727\nf 1476//2728 1474//2728 1455//2728\nf 1466//2729 1492//2729 1484//2729\nf 1448//2730 1486//2730 1480//2730\nf 1467//2731 1480//2731 1468//2731\nf 1469//2732 1477//2732 1470//2732\nf 1478//2733 1488//2733 1489//2733\nf 1478//2734 1489//2734 1490//2734\nf 1474//2735 1456//2735 1455//2735\nf 1476//2736 1485//2736 1474//2736\nf 1474//2737 1485//2737 1481//2737\nf 1481//2738 1485//2738 1491//2738\nf 1479//2739 1482//2739 1475//2739\nf 1475//2740 1482//2740 1483//2740\nf 1484//2741 1485//2741 1476//2741\nf 1466//2742 1465//2742 1492//2742\nf 1484//2743 1492//2743 1493//2743\nf 1486//2744 1494//2744 1480//2744\nf 1487//2745 1468//2745 1480//2745\nf 1480//2746 1494//2746 1487//2746\nf 1448//2747 1447//2747 1486//2747\nf 1485//2748 1498//2748 1491//2748\nf 1481//2749 1491//2749 1499//2749\nf 1484//2750 1493//2750 1485//2750\nf 1486//2751 1447//2751 1501//2751\nf 1486//2752 1501//2752 1494//2752\nf 1477//2753 1469//2753 1487//2753\nf 1487//2754 1469//2754 1468//2754\nf 1477//2755 1496//2755 1488//2755\nf 1489//2756 1488//2756 1496//2756\nf 1489//2757 1496//2757 1504//2757\nf 1489//2758 1497//2758 1490//2758\nf 1461//2759 1490//2759 1462//2759\nf 1485//2760 1493//2760 1498//2760\nf 1481//2761 1499//2761 1482//2761\nf 1482//2762 1499//2762 1500//2762\nf 1482//2763 1500//2763 1483//2763\nf 1492//2764 1503//2764 1493//2764\nf 1494//2765 1501//2765 1495//2765\nf 1487//2766 1494//2766 1495//2766\nf 1489//2767 1502//2767 1497//2767\nf 1490//2768 1497//2768 1462//2768\nf 1498//2769 1493//2769 1491//2769\nf 1500//2770 1499//2770 1445//2770\nf 1500//2771 1445//2771 1483//2771\nf 1493//2772 1503//2772 1505//2772\nf 1493//2773 1506//2773 1491//2773\nf 1501//2774 1507//2774 1495//2774\nf 1495//2775 1507//2775 1496//2775\nf 1496//2776 1507//2776 1504//2776\nf 1489//2777 1504//2777 1502//2777\nf 1462//2778 1497//2778 1503//2778\nf 1462//2779 1503//2779 1463//2779\nf 1491//2780 1508//2780 1499//2780\nf 1445//2781 1509//2781 1510//2781\nf 1499//2782 1508//2782 1509//2782\nf 1445//2783 1499//2783 1509//2783\nf 1487//2784 1496//2784 1477//2784\nf 1493//2785 1505//2785 1506//2785\nf 1447//2786 1446//2786 1501//2786\nf 1501//2787 1446//2787 1511//2787\nf 1507//2788 1512//2788 1504//2788\nf 1502//2789 1504//2789 1512//2789\nf 1502//2790 1505//2790 1497//2790\nf 1464//2791 1463//2791 1503//2791\nf 1505//2792 1508//2792 1506//2792\nf 1507//2793 1501//2793 1511//2793\nf 1507//2794 1511//2794 1512//2794\nf 1502//2795 1512//2795 1508//2795\nf 1505//2796 1503//2796 1497//2796\nf 1506//2797 1508//2797 1491//2797\nf 1505//2798 1502//2798 1508//2798\nf 1512//2799 1511//2799 1513//2799\nf 1512//2800 1513//2800 1508//2800\nf 1513//2801 1509//2801 1508//2801\nf 1511//2802 1446//2802 1510//2802\nf 1511//2803 1510//2803 1509//2803\nf 1511//2804 1509//2804 1513//2804\nf 1455//2805 1456//2805 1451//2805\nf 1456//2805 1443//2805 1451//2805\nf 1443//2806 1444//2806 1451//2806\nf 1444//2807 1483//2807 1451//2807\nf 1483//2808 1445//2808 1451//2808\nf 1445//2809 1510//2809 1451//2809\nf 1510//2810 1450//2810 1451//2810\nf 1452//2805 1455//2805 1451//2805\nf 1452//2811 1454//2811 1455//2811\nf 1446//2812 1450//2812 1510//2812\nf 1446//2813 1447//2813 1450//2813\nf 1447//2810 1448//2810 1450//2810\nf 1448//2810 1449//2810 1450//2810\nf 1449//2814 1458//2814 1450//2814\nf 1458//2815 1459//2815 1457//2815\nf 1459//2816 1460//2816 1457//2816\nf 1460//2816 1461//2816 1457//2816\nf 1461//2817 1462//2817 1457//2817\nf 1462//2818 1463//2818 1457//2818\nf 1463//2819 1452//2819 1457//2819\nf 1453//2820 1454//2820 1452//2820\nf 1488//2821 1472//2821 1477//2821\nf 1467//2822 1458//2822 1449//2822\nf 1467//2823 1468//2823 1458//2823\nf 1468//2824 1469//2824 1458//2824\nf 1469//2825 1470//2825 1458//2825\nf 1464//2826 1492//2826 1465//2826\nf 1503//2827 1492//2827 1464//2827\nf 1478//2828 1461//2828 1460//2828\nf 1479//2829 1474//2829 1481//2829\nf 1487//2830 1495//2830 1496//2830\nf 1488//2831 1478//2831 1472//2831\nf 1478//2832 1490//2832 1461//2832\nf 1479//2833 1473//2833 1474//2833\no geometry_36.002\nv -67.149559 34.125744 -5.925107\nv -63.559242 34.120052 -5.558481\nv -61.134285 34.121449 -1.772119\nv -62.188950 34.123795 4.365415\nv -66.098160 34.119503 6.047022\nv -68.869240 34.121422 4.861748\nv -70.693672 34.149349 -0.727373\nv -68.826439 34.130943 -4.959680\nv -68.402542 45.666893 -6.017331\nv -70.611069 42.525818 -5.251565\nv -70.391602 45.662212 -5.067962\nv -72.232773 45.674614 1.758979\nv -70.367493 45.663658 5.099576\nv -68.328972 45.663979 6.029636\nv -64.944122 45.667786 5.117542\nv -62.178028 45.670708 0.804265\nv -64.266937 45.666355 -4.724925\nv -70.901749 37.867142 -4.002948\nv -72.053856 41.092182 -2.886138\nv -71.903366 45.652534 -2.760034\nv -71.897766 37.737938 -0.000000\nv -72.619629 42.336472 0.421759\nv -70.984215 37.219326 3.597421\nv -72.044884 41.580654 3.144472\nv -69.251724 36.864899 5.468096\nv -70.628204 42.517876 5.242755\nvn 0.1016 0.0031 -0.9948\nvn -0.4947 -0.1350 -0.8585\nvn -0.2788 -0.0379 -0.9596\nvn 0.0004 1.0000 -0.0009\nvn 0.2972 0.0869 -0.9509\nvn -0.6383 -0.1619 -0.7525\nvn -0.4294 0.0827 -0.8993\nvn -0.8217 -0.0992 -0.5613\nvn -0.8642 0.0424 -0.5014\nvn -0.8333 0.0902 -0.5454\nvn -0.8484 -0.3758 -0.3727\nvn 0.8387 0.0902 -0.5371\nvn -0.0015 -1.0000 -0.0006\nvn -0.9830 -0.1439 -0.1140\nvn -0.9826 0.0375 -0.1821\nvn -0.9870 0.1435 -0.0726\nvn 0.9232 0.1613 -0.3489\nvn -0.9201 -0.3460 0.1838\nvn -0.9730 -0.1673 0.1589\nvn -0.9544 -0.2101 0.2121\nvn -0.9765 0.0275 0.2138\nvn 0.9843 0.0512 0.1691\nvn -0.8428 -0.4640 0.2728\nvn -0.8441 0.0940 0.5279\nvn -0.8662 0.1241 0.4841\nvn 0.8304 0.1635 0.5326\nvn -0.7343 -0.2425 0.6341\nvn -0.7393 -0.1539 0.6555\nvn -0.7934 -0.1312 0.5943\nvn -0.3809 -0.2499 0.8902\nvn -0.2851 -0.0312 0.9580\nvn -0.4139 0.0756 0.9072\nvn 0.3949 0.0344 0.9181\nvn -0.2139 -0.0399 0.9760\nvn 0.2598 0.0517 0.9643\nvn 0.0005 1.0000 0.0010\nvn 0.0005 -1.0000 0.0001\nvn 0.0014 -1.0000 0.0006\nvn -0.0004 1.0000 0.0028\nvn -0.0022 1.0000 0.0045\nvn -0.0122 -0.9999 -0.0010\nvn -0.0037 -1.0000 -0.0010\nvn -0.9373 -0.2513 -0.2413\nvn -0.0037 1.0000 -0.0028\nvn -0.0156 0.9999 -0.0060\nvn -0.0006 -1.0000 -0.0002\nvn 0.0003 1.0000 -0.0008\nvn -0.9338 -0.2645 -0.2409\nusemtl Default_OBJ.002\ns off\nf 1514//2834 1522//2834 1515//2834\nf 1514//2835 1521//2835 1523//2835\nf 1514//2836 1523//2836 1522//2836\nf 1522//2837 1529//2837 1530//2837\nf 1522//2838 1530//2838 1515//2838\nf 1521//2839 1531//2839 1523//2839\nf 1522//2840 1523//2840 1524//2840\nf 1531//2841 1532//2841 1523//2841\nf 1523//2842 1532//2842 1533//2842\nf 1523//2843 1533//2843 1524//2843\nf 1521//2844 1520//2844 1531//2844\nf 1530//2845 1516//2845 1515//2845\nf 1515//2846 1519//2846 1514//2846\nf 1532//2847 1534//2847 1535//2847\nf 1532//2848 1535//2848 1533//2848\nf 1533//2849 1535//2849 1525//2849\nf 1530//2850 1529//2850 1516//2850\nf 1534//2851 1520//2851 1536//2851\nf 1535//2852 1534//2852 1537//2852\nf 1534//2853 1536//2853 1537//2853\nf 1535//2854 1537//2854 1525//2854\nf 1529//2855 1517//2855 1516//2855\nf 1520//2856 1519//2856 1536//2856\nf 1537//2857 1539//2857 1526//2857\nf 1537//2858 1526//2858 1525//2858\nf 1529//2859 1528//2859 1517//2859\nf 1519//2860 1538//2860 1536//2860\nf 1536//2861 1538//2861 1539//2861\nf 1536//2862 1539//2862 1537//2862\nf 1538//2863 1519//2863 1518//2863\nf 1539//2864 1538//2864 1527//2864\nf 1539//2865 1527//2865 1526//2865\nf 1517//2866 1528//2866 1518//2866\nf 1538//2867 1518//2867 1527//2867\nf 1528//2868 1527//2868 1518//2868\nf 1529//2869 1525//2869 1528//2869\nf 1515//2870 1516//2870 1518//2870\nf 1516//2871 1517//2871 1518//2871\nf 1528//2872 1525//2872 1527//2872\nf 1525//2873 1526//2873 1527//2873\nf 1520//2874 1521//2874 1519//2874\nf 1521//2875 1514//2875 1519//2875\nf 1531//2876 1534//2876 1532//2876\nf 1522//2877 1524//2877 1525//2877\nf 1524//2878 1533//2878 1525//2878\nf 1515//2879 1518//2879 1519//2879\nf 1529//2880 1522//2880 1525//2880\nf 1531//2881 1520//2881 1534//2881\no geometry_37.002\nv 24.523043 13.790270 -39.596081\nv 24.523140 13.789572 -36.314770\nv 24.523140 34.119762 -36.780025\nv 24.522150 34.116638 -39.671131\nv 24.522715 29.717897 -41.041710\nv 24.524923 24.690821 -41.964848\nv 24.524872 21.247963 -42.128906\nv 24.523212 16.748554 -41.243526\nv 28.469267 13.790998 -36.933571\nv 32.935600 13.789962 -32.996082\nv 36.826225 13.798887 -28.635193\nv 38.386799 13.792178 -26.315582\nv 35.088360 13.789571 -26.315619\nv 35.568085 34.119762 -26.315617\nv 39.740784 16.069851 -26.316055\nv 40.770374 19.174500 -26.316265\nv 40.969547 22.373068 -26.315615\nv 40.505043 26.745752 -26.315649\nv 39.399590 31.279615 -26.315554\nv 38.444435 34.119617 -26.315592\nv 33.002171 34.119312 -33.025642\nv 28.419874 34.117153 -37.058270\nv 29.365902 16.114849 -37.676109\nv 33.572514 15.375537 -33.526825\nv 36.964447 34.113834 -28.533541\nv 29.683706 18.899961 -38.442081\nv 37.708080 30.283693 -29.237585\nv 34.119255 17.604513 -34.088909\nv 37.866806 16.342365 -29.254686\nv 33.607327 31.208807 -33.580223\nv 25.632212 18.958971 -41.174500\nv 29.813578 21.776779 -38.644241\nv 29.313559 29.972918 -37.728214\nv 34.449524 20.282749 -34.456810\nv 38.439671 18.944080 -29.685965\nv 38.249866 27.081568 -29.557146\nv 34.138428 27.265690 -34.187588\nv 34.486805 22.452301 -34.519463\nv 29.625113 26.474802 -38.329998\nv 38.654846 21.462919 -29.769247\nv 25.118383 26.611504 -41.314678\nv 34.405190 24.623308 -34.395630\nv 38.573204 24.230471 -29.707376\nvn -0.6873 0.0162 0.7262\nvn -0.6877 0.0166 0.7258\nvn 0.5017 -0.4209 -0.7558\nvn 0.5041 -0.4332 -0.7471\nvn 0.5888 -0.4432 -0.6759\nvn 0.5874 -0.4591 -0.6665\nvn 0.8008 0.2693 -0.5350\nvn 0.5455 -0.2795 -0.7901\nvn 0.7436 -0.4421 -0.5016\nvn 0.7965 0.2554 -0.5481\nvn 0.6618 -0.4632 -0.5895\nvn 0.7430 -0.4291 -0.5136\nvn 0.7220 0.2714 -0.6365\nvn 0.5396 -0.2456 -0.8053\nvn 0.6325 -0.2717 -0.7253\nvn 0.6323 -0.3317 -0.7001\nvn 0.6848 -0.4244 -0.5923\nvn 0.7019 -0.3312 -0.6306\nvn 0.7293 0.2581 -0.6337\nvn 0.5390 0.2506 -0.8041\nvn 0.4075 -0.1765 -0.8960\nvn 0.5539 -0.0777 -0.8289\nvn 0.5564 -0.0832 -0.8268\nvn 0.6533 -0.0824 -0.7526\nvn 0.7273 -0.2651 -0.6330\nvn 0.8015 -0.2658 -0.5357\nvn 0.8171 0.1992 -0.5409\nvn 0.6360 0.2700 -0.7229\nvn 0.5423 0.2468 -0.8031\nvn 0.6613 -0.1815 -0.7278\nvn 0.8014 -0.2653 -0.5361\nvn 0.8148 0.1924 -0.5469\nvn 0.6330 0.2547 -0.7311\nvn 0.7289 -0.1806 -0.6603\nvn 0.5470 0.0398 -0.8362\nvn 0.5605 0.0776 -0.8245\nvn 0.6641 -0.0330 -0.7470\nvn 0.6502 0.2005 -0.7328\nvn 0.6467 0.1849 -0.7400\nvn 0.5472 0.1768 -0.8181\nvn 0.4417 0.1622 -0.8824\nvn 0.6512 0.0766 -0.7551\nvn 0.6547 0.0676 -0.7528\nvn 0.7480 -0.0320 -0.6630\nvn 0.7523 -0.0859 -0.6533\nvn 0.8220 -0.0888 -0.5625\nvn 0.8206 0.1225 -0.5582\nvn 0.5518 0.1889 -0.8123\nvn 0.5511 0.1097 -0.8272\nvn 0.7485 0.0658 -0.6599\nvn 0.7550 0.0369 -0.6547\nvn 0.8358 -0.0519 -0.5465\nvn 0.8256 0.0369 -0.5631\nvn 0.8358 0.0888 -0.5419\nvn -1.0000 0.0000 0.0000\nvn 0.6589 0.1249 -0.7418\nvn 0.0005 1.0000 -0.0011\nvn 0.0010 1.0000 -0.0016\nvn -1.0000 -0.0000 -0.0003\nvn -1.0000 -0.0000 -0.0002\nvn 0.7442 0.1268 -0.6558\nvn 0.0001 1.0000 -0.0001\nvn 0.0178 0.9997 -0.0145\nvn -1.0000 0.0002 -0.0033\nvn -1.0000 -0.0000 -0.0019\nvn 0.0003 -1.0000 -0.0002\nvn 0.0003 -1.0000 -0.0006\nvn 0.0001 -1.0000 -0.0001\nvn -0.0000 0.0000 1.0000\nvn 0.0225 -0.9996 -0.0180\nvn 0.0008 -1.0000 -0.0003\nvn 0.0004 -0.0000 1.0000\nvn 0.0003 -0.0000 1.0000\nvn -0.0008 -0.0002 1.0000\nvn 0.0002 0.0000 1.0000\nvn 0.7380 0.1895 -0.6477\nvn -1.0000 -0.0000 0.0003\nvn 0.7470 0.1192 -0.6541\nvn 0.7333 0.1989 -0.6501\nusemtl Default_OBJ.002\ns off\nf 1541//2882 1552//2882 1553//2882\nf 1541//2883 1553//2883 1542//2883\nf 1540//2884 1547//2884 1562//2884\nf 1540//2885 1562//2885 1548//2885\nf 1548//2886 1562//2886 1563//2886\nf 1548//2887 1563//2887 1549//2887\nf 1559//2888 1558//2888 1564//2888\nf 1562//2889 1547//2889 1565//2889\nf 1550//2890 1554//2890 1551//2890\nf 1564//2891 1558//2891 1566//2891\nf 1550//2892 1549//2892 1563//2892\nf 1550//2893 1568//2893 1554//2893\nf 1564//2894 1569//2894 1560//2894\nf 1547//2895 1570//2895 1565//2895\nf 1562//2896 1565//2896 1567//2896\nf 1567//2897 1563//2897 1562//2897\nf 1550//2898 1563//2898 1568//2898\nf 1568//2899 1563//2899 1567//2899\nf 1564//2900 1566//2900 1569//2900\nf 1543//2901 1561//2901 1544//2901\nf 1570//2902 1547//2902 1546//2902\nf 1570//2903 1546//2903 1571//2903\nf 1570//2904 1571//2904 1565//2904\nf 1565//2905 1571//2905 1573//2905\nf 1568//2906 1567//2906 1574//2906\nf 1568//2907 1555//2907 1554//2907\nf 1558//2908 1557//2908 1566//2908\nf 1561//2909 1560//2909 1569//2909\nf 1572//2910 1544//2910 1561//2910\nf 1565//2911 1573//2911 1567//2911\nf 1568//2912 1574//2912 1555//2912\nf 1566//2913 1557//2913 1575//2913\nf 1561//2914 1569//2914 1572//2914\nf 1567//2915 1573//2915 1574//2915\nf 1546//2916 1545//2916 1571//2916\nf 1571//2917 1545//2917 1578//2917\nf 1577//2918 1573//2918 1571//2918\nf 1569//2919 1576//2919 1572//2919\nf 1572//2920 1576//2920 1578//2920\nf 1544//2921 1578//2921 1580//2921\nf 1544//2922 1580//2922 1545//2922\nf 1571//2923 1578//2923 1581//2923\nf 1571//2924 1581//2924 1577//2924\nf 1573//2925 1577//2925 1579//2925\nf 1573//2926 1579//2926 1574//2926\nf 1579//2927 1555//2927 1574//2927\nf 1575//2928 1557//2928 1582//2928\nf 1572//2929 1578//2929 1544//2929\nf 1580//2930 1578//2930 1545//2930\nf 1577//2931 1581//2931 1582//2931\nf 1577//2932 1582//2932 1579//2932\nf 1579//2933 1556//2933 1555//2933\nf 1579//2934 1582//2934 1556//2934\nf 1557//2935 1556//2935 1582//2935\nf 1542//2936 1540//2936 1541//2936\nf 1576//2937 1581//2937 1578//2937\nf 1542//2938 1560//2938 1543//2938\nf 1560//2939 1561//2939 1543//2939\nf 1544//2940 1547//2940 1543//2940\nf 1547//2941 1540//2941 1543//2941\nf 1575//2942 1581//2942 1576//2942\nf 1553//2943 1560//2943 1542//2943\nf 1553//2943 1559//2943 1560//2943\nf 1559//2944 1564//2944 1560//2944\nf 1545//2945 1546//2945 1544//2945\nf 1546//2946 1547//2946 1544//2946\nf 1548//2947 1541//2947 1540//2947\nf 1548//2948 1549//2948 1541//2948\nf 1549//2949 1552//2949 1541//2949\nf 1558//2950 1559//2950 1553//2950\nf 1558//2950 1552//2950 1551//2950\nf 1550//2951 1551//2951 1549//2951\nf 1551//2952 1552//2952 1549//2952\nf 1551//2953 1554//2953 1558//2953\nf 1554//2954 1555//2954 1558//2954\nf 1555//2955 1556//2955 1558//2955\nf 1556//2956 1557//2956 1558//2956\nf 1576//2957 1566//2957 1575//2957\nf 1542//2958 1543//2958 1540//2958\nf 1575//2959 1582//2959 1581//2959\nf 1558//2950 1553//2950 1552//2950\nf 1576//2960 1569//2960 1566//2960\no geometry_38.002\nv -35.943882 56.282352 -10.310613\nv -34.512623 58.882965 -10.299864\nv -33.317142 60.096207 -10.310287\nv -31.181219 61.573647 -10.307796\nv -24.056675 63.466797 -10.312233\nv -10.012507 65.327827 -10.311325\nv -10.012489 62.343250 -10.311352\nv -33.231026 56.280876 -10.311352\nv -33.359161 56.280876 9.911531\nv -36.006733 56.281116 9.911568\nv -36.930931 56.280987 5.309505\nv -37.311932 56.281052 0.128217\nv -36.953148 56.280972 -5.267474\nv -35.829422 58.555252 -5.002796\nv -10.012489 62.388092 9.911531\nv -10.012550 65.395638 9.911202\nv -24.166765 63.482887 9.912274\nv -10.011904 66.237915 -2.220884\nv -10.012477 66.134865 3.164039\nv -34.598682 60.034122 -4.788656\nv -35.852394 58.456825 5.335769\nv -34.601540 58.888607 9.906607\nv -35.998142 58.834026 0.009645\nv -34.752453 60.150509 -0.098395\nv -32.000435 61.771084 -5.291698\nv -33.032131 61.409569 2.001546\nv -28.291637 62.615063 -10.307684\nv -31.909897 61.241009 9.903167\nv -34.598682 60.034126 4.788696\nv -28.886265 62.896618 -3.750289\nv -30.645729 62.442780 2.006237\nv -28.993820 62.469872 9.908049\nv -26.866457 63.303593 2.611882\nvn -0.0292 0.0202 -0.9994\nvn 0.2526 -0.9676 0.0016\nvn -0.8607 0.4745 -0.1846\nvn 0.2531 -0.9674 0.0021\nvn 1.0000 0.0000 -0.0001\nvn -0.8745 0.4524 -0.1749\nvn -0.7043 0.6926 -0.1557\nvn -0.7628 0.6437 -0.0615\nvn -0.7498 0.6452 -0.1465\nvn -0.8922 0.4477 -0.0593\nvn -0.8637 0.4658 0.1924\nvn -0.8826 0.4354 0.1772\nvn -0.1305 0.9852 -0.1108\nvn -0.8889 0.4549 -0.0552\nvn -0.7274 0.6850 -0.0408\nvn -0.8867 0.4589 0.0568\nvn -0.5679 0.8139 -0.1226\nvn -0.3376 0.9368 -0.0920\nvn -0.6488 0.7426 0.1659\nvn -0.8943 0.4425 0.0658\nvn -0.1331 0.9852 0.1079\nvn -0.7242 0.6885 0.0392\nvn -0.3088 0.9486 -0.0687\nvn -0.7497 0.6459 0.1441\nvn -0.7698 0.6348 0.0660\nvn -0.6201 0.7836 0.0382\nvn -0.3973 0.9176 -0.0107\nvn -0.3284 0.9442 -0.0259\nvn -0.5544 0.8267 0.0964\nvn -0.1969 0.9786 -0.0599\nvn -0.1710 0.9844 -0.0403\nvn -0.3963 0.9150 0.0758\nvn -0.3873 0.9187 0.0778\nvn -0.1737 0.9848 -0.0079\nvn -0.1662 0.9859 0.0188\nvn -0.1667 0.9853 0.0375\nvn -0.2286 0.9725 0.0445\nvn -0.2234 0.9747 0.0086\nvn -0.2052 0.9774 0.0519\nvn 0.0001 0.0000 -1.0000\nvn 0.0000 -0.0002 -1.0000\nvn -0.0003 0.0002 -1.0000\nvn -0.0003 0.0003 -1.0000\nvn -0.0017 0.0042 -1.0000\nvn -0.0025 0.0070 -1.0000\nvn 1.0000 0.0000 0.0001\nvn 1.0000 -0.0002 0.0000\nvn 1.0000 0.0011 0.0001\nvn -0.0000 -1.0000 -0.0000\nvn -0.0005 -1.0000 -0.0004\nvn 0.0001 0.0001 1.0000\nvn 0.0000 -0.0002 1.0000\nvn -0.0001 -1.0000 0.0000\nvn 0.0000 -0.0001 1.0000\nvn -0.5605 0.8272 -0.0389\nvn -0.5595 0.8280 -0.0381\nvn -0.0012 0.0014 1.0000\nvn -0.0018 0.0029 1.0000\nvn -0.0044 0.0065 1.0000\nvn -0.5644 0.8161 -0.1243\nusemtl Default_OBJ.002\ns off\nf 1583//2961 1584//2961 1585//2961\nf 1590//2962 1589//2962 1591//2962\nf 1583//2963 1596//2963 1584//2963\nf 1591//2964 1589//2964 1597//2964\nf 1589//2965 1588//2965 1600//2965\nf 1583//2966 1595//2966 1596//2966\nf 1584//2967 1602//2967 1585//2967\nf 1596//2968 1605//2968 1602//2968\nf 1596//2969 1602//2969 1584//2969\nf 1595//2970 1594//2970 1596//2970\nf 1604//2971 1603//2971 1592//2971\nf 1592//2972 1603//2972 1593//2972\nf 1588//2973 1587//2973 1600//2973\nf 1594//2974 1605//2974 1596//2974\nf 1602//2975 1605//2975 1606//2975\nf 1594//2976 1603//2976 1605//2976\nf 1607//2977 1585//2977 1602//2977\nf 1607//2978 1609//2978 1586//2978\nf 1604//2979 1610//2979 1611//2979\nf 1593//2980 1603//2980 1594//2980\nf 1598//2981 1601//2981 1599//2981\nf 1605//2982 1611//2982 1606//2982\nf 1607//2983 1612//2983 1609//2983\nf 1604//2984 1611//2984 1603//2984\nf 1603//2985 1611//2985 1605//2985\nf 1606//2986 1611//2986 1608//2986\nf 1608//2987 1613//2987 1607//2987\nf 1607//2988 1613//2988 1612//2988\nf 1610//2989 1608//2989 1611//2989\nf 1612//2990 1587//2990 1609//2990\nf 1600//2991 1587//2991 1612//2991\nf 1608//2992 1610//2992 1613//2992\nf 1613//2993 1610//2993 1614//2993\nf 1600//2994 1612//2994 1615//2994\nf 1601//2995 1600//2995 1615//2995\nf 1601//2996 1615//2996 1599//2996\nf 1613//2997 1614//2997 1615//2997\nf 1612//2998 1613//2998 1615//2998\nf 1614//2999 1599//2999 1615//2999\nf 1588//3000 1589//3000 1587//3000\nf 1589//3001 1590//3001 1587//3001\nf 1590//3002 1583//3002 1587//3002\nf 1583//3003 1585//3003 1587//3003\nf 1585//3004 1586//3004 1587//3004\nf 1586//3005 1609//3005 1587//3005\nf 1598//3006 1597//3006 1600//3006\nf 1597//3007 1589//3007 1600//3007\nf 1601//3008 1598//3008 1600//3008\nf 1591//3009 1594//3009 1590//3009\nf 1594//3009 1595//3009 1590//3009\nf 1595//3010 1583//3010 1590//3010\nf 1599//3011 1597//3011 1598//3011\nf 1599//3012 1591//3012 1597//3012\nf 1592//3013 1593//3013 1591//3013\nf 1593//3009 1594//3009 1591//3009\nf 1599//3014 1592//3014 1591//3014\nf 1606//3015 1607//3015 1602//3015\nf 1606//3016 1608//3016 1607//3016\nf 1614//3017 1604//3017 1599//3017\nf 1604//3018 1592//3018 1599//3018\nf 1610//3019 1604//3019 1614//3019\nf 1607//3020 1586//3020 1585//3020\no geometry_39.001\nv -45.451477 34.134052 -10.313076\nv -40.156799 47.348103 -10.311322\nv -37.581738 47.348843 -10.311353\nv -42.884552 34.121754 -10.311353\nv -42.964596 34.121754 9.911530\nv -45.418640 34.125237 9.911576\nv -46.051636 34.134037 7.042174\nv -46.071804 34.132526 -6.797507\nv -41.709362 47.349411 -3.894894\nv -42.021275 47.352688 1.930416\nv -40.258419 47.348240 9.911494\nv -37.690491 47.348843 9.911530\nv -43.388458 39.933212 9.911745\nv -46.523937 34.124565 -0.078187\nvn -0.0000 0.0001 -1.0000\nvn 0.0007 -0.0003 -1.0000\nvn -0.0069 -1.0000 -0.0016\nvn 0.9282 -0.3721 0.0037\nvn 0.9289 -0.3704 0.0050\nvn 0.0000 -0.0000 1.0000\nvn -0.9057 0.3629 -0.2192\nvn -0.9431 0.3287 -0.0507\nvn -0.9257 0.3414 -0.1632\nvn -0.9027 0.3811 0.1996\nvn -0.9247 0.3445 0.1619\nvn -0.9240 0.3230 0.2048\nvn -0.9477 0.3131 0.0624\nvn -0.0008 -1.0000 -0.0000\nvn -0.0048 -1.0000 -0.0014\nvn -0.0003 1.0000 -0.0004\nvn 0.0009 1.0000 0.0000\nvn 0.0001 -0.0000 1.0000\nvn -0.0014 -1.0000 0.0002\nvn -0.0285 -0.9996 0.0032\nvn -0.0019 1.0000 -0.0007\nvn -0.0002 1.0000 0.0006\nvn -0.9435 0.3253 -0.0631\nusemtl Default_OBJ.002\ns off\nf 1616//3021 1617//3021 1618//3021\nf 1616//3022 1618//3022 1619//3022\nf 1616//3023 1629//3023 1623//3023\nf 1619//3024 1618//3024 1620//3024\nf 1618//3025 1627//3025 1620//3025\nf 1620//3026 1628//3026 1621//3026\nf 1624//3027 1617//3027 1616//3027\nf 1624//3028 1629//3028 1625//3028\nf 1624//3029 1616//3029 1623//3029\nf 1625//3030 1628//3030 1626//3030\nf 1625//3031 1622//3031 1628//3031\nf 1622//3032 1621//3032 1628//3032\nf 1622//3033 1625//3033 1629//3033\nf 1620//3034 1629//3034 1619//3034\nf 1629//3035 1616//3035 1619//3035\nf 1617//3036 1625//3036 1618//3036\nf 1625//3037 1627//3037 1618//3037\nf 1627//3038 1628//3038 1620//3038\nf 1621//3039 1629//3039 1620//3039\nf 1621//3040 1622//3040 1629//3040\nf 1625//3041 1617//3041 1624//3041\nf 1626//3042 1627//3042 1625//3042\nf 1626//3026 1628//3026 1627//3026\nf 1624//3043 1623//3043 1629//3043\no geometry_40.001\nv -24.193371 22.075560 42.371506\nv -24.192047 19.905497 42.173073\nv -24.190929 19.905415 39.455631\nv -24.190929 34.120361 37.003708\nv -24.191479 34.118618 39.876476\nv -24.193525 29.834879 41.214733\nv -24.197914 25.991249 42.008686\nv -29.795206 22.386202 38.625946\nv -29.730303 19.908773 38.549007\nv -34.422432 19.905441 34.406403\nv -38.522861 19.905403 29.729721\nv -42.006832 19.907888 24.528767\nv -44.756283 19.905481 18.923649\nv -45.801731 19.905416 15.880472\nv -43.370960 19.905416 15.880463\nv -41.204372 34.120361 15.880464\nv -29.549015 26.454361 38.395168\nv -43.720303 34.120277 15.880439\nv -42.622700 34.120445 18.875214\nv -39.676308 34.118790 24.521978\nv -33.035648 34.119656 32.994678\nv -28.261568 34.118179 37.159550\nv -45.938728 21.475168 15.880407\nv -45.750229 25.158871 15.880412\nv -44.789753 30.385618 15.880396\nv -43.561745 32.457935 17.848375\nv -34.220703 27.342333 34.085125\nv -44.819935 21.516859 19.106503\nv -29.166113 30.760777 37.621769\nv -34.412342 24.003046 34.469627\nv -34.513477 21.592443 34.501717\nv -33.517166 31.639322 33.516445\nv -44.727203 24.134872 19.067013\nv -43.734390 30.030161 19.036764\nv -38.273544 26.863630 29.584219\nv -44.470478 26.887043 18.844938\nv -37.720493 30.184038 29.262600\nv -38.615547 21.504074 29.817245\nv -41.025955 30.579193 24.197193\nv -37.074192 34.119030 28.376009\nv -41.585598 27.513821 24.442478\nv -42.088131 22.568691 24.598783\nv -41.944046 24.976315 24.502743\nv -38.517349 24.373360 29.751432\nvn 0.9998 0.0030 0.0202\nvn -0.5569 -0.0404 0.8296\nvn -0.5460 -0.0766 0.8343\nvn -0.0043 -1.0000 0.0057\nvn -0.0000 -1.0000 0.0000\nvn 0.7703 -0.1174 -0.6267\nvn 0.7743 -0.1076 -0.6236\nvn -0.5412 0.1707 0.8234\nvn -0.5504 0.1947 0.8119\nvn -0.6507 0.0822 0.7548\nvn -0.9425 -0.0822 0.3238\nvn -0.9419 -0.0744 0.3276\nvn -0.8948 0.3029 0.3279\nvn -0.9183 0.2629 0.2961\nvn -0.5355 0.2521 0.8061\nvn -0.6602 0.1232 0.7409\nvn -0.6612 0.0377 0.7492\nvn -0.5368 0.2553 0.8041\nvn -0.6459 0.1902 0.7393\nvn -0.6537 -0.0406 0.7557\nvn -0.6598 -0.0778 0.7474\nvn -0.9443 0.0384 0.3270\nvn -0.9464 0.0484 0.3194\nvn -0.9155 0.2275 0.3317\nvn -0.8830 0.2555 0.3938\nvn -0.6313 0.2702 0.7269\nvn -0.6499 0.2033 0.7323\nvn -0.9231 0.1960 0.3307\nvn -0.6320 0.2751 0.7245\nvn -0.7304 0.2058 0.6513\nvn -0.7399 0.1859 0.6465\nvn -0.7493 -0.0776 0.6576\nvn -0.8945 -0.0851 0.4388\nvn -0.9346 0.1144 0.3368\nvn -0.8675 0.2527 0.4284\nvn -0.8502 0.2835 0.4437\nvn -0.7495 -0.0794 0.6572\nvn -0.8917 -0.0391 0.4510\nvn -0.8976 0.0384 0.4391\nvn -0.8923 0.0712 0.4458\nvn -0.8912 0.1185 0.4379\nvn -0.9370 0.1722 0.3041\nvn -0.8824 0.1801 0.4346\nvn -0.7241 0.2737 0.6331\nvn -0.7298 0.2621 0.6314\nvn -0.8260 0.1297 0.5485\nvn -0.8253 0.1179 0.5523\nvn -0.8768 0.1952 0.4394\nvn -0.7521 0.0403 0.6578\nvn -0.8145 0.1888 0.5486\nvn -0.8149 0.1925 0.5468\nvn -0.8868 0.1358 0.4418\nvn -0.8314 0.0717 0.5510\nvn -0.8279 0.0412 0.5593\nvn -0.8356 -0.0399 0.5479\nvn -0.8283 -0.0784 0.5548\nvn -0.8004 0.2554 0.5423\nvn 1.0000 0.0004 0.0029\nvn -0.0004 1.0000 0.0006\nvn -0.0015 1.0000 0.0020\nvn 1.0000 0.0004 0.0025\nvn -0.0051 -1.0000 0.0029\nvn -0.0001 -1.0000 0.0001\nvn -0.0000 -0.0000 -1.0000\nvn -0.0000 1.0000 -0.0000\nvn -0.0002 1.0000 0.0002\nvn -0.0010 1.0000 0.0007\nvn 1.0000 0.0000 0.0002\nvn -0.7442 0.1170 0.6577\nvn 0.0002 -0.0000 -1.0000\nvn -0.0023 1.0000 0.0015\nvn -0.5513 0.0763 0.8308\nvn -0.7522 0.0408 0.6577\nvn -0.8017 0.2536 0.5413\nvn 1.0000 0.0000 0.0004\nvn -0.7445 0.1184 0.6570\nvn -0.5530 0.0805 0.8293\nusemtl Default_OBJ.002\ns off\nf 1630//3044 1635//3044 1636//3044\nf 1630//3045 1637//3045 1638//3045\nf 1630//3046 1638//3046 1631//3046\nf 1631//3047 1638//3047 1639//3047\nf 1631//3048 1639//3048 1640//3048\nf 1632//3049 1644//3049 1645//3049\nf 1632//3050 1645//3050 1633//3050\nf 1636//3051 1635//3051 1646//3051\nf 1646//3052 1635//3052 1658//3052\nf 1646//3053 1659//3053 1637//3053\nf 1652//3054 1643//3054 1642//3054\nf 1652//3055 1642//3055 1657//3055\nf 1655//3056 1648//3056 1647//3056\nf 1655//3057 1647//3057 1654//3057\nf 1635//3058 1634//3058 1658//3058\nf 1656//3059 1659//3059 1646//3059\nf 1659//3060 1660//3060 1637//3060\nf 1634//3061 1651//3061 1658//3061\nf 1646//3062 1658//3062 1656//3062\nf 1637//3063 1660//3063 1638//3063\nf 1638//3064 1660//3064 1639//3064\nf 1657//3065 1662//3065 1652//3065\nf 1652//3066 1662//3066 1653//3066\nf 1655//3067 1654//3067 1663//3067\nf 1655//3068 1663//3068 1648//3068\nf 1658//3069 1651//3069 1661//3069\nf 1661//3070 1656//3070 1658//3070\nf 1663//3071 1654//3071 1665//3071\nf 1651//3072 1650//3072 1661//3072\nf 1656//3073 1661//3073 1666//3073\nf 1656//3074 1666//3074 1664//3074\nf 1660//3075 1667//3075 1639//3075\nf 1642//3076 1641//3076 1657//3076\nf 1662//3077 1665//3077 1653//3077\nf 1648//3078 1663//3078 1668//3078\nf 1668//3079 1649//3079 1648//3079\nf 1639//3080 1667//3080 1640//3080\nf 1657//3081 1641//3081 1671//3081\nf 1657//3082 1671//3082 1662//3082\nf 1662//3083 1671//3083 1672//3083\nf 1662//3084 1672//3084 1665//3084\nf 1665//3085 1654//3085 1653//3085\nf 1663//3086 1665//3086 1670//3086\nf 1661//3087 1650//3087 1669//3087\nf 1661//3088 1669//3088 1666//3088\nf 1670//3089 1672//3089 1664//3089\nf 1664//3090 1672//3090 1673//3090\nf 1663//3091 1670//3091 1668//3091\nf 1659//3092 1667//3092 1660//3092\nf 1666//3093 1670//3093 1664//3093\nf 1666//3094 1668//3094 1670//3094\nf 1665//3095 1672//3095 1670//3095\nf 1672//3096 1671//3096 1673//3096\nf 1671//3097 1667//3097 1673//3097\nf 1641//3098 1667//3098 1671//3098\nf 1667//3099 1641//3099 1640//3099\nf 1666//3100 1649//3100 1668//3100\nf 1631//3048 1640//3048 1632//3048\nf 1640//3048 1644//3048 1632//3048\nf 1635//3101 1631//3101 1634//3101\nf 1633//3102 1650//3102 1634//3102\nf 1650//3103 1651//3103 1634//3103\nf 1635//3104 1630//3104 1631//3104\nf 1641//3105 1642//3105 1640//3105\nf 1642//3106 1643//3106 1640//3106\nf 1643//3048 1644//3048 1640//3048\nf 1643//3107 1654//3107 1644//3107\nf 1654//3107 1645//3107 1644//3107\nf 1654//3107 1647//3107 1645//3107\nf 1647//3108 1648//3108 1645//3108\nf 1648//3108 1633//3108 1645//3108\nf 1648//3109 1650//3109 1633//3109\nf 1648//3110 1669//3110 1650//3110\nf 1634//3111 1632//3111 1633//3111\nf 1673//3112 1656//3112 1664//3112\nf 1652//3113 1654//3113 1643//3113\nf 1652//3107 1653//3107 1654//3107\nf 1649//3114 1669//3114 1648//3114\nf 1636//3115 1637//3115 1630//3115\nf 1659//3116 1673//3116 1667//3116\nf 1666//3117 1669//3117 1649//3117\nf 1634//3118 1631//3118 1632//3118\nf 1673//3119 1659//3119 1656//3119\nf 1636//3120 1646//3120 1637//3120\no geometry_41.001\nv -36.433975 9.276695 15.879604\nv -45.510929 19.675930 15.926986\nv -43.032909 9.278420 2.727823\nv -42.685947 9.331577 -6.150816\nv -39.179081 9.276630 -6.085573\nv -45.745358 19.449608 -6.085573\nv -43.655781 13.560613 15.879884\nv -40.251160 9.284758 15.810348\nv -49.184452 19.449709 -6.043774\nv -49.223812 18.217299 6.778251\nv -49.197845 17.312195 -5.542735\nv -49.211754 15.292483 -0.417853\nvn -0.0021 -1.0000 0.0009\nvn 0.8356 0.5393 -0.1044\nvn 0.7533 0.6576 -0.0148\nvn -0.0001 0.9999 -0.0103\nvn -0.5283 0.8453 0.0796\nvn -1.0000 0.0057 -0.0025\nvn -1.0000 0.0013 -0.0022\nvn -0.8767 -0.2690 0.3987\nvn -0.6889 -0.7242 -0.0313\nvn -0.3453 -0.2121 -0.9142\nvn -0.7611 -0.6028 -0.2396\nvn 0.0188 0.0121 -0.9997\nvn -0.7285 -0.6673 0.1552\nvn -0.0182 -0.0307 0.9994\nvn -0.0004 -1.0000 0.0000\nvn -0.0055 -0.0094 0.9999\nvn -0.8113 -0.5421 0.2190\nvn -0.7656 -0.6128 0.1959\nvn -0.0155 -0.9999 -0.0066\nvn -0.0122 0.0028 -0.9999\nusemtl Default_OBJ.002\ns off\nf 1674//3121 1681//3121 1676//3121\nf 1674//3122 1678//3122 1679//3122\nf 1674//3123 1679//3123 1675//3123\nf 1675//3124 1679//3124 1682//3124\nf 1675//3125 1682//3125 1683//3125\nf 1683//3126 1682//3126 1684//3126\nf 1683//3127 1684//3127 1685//3127\nf 1675//3128 1683//3128 1680//3128\nf 1685//3129 1677//3129 1676//3129\nf 1682//3130 1677//3130 1684//3130\nf 1685//3131 1684//3131 1677//3131\nf 1677//3132 1679//3132 1678//3132\nf 1685//3133 1676//3133 1681//3133\nf 1680//3134 1681//3134 1674//3134\nf 1676//3135 1678//3135 1674//3135\nf 1675//3136 1680//3136 1674//3136\nf 1683//3137 1685//3137 1680//3137\nf 1685//3138 1681//3138 1680//3138\nf 1677//3139 1678//3139 1676//3139\nf 1677//3140 1682//3140 1679//3140\no geometry_42.001\nv 9.958932 65.389816 9.911688\nv -0.644363 66.389984 9.909369\nv -10.072598 64.955566 10.117582\nv 9.958121 62.402275 9.911386\nv 9.959093 62.344059 -10.311352\nv 9.957655 66.380371 0.835654\nv 5.524148 68.568573 1.501089\nv 2.825765 68.618805 -5.331401\nv -5.582288 68.602142 -1.067150\nv -1.334830 68.594673 5.464551\nv -10.005948 66.380043 -0.513316\nv -10.114663 65.136246 -10.387591\nv 9.774432 65.666931 -10.352496\nvn 0.0083 0.0901 0.9959\nvn 0.0103 -0.0001 0.9999\nvn 0.1615 0.9483 0.2732\nvn 0.4521 0.8867 0.0967\nvn 0.0015 1.0000 0.0068\nvn -0.1264 -0.9920 0.0029\nvn 0.0846 0.8978 0.4322\nvn -0.9978 0.0663 0.0026\nvn -0.1377 -0.9904 -0.0084\nvn 0.0021 -0.0123 -0.9999\nvn 0.4339 0.8987 -0.0644\nvn -0.2898 0.9381 0.1895\nvn 0.3151 0.9417 -0.1175\nvn -0.1240 0.8811 0.4563\nvn -0.1450 0.9484 -0.2822\nvn -0.4341 0.8933 0.1170\nvn -0.4569 0.8831 -0.1062\nvn -0.0217 0.8484 -0.5288\nvn 1.0000 0.0002 0.0000\nvn 1.0000 -0.0003 -0.0002\nvn 0.9983 0.0552 -0.0199\nvn 0.0032 1.0000 -0.0010\nusemtl Default_OBJ.002\ns off\nf 1686//3141 1687//3141 1688//3141\nf 1686//3142 1688//3142 1689//3142\nf 1686//3143 1692//3143 1695//3143\nf 1686//3144 1691//3144 1692//3144\nf 1694//3145 1692//3145 1693//3145\nf 1689//3146 1688//3146 1690//3146\nf 1695//3147 1687//3147 1686//3147\nf 1688//3148 1696//3148 1697//3148\nf 1688//3149 1697//3149 1690//3149\nf 1690//3150 1697//3150 1698//3150\nf 1692//3151 1691//3151 1698//3151\nf 1688//3152 1695//3152 1694//3152\nf 1692//3153 1698//3153 1693//3153\nf 1688//3154 1687//3154 1695//3154\nf 1697//3155 1694//3155 1693//3155\nf 1688//3156 1694//3156 1696//3156\nf 1697//3157 1696//3157 1694//3157\nf 1693//3158 1698//3158 1697//3158\nf 1689//3159 1690//3159 1691//3159\nf 1689//3160 1691//3160 1686//3160\nf 1690//3161 1698//3161 1691//3161\nf 1694//3162 1695//3162 1692//3162\no geometry_43.001\nv 44.883236 34.119747 -12.353340\nv 40.069256 34.119049 -23.911839\nv 38.445122 34.119732 -26.314257\nv 35.569523 34.119762 -26.314249\nv 42.398495 34.119762 -12.353225\nv 41.986660 13.789571 -12.353226\nv 44.894527 13.823040 -12.354554\nv 46.493668 17.471886 -12.357479\nv 47.884777 26.042397 -12.339236\nv 35.089050 13.789571 -26.314251\nv 41.257103 30.366117 -23.904274\nv 42.713543 34.119232 -18.687128\nv 39.845444 29.771940 -26.314207\nv 41.011925 22.750456 -26.314356\nv 40.541576 17.982670 -26.310476\nv 38.392963 13.792575 -26.314196\nv 40.189278 13.789479 -23.564335\nv 44.625443 21.963270 -19.546509\nv 41.887848 26.099199 -24.354866\nv 44.202988 18.677477 -19.865887\nv 42.229427 21.677626 -24.373205\nv 41.189838 16.252180 -24.283068\nv 43.950741 16.197191 -18.641979\nv 42.777344 13.791368 -18.392687\nvn 0.8926 0.3312 -0.3058\nvn -0.8981 0.0212 0.4393\nvn -0.8964 0.0182 0.4429\nvn 0.8785 0.2362 -0.4152\nvn 0.0009 -1.0000 -0.0017\nvn 0.8925 0.0733 -0.4451\nvn 0.8810 0.1766 -0.4389\nvn 0.8589 0.2710 -0.4347\nvn 0.9384 -0.1516 -0.3106\nvn 0.9248 -0.0828 -0.3714\nvn 0.8005 0.2578 -0.5411\nvn 0.7487 -0.4470 -0.4896\nvn 0.7382 -0.3780 -0.5587\nvn 0.8951 -0.0723 -0.4400\nvn 0.8918 0.0707 -0.4469\nvn 0.8059 0.2540 -0.5347\nvn 0.8466 -0.4434 -0.2945\nvn 0.9141 -0.2504 -0.3191\nvn 0.8618 0.0687 -0.5026\nvn 0.8292 0.1785 -0.5297\nvn 0.8019 -0.4429 -0.4011\nvn 0.8579 -0.2217 -0.4635\nvn 0.8798 -0.3858 -0.2777\nvn 0.8071 -0.4350 -0.3992\nvn 0.8569 -0.2955 -0.4223\nvn 0.8668 -0.1460 -0.4767\nvn 0.8002 0.1329 -0.5849\nvn 0.8234 -0.0817 -0.5616\nvn 0.0000 0.0018 1.0000\nvn -0.0025 0.0001 1.0000\nvn 0.0005 -0.0014 1.0000\nvn 0.0106 -0.0039 0.9999\nvn 0.0002 1.0000 -0.0002\nvn 0.0002 1.0000 -0.0001\nvn 0.0000 1.0000 -0.0001\nvn -0.0000 -1.0000 0.0000\nvn 0.0011 -1.0000 -0.0002\nvn 0.0115 -0.9999 0.0012\nvn 0.0002 0.0001 -1.0000\nvn -0.0000 0.0000 -1.0000\nvn 0.0041 -0.0012 -1.0000\nvn 0.0000 1.0000 0.0003\nusemtl Default_OBJ.002\ns off\nf 1699//3163 1707//3163 1710//3163\nf 1703//3164 1702//3164 1708//3164\nf 1703//3165 1708//3165 1704//3165\nf 1707//3166 1709//3166 1710//3166\nf 1708//3167 1714//3167 1715//3167\nf 1707//3168 1716//3168 1717//3168\nf 1707//3169 1717//3169 1709//3169\nf 1710//3170 1709//3170 1700//3170\nf 1707//3171 1706//3171 1718//3171\nf 1707//3172 1718//3172 1716//3172\nf 1700//3173 1711//3173 1701//3173\nf 1715//3174 1714//3174 1720//3174\nf 1714//3175 1713//3175 1720//3175\nf 1716//3176 1718//3176 1719//3176\nf 1716//3177 1719//3177 1717//3177\nf 1709//3178 1711//3178 1700//3178\nf 1705//3179 1722//3179 1721//3179\nf 1706//3180 1721//3180 1718//3180\nf 1717//3181 1719//3181 1712//3181\nf 1709//3182 1717//3182 1711//3182\nf 1715//3183 1720//3183 1722//3183\nf 1720//3184 1713//3184 1718//3184\nf 1705//3185 1721//3185 1706//3185\nf 1721//3186 1722//3186 1720//3186\nf 1721//3187 1720//3187 1718//3187\nf 1718//3188 1713//3188 1719//3188\nf 1717//3189 1712//3189 1711//3189\nf 1719//3190 1713//3190 1712//3190\nf 1699//3191 1703//3191 1707//3191\nf 1703//3192 1704//3192 1707//3192\nf 1704//3193 1705//3193 1707//3193\nf 1705//3194 1706//3194 1707//3194\nf 1700//3195 1702//3195 1710//3195\nf 1702//3196 1703//3196 1710//3196\nf 1703//3197 1699//3197 1710//3197\nf 1708//3198 1715//3198 1704//3198\nf 1715//3199 1722//3199 1704//3199\nf 1722//3200 1705//3200 1704//3200\nf 1712//3201 1701//3201 1711//3201\nf 1702//3202 1701//3202 1712//3202\nf 1713//3203 1714//3203 1712//3203\nf 1714//3202 1708//3202 1712//3202\nf 1708//3202 1702//3202 1712//3202\nf 1701//3204 1702//3204 1700//3204\no geometry_44.001\nv -49.248035 19.515274 -6.062037\nv -45.746342 19.449608 -6.085573\nv -43.299789 19.449608 15.880461\nv -49.200485 19.453176 6.013747\nv -46.153339 34.107594 -6.112466\nv -43.697250 34.121754 -6.085572\nv -41.206100 34.121754 15.880462\nv -49.203197 21.834522 4.957021\nv -49.201332 23.913393 -0.480642\nv -46.063530 34.103840 7.024738\nv -44.834576 34.118580 12.688026\nv -43.850666 34.065449 15.880362\nv -45.737759 25.551729 15.879145\nv -45.921318 19.539209 15.879344\nv -46.515408 34.120136 -0.005657\nv -46.284691 28.452501 12.792328\nvn 0.9842 -0.1375 -0.1116\nvn 0.9840 -0.1404 -0.1096\nvn -1.0000 0.0006 0.0039\nvn -1.0000 0.0074 0.0025\nvn -0.0057 1.0000 -0.0024\nvn -0.0000 -0.0001 1.0000\nvn -0.9486 0.0290 0.3151\nvn -0.9668 0.2045 -0.1531\nvn -0.0068 -0.0020 -1.0000\nvn -0.9648 0.2566 -0.0577\nvn -0.9260 0.2423 0.2894\nvn -0.9605 0.2163 0.1751\nvn -0.9473 0.2462 0.2049\nvn -0.9138 0.2025 0.3522\nvn -0.9659 0.2513 0.0627\nvn -0.9685 0.2329 0.0887\nvn -0.9570 0.1068 0.2699\nvn -0.0007 -1.0000 0.0001\nvn -0.0188 -0.9998 -0.0051\nvn -0.0005 1.0000 0.0001\nvn -0.0011 1.0000 0.0003\nvn -0.0213 0.9995 0.0232\nvn -0.0004 0.0001 1.0000\nvn -0.0004 0.0000 1.0000\nvn -0.0342 -0.9992 0.0201\nvn -0.0322 0.9995 0.0044\nvn 0.0110 -0.0015 -0.9999\nvn -0.9587 0.1145 0.2604\nusemtl Default_OBJ.002\ns off\nf 1724//3205 1728//3205 1729//3205\nf 1724//3206 1729//3206 1725//3206\nf 1723//3207 1726//3207 1730//3207\nf 1723//3208 1730//3208 1731//3208\nf 1728//3209 1727//3209 1737//3209\nf 1729//3210 1734//3210 1735//3210\nf 1726//3211 1736//3211 1735//3211\nf 1727//3212 1723//3212 1731//3212\nf 1727//3213 1724//3213 1723//3213\nf 1731//3214 1737//3214 1727//3214\nf 1738//3215 1734//3215 1733//3215\nf 1730//3216 1738//3216 1732//3216\nf 1733//3217 1732//3217 1738//3217\nf 1738//3218 1735//3218 1734//3218\nf 1731//3219 1732//3219 1737//3219\nf 1730//3220 1732//3220 1731//3220\nf 1738//3221 1726//3221 1735//3221\nf 1725//3222 1726//3222 1724//3222\nf 1726//3223 1723//3223 1724//3223\nf 1737//3224 1729//3224 1728//3224\nf 1737//3225 1733//3225 1729//3225\nf 1733//3226 1734//3226 1729//3226\nf 1735//3227 1725//3227 1729//3227\nf 1735//3228 1736//3228 1725//3228\nf 1736//3229 1726//3229 1725//3229\nf 1732//3230 1733//3230 1737//3230\nf 1727//3231 1728//3231 1724//3231\nf 1738//3232 1730//3232 1726//3232\no geometry_45.001\nv -34.672398 56.393318 -10.515924\nv -39.163708 47.253242 -10.567141\nv -35.181740 56.375027 10.040940\nv -38.952522 47.183575 10.289031\nv -47.894459 52.938229 -5.554473\nv -47.904175 54.552109 0.000845\nv -47.881779 48.684155 -4.938728\nv -47.896519 47.838757 2.311414\nv -47.892960 49.833080 5.708496\nv -47.892113 53.092278 5.524399\nvn 0.9251 -0.3789 0.0226\nvn 0.8975 -0.4409 -0.0106\nvn -0.3352 0.9046 -0.2634\nvn -0.5523 -0.1210 -0.8248\nvn -0.2316 -0.9662 -0.1131\nvn -1.0000 -0.0033 -0.0024\nvn -1.0000 -0.0004 0.0021\nvn -0.3890 0.1962 -0.9001\nvn -0.3225 0.9150 0.2425\nvn -0.4435 0.0507 0.8949\nvn -0.4579 -0.7664 0.4504\nvn -0.0707 -0.9975 -0.0026\nvn -0.1398 0.9902 -0.0026\nvn -0.3697 0.1763 0.9123\nvn -1.0000 -0.0016 -0.0013\nvn -1.0000 0.0003 0.0009\nusemtl Default_OBJ.002\ns off\nf 1739//3233 1741//3233 1742//3233\nf 1739//3234 1742//3234 1740//3234\nf 1739//3235 1743//3235 1744//3235\nf 1740//3236 1745//3236 1743//3236\nf 1740//3237 1746//3237 1745//3237\nf 1743//3238 1745//3238 1746//3238\nf 1746//3239 1748//3239 1744//3239\nf 1743//3240 1739//3240 1740//3240\nf 1741//3241 1744//3241 1748//3241\nf 1742//3242 1748//3242 1747//3242\nf 1742//3243 1747//3243 1746//3243\nf 1746//3244 1740//3244 1742//3244\nf 1744//3245 1741//3245 1739//3245\nf 1748//3246 1742//3246 1741//3246\nf 1746//3247 1744//3247 1743//3247\nf 1746//3248 1747//3248 1748//3248\no geometry_46\nv -0.426685 34.121731 46.478935\nv -0.426442 34.121750 44.086346\nv -24.188803 34.121754 37.007061\nv -24.173706 34.120602 39.935043\nv -18.149988 34.121971 42.930836\nv -12.681531 34.115654 44.838837\nv -6.543743 34.117298 46.082718\nv -0.427192 31.008402 47.337559\nv -0.429338 26.735306 48.202232\nv -0.427515 22.527836 48.572720\nv -0.426473 19.839748 48.471924\nv -0.426442 19.834778 46.127754\nv -6.683610 19.834764 48.024971\nv -12.939203 19.834780 46.773323\nv -18.926733 19.838036 44.767620\nv -24.187674 19.834814 42.158920\nv -24.188803 19.834778 39.449051\nv -24.190987 22.279413 42.352886\nv -24.184845 27.277756 41.766373\nv -24.187910 30.271975 41.104988\nv -6.563752 29.011240 47.381153\nv -18.368984 32.715954 43.295273\nv -6.648828 25.221451 47.963215\nv -6.916677 21.782839 48.132668\nv -18.961266 22.417936 44.873089\nv -19.191023 29.927515 43.682125\nv -12.747777 28.813358 46.209606\nv -18.982748 24.679743 44.714523\nv -13.112932 24.815023 46.704720\nv -13.114459 21.559750 46.861649\nv -18.851665 27.758116 44.312561\nvn 0.2829 -0.1357 -0.9495\nvn 0.0006 -1.0000 0.0021\nvn 0.2670 -0.1624 -0.9499\nvn -1.0000 0.0053 0.0052\nvn -0.0625 0.2654 0.9621\nvn -0.0732 0.2461 0.9665\nvn -0.4348 0.2634 0.8612\nvn -0.0575 0.1980 0.9785\nvn -0.0595 0.0875 0.9944\nvn -0.0738 0.0548 0.9958\nvn -0.0633 -0.0374 0.9973\nvn -0.0711 -0.0635 0.9954\nvn -0.4306 0.2474 0.8680\nvn -0.1925 0.2479 0.9495\nvn -0.1881 0.2427 0.9517\nvn -0.4431 -0.0715 0.8936\nvn -0.4328 -0.0426 0.9005\nvn -0.4264 0.2886 0.8573\nvn -0.0751 0.1530 0.9854\nvn -0.4346 0.0589 0.8987\nvn -0.3156 0.2838 0.9054\nvn -0.1946 0.0634 0.9788\nvn -0.4503 0.1046 0.8867\nvn -0.4368 0.1347 0.8894\nvn -0.4392 0.1933 0.8774\nvn -0.3091 0.2417 0.9198\nvn -0.1887 0.1532 0.9700\nvn -0.1976 0.1382 0.9705\nvn -0.2023 0.0473 0.9782\nvn -0.1980 -0.0702 0.9777\nvn -0.1956 -0.0774 0.9776\nvn -0.4369 0.1873 0.8798\nvn -0.3166 -0.0806 0.9451\nvn -0.3273 -0.0430 0.9439\nvn -0.3218 0.0632 0.9447\nvn -0.3156 0.0458 0.9478\nvn -0.3164 0.1450 0.9375\nvn -0.0004 1.0000 0.0004\nvn -0.0022 1.0000 0.0097\nvn -0.0011 1.0000 0.0054\nvn 0.0000 1.0000 0.0000\nvn 0.0000 1.0000 -0.0001\nvn -1.0000 -0.0001 -0.0007\nvn -1.0000 0.0005 0.0007\nvn -0.3224 0.2227 0.9200\nvn 1.0000 -0.0001 0.0001\nvn 1.0000 -0.0000 0.0002\nvn 1.0000 0.0001 0.0004\nvn -0.0000 -1.0000 0.0000\nvn -1.0000 -0.0014 0.0004\nvn -0.9998 0.0038 0.0217\nvn 1.0000 0.0004 0.0000\nvn -0.3237 0.2170 0.9209\nvn 1.0000 0.0012 0.0082\nvn -0.0030 -1.0000 0.0072\nvn -0.3209 0.1361 0.9373\nusemtl Default_OBJ.002\ns off\nf 1750//3249 1760//3249 1751//3249\nf 1760//3250 1759//3250 1761//3250\nf 1760//3251 1765//3251 1751//3251\nf 1751//3252 1768//3252 1752//3252\nf 1749//3253 1755//3253 1756//3253\nf 1755//3254 1769//3254 1756//3254\nf 1752//3255 1768//3255 1770//3255\nf 1756//3256 1769//3256 1757//3256\nf 1758//3257 1757//3257 1771//3257\nf 1758//3258 1771//3258 1772//3258\nf 1758//3259 1772//3259 1759//3259\nf 1759//3260 1772//3260 1761//3260\nf 1770//3261 1768//3261 1774//3261\nf 1755//3262 1754//3262 1775//3262\nf 1755//3263 1775//3263 1769//3263\nf 1764//3264 1763//3264 1766//3264\nf 1766//3265 1763//3265 1773//3265\nf 1770//3266 1753//3266 1752//3266\nf 1771//3267 1757//3267 1769//3267\nf 1766//3268 1773//3268 1776//3268\nf 1754//3269 1753//3269 1770//3269\nf 1771//3270 1777//3270 1772//3270\nf 1776//3271 1767//3271 1766//3271\nf 1776//3272 1779//3272 1767//3272\nf 1768//3273 1767//3273 1774//3273\nf 1770//3274 1775//3274 1754//3274\nf 1775//3275 1771//3275 1769//3275\nf 1771//3276 1775//3276 1777//3276\nf 1772//3277 1777//3277 1778//3277\nf 1772//3278 1778//3278 1762//3278\nf 1772//3279 1762//3279 1761//3279\nf 1767//3280 1779//3280 1774//3280\nf 1763//3281 1762//3281 1778//3281\nf 1763//3282 1778//3282 1773//3282\nf 1776//3283 1773//3283 1777//3283\nf 1773//3284 1778//3284 1777//3284\nf 1779//3285 1777//3285 1775//3285\nf 1751//3286 1752//3286 1753//3286\nf 1754//3287 1755//3287 1753//3287\nf 1755//3288 1749//3288 1753//3288\nf 1749//3289 1750//3289 1753//3289\nf 1750//3290 1751//3290 1753//3290\nf 1765//3291 1766//3291 1751//3291\nf 1766//3292 1768//3292 1751//3292\nf 1774//3293 1775//3293 1770//3293\nf 1756//3294 1750//3294 1749//3294\nf 1756//3295 1758//3295 1750//3295\nf 1758//3296 1760//3296 1750//3296\nf 1761//3297 1764//3297 1765//3297\nf 1764//3298 1766//3298 1765//3298\nf 1760//3297 1761//3297 1765//3297\nf 1767//3299 1768//3299 1766//3299\nf 1758//3300 1759//3300 1760//3300\nf 1779//3301 1775//3301 1774//3301\nf 1757//3302 1758//3302 1756//3302\nf 1762//3297 1764//3297 1761//3297\nf 1762//3303 1763//3303 1764//3303\nf 1779//3304 1776//3304 1777//3304\no geometry_47\nv -65.224503 49.395016 -5.985294\nv -47.895557 52.318279 -5.744940\nv -68.612274 45.664402 -5.976897\nv -68.704170 48.645714 -5.232743\nv -47.896572 53.598541 -4.349487\nv -47.895519 54.533520 -1.353565\nv -47.898556 54.043079 3.665148\nv -47.895893 52.290596 5.745998\nv -47.896465 49.796444 5.678252\nv -47.895096 47.851490 2.313609\nv -47.895977 48.259056 -3.522586\nv -47.896629 49.877876 -5.692702\nv -64.821175 45.667210 -5.171934\nv -62.972485 45.669849 4.166289\nv -68.286995 45.629963 6.039442\nv -70.500076 45.667736 5.011324\nv -71.966316 45.684025 2.534800\nv -72.340553 45.711319 -0.025632\nv -71.656784 45.696808 -3.573065\nv -64.149963 51.174084 -5.318229\nv -57.429741 52.327888 -5.478850\nv -70.049164 49.249733 -3.088315\nv -67.763603 51.067986 -3.161630\nv -62.345634 52.475342 -4.191894\nv -65.521767 52.333157 -2.301709\nv -56.970909 53.624859 -3.505625\nv -62.494675 53.387432 -0.728244\nv -68.257179 51.318707 0.000002\nv -70.724518 49.172596 0.000002\nv -65.540779 52.347324 2.240054\nv -55.603638 54.306870 0.008680\nv -70.027565 49.224373 3.193663\nv -67.763603 51.067986 3.161634\nv -60.535915 53.547958 2.233622\nv -53.763672 53.699585 3.778124\nv -62.345634 52.475338 4.191899\nv -70.011024 47.157581 5.021852\nv -66.448906 50.323380 5.234722\nv -58.605816 52.349392 5.319295\nv -65.214966 49.405041 5.984255\nvn 0.0168 -0.0175 -0.9997\nvn -0.2523 0.2270 -0.9406\nvn -0.0268 0.2390 -0.9707\nvn 0.0181 -0.0214 -0.9996\nvn 0.1504 -0.6920 -0.7061\nvn -0.2831 0.4819 -0.8292\nvn -0.0900 0.3968 -0.9135\nvn 0.1781 -0.7887 -0.5884\nvn -0.6091 0.1744 -0.7737\nvn -0.3898 0.6812 -0.6197\nvn -0.1449 0.7547 -0.6399\nvn -0.5404 0.6581 -0.5243\nvn -0.7200 0.4029 -0.5651\nvn -0.0181 0.7367 -0.6759\nvn -0.0249 0.9543 -0.2978\nvn 0.1576 -0.9851 -0.0688\nvn -0.1128 0.8422 -0.5273\nvn -0.0479 0.8398 -0.5408\nvn 0.1399 -0.9898 -0.0274\nvn -0.6179 0.7703 -0.1575\nvn -0.4455 0.8843 -0.1397\nvn -0.1957 0.9462 -0.2576\nvn -0.1705 0.9510 -0.2578\nvn -0.6512 0.7487 -0.1237\nvn -0.3510 0.9364 -0.0044\nvn -0.1155 0.9826 -0.1457\nvn -0.0587 0.9840 -0.1681\nvn -0.3269 0.9450 -0.0043\nvn -0.6507 0.7481 0.1299\nvn -0.6222 0.7668 0.1579\nvn -0.4496 0.8822 0.1401\nvn -0.0121 0.9952 0.0972\nvn -0.2320 0.9675 0.1010\nvn -0.1360 0.9900 0.0363\nvn -0.2220 0.9269 0.3026\nvn -0.8240 0.3717 0.4276\nvn -0.8282 0.2684 0.4921\nvn -0.0539 0.9814 0.1844\nvn -0.5181 0.6460 0.5606\nvn -0.0652 0.9797 0.1897\nvn -0.0357 0.8046 0.5927\nvn 0.1836 -0.8510 0.4920\nvn 0.1820 -0.8476 0.4984\nvn -0.5338 0.5579 0.6355\nvn -0.4159 0.1302 0.9000\nvn -0.8919 0.4177 -0.1736\nvn -0.0215 0.7647 0.6440\nvn -0.1866 0.6931 0.6963\nvn -0.1400 0.5064 0.8509\nvn -0.3213 0.3011 0.8978\nvn -0.3068 0.2630 0.9147\nvn 0.0233 -0.0272 0.9994\nvn 0.0131 0.0040 0.9999\nvn -0.0364 0.2972 0.9541\nvn -0.0128 -0.9999 -0.0027\nvn -0.3163 0.8277 0.4635\nvn -0.0123 -0.9999 -0.0025\nvn 1.0000 -0.0006 -0.0002\nvn 1.0000 -0.0002 -0.0001\nvn 1.0000 0.0004 0.0002\nvn 1.0000 0.0001 -0.0001\nvn 1.0000 0.0001 -0.0002\nvn 1.0000 -0.0004 0.0011\nvn -0.0435 -0.9990 -0.0043\nvn -0.0193 -0.9998 0.0049\nvn 0.0071 -1.0000 -0.0011\nvn -0.8761 0.4456 0.1840\nvn 1.0000 0.0025 0.0009\nvn -0.2975 0.8381 -0.4573\nvn -0.1051 0.8880 0.4478\nvn -0.1109 0.9112 0.3967\nvn -0.8860 0.4259 -0.1831\nvn -0.2812 0.8325 0.4774\nvn 0.0014 -1.0000 -0.0029\nvn -0.8981 0.4183 0.1357\nvn -0.3115 0.8309 -0.4610\nusemtl Default_OBJ.002\ns off\nf 1780//3305 1781//3305 1782//3305\nf 1780//3306 1782//3306 1783//3306\nf 1780//3307 1800//3307 1781//3307\nf 1781//3308 1791//3308 1782//3308\nf 1782//3309 1791//3309 1792//3309\nf 1780//3310 1783//3310 1799//3310\nf 1780//3311 1799//3311 1800//3311\nf 1792//3312 1791//3312 1790//3312\nf 1782//3313 1798//3313 1783//3313\nf 1783//3314 1802//3314 1799//3314\nf 1799//3315 1803//3315 1800//3315\nf 1801//3316 1802//3316 1783//3316\nf 1798//3317 1801//3317 1783//3317\nf 1800//3318 1784//3318 1781//3318\nf 1784//3319 1805//3319 1785//3319\nf 1790//3320 1789//3320 1792//3320\nf 1803//3321 1805//3321 1800//3321\nf 1800//3322 1805//3322 1784//3322\nf 1789//3323 1793//3323 1792//3323\nf 1802//3324 1801//3324 1807//3324\nf 1802//3325 1807//3325 1804//3325\nf 1804//3326 1806//3326 1803//3326\nf 1803//3327 1806//3327 1805//3327\nf 1801//3328 1808//3328 1807//3328\nf 1807//3329 1809//3329 1804//3329\nf 1805//3330 1806//3330 1810//3330\nf 1805//3331 1810//3331 1785//3331\nf 1806//3332 1804//3332 1809//3332\nf 1807//3333 1808//3333 1811//3333\nf 1807//3334 1811//3334 1812//3334\nf 1807//3335 1812//3335 1809//3335\nf 1785//3336 1810//3336 1786//3336\nf 1806//3337 1809//3337 1813//3337\nf 1806//3338 1813//3338 1810//3338\nf 1813//3339 1809//3339 1815//3339\nf 1796//3340 1816//3340 1811//3340\nf 1796//3341 1795//3341 1816//3341\nf 1786//3342 1810//3342 1814//3342\nf 1812//3343 1811//3343 1817//3343\nf 1810//3344 1813//3344 1814//3344\nf 1814//3345 1818//3345 1786//3345\nf 1793//3346 1789//3346 1788//3346\nf 1793//3347 1788//3347 1794//3347\nf 1811//3348 1816//3348 1817//3348\nf 1816//3349 1795//3349 1794//3349\nf 1808//3350 1798//3350 1797//3350\nf 1786//3351 1818//3351 1787//3351\nf 1815//3352 1817//3352 1818//3352\nf 1817//3353 1819//3353 1818//3353\nf 1817//3354 1816//3354 1819//3354\nf 1794//3355 1819//3355 1816//3355\nf 1794//3356 1788//3356 1787//3356\nf 1794//3357 1787//3357 1819//3357\nf 1787//3358 1818//3358 1819//3358\nf 1796//3359 1798//3359 1782//3359\nf 1809//3360 1817//3360 1815//3360\nf 1794//3361 1796//3361 1782//3361\nf 1784//3362 1785//3362 1787//3362\nf 1784//3363 1787//3363 1788//3363\nf 1784//3364 1788//3364 1789//3364\nf 1784//3365 1789//3365 1790//3365\nf 1784//3366 1790//3366 1791//3366\nf 1784//3367 1791//3367 1781//3367\nf 1797//3368 1798//3368 1796//3368\nf 1794//3369 1795//3369 1796//3369\nf 1794//3370 1792//3370 1793//3370\nf 1808//3371 1796//3371 1811//3371\nf 1785//3372 1786//3372 1787//3372\nf 1804//3373 1799//3373 1802//3373\nf 1814//3374 1815//3374 1818//3374\nf 1815//3375 1814//3375 1813//3375\nf 1808//3376 1801//3376 1798//3376\nf 1809//3377 1812//3377 1817//3377\nf 1794//3378 1782//3378 1792//3378\nf 1808//3379 1797//3379 1796//3379\nf 1804//3380 1803//3380 1799//3380\no geometry_48\nv -24.190195 19.904131 42.196930\nv -24.190805 16.406166 41.299442\nv -24.188824 10.619738 37.102348\nv -24.188890 9.276576 35.604752\nv -24.188807 9.276629 31.584078\nv -24.188807 19.904022 39.456463\nv -43.372101 19.904024 15.880463\nv -45.808105 19.903114 15.880345\nv -38.513237 19.903555 29.749361\nv -34.403324 19.903200 34.436432\nv -29.731516 19.903564 38.526707\nv -25.559874 18.781683 41.180321\nv -36.434090 9.278600 15.880465\nv -29.665993 18.834362 38.433975\nv -26.888988 9.276722 33.698723\nv -30.451653 9.282282 30.607029\nv -33.996193 9.286553 26.621643\nv -40.062225 9.276379 15.893250\nv -43.120323 12.849727 15.881300\nv -45.047630 16.556011 15.880505\nv -29.348433 16.183735 37.725975\nv -34.033604 17.437799 34.118111\nv -26.925602 10.352790 34.978542\nv -44.860073 19.888680 18.731367\nv -33.257008 14.564348 33.318577\nv -24.189440 13.539230 39.648769\nv -42.893742 18.640181 22.427641\nv -28.203926 13.527331 36.966125\nv -32.125050 11.961482 32.147392\nv -43.799992 16.053514 18.831030\nv -38.441864 18.836714 29.656324\nv -37.832378 16.367287 29.312456\nv -42.206028 12.808663 18.281775\nv -37.180916 9.287938 21.893406\nv -41.842823 19.892786 24.821310\nv -39.140785 11.982856 23.076679\nv -40.405354 14.154884 23.629110\nv -41.127235 16.356253 24.439566\nv -37.045223 13.891659 28.423557\nv -35.942593 12.017993 27.864758\nvn 0.0000 1.0000 -0.0000\nvn -0.0004 1.0000 0.0003\nvn -0.0004 1.0000 0.0005\nvn -0.0002 1.0000 0.0001\nvn 0.7177 0.4145 -0.5596\nvn 0.6920 0.4518 -0.5630\nvn -0.4581 -0.2208 0.8610\nvn 0.0006 -1.0000 -0.0006\nvn -0.0035 -0.0064 -1.0000\nvn 0.0000 0.0000 -1.0000\nvn -0.6551 -0.1050 0.7482\nvn -0.4070 -0.6800 0.6099\nvn -0.6318 -0.2698 0.7267\nvn -0.6579 -0.1927 0.7281\nvn -0.6277 -0.3615 0.6895\nvn -0.5014 -0.4307 0.7504\nvn -0.5001 -0.4323 0.7503\nvn -0.4830 -0.6770 0.5554\nvn -0.4096 -0.7040 0.5802\nvn -0.9279 -0.2108 0.3075\nvn -0.4547 -0.5969 0.6610\nvn -0.5186 -0.5939 0.6150\nvn -0.9078 -0.2420 0.3426\nvn -0.8888 -0.2354 0.3933\nvn -0.8919 -0.0963 0.4419\nvn -0.7476 -0.1072 0.6555\nvn -0.7276 -0.1941 0.6580\nvn -0.7261 -0.2674 0.6335\nvn -0.6908 -0.3610 0.6265\nvn -0.5823 -0.4454 0.6801\nvn -0.4484 -0.5876 0.6736\nvn -0.5095 -0.6454 0.5690\nvn -0.7324 -0.6259 0.2682\nvn -0.5651 -0.5302 0.6321\nvn -0.6878 -0.6458 0.3315\nvn -0.6908 -0.6430 0.3308\nvn -0.8116 -0.4168 0.4093\nvn -0.8579 -0.2896 0.4245\nvn -0.8441 -0.2234 0.4875\nvn -0.8240 -0.1037 0.5570\nvn -0.6848 -0.4292 0.5889\nvn -0.5700 -0.6471 0.5063\nvn -0.8009 -0.4586 0.3851\nvn -0.8196 -0.2228 0.5278\nvn -0.7969 -0.2718 0.5395\nvn -0.7500 -0.4307 0.5020\nvn -0.5769 -0.6413 0.5058\nvn -0.8319 -0.4610 0.3090\nvn -0.8506 -0.4423 0.2844\nvn -0.7075 -0.5306 0.4667\nvn -0.6939 -0.5477 0.4675\nvn -0.7504 -0.5355 0.3875\nvn -0.6329 -0.6455 0.4275\nvn -0.6325 -0.6470 0.4258\nvn 1.0000 -0.0003 0.0005\nvn 1.0000 -0.0001 0.0010\nvn 1.0000 -0.0001 0.0001\nvn -0.5504 -0.0810 0.8310\nvn 1.0000 0.0003 -0.0001\nvn 1.0000 -0.0001 0.0000\nvn 0.0000 -1.0000 -0.0000\nvn -0.0002 -0.0002 -1.0000\nvn -0.0352 0.9992 0.0168\nvn -0.0144 0.9999 0.0075\nvn 0.0006 0.0001 -1.0000\nvn -0.5538 -0.1056 0.8259\nvn -0.0001 -1.0000 0.0001\nvn -0.0044 -1.0000 0.0033\nvn -0.0062 -1.0000 0.0045\nvn -0.0115 -0.9999 0.0074\nvn -0.5366 -0.2772 0.7970\nvn -0.6342 -0.5294 0.5635\nvn -0.7508 -0.4214 0.5086\nvn -0.5402 -0.2714 0.7966\nvn -0.6326 -0.5383 0.5568\nusemtl Default_OBJ.002\ns off\nf 1820//3381 1825//3381 1826//3381\nf 1820//3382 1826//3382 1827//3382\nf 1820//3383 1828//3383 1829//3383\nf 1820//3384 1829//3384 1830//3384\nf 1825//3385 1824//3385 1832//3385\nf 1825//3386 1832//3386 1826//3386\nf 1820//3387 1831//3387 1821//3387\nf 1824//3388 1837//3388 1832//3388\nf 1832//3389 1837//3389 1838//3389\nf 1832//3390 1827//3390 1826//3390\nf 1833//3391 1830//3391 1829//3391\nf 1822//3392 1842//3392 1823//3392\nf 1833//3393 1841//3393 1840//3393\nf 1829//3394 1841//3394 1833//3394\nf 1840//3395 1841//3395 1844//3395\nf 1840//3396 1847//3396 1821//3396\nf 1821//3397 1847//3397 1845//3397\nf 1842//3398 1835//3398 1834//3398\nf 1842//3399 1834//3399 1823//3399\nf 1827//3400 1839//3400 1843//3400\nf 1842//3401 1822//3401 1847//3401\nf 1842//3402 1847//3402 1848//3402\nf 1843//3403 1839//3403 1849//3403\nf 1843//3404 1849//3404 1846//3404\nf 1846//3405 1854//3405 1843//3405\nf 1829//3406 1828//3406 1850//3406\nf 1829//3407 1850//3407 1841//3407\nf 1841//3408 1850//3408 1851//3408\nf 1841//3409 1851//3409 1844//3409\nf 1840//3410 1844//3410 1847//3410\nf 1822//3411 1845//3411 1847//3411\nf 1842//3412 1848//3412 1835//3412\nf 1837//3413 1852//3413 1838//3413\nf 1844//3414 1848//3414 1847//3414\nf 1837//3415 1853//3415 1855//3415\nf 1837//3416 1855//3416 1852//3416\nf 1849//3417 1856//3417 1857//3417\nf 1849//3418 1857//3418 1846//3418\nf 1846//3419 1857//3419 1854//3419\nf 1850//3420 1828//3420 1854//3420\nf 1851//3421 1858//3421 1844//3421\nf 1835//3422 1848//3422 1836//3422\nf 1849//3423 1852//3423 1856//3423\nf 1854//3424 1857//3424 1850//3424\nf 1850//3425 1857//3425 1851//3425\nf 1858//3426 1857//3426 1856//3426\nf 1848//3427 1859//3427 1836//3427\nf 1852//3428 1849//3428 1838//3428\nf 1839//3429 1838//3429 1849//3429\nf 1856//3430 1855//3430 1858//3430\nf 1858//3431 1855//3431 1859//3431\nf 1852//3432 1855//3432 1856//3432\nf 1836//3433 1859//3433 1855//3433\nf 1836//3434 1855//3434 1853//3434\nf 1820//3435 1821//3435 1825//3435\nf 1821//3436 1845//3436 1825//3436\nf 1845//3437 1824//3437 1825//3437\nf 1827//3381 1828//3381 1820//3381\nf 1830//3438 1831//3438 1820//3438\nf 1822//3439 1824//3439 1845//3439\nf 1822//3440 1823//3440 1824//3440\nf 1823//3441 1837//3441 1824//3441\nf 1838//3442 1827//3442 1832//3442\nf 1843//3443 1854//3443 1827//3443\nf 1854//3444 1828//3444 1827//3444\nf 1838//3445 1839//3445 1827//3445\nf 1833//3446 1831//3446 1830//3446\nf 1834//3447 1837//3447 1823//3447\nf 1834//3448 1835//3448 1837//3448\nf 1835//3449 1836//3449 1837//3449\nf 1836//3450 1853//3450 1837//3450\nf 1840//3451 1831//3451 1833//3451\nf 1858//3452 1848//3452 1844//3452\nf 1858//3453 1851//3453 1857//3453\nf 1840//3454 1821//3454 1831//3454\nf 1858//3455 1859//3455 1848//3455\no geometry_49\nv -24.188803 9.276629 31.588104\nv -24.188879 9.278314 35.616928\nv -24.182981 12.392823 38.829411\nv -24.180475 14.218593 40.127178\nv -24.191740 16.682734 41.412121\nv -24.188362 19.833891 42.161201\nv -24.188803 19.834778 39.449669\nv -0.426442 19.834778 46.128540\nv -0.426442 9.276628 39.634415\nv -0.426921 9.276595 42.940975\nv -5.815622 9.277053 42.575474\nv -11.599330 9.298553 41.509933\nv -16.819359 9.276709 39.647655\nv -21.738943 9.276936 37.216965\nv -13.032022 19.834497 46.748985\nv -6.622955 19.834747 48.033833\nv -0.428963 19.804493 48.478584\nv -0.428388 16.288536 47.637100\nv -0.427308 13.701661 46.381290\nv -0.426132 11.174959 44.640087\nv -22.473228 10.597107 38.205578\nv -6.270090 11.577401 44.584320\nv -17.212059 10.652420 40.865650\nv -17.929207 13.544877 42.849579\nv -19.207159 19.816803 44.667156\nv -6.644938 17.944670 47.709030\nv -19.275244 16.269161 43.694683\nv -12.919738 16.523533 46.046448\nv -13.163608 18.256950 46.454021\nv -6.256718 14.307361 46.356853\nv -12.243732 12.161300 43.792336\nv -12.580394 13.911498 44.870567\nvn 0.2199 0.5826 -0.7824\nvn 0.2771 0.5034 -0.8184\nvn 0.0000 -1.0000 -0.0000\nvn -0.0008 -1.0000 0.0004\nvn 1.0000 -0.0001 0.0011\nvn -0.4005 -0.6815 0.6126\nvn -0.4468 -0.6419 0.6231\nvn -0.3260 -0.6771 0.6597\nvn -0.3267 -0.6762 0.6603\nvn -0.4402 -0.2072 0.8736\nvn -0.0714 -0.1681 0.9832\nvn -0.3586 -0.5922 0.7216\nvn -0.3586 -0.5868 0.7260\nvn -0.3853 -0.5343 0.7524\nvn -0.4256 -0.2316 0.8748\nvn -0.0507 -0.2325 0.9713\nvn -0.3974 -0.4453 0.8024\nvn -0.3155 -0.1489 0.9372\nvn -0.0838 -0.3551 0.9311\nvn -0.1374 -0.6668 0.7325\nvn -0.2435 -0.6810 0.6906\nvn -0.4106 -0.4231 0.8077\nvn -0.0528 -0.6627 0.7470\nvn -0.0491 -0.4362 0.8985\nvn -0.1939 -0.1640 0.9672\nvn -0.1941 -0.1646 0.9671\nvn -0.0469 -0.5668 0.8225\nvn -0.1622 -0.6372 0.7534\nvn -0.2697 -0.5893 0.7616\nvn -0.2946 -0.4238 0.8565\nvn -0.3011 -0.4151 0.8585\nvn -0.1622 -0.3590 0.9191\nvn -0.1946 -0.2504 0.9484\nvn -0.0600 -0.5434 0.8373\nvn -0.2379 -0.6377 0.7326\nvn -0.2642 -0.5422 0.7976\nvn -0.1610 -0.5369 0.8281\nvn -0.1623 -0.5400 0.8259\nvn -0.1821 -0.4232 0.8875\nvn -0.0000 -1.0000 0.0001\nvn 0.0000 -1.0000 -0.0001\nvn -0.9999 -0.0076 0.0092\nvn -1.0000 0.0010 0.0002\nvn -0.9993 -0.0209 0.0314\nvn -0.0002 1.0000 0.0003\nvn -0.0000 1.0000 0.0001\nvn 0.0040 0.9999 0.0129\nvn 1.0000 -0.0001 0.0010\nvn 1.0000 0.0000 -0.0001\nvn -0.0000 1.0000 -0.0001\nvn 1.0000 -0.0005 0.0001\nvn -0.0001 -1.0000 0.0006\nvn -0.3260 -0.2596 0.9090\nvn -0.0121 -0.9989 0.0458\nvn -0.0156 0.9992 0.0379\nvn -1.0000 0.0003 -0.0009\nvn 1.0000 0.0003 0.0002\nvn -0.0505 -0.6661 0.7442\nvn -0.3322 -0.2434 0.9112\nvn -1.0000 0.0000 -0.0000\nusemtl Default_OBJ.002\ns off\nf 1860//3456 1866//3456 1867//3456\nf 1860//3457 1867//3457 1868//3457\nf 1860//3458 1868//3458 1869//3458\nf 1860//3459 1873//3459 1861//3459\nf 1867//3460 1876//3460 1877//3460\nf 1861//3461 1873//3461 1880//3461\nf 1880//3462 1862//3462 1861//3462\nf 1873//3463 1872//3463 1882//3463\nf 1873//3464 1882//3464 1880//3464\nf 1864//3465 1884//3465 1865//3465\nf 1876//3466 1875//3466 1885//3466\nf 1880//3467 1882//3467 1862//3467\nf 1862//3468 1882//3468 1883//3468\nf 1883//3469 1863//3469 1862//3469\nf 1864//3470 1886//3470 1884//3470\nf 1877//3471 1876//3471 1885//3471\nf 1863//3472 1883//3472 1886//3472\nf 1884//3473 1888//3473 1874//3473\nf 1877//3474 1885//3474 1889//3474\nf 1870//3475 1881//3475 1871//3475\nf 1872//3476 1871//3476 1882//3476\nf 1863//3477 1886//3477 1864//3477\nf 1870//3478 1879//3478 1881//3478\nf 1877//3479 1889//3479 1878//3479\nf 1875//3480 1874//3480 1885//3480\nf 1885//3481 1874//3481 1888//3481\nf 1878//3482 1881//3482 1879//3482\nf 1881//3483 1890//3483 1871//3483\nf 1882//3484 1890//3484 1883//3484\nf 1883//3485 1891//3485 1887//3485\nf 1886//3486 1883//3486 1887//3486\nf 1889//3487 1885//3487 1887//3487\nf 1888//3488 1887//3488 1885//3488\nf 1878//3489 1889//3489 1881//3489\nf 1882//3490 1871//3490 1890//3490\nf 1883//3491 1890//3491 1891//3491\nf 1889//3492 1891//3492 1881//3492\nf 1881//3493 1891//3493 1890//3493\nf 1887//3494 1891//3494 1889//3494\nf 1869//3495 1873//3495 1860//3495\nf 1869//3496 1872//3496 1873//3496\nf 1862//3497 1864//3497 1861//3497\nf 1865//3498 1866//3498 1864//3498\nf 1862//3499 1863//3499 1864//3499\nf 1865//3500 1874//3500 1866//3500\nf 1874//3501 1867//3501 1866//3501\nf 1875//3502 1876//3502 1867//3502\nf 1877//3503 1879//3503 1867//3503\nf 1879//3504 1868//3504 1867//3504\nf 1874//3505 1875//3505 1867//3505\nf 1879//3506 1869//3506 1868//3506\nf 1870//3507 1872//3507 1869//3507\nf 1888//3508 1886//3508 1887//3508\nf 1870//3509 1871//3509 1872//3509\nf 1884//3510 1874//3510 1865//3510\nf 1866//3511 1861//3511 1864//3511\nf 1878//3512 1879//3512 1877//3512\nf 1870//3513 1869//3513 1879//3513\nf 1888//3514 1884//3514 1886//3514\nf 1866//3515 1860//3515 1861//3515\no geometry_50\nv 62.465717 27.414125 -0.016904\nv 61.707870 27.399202 -4.910460\nv 57.190262 27.420404 -10.397183\nv 53.515697 27.432898 -11.644238\nv 44.200092 27.459799 -12.468157\nv 44.842484 27.435324 -10.344729\nv 59.690010 27.435247 -0.009000\nv 43.638412 13.848748 0.125438\nv 57.523727 20.814646 -0.007124\nv 58.955307 23.132248 -4.456256\nv 57.819870 21.400330 -2.618535\nv 41.988922 13.788917 -12.352017\nv 46.641335 13.793371 -0.046410\nv 44.805405 13.792304 -12.382444\nv 59.905052 27.413380 -8.233006\nvn 0.0189 0.9998 -0.0060\nvn 0.0029 0.0065 1.0000\nvn -0.4718 0.5641 0.6777\nvn 0.8274 -0.5472 -0.1265\nvn -0.9132 0.2965 0.2797\nvn -0.9788 0.1594 0.1286\nvn 0.7997 -0.5989 -0.0436\nvn 0.8028 -0.5930 -0.0628\nvn -0.0108 -0.0067 -0.9999\nvn 0.7470 -0.5253 -0.4076\nvn 0.6545 -0.5766 -0.4890\nvn 0.5674 -0.4118 -0.7131\nvn 0.6342 -0.7186 -0.2854\nvn 0.0881 -0.0023 -0.9961\nvn -0.0183 -0.9998 0.0028\nvn 0.3172 -0.1519 -0.9361\nvn -0.0102 0.9998 0.0146\nvn 0.0030 1.0000 -0.0018\nvn 0.0042 1.0000 -0.0024\nvn 0.5660 -0.8158 -0.1188\nvn 0.5406 -0.8374 -0.0804\nvn 0.0552 -0.0912 0.9943\nvn 0.0141 -0.0091 0.9999\nvn 0.0076 1.0000 -0.0025\nvn 0.0046 1.0000 -0.0025\nvn 0.0013 -1.0000 0.0046\nusemtl Default_OBJ.002\ns off\nf 1892//3516 1893//3516 1906//3516\nf 1892//3517 1898//3517 1899//3517\nf 1898//3518 1897//3518 1899//3518\nf 1892//3519 1901//3519 1893//3519\nf 1899//3520 1897//3520 1896//3520\nf 1899//3521 1896//3521 1903//3521\nf 1892//3522 1900//3522 1902//3522\nf 1892//3523 1902//3523 1901//3523\nf 1896//3524 1905//3524 1903//3524\nf 1901//3525 1906//3525 1893//3525\nf 1901//3526 1905//3526 1906//3526\nf 1905//3527 1894//3527 1906//3527\nf 1905//3528 1901//3528 1902//3528\nf 1895//3529 1905//3529 1896//3529\nf 1899//3530 1905//3530 1904//3530\nf 1905//3531 1895//3531 1894//3531\nf 1897//3532 1898//3532 1896//3532\nf 1898//3533 1895//3533 1896//3533\nf 1898//3534 1894//3534 1895//3534\nf 1902//3535 1900//3535 1905//3535\nf 1900//3536 1904//3536 1905//3536\nf 1904//3537 1900//3537 1899//3537\nf 1900//3538 1892//3538 1899//3538\nf 1892//3539 1906//3539 1898//3539\nf 1906//3540 1894//3540 1898//3540\nf 1899//3541 1903//3541 1905//3541\no geometry_51\nv 64.978371 34.121887 -0.003282\nv 62.527573 34.121754 -0.007792\nv 54.207909 34.121754 6.510354\nv 54.217873 34.092293 9.882114\nv 57.498352 34.130245 10.308372\nv 61.131023 34.122288 9.117372\nv 63.252243 30.319643 4.048496\nv 62.672382 27.974379 -0.008118\nv 59.945972 27.916859 -0.007792\nv 61.848309 27.916712 4.839228\nv 60.186363 27.914436 8.252153\nv 56.782505 27.917339 10.734394\nv 54.166008 28.108164 11.666645\nv 54.207909 27.916859 9.113110\nv 63.999550 34.120609 5.534178\nv 58.207085 30.736776 10.509923\nv 61.017906 30.908241 8.623116\nvn 0.9340 -0.3504 0.0691\nvn 0.9527 -0.2531 0.1683\nvn -0.5974 0.2485 -0.7625\nvn 0.0211 -0.9997 -0.0083\nvn 0.0007 -1.0000 -0.0003\nvn -0.8261 -0.2180 -0.5197\nvn -0.9999 -0.0067 -0.0159\nvn -0.9999 0.0096 0.0030\nvn 0.8743 -0.4637 0.1431\nvn 0.8402 -0.3563 0.4089\nvn 0.8424 -0.3316 0.4247\nvn 0.3283 -0.0910 0.9402\nvn 0.8212 -0.2891 0.4920\nvn -0.1268 0.2845 0.9503\nvn 0.2119 0.1020 0.9720\nvn 0.5500 -0.2514 0.7964\nvn 0.5575 -0.1453 0.8173\nvn 0.3095 0.1207 0.9432\nvn 0.7747 -0.1227 0.6203\nvn -0.0001 1.0000 -0.0009\nvn 0.0019 1.0000 0.0006\nvn 0.0028 1.0000 0.0017\nvn -0.0010 1.0000 -0.0013\nvn -0.0127 0.9999 0.0088\nvn -0.0001 0.0001 -1.0000\nvn -0.0003 -1.0000 0.0008\nvn -0.0004 -1.0000 -0.0003\nvn -0.0463 -0.9962 0.0739\nvn 0.5737 -0.2272 0.7869\nvn 0.0018 0.0001 -1.0000\nusemtl Default_OBJ.002\ns off\nf 1907//3542 1913//3542 1914//3542\nf 1907//3543 1921//3543 1913//3543\nf 1908//3544 1915//3544 1909//3544\nf 1915//3545 1914//3545 1916//3545\nf 1915//3546 1916//3546 1917//3546\nf 1915//3547 1920//3547 1909//3547\nf 1909//3548 1920//3548 1919//3548\nf 1909//3549 1919//3549 1910//3549\nf 1913//3550 1916//3550 1914//3550\nf 1913//3551 1917//3551 1916//3551\nf 1913//3552 1921//3552 1917//3552\nf 1919//3553 1918//3553 1922//3553\nf 1921//3554 1923//3554 1917//3554\nf 1910//3555 1919//3555 1911//3555\nf 1919//3556 1922//3556 1911//3556\nf 1922//3557 1917//3557 1923//3557\nf 1922//3558 1923//3558 1912//3558\nf 1922//3559 1912//3559 1911//3559\nf 1921//3560 1912//3560 1923//3560\nf 1908//3561 1911//3561 1907//3561\nf 1911//3562 1921//3562 1907//3562\nf 1911//3563 1912//3563 1921//3563\nf 1909//3564 1911//3564 1908//3564\nf 1909//3565 1910//3565 1911//3565\nf 1908//3566 1914//3566 1915//3566\nf 1918//3567 1920//3567 1917//3567\nf 1920//3568 1915//3568 1917//3568\nf 1920//3569 1918//3569 1919//3569\nf 1922//3570 1918//3570 1917//3570\nf 1908//3571 1907//3571 1914//3571\no geometry_52\nv 54.323162 27.482172 11.373025\nv 54.329174 34.112640 9.728725\nv 42.746830 34.225582 13.155628\nv 44.002750 27.620253 12.826710\nv 45.380760 33.140125 -0.151341\nvn 0.1391 -0.0228 0.9900\nvn 0.2781 0.2310 0.9324\nvn -0.0152 0.9963 -0.0843\nvn -0.9684 -0.1753 -0.1774\nvn 0.7392 -0.1627 -0.6535\nvn -0.0681 -0.9155 -0.3966\nusemtl Default_OBJ.002\ns off\nf 1924//3572 1926//3572 1927//3572\nf 1926//3573 1924//3573 1925//3573\nf 1926//3574 1925//3574 1928//3574\nf 1927//3575 1926//3575 1928//3575\nf 1924//3576 1928//3576 1925//3576\nf 1924//3577 1927//3577 1928//3577\no geometry_53\nv 42.532814 34.158733 -12.622087\nv 44.172836 27.347960 -12.110785\nv 45.265018 33.092232 0.113390\nv 55.416176 34.133537 -9.939377\nv 55.650169 26.858660 -11.144797\nvn -0.9581 -0.2166 0.1874\nvn -0.0161 0.9961 0.0869\nvn 0.2013 0.1664 -0.9653\nvn 0.0814 -0.0551 -0.9952\nvn 0.7054 -0.0937 0.7026\nvn -0.0745 -0.9000 0.4296\nusemtl Default_OBJ.002\ns off\nf 1929//3578 1930//3578 1931//3578\nf 1929//3579 1931//3579 1932//3579\nf 1929//3580 1932//3580 1933//3580\nf 1929//3581 1933//3581 1930//3581\nf 1931//3582 1933//3582 1932//3582\nf 1933//3583 1931//3583 1930//3583\no geometry_54\nv 65.082436 34.128155 -0.067974\nv 62.527328 34.121754 -0.008892\nv 59.691776 27.435249 -0.008893\nv 62.416687 27.477547 -0.008181\nv 63.798557 34.127235 -5.905253\nv 57.520111 34.122036 -10.327413\nv 55.335674 34.121902 -7.218077\nv 55.164837 27.435499 -11.241885\nv 57.037201 27.461714 -10.499831\nv 60.158520 27.462105 -7.971273\nv 61.632545 27.435377 -4.776940\nv 55.384308 33.493687 -10.565108\nv 63.266235 30.447746 -4.189241\nv 60.527874 34.096184 -9.595014\nv 61.011925 30.923214 -8.632306\nvn -0.0024 1.0000 0.0025\nvn -0.6781 0.2875 0.6764\nvn -0.9093 -0.1973 0.3664\nvn 0.0155 -0.9999 0.0063\nvn -0.9990 0.0386 -0.0218\nvn -0.2589 0.9486 -0.1818\nvn 0.9253 -0.3716 -0.0759\nvn 0.9494 -0.2347 -0.2088\nvn 0.3684 -0.0674 -0.9272\nvn 0.8815 -0.4506 -0.1410\nvn 0.8391 -0.3789 -0.3904\nvn -0.0003 0.0001 1.0000\nvn 0.5360 -0.1692 -0.8271\nvn 0.8403 -0.3242 -0.4345\nvn 0.8199 -0.2958 -0.4902\nvn 0.6023 -0.2905 -0.7435\nvn 0.7459 -0.0866 -0.6604\nvn -0.0006 1.0000 -0.0000\nvn 0.0136 0.9997 -0.0204\nvn -0.0006 1.0000 -0.0004\nvn 0.0000 -1.0000 -0.0000\nvn 0.0155 -0.9998 -0.0155\nvn 0.0273 -0.9991 -0.0335\nvn 0.2367 0.0493 -0.9703\nvn 0.0786 0.1079 -0.9911\nvn 0.0231 -0.0003 0.9997\nusemtl Default_OBJ.002\ns off\nf 1934//3584 1940//3584 1935//3584\nf 1935//3585 1940//3585 1936//3585\nf 1936//3586 1940//3586 1941//3586\nf 1936//3587 1944//3587 1937//3587\nf 1940//3588 1945//3588 1941//3588\nf 1940//3589 1939//3589 1945//3589\nf 1934//3590 1937//3590 1946//3590\nf 1934//3591 1946//3591 1938//3591\nf 1941//3592 1947//3592 1942//3592\nf 1946//3593 1937//3593 1944//3593\nf 1946//3594 1944//3594 1943//3594\nf 1937//3595 1935//3595 1936//3595\nf 1947//3596 1948//3596 1942//3596\nf 1946//3597 1943//3597 1938//3597\nf 1938//3598 1943//3598 1948//3598\nf 1948//3599 1943//3599 1942//3599\nf 1938//3600 1948//3600 1947//3600\nf 1938//3601 1940//3601 1934//3601\nf 1947//3602 1939//3602 1938//3602\nf 1939//3603 1940//3603 1938//3603\nf 1936//3604 1941//3604 1944//3604\nf 1941//3605 1943//3605 1944//3605\nf 1941//3606 1942//3606 1943//3606\nf 1941//3607 1939//3607 1947//3607\nf 1941//3608 1945//3608 1939//3608\nf 1937//3609 1934//3609 1935//3609\n"
  },
  {
    "path": "src/JitterDemo/assets/texture_10.LICENSE",
    "content": "\t\n\n\tPrototype Textures 1.0\n\n\tCreated/distributed by Kenney (www.kenney.nl)\n\tCreation date: 08-04-2020\n\n\t\t\t------------------------------\n\n\tLicense: (Creative Commons Zero, CC0)\n\thttp://creativecommons.org/publicdomain/zero/1.0/\n\n\tThis content is free to use in personal, educational and commercial projects.\n\n\n\tSupport us by crediting Kenney or www.kenney.nl (this is not mandatory)\n\n\t\t\t------------------------------\n\n\tDonate:   http://support.kenney.nl\n\tRequest:  http://request.kenney.nl\n\tPatreon:  http://patreon.com/kenney/\n\n\tFollow on Twitter for updates:\n\thttp://twitter.com/KenneyNL\n"
  },
  {
    "path": "src/JitterDemo/assets/wheel.obj",
    "content": "# Blender v3.0.1 OBJ File: 'car.blend'\n# www.blender.org\nmtllib wheel.mtl\no wheel_Mesh.0002\nv 0.337746 -0.578569 0.000000\nv 0.337746 -0.558855 -0.149744\nv 0.337746 -0.501055 -0.289283\nv 0.337746 -0.409110 -0.409108\nv 0.337746 -0.289286 -0.501052\nv 0.337746 -0.149747 -0.558852\nv 0.337746 -0.000002 -0.578566\nv 0.337746 0.149742 -0.558852\nv 0.337746 0.289281 -0.501052\nv 0.337746 0.409106 -0.409108\nv 0.337746 0.501050 -0.289283\nv 0.337746 0.558850 -0.149744\nv 0.337746 0.578564 0.000000\nv 0.337746 0.558850 0.149744\nv 0.337746 0.501050 0.289283\nv 0.337746 0.409106 0.409108\nv 0.337746 0.289280 0.501053\nv 0.337746 0.149742 0.558852\nv 0.337746 -0.000002 0.578566\nv 0.337746 -0.149747 0.558852\nv 0.337746 -0.289286 0.501053\nv 0.337746 -0.409110 0.409108\nv 0.337746 -0.501055 0.289283\nv 0.337746 -0.558855 0.149744\nv -0.319268 -0.578568 0.000000\nv -0.319268 -0.558855 -0.149744\nv -0.319268 -0.501055 -0.289283\nv -0.319268 -0.409110 -0.409108\nv -0.319268 -0.289285 -0.501052\nv -0.319268 -0.149747 -0.558852\nv -0.319268 -0.000002 -0.578566\nv -0.319268 0.149742 -0.558852\nv -0.319268 0.289281 -0.501052\nv -0.319267 0.409106 -0.409108\nv -0.319267 0.501050 -0.289283\nv -0.319267 0.558850 -0.149744\nv -0.319267 0.578564 0.000000\nv -0.319267 0.558850 0.149744\nv -0.319267 0.501050 0.289283\nv -0.319267 0.409106 0.409108\nv -0.319267 0.289281 0.501053\nv -0.319267 0.149742 0.558852\nv -0.319268 -0.000002 0.578566\nv -0.319268 -0.149747 0.558852\nv -0.319268 -0.289286 0.501053\nv -0.319268 -0.409110 0.409108\nv -0.319268 -0.501055 0.289283\nv -0.319268 -0.558855 0.149744\nv 0.260547 -0.608459 -0.163035\nv -0.242068 -0.608459 -0.163035\nv -0.242068 -0.629922 0.000000\nv 0.260547 -0.629922 0.000000\nv 0.260547 -0.545529 -0.314960\nv -0.242068 -0.545529 -0.314960\nv 0.260547 -0.445423 -0.445421\nv -0.242068 -0.445423 -0.445421\nv 0.260547 -0.314963 -0.545527\nv -0.242068 -0.314963 -0.545527\nv 0.260547 -0.163037 -0.608456\nv -0.242068 -0.163037 -0.608456\nv 0.260547 -0.000002 -0.629920\nv -0.242068 -0.000002 -0.629920\nv 0.260547 0.163033 -0.608456\nv -0.242068 0.163033 -0.608456\nv 0.260547 0.314957 -0.545527\nv -0.242068 0.314957 -0.545527\nv 0.260547 0.445418 -0.445421\nv -0.242068 0.445418 -0.445421\nv 0.260547 0.545524 -0.314960\nv -0.242068 0.545524 -0.314960\nv 0.260547 0.608454 -0.163035\nv -0.242068 0.608454 -0.163035\nv 0.260547 0.629918 0.000000\nv -0.242068 0.629918 0.000000\nv 0.260547 0.608454 0.163035\nv -0.242068 0.608454 0.163035\nv 0.260547 0.545524 0.314960\nv -0.242068 0.545524 0.314960\nv 0.260547 0.445418 0.445421\nv -0.242068 0.445418 0.445421\nv 0.260547 0.314957 0.545527\nv -0.242068 0.314957 0.545527\nv 0.260547 0.163033 0.608456\nv -0.242068 0.163033 0.608456\nv 0.260547 -0.000002 0.629920\nv -0.242068 -0.000002 0.629920\nv 0.260547 -0.163037 0.608456\nv -0.242068 -0.163037 0.608456\nv 0.260547 -0.314963 0.545527\nv -0.242068 -0.314963 0.545527\nv 0.260547 -0.445423 0.445421\nv -0.242068 -0.445423 0.445421\nv 0.260547 -0.545529 0.314960\nv -0.242068 -0.545529 0.314960\nv 0.260547 -0.608459 0.163035\nv -0.242068 -0.608459 0.163035\nv -0.319268 -0.503440 0.000000\nv -0.319268 -0.486286 -0.130299\nv -0.319268 -0.435993 -0.251719\nv -0.319268 -0.355987 -0.355984\nv -0.319268 -0.251721 -0.435990\nv -0.319268 -0.130302 -0.486284\nv -0.319268 -0.000002 -0.503438\nv -0.319268 0.130297 -0.486284\nv -0.319268 0.251716 -0.435990\nv -0.319268 0.355981 -0.355984\nv -0.319267 0.435988 -0.251719\nv -0.319267 0.486281 -0.130299\nv -0.319267 0.503435 0.000000\nv -0.319267 0.486281 0.130299\nv -0.319267 0.435988 0.251719\nv -0.319267 0.355982 0.355985\nv -0.319267 0.251716 0.435990\nv -0.319268 0.130297 0.486284\nv -0.319268 -0.000002 0.503438\nv -0.319268 -0.130302 0.486284\nv -0.319268 -0.251721 0.435990\nv -0.319268 -0.355987 0.355985\nv -0.319268 -0.435993 0.251719\nv -0.319268 -0.486286 0.130299\nv -0.319268 -0.510894 0.000000\nv -0.319268 -0.442448 -0.255446\nv -0.319268 -0.255448 -0.442445\nv -0.319268 -0.000002 -0.510892\nv -0.319268 0.255444 -0.442445\nv -0.319267 0.442443 -0.255446\nv -0.319267 0.510890 0.000000\nv -0.319267 0.442443 0.255446\nv -0.319267 0.255444 0.442446\nv -0.319268 -0.000002 0.510893\nv -0.319268 -0.255448 0.442445\nv -0.319268 -0.442448 0.255446\nv -0.295780 -0.457093 0.002734\nv -0.295780 -0.394488 -0.230913\nv -0.295780 -0.230915 -0.394485\nv -0.295780 0.002731 -0.457090\nv -0.295780 0.226176 -0.397218\nv -0.295780 0.397216 -0.226177\nv -0.295780 0.457088 -0.002733\nv -0.295780 0.394483 0.230913\nv -0.295780 0.230910 0.394485\nv -0.295780 -0.002736 0.457090\nv -0.295780 -0.226180 0.397219\nv -0.295780 -0.397222 0.226178\nv -0.094854 -0.390229 0.003686\nv -0.094854 -0.336105 -0.198306\nv -0.094854 -0.198307 -0.336103\nv -0.094854 0.003684 -0.390227\nv -0.094854 0.191919 -0.339789\nv -0.094854 0.339787 -0.191921\nv -0.094854 0.390224 -0.003686\nv -0.094854 0.336100 0.198306\nv -0.094854 0.198303 0.336103\nv -0.094854 -0.003689 0.390227\nv -0.094854 -0.191923 0.339789\nv -0.094854 -0.339792 0.191921\nv -0.261426 -0.340198 -0.255968\nv -0.261426 -0.255970 -0.340196\nv -0.104670 -0.244373 -0.315257\nv -0.104670 -0.315260 -0.244370\nv -0.261426 0.051574 -0.422602\nv -0.261426 0.166632 -0.391773\nv -0.104670 0.150834 -0.369259\nv -0.104670 0.053999 -0.395205\nv -0.261426 0.391770 -0.166635\nv -0.261426 0.422600 -0.051576\nv -0.104670 0.395204 -0.054001\nv -0.104670 0.369256 -0.150836\nv -0.261426 0.340194 0.255968\nv -0.261426 0.255966 0.340196\nv -0.104670 0.244367 0.315257\nv -0.104670 0.315255 0.244370\nv -0.261426 -0.051580 0.422603\nv -0.261426 -0.166637 0.391773\nv -0.104670 -0.150838 0.369260\nv -0.104670 -0.054005 0.395206\nv -0.261426 -0.391775 0.166635\nv -0.261426 -0.422605 0.051577\nv -0.104670 -0.395208 0.054002\nv -0.104670 -0.369262 0.150836\nv -0.146449 -0.041007 -0.153028\nv -0.146449 -0.153030 -0.041003\nv -0.314834 -0.040689 -0.151846\nv -0.146449 0.112021 -0.112024\nv -0.314834 0.111157 -0.111159\nv -0.146449 0.153025 0.041003\nv -0.314834 0.151844 0.040688\nv -0.314834 0.040684 0.151846\nv -0.314834 -0.111162 0.111160\nv -0.146449 0.041001 0.153028\nv -0.314834 -0.151849 -0.040687\nv -0.146449 -0.112026 0.112024\nv -0.318186 -0.107865 -0.028902\nv -0.318186 -0.028904 -0.107863\nv -0.318186 0.078958 -0.078961\nv -0.318186 0.107860 0.028902\nv -0.318186 0.028899 0.107863\nv -0.318186 -0.078964 0.078961\nv -0.253787 -0.104689 -0.028051\nv -0.253787 -0.028053 -0.104686\nv -0.253787 0.076633 -0.076636\nv -0.253787 0.104684 0.028051\nv -0.253787 0.028048 0.104686\nv -0.253787 -0.076638 0.076636\nv -0.279862 -0.240988 -0.162363\nv -0.279862 -0.162366 -0.240985\nv -0.127167 -0.139084 -0.230788\nv -0.127167 -0.230791 -0.139081\nv -0.279862 0.020116 -0.289881\nv -0.279862 0.127515 -0.261104\nv -0.127166 0.130326 -0.235842\nv -0.127167 0.005051 -0.269409\nv -0.279862 0.261101 -0.127518\nv -0.279862 0.289878 -0.020118\nv -0.127166 0.269406 -0.005053\nv -0.127166 0.235840 -0.130328\nv -0.279862 0.240983 0.162363\nv -0.279862 0.162361 0.240985\nv -0.127166 0.139078 0.230789\nv -0.127166 0.230786 0.139081\nv -0.279862 -0.020120 0.289881\nv -0.279862 -0.127520 0.261104\nv -0.127167 -0.130331 0.235842\nv -0.127166 -0.005056 0.269410\nv -0.279862 -0.261106 0.127518\nv -0.279862 -0.289883 0.020118\nv -0.127167 -0.269412 0.005054\nv -0.127167 -0.235844 0.130329\nv -0.319268 -0.464450 -0.124448\nv -0.319268 -0.340001 -0.339999\nv -0.319268 -0.124450 -0.464447\nv -0.319268 0.124446 -0.464447\nv -0.319268 0.339997 -0.339999\nv -0.319267 0.464446 -0.124448\nv -0.319267 0.464446 0.124449\nv -0.319267 0.339997 0.339999\nv -0.319268 0.124446 0.464447\nv -0.319268 -0.124450 0.464447\nv -0.319268 -0.340001 0.339999\nv -0.319268 -0.464450 0.124449\nv -0.188711 -0.414755 -0.111133\nv -0.188711 -0.111135 -0.414753\nv -0.188711 0.303617 -0.303620\nv -0.188711 0.414750 0.111133\nv -0.188711 0.111130 0.414753\nv -0.188711 -0.303622 0.303620\nv -0.297617 -0.316418 -0.316416\nv -0.188711 -0.237802 -0.369440\nv -0.079807 -0.290826 -0.290823\nv -0.188711 -0.369443 -0.237799\nv -0.297617 0.115814 -0.432232\nv -0.188711 0.201043 -0.390660\nv -0.079807 0.106446 -0.397272\nv -0.188711 0.021218 -0.438845\nv -0.297616 0.432230 -0.115816\nv -0.188711 0.438843 -0.021220\nv -0.079806 0.397271 -0.106449\nv -0.188711 0.390658 -0.201045\nv -0.297616 0.316414 0.316417\nv -0.188711 0.237797 0.369440\nv -0.079806 0.290821 0.290824\nv -0.188711 0.369438 0.237799\nv -0.297617 -0.115819 0.432232\nv -0.188711 -0.201047 0.390660\nv -0.079807 -0.106451 0.397272\nv -0.188711 -0.021223 0.438845\nv -0.297617 -0.432235 0.115816\nv -0.188711 -0.438847 0.021220\nv -0.079807 -0.397275 0.106449\nv -0.188711 -0.390663 0.201045\nv -0.058155 -0.000002 0.000000\nv -0.288821 -0.258972 -0.258969\nv -0.201566 -0.199024 -0.299098\nv -0.201566 -0.299101 -0.199022\nv -0.288821 0.094787 -0.353758\nv -0.201566 0.159514 -0.321907\nv -0.201566 0.022806 -0.358538\nv -0.288821 0.353756 -0.094789\nv -0.201566 0.358535 -0.022808\nv -0.201566 0.321905 -0.159516\nv -0.288821 0.258967 0.258969\nv -0.201566 0.199019 0.299098\nv -0.201566 0.299096 0.199022\nv -0.288821 -0.094792 0.353759\nv -0.201566 -0.159518 0.321907\nv -0.201566 -0.022811 0.358538\nv -0.288821 -0.353761 0.094789\nv -0.201566 -0.358541 0.022809\nv -0.201566 -0.321909 0.159516\nv -0.253787 -0.000002 0.000000\nv -0.327386 -0.085057 -0.085055\nv -0.327386 0.031129 -0.116186\nv -0.327386 0.116185 -0.031132\nv -0.327386 0.085052 0.085055\nv -0.327386 -0.031134 0.116187\nv -0.327386 -0.116189 0.031133\nv -0.290587 -0.075852 -0.075850\nv -0.290587 0.027761 -0.103612\nv -0.290587 0.103611 -0.027763\nv -0.290587 0.075847 0.075850\nv -0.290587 -0.027765 0.103613\nv -0.290587 -0.103615 0.027763\nv -0.314531 -0.149165 -0.149163\nv -0.227276 -0.090401 -0.189483\nv -0.227276 -0.189486 -0.090398\nv -0.314531 0.054595 -0.203760\nv -0.227276 0.118896 -0.173028\nv -0.227276 -0.016457 -0.209296\nv -0.314531 0.203757 -0.054597\nv -0.227276 0.209293 0.016454\nv -0.227276 0.173026 -0.118898\nv -0.314531 0.149160 0.149163\nv -0.227276 0.090396 0.189483\nv -0.227276 0.189480 0.090398\nv -0.314531 -0.054600 0.203760\nv -0.227276 -0.118901 0.173028\nv -0.227276 0.016452 0.209296\nv -0.314531 -0.203762 0.054598\nv -0.227276 -0.209299 -0.016454\nv -0.227276 -0.173030 0.118898\nv -0.090794 -0.300590 -0.080542\nv -0.063568 -0.216848 -0.216846\nv -0.090794 -0.080545 -0.300587\nv -0.063568 0.079369 -0.296217\nv -0.090794 0.220042 -0.220045\nv -0.063568 0.296215 -0.079371\nv -0.090794 0.300584 0.080542\nv -0.063568 0.216844 0.216846\nv -0.090794 0.080540 0.300587\nv -0.063568 -0.079374 0.296217\nv -0.090794 -0.220048 0.220045\nv -0.063568 -0.296219 0.079371\nv -0.319268 -0.493190 -0.132149\nv -0.319268 -0.416665 -0.240560\nv -0.286629 -0.437656 -0.117269\nv -0.319268 -0.481122 0.000000\nv -0.319268 -0.361041 -0.361039\nv -0.319268 -0.240563 -0.416663\nv -0.313854 -0.323586 -0.323584\nv -0.319268 -0.132151 -0.493187\nv -0.319268 -0.000002 -0.481120\nv -0.286629 -0.117271 -0.437654\nv -0.319268 0.132147 -0.493187\nv -0.319268 0.240558 -0.416663\nv -0.313854 0.118437 -0.442024\nv -0.319268 0.361036 -0.361038\nv -0.319267 0.416660 -0.240560\nv -0.286629 0.320383 -0.320385\nv -0.319267 0.493185 -0.132149\nv -0.319267 0.481118 0.000000\nv -0.313854 0.442021 -0.118440\nv -0.319267 0.493185 0.132150\nv -0.319267 0.416660 0.240561\nv -0.286629 0.437651 0.117269\nv -0.319267 0.361036 0.361039\nv -0.319267 0.240558 0.416663\nv -0.313854 0.323581 0.323584\nv -0.319268 0.132147 0.493187\nv -0.319268 -0.000002 0.481120\nv -0.286629 0.117266 0.437654\nv -0.319268 -0.132152 0.493187\nv -0.319268 -0.240563 0.416663\nv -0.313854 -0.118443 0.442024\nv -0.319268 -0.361041 0.361039\nv -0.319268 -0.416665 0.240561\nv -0.286629 -0.320387 0.320385\nv -0.319268 -0.493190 0.132150\nv -0.313854 -0.442026 0.118440\nv -0.188711 -0.388538 -0.198365\nv -0.188711 -0.435667 -0.022478\nv -0.188711 -0.022480 -0.435665\nv -0.188711 -0.198368 -0.388535\nv -0.188711 0.366055 -0.237299\nv -0.188711 0.237297 -0.366057\nv -0.188711 0.388534 0.198365\nv -0.188711 0.435663 0.022479\nv -0.188711 0.022475 0.435665\nv -0.188711 0.198363 0.388536\nv -0.188711 -0.366060 0.237299\nv -0.188711 -0.237301 0.366057\nv -0.270390 -0.262139 -0.364297\nv -0.284592 -0.300785 -0.300783\nv -0.270390 -0.364300 -0.262138\nv -0.107032 -0.246375 -0.341674\nv -0.191925 -0.235875 -0.344088\nv -0.107032 -0.341676 -0.246371\nv -0.101457 -0.293370 -0.293368\nv -0.191925 -0.344090 -0.235872\nv -0.270390 0.184419 -0.409166\nv -0.284592 0.110091 -0.410877\nv -0.270390 0.044867 -0.446559\nv -0.107032 0.172710 -0.384201\nv -0.191925 0.180051 -0.376315\nv -0.107032 0.042525 -0.419084\nv -0.101457 0.107377 -0.400748\nv -0.191925 0.032225 -0.415925\nv -0.270390 0.446557 -0.044869\nv -0.284592 0.410874 -0.110094\nv -0.270390 0.409164 -0.184421\nv -0.107032 0.419082 -0.042527\nv -0.191925 0.415922 -0.032227\nv -0.107032 0.384199 -0.172713\nv -0.101456 0.400746 -0.107380\nv -0.191925 0.376313 -0.180053\nv -0.270390 0.262135 0.364297\nv -0.284592 0.300780 0.300783\nv -0.270390 0.364294 0.262138\nv -0.107032 0.246369 0.341674\nv -0.191925 0.235869 0.344088\nv -0.107032 0.341671 0.246372\nv -0.101456 0.293365 0.293368\nv -0.191925 0.344086 0.235873\nv -0.270390 -0.184424 0.409166\nv -0.284592 -0.110096 0.410877\nv -0.270390 -0.044872 0.446559\nv -0.107032 -0.172715 0.384201\nv -0.191925 -0.180055 0.376316\nv -0.107032 -0.042530 0.419084\nv -0.101457 -0.107382 0.400748\nv -0.191925 -0.032230 0.415925\nv -0.270390 -0.446561 0.044870\nv -0.284592 -0.410879 0.110094\nv -0.270390 -0.409169 0.184422\nv -0.107032 -0.419086 0.042528\nv -0.191925 -0.415927 0.032228\nv -0.107032 -0.384203 0.172713\nv -0.101457 -0.400750 0.107380\nv -0.191925 -0.376318 0.180053\nv -0.324172 -0.105687 -0.105684\nv -0.267008 -0.295694 -0.217292\nv -0.267008 -0.217294 -0.295691\nv -0.114312 -0.192457 -0.285848\nv -0.114312 -0.285850 -0.192455\nv -0.324172 0.038681 -0.144367\nv -0.233703 -0.044758 -0.167032\nv -0.267008 0.040332 -0.364722\nv -0.267008 0.147428 -0.336026\nv -0.114311 0.151322 -0.309595\nv -0.114312 0.023744 -0.343779\nv -0.324172 0.144365 -0.038683\nv -0.233703 0.122273 -0.122276\nv -0.267008 0.336024 -0.147430\nv -0.267008 0.364720 -0.040335\nv -0.114311 0.343776 -0.023746\nv -0.114311 0.309592 -0.151324\nv -0.324172 0.105682 0.105684\nv -0.233703 0.044754 0.167032\nv -0.233703 0.167030 0.044756\nv -0.267008 0.295689 0.217292\nv -0.267008 0.217290 0.295691\nv -0.114311 0.192452 0.285848\nv -0.114311 0.285845 0.192455\nv -0.324172 -0.038686 0.144367\nv -0.233703 -0.122278 0.122276\nv -0.267008 -0.040337 0.364722\nv -0.267008 -0.147433 0.336026\nv -0.114312 -0.151327 0.309595\nv -0.114311 -0.023749 0.343779\nv -0.324172 -0.144369 0.038683\nv -0.233703 -0.167035 -0.044756\nv -0.267008 -0.336028 0.147430\nv -0.267008 -0.364724 0.040335\nv -0.114312 -0.343781 0.023747\nv -0.114312 -0.309597 0.151324\nv -0.318186 -0.078153 -0.078151\nv -0.318186 0.028603 -0.106756\nv -0.318186 0.106754 -0.028605\nv -0.318186 0.078148 0.078151\nv -0.318186 -0.028608 0.106757\nv -0.318186 -0.106759 0.028606\nv -0.327386 -0.117393 -0.031454\nv -0.327386 -0.031457 -0.117390\nv -0.327386 0.085933 -0.085936\nv -0.327386 0.117389 0.031455\nv -0.327386 0.031453 0.117391\nv -0.327386 -0.085938 0.085936\nv -0.253787 -0.075852 -0.075850\nv -0.253787 0.027761 -0.103612\nv -0.253787 0.103611 -0.027763\nv -0.253787 0.075847 0.075850\nv -0.253787 -0.027765 0.103613\nv -0.253787 -0.103615 0.027763\nv -0.290587 -0.104689 -0.028051\nv -0.290587 -0.028053 -0.104686\nv -0.290587 0.076633 -0.076636\nv -0.290587 0.104684 0.028051\nv -0.290587 0.028048 0.104686\nv -0.290587 -0.076638 0.076636\nv -0.292717 -0.186282 -0.107434\nv -0.292717 -0.107437 -0.186280\nv -0.140022 -0.085709 -0.175729\nv -0.140022 -0.175731 -0.085707\nv -0.292717 -0.000102 -0.215040\nv -0.292717 0.107603 -0.186181\nv -0.140021 0.109330 -0.162089\nv -0.140022 -0.013643 -0.195039\nv -0.292717 0.186179 -0.107606\nv -0.292717 0.215037 0.000099\nv -0.140021 0.195037 0.013640\nv -0.140021 0.162087 -0.109333\nv -0.292717 0.186277 0.107434\nv -0.292717 0.107432 0.186280\nv -0.140021 0.085705 0.175729\nv -0.140021 0.175727 0.085708\nv -0.292717 0.000096 0.215040\nv -0.292717 -0.107608 0.186181\nv -0.140022 -0.109335 0.162089\nv -0.140021 0.013638 0.195040\nv -0.292717 -0.186183 0.107606\nv -0.292717 -0.215043 -0.000099\nv -0.140022 -0.195042 -0.013640\nv -0.140022 -0.162091 0.109333\nv -0.301676 -0.204068 -0.204066\nv -0.214422 -0.144712 -0.244291\nv -0.214422 -0.244293 -0.144710\nv -0.301676 0.074691 -0.278759\nv -0.214421 0.139205 -0.247468\nv -0.214422 0.003175 -0.283917\nv -0.301676 0.278756 -0.074693\nv -0.214421 0.283915 -0.003177\nv -0.214421 0.247466 -0.139207\nv -0.301676 0.204064 0.204066\nv -0.214421 0.144708 0.244291\nv -0.214421 0.244289 0.144710\nv -0.301676 -0.074695 0.278759\nv -0.214422 -0.139209 0.247468\nv -0.214421 -0.003179 0.283917\nv -0.301676 -0.278762 0.074694\nv -0.214422 -0.283920 0.003177\nv -0.214422 -0.247470 0.139207\nv 0.260547 0.545524 -0.314960\nv -0.242068 0.545524 -0.314960\nv 0.337746 -0.578569 0.000000\nv 0.337746 -0.558855 -0.149744\nv 0.337746 -0.501055 -0.289283\nv 0.337746 -0.409110 -0.409108\nv 0.337746 -0.289286 -0.501052\nv 0.337746 -0.149747 -0.558852\nv 0.337746 -0.000002 -0.578566\nv 0.337746 0.149742 -0.558852\nv 0.337746 0.289281 -0.501052\nv 0.337746 0.409106 -0.409108\nv 0.337746 0.501050 -0.289283\nv -0.319267 0.501050 -0.289283\nv 0.337746 0.501050 -0.289283\nv 0.337746 0.558850 -0.149744\nv 0.337746 0.578564 0.000000\nv 0.337746 0.558850 0.149744\nv 0.337746 0.501050 0.289283\nv 0.337746 0.409106 0.409108\nv 0.337746 0.289280 0.501053\nv 0.337746 0.149742 0.558852\nv 0.337746 -0.000002 0.578566\nv 0.337746 -0.149747 0.558852\nv 0.337746 -0.289286 0.501053\nv 0.337746 -0.409110 0.409108\nv 0.337746 -0.501055 0.289283\nv 0.337746 -0.558855 0.149744\nv -0.319268 -0.578568 0.000000\nv -0.319268 -0.558855 -0.149744\nv -0.319268 -0.501055 -0.289283\nv -0.319268 -0.409110 -0.409108\nv -0.319268 -0.289285 -0.501052\nv -0.319268 -0.149747 -0.558852\nv -0.319268 -0.000002 -0.578566\nv -0.319268 0.149742 -0.558852\nv -0.319268 0.289281 -0.501052\nv -0.319267 0.409106 -0.409108\nv -0.319267 0.501050 -0.289283\nv -0.319267 0.558850 -0.149744\nv -0.319267 0.578564 0.000000\nv -0.319267 0.558850 0.149744\nv -0.319267 0.501050 0.289283\nv -0.319267 0.409106 0.409108\nv -0.319267 0.289281 0.501053\nv -0.319267 0.149742 0.558852\nv -0.319268 -0.000002 0.578566\nv -0.319268 -0.149747 0.558852\nv -0.319268 -0.289286 0.501053\nv -0.319268 -0.409110 0.409108\nv -0.319268 -0.501055 0.289283\nv -0.319268 -0.558855 0.149744\nv -0.295780 -0.457093 0.002734\nv -0.286629 -0.437656 -0.117269\nv -0.295780 -0.394488 -0.230913\nv -0.295780 -0.230915 -0.394485\nv -0.286629 -0.117271 -0.437654\nv -0.295780 0.002731 -0.457090\nv -0.295780 0.226176 -0.397218\nv -0.286629 0.320383 -0.320385\nv -0.295780 0.397216 -0.226177\nv -0.295780 0.457088 -0.002733\nv -0.286629 0.437651 0.117269\nv -0.295780 0.394483 0.230913\nv -0.295780 0.230910 0.394485\nv -0.286629 0.117266 0.437654\nv -0.295780 -0.002736 0.457090\nv -0.295780 -0.226180 0.397219\nv -0.286629 -0.320387 0.320385\nv -0.295780 -0.397222 0.226178\nv -0.313854 -0.323586 -0.323584\nv -0.313854 0.118437 -0.442024\nv -0.313854 0.442021 -0.118440\nv -0.313854 0.323581 0.323584\nv -0.295780 0.230910 0.394485\nv -0.188711 0.198363 0.388536\nv -0.094854 0.198303 0.336103\nv -0.313854 -0.118443 0.442024\nv -0.313854 -0.442026 0.118440\nv -0.094854 -0.336105 -0.198306\nv -0.063568 -0.216848 -0.216846\nv -0.090794 -0.300590 -0.080542\nv -0.094854 -0.198307 -0.336103\nv -0.090794 -0.080545 -0.300587\nv -0.094854 0.003684 -0.390227\nv -0.063568 0.079369 -0.296217\nv -0.094854 0.191919 -0.339789\nv -0.090794 0.220042 -0.220045\nv -0.094854 0.339787 -0.191921\nv -0.063568 0.296215 -0.079371\nv -0.094854 0.390224 -0.003686\nv -0.090794 0.300584 0.080542\nv -0.094854 0.336100 0.198306\nv -0.063568 0.216844 0.216846\nv -0.094854 0.198303 0.336103\nv -0.090794 0.080540 0.300587\nv -0.094854 -0.003689 0.390227\nv -0.063568 -0.079374 0.296217\nv -0.094854 -0.191923 0.339789\nv -0.090794 -0.220048 0.220045\nv -0.094854 -0.339792 0.191921\nv -0.063568 -0.296219 0.079371\nv -0.094854 -0.390229 0.003686\nv -0.261426 -0.340198 -0.255968\nv -0.284592 -0.300785 -0.300783\nv -0.261426 -0.255970 -0.340196\nv -0.191925 -0.235875 -0.344088\nv -0.104670 -0.244373 -0.315257\nv -0.104670 -0.315260 -0.244370\nv -0.191925 -0.344090 -0.235872\nv -0.261426 0.051574 -0.422602\nv -0.284592 0.110091 -0.410877\nv -0.261426 0.166632 -0.391773\nv -0.191925 0.180051 -0.376315\nv -0.104670 0.150834 -0.369259\nv -0.104670 0.053999 -0.395205\nv -0.191925 0.032225 -0.415925\nv -0.261426 0.391770 -0.166635\nv -0.284592 0.410874 -0.110094\nv -0.261426 0.422600 -0.051576\nv -0.191925 0.415922 -0.032227\nv -0.104670 0.395204 -0.054001\nv -0.104670 0.369256 -0.150836\nv -0.191925 0.376313 -0.180053\nv -0.261426 0.340194 0.255968\nv -0.284592 0.300780 0.300783\nv -0.261426 0.255966 0.340196\nv -0.191925 0.235869 0.344088\nv -0.104670 0.244367 0.315257\nv -0.104670 0.315255 0.244370\nv -0.191925 0.344086 0.235873\nv -0.261426 -0.051580 0.422603\nv -0.284592 -0.110096 0.410877\nv -0.261426 -0.166637 0.391773\nv -0.191925 -0.180055 0.376316\nv -0.104670 -0.150838 0.369260\nv -0.104670 -0.054005 0.395206\nv -0.191925 -0.032230 0.415925\nv -0.261426 -0.391775 0.166635\nv -0.284592 -0.410879 0.110094\nv -0.261426 -0.422605 0.051577\nv -0.191925 -0.415927 0.032228\nv -0.104670 -0.395208 0.054002\nv -0.104670 -0.369262 0.150836\nv -0.191925 -0.376318 0.180053\nv -0.314834 -0.040689 -0.151846\nv -0.324172 -0.105687 -0.105684\nv -0.314834 -0.151849 -0.040687\nv -0.314834 0.111157 -0.111159\nv -0.324172 0.038681 -0.144367\nv -0.314834 -0.040689 -0.151846\nv -0.233703 -0.044758 -0.167032\nv -0.146449 -0.041007 -0.153028\nv -0.314834 0.151844 0.040688\nv -0.324172 0.144365 -0.038683\nv -0.314834 0.111157 -0.111159\nv -0.233703 0.122273 -0.122276\nv -0.146449 0.112021 -0.112024\nv -0.314834 0.040684 0.151846\nv -0.324172 0.105682 0.105684\nv -0.314834 0.151844 0.040688\nv -0.233703 0.167030 0.044756\nv -0.146449 0.153025 0.041003\nv -0.314834 -0.111162 0.111160\nv -0.324172 -0.038686 0.144367\nv -0.314834 0.040684 0.151846\nv -0.233703 0.044754 0.167032\nv -0.146449 0.041001 0.153028\nv -0.314834 -0.151849 -0.040687\nv -0.324172 -0.144369 0.038683\nv -0.314834 -0.111162 0.111160\nv -0.146449 -0.153030 -0.041003\nv -0.233703 -0.167035 -0.044756\nv -0.233703 -0.122278 0.122276\nv -0.146449 -0.112026 0.112024\nvt 0.192958 -0.332243\nvt 0.214270 -0.264748\nvt 0.214270 -0.332243\nvt 0.192958 -0.264748\nvt 0.171638 -0.332243\nvt 0.171638 -0.264748\nvt 0.150306 -0.332243\nvt 0.150306 -0.264748\nvt 0.128960 -0.332243\nvt 0.128960 -0.264748\nvt 0.107598 -0.332243\nvt 0.107598 -0.264748\nvt 0.086217 -0.332243\nvt 0.086217 -0.264749\nvt 0.064817 -0.332237\nvt 0.064817 -0.264755\nvt 0.043385 -0.332208\nvt 0.043385 -0.264784\nvt 0.021846 -0.332158\nvt 0.021846 -0.264833\nvt 0.000000 -0.332497\nvt 0.000000 -0.264495\nvt 0.491907 -0.332157\nvt 0.513754 -0.264496\nvt 0.513754 -0.332496\nvt 0.491907 -0.264834\nvt 0.470371 -0.332216\nvt 0.470371 -0.264776\nvt 0.448941 -0.332234\nvt 0.448941 -0.264757\nvt 0.427539 -0.332240\nvt 0.427539 -0.264751\nvt 0.406157 -0.332242\nvt 0.406157 -0.264750\nvt 0.384794 -0.332243\nvt 0.384794 -0.264749\nvt 0.363448 -0.332243\nvt 0.363448 -0.264748\nvt 0.342116 -0.332243\nvt 0.342116 -0.264748\nvt 0.320796 -0.332243\nvt 0.320796 -0.264748\nvt 0.299485 -0.332243\nvt 0.299485 -0.264748\nvt 0.278180 -0.332243\nvt 0.278180 -0.264748\nvt 0.256877 -0.332243\nvt 0.256877 -0.264748\nvt 0.235575 -0.332243\nvt 0.235575 -0.264748\nvt 0.275924 -0.029510\nvt 0.273219 -0.049641\nvt 0.273247 -0.039398\nvt 0.280943 -0.068427\nvt 0.275845 -0.059543\nvt 0.297024 -0.080835\nvt 0.288167 -0.075690\nvt 0.317155 -0.083540\nvt 0.306912 -0.083512\nvt 0.335941 -0.075816\nvt 0.327057 -0.080915\nvt 0.348349 -0.059735\nvt 0.343204 -0.068592\nvt 0.351054 -0.039604\nvt 0.351027 -0.049847\nvt 0.343331 -0.020818\nvt 0.348429 -0.029702\nvt 0.327249 -0.008410\nvt 0.336107 -0.013555\nvt 0.307118 -0.005705\nvt 0.317362 -0.005732\nvt 0.288332 -0.013429\nvt 0.297217 -0.008330\nvt 0.281069 -0.020653\nvt 0.192958 -0.344662\nvt 0.214270 -0.344662\nvt 0.214270 -0.252330\nvt 0.192958 -0.252330\nvt 0.171638 -0.344662\nvt 0.171638 -0.252330\nvt 0.150306 -0.344662\nvt 0.150306 -0.252330\nvt 0.128960 -0.344662\nvt 0.128960 -0.252330\nvt 0.107597 -0.344662\nvt 0.107597 -0.252330\nvt 0.086213 -0.344661\nvt 0.086213 -0.252331\nvt 0.064808 -0.344648\nvt 0.064808 -0.252343\nvt 0.043401 -0.344591\nvt 0.043401 -0.252400\nvt 0.022137 -0.344503\nvt 0.022137 -0.252488\nvt 0.001444 -0.345130\nvt 0.001444 -0.251862\nvt 0.491620 -0.344502\nvt 0.512312 -0.345128\nvt 0.512312 -0.251863\nvt 0.491620 -0.252489\nvt 0.470351 -0.344607\nvt 0.470351 -0.252384\nvt 0.448940 -0.344643\nvt 0.448940 -0.252348\nvt 0.427539 -0.344655\nvt 0.427539 -0.252336\nvt 0.406157 -0.344659\nvt 0.406157 -0.252332\nvt 0.384795 -0.344661\nvt 0.384795 -0.252330\nvt 0.363448 -0.344662\nvt 0.363448 -0.252330\nvt 0.342116 -0.344662\nvt 0.342116 -0.252330\nvt 0.320796 -0.344662\nvt 0.320796 -0.252330\nvt 0.299485 -0.344662\nvt 0.299485 -0.252330\nvt 0.278180 -0.344662\nvt 0.278180 -0.252330\nvt 0.256877 -0.344662\nvt 0.256877 -0.252330\nvt 0.235575 -0.344662\nvt 0.235575 -0.252330\nvt 0.303130 -0.105961\nvt 0.296744 -0.126421\nvt 0.288756 -0.120259\nvt 0.309250 -0.113981\nvt 0.287883 -0.141675\nvt 0.278572 -0.137790\nvt 0.283272 -0.158702\nvt 0.273273 -0.157359\nvt 0.283225 -0.176343\nvt 0.273219 -0.177633\nvt 0.287746 -0.193394\nvt 0.278415 -0.197230\nvt 0.296525 -0.208695\nvt 0.288505 -0.214815\nvt 0.308966 -0.221202\nvt 0.302803 -0.229189\nvt 0.324220 -0.230062\nvt 0.320334 -0.239373\nvt 0.341247 -0.234673\nvt 0.339904 -0.244672\nvt 0.358887 -0.234720\nvt 0.360178 -0.244726\nvt 0.375939 -0.230199\nvt 0.379775 -0.239530\nvt 0.391239 -0.221420\nvt 0.397360 -0.229440\nvt 0.403746 -0.208979\nvt 0.411734 -0.215142\nvt 0.412607 -0.193726\nvt 0.421917 -0.197611\nvt 0.417218 -0.176698\nvt 0.427217 -0.178042\nvt 0.417265 -0.159058\nvt 0.427271 -0.157768\nvt 0.412744 -0.142006\nvt 0.422075 -0.138170\nvt 0.403965 -0.126706\nvt 0.411985 -0.120586\nvt 0.391524 -0.114199\nvt 0.397687 -0.106212\nvt 0.376270 -0.105339\nvt 0.380156 -0.096028\nvt 0.359243 -0.100728\nvt 0.360586 -0.090729\nvt 0.341603 -0.100681\nvt 0.340312 -0.090675\nvt 0.324551 -0.105202\nvt 0.320715 -0.095870\nvt 0.002360 -0.067694\nvt 0.010620 -0.078923\nvt 0.007943 -0.080489\nvt 0.005338 -0.066791\nvt 0.016358 -0.091660\nvt 0.018570 -0.089485\nvt 0.021254 -0.087237\nvt 0.014452 -0.076652\nvt 0.008349 -0.065639\nvt 0.028923 -0.097649\nvt 0.027399 -0.100330\nvt 0.040541 -0.105192\nvt 0.041248 -0.102162\nvt 0.041756 -0.098978\nvt 0.030003 -0.095638\nvt 0.054396 -0.103653\nvt 0.054414 -0.106754\nvt 0.068295 -0.105052\nvt 0.067518 -0.102049\nvt 0.066913 -0.098600\nvt 0.054345 -0.099199\nvt 0.079764 -0.097164\nvt 0.081324 -0.099825\nvt 0.092106 -0.090875\nvt 0.089835 -0.088748\nvt 0.087332 -0.086716\nvt 0.078563 -0.095224\nvt 0.097701 -0.078107\nvt 0.100396 -0.079642\nvt 0.105862 -0.066770\nvt 0.102873 -0.065941\nvt 0.099584 -0.064741\nvt 0.093818 -0.075924\nvt 0.104766 -0.052893\nvt 0.107850 -0.052873\nvt 0.105490 -0.039060\nvt 0.102512 -0.039964\nvt 0.099501 -0.041115\nvt 0.102485 -0.052964\nvt 0.097229 -0.027831\nvt 0.099907 -0.026265\nvt 0.091492 -0.015095\nvt 0.089280 -0.017269\nvt 0.086595 -0.019517\nvt 0.093398 -0.030103\nvt 0.078926 -0.009106\nvt 0.080451 -0.006425\nvt 0.067309 -0.001563\nvt 0.066602 -0.004592\nvt 0.066094 -0.007776\nvt 0.077847 -0.011117\nvt 0.053454 -0.003102\nvt 0.053436 -0.000000\nvt 0.039555 -0.001702\nvt 0.040332 -0.004706\nvt 0.040937 -0.008154\nvt 0.053505 -0.007555\nvt 0.028085 -0.009590\nvt 0.026526 -0.006929\nvt 0.015744 -0.015880\nvt 0.018015 -0.018006\nvt 0.020518 -0.020038\nvt 0.029287 -0.011530\nvt 0.010150 -0.028648\nvt 0.007454 -0.027112\nvt 0.001988 -0.039985\nvt 0.004977 -0.040813\nvt 0.008266 -0.042014\nvt 0.014032 -0.030830\nvt 0.003084 -0.053861\nvt 0.000000 -0.053881\nvt 0.005365 -0.053791\nvt 0.070955 -0.196215\nvt 0.088008 -0.192938\nvt 0.082624 -0.202071\nvt 0.079749 -0.188165\nvt 0.093417 -0.209136\nvt 0.096076 -0.197535\nvt 0.104166 -0.189424\nvt 0.095259 -0.179204\nvt 0.083113 -0.177068\nvt 0.115811 -0.220298\nvt 0.132062 -0.214107\nvt 0.128348 -0.224039\nvt 0.123088 -0.210839\nvt 0.140213 -0.229138\nvt 0.140830 -0.217240\nvt 0.147360 -0.207838\nvt 0.136777 -0.199307\nvt 0.124380 -0.199311\nvt 0.164260 -0.236036\nvt 0.179136 -0.227103\nvt 0.177214 -0.237525\nvt 0.169754 -0.225451\nvt 0.189738 -0.240453\nvt 0.188297 -0.228667\nvt 0.193000 -0.218225\nvt 0.181175 -0.211710\nvt 0.169039 -0.213868\nvt 0.214453 -0.243823\nvt 0.227215 -0.232131\nvt 0.227237 -0.242652\nvt 0.217724 -0.232317\nvt 0.239853 -0.243462\nvt 0.236492 -0.232097\nvt 0.238854 -0.220910\nvt 0.226325 -0.216705\nvt 0.215051 -0.221057\nvt 0.000000 -0.125196\nvt 0.016348 -0.129508\nvt 0.007630 -0.135408\nvt 0.011114 -0.121582\nvt 0.014303 -0.146334\nvt 0.021612 -0.136932\nvt 0.032132 -0.132608\nvt 0.028784 -0.120326\nvt 0.019322 -0.113890\nvt 0.031233 -0.164606\nvt 0.048545 -0.164655\nvt 0.041523 -0.172582\nvt 0.041396 -0.158413\nvt 0.050776 -0.181512\nvt 0.055572 -0.170621\nvt 0.064967 -0.164095\nvt 0.058318 -0.152597\nvt 0.047097 -0.148339\nvt 0.104719 -0.214475\nvt 0.103916 -0.216087\nvt 0.098573 -0.208871\nvt 0.112918 -0.215956\nvt 0.112101 -0.213446\nvt 0.105879 -0.212136\nvt 0.101075 -0.207957\nvt 0.119220 -0.209521\nvt 0.119315 -0.200416\nvt 0.116801 -0.200188\nvt 0.116948 -0.208655\nvt 0.113081 -0.196455\nvt 0.117698 -0.186857\nvt 0.106240 -0.194006\nvt 0.108227 -0.194473\nvt 0.112655 -0.197544\nvt 0.099777 -0.199913\nvt 0.102031 -0.201091\nvt 0.152321 -0.232322\nvt 0.151821 -0.234050\nvt 0.145233 -0.227967\nvt 0.160651 -0.232278\nvt 0.159399 -0.229950\nvt 0.153031 -0.229810\nvt 0.147520 -0.226635\nvt 0.165726 -0.224830\nvt 0.164288 -0.215829\nvt 0.161817 -0.216051\nvt 0.163339 -0.224370\nvt 0.157396 -0.213209\nvt 0.160169 -0.202891\nvt 0.150225 -0.211986\nvt 0.152270 -0.212095\nvt 0.157165 -0.214368\nvt 0.144917 -0.218941\nvt 0.147357 -0.219717\nvt 0.202081 -0.241948\nvt 0.201845 -0.243731\nvt 0.194518 -0.238503\nvt 0.210294 -0.240747\nvt 0.208693 -0.238698\nvt 0.202443 -0.239366\nvt 0.196603 -0.236815\nvt 0.213687 -0.232424\nvt 0.210739 -0.223803\nvt 0.208294 -0.224417\nvt 0.211248 -0.232408\nvt 0.203634 -0.221978\nvt 0.204919 -0.211406\nvt 0.196445 -0.221803\nvt 0.198457 -0.221529\nvt 0.203575 -0.223148\nvt 0.192616 -0.229652\nvt 0.195158 -0.229979\nvt 0.252202 -0.242922\nvt 0.252259 -0.244726\nvt 0.244219 -0.240709\nvt 0.264538 -0.242608\nvt 0.260027 -0.240184\nvt 0.258104 -0.238436\nvt 0.252124 -0.240314\nvt 0.246001 -0.238690\nvt 0.262051 -0.231379\nvt 0.266084 -0.230455\nvt 0.260344 -0.220084\nvt 0.256974 -0.223767\nvt 0.254652 -0.224899\nvt 0.259680 -0.231852\nvt 0.249739 -0.222866\nvt 0.249252 -0.212239\nvt 0.242745 -0.223753\nvt 0.244619 -0.223050\nvt 0.249870 -0.224035\nvt 0.240918 -0.232268\nvt 0.243498 -0.232093\nvt 0.022808 -0.155461\nvt 0.021484 -0.156673\nvt 0.019101 -0.148066\nvt 0.030058 -0.159529\nvt 0.030163 -0.156874\nvt 0.024697 -0.153674\nvt 0.021707 -0.148183\nvt 0.038259 -0.155776\nvt 0.042166 -0.147580\nvt 0.040048 -0.146474\nvt 0.036462 -0.154090\nvt 0.037747 -0.141904\nvt 0.045418 -0.134514\nvt 0.032207 -0.137446\nvt 0.033829 -0.138553\nvt 0.036978 -0.142781\nvt 0.024006 -0.140515\nvt 0.025608 -0.142482\nvt 0.060988 -0.188686\nvt 0.059925 -0.190139\nvt 0.055877 -0.182149\nvt 0.068839 -0.191448\nvt 0.068452 -0.188829\nvt 0.062514 -0.186571\nvt 0.058483 -0.181690\nvt 0.076161 -0.186196\nvt 0.077977 -0.177283\nvt 0.075578 -0.176623\nvt 0.074071 -0.184936\nvt 0.072502 -0.172400\nvt 0.078644 -0.163701\nvt 0.066167 -0.168918\nvt 0.068025 -0.169709\nvt 0.071905 -0.173403\nvt 0.058761 -0.173597\nvt 0.060763 -0.175157\nvt 0.907317 -0.311240\nvt 0.866908 -0.304769\nvt 0.898737 -0.301488\nvt 0.896702 -0.318101\nvt 0.905238 -0.290434\nvt 0.893351 -0.285633\nvt 0.892717 -0.273010\nvt 0.879982 -0.275564\nvt 0.873659 -0.264407\nvt 0.863558 -0.272301\nvt 0.852309 -0.266538\nvt 0.848153 -0.278845\nvt 0.835330 -0.278742\nvt 0.837115 -0.291436\nvt 0.826500 -0.298297\nvt 0.835080 -0.308049\nvt 0.828579 -0.319103\nvt 0.840466 -0.323904\nvt 0.841100 -0.336528\nvt 0.853835 -0.333973\nvt 0.860158 -0.345130\nvt 0.870259 -0.337237\nvt 0.881508 -0.342999\nvt 0.885664 -0.330693\nvt 0.898487 -0.330795\nvt 0.928469 -0.396351\nvt 0.934729 -0.390057\nvt 0.934753 -0.396255\nvt 0.928421 -0.390141\nvt 0.941043 -0.396304\nvt 0.941030 -0.390100\nvt 0.941078 -0.381817\nvt 0.934715 -0.381800\nvt 0.928349 -0.381854\nvt 0.948171 -0.390234\nvt 0.948324 -0.396175\nvt 0.957593 -0.396661\nvt 0.957415 -0.390417\nvt 0.957488 -0.382491\nvt 0.948229 -0.382085\nvt 0.911653 -0.396394\nvt 0.921272 -0.390276\nvt 0.921192 -0.396413\nvt 0.912156 -0.390548\nvt 0.921200 -0.382140\nvt 0.911947 -0.382610\nvt 0.335536 -0.874887\nvt 0.329403 -0.881305\nvt 0.329255 -0.875108\nvt 0.335708 -0.881095\nvt 0.322966 -0.875185\nvt 0.323102 -0.881388\nvt 0.323221 -0.889670\nvt 0.329582 -0.889560\nvt 0.335946 -0.889379\nvt 0.315960 -0.881396\nvt 0.315689 -0.875459\nvt 0.306412 -0.875159\nvt 0.306714 -0.881397\nvt 0.306800 -0.889324\nvt 0.316066 -0.889545\nvt 0.352347 -0.874507\nvt 0.342853 -0.880816\nvt 0.342811 -0.874679\nvt 0.351962 -0.880363\nvt 0.343088 -0.888950\nvt 0.352330 -0.888295\nvt 0.397445 -0.785310\nvt 0.390940 -0.779270\nvt 0.397134 -0.779034\nvt 0.391241 -0.785572\nvt 0.396968 -0.772746\nvt 0.390768 -0.772971\nvt 0.382488 -0.773208\nvt 0.382689 -0.779567\nvt 0.382961 -0.785927\nvt 0.390657 -0.765830\nvt 0.396589 -0.765473\nvt 0.396757 -0.756194\nvt 0.390524 -0.756585\nvt 0.382599 -0.756783\nvt 0.382511 -0.766052\nvt 0.398065 -0.802115\nvt 0.391621 -0.792712\nvt 0.397757 -0.792582\nvt 0.392205 -0.801814\nvt 0.383492 -0.793062\nvt 0.384279 -0.802294\nvt 0.980984 -0.693606\nvt 0.974725 -0.699900\nvt 0.974701 -0.693702\nvt 0.981033 -0.699816\nvt 0.968411 -0.693653\nvt 0.968423 -0.699857\nvt 0.968376 -0.708140\nvt 0.974738 -0.708157\nvt 0.981104 -0.708103\nvt 0.961282 -0.699723\nvt 0.961129 -0.693782\nvt 0.951861 -0.693296\nvt 0.952038 -0.699539\nvt 0.951965 -0.707466\nvt 0.961225 -0.707872\nvt 0.997800 -0.693563\nvt 0.988182 -0.699681\nvt 0.988262 -0.693544\nvt 0.997298 -0.699410\nvt 0.988253 -0.707817\nvt 0.997507 -0.707348\nvt 0.144699 -0.007835\nvt 0.138471 -0.014161\nvt 0.138416 -0.007963\nvt 0.144779 -0.014045\nvt 0.132126 -0.007945\nvt 0.132170 -0.014149\nvt 0.132164 -0.022432\nvt 0.138527 -0.022417\nvt 0.144892 -0.022331\nvt 0.125028 -0.014051\nvt 0.124845 -0.008111\nvt 0.115575 -0.007673\nvt 0.115783 -0.013915\nvt 0.115750 -0.021841\nvt 0.125012 -0.022201\nvt 0.161515 -0.007707\nvt 0.151927 -0.013873\nvt 0.151976 -0.007736\nvt 0.161042 -0.013556\nvt 0.152040 -0.022009\nvt 0.161291 -0.021492\nvt 0.285921 -0.874874\nvt 0.279783 -0.881286\nvt 0.279640 -0.875090\nvt 0.286088 -0.881081\nvt 0.273350 -0.875161\nvt 0.273482 -0.881364\nvt 0.273594 -0.889646\nvt 0.279955 -0.889541\nvt 0.286319 -0.889366\nvt 0.266340 -0.881367\nvt 0.266073 -0.875430\nvt 0.256797 -0.875122\nvt 0.257094 -0.881361\nvt 0.257173 -0.889287\nvt 0.266439 -0.889516\nvt 0.302733 -0.874507\nvt 0.293234 -0.880809\nvt 0.293196 -0.874671\nvt 0.302343 -0.880363\nvt 0.293461 -0.888942\nvt 0.302704 -0.888295\nvt 0.986220 -0.990758\nvt 0.981755 -0.982911\nvt 0.989940 -0.987705\nvt 0.981695 -0.992397\nvt 0.990783 -0.982967\nvt 0.990000 -0.978219\nvt 0.986318 -0.975120\nvt 0.981814 -0.973424\nvt 0.977290 -0.975063\nvt 0.973569 -0.978116\nvt 0.972726 -0.982854\nvt 0.973509 -0.987602\nvt 0.977191 -0.990701\nvt 0.972637 -0.998419\nvt 0.981656 -0.997199\nvt 0.981638 -1.000000\nvt 0.974538 -0.995231\nvt 0.990626 -0.998561\nvt 0.988817 -0.995321\nvt 0.988437 -0.994658\nvt 0.981667 -0.996499\nvt 0.974922 -0.994571\nvt 0.994080 -0.990140\nvt 0.996496 -0.991557\nvt 0.999744 -0.983053\nvt 0.996033 -0.983000\nvt 0.995270 -0.982997\nvt 0.993479 -0.989780\nvt 0.994178 -0.975851\nvt 0.996613 -0.974467\nvt 0.990873 -0.967402\nvt 0.988971 -0.970590\nvt 0.988587 -0.971250\nvt 0.993566 -0.976192\nvt 0.981853 -0.968622\nvt 0.981872 -0.965821\nvt 0.972883 -0.967260\nvt 0.974693 -0.970501\nvt 0.975072 -0.971163\nvt 0.981842 -0.969322\nvt 0.969429 -0.975681\nvt 0.967013 -0.974265\nvt 0.963765 -0.982768\nvt 0.967476 -0.982821\nvt 0.968240 -0.982824\nvt 0.970031 -0.976041\nvt 0.969331 -0.989970\nvt 0.966896 -0.991354\nvt 0.969943 -0.989629\nvt 0.981679 -0.994820\nvt 0.975836 -0.993013\nvt 0.987544 -0.993087\nvt 0.992030 -0.988931\nvt 0.993462 -0.982985\nvt 0.992106 -0.977021\nvt 0.987673 -0.972809\nvt 0.981830 -0.971002\nvt 0.975965 -0.972734\nvt 0.971479 -0.976891\nvt 0.970047 -0.982836\nvt 0.971403 -0.988800\nvt 0.934723 -0.373636\nvt 0.941223 -0.373422\nvt 0.942082 -0.365247\nvt 0.934616 -0.367330\nvt 0.927309 -0.365257\nvt 0.928146 -0.373484\nvt 0.948570 -0.373972\nvt 0.957869 -0.374626\nvt 0.958319 -0.369485\nvt 0.949319 -0.368716\nvt 0.920816 -0.374030\nvt 0.920052 -0.368770\nvt 0.911050 -0.369590\nvt 0.911523 -0.374734\nvt 0.329737 -0.897722\nvt 0.323243 -0.898066\nvt 0.322547 -0.906257\nvt 0.329971 -0.904025\nvt 0.337317 -0.905952\nvt 0.336317 -0.897743\nvt 0.315886 -0.897663\nvt 0.306576 -0.897195\nvt 0.306229 -0.902344\nvt 0.315243 -0.902932\nvt 0.343634 -0.897050\nvt 0.344502 -0.902294\nvt 0.353487 -0.901294\nvt 0.352911 -0.896161\nvt 0.374530 -0.779839\nvt 0.374093 -0.773350\nvt 0.365893 -0.772772\nvt 0.368231 -0.780163\nvt 0.366409 -0.787536\nvt 0.374603 -0.786418\nvt 0.374391 -0.765988\nvt 0.374726 -0.756672\nvt 0.369572 -0.756399\nvt 0.369113 -0.765420\nvt 0.375400 -0.793724\nvt 0.370170 -0.794668\nvt 0.371297 -0.803637\nvt 0.376422 -0.802988\nvt 0.974730 -0.716321\nvt 0.968230 -0.716534\nvt 0.967371 -0.724710\nvt 0.974838 -0.722627\nvt 0.982144 -0.724701\nvt 0.981308 -0.716473\nvt 0.960883 -0.715985\nvt 0.951584 -0.715331\nvt 0.951135 -0.720472\nvt 0.960135 -0.721241\nvt 0.988637 -0.715927\nvt 0.989401 -0.721187\nvt 0.998404 -0.720367\nvt 0.997931 -0.715223\nvt 0.138560 -0.030581\nvt 0.132061 -0.030828\nvt 0.131244 -0.039007\nvt 0.138700 -0.036887\nvt 0.146016 -0.038923\nvt 0.145138 -0.030700\nvt 0.124711 -0.030315\nvt 0.115409 -0.029708\nvt 0.114986 -0.034852\nvt 0.123990 -0.035574\nvt 0.152465 -0.030117\nvt 0.153255 -0.035373\nvt 0.162254 -0.034508\nvt 0.161754 -0.029366\nvt 0.280104 -0.897704\nvt 0.273609 -0.898042\nvt 0.272907 -0.906233\nvt 0.280332 -0.904007\nvt 0.287677 -0.905940\nvt 0.286683 -0.897730\nvt 0.266253 -0.897633\nvt 0.256943 -0.897158\nvt 0.256592 -0.902307\nvt 0.265605 -0.902903\nvt 0.294001 -0.897043\nvt 0.294865 -0.902287\nvt 0.303851 -0.901295\nvt 0.303279 -0.896161\nvn -0.2828 -0.9265 -0.2482\nvn 0.2828 -0.9591 0.0000\nvn -0.2828 -0.9591 0.0000\nvn 0.2828 -0.9265 -0.2482\nvn -0.2828 -0.8307 -0.4796\nvn 0.2828 -0.8307 -0.4796\nvn -0.2828 -0.6782 -0.6782\nvn 0.2828 -0.6782 -0.6782\nvn -0.2828 -0.4796 -0.8307\nvn 0.2828 -0.4796 -0.8307\nvn -0.2828 -0.2482 -0.9265\nvn 0.2828 -0.2482 -0.9265\nvn -0.2828 0.0000 -0.9591\nvn 0.2828 0.0000 -0.9591\nvn -0.2828 0.2482 -0.9265\nvn 0.2828 0.2482 -0.9265\nvn -0.2828 0.4796 -0.8307\nvn 0.2828 0.4796 -0.8307\nvn -0.2828 0.6782 -0.6782\nvn 0.2828 0.6782 -0.6782\nvn -0.2806 0.7615 -0.5843\nvn 0.2806 0.7615 -0.5843\nvn -0.2828 0.9265 -0.2482\nvn 0.2806 0.8867 -0.3673\nvn -0.2806 0.8867 -0.3673\nvn 0.2828 0.9265 -0.2482\nvn -0.2828 0.9591 0.0000\nvn 0.2828 0.9591 0.0000\nvn -0.2828 0.9265 0.2482\nvn 0.2828 0.9265 0.2482\nvn -0.2828 0.8307 0.4796\nvn 0.2828 0.8307 0.4796\nvn -0.2828 0.6782 0.6782\nvn 0.2828 0.6782 0.6782\nvn -0.2828 0.4796 0.8307\nvn 0.2828 0.4796 0.8307\nvn -0.2828 0.2482 0.9265\nvn 0.2828 0.2482 0.9265\nvn -0.2828 0.0000 0.9591\nvn 0.2828 0.0000 0.9591\nvn -0.2828 -0.2482 0.9265\nvn 0.2828 -0.2482 0.9265\nvn -0.2828 -0.4796 0.8307\nvn 0.2828 -0.4796 0.8307\nvn -0.2828 -0.6782 0.6782\nvn 0.2828 -0.6782 0.6782\nvn -0.2828 -0.8307 0.4796\nvn 0.2828 -0.8307 0.4796\nvn -0.2828 -0.9265 0.2482\nvn 0.2828 -0.9265 0.2482\nvn 1.0000 0.0000 0.0000\nvn -0.5538 -0.8042 -0.2155\nvn -0.5538 -0.8326 0.0000\nvn 0.5538 -0.8326 0.0000\nvn 0.5538 -0.8042 -0.2155\nvn -0.5538 -0.7210 -0.4163\nvn 0.5538 -0.7211 -0.4163\nvn -0.5538 -0.5887 -0.5887\nvn 0.5538 -0.5887 -0.5887\nvn -0.5538 -0.4163 -0.7210\nvn 0.5538 -0.4163 -0.7211\nvn -0.5538 -0.2155 -0.8042\nvn 0.5538 -0.2155 -0.8042\nvn -0.5538 0.0000 -0.8326\nvn 0.5538 0.0000 -0.8326\nvn -0.5538 0.2155 -0.8042\nvn 0.5538 0.2155 -0.8042\nvn -0.5538 0.4163 -0.7210\nvn 0.5538 0.4163 -0.7210\nvn -0.5538 0.5887 -0.5887\nvn 0.5538 0.5887 -0.5887\nvn -0.5506 0.6623 -0.5082\nvn 0.5506 0.6623 -0.5082\nvn -0.5538 0.8042 -0.2155\nvn -0.5506 0.7712 -0.3194\nvn 0.5506 0.7712 -0.3194\nvn 0.5538 0.8042 -0.2155\nvn -0.5538 0.8326 0.0000\nvn 0.5538 0.8326 0.0000\nvn -0.5538 0.8042 0.2155\nvn 0.5538 0.8042 0.2155\nvn -0.5538 0.7210 0.4163\nvn 0.5538 0.7210 0.4163\nvn -0.5538 0.5887 0.5887\nvn 0.5538 0.5887 0.5887\nvn -0.5538 0.4163 0.7210\nvn 0.5538 0.4163 0.7210\nvn -0.5538 0.2155 0.8042\nvn 0.5538 0.2155 0.8042\nvn -0.5538 0.0000 0.8326\nvn 0.5538 0.0000 0.8326\nvn -0.5538 -0.2155 0.8042\nvn 0.5538 -0.2155 0.8042\nvn -0.5538 -0.4163 0.7211\nvn 0.5538 -0.4163 0.7211\nvn -0.5538 -0.5887 0.5887\nvn 0.5538 -0.5887 0.5887\nvn -0.5538 -0.7210 0.4163\nvn 0.5538 -0.7210 0.4163\nvn -0.5538 -0.8042 0.2155\nvn 0.5538 -0.8042 0.2155\nvn -1.0000 0.0000 0.0000\nvn -0.9238 0.3697 0.0990\nvn -0.9370 0.3492 0.0022\nvn -0.9370 0.3035 0.1727\nvn -0.7298 0.5882 0.3483\nvn -0.6476 0.7360 0.1972\nvn -0.7298 0.6836 -0.0075\nvn -0.9887 0.1058 0.1058\nvn -0.9370 0.1727 0.3035\nvn -0.7298 0.3483 0.5882\nvn -0.9738 0.1606 0.1606\nvn -0.9238 0.0990 0.3697\nvn -0.9370 0.0022 0.3492\nvn -0.7298 -0.0075 0.6836\nvn -0.6476 0.1972 0.7360\nvn -0.9887 -0.0387 0.1446\nvn -0.9370 -0.1765 0.3013\nvn -0.7298 -0.3353 0.5958\nvn -0.9738 -0.0588 0.2193\nvn -0.9238 -0.2706 0.2706\nvn -0.9370 -0.3013 0.1765\nvn -0.7298 -0.5958 0.3353\nvn -0.6476 -0.5388 0.5388\nvn -0.9887 -0.1446 0.0387\nvn -0.9370 -0.3492 -0.0022\nvn -0.7298 -0.6836 0.0075\nvn -0.9739 -0.2193 0.0587\nvn -0.9239 -0.3697 -0.0990\nvn -0.9370 -0.3035 -0.1727\nvn -0.7298 -0.5882 -0.3483\nvn -0.6476 -0.7360 -0.1972\nvn -0.9887 -0.1058 -0.1058\nvn -0.9370 -0.1727 -0.3035\nvn -0.7298 -0.3483 -0.5882\nvn -0.9739 -0.1606 -0.1606\nvn -0.9238 -0.0990 -0.3697\nvn -0.9370 -0.0022 -0.3492\nvn -0.7298 0.0075 -0.6836\nvn -0.6476 -0.1972 -0.7360\nvn -0.9887 0.0387 -0.1446\nvn -0.9370 0.1765 -0.3013\nvn -0.7298 0.3353 -0.5958\nvn -0.9738 0.0587 -0.2193\nvn -0.9238 0.2706 -0.2706\nvn -0.9370 0.3013 -0.1765\nvn -0.7298 0.5958 -0.3353\nvn -0.6476 0.5388 -0.5388\nvn -0.9887 0.1446 -0.0387\nvn -0.9738 0.2193 -0.0587\nvn -0.1718 0.9850 -0.0103\nvn -0.4222 0.8756 0.2346\nvn -0.2353 0.9388 0.2515\nvn -0.3116 0.9376 0.1543\nvn -0.1718 0.8479 0.5015\nvn -0.3116 0.8891 0.3351\nvn -0.7025 0.7107 0.0347\nvn -0.7700 0.6162 0.1651\nvn -0.7025 0.6329 0.3253\nvn -0.1718 0.5015 0.8479\nvn -0.4222 0.2346 0.8756\nvn -0.2353 0.2515 0.9388\nvn -0.3116 0.3351 0.8891\nvn -0.1718 -0.0103 0.9850\nvn -0.3116 0.1543 0.9376\nvn -0.7025 0.3253 0.6329\nvn -0.7700 0.1651 0.6162\nvn -0.7025 0.0347 0.7107\nvn -0.1718 -0.4835 0.8583\nvn -0.4222 -0.6410 0.6410\nvn -0.2353 -0.6872 0.6872\nvn -0.3116 -0.6024 0.7348\nvn -0.1718 -0.8583 0.4835\nvn -0.3116 -0.7348 0.6024\nvn -0.7025 -0.3854 0.5982\nvn -0.7700 -0.4511 0.4511\nvn -0.7025 -0.5982 0.3854\nvn -0.1718 -0.9850 0.0103\nvn -0.4222 -0.8756 -0.2346\nvn -0.2353 -0.9388 -0.2515\nvn -0.3116 -0.9376 -0.1543\nvn -0.1718 -0.8479 -0.5015\nvn -0.3116 -0.8891 -0.3351\nvn -0.7025 -0.7107 -0.0347\nvn -0.7700 -0.6162 -0.1651\nvn -0.7025 -0.6329 -0.3253\nvn -0.1906 -0.3270 -0.9256\nvn -0.4222 -0.2346 -0.8756\nvn -0.2353 -0.2515 -0.9388\nvn -0.3044 -0.2741 -0.9122\nvn -0.1718 0.0103 -0.9850\nvn -0.3116 -0.1543 -0.9376\nvn -0.7025 -0.3253 -0.6329\nvn -0.7700 -0.1651 -0.6162\nvn -0.6557 0.0252 -0.7546\nvn -0.1718 0.4835 -0.8583\nvn -0.4222 0.6410 -0.6410\nvn -0.2353 0.6872 -0.6872\nvn -0.3116 0.6024 -0.7348\nvn -0.1718 0.8583 -0.4835\nvn -0.3116 0.7348 -0.6024\nvn -0.7025 0.3854 -0.5982\nvn -0.7700 0.4511 -0.4511\nvn -0.7025 0.5982 -0.3854\nvn -0.6400 0.5433 0.5433\nvn -0.5296 0.5998 0.5998\nvn -0.3057 0.5380 0.7855\nvn -0.3057 0.7855 0.5380\nvn -0.5886 0.8083 0.0121\nvn -0.8616 0.3589 0.3589\nvn -0.5886 0.0121 0.8083\nvn -0.2540 0.7906 0.5571\nvn -0.3182 0.6740 0.6666\nvn 0.6569 0.7538 0.0118\nvn -0.0825 0.9929 -0.0859\nvn -0.6820 0.5171 0.5171\nvn -0.9882 0.1084 0.1084\nvn -0.3182 0.6666 0.6740\nvn 0.6570 0.0118 0.7538\nvn -0.1639 0.6975 0.6975\nvn -0.2540 0.5571 0.7906\nvn -0.0825 -0.0859 0.9929\nvn -0.6400 -0.1989 0.7422\nvn -0.5296 -0.2195 0.8194\nvn -0.3057 -0.4113 0.8587\nvn -0.3057 -0.0731 0.9493\nvn -0.5886 0.3936 0.7061\nvn -0.8616 -0.1314 0.4902\nvn -0.5886 -0.6939 0.4147\nvn -0.2540 -0.0871 0.9633\nvn -0.3182 -0.2403 0.9170\nvn 0.6569 0.3667 0.6587\nvn -0.0825 0.5708 0.8169\nvn -0.6820 -0.1893 0.7064\nvn -0.9882 -0.0397 0.1481\nvn -0.3182 -0.2504 0.9143\nvn 0.6570 -0.6469 0.3871\nvn -0.1639 -0.2553 0.9528\nvn -0.2540 -0.4062 0.8777\nvn -0.0825 -0.9028 0.4220\nvn -0.6400 -0.7422 0.1989\nvn -0.5296 -0.8194 0.2195\nvn -0.3057 -0.9493 0.0731\nvn -0.3057 -0.8587 0.4113\nvn -0.5886 -0.4147 0.6939\nvn -0.8616 -0.4902 0.1314\nvn -0.5886 -0.7061 -0.3936\nvn -0.2540 -0.8777 0.4062\nvn -0.3182 -0.9143 0.2504\nvn 0.6569 -0.3871 0.6469\nvn -0.0825 -0.4220 0.9028\nvn -0.6820 -0.7064 0.1892\nvn -0.9882 -0.1481 0.0397\nvn -0.3182 -0.9170 0.2403\nvn 0.6569 -0.6587 -0.3667\nvn -0.1639 -0.9528 0.2553\nvn -0.2540 -0.9633 0.0871\nvn -0.0825 -0.8169 -0.5708\nvn -0.6399 -0.5433 -0.5433\nvn -0.5295 -0.5998 -0.5998\nvn -0.3057 -0.5380 -0.7855\nvn -0.1563 -0.6045 -0.7811\nvn -0.3057 -0.7855 -0.5380\nvn -0.5886 -0.8083 -0.0121\nvn -0.8616 -0.3589 -0.3589\nvn -0.5886 -0.0121 -0.8083\nvn -0.2540 -0.7906 -0.5570\nvn -0.3190 -0.4130 -0.8530\nvn -0.7303 -0.0738 -0.6791\nvn -0.3182 -0.6740 -0.6666\nvn 0.6569 -0.7538 -0.0118\nvn -0.0825 -0.9929 0.0859\nvn -0.6820 -0.5171 -0.5171\nvn -0.9882 -0.1084 -0.1084\nvn -0.3182 -0.6666 -0.6740\nvn 0.6569 -0.0118 -0.7538\nvn -0.1639 -0.6975 -0.6975\nvn -0.2540 -0.5571 -0.7906\nvn -0.0825 0.0859 -0.9929\nvn -0.6400 0.1989 -0.7422\nvn -0.5296 0.2195 -0.8193\nvn -0.3057 0.4113 -0.8587\nvn -0.3057 0.0731 -0.9493\nvn -0.5886 -0.3936 -0.7061\nvn -0.8616 0.1314 -0.4902\nvn -0.5886 0.6939 -0.4147\nvn -0.2540 0.0871 -0.9633\nvn -0.3182 0.2403 -0.9170\nvn 0.6569 -0.3666 -0.6587\nvn -0.0825 -0.5708 -0.8169\nvn -0.6820 0.1893 -0.7064\nvn -0.9882 0.0397 -0.1481\nvn -0.3183 0.2504 -0.9143\nvn 0.6569 0.6469 -0.3871\nvn -0.1639 0.2553 -0.9528\nvn -0.2540 0.4062 -0.8777\nvn -0.0825 0.9028 -0.4220\nvn -0.6400 0.7422 -0.1989\nvn -0.5296 0.8194 -0.2195\nvn -0.3057 0.9493 -0.0731\nvn -0.3057 0.8587 -0.4113\nvn -0.5886 0.4147 -0.6939\nvn -0.8616 0.4902 -0.1314\nvn -0.5886 0.7061 0.3936\nvn -0.2540 0.8777 -0.4062\nvn -0.3182 0.9143 -0.2504\nvn 0.6569 0.3871 -0.6469\nvn -0.0825 0.4220 -0.9028\nvn -0.6820 0.7064 -0.1893\nvn -0.9882 0.1481 -0.0397\nvn -0.3182 0.9170 -0.2403\nvn 0.6569 0.6587 0.3667\nvn -0.1639 0.9528 -0.2553\nvn -0.2540 0.9633 -0.0871\nvn -0.0825 0.8169 0.5708\nvn -0.9821 0.1629 -0.0943\nvn -0.9998 0.0125 0.0125\nvn -0.9945 0.1007 0.0270\nvn -0.9821 -0.0943 0.1629\nvn -0.9945 0.0270 0.1007\nvn -0.9821 0.1631 0.0939\nvn -0.9998 -0.0045 0.0170\nvn -0.9821 -0.1882 -0.0002\nvn -0.9945 -0.0737 0.0737\nvn -0.9821 0.0002 0.1882\nvn -0.9998 -0.0170 0.0045\nvn -0.9821 -0.0939 -0.1631\nvn -0.9945 -0.1007 -0.0270\nvn -0.9821 -0.1629 0.0943\nvn -0.9998 -0.0125 -0.0125\nvn -0.9821 0.0943 -0.1629\nvn -0.9945 -0.0270 -0.1007\nvn -0.9821 -0.1631 -0.0939\nvn -0.9998 0.0045 -0.0170\nvn -0.9821 0.1882 0.0002\nvn -0.9945 0.0737 -0.0737\nvn -0.9821 -0.0002 -0.1882\nvn -0.9998 0.0170 -0.0045\nvn -0.9821 0.0939 0.1631\nvn -0.6592 -0.5375 0.5259\nvn -0.9932 -0.0822 -0.0822\nvn -0.9974 -0.0504 -0.0504\nvn -0.6490 -0.5773 0.4954\nvn -0.6592 0.5259 -0.5375\nvn -0.6490 0.4954 -0.5773\nvn -0.6405 0.4632 -0.6124\nvn -0.9865 -0.1155 -0.1155\nvn -0.6405 -0.6124 0.4632\nvn -0.0505 0.7118 -0.7005\nvn 0.0103 0.7747 -0.6323\nvn 0.1610 0.6182 -0.7693\nvn 0.0723 0.6185 -0.7824\nvn 0.0604 0.7202 -0.6911\nvn -0.0781 0.6989 -0.7109\nvn 0.1610 -0.7693 0.6182\nvn -0.0505 -0.7005 0.7118\nvn 0.0103 -0.6323 0.7747\nvn 0.0723 -0.7824 0.6185\nvn -0.0781 -0.7109 0.6989\nvn 0.0604 -0.6911 0.7202\nvn -0.6592 -0.7242 -0.2025\nvn -0.9932 0.0301 -0.1122\nvn -0.9974 0.0184 -0.0689\nvn -0.6490 -0.7177 -0.2523\nvn -0.6592 0.7284 0.1867\nvn -0.6490 0.7477 0.1403\nvn -0.6405 0.7620 0.0949\nvn -0.9865 0.0423 -0.1578\nvn -0.6405 -0.7074 -0.2988\nvn -0.0505 0.9626 0.2662\nvn 0.0103 0.9349 0.3547\nvn 0.1610 0.9754 0.1507\nvn 0.0723 0.9868 0.1444\nvn 0.0604 0.9586 0.2781\nvn -0.0781 0.9651 0.2498\nvn 0.1610 -0.9200 -0.3572\nvn -0.0505 -0.9667 -0.2508\nvn 0.0103 -0.9870 -0.1603\nvn 0.0723 -0.9268 -0.3683\nvn -0.0781 -0.9607 -0.2662\nvn 0.0604 -0.9693 -0.2384\nvn -0.6592 -0.1867 -0.7284\nvn -0.9932 0.1122 -0.0301\nvn -0.9974 0.0689 -0.0185\nvn -0.6490 -0.1403 -0.7477\nvn -0.6592 0.2025 0.7242\nvn -0.6490 0.2523 0.7177\nvn -0.6405 0.2988 0.7074\nvn -0.9865 0.1578 -0.0423\nvn -0.6405 -0.0949 -0.7620\nvn -0.0505 0.2508 0.9667\nvn 0.0103 0.1602 0.9870\nvn 0.1610 0.3571 0.9200\nvn 0.0723 0.3683 0.9268\nvn 0.0604 0.2384 0.9693\nvn -0.0781 0.2662 0.9607\nvn 0.1610 -0.1507 -0.9754\nvn -0.0505 -0.2662 -0.9626\nvn 0.0103 -0.3547 -0.9349\nvn 0.0723 -0.1444 -0.9868\nvn -0.0781 -0.2498 -0.9651\nvn 0.0604 -0.2781 -0.9586\nvn -0.6592 0.5375 -0.5259\nvn -0.9932 0.0822 0.0822\nvn -0.9974 0.0504 0.0504\nvn -0.6490 0.5773 -0.4954\nvn -0.6592 -0.5259 0.5375\nvn -0.6490 -0.4954 0.5773\nvn -0.6405 -0.4632 0.6124\nvn -0.9865 0.1155 0.1155\nvn -0.6405 0.6124 -0.4632\nvn -0.0505 -0.7118 0.7005\nvn 0.0103 -0.7747 0.6323\nvn 0.1610 -0.6182 0.7693\nvn 0.0723 -0.6185 0.7824\nvn 0.0604 -0.7202 0.6911\nvn -0.0781 -0.6989 0.7109\nvn 0.1610 0.7693 -0.6182\nvn -0.0505 0.7005 -0.7118\nvn 0.0103 0.6323 -0.7747\nvn 0.0723 0.7824 -0.6185\nvn -0.0781 0.7109 -0.6989\nvn 0.0604 0.6911 -0.7202\nvn -0.6592 0.7242 0.2025\nvn -0.9932 -0.0301 0.1122\nvn -0.9974 -0.0184 0.0689\nvn -0.6490 0.7177 0.2523\nvn -0.6592 -0.7284 -0.1867\nvn -0.6490 -0.7477 -0.1404\nvn -0.6405 -0.7620 -0.0949\nvn -0.9865 -0.0423 0.1578\nvn -0.6405 0.7074 0.2988\nvn -0.0505 -0.9626 -0.2662\nvn 0.0103 -0.9349 -0.3547\nvn 0.1610 -0.9754 -0.1507\nvn 0.0722 -0.9868 -0.1444\nvn 0.0604 -0.9586 -0.2781\nvn -0.0781 -0.9651 -0.2498\nvn 0.1610 0.9200 0.3572\nvn -0.0505 0.9667 0.2508\nvn 0.0103 0.9870 0.1602\nvn 0.0723 0.9268 0.3683\nvn -0.0781 0.9607 0.2662\nvn 0.0604 0.9693 0.2384\nvn -0.6592 0.1867 0.7284\nvn -0.9932 -0.1122 0.0301\nvn -0.9974 -0.0689 0.0184\nvn -0.6490 0.1403 0.7477\nvn -0.6592 -0.2025 -0.7242\nvn -0.6490 -0.2523 -0.7177\nvn -0.6405 -0.2988 -0.7074\nvn -0.9865 -0.1578 0.0423\nvn -0.6405 0.0949 0.7620\nvn -0.0505 -0.2508 -0.9667\nvn 0.0103 -0.1602 -0.9870\nvn 0.1610 -0.3572 -0.9200\nvn 0.0723 -0.3683 -0.9268\nvn 0.0604 -0.2384 -0.9693\nvn -0.0781 -0.2662 -0.9607\nvn 0.1610 0.1507 0.9754\nvn -0.0505 0.2662 0.9626\nvn 0.0103 0.3547 0.9349\nvn 0.0723 0.1444 0.9868\nvn -0.0781 0.2498 0.9651\nvn 0.0604 0.2781 0.9586\nvn -0.6497 0.1968 0.7343\nvn -0.6568 -0.1951 0.7283\nvn -0.6568 0.5332 0.5332\nvn -0.6497 -0.5375 0.5375\nvn -0.6568 -0.7283 0.1951\nvn -0.6497 -0.7343 -0.1968\nvn -0.6568 -0.5332 -0.5332\nvn -0.6497 -0.1968 -0.7343\nvn -0.6568 0.1951 -0.7283\nvn -0.6497 0.5375 -0.5375\nvn -0.6568 0.7283 -0.1951\nvn -0.6497 0.7343 0.1968\nvn -0.9596 -0.2716 -0.0728\nvn -0.9744 0.1589 0.1589\nvn -0.9940 -0.0774 -0.0774\nvn -0.9936 0.1093 0.0293\nvn -0.9596 -0.0728 -0.2716\nvn -0.9936 0.0293 0.1093\nvn -0.4788 0.2272 0.8480\nvn -0.4720 0.6234 0.6234\nvn -0.4788 0.8480 0.2272\nvn -0.9744 -0.0581 0.2170\nvn -0.9940 0.0283 -0.1057\nvn -0.9596 0.1988 -0.1988\nvn -0.9936 -0.0800 0.0800\nvn -0.4788 -0.6207 0.6208\nvn -0.4719 -0.2282 0.8516\nvn -0.9744 -0.2170 0.0581\nvn -0.9940 0.1057 -0.0283\nvn -0.9596 0.2716 0.0728\nvn -0.9936 -0.1093 -0.0293\nvn -0.4788 -0.8480 -0.2272\nvn -0.4719 -0.8516 0.2282\nvn -0.9744 -0.1589 -0.1589\nvn -0.9940 0.0774 0.0774\nvn -0.9596 0.0728 0.2716\nvn -0.9936 -0.0293 -0.1093\nvn -0.4788 -0.2272 -0.8480\nvn -0.4719 -0.6234 -0.6234\nvn -0.9744 0.0581 -0.2170\nvn -0.9940 -0.0283 0.1057\nvn -0.9596 -0.1988 0.1988\nvn -0.9936 0.0800 -0.0800\nvn -0.4788 0.6208 -0.6207\nvn -0.4719 0.2282 -0.8516\nvn -0.9744 0.2170 -0.0581\nvn -0.9940 -0.1057 0.0283\nvn -0.4719 0.8516 -0.2282\nvn -0.0592 0.7059 0.7059\nvn -0.0599 0.9642 0.2583\nvn -0.0599 0.2583 0.9642\nvn -0.0592 -0.2583 0.9642\nvn -0.0599 -0.7058 0.7058\nvn -0.0592 -0.9642 0.2583\nvn -0.0599 -0.9642 -0.2583\nvn -0.0592 -0.7059 -0.7059\nvn -0.0599 -0.2583 -0.9642\nvn -0.0592 0.2583 -0.9642\nvn -0.0599 0.7058 -0.7058\nvn -0.0592 0.9642 -0.2583\nvn -0.9752 -0.1565 -0.1565\nvn -0.6160 0.3348 -0.7130\nvn -0.6314 0.2367 -0.7384\nvn -0.9879 -0.1095 -0.1095\nvn -0.6314 -0.7384 0.2367\nvn -0.6160 -0.7130 0.3348\nvn -0.0470 0.5756 -0.8164\nvn 0.0925 0.6028 -0.7925\nvn 0.1166 0.4592 -0.8806\nvn -0.0229 0.4386 -0.8983\nvn -0.0470 -0.8164 0.5756\nvn -0.0229 -0.8983 0.4386\nvn 0.1166 -0.8806 0.4592\nvn 0.0925 -0.7925 0.6028\nvn -0.9752 0.0573 -0.2138\nvn -0.6160 0.7849 -0.0665\nvn -0.6314 0.7578 -0.1641\nvn -0.9879 0.0401 -0.1496\nvn -0.6314 -0.5742 -0.5211\nvn -0.6160 -0.6464 -0.4500\nvn -0.0470 0.9948 0.0903\nvn 0.0925 0.9877 0.1257\nvn 0.1166 0.9922 -0.0427\nvn -0.0229 0.9973 -0.0692\nvn -0.0470 -0.9066 -0.4192\nvn -0.0229 -0.8291 -0.5586\nvn 0.1166 -0.8380 -0.5331\nvn 0.0925 -0.9183 -0.3850\nvn -0.9752 0.2138 -0.0573\nvn -0.6160 0.4500 0.6464\nvn -0.6314 0.5211 0.5742\nvn -0.9879 0.1496 -0.0401\nvn -0.6314 0.1641 -0.7578\nvn -0.6160 0.0665 -0.7849\nvn -0.0470 0.4192 0.9066\nvn 0.0925 0.3849 0.9183\nvn 0.1166 0.5331 0.8380\nvn -0.0229 0.5587 0.8291\nvn -0.0470 -0.0903 -0.9948\nvn -0.0229 0.0693 -0.9973\nvn 0.1166 0.0427 -0.9922\nvn 0.0925 -0.1257 -0.9877\nvn -0.9752 0.1565 0.1565\nvn -0.6160 -0.3348 0.7130\nvn -0.6314 -0.2367 0.7384\nvn -0.9879 0.1095 0.1095\nvn -0.6314 0.7384 -0.2367\nvn -0.6160 0.7130 -0.3348\nvn -0.0470 -0.5756 0.8164\nvn 0.0925 -0.6028 0.7925\nvn 0.1166 -0.4592 0.8806\nvn -0.0229 -0.4386 0.8983\nvn -0.0470 0.8164 -0.5756\nvn -0.0229 0.8983 -0.4386\nvn 0.1166 0.8806 -0.4592\nvn 0.0925 0.7925 -0.6028\nvn -0.9752 -0.0573 0.2138\nvn -0.6160 -0.7849 0.0665\nvn -0.6314 -0.7578 0.1641\nvn -0.9879 -0.0401 0.1496\nvn -0.6314 0.5742 0.5211\nvn -0.6160 0.6464 0.4500\nvn -0.0470 -0.9948 -0.0903\nvn 0.0925 -0.9877 -0.1257\nvn 0.1166 -0.9922 0.0427\nvn -0.0229 -0.9973 0.0693\nvn -0.0470 0.9066 0.4192\nvn -0.0229 0.8291 0.5587\nvn 0.1166 0.8380 0.5331\nvn 0.0925 0.9183 0.3850\nvn -0.9752 -0.2138 0.0573\nvn -0.6160 -0.4500 -0.6464\nvn -0.6314 -0.5211 -0.5742\nvn -0.9879 -0.1496 0.0401\nvn -0.6314 -0.1642 0.7578\nvn -0.6160 -0.0665 0.7849\nvn -0.0470 -0.4192 -0.9066\nvn 0.0925 -0.3850 -0.9183\nvn 0.1166 -0.5331 -0.8380\nvn -0.0229 -0.5586 -0.8291\nvn -0.0470 0.0903 0.9948\nvn -0.0229 -0.0693 0.9973\nvn 0.1166 -0.0427 0.9922\nvn 0.0925 0.1257 0.9877\nusemtl Material__815_gummiSub0\ns 1\nf 50/1/1 52/2/2 51/3/3\nf 52/2/2 50/1/1 49/4/4\nf 54/5/5 49/4/4 50/1/1\nf 49/4/4 54/5/5 53/6/6\nf 56/7/7 53/6/6 54/5/5\nf 53/6/6 56/7/7 55/8/8\nf 58/9/9 55/8/8 56/7/7\nf 55/8/8 58/9/9 57/10/10\nf 60/11/11 57/10/10 58/9/9\nf 57/10/10 60/11/11 59/12/12\nf 62/13/13 59/12/12 60/11/11\nf 59/12/12 62/13/13 61/14/14\nf 64/15/15 61/14/14 62/13/13\nf 61/14/14 64/15/15 63/16/16\nf 66/17/17 63/16/16 64/15/15\nf 63/16/16 66/17/17 65/18/18\nf 68/19/19 65/18/18 66/17/17\nf 65/18/18 68/19/19 67/20/20\nf 70/21/21 67/20/20 68/19/19\nf 67/20/20 70/21/21 69/22/22\nf 72/23/23 531/24/24 532/25/25\nf 531/24/24 72/23/23 71/26/26\nf 74/27/27 71/26/26 72/23/23\nf 71/26/26 74/27/27 73/28/28\nf 76/29/29 73/28/28 74/27/27\nf 73/28/28 76/29/29 75/30/30\nf 78/31/31 75/30/30 76/29/29\nf 75/30/30 78/31/31 77/32/32\nf 80/33/33 77/32/32 78/31/31\nf 77/32/32 80/33/33 79/34/34\nf 82/35/35 79/34/34 80/33/33\nf 79/34/34 82/35/35 81/36/36\nf 84/37/37 81/36/36 82/35/35\nf 81/36/36 84/37/37 83/38/38\nf 86/39/39 83/38/38 84/37/37\nf 83/38/38 86/39/39 85/40/40\nf 88/41/41 85/40/40 86/39/39\nf 85/40/40 88/41/41 87/42/42\nf 90/43/43 87/42/42 88/41/41\nf 87/42/42 90/43/43 89/44/44\nf 92/45/45 89/44/44 90/43/43\nf 89/44/44 92/45/45 91/46/46\nf 94/47/47 91/46/46 92/45/45\nf 91/46/46 94/47/47 93/48/48\nf 96/49/49 93/48/48 94/47/47\nf 93/48/48 96/49/49 95/50/50\nf 51/3/3 95/50/50 96/49/49\nf 95/50/50 51/3/3 52/2/2\nf 23/51/51 21/52/51 22/53/51\nf 21/52/51 19/54/51 20/55/51\nf 19/54/51 17/56/51 18/57/51\nf 21/52/51 17/56/51 19/54/51\nf 17/56/51 15/58/51 16/59/51\nf 15/58/51 13/60/51 14/61/51\nf 17/56/51 13/60/51 15/58/51\nf 13/60/51 11/62/51 12/63/51\nf 11/62/51 9/64/51 10/65/51\nf 13/60/51 9/64/51 11/62/51\nf 17/56/51 9/64/51 13/60/51\nf 9/64/51 7/66/51 8/67/51\nf 7/66/51 5/68/51 6/69/51\nf 9/64/51 5/68/51 7/66/51\nf 5/68/51 3/70/51 4/71/51\nf 3/70/51 1/72/51 2/73/51\nf 5/68/51 1/72/51 3/70/51\nf 9/64/51 1/72/51 5/68/51\nf 17/56/51 1/72/51 9/64/51\nf 21/52/51 1/72/51 17/56/51\nf 23/51/51 1/72/51 21/52/51\nf 24/74/51 1/72/51 23/51/51\nf 26/75/52 51/3/3 25/76/53\nf 51/3/3 26/75/52 50/1/1\nf 533/77/54 49/4/4 534/78/55\nf 49/4/4 533/77/54 52/2/2\nf 27/79/56 50/1/1 26/75/52\nf 50/1/1 27/79/56 54/5/5\nf 534/78/55 53/6/6 535/80/57\nf 53/6/6 534/78/55 49/4/4\nf 28/81/58 54/5/5 27/79/56\nf 54/5/5 28/81/58 56/7/7\nf 535/80/57 55/8/8 536/82/59\nf 55/8/8 535/80/57 53/6/6\nf 29/83/60 56/7/7 28/81/58\nf 56/7/7 29/83/60 58/9/9\nf 536/82/59 57/10/10 537/84/61\nf 57/10/10 536/82/59 55/8/8\nf 30/85/62 58/9/9 29/83/60\nf 58/9/9 30/85/62 60/11/11\nf 537/84/61 59/12/12 538/86/63\nf 59/12/12 537/84/61 57/10/10\nf 31/87/64 60/11/11 30/85/62\nf 60/11/11 31/87/64 62/13/13\nf 538/86/63 61/14/14 539/88/65\nf 61/14/14 538/86/63 59/12/12\nf 32/89/66 62/13/13 31/87/64\nf 62/13/13 32/89/66 64/15/15\nf 539/88/65 63/16/16 540/90/67\nf 63/16/16 539/88/65 61/14/14\nf 33/91/68 64/15/15 32/89/66\nf 64/15/15 33/91/68 66/17/17\nf 540/90/67 65/18/18 541/92/69\nf 65/18/18 540/90/67 63/16/16\nf 34/93/70 66/17/17 33/91/68\nf 66/17/17 34/93/70 68/19/19\nf 541/92/69 67/20/20 542/94/71\nf 67/20/20 541/92/69 65/18/18\nf 35/95/72 68/19/19 34/93/70\nf 68/19/19 35/95/72 70/21/21\nf 542/94/71 69/22/22 543/96/73\nf 69/22/22 542/94/71 67/20/20\nf 36/97/74 532/25/25 544/98/75\nf 532/25/25 36/97/74 72/23/23\nf 545/99/76 71/26/26 546/100/77\nf 71/26/26 545/99/76 531/24/24\nf 37/101/78 72/23/23 36/97/74\nf 72/23/23 37/101/78 74/27/27\nf 546/100/77 73/28/28 547/102/79\nf 73/28/28 546/100/77 71/26/26\nf 38/103/80 74/27/27 37/101/78\nf 74/27/27 38/103/80 76/29/29\nf 547/102/79 75/30/30 548/104/81\nf 75/30/30 547/102/79 73/28/28\nf 39/105/82 76/29/29 38/103/80\nf 76/29/29 39/105/82 78/31/31\nf 548/104/81 77/32/32 549/106/83\nf 77/32/32 548/104/81 75/30/30\nf 40/107/84 78/31/31 39/105/82\nf 78/31/31 40/107/84 80/33/33\nf 549/106/83 79/34/34 550/108/85\nf 79/34/34 549/106/83 77/32/32\nf 41/109/86 80/33/33 40/107/84\nf 80/33/33 41/109/86 82/35/35\nf 550/108/85 81/36/36 551/110/87\nf 81/36/36 550/108/85 79/34/34\nf 42/111/88 82/35/35 41/109/86\nf 82/35/35 42/111/88 84/37/37\nf 551/110/87 83/38/38 552/112/89\nf 83/38/38 551/110/87 81/36/36\nf 43/113/90 84/37/37 42/111/88\nf 84/37/37 43/113/90 86/39/39\nf 552/112/89 85/40/40 553/114/91\nf 85/40/40 552/112/89 83/38/38\nf 44/115/92 86/39/39 43/113/90\nf 86/39/39 44/115/92 88/41/41\nf 553/114/91 87/42/42 554/116/93\nf 87/42/42 553/114/91 85/40/40\nf 45/117/94 88/41/41 44/115/92\nf 88/41/41 45/117/94 90/43/43\nf 554/116/93 89/44/44 555/118/95\nf 89/44/44 554/116/93 87/42/42\nf 46/119/96 90/43/43 45/117/94\nf 90/43/43 46/119/96 92/45/45\nf 555/118/95 91/46/46 556/120/97\nf 91/46/46 555/118/95 89/44/44\nf 47/121/98 92/45/45 46/119/96\nf 92/45/45 47/121/98 94/47/47\nf 556/120/97 93/48/48 557/122/99\nf 93/48/48 556/120/97 91/46/46\nf 48/123/100 94/47/47 47/121/98\nf 94/47/47 48/123/100 96/49/49\nf 557/122/99 95/50/50 558/124/101\nf 95/50/50 557/122/99 93/48/48\nf 25/76/53 96/49/49 48/123/100\nf 96/49/49 25/76/53 51/3/3\nf 558/124/101 52/2/2 533/77/54\nf 52/2/2 558/124/101 95/50/50\nf 559/125/102 98/126/102 560/127/102\nf 98/126/102 559/125/102 97/128/102\nf 560/127/102 99/129/102 561/130/102\nf 99/129/102 560/127/102 98/126/102\nf 561/130/102 100/131/102 562/132/102\nf 100/131/102 561/130/102 99/129/102\nf 562/132/102 101/133/102 563/134/102\nf 101/133/102 562/132/102 100/131/102\nf 563/134/102 102/135/102 564/136/102\nf 102/135/102 563/134/102 101/133/102\nf 564/136/102 103/137/102 565/138/102\nf 103/137/102 564/136/102 102/135/102\nf 565/138/102 104/139/102 566/140/102\nf 104/139/102 565/138/102 103/137/102\nf 566/140/102 105/141/102 567/142/102\nf 105/141/102 566/140/102 104/139/102\nf 567/142/102 106/143/102 568/144/102\nf 106/143/102 567/142/102 105/141/102\nf 568/144/102 107/145/102 569/146/102\nf 107/145/102 568/144/102 106/143/102\nf 569/146/102 108/147/102 570/148/102\nf 108/147/102 569/146/102 107/145/102\nf 570/148/102 109/149/102 571/150/102\nf 109/149/102 570/148/102 108/147/102\nf 571/150/102 110/151/102 572/152/102\nf 110/151/102 571/150/102 109/149/102\nf 572/152/102 111/153/102 573/154/102\nf 111/153/102 572/152/102 110/151/102\nf 573/154/102 112/155/102 574/156/102\nf 112/155/102 573/154/102 111/153/102\nf 574/156/102 113/157/102 575/158/102\nf 113/157/102 574/156/102 112/155/102\nf 575/158/102 114/159/102 576/160/102\nf 114/159/102 575/158/102 113/157/102\nf 576/160/102 115/161/102 577/162/102\nf 115/161/102 576/160/102 114/159/102\nf 577/162/102 116/163/102 578/164/102\nf 116/163/102 577/162/102 115/161/102\nf 578/164/102 117/165/102 579/166/102\nf 117/165/102 578/164/102 116/163/102\nf 579/166/102 118/167/102 580/168/102\nf 118/167/102 579/166/102 117/165/102\nf 580/168/102 119/169/102 581/170/102\nf 119/169/102 580/168/102 118/167/102\nf 581/170/102 120/171/102 582/172/102\nf 120/171/102 581/170/102 119/169/102\nf 582/172/102 97/128/102 559/125/102\nf 97/128/102 582/172/102 120/171/102\nusemtl Material__815_chromeSub1\nf 121/173/102 229/174/103 333/175/102\nf 229/174/103 121/173/102 336/176/104\nf 122/177/102 229/174/103 334/178/105\nf 229/174/103 122/177/102 333/175/102\nf 134/179/106 229/174/103 335/180/107\nf 229/174/103 134/179/106 334/178/105\nf 133/181/108 229/174/103 336/176/104\nf 229/174/103 133/181/108 335/180/107\nf 122/177/102 230/182/109 337/183/102\nf 230/182/109 122/177/102 334/178/105\nf 123/184/102 230/182/109 338/185/110\nf 230/182/109 123/184/102 337/183/102\nf 135/186/111 230/182/109 339/187/112\nf 230/182/109 135/186/111 338/185/110\nf 134/179/106 230/182/109 334/178/105\nf 230/182/109 134/179/106 339/187/112\nf 123/184/102 231/188/113 340/189/102\nf 231/188/113 123/184/102 338/185/110\nf 124/190/102 231/188/113 341/191/114\nf 231/188/113 124/190/102 340/189/102\nf 136/192/115 231/188/113 342/193/116\nf 231/188/113 136/192/115 341/191/114\nf 135/186/111 231/188/113 338/185/110\nf 231/188/113 135/186/111 342/193/116\nf 124/190/102 232/194/117 343/195/102\nf 232/194/117 124/190/102 341/191/114\nf 125/196/102 232/194/117 344/197/118\nf 232/194/117 125/196/102 343/195/102\nf 137/198/119 232/194/117 345/199/120\nf 232/194/117 137/198/119 344/197/118\nf 136/192/115 232/194/117 341/191/114\nf 232/194/117 136/192/115 345/199/120\nf 125/196/102 233/200/121 346/201/102\nf 233/200/121 125/196/102 344/197/118\nf 126/202/102 233/200/121 347/203/122\nf 233/200/121 126/202/102 346/201/102\nf 138/204/123 233/200/121 348/205/124\nf 233/200/121 138/204/123 347/203/122\nf 137/198/119 233/200/121 344/197/118\nf 233/200/121 137/198/119 348/205/124\nf 126/202/102 234/206/125 349/207/102\nf 234/206/125 126/202/102 347/203/122\nf 127/208/102 234/206/125 350/209/126\nf 234/206/125 127/208/102 349/207/102\nf 139/210/127 234/206/125 351/211/128\nf 234/206/125 139/210/127 350/209/126\nf 138/204/123 234/206/125 347/203/122\nf 234/206/125 138/204/123 351/211/128\nf 127/208/102 235/212/129 352/213/102\nf 235/212/129 127/208/102 350/209/126\nf 128/214/102 235/212/129 353/215/130\nf 235/212/129 128/214/102 352/213/102\nf 140/216/131 235/212/129 354/217/132\nf 235/212/129 140/216/131 353/215/130\nf 139/210/127 235/212/129 350/209/126\nf 235/212/129 139/210/127 354/217/132\nf 128/214/102 236/218/133 355/219/102\nf 236/218/133 128/214/102 353/215/130\nf 129/220/102 236/218/133 356/221/134\nf 236/218/133 129/220/102 355/219/102\nf 141/222/135 236/218/133 357/223/136\nf 236/218/133 141/222/135 356/221/134\nf 140/216/131 236/218/133 353/215/130\nf 236/218/133 140/216/131 357/223/136\nf 129/220/102 237/224/137 358/225/102\nf 237/224/137 129/220/102 356/221/134\nf 130/226/102 237/224/137 359/227/138\nf 237/224/137 130/226/102 358/225/102\nf 142/228/139 237/224/137 360/229/140\nf 237/224/137 142/228/139 359/227/138\nf 141/222/135 237/224/137 356/221/134\nf 237/224/137 141/222/135 360/229/140\nf 130/226/102 238/230/141 361/231/102\nf 238/230/141 130/226/102 359/227/138\nf 131/232/102 238/230/141 362/233/142\nf 238/230/141 131/232/102 361/231/102\nf 143/234/143 238/230/141 363/235/144\nf 238/230/141 143/234/143 362/233/142\nf 142/228/139 238/230/141 359/227/138\nf 238/230/141 142/228/139 363/235/144\nf 131/232/102 239/236/145 364/237/102\nf 239/236/145 131/232/102 362/233/142\nf 132/238/102 239/236/145 365/239/146\nf 239/236/145 132/238/102 364/237/102\nf 144/240/147 239/236/145 366/241/148\nf 239/236/145 144/240/147 365/239/146\nf 143/234/143 239/236/145 362/233/142\nf 239/236/145 143/234/143 366/241/148\nf 132/238/102 240/242/149 367/243/102\nf 240/242/149 132/238/102 365/239/146\nf 121/173/102 240/242/149 336/176/104\nf 240/242/149 121/173/102 367/243/102\nf 133/181/108 240/242/149 368/244/150\nf 240/242/149 133/181/108 336/176/104\nf 144/240/147 240/242/149 365/239/146\nf 240/242/149 144/240/147 368/244/150\nf 583/245/151 241/246/152 584/247/153\nf 241/246/152 583/245/151 370/248/154\nf 585/249/155 241/246/152 369/250/156\nf 241/246/152 585/249/155 584/247/153\nf 146/251/157 241/246/152 321/252/158\nf 241/246/152 146/251/157 369/250/156\nf 145/253/159 241/246/152 370/248/154\nf 241/246/152 145/253/159 321/252/158\nf 586/254/160 242/255/161 587/256/162\nf 242/255/161 586/254/160 372/257/163\nf 588/258/164 242/255/161 371/259/165\nf 242/255/161 588/258/164 587/256/162\nf 148/260/166 242/255/161 323/261/167\nf 242/255/161 148/260/166 371/259/165\nf 147/262/168 242/255/161 372/257/163\nf 242/255/161 147/262/168 323/261/167\nf 589/263/169 243/264/170 590/265/171\nf 243/264/170 589/263/169 374/266/172\nf 591/267/173 243/264/170 373/268/174\nf 243/264/170 591/267/173 590/265/171\nf 150/269/175 243/264/170 325/270/176\nf 243/264/170 150/269/175 373/268/174\nf 149/271/177 243/264/170 374/266/172\nf 243/264/170 149/271/177 325/270/176\nf 592/272/178 244/273/179 593/274/180\nf 244/273/179 592/272/178 376/275/181\nf 594/276/182 244/273/179 375/277/183\nf 244/273/179 594/276/182 593/274/180\nf 152/278/184 244/273/179 327/279/185\nf 244/273/179 152/278/184 375/277/183\nf 151/280/186 244/273/179 376/275/181\nf 244/273/179 151/280/186 327/279/185\nf 595/281/187 245/282/188 596/283/189\nf 245/282/188 595/281/187 378/284/190\nf 597/285/191 245/282/188 377/286/192\nf 245/282/188 597/285/191 596/283/189\nf 154/287/193 245/282/188 329/288/194\nf 245/282/188 154/287/193 377/286/192\nf 153/289/195 245/282/188 378/284/190\nf 245/282/188 153/289/195 329/288/194\nf 598/290/196 246/291/197 599/292/198\nf 246/291/197 598/290/196 380/293/199\nf 600/294/200 246/291/197 379/295/201\nf 246/291/197 600/294/200 599/292/198\nf 156/296/202 246/291/197 331/297/203\nf 246/291/197 156/296/202 379/295/201\nf 155/298/204 246/291/197 380/293/199\nf 246/291/197 155/298/204 331/297/203\nf 585/249/155 247/299/205 601/300/206\nf 247/299/205 585/249/155 383/301/207\nf 586/254/160 247/299/205 381/302/208\nf 247/299/205 586/254/160 601/300/206\nf 158/303/209 247/299/205 382/304/210\nf 247/299/205 158/303/209 381/302/208\nf 157/305/211 247/299/205 383/301/207\nf 247/299/205 157/305/211 382/304/210\nf 586/254/160 248/306/212 372/257/163\nf 248/306/212 586/254/160 381/302/208\nf 147/262/168 248/306/212 384/307/213\nf 248/306/212 147/262/168 372/257/163\nf 159/308/214 248/306/212 385/309/215\nf 248/306/212 159/308/214 384/307/213\nf 158/303/209 248/306/212 381/302/208\nf 248/306/212 158/303/209 385/309/215\nf 147/262/168 249/310/216 322/311/217\nf 249/310/216 147/262/168 384/307/213\nf 146/251/157 249/310/216 386/312/218\nf 249/310/216 146/251/157 322/311/217\nf 160/313/219 249/310/216 387/314/220\nf 249/310/216 160/313/219 386/312/218\nf 159/308/214 249/310/216 384/307/213\nf 249/310/216 159/308/214 387/314/220\nf 146/251/157 250/315/221 369/250/156\nf 250/315/221 146/251/157 386/312/218\nf 585/249/155 250/315/221 383/301/207\nf 250/315/221 585/249/155 369/250/156\nf 157/305/211 250/315/221 388/316/222\nf 250/315/221 157/305/211 383/301/207\nf 160/313/219 250/315/221 386/312/218\nf 250/315/221 160/313/219 388/316/222\nf 588/258/164 251/317/223 602/318/224\nf 251/317/223 588/258/164 391/319/225\nf 589/263/169 251/317/223 389/320/226\nf 251/317/223 589/263/169 602/318/224\nf 162/321/227 251/317/223 390/322/228\nf 251/317/223 162/321/227 389/320/226\nf 161/323/229 251/317/223 391/319/225\nf 251/317/223 161/323/229 390/322/228\nf 589/263/169 252/324/230 374/266/172\nf 252/324/230 589/263/169 389/320/226\nf 149/271/177 252/324/230 392/325/231\nf 252/324/230 149/271/177 374/266/172\nf 163/326/232 252/324/230 393/327/233\nf 252/324/230 163/326/232 392/325/231\nf 162/321/227 252/324/230 389/320/226\nf 252/324/230 162/321/227 393/327/233\nf 149/271/177 253/328/234 324/329/235\nf 253/328/234 149/271/177 392/325/231\nf 148/260/166 253/328/234 394/330/236\nf 253/328/234 148/260/166 324/329/235\nf 164/331/237 253/328/234 395/332/238\nf 253/328/234 164/331/237 394/330/236\nf 163/326/232 253/328/234 392/325/231\nf 253/328/234 163/326/232 395/332/238\nf 148/260/166 254/333/239 371/259/165\nf 254/333/239 148/260/166 394/330/236\nf 588/258/164 254/333/239 391/319/225\nf 254/333/239 588/258/164 371/259/165\nf 161/323/229 254/333/239 396/334/240\nf 254/333/239 161/323/229 391/319/225\nf 164/331/237 254/333/239 394/330/236\nf 254/333/239 164/331/237 396/334/240\nf 591/267/173 255/335/241 603/336/242\nf 255/335/241 591/267/173 399/337/243\nf 592/272/178 255/335/241 397/338/244\nf 255/335/241 592/272/178 603/336/242\nf 166/339/245 255/335/241 398/340/246\nf 255/335/241 166/339/245 397/338/244\nf 165/341/247 255/335/241 399/337/243\nf 255/335/241 165/341/247 398/340/246\nf 592/272/178 256/342/248 376/275/181\nf 256/342/248 592/272/178 397/338/244\nf 151/280/186 256/342/248 400/343/249\nf 256/342/248 151/280/186 376/275/181\nf 167/344/250 256/342/248 401/345/251\nf 256/342/248 167/344/250 400/343/249\nf 166/339/245 256/342/248 397/338/244\nf 256/342/248 166/339/245 401/345/251\nf 151/280/186 257/346/252 326/347/253\nf 257/346/252 151/280/186 400/343/249\nf 150/269/175 257/346/252 402/348/254\nf 257/346/252 150/269/175 326/347/253\nf 168/349/255 257/346/252 403/350/256\nf 257/346/252 168/349/255 402/348/254\nf 167/344/250 257/346/252 400/343/249\nf 257/346/252 167/344/250 403/350/256\nf 150/269/175 258/351/257 373/268/174\nf 258/351/257 150/269/175 402/348/254\nf 591/267/173 258/351/257 399/337/243\nf 258/351/257 591/267/173 373/268/174\nf 165/341/247 258/351/257 404/352/258\nf 258/351/257 165/341/247 399/337/243\nf 168/349/255 258/351/257 402/348/254\nf 258/351/257 168/349/255 404/352/258\nf 594/276/182 259/353/259 604/354/260\nf 259/353/259 594/276/182 407/355/261\nf 605/356/262 259/353/259 405/357/263\nf 259/353/259 605/356/262 604/354/260\nf 170/358/264 259/353/259 406/359/265\nf 259/353/259 170/358/264 405/357/263\nf 169/360/266 259/353/259 407/355/261\nf 259/353/259 169/360/266 406/359/265\nf 605/356/262 260/361/267 606/362/268\nf 260/361/267 605/356/262 405/357/263\nf 607/363/269 260/361/267 408/364/270\nf 260/361/267 607/363/269 606/362/268\nf 171/365/271 260/361/267 409/366/272\nf 260/361/267 171/365/271 408/364/270\nf 170/358/264 260/361/267 405/357/263\nf 260/361/267 170/358/264 409/366/272\nf 607/363/269 261/367/273 328/368/274\nf 261/367/273 607/363/269 408/364/270\nf 152/278/184 261/367/273 410/369/275\nf 261/367/273 152/278/184 328/368/274\nf 172/370/276 261/367/273 411/371/277\nf 261/367/273 172/370/276 410/369/275\nf 171/365/271 261/367/273 408/364/270\nf 261/367/273 171/365/271 411/371/277\nf 152/278/184 262/372/278 375/277/183\nf 262/372/278 152/278/184 410/369/275\nf 594/276/182 262/372/278 407/355/261\nf 262/372/278 594/276/182 375/277/183\nf 169/360/266 262/372/278 412/373/279\nf 262/372/278 169/360/266 407/355/261\nf 172/370/276 262/372/278 410/369/275\nf 262/372/278 172/370/276 412/373/279\nf 597/285/191 263/374/280 608/375/281\nf 263/374/280 597/285/191 415/376/282\nf 598/290/196 263/374/280 413/377/283\nf 263/374/280 598/290/196 608/375/281\nf 174/378/284 263/374/280 414/379/285\nf 263/374/280 174/378/284 413/377/283\nf 173/380/286 263/374/280 415/376/282\nf 263/374/280 173/380/286 414/379/285\nf 598/290/196 264/381/287 380/293/199\nf 264/381/287 598/290/196 413/377/283\nf 155/298/204 264/381/287 416/382/288\nf 264/381/287 155/298/204 380/293/199\nf 175/383/289 264/381/287 417/384/290\nf 264/381/287 175/383/289 416/382/288\nf 174/378/284 264/381/287 413/377/283\nf 264/381/287 174/378/284 417/384/290\nf 155/298/204 265/385/291 330/386/292\nf 265/385/291 155/298/204 416/382/288\nf 154/287/193 265/385/291 418/387/293\nf 265/385/291 154/287/193 330/386/292\nf 176/388/294 265/385/291 419/389/295\nf 265/385/291 176/388/294 418/387/293\nf 175/383/289 265/385/291 416/382/288\nf 265/385/291 175/383/289 419/389/295\nf 154/287/193 266/390/296 377/286/192\nf 266/390/296 154/287/193 418/387/293\nf 597/285/191 266/390/296 415/376/282\nf 266/390/296 597/285/191 377/286/192\nf 173/380/286 266/390/296 420/391/297\nf 266/390/296 173/380/286 415/376/282\nf 176/388/294 266/390/296 418/387/293\nf 266/390/296 176/388/294 420/391/297\nf 600/294/200 267/392/298 609/393/299\nf 267/392/298 600/294/200 423/394/300\nf 583/245/151 267/392/298 421/395/301\nf 267/392/298 583/245/151 609/393/299\nf 178/396/302 267/392/298 422/397/303\nf 267/392/298 178/396/302 421/395/301\nf 177/398/304 267/392/298 423/394/300\nf 267/392/298 177/398/304 422/397/303\nf 583/245/151 268/399/305 370/248/154\nf 268/399/305 583/245/151 421/395/301\nf 145/253/159 268/399/305 424/400/306\nf 268/399/305 145/253/159 370/248/154\nf 179/401/307 268/399/305 425/402/308\nf 268/399/305 179/401/307 424/400/306\nf 178/396/302 268/399/305 421/395/301\nf 268/399/305 178/396/302 425/402/308\nf 145/253/159 269/403/309 332/404/310\nf 269/403/309 145/253/159 424/400/306\nf 156/296/202 269/403/309 426/405/311\nf 269/403/309 156/296/202 332/404/310\nf 180/406/312 269/403/309 427/407/313\nf 269/403/309 180/406/312 426/405/311\nf 179/401/307 269/403/309 424/400/306\nf 269/403/309 179/401/307 427/407/313\nf 156/296/202 270/408/314 379/295/201\nf 270/408/314 156/296/202 426/405/311\nf 600/294/200 270/408/314 423/394/300\nf 270/408/314 600/294/200 379/295/201\nf 177/398/304 270/408/314 428/409/315\nf 270/408/314 177/398/304 423/394/300\nf 180/406/312 270/408/314 426/405/311\nf 270/408/314 180/406/312 428/409/315\nf 610/410/316 271/411/102 611/412/317\nf 271/411/102 610/410/316 612/413/318\nf 613/414/319 271/411/102 614/415/320\nf 271/411/102 613/414/319 611/412/317\nf 615/416/321 271/411/102 616/417/322\nf 271/411/102 615/416/321 614/415/320\nf 617/418/323 271/411/102 618/419/324\nf 271/411/102 617/418/323 616/417/322\nf 619/420/325 271/411/102 620/421/326\nf 271/411/102 619/420/325 618/419/324\nf 621/422/327 271/411/102 622/423/328\nf 271/411/102 621/422/327 620/421/326\nf 623/424/329 271/411/102 624/425/330\nf 271/411/102 623/424/329 622/423/328\nf 625/426/331 271/411/102 626/427/332\nf 271/411/102 625/426/331 624/425/330\nf 627/428/333 271/411/102 628/429/334\nf 271/411/102 627/428/333 626/427/332\nf 629/430/335 271/411/102 630/431/336\nf 271/411/102 629/430/335 628/429/334\nf 631/432/337 271/411/102 632/433/338\nf 271/411/102 631/432/337 630/431/336\nf 633/434/339 271/411/102 612/413/318\nf 271/411/102 633/434/339 632/433/338\nf 634/435/340 272/436/341 635/437/342\nf 272/436/341 634/435/340 430/438/343\nf 636/439/344 272/436/341 431/440/345\nf 272/436/341 636/439/344 635/437/342\nf 206/441/346 272/436/341 513/442/347\nf 272/436/341 206/441/346 431/440/345\nf 205/443/348 272/436/341 430/438/343\nf 272/436/341 205/443/348 513/442/347\nf 636/439/344 273/444/349 637/445/350\nf 273/444/349 636/439/344 431/440/345\nf 638/446/351 273/444/349 432/447/352\nf 273/444/349 638/446/351 637/445/350\nf 207/448/353 273/444/349 514/449/354\nf 273/444/349 207/448/353 432/447/352\nf 206/441/346 273/444/349 431/440/345\nf 273/444/349 206/441/346 514/449/354\nf 639/450/355 274/451/356 640/452/357\nf 274/451/356 639/450/355 433/453/358\nf 634/435/340 274/451/356 430/438/343\nf 274/451/356 634/435/340 640/452/357\nf 205/443/348 274/451/356 515/454/359\nf 274/451/356 205/443/348 430/438/343\nf 208/455/360 274/451/356 433/453/358\nf 274/451/356 208/455/360 515/454/359\nf 641/456/361 275/457/362 642/458/363\nf 275/457/362 641/456/361 436/459/364\nf 643/460/365 275/457/362 437/461/366\nf 275/457/362 643/460/365 642/458/363\nf 210/462/367 275/457/362 516/463/368\nf 275/457/362 210/462/367 437/461/366\nf 209/464/369 275/457/362 436/459/364\nf 275/457/362 209/464/369 516/463/368\nf 643/460/365 276/465/370 644/466/371\nf 276/465/370 643/460/365 437/461/366\nf 645/467/372 276/465/370 438/468/373\nf 276/465/370 645/467/372 644/466/371\nf 211/469/374 276/465/370 517/470/375\nf 276/465/370 211/469/374 438/468/373\nf 210/462/367 276/465/370 437/461/366\nf 276/465/370 210/462/367 517/470/375\nf 646/471/376 277/472/377 647/473/378\nf 277/472/377 646/471/376 439/474/379\nf 641/456/361 277/472/377 436/459/364\nf 277/472/377 641/456/361 647/473/378\nf 209/464/369 277/472/377 518/475/380\nf 277/472/377 209/464/369 436/459/364\nf 212/476/381 277/472/377 439/474/379\nf 277/472/377 212/476/381 518/475/380\nf 648/477/382 278/478/383 649/479/384\nf 278/478/383 648/477/382 442/480/385\nf 650/481/386 278/478/383 443/482/387\nf 278/478/383 650/481/386 649/479/384\nf 214/483/388 278/478/383 519/484/389\nf 278/478/383 214/483/388 443/482/387\nf 213/485/390 278/478/383 442/480/385\nf 278/478/383 213/485/390 519/484/389\nf 650/481/386 279/486/391 651/487/392\nf 279/486/391 650/481/386 443/482/387\nf 652/488/393 279/486/391 444/489/394\nf 279/486/391 652/488/393 651/487/392\nf 215/490/395 279/486/391 520/491/396\nf 279/486/391 215/490/395 444/489/394\nf 214/483/388 279/486/391 443/482/387\nf 279/486/391 214/483/388 520/491/396\nf 653/492/397 280/493/398 654/494/399\nf 280/493/398 653/492/397 445/495/400\nf 648/477/382 280/493/398 442/480/385\nf 280/493/398 648/477/382 654/494/399\nf 213/485/390 280/493/398 521/496/401\nf 280/493/398 213/485/390 442/480/385\nf 216/497/402 280/493/398 445/495/400\nf 280/493/398 216/497/402 521/496/401\nf 655/498/403 281/499/404 656/500/405\nf 281/499/404 655/498/403 449/501/406\nf 657/502/407 281/499/404 450/503/408\nf 281/499/404 657/502/407 656/500/405\nf 218/504/409 281/499/404 522/505/410\nf 281/499/404 218/504/409 450/503/408\nf 217/506/411 281/499/404 449/501/406\nf 281/499/404 217/506/411 522/505/410\nf 657/502/407 282/507/412 658/508/413\nf 282/507/412 657/502/407 450/503/408\nf 659/509/414 282/507/412 451/510/415\nf 282/507/412 659/509/414 658/508/413\nf 219/511/416 282/507/412 523/512/417\nf 282/507/412 219/511/416 451/510/415\nf 218/504/409 282/507/412 450/503/408\nf 282/507/412 218/504/409 523/512/417\nf 660/513/418 283/514/419 661/515/420\nf 283/514/419 660/513/418 452/516/421\nf 655/498/403 283/514/419 449/501/406\nf 283/514/419 655/498/403 661/515/420\nf 217/506/411 283/514/419 524/517/422\nf 283/514/419 217/506/411 449/501/406\nf 220/518/423 283/514/419 452/516/421\nf 283/514/419 220/518/423 524/517/422\nf 662/519/424 284/520/425 663/521/426\nf 284/520/425 662/519/424 455/522/427\nf 664/523/428 284/520/425 456/524/429\nf 284/520/425 664/523/428 663/521/426\nf 222/525/430 284/520/425 525/526/431\nf 284/520/425 222/525/430 456/524/429\nf 221/527/432 284/520/425 455/522/427\nf 284/520/425 221/527/432 525/526/431\nf 664/523/428 285/528/433 665/529/434\nf 285/528/433 664/523/428 456/524/429\nf 666/530/435 285/528/433 457/531/436\nf 285/528/433 666/530/435 665/529/434\nf 223/532/437 285/528/433 526/533/438\nf 285/528/433 223/532/437 457/531/436\nf 222/525/430 285/528/433 456/524/429\nf 285/528/433 222/525/430 526/533/438\nf 667/534/439 286/535/440 668/536/441\nf 286/535/440 667/534/439 458/537/442\nf 662/519/424 286/535/440 455/522/427\nf 286/535/440 662/519/424 668/536/441\nf 221/527/432 286/535/440 527/538/443\nf 286/535/440 221/527/432 455/522/427\nf 224/539/444 286/535/440 458/537/442\nf 286/535/440 224/539/444 527/538/443\nf 669/540/445 287/541/446 670/542/447\nf 287/541/446 669/540/445 461/543/448\nf 671/544/449 287/541/446 462/545/450\nf 287/541/446 671/544/449 670/542/447\nf 226/546/451 287/541/446 528/547/452\nf 287/541/446 226/546/451 462/545/450\nf 225/548/453 287/541/446 461/543/448\nf 287/541/446 225/548/453 528/547/452\nf 671/544/449 288/549/454 672/550/455\nf 288/549/454 671/544/449 462/545/450\nf 673/551/456 288/549/454 463/552/457\nf 288/549/454 673/551/456 672/550/455\nf 227/553/458 288/549/454 529/554/459\nf 288/549/454 227/553/458 463/552/457\nf 226/546/451 288/549/454 462/545/450\nf 288/549/454 226/546/451 529/554/459\nf 674/555/460 289/556/461 675/557/462\nf 289/556/461 674/555/460 464/558/463\nf 669/540/445 289/556/461 461/543/448\nf 289/556/461 669/540/445 675/557/462\nf 225/548/453 289/556/461 530/559/464\nf 289/556/461 225/548/453 461/543/448\nf 228/560/465 289/556/461 464/558/463\nf 289/556/461 228/560/465 530/559/464\nf 200/561/466 290/562/102 478/563/467\nf 290/562/102 200/561/466 477/564/468\nf 201/565/469 290/562/102 479/566/470\nf 290/562/102 201/565/469 478/563/467\nf 202/567/471 290/562/102 480/568/472\nf 290/562/102 202/567/471 479/566/470\nf 203/569/473 290/562/102 481/570/474\nf 290/562/102 203/569/473 480/568/472\nf 204/571/475 290/562/102 482/572/476\nf 290/562/102 204/571/475 481/570/474\nf 199/573/477 290/562/102 477/564/468\nf 290/562/102 199/573/477 482/572/476\nf 191/574/478 291/575/479 429/576/480\nf 291/575/479 191/574/478 471/577/481\nf 183/578/482 291/575/479 472/579/483\nf 291/575/479 183/578/482 429/576/480\nf 194/580/484 291/575/479 465/581/485\nf 291/575/479 194/580/484 472/579/483\nf 193/582/486 291/575/479 471/577/481\nf 291/575/479 193/582/486 465/581/485\nf 183/578/482 292/583/487 434/584/488\nf 292/583/487 183/578/482 472/579/483\nf 185/585/489 292/583/487 473/586/490\nf 292/583/487 185/585/489 434/584/488\nf 195/587/491 292/583/487 466/588/492\nf 292/583/487 195/587/491 473/586/490\nf 194/580/484 292/583/487 472/579/483\nf 292/583/487 194/580/484 466/588/492\nf 185/585/489 293/589/493 440/590/494\nf 293/589/493 185/585/489 473/586/490\nf 187/591/495 293/589/493 474/592/496\nf 293/589/493 187/591/495 440/590/494\nf 196/593/497 293/589/493 467/594/498\nf 293/589/493 196/593/497 474/592/496\nf 195/587/491 293/589/493 473/586/490\nf 293/589/493 195/587/491 467/594/498\nf 187/591/495 294/595/499 446/596/500\nf 294/595/499 187/591/495 474/592/496\nf 188/597/501 294/595/499 475/598/502\nf 294/595/499 188/597/501 446/596/500\nf 197/599/503 294/595/499 468/600/504\nf 294/595/499 197/599/503 475/598/502\nf 196/593/497 294/595/499 474/592/496\nf 294/595/499 196/593/497 468/600/504\nf 188/597/501 295/601/505 453/602/506\nf 295/601/505 188/597/501 475/598/502\nf 189/603/507 295/601/505 476/604/508\nf 295/601/505 189/603/507 453/602/506\nf 198/605/509 295/601/505 469/606/510\nf 295/601/505 198/605/509 476/604/508\nf 197/599/503 295/601/505 475/598/502\nf 295/601/505 197/599/503 469/606/510\nf 189/603/507 296/607/511 459/608/512\nf 296/607/511 189/603/507 476/604/508\nf 191/574/478 296/607/511 471/577/481\nf 296/607/511 191/574/478 459/608/512\nf 193/582/486 296/607/511 470/609/513\nf 296/607/511 193/582/486 471/577/481\nf 198/605/509 296/607/511 476/604/508\nf 296/607/511 198/605/509 470/609/513\nf 193/582/486 297/610/514 465/581/485\nf 297/610/514 193/582/486 483/611/515\nf 194/580/484 297/610/514 484/612/516\nf 297/610/514 194/580/484 465/581/485\nf 200/561/466 297/610/514 477/564/468\nf 297/610/514 200/561/466 484/612/516\nf 199/573/477 297/610/514 483/611/515\nf 297/610/514 199/573/477 477/564/468\nf 194/580/484 298/613/517 466/588/492\nf 298/613/517 194/580/484 484/612/516\nf 195/587/491 298/613/517 485/614/518\nf 298/613/517 195/587/491 466/588/492\nf 201/565/469 298/613/517 478/563/467\nf 298/613/517 201/565/469 485/614/518\nf 200/561/466 298/613/517 484/612/516\nf 298/613/517 200/561/466 478/563/467\nf 195/587/491 299/615/519 467/594/498\nf 299/615/519 195/587/491 485/614/518\nf 196/593/497 299/615/519 486/616/520\nf 299/615/519 196/593/497 467/594/498\nf 202/567/471 299/615/519 479/566/470\nf 299/615/519 202/567/471 486/616/520\nf 201/565/469 299/615/519 485/614/518\nf 299/615/519 201/565/469 479/566/470\nf 196/593/497 300/617/521 468/600/504\nf 300/617/521 196/593/497 486/616/520\nf 197/599/503 300/617/521 487/618/522\nf 300/617/521 197/599/503 468/600/504\nf 203/569/473 300/617/521 480/568/472\nf 300/617/521 203/569/473 487/618/522\nf 202/567/471 300/617/521 486/616/520\nf 300/617/521 202/567/471 480/568/472\nf 197/599/503 301/619/523 469/606/510\nf 301/619/523 197/599/503 487/618/522\nf 198/605/509 301/619/523 488/620/524\nf 301/619/523 198/605/509 469/606/510\nf 204/571/475 301/619/523 481/570/474\nf 301/619/523 204/571/475 488/620/524\nf 203/569/473 301/619/523 487/618/522\nf 301/619/523 203/569/473 481/570/474\nf 198/605/509 302/621/525 470/609/513\nf 302/621/525 198/605/509 488/620/524\nf 193/582/486 302/621/525 483/611/515\nf 302/621/525 193/582/486 470/609/513\nf 199/573/477 302/621/525 482/572/476\nf 302/621/525 199/573/477 483/611/515\nf 204/571/475 302/621/525 488/620/524\nf 302/621/525 204/571/475 482/572/476\nf 206/441/346 303/622/526 490/623/527\nf 303/622/526 206/441/346 513/442/347\nf 676/624/528 303/622/526 677/625/529\nf 303/622/526 676/624/528 490/623/527\nf 678/626/530 303/622/526 489/627/531\nf 303/622/526 678/626/530 677/625/529\nf 205/443/348 303/622/526 513/442/347\nf 303/622/526 205/443/348 489/627/531\nf 207/448/353 304/628/532 491/629/533\nf 304/628/532 207/448/353 514/449/354\nf 181/630/534 304/628/532 435/631/535\nf 304/628/532 181/630/534 491/629/533\nf 676/624/528 304/628/532 490/623/527\nf 304/628/532 676/624/528 435/631/535\nf 206/441/346 304/628/532 514/449/354\nf 304/628/532 206/441/346 490/623/527\nf 205/443/348 305/632/536 489/627/531\nf 305/632/536 205/443/348 515/454/359\nf 678/626/530 305/632/536 460/633/537\nf 305/632/536 678/626/530 489/627/531\nf 182/634/538 305/632/536 492/635/539\nf 305/632/536 182/634/538 460/633/537\nf 208/455/360 305/632/536 515/454/359\nf 305/632/536 208/455/360 492/635/539\nf 210/462/367 306/636/540 494/637/541\nf 306/636/540 210/462/367 516/463/368\nf 679/638/542 306/636/540 680/639/543\nf 306/636/540 679/638/542 494/637/541\nf 681/640/544 306/636/540 493/641/545\nf 306/636/540 681/640/544 680/639/543\nf 209/464/369 306/636/540 516/463/368\nf 306/636/540 209/464/369 493/641/545\nf 211/469/374 307/642/546 495/643/547\nf 307/642/546 211/469/374 517/470/375\nf 184/644/548 307/642/546 441/645/549\nf 307/642/546 184/644/548 495/643/547\nf 679/638/542 307/642/546 494/637/541\nf 307/642/546 679/638/542 441/645/549\nf 210/462/367 307/642/546 517/470/375\nf 307/642/546 210/462/367 494/637/541\nf 209/464/369 308/646/550 493/641/545\nf 308/646/550 209/464/369 518/475/380\nf 681/640/544 308/646/550 682/647/551\nf 308/646/550 681/640/544 493/641/545\nf 683/648/552 308/646/550 496/649/553\nf 308/646/550 683/648/552 682/647/551\nf 212/476/381 308/646/550 518/475/380\nf 308/646/550 212/476/381 496/649/553\nf 214/483/388 309/650/554 498/651/555\nf 309/650/554 214/483/388 519/484/389\nf 684/652/556 309/650/554 685/653/557\nf 309/650/554 684/652/556 498/651/555\nf 686/654/558 309/650/554 497/655/559\nf 309/650/554 686/654/558 685/653/557\nf 213/485/390 309/650/554 519/484/389\nf 309/650/554 213/485/390 497/655/559\nf 215/490/395 310/656/560 499/657/561\nf 310/656/560 215/490/395 520/491/396\nf 186/658/562 310/656/560 448/659/563\nf 310/656/560 186/658/562 499/657/561\nf 684/652/556 310/656/560 498/651/555\nf 310/656/560 684/652/556 448/659/563\nf 214/483/388 310/656/560 520/491/396\nf 310/656/560 214/483/388 498/651/555\nf 213/485/390 311/660/564 497/655/559\nf 311/660/564 213/485/390 521/496/401\nf 686/654/558 311/660/564 687/661/565\nf 311/660/564 686/654/558 497/655/559\nf 688/662/566 311/660/564 500/663/567\nf 311/660/564 688/662/566 687/661/565\nf 216/497/402 311/660/564 521/496/401\nf 311/660/564 216/497/402 500/663/567\nf 218/504/409 312/664/568 502/665/569\nf 312/664/568 218/504/409 522/505/410\nf 689/666/570 312/664/568 690/667/571\nf 312/664/568 689/666/570 502/665/569\nf 691/668/572 312/664/568 501/669/573\nf 312/664/568 691/668/572 690/667/571\nf 217/506/411 312/664/568 522/505/410\nf 312/664/568 217/506/411 501/669/573\nf 219/511/416 313/670/574 503/671/575\nf 313/670/574 219/511/416 523/512/417\nf 190/672/576 313/670/574 447/673/577\nf 313/670/574 190/672/576 503/671/575\nf 689/666/570 313/670/574 502/665/569\nf 313/670/574 689/666/570 447/673/577\nf 218/504/409 313/670/574 523/512/417\nf 313/670/574 218/504/409 502/665/569\nf 217/506/411 314/674/578 501/669/573\nf 314/674/578 217/506/411 524/517/422\nf 691/668/572 314/674/578 692/675/579\nf 314/674/578 691/668/572 501/669/573\nf 693/676/580 314/674/578 504/677/581\nf 314/674/578 693/676/580 692/675/579\nf 220/518/423 314/674/578 524/517/422\nf 314/674/578 220/518/423 504/677/581\nf 222/525/430 315/678/582 506/679/583\nf 315/678/582 222/525/430 525/526/431\nf 694/680/584 315/678/582 695/681/585\nf 315/678/582 694/680/584 506/679/583\nf 696/682/586 315/678/582 505/683/587\nf 315/678/582 696/682/586 695/681/585\nf 221/527/432 315/678/582 525/526/431\nf 315/678/582 221/527/432 505/683/587\nf 223/532/437 316/684/588 507/685/589\nf 316/684/588 223/532/437 526/533/438\nf 192/686/590 316/684/588 454/687/591\nf 316/684/588 192/686/590 507/685/589\nf 694/680/584 316/684/588 506/679/583\nf 316/684/588 694/680/584 454/687/591\nf 222/525/430 316/684/588 526/533/438\nf 316/684/588 222/525/430 506/679/583\nf 221/527/432 317/688/592 505/683/587\nf 317/688/592 221/527/432 527/538/443\nf 696/682/586 317/688/592 697/689/593\nf 317/688/592 696/682/586 505/683/587\nf 698/690/594 317/688/592 508/691/595\nf 317/688/592 698/690/594 697/689/593\nf 224/539/444 317/688/592 527/538/443\nf 317/688/592 224/539/444 508/691/595\nf 226/546/451 318/692/596 510/693/597\nf 318/692/596 226/546/451 528/547/452\nf 699/694/598 318/692/596 700/695/599\nf 318/692/596 699/694/598 510/693/597\nf 701/696/600 318/692/596 509/697/601\nf 318/692/596 701/696/600 700/695/599\nf 225/548/453 318/692/596 528/547/452\nf 318/692/596 225/548/453 509/697/601\nf 227/553/458 319/698/602 511/699/603\nf 319/698/602 227/553/458 529/554/459\nf 702/700/604 319/698/602 703/701/605\nf 319/698/602 702/700/604 511/699/603\nf 699/694/598 319/698/602 510/693/597\nf 319/698/602 699/694/598 703/701/605\nf 226/546/451 319/698/602 529/554/459\nf 319/698/602 226/546/451 510/693/597\nf 225/548/453 320/702/606 509/697/601\nf 320/702/606 225/548/453 530/559/464\nf 701/696/600 320/702/606 704/703/607\nf 320/702/606 701/696/600 509/697/601\nf 705/704/608 320/702/606 512/705/609\nf 320/702/606 705/704/608 704/703/607\nf 228/560/465 320/702/606 530/559/464\nf 320/702/606 228/560/465 512/705/609\n"
  },
  {
    "path": "src/JitterDemo/runtimes/LICENSE",
    "content": "GLFW - https://www.glfw.org\n===================================================================================\n\nCopyright © 2002-2006 Marcus Geelnard\n\nCopyright © 2006-2019 Camilla Löwy\n\nThis software is provided ‘as-is’, without any express or implied warranty. \nIn no event will the authors be held liable for any damages arising from the\nuse of this software.\n\nPermission is granted to anyone to use this software for any purpose, including \ncommercial applications, and to alter it and redistribute it freely, subject to\nthe following restrictions:\n\n1. The origin of this software must not be misrepresented; you must not\nclaim that you wrote the original software. If you use this software\nin a product, an acknowledgment in the product documentation would be\nappreciated but is not required.\n\n2. Altered source versions must be plainly marked as such, and must not be\nmisrepresented as being the original software.\n\n3. This notice may not be removed or altered from any source\ndistribution.\n\n\nDear ImGui - https://github.com/ocornut/imgui\n===================================================================================\n\nThe MIT License (MIT)\n\nCopyright (c) 2014-2023 Omar Cornut\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n\ncimgui - https://github.com/cimgui\n===================================================================================\n\nThe MIT License (MIT)\n\nCopyright (c) 2015 Stephan Dilly\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "src/JitterTests/Api/BoundingBoxTests.cs",
    "content": "using Jitter2.SoftBodies;\n\nnamespace JitterTests.Api;\n\npublic class BoundingBoxTests\n{\n    private static void CheckBoundingBox(RigidBodyShape shape)\n    {\n        JQuaternion ori = new JQuaternion(1, 2, 3, 4);\n        JQuaternion.NormalizeInPlace(ref ori);\n\n        JVector pos = new JVector(12, -11, 17);\n\n        ShapeHelper.CalculateBoundingBox(shape, ori, pos, out JBoundingBox shr);\n        shape.CalculateBoundingBox(ori, pos, out JBoundingBox sbb);\n\n        Real fraction = shr.GetVolume() / sbb.GetVolume();\n\n        Assert.That(fraction - (Real)1e-4, Is.LessThan((Real)1.0));\n        Assert.That(fraction, Is.GreaterThan((Real)0.2));\n    }\n\n    [TestCase]\n    public static void RigidBodyShapeTests()\n    {\n        CheckBoundingBox(new BoxShape(1, 2, 3));\n        CheckBoundingBox(new CapsuleShape(1, 2));\n        CheckBoundingBox(new ConeShape(1, 2));\n        CheckBoundingBox(new CylinderShape(1, 2));\n        CheckBoundingBox(new SphereShape(1));\n\n        JVector a = new JVector(1, 2, 3);\n        JVector b = new JVector(2, 2, 3);\n        JVector c = new JVector(1, -2, 4);\n        JVector d = new JVector(3, 3, 3);\n\n        List<JVector> vertices =\n        [\n            a, b, c, d\n        ];\n\n        List<JTriangle> triangles =\n        [\n            new JTriangle(a, b, c),\n            new JTriangle(a, b, d),\n            new JTriangle(a, d, c),\n            new JTriangle(d, b, c)\n        ];\n\n        TriangleMesh tm = new TriangleMesh(triangles);\n\n        CheckBoundingBox(new ConvexHullShape(triangles));\n        CheckBoundingBox(new PointCloudShape(vertices));\n        CheckBoundingBox(new TriangleShape(tm, 0));\n\n        CheckBoundingBox(new TransformedShape(new BoxShape(1, 2, 3),\n            new JVector(1, 2, 3)));\n        CheckBoundingBox(new TransformedShape(new BoxShape(1, 2, 3),\n            JMatrix.CreateRotationX((Real)0.7) * JMatrix.CreateRotationY((Real)1.1)));\n        CheckBoundingBox(new TransformedShape(new BoxShape(1, 2, 3),\n            new JVector(1, 2, 3),\n            JMatrix.CreateRotationZ((Real)0.5) * JMatrix.CreateRotationX((Real)1.3)));\n\n        CheckBoundingBox(new TransformedShape(new SphereShape(1),\n            new JVector(1, -2, 3), JMatrix.CreateScale((Real)2.0, (Real)1.5, (Real)3.0)));\n\n        var shear = JMatrix.Identity;\n        shear.M12 = (Real)0.5;\n        shear.M31 = (Real)0.3;\n        CheckBoundingBox(new TransformedShape(new BoxShape(1, 2, 3),\n            new JVector(1, -2, 3), shear));\n    }\n}\n"
  },
  {
    "path": "src/JitterTests/Api/DynamicTreeDistanceTests.cs",
    "content": "namespace JitterTests.Api;\n\npublic class DynamicTreeDistanceTests\n{\n    private static RigidBody CreateStaticBox(World world, JVector position, Real size = (Real)2.0)\n    {\n        var body = world.CreateRigidBody();\n        body.MotionType = MotionType.Static;\n        body.Position = position;\n        body.AddShape(new BoxShape(size));\n        return body;\n    }\n\n    [Test]\n    public void FindNearestPoint_ReturnsClosestSeparatedProxy()\n    {\n        using var world = new World();\n\n        var nearBody = CreateStaticBox(world, new JVector((Real)5.0, (Real)0.0, (Real)0.0));\n        CreateStaticBox(world, new JVector((Real)9.0, (Real)0.0, (Real)0.0));\n\n        bool hit = world.DynamicTree.FindNearestPoint(JVector.Zero, null, null,\n            out IDynamicTreeProxy? proxy, out JVector pointA, out JVector pointB, out JVector normal, out Real distance);\n\n        Assert.That(hit, Is.True);\n        Assert.That(proxy, Is.SameAs(nearBody.Shapes[0]));\n        Assert.That(distance, Is.EqualTo((Real)4.0).Within((Real)5e-5));\n        Assert.That(pointA, Is.EqualTo(JVector.Zero));\n        Assert.That(pointB.X, Is.EqualTo((Real)4.0).Within((Real)5e-5));\n        Assert.That(pointB.Y, Is.EqualTo((Real)0.0).Within((Real)1e-4));\n        Assert.That(pointB.Z, Is.EqualTo((Real)0.0).Within((Real)1e-4));\n        Assert.That(normal.X, Is.EqualTo((Real)1.0).Within((Real)5e-5));\n        Assert.That(normal.Y, Is.EqualTo((Real)0.0).Within((Real)1e-4));\n        Assert.That(normal.Z, Is.EqualTo((Real)0.0).Within((Real)1e-4));\n    }\n\n    [Test]\n    public void FindNearestSphere_ReturnsClosestSeparatedProxy()\n    {\n        using var world = new World();\n\n        var nearBody = CreateStaticBox(world, new JVector((Real)5.0, (Real)0.0, (Real)0.0));\n        CreateStaticBox(world, new JVector((Real)9.0, (Real)0.0, (Real)0.0));\n\n        bool hit = world.DynamicTree.FindNearestSphere((Real)1.0, JVector.Zero, null, null,\n            out IDynamicTreeProxy? proxy, out JVector pointA, out JVector pointB, out JVector normal, out Real distance);\n\n        Assert.That(hit, Is.True);\n        Assert.That(proxy, Is.SameAs(nearBody.Shapes[0]));\n        Assert.That(distance, Is.EqualTo((Real)3.0).Within((Real)5e-5));\n        Assert.That(pointA.X, Is.EqualTo((Real)1.0).Within((Real)5e-5));\n        Assert.That(pointA.Y, Is.EqualTo((Real)0.0).Within((Real)1e-4));\n        Assert.That(pointA.Z, Is.EqualTo((Real)0.0).Within((Real)1e-4));\n        Assert.That(pointB.X, Is.EqualTo((Real)4.0).Within((Real)5e-5));\n        Assert.That(pointB.Y, Is.EqualTo((Real)0.0).Within((Real)1e-4));\n        Assert.That(pointB.Z, Is.EqualTo((Real)0.0).Within((Real)1e-4));\n        Assert.That(normal.X, Is.EqualTo((Real)1.0).Within((Real)5e-5));\n        Assert.That(normal.Y, Is.EqualTo((Real)0.0).Within((Real)1e-4));\n        Assert.That(normal.Z, Is.EqualTo((Real)0.0).Within((Real)1e-4));\n    }\n\n    [Test]\n    public void FindNearestSphere_MaxDistanceExcludesFartherBodies()\n    {\n        using var world = new World();\n\n        CreateStaticBox(world, new JVector((Real)5.0, (Real)0.0, (Real)0.0));\n\n        bool hit = world.DynamicTree.FindNearestSphere((Real)1.0, JVector.Zero, (Real)2.99, null, null,\n            out IDynamicTreeProxy? proxy, out JVector pointA, out JVector pointB, out JVector normal, out _);\n\n        Assert.That(hit, Is.False);\n        Assert.That(proxy, Is.Null);\n        Assert.That(pointA, Is.EqualTo(default(JVector)));\n        Assert.That(pointB, Is.EqualTo(default(JVector)));\n        Assert.That(normal, Is.EqualTo(default(JVector)));\n    }\n\n    [Test]\n    public void FindNearestSphere_MaxDistanceIncludesNearbyBody()\n    {\n        // Shape is at distance ~3.0; maxDistance of 3.1 comfortably includes it.\n        // Testing the exact boundary (maxDistance == distance) is not meaningful\n        // because GJK has convergence error on the order of 1e-4.\n        using var world = new World();\n\n        var body = CreateStaticBox(world, new JVector((Real)5.0, (Real)0.0, (Real)0.0));\n\n        bool hit = world.DynamicTree.FindNearestSphere((Real)1.0, JVector.Zero, (Real)3.1, null, null,\n            out IDynamicTreeProxy? proxy, out _, out _, out _, out Real distance);\n\n        Assert.That(hit, Is.True);\n        Assert.That(proxy, Is.SameAs(body.Shapes[0]));\n        Assert.That(distance, Is.EqualTo((Real)3.0).Within((Real)5e-5));\n    }\n\n    [Test]\n    public void FindNearestSphere_ReturnsOverlapAndZeroDistanceOnOverlap()\n    {\n        using var world = new World();\n\n        var overlappingBody = CreateStaticBox(world, JVector.Zero);\n        CreateStaticBox(world, new JVector((Real)5.0, (Real)0.0, (Real)0.0));\n\n        bool hit = world.DynamicTree.FindNearestSphere((Real)1.0, JVector.Zero, null, null,\n            out IDynamicTreeProxy? proxy, out _, out _, out _, out Real distance);\n\n        Assert.That(hit, Is.True);\n        Assert.That(proxy, Is.SameAs(overlappingBody.Shapes[0]));\n        Assert.That(distance, Is.EqualTo((Real)0.0));\n    }\n\n    [Test]\n    public void FindNearestSphere_ZeroMaxDistanceReturnsOverlap()\n    {\n        using var world = new World();\n\n        var overlappingBody = CreateStaticBox(world, JVector.Zero);\n        CreateStaticBox(world, new JVector((Real)5.0, (Real)0.0, (Real)0.0));\n\n        bool hit = world.DynamicTree.FindNearestSphere((Real)1.0, JVector.Zero, (Real)0.0, null, null,\n            out IDynamicTreeProxy? proxy, out _, out _, out _, out Real distance);\n\n        Assert.That(hit, Is.True);\n        Assert.That(proxy, Is.SameAs(overlappingBody.Shapes[0]));\n        Assert.That(distance, Is.EqualTo((Real)0.0));\n    }\n\n    [Test]\n    public void FindNearestSphere_OverlapRespectsPreFilter()\n    {\n        using var world = new World();\n\n        var overlappingBody = CreateStaticBox(world, JVector.Zero);\n        var separatedBody = CreateStaticBox(world, new JVector((Real)5.0, (Real)0.0, (Real)0.0));\n\n        // Pre-filter excludes the overlapping body — should fall through to the separated one.\n        bool hit = world.DynamicTree.FindNearestSphere((Real)1.0, JVector.Zero,\n            proxy => !ReferenceEquals(proxy, overlappingBody.Shapes[0]), null,\n            out IDynamicTreeProxy? proxy, out _, out _, out _, out Real distance);\n\n        Assert.That(hit, Is.True);\n        Assert.That(proxy, Is.SameAs(separatedBody.Shapes[0]));\n        Assert.That(distance, Is.EqualTo((Real)3.0).Within((Real)5e-5));\n    }\n\n    [Test]\n    public void FindNearestSphere_PostFilterCanSkipOverlapAndReturnSeparated()\n    {\n        using var world = new World();\n\n        CreateStaticBox(world, JVector.Zero);\n        var separatedBody = CreateStaticBox(world, new JVector((Real)5.0, (Real)0.0, (Real)0.0));\n\n        // Post-filter rejects overlap results (distance == 0) — search continues to find separated proxy.\n        bool hit = world.DynamicTree.FindNearestSphere((Real)1.0, JVector.Zero, null,\n            result => result.Distance > (Real)0.0,\n            out IDynamicTreeProxy? proxy, out _, out _, out _, out Real distance);\n\n        Assert.That(hit, Is.True);\n        Assert.That(proxy, Is.SameAs(separatedBody.Shapes[0]));\n        Assert.That(distance, Is.EqualTo((Real)3.0).Within((Real)5e-5));\n    }\n\n    [Test]\n    public void FindNearestSphere_PreFilterCanExcludeCloserCandidate()\n    {\n        using var world = new World();\n\n        var filteredBody = CreateStaticBox(world, new JVector((Real)5.0, (Real)0.0, (Real)0.0));\n        var keptBody = CreateStaticBox(world, new JVector((Real)8.0, (Real)0.0, (Real)0.0));\n\n        bool hit = world.DynamicTree.FindNearestSphere((Real)1.0, JVector.Zero,\n            proxy => !ReferenceEquals(proxy, filteredBody.Shapes[0]), null,\n            out IDynamicTreeProxy? proxy, out _, out _, out _, out Real distance);\n\n        Assert.That(hit, Is.True);\n        Assert.That(proxy, Is.SameAs(keptBody.Shapes[0]));\n        Assert.That(distance, Is.EqualTo((Real)6.0).Within((Real)5e-5));\n    }\n\n    [Test]\n    public void FindNearestSphere_PostFilterCanRejectNearestAcceptedResult()\n    {\n        using var world = new World();\n\n        CreateStaticBox(world, new JVector((Real)5.0, (Real)0.0, (Real)0.0));\n        var fartherBody = CreateStaticBox(world, new JVector((Real)8.0, (Real)0.0, (Real)0.0));\n\n        bool hit = world.DynamicTree.FindNearestSphere((Real)1.0, JVector.Zero, null,\n            result => result.Distance > (Real)3.5,\n            out IDynamicTreeProxy? proxy, out _, out _, out _, out Real distance);\n\n        Assert.That(hit, Is.True);\n        Assert.That(proxy, Is.SameAs(fartherBody.Shapes[0]));\n        Assert.That(distance, Is.EqualTo((Real)6.0).Within((Real)5e-5));\n    }\n}\n"
  },
  {
    "path": "src/JitterTests/Api/InertiaTests.cs",
    "content": "namespace JitterTests.Api;\n\n[TestFixture]\npublic class InertiaTests\n{\n    private static void Check(RigidBodyShape shape, JMatrix inertia, JVector com, Real mass)\n    {\n        shape.CalculateMassInertia(out JMatrix shapeInertia, out JVector shapeCom, out Real shapeMass);\n\n        JMatrix dInertia = shapeInertia - inertia;\n        Assert.That(MathHelper.IsZero(dInertia.UnsafeGet(0), (Real)1e-3));\n        Assert.That(MathHelper.IsZero(dInertia.UnsafeGet(1), (Real)1e-3));\n        Assert.That(MathHelper.IsZero(dInertia.UnsafeGet(2), (Real)1e-3));\n\n        Real dmass = shapeMass - mass;\n        Assert.That(MathR.Abs(dmass), Is.LessThan((Real)1e-3));\n\n        JVector dcom = shapeCom - com;\n        Assert.That(MathHelper.IsZero(dcom, (Real)1e-3));\n    }\n\n    [TestCase]\n    public static void CapsuleInertia()\n    {\n        var ts = new CapsuleShape((Real)0.429, (Real)1.7237);\n        ShapeHelper.CalculateMassInertia(ts, out JMatrix inertia, out JVector com, out Real mass, 8);\n        Check(ts, inertia, com, mass);\n    }\n\n    [TestCase]\n    public static void CylinderInertia()\n    {\n        var ts = new CylinderShape((Real)0.429, (Real)1.7237);\n        ShapeHelper.CalculateMassInertia(ts, out JMatrix inertia, out JVector com, out Real mass, 8);\n        Check(ts, inertia, com, mass);\n    }\n\n    [TestCase]\n    public static void ConeInertia()\n    {\n        var ts = new ConeShape((Real)0.429, (Real)1.7237);\n        ShapeHelper.CalculateMassInertia(ts, out JMatrix inertia, out JVector com, out Real mass, 8);\n        Check(ts, inertia, com, mass);\n    }\n\n    [TestCase]\n    public static void BoxInertia()\n    {\n        var ts = new BoxShape((Real)0.429, (Real)1.7237, (Real)2.11383);\n        ShapeHelper.CalculateMassInertia(ts, out JMatrix inertia, out JVector com, out Real mass, 8);\n        Check(ts, inertia, com, mass);\n    }\n\n    [TestCase]\n    public static void SphereInertia()\n    {\n        var ts = new SphereShape((Real)0.429);\n        ShapeHelper.CalculateMassInertia(ts, out JMatrix inertia, out JVector com, out Real mass, 8);\n        Check(ts, inertia, com, mass);\n    }\n\n    [TestCase]\n    public static void TransformedInertia()\n    {\n        var ss = new SphereShape((Real)0.429);\n        var translation = new JVector((Real)2.847, (Real)3.432, (Real)1.234);\n\n        var ts = new TransformedShape(ss, translation);\n        ShapeHelper.CalculateMassInertia(ts, out JMatrix inertia, out JVector com, out Real mass, 8);\n        Check(ts, inertia, com, mass);\n    }\n\n    [TestCase]\n    public static void TransformedRotationInertia()\n    {\n        var box = new BoxShape((Real)1.0, (Real)2.0, (Real)3.0);\n        var rotation = JMatrix.CreateRotationX((Real)0.7) * JMatrix.CreateRotationY((Real)1.1);\n\n        var ts = new TransformedShape(box, rotation);\n        ShapeHelper.CalculateMassInertia(ts, out JMatrix inertia, out JVector com, out Real mass, 8);\n        Check(ts, inertia, com, mass);\n    }\n\n    [TestCase]\n    public static void TransformedRotationTranslationInertia()\n    {\n        var box = new BoxShape((Real)1.0, (Real)2.0, (Real)3.0);\n        var translation = new JVector((Real)2.847, (Real)3.432, (Real)1.234);\n        var rotation = JMatrix.CreateRotationZ((Real)0.5) * JMatrix.CreateRotationX((Real)1.3);\n\n        var ts = new TransformedShape(box, translation, rotation);\n        ShapeHelper.CalculateMassInertia(ts, out JMatrix inertia, out JVector com, out Real mass, 8);\n        Check(ts, inertia, com, mass);\n    }\n\n    [TestCase]\n    public static void TransformedScaleInertia()\n    {\n        var box = new BoxShape((Real)1.0, (Real)2.0, (Real)3.0);\n        var scale = JMatrix.CreateScale((Real)2.0, (Real)1.5, (Real)3.0);\n        var translation = new JVector((Real)1.0, (Real)2.0, (Real)3.0);\n\n        var ts = new TransformedShape(box, translation, scale);\n        ShapeHelper.CalculateMassInertia(ts, out JMatrix inertia, out JVector com, out Real mass, 8);\n        Check(ts, inertia, com, mass);\n    }\n\n    [TestCase]\n    public static void TransformedShearInertia()\n    {\n        var box = new BoxShape((Real)1.0, (Real)2.0, (Real)3.0);\n        var shear = JMatrix.Identity;\n        shear.M12 = (Real)0.5;\n        shear.M31 = (Real)0.3;\n        var translation = new JVector((Real)1.5, (Real)(-0.7), (Real)2.3);\n\n        var ts = new TransformedShape(box, translation, shear);\n        ShapeHelper.CalculateMassInertia(ts, out JMatrix inertia, out JVector com, out Real mass, 8);\n        Check(ts, inertia, com, mass);\n    }\n\n    [TestCase]\n    public static void ConvexHullInertia()\n    {\n        List<JTriangle> cvh = new List<JTriangle>();\n\n        JVector a = new JVector((Real)0.234, (Real)1.23, (Real)3.54);\n        JVector b = new JVector((Real)7.788, (Real)0.23, (Real)8.14);\n        JVector c = new JVector((Real)2.234, (Real)8.23, (Real)8.14);\n        JVector d = new JVector((Real)6.234, (Real)3.23, (Real)9.04);\n\n        cvh.Add(new JTriangle(a, b, c));\n        cvh.Add(new JTriangle(a, b, d));\n        cvh.Add(new JTriangle(b, c, d));\n        cvh.Add(new JTriangle(a, c, d));\n\n        var ts = new ConvexHullShape(cvh);\n        ShapeHelper.CalculateMassInertia(ts, out JMatrix inertia, out JVector com, out Real mass, 8);\n        Check(ts, inertia, com, mass);\n    }\n}\n"
  },
  {
    "path": "src/JitterTests/Api/InteropTests.cs",
    "content": "using System.Numerics;\n\nnamespace JitterTests.Api;\n\n[TestFixture]\npublic sealed class InteropTests\n{\n    // --- Tuple conversions ----------------------------------------------------\n\n    [Test]\n    public void JVector_TupleConversion_AssignsComponents()\n    {\n        JVector v = (1f, -2f, 3.5f);\n\n        Assert.That((float)v.X, Is.EqualTo(1f));\n        Assert.That((float)v.Y, Is.EqualTo(-2f));\n        Assert.That((float)v.Z, Is.EqualTo(3.5f));\n    }\n\n    [Test]\n    public void JQuaternion_TupleConversion_AssignsComponents()\n    {\n        JQuaternion q = (1f, -2f, 3.5f, -4f);\n\n        Assert.That((float)q.X, Is.EqualTo(1f));\n        Assert.That((float)q.Y, Is.EqualTo(-2f));\n        Assert.That((float)q.Z, Is.EqualTo(3.5f));\n        Assert.That((float)q.W, Is.EqualTo(-4f));\n    }\n\n    // --- System.Numerics conversions -----------------------------------------\n\n    [Test]\n    public void JVector_SystemNumerics_Vector3_Conversion_Roundtrip()\n    {\n        var v = new JVector(1.25f, -2.5f, 3.75f);\n\n        Vector3 n = v;       // JVector -> Vector3\n        JVector back = n;    // Vector3 -> JVector\n\n        Assert.That(n.X, Is.EqualTo(1.25f));\n        Assert.That(n.Y, Is.EqualTo(-2.5f));\n        Assert.That(n.Z, Is.EqualTo(3.75f));\n\n        Assert.That((float)back.X, Is.EqualTo(1.25f));\n        Assert.That((float)back.Y, Is.EqualTo(-2.5f));\n        Assert.That((float)back.Z, Is.EqualTo(3.75f));\n    }\n\n    [Test]\n    public void JQuaternion_SystemNumerics_Quaternion_Conversion_Roundtrip()\n    {\n        var q = new JQuaternion(0.1f, -0.2f, 0.3f, 0.4f);\n\n        Quaternion n = q;       // JQuaternion -> Quaternion\n        JQuaternion back = n;   // Quaternion -> JQuaternion\n\n        Assert.That(n.X, Is.EqualTo(0.1f));\n        Assert.That(n.Y, Is.EqualTo(-0.2f));\n        Assert.That(n.Z, Is.EqualTo(0.3f));\n        Assert.That(n.W, Is.EqualTo(0.4f));\n\n        Assert.That((float)back.X, Is.EqualTo(0.1f));\n        Assert.That((float)back.Y, Is.EqualTo(-0.2f));\n        Assert.That((float)back.Z, Is.EqualTo(0.3f));\n        Assert.That((float)back.W, Is.EqualTo(0.4f));\n    }\n}\n"
  },
  {
    "path": "src/JitterTests/Api/MassInertiaTests.cs",
    "content": "namespace JitterTests.Api;\n\npublic class MassInertiaTests\n{\n    // -------------------------------------------------------------------------\n    // SetMassInertia() — auto-compute from shapes\n    // -------------------------------------------------------------------------\n\n    [TestCase]\n    public void SetMassInertia_NoShapes_SetsUnitMassAndIdentityInertia()\n    {\n        var world = new World();\n        var body = world.CreateRigidBody();\n        body.SetMassInertia();\n        Assert.That(body.Mass, Is.EqualTo((Real)1.0).Within((Real)1e-6));\n        Assert.That(body.InverseInertia.M11, Is.EqualTo((Real)1.0).Within((Real)1e-6));\n        Assert.That(body.InverseInertia.M22, Is.EqualTo((Real)1.0).Within((Real)1e-6));\n        Assert.That(body.InverseInertia.M33, Is.EqualTo((Real)1.0).Within((Real)1e-6));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void SetMassInertia_WithShape_MatchesMassFromAddShape()\n    {\n        var world = new World();\n        var body = world.CreateRigidBody();\n        body.AddShape(new SphereShape(1));\n        var massFromAddShape = body.Mass;\n        body.SetMassInertia();\n        Assert.That(body.Mass, Is.EqualTo(massFromAddShape).Within((Real)1e-5));\n        world.Dispose();\n    }\n\n    // -------------------------------------------------------------------------\n    // SetMassInertia(Real mass) — scale inertia to a specific mass\n    // -------------------------------------------------------------------------\n\n    [TestCase]\n    public void SetMassInertia_SpecificMass_SetsMassCorrectly()\n    {\n        var world = new World();\n        var body = world.CreateRigidBody();\n        body.AddShape(new SphereShape(1));\n        body.SetMassInertia(5f);\n        Assert.That(body.Mass, Is.EqualTo((Real)5.0).Within((Real)1e-5));\n        world.Dispose();\n    }\n\n    // -------------------------------------------------------------------------\n    // SetMassInertia(JMatrix, Real, bool) — fully manual\n    // -------------------------------------------------------------------------\n\n    [TestCase]\n    public void SetMassInertia_Manual_SetsMassAndInertia()\n    {\n        var world = new World();\n        var body = world.CreateRigidBody();\n        var inertia = JMatrix.Identity * 2f;\n        body.SetMassInertia(inertia, 10f);\n        Assert.That(body.Mass, Is.EqualTo((Real)10.0).Within((Real)1e-5));\n        // InverseInertia should be inverse of 2*I = 0.5*I\n        Assert.That(body.InverseInertia.M11, Is.EqualTo((Real)0.5).Within((Real)1e-5));\n        Assert.That(body.InverseInertia.M22, Is.EqualTo((Real)0.5).Within((Real)1e-5));\n        Assert.That(body.InverseInertia.M33, Is.EqualTo((Real)0.5).Within((Real)1e-5));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void SetMassInertia_ManualInverse_SetsMassAndInertiaDirectly()\n    {\n        var world = new World();\n        var body = world.CreateRigidBody();\n        var inverseInertia = JMatrix.Identity * 4f;\n        // inverseMass = 0.1 → mass = 10\n        body.SetMassInertia(inverseInertia, 0.1f, setAsInverse: true);\n        Assert.That(body.Mass, Is.EqualTo((Real)10.0).Within((Real)1e-4));\n        Assert.That(body.InverseInertia.M11, Is.EqualTo((Real)4.0).Within((Real)1e-5));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void SetMassInertia_PreservedAcrossMotionTypeChanges()\n    {\n        var world = new World();\n        var body = world.CreateRigidBody();\n        body.AddShape(new SphereShape(1));\n        body.SetMassInertia(7f);\n        var mass = body.Mass;\n\n        body.MotionType = MotionType.Static;\n        Assert.That(body.Mass, Is.EqualTo(mass).Within((Real)1e-5));\n\n        body.MotionType = MotionType.Kinematic;\n        Assert.That(body.Mass, Is.EqualTo(mass).Within((Real)1e-5));\n\n        body.MotionType = MotionType.Dynamic;\n        Assert.That(body.Mass, Is.EqualTo(mass).Within((Real)1e-5));\n        world.Dispose();\n    }\n\n    // -------------------------------------------------------------------------\n    // Throws\n    // -------------------------------------------------------------------------\n\n    [TestCase]\n    public void SetMassInertia_WithMass_Zero_Throws()\n    {\n        var world = new World();\n        var body = world.CreateRigidBody();\n        Assert.Throws<ArgumentException>(() => body.SetMassInertia((Real)0.0));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void SetMassInertia_WithMass_Negative_Throws()\n    {\n        var world = new World();\n        var body = world.CreateRigidBody();\n        Assert.Throws<ArgumentException>(() => body.SetMassInertia((Real)(-1.0)));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void SetMassInertia_WithSingularMatrix_Throws()\n    {\n        var world = new World();\n        var body = world.CreateRigidBody();\n        Assert.Throws<ArgumentException>(() => body.SetMassInertia(JMatrix.Zero, (Real)1.0));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void SetMassInertia_AsInverse_WithNegativeInverseMass_Throws()\n    {\n        var world = new World();\n        var body = world.CreateRigidBody();\n        Assert.Throws<ArgumentException>(() => body.SetMassInertia(JMatrix.Identity, (Real)(-1.0), true));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void SetMassInertia_AsInverse_WithInfiniteInverseMass_Throws()\n    {\n        var world = new World();\n        var body = world.CreateRigidBody();\n        Assert.Throws<ArgumentException>(() => body.SetMassInertia(JMatrix.Identity, Real.PositiveInfinity, true));\n        world.Dispose();\n    }\n}\n"
  },
  {
    "path": "src/JitterTests/Api/MathTests.cs",
    "content": "using Jitter2.Dynamics.Constraints;\n\nnamespace JitterTests.Api;\n\npublic class MathTests\n{\n    [TestCase]\n    public static void StableMath_MatchesMathROnRepresentativeInputs()\n    {\n        Real[] angles =\n        [\n            (Real)(-16.0) * MathR.PI,\n            (Real)(-3.0) * MathR.PI,\n            -MathR.PI,\n            (Real)(-0.75) * MathR.PI,\n            (Real)(-0.5) * MathR.PI,\n            (Real)(-0.25) * MathR.PI,\n            (Real)(-0.1),\n            (Real)0.0,\n            (Real)0.1,\n            (Real)0.25 * MathR.PI,\n            (Real)0.5 * MathR.PI,\n            (Real)0.75 * MathR.PI,\n            MathR.PI,\n            (Real)3.0 * MathR.PI,\n            (Real)16.0 * MathR.PI\n        ];\n\n        foreach (Real angle in angles)\n        {\n            var (sinDet, cosDet) = StableMath.SinCos(angle);\n\n            Assert.That(MathR.Abs(sinDet - MathR.Sin(angle)), Is.LessThan((Real)2e-6), $\"sin({angle})\");\n            Assert.That(MathR.Abs(cosDet - MathR.Cos(angle)), Is.LessThan((Real)2e-6), $\"cos({angle})\");\n            Assert.That(MathR.Abs(StableMath.Sin(angle) - MathR.Sin(angle)), Is.LessThan((Real)2e-6), $\"single sin({angle})\");\n            Assert.That(MathR.Abs(StableMath.Cos(angle) - MathR.Cos(angle)), Is.LessThan((Real)2e-6), $\"single cos({angle})\");\n        }\n\n        (Real y, Real x)[] atanInputs =\n        [\n            ((Real)1.0, (Real)1.0),\n            ((Real)1.0, (Real)(-1.0)),\n            ((Real)(-1.0), (Real)1.0),\n            ((Real)(-1.0), (Real)(-1.0)),\n            ((Real)0.2, (Real)3.0),\n            ((Real)3.0, (Real)0.2),\n            ((Real)(-0.2), (Real)3.0),\n            ((Real)3.0, (Real)(-0.2)),\n            ((Real)0.0, (Real)1.0),\n            ((Real)1.0, (Real)0.0)\n        ];\n\n        foreach (var (y, x) in atanInputs)\n        {\n            Assert.That(MathR.Abs(StableMath.Atan2(y, x) - MathR.Atan2(y, x)),\n                Is.LessThan((Real)2e-6), $\"atan2({y}, {x})\");\n        }\n\n        Real[] unitInputs = [(Real)(-1.0), (Real)(-0.75), (Real)(-0.25), (Real)0.0, (Real)0.25, (Real)0.75, (Real)1.0];\n\n        foreach (Real value in unitInputs)\n        {\n            Assert.That(MathR.Abs(StableMath.Asin(value) - MathR.Asin(value)),\n                Is.LessThan((Real)2e-6), $\"asin({value})\");\n            Assert.That(MathR.Abs(StableMath.Acos(value) - MathR.Acos(value)),\n                Is.LessThan((Real)2e-6), $\"acos({value})\");\n        }\n    }\n\n    [TestCase]\n    public static void StableMath_MatchesMathROnNonReducedBoundaryInputs()\n    {\n        Real epsilon = (Real)1e-4;\n        Real[] angles =\n        [\n            -StableMath.Pi,\n            -StableMath.Pi + epsilon,\n            -StableMath.HalfPi,\n            -StableMath.QuarterPi,\n            (Real)0.0,\n            StableMath.QuarterPi,\n            StableMath.HalfPi,\n            StableMath.Pi - epsilon,\n            StableMath.Pi\n        ];\n\n        foreach (Real angle in angles)\n        {\n            var (sinDet, cosDet) = StableMath.SinCos(angle);\n\n            Assert.That(MathR.Abs(sinDet - MathR.Sin(angle)), Is.LessThan((Real)2e-6), $\"sin({angle})\");\n            Assert.That(MathR.Abs(cosDet - MathR.Cos(angle)), Is.LessThan((Real)2e-6), $\"cos({angle})\");\n            Assert.That(MathR.Abs(StableMath.Sin(angle) - MathR.Sin(angle)), Is.LessThan((Real)2e-6), $\"single sin({angle})\");\n            Assert.That(MathR.Abs(StableMath.Cos(angle) - MathR.Cos(angle)), Is.LessThan((Real)2e-6), $\"single cos({angle})\");\n        }\n    }\n\n    [TestCase]\n    public static void DeterministicInverseTrig_MatchesMathROnUnitInterval()\n    {\n        for (int i = -2000; i <= 2000; i++)\n        {\n            Real value = i / (Real)2000.0;\n\n            Assert.That(MathR.Abs(StableMath.Asin(value) - MathR.Asin(value)),\n                Is.LessThan((Real)5e-6), $\"asin({value})\");\n            Assert.That(MathR.Abs(StableMath.Acos(value) - MathR.Acos(value)),\n                Is.LessThan((Real)5e-6), $\"acos({value})\");\n        }\n    }\n\n    [TestCase]\n    public static void QMatrixProjectMultiplyLeftRight()\n    {\n        JQuaternion jq1 = new((Real)0.2, (Real)0.3, (Real)0.4, (Real)0.5);\n        JQuaternion jq2 = new((Real)0.1, (Real)0.7, (Real)0.1, (Real)0.8);\n\n        var qm1 = QMatrix.CreateLeftMatrix(jq1);\n        var qm2 = QMatrix.CreateRightMatrix(jq2);\n\n        JMatrix res1 = QMatrix.Multiply(ref qm1, ref qm2).Projection();\n        JMatrix res2 = QMatrix.ProjectMultiplyLeftRight(jq1, jq2);\n\n        JMatrix delta = res1 - res2;\n        Assert.That(JVector.MaxAbs(delta.GetColumn(0)), Is.LessThan((Real)1e-06));\n        Assert.That(JVector.MaxAbs(delta.GetColumn(1)), Is.LessThan((Real)1e-06));\n        Assert.That(JVector.MaxAbs(delta.GetColumn(2)), Is.LessThan((Real)1e-06));\n    }\n\n    [TestCase]\n    public static void TransformTests()\n    {\n        JVector a = JVector.UnitX;\n        JVector b = JVector.UnitY;\n        JVector c = JVector.UnitZ;\n\n        Assert.That((a - b % c).Length(), Is.LessThan((Real)1e-06));\n        Assert.That((b - c % a).Length(), Is.LessThan((Real)1e-06));\n        Assert.That((c - a % b).Length(), Is.LessThan((Real)1e-06));\n\n        JMatrix ar = JMatrix.CreateRotationX((Real)0.123) *\n                     JMatrix.CreateRotationY((Real)0.321) *\n                     JMatrix.CreateRotationZ((Real)0.213);\n\n        JVector.Transform(a, ar, out a);\n        JVector.Transform(b, ar, out b);\n        JVector.Transform(c, ar, out c);\n\n        Assert.That((a - b % c).Length(), Is.LessThan((Real)1e-06));\n        Assert.That((b - c % a).Length(), Is.LessThan((Real)1e-06));\n        Assert.That((c - a % b).Length(), Is.LessThan((Real)1e-06));\n\n        JMatrix.Inverse(ar, out ar);\n\n        JVector.Transform(a, ar, out a);\n        JVector.Transform(b, ar, out b);\n        JVector.Transform(c, ar, out c);\n\n        Assert.That((a - JVector.UnitX).Length(), Is.LessThan((Real)1e-06));\n        Assert.That((b - JVector.UnitY).Length(), Is.LessThan((Real)1e-06));\n        Assert.That((c - JVector.UnitZ).Length(), Is.LessThan((Real)1e-06));\n\n        // ---\n        // https://arxiv.org/abs/1801.07478\n\n        float cos = (float)MathR.Cos((Real)(0.321 / 2.0));\n        float sin = (float)MathR.Sin((Real)(0.321 / 2.0));\n        JQuaternion quat1 = new(sin, 0, 0, cos);\n        JQuaternion quat2 = JQuaternion.CreateFromMatrix(JMatrix.CreateRotationZ((Real)0.321));\n        JQuaternion quat = JQuaternion.Multiply(quat1, quat2);\n        JQuaternion tv = new(1, 2, 3, 0);\n        JQuaternion tmp = JQuaternion.Multiply(JQuaternion.Multiply(quat, tv), JQuaternion.Conjugate(quat));\n        JVector resQuaternion = new(tmp.X, tmp.Y, tmp.Z);\n\n        JVector.Transform(new JVector(1, 2, 3), JMatrix.CreateFromQuaternion(quat), out JVector resMatrix1);\n        Assert.That((resMatrix1 - resQuaternion).Length(), Is.LessThan((Real)1e-06));\n\n        JMatrix rot1 = JMatrix.CreateRotationX((Real)0.321);\n        JMatrix rot2 = JMatrix.CreateRotationZ((Real)0.321);\n        JMatrix rot = JMatrix.Multiply(rot1, rot2);\n        JVector.Transform(new JVector(1, 2, 3), rot, out JVector resMatrix2);\n\n        Assert.That((resMatrix2 - resQuaternion).Length(), Is.LessThan((Real)1e-06));\n    }\n}\n"
  },
  {
    "path": "src/JitterTests/Api/RayTriangle.cs",
    "content": "using NUnit.Framework;\n\nnamespace JitterTests.Api;\n\n[TestFixture]\npublic class RayIntersectTests\n{\n    private JTriangle tri;\n\n    [SetUp]\n    public void Setup()\n    {\n        // Triangle in XY plane with counter-clockwise winding\n        tri = new JTriangle\n        {\n            V0 = new JVector(0, 0, 0),\n            V1 = new JVector(1, 0, 0),\n            V2 = new JVector(0, 1, 0)\n        };\n    }\n\n    [Test]\n    public void RayHitsFrontFace_CullNone_ReturnsTrue()\n    {\n        var origin = new JVector(0.25f, 0.25f, 1);\n        var direction = new JVector(0, 0, -1);\n\n        bool hit = tri.RayIntersect(origin, direction, JTriangle.CullMode.None, out var normal, out var lambda);\n\n        Assert.That(hit);\n        Assert.That(MathHelper.IsZero(lambda - (Real)1.0));\n        Assert.That(MathHelper.IsZero(normal - JVector.UnitZ));\n    }\n\n    [Test]\n    public void RayHitsBackFace_CullNone_ReturnsTrue()\n    {\n        var origin = new JVector(0.25f, 0.25f, -1);\n        var direction = new JVector(0, 0, 1);\n\n        bool hit = tri.RayIntersect(origin, direction, JTriangle.CullMode.None, out var normal, out var lambda);\n\n        Assert.That(hit);\n        Assert.That(MathHelper.IsZero(lambda - (Real)1.0));\n        Assert.That(MathHelper.IsZero(normal + JVector.UnitZ));\n    }\n\n    [Test]\n    public void RayHitsFrontFace_CullFront_ReturnsFalse()\n    {\n        var origin = new JVector(0.25f, 0.25f, 1);\n        var direction = new JVector(0, 0, -1);\n\n        bool hit = tri.RayIntersect(origin, direction, JTriangle.CullMode.FrontFacing, out var normal, out var lambda);\n\n        Assert.That(hit, Is.False);\n    }\n\n    [Test]\n    public void RayHitsBackFace_CullFront_ReturnsTrue()\n    {\n        var origin = new JVector(0.25f, 0.25f, -1);\n        var direction = new JVector(0, 0, 1);\n\n        bool hit = tri.RayIntersect(origin, direction, JTriangle.CullMode.FrontFacing, out var normal, out var lambda);\n\n        Assert.That(hit);\n        Assert.That(MathHelper.IsZero(lambda - (Real)1.0));\n        Assert.That(MathHelper.IsZero(normal + JVector.UnitZ));\n    }\n\n    [Test]\n    public void RayHitsFrontFace_CullBack_ReturnsTrue()\n    {\n        var origin = new JVector(0.25f, 0.25f, 1);\n        var direction = new JVector(0, 0, -1);\n\n        bool hit = tri.RayIntersect(origin, direction, JTriangle.CullMode.BackFacing, out var normal, out var lambda);\n\n        Assert.That(hit);\n        Assert.That(MathHelper.IsZero(lambda - (Real)1.0));\n        Assert.That(MathHelper.IsZero(normal - JVector.UnitZ));\n    }\n\n    [Test]\n    public void RayHitsBackFace_CullBack_ReturnsFalse()\n    {\n        var origin = new JVector(0.25f, 0.25f, -1);\n        var direction = new JVector(0, 0, 1);\n\n        bool hit = tri.RayIntersect(origin, direction, JTriangle.CullMode.BackFacing, out var normal, out var lambda);\n\n        Assert.That(hit, Is.False);\n    }\n\n\n}\n"
  },
  {
    "path": "src/JitterTests/Api/RigidBodyCreationTests.cs",
    "content": "namespace JitterTests.Api;\n\n/// <summary>\n/// Tests for the initial state of a RigidBody after creation.\n/// </summary>\npublic class RigidBodyCreationTests\n{\n    [TestCase]\n    public void DefaultPosition_IsZero()\n    {\n        var world = new World();\n        var body = world.CreateRigidBody();\n        Assert.That(body.Position, Is.EqualTo(JVector.Zero));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void DefaultOrientation_IsIdentity()\n    {\n        var world = new World();\n        var body = world.CreateRigidBody();\n        Assert.That(body.Orientation, Is.EqualTo(JQuaternion.Identity));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void DefaultVelocity_IsZero()\n    {\n        var world = new World();\n        var body = world.CreateRigidBody();\n        Assert.That(body.Velocity, Is.EqualTo(JVector.Zero));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void DefaultAngularVelocity_IsZero()\n    {\n        var world = new World();\n        var body = world.CreateRigidBody();\n        Assert.That(body.AngularVelocity, Is.EqualTo(JVector.Zero));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void DefaultMotionType_IsDynamic()\n    {\n        var world = new World();\n        var body = world.CreateRigidBody();\n        Assert.That(body.MotionType, Is.EqualTo(MotionType.Dynamic));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void DefaultForce_IsZero()\n    {\n        var world = new World();\n        var body = world.CreateRigidBody();\n        Assert.That(body.Force, Is.EqualTo(JVector.Zero));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void DefaultTorque_IsZero()\n    {\n        var world = new World();\n        var body = world.CreateRigidBody();\n        Assert.That(body.Torque, Is.EqualTo(JVector.Zero));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void DefaultAffectedByGravity_IsTrue()\n    {\n        var world = new World();\n        var body = world.CreateRigidBody();\n        Assert.That(body.AffectedByGravity, Is.True);\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void DefaultEnableSpeculativeContacts_IsFalse()\n    {\n        var world = new World();\n        var body = world.CreateRigidBody();\n        Assert.That(body.EnableSpeculativeContacts, Is.False);\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void DefaultTag_IsNull()\n    {\n        var world = new World();\n        var body = world.CreateRigidBody();\n        Assert.That(body.Tag, Is.Null);\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void DefaultShapes_IsEmpty()\n    {\n        var world = new World();\n        var body = world.CreateRigidBody();\n        Assert.That(body.Shapes, Is.Empty);\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void DefaultContacts_IsEmpty()\n    {\n        var world = new World();\n        var body = world.CreateRigidBody();\n        Assert.That(body.Contacts, Is.Empty);\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void DefaultConnections_IsEmpty()\n    {\n        var world = new World();\n        var body = world.CreateRigidBody();\n        Assert.That(body.Connections, Is.Empty);\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void DefaultConstraints_IsEmpty()\n    {\n        var world = new World();\n        var body = world.CreateRigidBody();\n        Assert.That(body.Constraints, Is.Empty);\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void CreatedBody_BelongsToWorld()\n    {\n        var world = new World();\n        var body = world.CreateRigidBody();\n        Assert.That(body.World, Is.EqualTo(world));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void CreatedBodies_HaveUniqueIds()\n    {\n        var world = new World();\n        var ids = new HashSet<ulong>();\n        for (int i = 0; i < 100; i++)\n        {\n            ids.Add(world.CreateRigidBody().RigidBodyId);\n        }\n        Assert.That(ids, Has.Count.EqualTo(100));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void CreatedBody_AppearsInWorldRigidBodies()\n    {\n        var world = new World();\n        var body = world.CreateRigidBody();\n        Assert.That(world.RigidBodies, Does.Contain(body));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void RemovedBody_DisappearsFromWorldRigidBodies()\n    {\n        var world = new World();\n        var body = world.CreateRigidBody();\n        world.Remove(body);\n        Assert.That(world.RigidBodies, Does.Not.Contain(body));\n        world.Dispose();\n    }\n}\n"
  },
  {
    "path": "src/JitterTests/Api/RigidBodyPropertyTests.cs",
    "content": "namespace JitterTests.Api;\n\n/// <summary>\n/// Tests for RigidBody property getters and setters in isolation.\n/// </summary>\npublic class RigidBodyPropertyTests\n{\n    // -------------------------------------------------------------------------\n    // Position\n    // -------------------------------------------------------------------------\n\n    [TestCase]\n    public void Position_RoundTrip()\n    {\n        var world = new World();\n        var body = world.CreateRigidBody();\n        var expected = new JVector(1, 2, 3);\n        body.Position = expected;\n        Assert.That(body.Position, Is.EqualTo(expected));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void Position_SetToZero()\n    {\n        var world = new World();\n        var body = world.CreateRigidBody();\n        body.Position = new JVector(5, 5, 5);\n        body.Position = JVector.Zero;\n        Assert.That(body.Position, Is.EqualTo(JVector.Zero));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void Position_SetNegative()\n    {\n        var world = new World();\n        var body = world.CreateRigidBody();\n        var expected = new JVector(-10, -20, -30);\n        body.Position = expected;\n        Assert.That(body.Position, Is.EqualTo(expected));\n        world.Dispose();\n    }\n\n    // -------------------------------------------------------------------------\n    // Orientation\n    // -------------------------------------------------------------------------\n\n    [TestCase]\n    public void Orientation_RoundTrip()\n    {\n        var world = new World();\n        var body = world.CreateRigidBody();\n        var expected = JQuaternion.CreateFromAxisAngle(JVector.UnitY, MathF.PI / 4);\n        body.Orientation = expected;\n        Assert.That(body.Orientation.X, Is.EqualTo(expected.X).Within(1e-5f));\n        Assert.That(body.Orientation.Y, Is.EqualTo(expected.Y).Within(1e-5f));\n        Assert.That(body.Orientation.Z, Is.EqualTo(expected.Z).Within(1e-5f));\n        Assert.That(body.Orientation.W, Is.EqualTo(expected.W).Within(1e-5f));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void Orientation_SetToIdentity()\n    {\n        var world = new World();\n        var body = world.CreateRigidBody();\n        body.Orientation = JQuaternion.CreateFromAxisAngle(JVector.UnitX, MathF.PI / 2);\n        body.Orientation = JQuaternion.Identity;\n        Assert.That(body.Orientation, Is.EqualTo(JQuaternion.Identity));\n        world.Dispose();\n    }\n\n    // -------------------------------------------------------------------------\n    // Velocity\n    // -------------------------------------------------------------------------\n\n    [TestCase]\n    public void Velocity_RoundTrip_Dynamic()\n    {\n        var world = new World();\n        var body = world.CreateRigidBody();\n        var expected = new JVector(1, 2, 3);\n        body.Velocity = expected;\n        Assert.That(body.Velocity, Is.EqualTo(expected));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void Velocity_SetToZero_IsZero()\n    {\n        // Regression: velocity setter must store zero even when value is JVector.Zero.\n        var world = new World();\n        var body = world.CreateRigidBody();\n        body.Velocity = new JVector(5, 0, 0);\n        body.Velocity = JVector.Zero;\n        Assert.That(body.Velocity, Is.EqualTo(JVector.Zero));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void Velocity_SetNegative()\n    {\n        var world = new World();\n        var body = world.CreateRigidBody();\n        var expected = new JVector(-3, -2, -1);\n        body.Velocity = expected;\n        Assert.That(body.Velocity, Is.EqualTo(expected));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void Velocity_OnKinematic_Allowed()\n    {\n        var world = new World();\n        var body = world.CreateRigidBody();\n        body.MotionType = MotionType.Kinematic;\n        var expected = new JVector(1, 0, 0);\n        body.Velocity = expected;\n        Assert.That(body.Velocity, Is.EqualTo(expected));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void Velocity_OnStatic_Throws()\n    {\n        var world = new World();\n        var body = world.CreateRigidBody();\n        body.MotionType = MotionType.Static;\n        Assert.Throws<InvalidOperationException>(() => body.Velocity = new JVector(1, 0, 0));\n        world.Dispose();\n    }\n\n    // -------------------------------------------------------------------------\n    // AngularVelocity\n    // -------------------------------------------------------------------------\n\n    [TestCase]\n    public void AngularVelocity_RoundTrip_Dynamic()\n    {\n        var world = new World();\n        var body = world.CreateRigidBody();\n        var expected = new JVector(0, MathF.PI, 0);\n        body.AngularVelocity = expected;\n        Assert.That(body.AngularVelocity, Is.EqualTo(expected));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void AngularVelocity_SetToZero_IsZero()\n    {\n        // Mirrors the velocity-zero regression for angular velocity.\n        var world = new World();\n        var body = world.CreateRigidBody();\n        body.AngularVelocity = new JVector(0, 1, 0);\n        body.AngularVelocity = JVector.Zero;\n        Assert.That(body.AngularVelocity, Is.EqualTo(JVector.Zero));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void AngularVelocity_OnStatic_Throws()\n    {\n        var world = new World();\n        var body = world.CreateRigidBody();\n        body.MotionType = MotionType.Static;\n        Assert.Throws<InvalidOperationException>(() => body.AngularVelocity = new JVector(0, 1, 0));\n        world.Dispose();\n    }\n\n    // -------------------------------------------------------------------------\n    // Force / Torque\n    // -------------------------------------------------------------------------\n\n    [TestCase]\n    public void Force_RoundTrip()\n    {\n        var world = new World();\n        var body = world.CreateRigidBody();\n        var expected = new JVector(10, 0, 0);\n        body.Force = expected;\n        Assert.That(body.Force, Is.EqualTo(expected));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void Force_SetToZero()\n    {\n        var world = new World();\n        var body = world.CreateRigidBody();\n        body.Force = new JVector(10, 0, 0);\n        body.Force = JVector.Zero;\n        Assert.That(body.Force, Is.EqualTo(JVector.Zero));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void Torque_RoundTrip()\n    {\n        var world = new World();\n        var body = world.CreateRigidBody();\n        var expected = new JVector(0, 5, 0);\n        body.Torque = expected;\n        Assert.That(body.Torque, Is.EqualTo(expected));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void Torque_SetToZero()\n    {\n        var world = new World();\n        var body = world.CreateRigidBody();\n        body.Torque = new JVector(0, 5, 0);\n        body.Torque = JVector.Zero;\n        Assert.That(body.Torque, Is.EqualTo(JVector.Zero));\n        world.Dispose();\n    }\n\n    // -------------------------------------------------------------------------\n    // Material / misc\n    // -------------------------------------------------------------------------\n\n    [TestCase]\n    public void Friction_RoundTrip()\n    {\n        var world = new World();\n        var body = world.CreateRigidBody();\n        body.Friction = 0.7f;\n        Assert.That(body.Friction, Is.EqualTo(0.7f).Within(1e-6f));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void Friction_Negative_Throws()\n    {\n        var world = new World();\n        var body = world.CreateRigidBody();\n        Assert.Throws<ArgumentOutOfRangeException>(() => body.Friction = -0.1f);\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void Restitution_RoundTrip()\n    {\n        var world = new World();\n        var body = world.CreateRigidBody();\n        body.Restitution = 0.5f;\n        Assert.That(body.Restitution, Is.EqualTo(0.5f).Within(1e-6f));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void Restitution_Negative_Throws()\n    {\n        var world = new World();\n        var body = world.CreateRigidBody();\n        Assert.Throws<ArgumentOutOfRangeException>(() => body.Restitution = -0.1f);\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void Restitution_GreaterThanOne_Throws()\n    {\n        var world = new World();\n        var body = world.CreateRigidBody();\n        Assert.Throws<ArgumentOutOfRangeException>(() => body.Restitution = 1.1f);\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void AffectedByGravity_RoundTrip()\n    {\n        var world = new World();\n        var body = world.CreateRigidBody();\n        body.AffectedByGravity = false;\n        Assert.That(body.AffectedByGravity, Is.False);\n        body.AffectedByGravity = true;\n        Assert.That(body.AffectedByGravity, Is.True);\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void Tag_RoundTrip()\n    {\n        var world = new World();\n        var body = world.CreateRigidBody();\n        var tag = new object();\n        body.Tag = tag;\n        Assert.That(body.Tag, Is.SameAs(tag));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void Tag_CanBeCleared()\n    {\n        var world = new World();\n        var body = world.CreateRigidBody();\n        body.Tag = new object();\n        body.Tag = null;\n        Assert.That(body.Tag, Is.Null);\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void Damping_RoundTrip()\n    {\n        var world = new World();\n        var body = world.CreateRigidBody();\n        body.Damping = (0.1f, 0.2f);\n        Assert.That(body.Damping.linear, Is.EqualTo(0.1f).Within(1e-6f));\n        Assert.That(body.Damping.angular, Is.EqualTo(0.2f).Within(1e-6f));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void Damping_LinearNegative_Throws()\n    {\n        var world = new World();\n        var body = world.CreateRigidBody();\n        Assert.Throws<ArgumentOutOfRangeException>(() => body.Damping = (-0.1f, 0.2f));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void Damping_LinearGreaterThanOne_Throws()\n    {\n        var world = new World();\n        var body = world.CreateRigidBody();\n        Assert.Throws<ArgumentOutOfRangeException>(() => body.Damping = (1.1f, 0.2f));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void Damping_AngularNegative_Throws()\n    {\n        var world = new World();\n        var body = world.CreateRigidBody();\n        Assert.Throws<ArgumentOutOfRangeException>(() => body.Damping = (0.1f, -0.2f));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void Damping_AngularGreaterThanOne_Throws()\n    {\n        var world = new World();\n        var body = world.CreateRigidBody();\n        Assert.Throws<ArgumentOutOfRangeException>(() => body.Damping = (0.1f, 1.2f));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void DeactivationThreshold_RoundTrip()\n    {\n        var world = new World();\n        var body = world.CreateRigidBody();\n        body.DeactivationThreshold = (0.3f, 0.4f);\n        Assert.That(body.DeactivationThreshold.angular, Is.EqualTo(0.3f).Within(1e-6f));\n        Assert.That(body.DeactivationThreshold.linear, Is.EqualTo(0.4f).Within(1e-6f));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void DeactivationThreshold_AngularNegative_Throws()\n    {\n        var world = new World();\n        var body = world.CreateRigidBody();\n        Assert.Throws<ArgumentOutOfRangeException>(() => body.DeactivationThreshold = (-0.3f, 0.4f));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void DeactivationThreshold_LinearNegative_Throws()\n    {\n        var world = new World();\n        var body = world.CreateRigidBody();\n        Assert.Throws<ArgumentOutOfRangeException>(() => body.DeactivationThreshold = (0.3f, -0.4f));\n        world.Dispose();\n    }\n\n    // -------------------------------------------------------------------------\n    // Damping — simulation behavior\n    // -------------------------------------------------------------------------\n\n    [TestCase]\n    public void Damping_Linear_SlowsBodyOverTime()\n    {\n        var world = new World();\n        world.AllowDeactivation = false;\n        world.Gravity = JVector.Zero;\n        var body = world.CreateRigidBody();\n        body.AddShape(new SphereShape(1));\n        body.Damping = (0.1f, 0f);\n        body.Velocity = new JVector(10, 0, 0);\n        var speedBefore = body.Velocity.X;\n        Helper.AdvanceWorld(world, 1, 1f / 100f, false);\n        Assert.That(body.Velocity.X, Is.LessThan(speedBefore));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void Damping_Angular_SlowsRotationOverTime()\n    {\n        var world = new World();\n        world.AllowDeactivation = false;\n        world.Gravity = JVector.Zero;\n        var body = world.CreateRigidBody();\n        body.AddShape(new SphereShape(1));\n        body.Damping = (0f, 0.1f);\n        body.AngularVelocity = new JVector(0, 5, 0);\n        var angSpeedBefore = body.AngularVelocity.Y;\n        Helper.AdvanceWorld(world, 1, 1f / 100f, false);\n        Assert.That(body.AngularVelocity.Y, Is.LessThan(angSpeedBefore));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void Damping_Zero_DoesNotSlowBody()\n    {\n        var world = new World();\n        world.AllowDeactivation = false;\n        world.Gravity = JVector.Zero;\n        var body = world.CreateRigidBody();\n        body.AddShape(new SphereShape(1));\n        body.Damping = (0f, 0f);\n        body.Velocity = new JVector(10, 0, 0);\n        Helper.AdvanceWorld(world, 1, 1f / 100f, false);\n        Assert.That(body.Velocity.X, Is.EqualTo(10f).Within(1e-3f));\n        world.Dispose();\n    }\n}\n"
  },
  {
    "path": "src/JitterTests/Api/SequentialTests.cs",
    "content": "using Jitter2.DataStructures;\n\nnamespace JitterTests.Api;\n\npublic class SequentialTests\n{\n    [SetUp]\n    public void Setup()\n    {\n    }\n\n    public class Number : IPartitionedSetIndex\n    {\n        public int SetIndex { get; set; }\n        public int Value;\n\n        public Number(int num)\n        {\n            SetIndex = -1;\n            Value = num;\n        }\n    }\n\n    [TestCase]\n    public static void AddRemoveTest()\n    {\n        var num1 = new Number(1);\n        var num2 = new Number(2);\n        var num3 = new Number(3);\n        var num4 = new Number(4);\n        var num5 = new Number(5);\n\n        PartitionedSet<Number> ts = new();\n\n        Assert.That(ts.Count, Is.EqualTo(0));\n        Assert.That(ts.ActiveCount, Is.EqualTo(0));\n\n        ts.Add(num5);\n\n        Assert.That(ts.Count, Is.EqualTo(1));\n        Assert.That(ts.ActiveCount, Is.EqualTo(0));\n\n        ts.MoveToInactive(num5);\n\n        Assert.That(ts.Count, Is.EqualTo(1));\n        Assert.That(ts.ActiveCount, Is.EqualTo(0));\n\n        ts.MoveToActive(num5);\n\n        Assert.That(ts.Count, Is.EqualTo(1));\n        Assert.That(ts.ActiveCount, Is.EqualTo(1));\n\n        ts.Remove(num5);\n\n        Assert.That(ts.Count, Is.EqualTo(0));\n        Assert.That(ts.ActiveCount, Is.EqualTo(0));\n\n        ts.Add(num5, true);\n\n        Assert.That(ts.Count, Is.EqualTo(1));\n        Assert.That(ts.ActiveCount, Is.EqualTo(1));\n\n        ts.Add(num1);\n        ts.Add(num2);\n        ts.Add(num3);\n        ts.Add(num4);\n\n        Assert.That(ts.Count, Is.EqualTo(5));\n        Assert.That(ts.ActiveCount, Is.EqualTo(1));\n\n        ts.MoveToActive(num2);\n        ts.MoveToActive(num1);\n        ts.MoveToActive(num4);\n        ts.Remove(num4);\n        ts.MoveToInactive(num5);\n\n        Assert.That(ts.Count, Is.EqualTo(4));\n        Assert.That(ts.ActiveCount, Is.EqualTo(2));\n\n        List<Number> elements = new();\n        for (int i = 0; i < ts.ActiveCount; i++)\n        {\n            elements.Add(ts[i]);\n        }\n\n        Assert.That(elements, Does.Contain(num1));\n        Assert.That(elements, Does.Contain(num2));\n    }\n}\n"
  },
  {
    "path": "src/JitterTests/Api/ShapeTests.cs",
    "content": "namespace JitterTests.Api;\n\n/// <summary>\n/// Tests for shape management on a RigidBody (add, remove, clear, mass updates).\n/// </summary>\npublic class ShapeTests\n{\n    // -------------------------------------------------------------------------\n    // Adding shapes\n    // -------------------------------------------------------------------------\n\n    [TestCase]\n    public void AddShape_AppearsInShapes()\n    {\n        var world = new World();\n        var body = world.CreateRigidBody();\n        var shape = new SphereShape(1);\n        body.AddShape(shape);\n        Assert.That(body.Shapes, Does.Contain(shape));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void AddShape_UpdatesMass()\n    {\n        var world = new World();\n        var body = world.CreateRigidBody();\n        body.AddShape(new SphereShape(1));\n        Assert.That(body.Mass, Is.GreaterThan(0));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void AddShape_Preserve_DoesNotChangeMass()\n    {\n        var world = new World();\n        var body = world.CreateRigidBody();\n        body.AddShape(new SphereShape(1));\n        var massBeforeAddition = body.Mass;\n        body.AddShape(new SphereShape(1), MassInertiaUpdateMode.Preserve);\n        Assert.That(body.Mass, Is.EqualTo(massBeforeAddition));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void AddShape_SetsMassAfterTwoShapes()\n    {\n        var world = new World();\n        var body = world.CreateRigidBody();\n        body.AddShape(new SphereShape(1));\n        var massOneShape = body.Mass;\n        body.AddShape(new SphereShape(1));\n        Assert.That(body.Mass, Is.GreaterThan(massOneShape));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void AddShape_SetsRigidBodyReference()\n    {\n        var world = new World();\n        var body = world.CreateRigidBody();\n        var shape = new SphereShape(1);\n        body.AddShape(shape);\n        Assert.That(shape.RigidBody, Is.EqualTo(body));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void AddShapes_AllAppearInShapes()\n    {\n        var world = new World();\n        var body = world.CreateRigidBody();\n        var shapes = new RigidBodyShape[] { new SphereShape(1), new BoxShape(1), new CapsuleShape(0.5f, 1f) };\n        body.AddShapes(shapes);\n        foreach (var shape in shapes)\n            Assert.That(body.Shapes, Does.Contain(shape));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void AddShape_Null_Throws()\n    {\n        var world = new World();\n        var body = world.CreateRigidBody();\n        Assert.Throws<ArgumentNullException>(() => body.AddShape(null!));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void AddShapes_NullEnumerable_Throws()\n    {\n        var world = new World();\n        var body = world.CreateRigidBody();\n        Assert.Throws<ArgumentNullException>(() => body.AddShapes(null!));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void AddShapes_NullEntry_Throws()\n    {\n        var world = new World();\n        var body = world.CreateRigidBody();\n        Assert.Throws<ArgumentNullException>(() => body.AddShapes(new RigidBodyShape[] { new SphereShape(1), null! }));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void AddShape_SameShapeTwice_Throws()\n    {\n        var world = new World();\n        var body = world.CreateRigidBody();\n        var shape = new SphereShape(1);\n        body.AddShape(shape);\n        Assert.Throws<ArgumentException>(() => body.AddShape(shape));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void AddShape_FromAnotherBody_Throws()\n    {\n        var world = new World();\n        var first = world.CreateRigidBody();\n        var second = world.CreateRigidBody();\n        var shape = new SphereShape(1);\n        first.AddShape(shape);\n        Assert.Throws<ArgumentException>(() => second.AddShape(shape));\n        world.Dispose();\n    }\n\n    // -------------------------------------------------------------------------\n    // Removing shapes\n    // -------------------------------------------------------------------------\n\n    [TestCase]\n    public void RemoveShape_DisappearsFromShapes()\n    {\n        var world = new World();\n        var body = world.CreateRigidBody();\n        var shape = new SphereShape(1);\n        body.AddShape(shape);\n        body.RemoveShape(shape);\n        Assert.That(body.Shapes, Does.Not.Contain(shape));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void RemoveShape_UpdatesMass()\n    {\n        var world = new World();\n        var body = world.CreateRigidBody();\n        body.AddShape(new SphereShape(1));\n        body.AddShape(new SphereShape(1));\n        var massTwoShapes = body.Mass;\n        var shape = body.Shapes[0];\n        body.RemoveShape(shape);\n        Assert.That(body.Mass, Is.LessThan(massTwoShapes));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void RemoveShape_Preserve_DoesNotChangeMass()\n    {\n        var world = new World();\n        var body = world.CreateRigidBody();\n        body.AddShape(new SphereShape(1));\n        body.AddShape(new SphereShape(1));\n        var massBeforeRemoval = body.Mass;\n        var shape = body.Shapes[0];\n        body.RemoveShape(shape, MassInertiaUpdateMode.Preserve);\n        Assert.That(body.Mass, Is.EqualTo(massBeforeRemoval));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void RemoveShapes_AllDisappearFromShapes()\n    {\n        var world = new World();\n        var body = world.CreateRigidBody();\n        var s1 = new SphereShape(1);\n        var s2 = new BoxShape(1);\n        body.AddShapes(new RigidBodyShape[] { s1, s2 });\n        body.RemoveShapes(new RigidBodyShape[] { s1, s2 });\n        Assert.That(body.Shapes, Is.Empty);\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void RemoveShape_Null_Throws()\n    {\n        var world = new World();\n        var body = world.CreateRigidBody();\n        Assert.Throws<ArgumentNullException>(() => body.RemoveShape(null!));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void RemoveShape_ForeignShape_Throws()\n    {\n        var world = new World();\n        var first = world.CreateRigidBody();\n        var second = world.CreateRigidBody();\n        var shape = new SphereShape(1);\n        first.AddShape(shape);\n        Assert.Throws<ArgumentException>(() => second.RemoveShape(shape));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void RemoveShapes_WithForeignShape_Throws()\n    {\n        var world = new World();\n        var first = world.CreateRigidBody();\n        var second = world.CreateRigidBody();\n        var s1 = new SphereShape(1);\n        var s2 = new SphereShape(1);\n        first.AddShape(s1);\n        second.AddShape(s2);\n        Assert.Throws<ArgumentException>(() => first.RemoveShapes(new[] { s1, s2 }));\n        world.Dispose();\n    }\n\n    // -------------------------------------------------------------------------\n    // ClearShapes\n    // -------------------------------------------------------------------------\n\n    [TestCase]\n    public void ClearShapes_RemovesAll()\n    {\n        var world = new World();\n        var body = world.CreateRigidBody();\n        body.AddShape(new SphereShape(1));\n        body.AddShape(new BoxShape(1));\n        body.AddShape(new CapsuleShape(0.5f, 1f));\n        body.ClearShapes();\n        Assert.That(body.Shapes, Is.Empty);\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void ClearShapes_LastShape_ResetsMassToDefault()\n    {\n        var world = new World();\n        var body = world.CreateRigidBody();\n        body.AddShape(new SphereShape(1));\n        body.ClearShapes();\n        Assert.That(body.Mass, Is.EqualTo((Real)1.0).Within((Real)1e-6));\n        Assert.That(body.InverseInertia.M11, Is.EqualTo((Real)1.0).Within((Real)1e-6));\n        Assert.That(body.InverseInertia.M22, Is.EqualTo((Real)1.0).Within((Real)1e-6));\n        Assert.That(body.InverseInertia.M33, Is.EqualTo((Real)1.0).Within((Real)1e-6));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void ClearShapes_OnEmptyBody_IsNoop()\n    {\n        var world = new World();\n        var body = world.CreateRigidBody();\n        Assert.DoesNotThrow(() => body.ClearShapes());\n        world.Dispose();\n    }\n\n    // -------------------------------------------------------------------------\n    // Shape count\n    // -------------------------------------------------------------------------\n\n    [TestCase]\n    public void Shapes_CountMatchesAdded()\n    {\n        var world = new World();\n        var body = world.CreateRigidBody();\n        for (int i = 0; i < 5; i++)\n            body.AddShape(new SphereShape(1));\n        Assert.That(body.Shapes.Count, Is.EqualTo(5));\n        world.Dispose();\n    }\n}\n"
  },
  {
    "path": "src/JitterTests/Api/SupportMapTests.cs",
    "content": "namespace JitterTests.Api;\n\npublic class SupportMapTests\n{\n    [Test]\n    public void SupportSphere_ReturnsPointAlongNormalizedDirection()\n    {\n        var sphere = SupportPrimitives.CreateSphere((Real)2.0);\n\n        sphere.SupportMap(new JVector((Real)3.0, (Real)0.0, (Real)0.0), out JVector result);\n\n        Assert.That(result, Is.EqualTo(new JVector((Real)2.0, (Real)0.0, (Real)0.0)));\n    }\n\n    [Test]\n    public void SupportBox_ReturnsCornerMatchingDirectionSigns()\n    {\n        var box = SupportPrimitives.CreateBox(new JVector((Real)1.0, (Real)2.0, (Real)3.0));\n\n        box.SupportMap(new JVector(-(Real)4.0, (Real)5.0, -(Real)6.0), out JVector result);\n\n        Assert.That(result, Is.EqualTo(new JVector(-(Real)1.0, (Real)2.0, -(Real)3.0)));\n    }\n\n    [Test]\n    public void SupportCapsule_ReturnsSegmentEndpointPlusSphereOffset()\n    {\n        var capsule = SupportPrimitives.CreateCapsule((Real)0.5, (Real)2.0);\n\n        capsule.SupportMap(new JVector((Real)0.0, (Real)3.0, (Real)0.0), out JVector result);\n\n        Assert.That(result, Is.EqualTo(new JVector((Real)0.0, (Real)2.5, (Real)0.0)));\n    }\n\n    [Test]\n    public void SupportCylinder_ReturnsCapPointOnRim()\n    {\n        var cylinder = SupportPrimitives.CreateCylinder((Real)2.0, (Real)3.0);\n\n        cylinder.SupportMap(new JVector((Real)4.0, (Real)1.0, (Real)0.0), out JVector result);\n\n        Assert.That(result, Is.EqualTo(new JVector((Real)2.0, (Real)3.0, (Real)0.0)));\n    }\n\n    [Test]\n    public void SupportCone_ReturnsTipWhenLookingUp()\n    {\n        var cone = SupportPrimitives.CreateCone((Real)2.0, (Real)4.0);\n\n        cone.SupportMap(new JVector((Real)0.0, (Real)3.0, (Real)0.0), out JVector result);\n\n        Assert.That(result, Is.EqualTo(new JVector((Real)0.0, (Real)3.0, (Real)0.0)));\n    }\n\n    [Test]\n    public void SupportPrimitives_HaveCenterAtOrigin()\n    {\n        ISupportMappable[] supports =\n        [\n            SupportPrimitives.CreatePoint(),\n            SupportPrimitives.CreateSphere((Real)1.0),\n            SupportPrimitives.CreateBox(new JVector((Real)1.0, (Real)1.0, (Real)1.0)),\n            SupportPrimitives.CreateCapsule((Real)0.5, (Real)1.0),\n            SupportPrimitives.CreateCylinder((Real)1.0, (Real)1.0),\n            SupportPrimitives.CreateCone((Real)1.0, (Real)2.0)\n        ];\n\n        foreach (var support in supports)\n        {\n            support.GetCenter(out JVector center);\n            Assert.That(center, Is.EqualTo(JVector.Zero));\n        }\n    }\n    \n    [Test]\n    public void VertexSupportMap_ScalarAndAcceleratedAgreeOnTiedMaximum()\n    {\n        VertexSupportMap map =\n            new([\n                new JVector((Real)1.0, (Real)0.0, (Real)0.0),\n                new JVector((Real)1.0, (Real)1.0, (Real)0.0),\n                new JVector((Real)2.0, (Real)0.0, (Real)0.0),\n                new JVector((Real)2.0, (Real)1.0, (Real)0.0)\n            ]);\n\n        JVector direction = JVector.UnitX;\n\n        map.SupportMapScalarForTests(direction, out JVector scalar);\n        map.SupportMapAcceleratedForTests(direction, out JVector accelerated);\n\n        Assert.That(accelerated, Is.EqualTo(scalar));\n        Assert.That(accelerated, Is.EqualTo(new JVector((Real)2.0, (Real)1.0, (Real)0.0)));\n    }\n}\n"
  },
  {
    "path": "src/JitterTests/Api/UnsafeConversion.cs",
    "content": "using System.Runtime.InteropServices;\n\nnamespace JitterTests.Api;\n\n[TestFixture]\npublic sealed class UnsafeConversion\n{\n    // Layout-compatible targets (float build)\n    [StructLayout(LayoutKind.Sequential)]\n    private struct Vec3R { public Real X, Y, Z; }\n\n    [StructLayout(LayoutKind.Sequential)]\n    private struct QuatR { public Real X, Y, Z, W; }\n\n    [Test]\n    public void JVector_UnsafeAs_And_UnsafeFrom_Roundtrip()\n    {\n        var v = new JVector(1, -2, 3);\n\n        Vec3R asVec = v.UnsafeAs<Vec3R>();\n        Assert.That(asVec.X, Is.EqualTo(1));\n        Assert.That(asVec.Y, Is.EqualTo(-2));\n        Assert.That(asVec.Z, Is.EqualTo(3));\n\n        JVector back = JVector.UnsafeFrom(in asVec);\n        Assert.That((float)back.X, Is.EqualTo(1));\n        Assert.That((float)back.Y, Is.EqualTo(-2));\n        Assert.That((float)back.Z, Is.EqualTo(3));\n    }\n\n    [Test]\n    public void JQuaternion_UnsafeAs_And_UnsafeFrom_Preserves_XYZW_Order()\n    {\n        var q = new JQuaternion(1, 2, 3, 4);\n\n        QuatR asQuat = q.UnsafeAs<QuatR>();\n        Assert.That(asQuat.X, Is.EqualTo(1));\n        Assert.That(asQuat.Y, Is.EqualTo(2));\n        Assert.That(asQuat.Z, Is.EqualTo(3));\n        Assert.That(asQuat.W, Is.EqualTo(4));\n\n        JQuaternion back = JQuaternion.UnsafeFrom(in asQuat);\n        Assert.That((float)back.X, Is.EqualTo(1));\n        Assert.That((float)back.Y, Is.EqualTo(2));\n        Assert.That((float)back.Z, Is.EqualTo(3));\n        Assert.That((float)back.W, Is.EqualTo(4));\n    }\n\n    // --- Guard rails ----------------------------------------------------------\n\n    [Test]\n    public void JVector_UnsafeAs_SizeMismatch_Throws()\n    {\n        var v = new JVector(1, 2, 3);\n        Assert.Throws<InvalidOperationException>(() => _ = v.UnsafeAs<QuatR>());\n    }\n\n    [Test]\n    public void JVector_UnsafeFrom_SizeMismatch_Throws()\n    {\n        var bad = new QuatR { X = 1, Y = 2, Z = 3, W = 123 };\n        Assert.Throws<InvalidOperationException>(() => _ = JVector.UnsafeFrom(in bad));\n    }\n}\n"
  },
  {
    "path": "src/JitterTests/Api/WorldTests.cs",
    "content": "namespace JitterTests.Api;\n\n/// <summary>\n/// Tests for World properties and lifecycle management.\n/// </summary>\npublic class WorldTests\n{\n    // -------------------------------------------------------------------------\n    // Default properties\n    // -------------------------------------------------------------------------\n\n    [TestCase]\n    public void DefaultGravity_IsNegativeY()\n    {\n        var world = new World();\n        Assert.That(world.Gravity.Y, Is.LessThan(0));\n        Assert.That(world.Gravity.X, Is.EqualTo(0));\n        Assert.That(world.Gravity.Z, Is.EqualTo(0));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void DefaultAllowDeactivation_IsTrue()\n    {\n        var world = new World();\n        Assert.That(world.AllowDeactivation, Is.True);\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void DefaultRigidBodies_ContainsOnlyNullBody()\n    {\n        var world = new World();\n        // NullBody is always present\n        Assert.That(world.RigidBodies, Has.Count.EqualTo(1));\n        Assert.That(world.RigidBodies, Does.Contain(world.NullBody));\n        world.Dispose();\n    }\n\n    // -------------------------------------------------------------------------\n    // Property setters\n    // -------------------------------------------------------------------------\n\n    [TestCase]\n    public void Gravity_RoundTrip()\n    {\n        var world = new World();\n        var expected = new JVector(0, -20, 0);\n        world.Gravity = expected;\n        Assert.That(world.Gravity, Is.EqualTo(expected));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void Gravity_SetToZero()\n    {\n        var world = new World();\n        world.Gravity = JVector.Zero;\n        Assert.That(world.Gravity, Is.EqualTo(JVector.Zero));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void AllowDeactivation_RoundTrip()\n    {\n        var world = new World();\n        world.AllowDeactivation = false;\n        Assert.That(world.AllowDeactivation, Is.False);\n        world.AllowDeactivation = true;\n        Assert.That(world.AllowDeactivation, Is.True);\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void SubstepCount_RoundTrip()\n    {\n        var world = new World();\n        world.SubstepCount = 4;\n        Assert.That(world.SubstepCount, Is.EqualTo(4));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void SolverIterations_RoundTrip()\n    {\n        var world = new World();\n        world.SolverIterations = (10, 4);\n        Assert.That(world.SolverIterations.solver, Is.EqualTo(10));\n        Assert.That(world.SolverIterations.relaxation, Is.EqualTo(4));\n        world.Dispose();\n    }\n\n    // -------------------------------------------------------------------------\n    // Body management\n    // -------------------------------------------------------------------------\n\n    [TestCase]\n    public void CreateRigidBody_IncrementsBodyCount()\n    {\n        var world = new World();\n        var countBefore = world.RigidBodies.Count;\n        world.CreateRigidBody();\n        Assert.That(world.RigidBodies.Count, Is.EqualTo(countBefore + 1));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void Remove_DecrementsBodyCount()\n    {\n        var world = new World();\n        var body = world.CreateRigidBody();\n        var countAfterCreate = world.RigidBodies.Count;\n        world.Remove(body);\n        Assert.That(world.RigidBodies.Count, Is.EqualTo(countAfterCreate - 1));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void Clear_RemovesAllBodiesExceptNullBody()\n    {\n        var world = new World();\n        for (int i = 0; i < 10; i++)\n            world.CreateRigidBody();\n        world.Clear();\n        Assert.That(world.RigidBodies, Has.Count.EqualTo(1));\n        Assert.That(world.RigidBodies, Does.Contain(world.NullBody));\n        world.Dispose();\n    }\n\n    // -------------------------------------------------------------------------\n    // Step\n    // -------------------------------------------------------------------------\n\n    [TestCase]\n    public void Step_NegativeDt_Throws()\n    {\n        var world = new World();\n        Assert.Throws<ArgumentException>(() => world.Step(-1f / 60f, false));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void Step_ZeroDt_DoesNotThrow()\n    {\n        var world = new World();\n        Assert.DoesNotThrow(() => world.Step(0f, false));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void Step_WithNoBody_DoesNotThrow()\n    {\n        var world = new World();\n        Assert.DoesNotThrow(() => world.Step(1f / 60f, false));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void Stabilize_NegativeDt_Throws()\n    {\n        var world = new World();\n        Assert.Throws<ArgumentException>(() => world.Stabilize(-1f / 60f, 1, 0, false));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void Stabilize_ZeroDt_DoesNotThrow()\n    {\n        var world = new World();\n        Assert.DoesNotThrow(() => world.Stabilize(0f, 1, 0, false));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void Stabilize_SolverIterationsBelowOne_Throws()\n    {\n        var world = new World();\n        Assert.Throws<ArgumentException>(() => world.Stabilize(1f / 60f, 0, 0, false));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void Stabilize_RelaxationIterationsBelowZero_Throws()\n    {\n        var world = new World();\n        Assert.Throws<ArgumentException>(() => world.Stabilize(1f / 60f, 1, -1, false));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void Stabilize_WithConstraintError_SolvesWithoutChangingPositions()\n    {\n        var world = new World();\n        world.AllowDeactivation = false;\n        world.Gravity = JVector.Zero;\n\n        var bodyA = world.CreateRigidBody();\n        bodyA.AddShape(new SphereShape(1));\n\n        var bodyB = world.CreateRigidBody();\n        bodyB.AddShape(new SphereShape(1));\n\n        var socket = world.CreateConstraint<BallSocket>(bodyA, bodyB);\n        socket.Initialize(JVector.Zero);\n\n        bodyB.Position = new JVector(1, 0, 0);\n        bodyA.Velocity = JVector.Zero;\n        bodyB.Velocity = JVector.Zero;\n        bodyA.AngularVelocity = JVector.Zero;\n        bodyB.AngularVelocity = JVector.Zero;\n\n        JVector positionA = bodyA.Position;\n        JVector positionB = bodyB.Position;\n\n        world.Stabilize(1f / 60f, 4, 2, false);\n\n        Assert.That(bodyA.Position.X, Is.EqualTo(positionA.X).Within(1e-6f));\n        Assert.That(bodyA.Position.Y, Is.EqualTo(positionA.Y).Within(1e-6f));\n        Assert.That(bodyA.Position.Z, Is.EqualTo(positionA.Z).Within(1e-6f));\n\n        Assert.That(bodyB.Position.X, Is.EqualTo(positionB.X).Within(1e-6f));\n        Assert.That(bodyB.Position.Y, Is.EqualTo(positionB.Y).Within(1e-6f));\n        Assert.That(bodyB.Position.Z, Is.EqualTo(positionB.Z).Within(1e-6f));\n        Assert.That(bodyA.Velocity.LengthSquared() + bodyB.Velocity.LengthSquared(), Is.GreaterThan((Real)0.0));\n        Assert.That(socket.Impulse.LengthSquared(), Is.GreaterThan((Real)0.0));\n\n        world.Dispose();\n    }\n\n    // -------------------------------------------------------------------------\n    // Events\n    // -------------------------------------------------------------------------\n\n    [TestCase]\n    public void PreStep_IsFiredOnStep()\n    {\n        var world = new World();\n        bool fired = false;\n        world.PreStep += _ => fired = true;\n        world.Step(1f / 60f, false);\n        Assert.That(fired, Is.True);\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void PostStep_IsFiredOnStep()\n    {\n        var world = new World();\n        bool fired = false;\n        world.PostStep += _ => fired = true;\n        world.Step(1f / 60f, false);\n        Assert.That(fired, Is.True);\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void PreStep_ReceivesCorrectDt()\n    {\n        var world = new World();\n        Real receivedDt = 0;\n        world.PreStep += dt => receivedDt = dt;\n        const Real expectedDt = 1f / 60f;\n        world.Step(expectedDt, false);\n        Assert.That(receivedDt, Is.EqualTo(expectedDt).Within(1e-6f));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void Stabilize_DoesNotFireStepEvents()\n    {\n        var world = new World();\n        bool preFired = false;\n        bool postFired = false;\n\n        world.PreStep += _ => preFired = true;\n        world.PostStep += _ => postFired = true;\n\n        world.Stabilize(1f / 60f, 1, 0, false);\n\n        Assert.That(preFired, Is.False);\n        Assert.That(postFired, Is.False);\n        world.Dispose();\n    }\n\n    // -------------------------------------------------------------------------\n    // Gravity effect on bodies\n    // -------------------------------------------------------------------------\n\n    [TestCase]\n    public void Gravity_AffectsFallingBody()\n    {\n        var world = new World();\n        world.AllowDeactivation = false;\n        var body = world.CreateRigidBody();\n        body.AddShape(new SphereShape(1));\n        var startY = body.Position.Y;\n        Helper.AdvanceWorld(world, 1, 1f / 100f, false);\n        Assert.That(body.Position.Y, Is.LessThan(startY));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void Gravity_Zero_BodyDoesNotFall()\n    {\n        var world = new World();\n        world.AllowDeactivation = false;\n        world.Gravity = JVector.Zero;\n        var body = world.CreateRigidBody();\n        body.AddShape(new SphereShape(1));\n        var startY = body.Position.Y;\n        Helper.AdvanceWorld(world, 1, 1f / 100f, false);\n        Assert.That(body.Position.Y, Is.EqualTo(startY).Within(1e-4f));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void AffectedByGravity_False_BodyDoesNotFall()\n    {\n        // Gravity is on, but the specific body opts out.\n        var world = new World();\n        world.AllowDeactivation = false;\n        var body = world.CreateRigidBody();\n        body.AddShape(new SphereShape(1));\n        body.AffectedByGravity = false;\n        var startY = body.Position.Y;\n        Helper.AdvanceWorld(world, 1, 1f / 100f, false);\n        Assert.That(body.Position.Y, Is.EqualTo(startY).Within(1e-4f));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void AffectedByGravity_OnlyAffectsOptedOutBody()\n    {\n        // One body opts out; a second body far away still falls.\n        var world = new World();\n        world.AllowDeactivation = false;\n        var floating = world.CreateRigidBody();\n        floating.AddShape(new SphereShape(1));\n        floating.AffectedByGravity = false;\n        floating.Position = new JVector(0, 0, 0);\n        var falling = world.CreateRigidBody();\n        falling.AddShape(new SphereShape(1));\n        falling.Position = new JVector(100, 0, 0);  // far away, no interaction\n        var startY = floating.Position.Y;\n        Helper.AdvanceWorld(world, 1, 1f / 100f, false);\n        Assert.That(floating.Position.Y, Is.EqualTo(startY).Within(1e-4f));\n        Assert.That(falling.Position.Y, Is.LessThan(startY));\n        world.Dispose();\n    }\n}\n"
  },
  {
    "path": "src/JitterTests/Behavior/AddRemoveTests.cs",
    "content": "using Jitter2.Dynamics.Constraints;\n\nnamespace JitterTests.Behavior;\n\npublic class AddRemoveTests\n{\n    private World world = null!;\n\n    [SetUp]\n    public void Setup()\n    {\n        world = new World();\n    }\n\n    [TearDown]\n    public void TearDown()\n    {\n        world.Dispose();\n    }\n\n    private class FilterOut(IDynamicTreeProxy shape) : IBroadPhaseFilter\n    {\n        public bool Filter(IDynamicTreeProxy shapeA, IDynamicTreeProxy shapeB)\n        {\n            return shapeA != shape && shapeB != shape;\n        }\n    }\n\n    [TestCase]\n    public void RemoveStaticShape1()\n    {\n        Shape staticShape = new BoxShape(1000);\n        world.DynamicTree.AddProxy(staticShape);\n\n        var body = world.CreateRigidBody();\n        body.AddShape(new SphereShape());\n\n        world.BroadPhaseFilter = new FilterOut(staticShape);\n\n        world.Step((Real)0.01);\n        Assert.That(world.DynamicTree.HashSetInfo.Count == 1);\n\n        world.Clear();\n        Assert.That(world.DynamicTree.HashSetInfo.Count == 0);\n    }\n\n    [TestCase]\n    public void RemoveStaticShape0()\n    {\n        var staticShape = new BoxShape(1000);\n        world.DynamicTree.AddProxy(staticShape);\n\n        var body = world.CreateRigidBody();\n        body.AddShape(new SphereShape());\n\n        world.BroadPhaseFilter = new FilterOut(staticShape);\n\n        world.Step((Real)0.01);\n        Assert.That(world.DynamicTree.HashSetInfo.Count == 1);\n\n        world.Remove(body);\n        Assert.That(world.DynamicTree.HashSetInfo.Count == 0);\n    }\n\n    [TestCase]\n    public void AddRemoveBodies()\n    {\n        void TinyStep() => world.Step((Real)1e-12);\n\n        var bA = world.CreateRigidBody();\n        bA.AddShape(new SphereShape());\n        var bB = world.CreateRigidBody();\n        bB.AddShape(new SphereShape());\n        Assert.That(world.DynamicTree.HashSetInfo.Count == 1);\n        var bC = world.CreateRigidBody();\n        bC.AddShape(new SphereShape());\n        Assert.That(world.DynamicTree.HashSetInfo.Count == 3);\n        var bD = world.CreateRigidBody();\n        bD.AddShape(new SphereShape());\n        bD.AddShape(new SphereShape());\n        Assert.That(world.DynamicTree.HashSetInfo.Count == 9);\n        TinyStep();\n        Assert.That(world.DynamicTree.HashSetInfo.Count == 9);\n        world.Remove(bB);\n        Assert.That(world.DynamicTree.HashSetInfo.Count == 5);\n        TinyStep();\n        bD.RemoveShape(bD.Shapes[0]);\n        Assert.That(world.DynamicTree.HashSetInfo.Count == 3);\n        TinyStep();\n        world.Remove(bD);\n        Assert.That(world.DynamicTree.HashSetInfo.Count == 1);\n        TinyStep();\n        var nullShape = new SphereShape();\n        world.NullBody.AddShape(nullShape);\n        TinyStep();\n        Assert.That(world.DynamicTree.HashSetInfo.Count == 3);\n        TinyStep();\n        // NullBody cannot be removed; remove the shape directly instead\n        world.NullBody.RemoveShape(nullShape);\n        Assert.That(world.DynamicTree.HashSetInfo.Count == 1);\n        TinyStep();\n    }\n\n    [TestCase]\n    public void RemoveBodyFromWrongWorld()\n    {\n        using World other = new World();\n        var body = other.CreateRigidBody();\n\n        Assert.Throws<ArgumentException>(() => world.Remove(body));\n    }\n\n    [TestCase]\n    public void RemoveConstraintFromWrongWorld()\n    {\n        using World other = new World();\n        var b1 = other.CreateRigidBody();\n        var b2 = other.CreateRigidBody();\n        var constraint = other.CreateConstraint<BallSocket>(b1, b2);\n\n        Assert.Throws<ArgumentException>(() => world.Remove(constraint));\n    }\n\n    [TestCase]\n    public void CreateConstraintWithForeignBody()\n    {\n        using World other = new World();\n        var local = world.CreateRigidBody();\n        var foreign = other.CreateRigidBody();\n\n        Assert.Throws<ArgumentException>(() => world.CreateConstraint<BallSocket>(foreign, local));\n        Assert.Throws<ArgumentException>(() => world.CreateConstraint<BallSocket>(local, foreign));\n    }\n}\n"
  },
  {
    "path": "src/JitterTests/Behavior/BroadPhaseUpdateTests.cs",
    "content": "using Jitter2.Collision;\n\nnamespace JitterTests.Behavior;\n\npublic class BroadPhaseUpdateTests\n{\n    [TestCase]\n    public void MovingBody_UpdatesDynamicTreeQueryImmediately()\n    {\n        var world = new World();\n        var body = world.CreateRigidBody();\n        var shape = new SphereShape(1);\n        body.AddShape(shape);\n\n        List<IDynamicTreeProxy> hits = [];\n        world.DynamicTree.Query(hits, new JBoundingBox(new JVector(-2, -2, -2), new JVector(2, 2, 2)));\n        Assert.That(hits, Does.Contain(shape));\n\n        body.Position = new JVector(10, 0, 0);\n\n        hits.Clear();\n        world.DynamicTree.Query(hits, new JBoundingBox(new JVector(-2, -2, -2), new JVector(2, 2, 2)));\n        Assert.That(hits, Does.Not.Contain(shape));\n\n        hits.Clear();\n        world.DynamicTree.Query(hits, new JBoundingBox(new JVector(8, -2, -2), new JVector(12, 2, 2)));\n        Assert.That(hits, Does.Contain(shape));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void RotatingBody_UpdatesShapeWorldBoundingBox()\n    {\n        var world = new World();\n        var body = world.CreateRigidBody();\n        var shape = new BoxShape(4, 2, 2);\n        body.AddShape(shape);\n\n        var before = shape.WorldBoundingBox;\n        var widthXBefore = before.Max.X - before.Min.X;\n        var widthYBefore = before.Max.Y - before.Min.Y;\n\n        body.Orientation = JQuaternion.CreateRotationZ(MathR.PI / (Real)2.0);\n\n        var after = shape.WorldBoundingBox;\n        var widthXAfter = after.Max.X - after.Min.X;\n        var widthYAfter = after.Max.Y - after.Min.Y;\n\n        Assert.That(widthXBefore, Is.GreaterThan(widthYBefore));\n        Assert.That(widthYAfter, Is.GreaterThan(widthXAfter));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void MovingSleepingBody_ActivatesProxyOnNextStep()\n    {\n        var world = new World();\n        world.Gravity = JVector.Zero;\n        var body = world.CreateRigidBody();\n        var shape = new SphereShape(1);\n        body.AddShape(shape);\n        body.DeactivationTime = TimeSpan.FromSeconds(1);\n\n        Helper.AdvanceWorld(world, 2, 1f / 100f, false);\n        Assert.That(body.IsActive, Is.False);\n        Assert.That(world.DynamicTree.IsActive(shape), Is.False);\n\n        body.Position = new JVector(5, 0, 0);\n\n        Assert.That(world.DynamicTree.IsActive(shape), Is.False);\n\n        world.Step(1f / 100f, false);\n\n        Assert.That(body.IsActive, Is.True);\n        Assert.That(world.DynamicTree.IsActive(shape), Is.True);\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void DynamicTreeSweepCast_ReturnsClosestBroadPhaseHit()\n    {\n        var world = new World();\n\n        var nearBody = world.CreateRigidBody();\n        var nearShape = new SphereShape(1);\n        nearBody.AddShape(nearShape);\n        nearBody.Position = new JVector(5, 0, 0);\n\n        var farBody = world.CreateRigidBody();\n        var farShape = new SphereShape(1);\n        farBody.AddShape(farShape);\n        farBody.Position = new JVector(9, 0, 0);\n\n        var query = SupportPrimitives.CreateSphere((Real)1.0);\n        bool hit = world.DynamicTree.SweepCast(query,\n            JQuaternion.Identity, JVector.Zero, new JVector(10, 0, 0),\n            null, null,\n            out IDynamicTreeProxy? proxy, out _, out _, out _, out Real lambda);\n\n        Assert.That(hit, Is.True);\n        Assert.That(proxy, Is.EqualTo(nearShape));\n        Assert.That(lambda, Is.EqualTo((Real)0.3).Within((Real)1e-6));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void DynamicTreeSweepCast_DefaultOverloadIsUnbounded()\n    {\n        var world = new World();\n\n        var body = world.CreateRigidBody();\n        var shape = new SphereShape(1);\n        body.AddShape(shape);\n        body.Position = new JVector(5, 0, 0);\n\n        var query = SupportPrimitives.CreateSphere((Real)1.0);\n        bool hit = world.DynamicTree.SweepCast(query,\n            JQuaternion.Identity, JVector.Zero, new JVector(1, 0, 0),\n            null, null,\n            out IDynamicTreeProxy? proxy, out _, out _, out _, out Real lambda);\n\n        Assert.That(hit, Is.True);\n        Assert.That(proxy, Is.EqualTo(shape));\n        Assert.That(lambda, Is.EqualTo((Real)3.0).Within((Real)1e-6));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void DynamicTreeSweepCast_PostFilterCanCaptureCandidatesWithinMaxLambda()\n    {\n        var world = new World();\n\n        var nearBody = world.CreateRigidBody();\n        var nearShape = new SphereShape(1);\n        nearBody.AddShape(nearShape);\n        nearBody.Position = new JVector(5, 0, 0);\n\n        var farBody = world.CreateRigidBody();\n        var farShape = new SphereShape(1);\n        farBody.AddShape(farShape);\n        farBody.Position = new JVector(9, 0, 0);\n\n        var query = SupportPrimitives.CreateSphere((Real)1.0);\n        List<DynamicTree.SweepCastResult> hits = [];\n\n        bool hit = world.DynamicTree.SweepCast(query,\n            JQuaternion.Identity, JVector.Zero, new JVector(10, 0, 0),\n            (Real)0.5,\n            null,\n            result =>\n            {\n                hits.Add(result);\n                return false;\n            },\n            out _, out _, out _, out _, out _);\n\n        Assert.That(hit, Is.False);\n        Assert.That(hits, Has.Count.EqualTo(1));\n        Assert.That(hits[0].Entity, Is.EqualTo(nearShape));\n        Assert.That(hits[0].Lambda, Is.EqualTo((Real)0.3).Within((Real)1e-6));\n        world.Dispose();\n    }\n}\n"
  },
  {
    "path": "src/JitterTests/Behavior/CollisionFilterTests.cs",
    "content": "using Jitter2.Collision;\n\nnamespace JitterTests.Behavior;\n\npublic class CollisionFilterTests\n{\n    private sealed class RejectAllBroadPhaseFilter : IBroadPhaseFilter\n    {\n        public int Calls { get; private set; }\n\n        public bool Filter(IDynamicTreeProxy proxyA, IDynamicTreeProxy proxyB)\n        {\n            Calls++;\n            return false;\n        }\n    }\n\n    private sealed class RejectAllNarrowPhaseFilter : INarrowPhaseFilter\n    {\n        public int Calls { get; private set; }\n\n        public bool Filter(RigidBodyShape shapeA, RigidBodyShape shapeB,\n            ref JVector pointA, ref JVector pointB, ref JVector normal, ref Real penetration)\n        {\n            Calls++;\n            return false;\n        }\n    }\n\n    [TestCase]\n    public void BroadPhaseFilter_CanSuppressContactCreation()\n    {\n        var world = new World\n        {\n            Gravity = JVector.Zero\n        };\n\n        var filter = new RejectAllBroadPhaseFilter();\n        world.BroadPhaseFilter = filter;\n\n        var bodyA = world.CreateRigidBody();\n        bodyA.AddShape(new SphereShape(1));\n\n        var bodyB = world.CreateRigidBody();\n        bodyB.AddShape(new SphereShape(1));\n        bodyB.Position = new JVector(1.5f, 0, 0);\n\n        world.Step(1f / 60f, false);\n\n        Assert.That(filter.Calls, Is.GreaterThan(0));\n        Assert.That(bodyA.Contacts, Is.Empty);\n        Assert.That(bodyB.Contacts, Is.Empty);\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void NarrowPhaseFilter_CanSuppressContactCreation()\n    {\n        var world = new World\n        {\n            Gravity = JVector.Zero\n        };\n\n        var filter = new RejectAllNarrowPhaseFilter();\n        world.NarrowPhaseFilter = filter;\n\n        var bodyA = world.CreateRigidBody();\n        bodyA.AddShape(new SphereShape(1));\n\n        var bodyB = world.CreateRigidBody();\n        bodyB.AddShape(new SphereShape(1));\n        bodyB.Position = new JVector(1.5f, 0, 0);\n\n        world.Step(1f / 60f, false);\n\n        Assert.That(filter.Calls, Is.GreaterThan(0));\n        Assert.That(bodyA.Contacts, Is.Empty);\n        Assert.That(bodyB.Contacts, Is.Empty);\n        world.Dispose();\n    }\n}\n"
  },
  {
    "path": "src/JitterTests/Behavior/CollisionTests.cs",
    "content": "using JVector = Jitter2.LinearMath.JVector;\n\nnamespace JitterTests.Behavior;\n\npublic class CollisionTests\n{\n    [TestCase]\n    public void NoBodyWorldBoundingBox()\n    {\n        const Real boxSize = (Real)10.0;\n        BoxShape shape = new BoxShape(boxSize);\n        Assert.That(MathHelper.CloseToZero(shape.WorldBoundingBox.Max - shape.Size * (Real)0.5));\n        Assert.That(MathHelper.CloseToZero(shape.WorldBoundingBox.Min + shape.Size * (Real)0.5));\n    }\n\n    [TestCase]\n    public void OverlapDistanceTest()\n    {\n        BoxShape bs = new BoxShape(1);\n        SphereShape ss = new SphereShape(1);\n\n        var overlap = NarrowPhase.Overlap(bs, ss,\n            JQuaternion.CreateRotationX((Real)0.2), JVector.UnitY * (Real)3.0);\n\n        var separated = NarrowPhase.Distance(bs, ss,\n            JQuaternion.CreateRotationX((Real)0.2), JVector.UnitY * (Real)3.0,\n            out JVector pA, out JVector pB, out JVector normal, out Real dist);\n\n        Assert.That(!overlap);\n        Assert.That(separated, Is.True);\n\n        Assert.That(MathR.Abs(dist - (Real)1.5) < (Real)1e-4);\n        Assert.That(MathHelper.CloseToZero(pA - new JVector(0, (Real)0.5, 0), (Real)1e-4));\n        Assert.That(MathHelper.CloseToZero(pB - new JVector(0, (Real)2.0, 0), (Real)1e-4));\n\n        overlap = NarrowPhase.Overlap(bs, ss,\n            JQuaternion.CreateRotationX((Real)0.2), JVector.UnitY * (Real)0.5);\n\n        separated = NarrowPhase.Distance(bs, ss,\n            JQuaternion.CreateRotationX((Real)0.2), JVector.UnitY * (Real)0.5,\n            out pA, out pB, out normal, out dist);\n\n        Assert.That(overlap);\n        Assert.That(separated, Is.False);\n\n        JVector delta = new JVector(10, 13, -22);\n\n        overlap = NarrowPhase.Overlap(ss, ss,\n            JQuaternion.CreateRotationX((Real)0.2), delta);\n\n        separated = NarrowPhase.Distance(ss, ss,\n            JQuaternion.CreateRotationX((Real)0.2), delta,\n            out pA, out pB, out normal, out dist);\n\n        Assert.That(!overlap);\n        Assert.That(separated, Is.True);\n\n        Assert.That(MathR.Abs(dist - delta.Length() + 2) < (Real)1e-4);\n        Assert.That(MathHelper.CloseToZero(pA - JVector.Normalize(delta), (Real)1e-4));\n        Assert.That(MathHelper.CloseToZero(pB - delta + JVector.Normalize(delta), (Real)1e-4));\n    }\n\n    [TestCase]\n    public void SphereRayCast()\n    {\n        SphereShape ss = new SphereShape((Real)1.2);\n\n        const Real epsilon = (Real)1e-12;\n\n        bool hit = ss.LocalRayCast(new JVector(0, (Real)1.2 + (Real)0.25, 0), -JVector.UnitY, out JVector normal, out Real lambda);\n        Assert.That(hit);\n        Assert.That(MathR.Abs(lambda - (Real)0.25), Is.LessThan(epsilon));\n        Assert.That(MathHelper.CloseToZero(normal - JVector.UnitY));\n\n        hit = ss.LocalRayCast(new JVector(0, (Real)1.2 + (Real)0.25, 0), -(Real)2.0 * JVector.UnitY, out normal, out lambda);\n        Assert.That(hit);\n        Assert.That(MathR.Abs(lambda - (Real)0.125), Is.LessThan(epsilon));\n        Assert.That(MathHelper.CloseToZero(normal - JVector.UnitY));\n\n        hit = ss.LocalRayCast(new JVector(0, (Real)1.2 - (Real)0.25, 0), -JVector.UnitY, out normal, out lambda);\n        Assert.That(hit);\n        Assert.That(MathR.Abs(lambda), Is.LessThan(epsilon));\n        Assert.That(MathHelper.CloseToZero(normal));\n\n        hit = ss.LocalRayCast(new JVector(0, -(Real)1.2 - (Real)0.25, 0), -JVector.UnitY * (Real)1.1, out normal, out lambda);\n        Assert.That(!hit);\n        Assert.That(MathR.Abs(lambda), Is.LessThan(epsilon));\n        Assert.That(MathHelper.CloseToZero(normal));\n    }\n\n    [TestCase]\n    public void BoxRayCast()\n    {\n        BoxShape bs = new BoxShape((Real)1.2 * (Real)2.0);\n\n        const Real epsilon = (Real)1e-12;\n\n        bool hit = bs.LocalRayCast(new JVector(0, (Real)1.2 + (Real)0.25, 0), -JVector.UnitY, out JVector normal, out Real lambda);\n        Assert.That(hit);\n        Assert.That(MathR.Abs(lambda - (Real)0.25), Is.LessThan(epsilon));\n        Assert.That(MathHelper.CloseToZero(normal - JVector.UnitY));\n\n        hit = bs.LocalRayCast(new JVector(0, (Real)1.2 + (Real)0.25, 0), -(Real)2.0 * JVector.UnitY, out normal, out lambda);\n        Assert.That(hit);\n        Assert.That(MathR.Abs(lambda - (Real)0.125), Is.LessThan(epsilon));\n        Assert.That(MathHelper.CloseToZero(normal - JVector.UnitY));\n\n        hit = bs.LocalRayCast(new JVector(0, (Real)1.2 - (Real)0.25, 0), -JVector.UnitY, out normal, out lambda);\n        Assert.That(hit);\n        Assert.That(MathR.Abs(lambda), Is.LessThan(epsilon));\n        Assert.That(MathHelper.CloseToZero(normal));\n\n        hit = bs.LocalRayCast(new JVector(0, -(Real)1.2 - (Real)0.25, 0), -JVector.UnitY * (Real)1.1, out normal, out lambda);\n        Assert.That(!hit);\n        Assert.That(MathR.Abs(lambda), Is.LessThan(epsilon));\n        Assert.That(MathHelper.CloseToZero(normal));\n    }\n\n    [TestCase]\n    public void RayCast()\n    {\n        const Real radius = 4;\n\n        JVector sp = new JVector(10, 11, 12);\n        JVector op = new JVector(1, 2, 3);\n\n        SphereShape s1 = new(radius);\n\n        bool hit = NarrowPhase.RayCast(s1, JQuaternion.CreateRotationX((Real)0.32), sp,\n            op, sp - op, out Real lambda, out JVector normal);\n\n        JVector cn = JVector.Normalize(op - sp); // analytical normal\n        JVector hp = op + (sp - op) * lambda; // hit point\n\n        Assert.That(hit, Is.True);\n        Assert.That(MathHelper.CloseToZero(normal - cn, (Real)1e-6));\n\n        Real distance = (hp - sp).Length();\n        Assert.That(MathR.Abs(distance - radius), Is.LessThan((Real)1e-4));\n    }\n\n    [TestCase]\n    public void SweepTest()\n    {\n        var s1 = new SphereShape((Real)0.5);\n        var s2 = new BoxShape(1);\n\n        var rot = JQuaternion.CreateRotationZ(MathR.PI / (Real)4.0);\n        var sweep = JVector.Normalize(new JVector(1, 1, 0));\n\n        bool hit = NarrowPhase.Sweep(s1, s2, rot, rot,\n            new JVector(1, 1, 3), new JVector(11, 11, 3),\n            sweep, -(Real)2.0 * sweep,\n            out JVector pA, out JVector pB, out JVector normal, out Real lambda);\n\n        Assert.That(hit, Is.True);\n\n        Real expectedlambda = (MathR.Sqrt((Real)200.0) - (Real)1.0) * ((Real)(1.0 / 3.0));\n        JVector expectedNormal = JVector.Normalize(new JVector(1, 1, 0));\n        JVector expectedPoint = new JVector(1, 1, 3) + expectedNormal * ((Real)0.5 + expectedlambda);\n        JVector expectedPointA = expectedPoint - sweep * lambda;\n        JVector expectedPointB = expectedPoint + (Real)2.0 * sweep * lambda;\n\n        Assert.That((normal - expectedNormal).LengthSquared(), Is.LessThan((Real)1e-4));\n        Assert.That((pA - expectedPointA).LengthSquared(), Is.LessThan((Real)1e-4));\n        Assert.That((pB - expectedPointB).LengthSquared(), Is.LessThan((Real)1e-4));\n        Assert.That(MathR.Abs(lambda - expectedlambda), Is.LessThan((Real)1e-4));\n    }\n\n    [TestCase]\n    public void SweepCastableMatchesNarrowPhaseSweep()\n    {\n        var world = new World();\n        SupportPrimitives.Sphere query = new((Real)0.5);\n        BoxShape target = new BoxShape(1);\n        var body = world.CreateRigidBody();\n        body.AddShape(target);\n\n        var orientation = JQuaternion.CreateRotationZ(MathR.PI / (Real)4.0);\n        var position = new JVector(1, 1, 3);\n        var sweep = JVector.Normalize(new JVector(1, 1, 0));\n        body.Orientation = JQuaternion.CreateRotationZ(MathR.PI / (Real)4.0);\n        body.Position = new JVector(11, 11, 3);\n\n        bool narrowHit = NarrowPhase.Sweep(query, target,\n            orientation, body.Orientation,\n            position, body.Position,\n            sweep, JVector.Zero,\n            out JVector narrowA, out JVector narrowB, out JVector narrowNormal, out Real narrowLambda);\n\n        bool castHit = target.Sweep(query,\n            orientation, position, sweep,\n            out JVector castA, out JVector castB, out JVector castNormal, out Real castLambda);\n\n        Assert.That(castHit, Is.EqualTo(narrowHit));\n        Assert.That((castA - narrowA).LengthSquared(), Is.LessThan((Real)1e-6));\n        Assert.That((castB - narrowB).LengthSquared(), Is.LessThan((Real)1e-6));\n        Assert.That((castNormal - narrowNormal).LengthSquared(), Is.LessThan((Real)1e-6));\n        Assert.That(MathR.Abs(castLambda - narrowLambda), Is.LessThan((Real)1e-6));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void TransformedShapeOverlapDistance()\n    {\n        var box = new BoxShape(1);\n        var rotation = JMatrix.CreateRotationZ(MathR.PI / (Real)4.0);\n        var ts = new TransformedShape(box, new JVector(0, 5, 0), rotation);\n\n        var sphere = new SphereShape(1);\n\n        var overlap = NarrowPhase.Overlap(ts, sphere,\n            JQuaternion.Identity, JVector.Zero);\n        Assert.That(!overlap);\n\n        var separated = NarrowPhase.Distance(ts, sphere,\n            JQuaternion.Identity, JVector.Zero,\n            out JVector pA, out JVector pB, out JVector normal, out Real dist);\n        Assert.That(separated, Is.True);\n        Assert.That(dist, Is.GreaterThan((Real)0.0));\n\n        var tsClose = new TransformedShape(box, new JVector(0, (Real)0.5, 0), rotation);\n\n        overlap = NarrowPhase.Overlap(tsClose, sphere,\n            JQuaternion.Identity, JVector.Zero);\n        Assert.That(overlap);\n    }\n\n    [TestCase]\n    public void TransformedShapeScaledOverlap()\n    {\n        var sphere = new SphereShape((Real)0.5);\n        var ts = new TransformedShape(sphere, JMatrix.CreateScale((Real)3.0, (Real)1.0, (Real)1.0));\n\n        var probe = new SphereShape((Real)0.1);\n\n        var overlap = NarrowPhase.Overlap(ts, probe,\n            JQuaternion.Identity, new JVector((Real)1.2, 0, 0));\n        Assert.That(overlap);\n\n        overlap = NarrowPhase.Overlap(ts, probe,\n            JQuaternion.Identity, new JVector((Real)1.7, 0, 0));\n        Assert.That(!overlap);\n\n        overlap = NarrowPhase.Overlap(ts, probe,\n            JQuaternion.Identity, new JVector(0, (Real)0.7, 0));\n        Assert.That(!overlap);\n    }\n\n    [TestCase]\n    public void NormalDirection()\n    {\n        SphereShape s1 = new((Real)0.5);\n        SphereShape s2 = new((Real)0.5);\n\n        // -----------------------------------------------\n\n        Assert.That(NarrowPhase.MprEpa(s1, s2, JQuaternion.Identity, JQuaternion.Identity, new JVector(-(Real)0.25, 0, 0), new JVector(+(Real)0.25, 0, 0),\n            out JVector pointA, out JVector pointB, out JVector normal, out Real penetration), Is.True);\n\n        // pointA is on s1 and pointB is on s2\n        Assert.That(pointA.X, Is.GreaterThan((Real)0.0));\n        Assert.That(pointB.X, Is.LessThan((Real)0.0));\n\n        // the collision normal points from s2 to s1\n        Assert.That(normal.X, Is.GreaterThan(0));\n\n        // the separation is negative\n        Assert.That(penetration, Is.GreaterThan(0));\n\n        // -----------------------------------------------\n\n        Assert.That(NarrowPhase.Collision(s1, s2, JQuaternion.Identity, JQuaternion.Identity, new JVector(-(Real)0.25, 0, 0), new JVector(+(Real)0.25, 0, 0),\n            out pointA, out pointB, out normal, out penetration), Is.True);\n\n        // pointA is on s1 and pointB is on s2\n        Assert.That(pointA.X, Is.GreaterThan(0));\n        Assert.That(pointB.X, Is.LessThan(0));\n\n        // the collision normal points from s2 to s1\n        Assert.That(normal.X, Is.GreaterThan(0));\n\n        // the separation is negative\n        Assert.That(penetration, Is.GreaterThan(0));\n\n        // -----------------------------------------------\n\n        BoxShape b1 = new(1);\n        BoxShape b2 = new(1);\n\n        Assert.That(NarrowPhase.MprEpa(b1, b2, JQuaternion.Identity, JQuaternion.Identity, new JVector(-(Real)0.25, (Real)0.1, 0), new JVector(+(Real)0.25, -(Real)0.1, 0),\n            out pointA, out pointB, out normal, out penetration), Is.True);\n\n        // pointA is on s1 and pointB is on s2\n        Assert.That(pointA.X, Is.GreaterThan(0));\n        Assert.That(pointB.X, Is.LessThan(0));\n\n        // the collision normal points from s2 to s1\n        Assert.That(normal.X, Is.GreaterThan(0));\n\n        // the penetration is positive\n        Assert.That(penetration, Is.GreaterThan(0));\n\n        // -----------------------------------------------\n\n        Assert.That(NarrowPhase.Collision(b1, b2, JQuaternion.Identity, JQuaternion.Identity, new JVector(-(Real)2.25, 0, 0), new JVector(+(Real)2.25, 0, 0),\n            out pointA, out pointB, out normal, out penetration), Is.True);\n\n        // the collision normal points from s2 to s1\n        Assert.That(normal.X, Is.GreaterThan(0));\n\n        // the penetration is negative\n        Assert.That(penetration, Is.LessThan(0));\n    }\n}\n"
  },
  {
    "path": "src/JitterTests/Behavior/ConstraintLifecycleTests.cs",
    "content": "using Jitter2.Dynamics.Constraints;\n\nnamespace JitterTests.Behavior;\n\npublic class ConstraintLifecycleTests\n{\n    [TestCase]\n    public void CreateConstraint_RegistersOnBothBodies_AndAddsConnection()\n    {\n        var world = new World();\n        var bodyA = world.CreateRigidBody();\n        var bodyB = world.CreateRigidBody();\n\n        var constraint = world.CreateConstraint<BallSocket>(bodyA, bodyB);\n\n        Assert.That(bodyA.Constraints, Does.Contain(constraint));\n        Assert.That(bodyB.Constraints, Does.Contain(constraint));\n        Assert.That(bodyA.Connections, Does.Contain(bodyB));\n        Assert.That(bodyB.Connections, Does.Contain(bodyA));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void RemoveConstraint_UnregistersFromBothBodies_AndRemovesConnection()\n    {\n        var world = new World();\n        var bodyA = world.CreateRigidBody();\n        var bodyB = world.CreateRigidBody();\n\n        var constraint = world.CreateConstraint<BallSocket>(bodyA, bodyB);\n        world.Remove(constraint);\n\n        Assert.That(bodyA.Constraints, Does.Not.Contain(constraint));\n        Assert.That(bodyB.Constraints, Does.Not.Contain(constraint));\n        Assert.That(bodyA.Connections, Does.Not.Contain(bodyB));\n        Assert.That(bodyB.Connections, Does.Not.Contain(bodyA));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void RemoveBody_RemovesAttachedConstraint_FromOtherBody()\n    {\n        var world = new World();\n        var bodyA = world.CreateRigidBody();\n        var bodyB = world.CreateRigidBody();\n\n        var constraint = world.CreateConstraint<BallSocket>(bodyA, bodyB);\n        world.Remove(bodyA);\n\n        Assert.That(bodyB.Constraints, Does.Not.Contain(constraint));\n        Assert.That(bodyB.Connections, Does.Not.Contain(bodyA));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void CreateConstraint_WithSameBody_Throws()\n    {\n        var world = new World();\n        var body = world.CreateRigidBody();\n\n        Assert.Throws<ArgumentException>(() => world.CreateConstraint<BallSocket>(body, body));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void ActivatingSleepingBody_WakesConstrainedPartnerOnNextStep()\n    {\n        var world = new World();\n        world.Gravity = JVector.Zero;\n\n        var bodyA = world.CreateRigidBody();\n        bodyA.AddShape(new SphereShape(1));\n        bodyA.DeactivationTime = TimeSpan.FromSeconds(1);\n\n        var bodyB = world.CreateRigidBody();\n        bodyB.AddShape(new SphereShape(1));\n        bodyB.Position = new JVector(4, 0, 0);\n        bodyB.DeactivationTime = TimeSpan.FromSeconds(1);\n\n        world.CreateConstraint<BallSocket>(bodyA, bodyB);\n\n        Helper.AdvanceWorld(world, 2, 1f / 100f, false);\n        Assert.That(bodyA.IsActive, Is.False);\n        Assert.That(bodyB.IsActive, Is.False);\n\n        bodyA.SetActivationState(true);\n        world.Step(1f / 100f, false);\n\n        Assert.That(bodyA.IsActive, Is.True);\n        Assert.That(bodyB.IsActive, Is.True);\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void ResetWarmStart_ClearsCachedConstraintImpulse()\n    {\n        var world = new World();\n        world.AllowDeactivation = false;\n        world.Gravity = JVector.Zero;\n\n        var bodyA = world.CreateRigidBody();\n        bodyA.AddShape(new SphereShape(1));\n\n        var bodyB = world.CreateRigidBody();\n        bodyB.AddShape(new SphereShape(1));\n\n        var socket = world.CreateConstraint<BallSocket>(bodyA, bodyB);\n        socket.Initialize(JVector.Zero);\n\n        bodyB.Position = new JVector(1, 0, 0);\n        bodyA.Velocity = JVector.Zero;\n        bodyB.Velocity = JVector.Zero;\n        bodyA.AngularVelocity = JVector.Zero;\n        bodyB.AngularVelocity = JVector.Zero;\n\n        world.Stabilize(1f / 60f, 4, 2, false);\n\n        Assert.That(socket.Impulse.LengthSquared(), Is.GreaterThan((Real)0.0));\n\n        socket.ResetWarmStart();\n\n        Assert.That(socket.Impulse, Is.EqualTo(JVector.Zero));\n\n        var motor = world.CreateConstraint<LinearMotor>(bodyA, bodyB);\n        motor.Initialize(JVector.UnitX, JVector.UnitX);\n        motor.TargetVelocity = (Real)2.0;\n        motor.MaximumForce = (Real)100.0;\n\n        bodyA.Velocity = JVector.Zero;\n        bodyB.Velocity = JVector.Zero;\n\n        world.Step(1f / 60f, false);\n\n        Assert.That(MathR.Abs(motor.Impulse), Is.GreaterThan((Real)0.0));\n\n        motor.ResetWarmStart();\n\n        Assert.That(motor.Impulse, Is.EqualTo((Real)0.0));\n        world.Dispose();\n    }\n}\n"
  },
  {
    "path": "src/JitterTests/Behavior/ContactLifecycleTests.cs",
    "content": "namespace JitterTests.Behavior;\n\npublic class ContactLifecycleTests\n{\n    [TestCase]\n    public void BeginCollide_FiresOnce_WhenBodiesStartTouching()\n    {\n        var world = new World();\n        world.Gravity = JVector.Zero;\n\n        var bodyA = world.CreateRigidBody();\n        bodyA.AddShape(new SphereShape(1));\n\n        var bodyB = world.CreateRigidBody();\n        bodyB.AddShape(new SphereShape(1));\n        bodyB.Position = new JVector(1.5f, 0, 0);\n\n        int beginA = 0, beginB = 0;\n        bodyA.BeginCollide += _ => beginA++;\n        bodyB.BeginCollide += _ => beginB++;\n\n        world.Step(1f / 60f, false);\n\n        Assert.That(beginA, Is.EqualTo(1));\n        Assert.That(beginB, Is.EqualTo(1));\n        Assert.That(bodyA.Contacts, Has.Count.EqualTo(1));\n        Assert.That(bodyB.Contacts, Has.Count.EqualTo(1));\n        Assert.That(bodyA.Connections, Does.Contain(bodyB));\n        Assert.That(bodyB.Connections, Does.Contain(bodyA));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void EndCollide_FiresOnce_WhenBodiesSeparate()\n    {\n        var world = new World();\n        world.Gravity = JVector.Zero;\n\n        var bodyA = world.CreateRigidBody();\n        bodyA.AddShape(new SphereShape(1));\n\n        var bodyB = world.CreateRigidBody();\n        bodyB.AddShape(new SphereShape(1));\n        bodyB.Position = new JVector(1.5f, 0, 0);\n\n        int endA = 0, endB = 0;\n        bodyA.EndCollide += _ => endA++;\n        bodyB.EndCollide += _ => endB++;\n\n        world.Step(1f / 60f, false);\n        bodyB.Position = new JVector(5, 0, 0);\n        world.Step(1f / 60f, false);\n        world.Step(1f / 60f, false);\n\n        Assert.That(endA, Is.EqualTo(1));\n        Assert.That(endB, Is.EqualTo(1));\n        Assert.That(bodyA.Contacts, Is.Empty);\n        Assert.That(bodyB.Contacts, Is.Empty);\n        Assert.That(bodyA.Connections, Does.Not.Contain(bodyB));\n        Assert.That(bodyB.Connections, Does.Not.Contain(bodyA));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void RemovingBody_InContact_CleansOtherBodyContactsAndConnections()\n    {\n        var world = new World();\n        world.Gravity = JVector.Zero;\n\n        var bodyA = world.CreateRigidBody();\n        bodyA.AddShape(new SphereShape(1));\n\n        var bodyB = world.CreateRigidBody();\n        bodyB.AddShape(new SphereShape(1));\n        bodyB.Position = new JVector(1.5f, 0, 0);\n\n        world.Step(1f / 60f, false);\n        Assert.That(bodyA.Contacts, Has.Count.EqualTo(1));\n\n        world.Remove(bodyB);\n\n        Assert.That(bodyA.Contacts, Is.Empty);\n        Assert.That(bodyA.Connections, Is.Empty);\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void MovingBody_ClearsCachedContactState()\n    {\n        using var world = new World();\n        world.Gravity = JVector.Zero;\n\n        var bodyA = world.CreateRigidBody();\n        bodyA.AddShape(new SphereShape(1));\n\n        var bodyB = world.CreateRigidBody();\n        bodyB.AddShape(new SphereShape(1));\n        bodyB.Position = new JVector(1.5f, 0, 0);\n\n        world.Step(1f / 60f, false);\n\n        Arbiter arbiter = bodyA.Contacts.Single();\n        Assert.That(arbiter.Handle.Data.UsageMask & ContactData.MaskContactAll, Is.Not.EqualTo(0u));\n\n        bodyB.Position = new JVector(1.4f, 0, 0);\n\n        Assert.That(arbiter.Handle.Data.UsageMask & ContactData.MaskContactAll, Is.EqualTo(0u));\n\n        world.Step(1f / 60f, false);\n\n        Assert.That(bodyA.Contacts, Has.Count.EqualTo(1));\n        Assert.That(arbiter.Handle.Data.UsageMask & ContactData.MaskContactAll, Is.Not.EqualTo(0u));\n    }\n}\n"
  },
  {
    "path": "src/JitterTests/Behavior/ForceImpulseTests.cs",
    "content": "namespace JitterTests.Behavior;\n\n/// <summary>\n/// Tests for AddForce and ApplyImpulse behavior.\n/// </summary>\npublic class ForceImpulseTests\n{\n    // -------------------------------------------------------------------------\n    // ApplyImpulse — immediate velocity change, no step required\n    // -------------------------------------------------------------------------\n\n    [TestCase]\n    public void ApplyImpulse_ChangesVelocityImmediately()\n    {\n        var world = new World();\n        var body = world.CreateRigidBody();\n        body.AddShape(new SphereShape(1));\n        body.ApplyImpulse(new JVector(1, 0, 0));\n        Assert.That(body.Velocity.X, Is.GreaterThan(0));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void ApplyImpulse_ScaledByInverseMass()\n    {\n        var world = new World();\n        var body = world.CreateRigidBody();\n        body.AddShape(new SphereShape(1));\n        var impulse = new JVector(10, 0, 0);\n        body.ApplyImpulse(impulse);\n        var expectedVelocityX = impulse.X / body.Mass;\n        Assert.That(body.Velocity.X, Is.EqualTo(expectedVelocityX).Within(1e-4f));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void ApplyImpulse_WithPosition_AlsoChangesAngularVelocity()\n    {\n        var world = new World();\n        var body = world.CreateRigidBody();\n        body.AddShape(new SphereShape(1));\n        // Apply impulse off-center to produce angular velocity\n        body.ApplyImpulse(new JVector(0, 1, 0), new JVector(1, 0, 0));\n        Assert.That(body.AngularVelocity.LengthSquared(), Is.GreaterThan(0));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void ApplyImpulse_OnKinematic_HasNoEffect()\n    {\n        var world = new World();\n        var body = world.CreateRigidBody();\n        body.AddShape(new SphereShape(1));\n        body.MotionType = MotionType.Kinematic;\n        body.ApplyImpulse(new JVector(1, 0, 0));\n        Assert.That(body.Velocity, Is.EqualTo(JVector.Zero));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void ApplyImpulse_OnStatic_HasNoEffect()\n    {\n        var world = new World();\n        var body = world.CreateRigidBody();\n        body.AddShape(new SphereShape(1));\n        body.MotionType = MotionType.Static;\n        body.ApplyImpulse(new JVector(1, 0, 0));\n        // Static bodies have InverseMass == 0; velocity stays zero\n        Assert.That(body.Velocity, Is.EqualTo(JVector.Zero));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void ApplyImpulse_ZeroImpulse_HasNoEffect()\n    {\n        var world = new World();\n        var body = world.CreateRigidBody();\n        body.AddShape(new SphereShape(1));\n        body.ApplyImpulse(JVector.Zero);\n        Assert.That(body.Velocity, Is.EqualTo(JVector.Zero));\n        world.Dispose();\n    }\n\n    // -------------------------------------------------------------------------\n    // AddForce — accumulated and applied next step\n    // -------------------------------------------------------------------------\n\n    [TestCase]\n    public void AddForce_AccumulatesInForceProperty()\n    {\n        var world = new World();\n        var body = world.CreateRigidBody();\n        body.AddShape(new SphereShape(1));\n        var force = new JVector(10, 0, 0);\n        body.AddForce(force);\n        Assert.That(body.Force.X, Is.EqualTo(force.X).Within(1e-5f));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void AddForce_Accumulates_MultipleCalls()\n    {\n        var world = new World();\n        var body = world.CreateRigidBody();\n        body.AddShape(new SphereShape(1));\n        body.AddForce(new JVector(1, 0, 0));\n        body.AddForce(new JVector(2, 0, 0));\n        Assert.That(body.Force.X, Is.EqualTo(3).Within(1e-5f));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void AddForce_IsResetAfterStep()\n    {\n        var world = new World();\n        world.AllowDeactivation = false;\n        var body = world.CreateRigidBody();\n        body.AddShape(new SphereShape(1));\n        body.AddForce(new JVector(100, 0, 0));\n        world.Step(1f / 60f, false);\n        Assert.That(body.Force, Is.EqualTo(JVector.Zero));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void AddForce_ChangesVelocityAfterStep()\n    {\n        // Force applied before step N is converted to DeltaVelocity in UpdateBodies at\n        // the end of step N, and applied to Velocity at the start of step N+1.\n        // Two steps are therefore needed to observe the velocity change.\n        var world = new World();\n        world.AllowDeactivation = false;\n        world.Gravity = JVector.Zero;\n        var body = world.CreateRigidBody();\n        body.AddShape(new SphereShape(1));\n        world.Step(1f / 60f, false);   // warmup: body active, no forces yet\n        body.AddForce(new JVector(100, 0, 0));\n        world.Step(1f / 60f, false);   // DeltaVelocity computed from Force\n        world.Step(1f / 60f, false);   // DeltaVelocity applied to Velocity\n        Assert.That(body.Velocity.X, Is.GreaterThan(0));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void AddForce_OnKinematic_HasNoEffect()\n    {\n        var world = new World();\n        var body = world.CreateRigidBody();\n        body.AddShape(new SphereShape(1));\n        body.MotionType = MotionType.Kinematic;\n        body.AddForce(new JVector(100, 0, 0));\n        Assert.That(body.Force, Is.EqualTo(JVector.Zero));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void AddForce_OnStatic_HasNoEffect()\n    {\n        var world = new World();\n        var body = world.CreateRigidBody();\n        body.AddShape(new SphereShape(1));\n        body.MotionType = MotionType.Static;\n        body.AddForce(new JVector(100, 0, 0));\n        Assert.That(body.Force, Is.EqualTo(JVector.Zero));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void AddForce_WithPosition_AccumulatesTorque()\n    {\n        var world = new World();\n        var body = world.CreateRigidBody();\n        body.AddShape(new SphereShape(1));\n        // Force applied off-center should produce torque\n        body.AddForce(new JVector(0, 10, 0), new JVector(1, 0, 0));\n        Assert.That(body.Torque.LengthSquared(), Is.GreaterThan(0));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void AddForce_SleepingBody_WakeupFalse_HasNoEffect()\n    {\n        var world = new World();\n        world.Gravity = JVector.Zero;\n        var body = world.CreateRigidBody();\n        body.AddShape(new SphereShape(1));\n        body.DeactivationTime = TimeSpan.FromSeconds(1);\n\n        Helper.AdvanceWorld(world, 2, 1f / 100f, false);\n        Assert.That(body.IsActive, Is.False);\n\n        body.AddForce(new JVector(10, 0, 0), wakeup: false);\n\n        Assert.That(body.Force, Is.EqualTo(JVector.Zero));\n        Assert.That(body.IsActive, Is.False);\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void AddForce_SleepingBody_WakeupTrue_QueuesForceAndReactivatesNextStep()\n    {\n        var world = new World();\n        world.Gravity = JVector.Zero;\n        var body = world.CreateRigidBody();\n        body.AddShape(new SphereShape(1));\n        body.DeactivationTime = TimeSpan.FromSeconds(1);\n\n        Helper.AdvanceWorld(world, 2, 1f / 100f, false);\n        Assert.That(body.IsActive, Is.False);\n\n        body.AddForce(new JVector(10, 0, 0), wakeup: true);\n\n        Assert.That(body.Force.X, Is.EqualTo(10).Within(1e-6f));\n        Assert.That(body.IsActive, Is.False);\n\n        world.Step(1f / 100f, false);\n        Assert.That(body.IsActive, Is.True);\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void ApplyImpulse_SleepingBody_WakeupFalse_HasNoEffect()\n    {\n        var world = new World();\n        world.Gravity = JVector.Zero;\n        var body = world.CreateRigidBody();\n        body.AddShape(new SphereShape(1));\n        body.DeactivationTime = TimeSpan.FromSeconds(1);\n\n        Helper.AdvanceWorld(world, 2, 1f / 100f, false);\n        Assert.That(body.IsActive, Is.False);\n\n        body.ApplyImpulse(new JVector(10, 0, 0), wakeup: false);\n\n        Assert.That(body.Velocity, Is.EqualTo(JVector.Zero));\n        Assert.That(body.IsActive, Is.False);\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void ApplyImpulse_SleepingBody_WakeupTrue_ChangesVelocityAndReactivatesNextStep()\n    {\n        var world = new World();\n        world.Gravity = JVector.Zero;\n        var body = world.CreateRigidBody();\n        body.AddShape(new SphereShape(1));\n        body.DeactivationTime = TimeSpan.FromSeconds(1);\n\n        Helper.AdvanceWorld(world, 2, 1f / 100f, false);\n        Assert.That(body.IsActive, Is.False);\n\n        body.ApplyImpulse(new JVector(10, 0, 0), wakeup: true);\n\n        Assert.That(body.Velocity.X, Is.GreaterThan(0));\n        Assert.That(body.IsActive, Is.False);\n\n        world.Step(1f / 100f, false);\n        Assert.That(body.IsActive, Is.True);\n        world.Dispose();\n    }\n}\n"
  },
  {
    "path": "src/JitterTests/Behavior/MiscTests.cs",
    "content": "using Jitter2.DataStructures;\n\nnamespace JitterTests.Behavior;\n\npublic class MiscTests\n{\n    [TestCase]\n    public static void RequestId()\n    {\n        ulong id0 = World.RequestId();\n        Assert.That(World.RequestId() == id0 + 1);\n        Assert.That(World.RequestId(1) == (id0 + 2, id0 + 3));\n        Assert.That(World.RequestId() == id0 + 3);\n        Assert.That(World.RequestId(2) == (id0 + 4, id0 + 6));\n        Assert.That(World.RequestId() == id0 + 6);\n        Assert.That(World.RequestId(3) == (id0 + 7, id0 + 10));\n        Assert.That(World.RequestId(3) == (id0 + 10, id0 + 13));\n    }\n}\n"
  },
  {
    "path": "src/JitterTests/Behavior/MotionTypeTests.cs",
    "content": "namespace JitterTests.Behavior;\n\npublic class MotionTypeTests\n{\n    [TestCase]\n    public void CheckInternalMass()\n    {\n        var world = new World();\n\n        var sphere = world.CreateRigidBody();\n        sphere.AddShape(new SphereShape(1));\n\n        var sphereMass = sphere.Mass;\n\n        sphere.MotionType = MotionType.Kinematic;\n\n        Assert.That(sphere.Data.InverseMass, Is.EqualTo(0));\n        Assert.That(sphere.Mass, Is.EqualTo(sphereMass));\n\n        sphere.MotionType = MotionType.Dynamic;\n\n        Assert.That(sphere.Data.InverseMass, Is.EqualTo(1 / sphereMass));\n        Assert.That(sphere.Mass, Is.EqualTo(sphereMass));\n\n        sphere.MotionType = MotionType.Static;\n\n        Assert.That(sphere.Data.InverseMass, Is.EqualTo(0));\n        Assert.That(sphere.Mass, Is.EqualTo(sphereMass));\n\n        world.Dispose();\n    }\n\n    private void PrepareTwoStack(World world, out RigidBody platform, out List<RigidBody> boxes)\n    {\n        // Create a static body\n        platform = world.CreateRigidBody();\n        platform.AddShape(new BoxShape(10,2, 10));\n        platform.Position = (0, -1, 0);\n        platform.MotionType = MotionType.Static;\n\n        boxes = new List<RigidBody>();\n\n        // Create two boxes stacked\n        for (int i = 0; i < 2; i++)\n        {\n            var box = world.CreateRigidBody();\n            box.AddShape(new BoxShape(1));\n            box.Position = (0, 0.5f + i, 0);\n            boxes.Add(box);\n        }\n\n        Helper.AdvanceWorld(world, 1, 1.0f / 100.0f, false);\n\n        // Static bodies actually do NOT build connections. We will have\n        // two islands here.\n        Assert.That(platform.Connections, Is.Empty);\n        Assert.That(boxes[0].Connections, Has.Count.EqualTo(1));\n        Assert.That(boxes[1].Connections, Has.Count.EqualTo(1));\n        Assert.That(platform.Island, Is.Not.EqualTo(boxes[0].Island));\n        Assert.That(boxes[1].Island, Is.EqualTo(boxes[0].Island));\n\n        // We do store contacts/constraints\n        Assert.That(platform.Contacts, Has.Count.EqualTo(1));\n        Assert.That(boxes[0].Contacts, Has.Count.EqualTo(2));\n        Assert.That(boxes[1].Contacts, Has.Count.EqualTo(1));\n    }\n\n    [TestCase]\n    public void CheckContactGraph()\n    {\n        var world = new World();\n\n        PrepareTwoStack(world, out var platform, out var boxes);\n\n        // Switch from static to dynamic. The platform should now be part of the island.\n        platform.MotionType = MotionType.Dynamic;\n\n        // Same as before\n        Assert.That(platform.Contacts, Has.Count.EqualTo(1));\n        Assert.That(boxes[0].Contacts, Has.Count.EqualTo(2));\n        Assert.That(boxes[1].Contacts, Has.Count.EqualTo(1));\n\n        // Different contact graph\n        Assert.That(platform.Connections, Has.Count.EqualTo(1));\n        Assert.That(boxes[0].Connections, Has.Count.EqualTo(2));\n        Assert.That(boxes[1].Connections, Has.Count.EqualTo(1));\n        Assert.That(platform.Island, Is.EqualTo(boxes[0].Island));\n        Assert.That(boxes[1].Island, Is.EqualTo(boxes[0].Island));\n\n        // Switch from dynamic to kinematic. Contact graph should stay the same\n        platform.MotionType = MotionType.Kinematic;\n\n        // Same as before\n        Assert.That(platform.Contacts, Has.Count.EqualTo(1));\n        Assert.That(boxes[0].Contacts, Has.Count.EqualTo(2));\n        Assert.That(boxes[1].Contacts, Has.Count.EqualTo(1));\n\n        // Same as before\n        Assert.That(platform.Connections, Has.Count.EqualTo(1));\n        Assert.That(boxes[0].Connections, Has.Count.EqualTo(2));\n        Assert.That(boxes[1].Connections, Has.Count.EqualTo(1));\n        Assert.That(platform.Island, Is.EqualTo(boxes[0].Island));\n        Assert.That(boxes[1].Island, Is.EqualTo(boxes[0].Island));\n\n        // Simulate a bit and check that nothing changed\n        Helper.AdvanceWorld(world, 1, 1.0f / 100.0f, false);\n\n        // Same as before\n        Assert.That(platform.Contacts, Has.Count.EqualTo(1));\n        Assert.That(boxes[0].Contacts, Has.Count.EqualTo(2));\n        Assert.That(boxes[1].Contacts, Has.Count.EqualTo(1));\n\n        // Same as before\n        Assert.That(platform.Connections, Has.Count.EqualTo(1));\n        Assert.That(boxes[0].Connections, Has.Count.EqualTo(2));\n        Assert.That(boxes[1].Connections, Has.Count.EqualTo(1));\n        Assert.That(platform.Island, Is.EqualTo(boxes[0].Island));\n        Assert.That(boxes[1].Island, Is.EqualTo(boxes[0].Island));\n\n        // Switch from kinematic to static.\n        platform.MotionType = MotionType.Static;\n\n        // Static bodies actually do NOT build connections. We will have\n        // two islands here.\n        Assert.That(platform.Connections, Is.Empty);\n        Assert.That(boxes[0].Connections, Has.Count.EqualTo(1));\n        Assert.That(boxes[1].Connections, Has.Count.EqualTo(1));\n        Assert.That(platform.Island, Is.Not.EqualTo(boxes[0].Island));\n        Assert.That(boxes[1].Island, Is.EqualTo(boxes[0].Island));\n\n        // We do store contacts/constraints\n        Assert.That(platform.Contacts, Has.Count.EqualTo(1));\n        Assert.That(boxes[0].Contacts, Has.Count.EqualTo(2));\n        Assert.That(boxes[1].Contacts, Has.Count.EqualTo(1));\n\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void CheckNoStaticKinematicContacts()\n    {\n        var world = new World();\n\n        PrepareTwoStack(world, out var platform, out var boxes);\n\n        boxes[0].MotionType = MotionType.Kinematic;\n\n        // Jitter should now remove the contacts connecting a static and a kinematic body.\n        // Only dynamic <-> kinematic contacts should remain.\n\n        Assert.That(platform.Contacts, Is.Empty);\n        Assert.That(boxes[0].Contacts, Has.Count.EqualTo(1));\n        Assert.That(boxes[1].Contacts, Has.Count.EqualTo(1));\n\n        Assert.That(platform.Island, Is.Not.EqualTo(boxes[0].Island));\n        Helper.AdvanceWorld(world, 1, 1.0f / 100.0f, false);\n        Assert.That(platform.Contacts, Is.Empty);\n\n        Assert.That(platform.IsActive, Is.False);\n        Assert.That(boxes[0].IsActive, Is.True);\n        Assert.That(boxes[1].IsActive, Is.True);\n\n        Helper.AdvanceWorld(world, 10, 1.0f / 100.0f, false);\n\n        Assert.That(platform.IsActive, Is.False);\n        Assert.That(boxes[0].IsActive, Is.False);\n        Assert.That(boxes[1].IsActive, Is.False);\n\n        world.Dispose();\n    }\n\n}\n"
  },
  {
    "path": "src/JitterTests/Behavior/NullBodyTests.cs",
    "content": "using Jitter2.Dynamics.Constraints;\n\nnamespace JitterTests.Behavior;\n\npublic class NullBodyTests\n{\n    [TestCase]\n    public void NullBody_IsStaticAndInactive()\n    {\n        var world = new World();\n\n        Assert.That(world.NullBody.MotionType, Is.EqualTo(MotionType.Static));\n        Assert.That(world.NullBody.Data.InverseMass, Is.EqualTo((Real)0.0).Within((Real)1e-6));\n        Assert.That(world.NullBody.Data.InverseInertiaWorld, Is.EqualTo(JMatrix.Zero));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void ConstraintAgainstNullBody_RegistersOnlyOnDynamicBodyConnection()\n    {\n        var world = new World();\n        var body = world.CreateRigidBody();\n        body.AddShape(new SphereShape(1));\n\n        var constraint = world.CreateConstraint<BallSocket>(body, world.NullBody);\n        constraint.Initialize(body.Position);\n\n        Assert.That(body.Constraints, Does.Contain(constraint));\n        Assert.That(world.NullBody.Constraints, Does.Contain(constraint));\n        Assert.That(body.Connections, Does.Not.Contain(world.NullBody));\n        Assert.That(world.NullBody.Connections, Is.Empty);\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void NullBodyShape_ParticipatesInCollisionAndCanBeRemoved()\n    {\n        var world = new World\n        {\n            Gravity = JVector.Zero\n        };\n\n        var staticShape = new SphereShape(1);\n        world.NullBody.AddShape(staticShape);\n\n        var body = world.CreateRigidBody();\n        body.AddShape(new SphereShape(1));\n        body.Position = new JVector(1.5f, 0, 0);\n\n        world.Step(1f / 60f, false);\n        Assert.That(body.Contacts, Has.Count.EqualTo(1));\n\n        world.NullBody.RemoveShape(staticShape);\n        world.Step(1f / 60f, false);\n        world.Step(1f / 60f, false);\n\n        Assert.That(body.Contacts, Is.Empty);\n        Assert.That(world.NullBody.Shapes, Is.Empty);\n        world.Dispose();\n    }\n}\n"
  },
  {
    "path": "src/JitterTests/Behavior/SleepTests.cs",
    "content": "namespace JitterTests.Behavior;\n\npublic class SleepTests\n{\n    [TestCase]\n    public void StaticBodySleepingAndWake()\n    {\n        var world = new World();\n\n        // Create a static body\n        var body = world.CreateRigidBody();\n        body.AddShape(new BoxShape(1));\n        body.MotionType = MotionType.Static;\n        body.DeactivationTime = TimeSpan.FromSeconds(1);\n\n        Helper.AdvanceWorld(world, 1, (Real)(1.0 / 100.0), false);\n        Assert.That(!body.IsActive, \"Static body should always be inactive.\");\n\n        body.SetActivationState(true);\n        Assert.That(!body.IsActive, \"Static body should always be inactive.\");\n        Helper.AdvanceWorld(world, 1, (Real)(1.0 / 100.0), false);\n        Assert.That(!body.IsActive, \"Static body should always be inactive.\");\n\n        body.Position = new JVector(0, 10, 0);\n        Assert.That(!body.IsActive, \"Static body should always be inactive.\");\n        Helper.AdvanceWorld(world, 1, (Real)(1.0 / 100.0), false);\n        Assert.That(!body.IsActive, \"Static body should always be inactive.\");\n\n        var dynamicBody = world.CreateRigidBody();\n        dynamicBody.AddShape(new BoxShape(1));\n        dynamicBody.Position = new JVector(0, 12, 0);\n        Helper.AdvanceWorld(world, 1, (Real)(1.0 / 100.0), false);\n        Assert.That(!body.IsActive, \"Static body should always be inactive.\");\n\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void DeactivationTime()\n    {\n        var world = new World();\n        world.Gravity = JVector.Zero;\n\n        var body = world.CreateRigidBody();\n        body.DeactivationTime = TimeSpan.FromSeconds(3);\n\n        // Initially, a newly created body is always active.\n        Assert.That(body.IsActive);\n\n        // Advance simulation by 1 second — should still be active,\n        // because the deactivation timeout (3s) hasn’t elapsed yet.\n        Helper.AdvanceWorld(world, 1, (Real)(1.0 / 100.0), false);\n        Assert.That(body.IsActive);\n\n        // After 3 more seconds (total 4s), the body should deactivate,\n        // since it hasn’t moved and its timeout was 3s.\n        Helper.AdvanceWorld(world, 3, (Real)(1.0 / 100.0), false);\n        Assert.That(!body.IsActive);\n\n        // Change the deactivation timeout to 5 seconds and try to\n        // manually reactivate the body. The activation request\n        // takes effect only after the next simulation step.\n        body.DeactivationTime = TimeSpan.FromSeconds(5);\n        body.SetActivationState(true);\n\n        // Until the next step, the body remains inactive.\n        Assert.That(!body.IsActive);\n\n        // Step the world once — now the activation flag is processed,\n        // and the body should become active again.\n        Helper.AdvanceWorld(world, 1, (Real)(1.0 / 100.0), false);\n        Assert.That(body.IsActive);\n\n        // Advance 3 seconds — still within the 5-second timeout, so active.\n        Helper.AdvanceWorld(world, 3, (Real)(1.0 / 100.0), false);\n        Assert.That(body.IsActive);\n\n        // Advance 2 more seconds (total 6s) — exceeds the timeout,\n        // so the body should deactivate again.\n        Helper.AdvanceWorld(world, 2, (Real)(1.0 / 100.0), false);\n        Assert.That(!body.IsActive);\n\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void KinematicTriggerWake()\n    {\n        var world = new World();\n        world.Gravity = JVector.Zero;\n\n        // Static (infinite mass) body acting as a moving platform.\n        var platform = world.CreateRigidBody();\n        platform.AddShape(new BoxShape(2));\n        platform.MotionType = MotionType.Kinematic;\n        platform.Position = new JVector(0, 0, 0);\n        platform.DeactivationTime = TimeSpan.FromSeconds(1);\n\n        // Dynamic body resting slightly above the platform.\n        var box = world.CreateRigidBody();\n        box.AddShape(new BoxShape(1));\n        box.Position = new JVector(0, 2, 0);\n        box.DeactivationTime = TimeSpan.FromSeconds(1);\n\n        // Let the dynamic body settle and go to sleep.\n        Helper.AdvanceWorld(world, 3, (Real)(1.0 / 100.0), false);\n        Assert.That(!box.IsActive, \"Box should be inactive after settling.\");\n\n        // Give the static body an upward velocity — simulating a moving platform.\n        platform.Velocity = new JVector(0, 1, 0);\n\n        // Advance one step to process motion and new contact generation.\n        Helper.AdvanceWorld(world, 1, (Real)(1.0 / 100.0), false);\n\n        // The sleeping box should wake up due to contact with the moving platform.\n        Assert.That(box.IsActive, \"Box should wake up after being touched by moving static body.\");\n\n        // Optionally verify that the platform can still move even though it is static (infinite mass).\n        Assert.That(platform.Position.Y > 0, \"Platform should have moved due to integration.\");\n\n        world.Dispose();\n    }\n\n\n    [TestCase]\n    public void StackedSleeping()\n    {\n        var world = new World();\n\n        List<RigidBody> bodies = new();\n\n        for (int i = 0; i < 3; i++)\n        {\n            var body = world.CreateRigidBody();\n            body.AddShape(new BoxShape(1));\n            body.Position = new JVector(0, i, 0);\n            body.DeactivationTime = TimeSpan.FromSeconds(1);\n            bodies.Add(body);\n        }\n\n        bodies[0].MotionType = MotionType.Static;\n        Helper.AdvanceWorld(world, 3, (Real)(1.0 / 100.0), false);\n\n        // Make sure all bodies are inactive\n        foreach (var body in bodies)\n        {\n            Assert.That(!body.IsActive, $\"Body at {body.Position} should be inactive.\");\n        }\n\n        // Request reactivation of the middle body\n        bodies[1].SetActivationState(true);\n\n        // Process activation in the next step\n        Helper.AdvanceWorld(world, 1, (Real)(1.0 / 100.0), false);\n\n        // Now both the middle and top bodies should be active\n        Assert.That(bodies[1].IsActive, \"Middle body should be reactivated.\");\n        Assert.That(bodies[2].IsActive, \"Top body should be reactivated due to contact propagation.\");\n\n        // Advance world to allow them to fall asleep again\n        Helper.AdvanceWorld(world, 2, (Real)(1.0 / 100.0), false);\n\n        // Verify that both dynamic bodies went inactive again\n        Assert.That(!bodies[1].IsActive, \"Middle body should be inactive again.\");\n        Assert.That(!bodies[2].IsActive, \"Top body should be inactive again.\");\n\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void StackedWakeOnRemoval()\n    {\n        var world = new World();\n\n        List<RigidBody> bodies = new();\n\n        // Create a vertical stack of three boxes\n        for (int i = 0; i < 3; i++)\n        {\n            var body = world.CreateRigidBody();\n            body.AddShape(new BoxShape(1));\n            body.Position = new JVector(0, i, 0);\n            body.DeactivationTime = TimeSpan.FromSeconds(1);\n            bodies.Add(body);\n        }\n\n        // The bottom box is static (acts as the floor)\n        bodies[0].MotionType = MotionType.Static;\n\n        // Let them settle and go to sleep\n        Helper.AdvanceWorld(world, 3, (Real)(1.0 / 100.0), false);\n\n        // Ensure all non-static bodies are inactive\n        foreach (var body in bodies)\n        {\n            Assert.That(!body.IsActive, $\"Body at {body.Position} should be inactive.\");\n        }\n\n        // Remove the middle body — this breaks contact between bottom and top\n        world.Remove(bodies[1]);\n\n        // After removing it, the island should update on the next step\n        Helper.AdvanceWorld(world, 1, (Real)(1.0 / 100.0), false);\n\n        // The top body should now be awake because its supporting contact vanished\n        Assert.That(bodies[2].IsActive, \"Top body should wake up after its support is removed.\");\n\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void StaticBaseMovementWakesDynamic()\n    {\n        var world = new World();\n\n        // Bottom body: static (infinite mass) base\n        var bottom = world.CreateRigidBody();\n        bottom.AddShape(new BoxShape(2));\n        bottom.Position = new JVector(0, 0, 0);\n        bottom.MotionType = MotionType.Static;\n        bottom.DeactivationTime = TimeSpan.FromSeconds(1);\n\n        // Top body: dynamic box resting on the static base\n        var top = world.CreateRigidBody();\n        top.AddShape(new BoxShape(1));\n        top.Position = new JVector(0, 2, 0);\n        top.DeactivationTime = TimeSpan.FromSeconds(1);\n\n        // Let them settle — both should go to sleep\n        Helper.AdvanceWorld(world, 3, (Real)(1.0 / 100.0), false);\n        Assert.That(!bottom.IsActive, \"Bottom (static) body should be inactive after settling.\");\n        Assert.That(!top.IsActive, \"Top body should be inactive after settling.\");\n\n        // Move the static body downward slightly\n        bottom.Position -= new JVector(0, 0.5f, 0);\n\n        // Process one step so the contact system updates\n        Helper.AdvanceWorld(world, 1, (Real)(1.0 / 100.0), false);\n\n        // The top body should now wake up because its contact was disturbed\n        Assert.That(top.IsActive, \"Top body should wake up after its static support moves.\");\n\n        world.Dispose();\n    }\n\n}\n"
  },
  {
    "path": "src/JitterTests/Behavior/StackingTests.cs",
    "content": "namespace JitterTests.Behavior;\n\npublic class StackingTests\n{\n    private World world = null!;\n\n    [SetUp]\n    public void Setup()\n    {\n        world = new World()\n        {\n            AllowDeactivation = false\n        };\n    }\n\n    [TearDown]\n    public void TearDown()\n    {\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void SimpleStack()\n    {\n        world.SolverIterations = (4, 4);\n\n        RigidBody last = Helper.BuildSimpleStack(world);\n\n        Real stackHeight = last.Position.Y;\n        Helper.AdvanceWorld(world, 10, (Real)(1.0 / 100.0), true);\n        Real delta = MathR.Abs(stackHeight - last.Position.Y);\n\n        Assert.That(delta, Is.LessThan(1));\n    }\n\n    [TestCase(0, 0, 0, true)]\n    [TestCase(0, 0, 0, false)]\n    [TestCase(1, 0, 0, true)]\n    public void PyramidStack(int x, int y, int z, bool multiThread)\n    {\n        world.SolverIterations = (4, 4);\n\n        RigidBody last = Helper.BuildPyramidBox(world, new JVector(x, y, z));\n\n        Real stackHeight = last.Position.Y;\n        Helper.AdvanceWorld(world, 10, (Real)(1.0 / 100.0), multiThread);\n        Real delta = MathR.Abs(stackHeight - last.Position.Y);\n\n        Assert.That(delta, Is.LessThan(1f));\n    }\n\n    [TestCase(0, 0, 0, true)]\n    [TestCase(0, 0, 0, false)]\n    [TestCase(1000, 1000, 1000, true)]\n    public void PyramidStackCylinder(int x, int y, int z, bool multiThread)\n    {\n        world.SolverIterations = (4, 4);\n\n        RigidBody last = Helper.BuildPyramidCylinder(world, new JVector(x, y, z));\n\n        Real stackHeight = last.Position.Y;\n        Helper.AdvanceWorld(world, 10, (Real)(1.0 / 100.0), multiThread);\n        Real delta = MathR.Abs(stackHeight - last.Position.Y);\n\n        Assert.That(delta, Is.LessThan(1f));\n    }\n\n    [TestCase(true)]\n    [TestCase(false)]\n    public void TowerStack(bool multiThread)\n    {\n        world.SolverIterations = (14, 4);\n\n        RigidBody last = Helper.BuildTower(world, JVector.Zero, 30);\n\n        Real stackHeight = last.Position.Y;\n        Helper.AdvanceWorld(world, 10, (Real)(1.0 / 100.0), multiThread);\n        Real delta = MathR.Abs(stackHeight - last.Position.Y);\n\n        Assert.That(delta, Is.LessThan(1f));\n    }\n}\n"
  },
  {
    "path": "src/JitterTests/Behavior/WorldCallbackTests.cs",
    "content": "namespace JitterTests.Behavior;\n\npublic class WorldCallbackTests\n{\n    [TestCase]\n    public void PreAndPostSubStep_FireOncePerSubstep_WithSubstepDt()\n    {\n        var world = new World\n        {\n            SubstepCount = 4\n        };\n\n        int preCount = 0, postCount = 0;\n        Real preDt = 0, postDt = 0;\n\n        world.PreSubStep += dt =>\n        {\n            preCount++;\n            preDt = dt;\n        };\n\n        world.PostSubStep += dt =>\n        {\n            postCount++;\n            postDt = dt;\n        };\n\n        const Real dt = 1f / 60f;\n        world.Step(dt, false);\n\n        Assert.That(preCount, Is.EqualTo(4));\n        Assert.That(postCount, Is.EqualTo(4));\n        Assert.That(preDt, Is.EqualTo(dt / 4).Within(1e-6f));\n        Assert.That(postDt, Is.EqualTo(dt / 4).Within(1e-6f));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void SubStepCallbacks_AreOrderedWithinEachSubstep()\n    {\n        var world = new World\n        {\n            SubstepCount = 3\n        };\n\n        List<string> events = [];\n\n        world.PreSubStep += _ => events.Add(\"pre\");\n        world.PostSubStep += _ => events.Add(\"post\");\n\n        world.Step(1f / 60f, false);\n\n        Assert.That(events, Has.Count.EqualTo(6));\n\n        for (int i = 0; i < events.Count; i += 2)\n        {\n            Assert.That(events[i], Is.EqualTo(\"pre\"));\n            Assert.That(events[i + 1], Is.EqualTo(\"post\"));\n        }\n\n        world.Dispose();\n    }\n}\n"
  },
  {
    "path": "src/JitterTests/Constraints/AdditionalConstraintBehaviorTests.cs",
    "content": "using Jitter2.Dynamics.Constraints;\n\nnamespace JitterTests.Constraints;\n\npublic class AdditionalConstraintBehaviorTests\n{\n    [TestCase]\n    public void LinearMotor_DrivesBodyTowardTargetVelocity()\n    {\n        var world = new World\n        {\n            Gravity = JVector.Zero,\n            AllowDeactivation = false,\n            SubstepCount = 4\n        };\n\n        var body = world.CreateRigidBody();\n        body.AddShape(new SphereShape(1));\n\n        var motor = world.CreateConstraint<LinearMotor>(world.NullBody, body);\n        motor.Initialize(JVector.UnitX, JVector.UnitX);\n        motor.TargetVelocity = (Real)2.0;\n        motor.MaximumForce = (Real)100.0;\n\n        Helper.AdvanceWorld(world, 1, 1f / 100f, false);\n\n        Assert.That(body.Velocity.X, Is.EqualTo((Real)2.0).Within((Real)0.2));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void AngularMotor_DrivesAngularVelocityTowardTarget()\n    {\n        var world = new World\n        {\n            Gravity = JVector.Zero,\n            AllowDeactivation = false,\n            SubstepCount = 4\n        };\n\n        var body = world.CreateRigidBody();\n        body.AddShape(new SphereShape(1));\n\n        var motor = world.CreateConstraint<AngularMotor>(world.NullBody, body);\n        motor.Initialize(JVector.UnitY, JVector.UnitY);\n        motor.TargetVelocity = (Real)3.0;\n        motor.MaximumForce = (Real)100.0;\n\n        Helper.AdvanceWorld(world, 1, 1f / 100f, false);\n\n        Assert.That(body.AngularVelocity.Y, Is.EqualTo((Real)3.0).Within((Real)0.3));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void PointOnLine_ReducesPerpendicularDistanceToLine()\n    {\n        var world = new World\n        {\n            Gravity = JVector.Zero,\n            AllowDeactivation = false,\n            SubstepCount = 4\n        };\n\n        var lineBody = world.CreateRigidBody();\n        lineBody.AddShape(new SphereShape(1));\n        lineBody.MotionType = MotionType.Static;\n\n        var body = world.CreateRigidBody();\n        body.AddShape(new SphereShape(1));\n        body.Position = new JVector(0, 3, 2);\n\n        var pointOnLine = world.CreateConstraint<PointOnLine>(lineBody, body);\n        pointOnLine.Initialize(JVector.UnitX, JVector.Zero, body.Position, LinearLimit.Full);\n\n        var before = MathR.Sqrt(body.Position.Y * body.Position.Y + body.Position.Z * body.Position.Z);\n        Helper.AdvanceWorld(world, 2, 1f / 100f, false);\n        var after = MathR.Sqrt(body.Position.Y * body.Position.Y + body.Position.Z * body.Position.Z);\n\n        Assert.That(after, Is.LessThan(before));\n        Assert.That(after, Is.LessThan((Real)2.1));\n        Assert.That(pointOnLine.Impulse.Length(), Is.GreaterThan((Real)0.0));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void PointOnPlane_ReducesDistanceToPlane()\n    {\n        var world = new World\n        {\n            Gravity = JVector.Zero,\n            AllowDeactivation = false,\n            SubstepCount = 4\n        };\n\n        var planeBody = world.CreateRigidBody();\n        planeBody.AddShape(new SphereShape(1));\n        planeBody.MotionType = MotionType.Static;\n\n        var body = world.CreateRigidBody();\n        body.AddShape(new SphereShape(1));\n        body.Position = new JVector(1, 3, 2);\n\n        var pointOnPlane = world.CreateConstraint<PointOnPlane>(planeBody, body);\n        pointOnPlane.Initialize(JVector.UnitY, JVector.Zero, body.Position, LinearLimit.Fixed);\n\n        var before = MathR.Abs(body.Position.Y);\n        Helper.AdvanceWorld(world, 2, 1f / 100f, false);\n        var after = MathR.Abs(body.Position.Y);\n\n        Assert.That(after, Is.LessThan(before));\n        Assert.That(after, Is.LessThan((Real)0.2));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void HingeAngle_LimitReducesRotationComparedToUnconstrained()\n    {\n        static Real Run(bool constrained)\n        {\n            var world = new World\n            {\n                Gravity = JVector.Zero,\n                AllowDeactivation = false,\n                SubstepCount = 4\n            };\n\n            var body = world.CreateRigidBody();\n            body.AddShape(new SphereShape(1));\n\n            if (constrained)\n            {\n                var hinge = world.CreateConstraint<HingeAngle>(world.NullBody, body);\n                hinge.Initialize(JVector.UnitY, AngularLimit.FromDegree(-10, 10));\n            }\n\n            body.AngularVelocity = new JVector(0, (Real)8.0, 0);\n            for (int i = 0; i < 10; i++)\n            {\n                world.Step(1f / 100f, false);\n            }\n\n            var clampedW = Math.Clamp(MathR.Abs(body.Orientation.W), (Real)0.0, (Real)1.0);\n            var angle = (Real)2.0 * MathR.Acos(clampedW);\n            world.Dispose();\n            return angle;\n        }\n\n        var unconstrained = Run(false);\n        var constrained = Run(true);\n\n        Assert.That(unconstrained, Is.GreaterThan((Real)0.4));\n        Assert.That(constrained, Is.LessThan(unconstrained));\n        Assert.That(constrained, Is.LessThan((Real)0.4));\n    }\n}\n"
  },
  {
    "path": "src/JitterTests/Constraints/ConstraintSolverOutcomeTests.cs",
    "content": "using Jitter2.Dynamics.Constraints;\n\nnamespace JitterTests.Constraints;\n\npublic class ConstraintSolverOutcomeTests\n{\n    [TestCase]\n    public void DistanceLimit_PullsBodiesTowardTargetDistance()\n    {\n        var world = new World\n        {\n            Gravity = JVector.Zero,\n            AllowDeactivation = false,\n            SubstepCount = 4\n        };\n\n        var bodyA = world.CreateRigidBody();\n        bodyA.AddShape(new SphereShape(1));\n        bodyA.Position = new JVector(-3, 0, 0);\n\n        var bodyB = world.CreateRigidBody();\n        bodyB.AddShape(new SphereShape(1));\n        bodyB.Position = new JVector(3, 0, 0);\n\n        var limit = world.CreateConstraint<DistanceLimit>(bodyA, bodyB);\n        limit.Initialize(bodyA.Position, bodyB.Position);\n        limit.TargetDistance = (Real)2.0;\n\n        Helper.AdvanceWorld(world, 2, 1f / 100f, false);\n\n        Assert.That(limit.Distance, Is.EqualTo((Real)2.0).Within((Real)0.1));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void BallSocket_AlignsAnchorsAfterStepping()\n    {\n        var world = new World\n        {\n            Gravity = JVector.Zero,\n            AllowDeactivation = false,\n            SubstepCount = 4\n        };\n\n        var bodyA = world.CreateRigidBody();\n        bodyA.AddShape(new SphereShape(1));\n        bodyA.Position = new JVector(0, 0, 0);\n\n        var bodyB = world.CreateRigidBody();\n        bodyB.AddShape(new SphereShape(1));\n        bodyB.Position = new JVector(3, 1, 0);\n\n        var anchor = new JVector(1, 0, 0);\n        var socket = world.CreateConstraint<BallSocket>(bodyA, bodyB);\n        socket.Initialize(anchor);\n\n        Helper.AdvanceWorld(world, 2, 1f / 100f, false);\n\n        var delta = socket.Anchor2 - socket.Anchor1;\n        Assert.That(delta.Length(), Is.LessThan((Real)0.1));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void FixedAngle_ReducesRelativeOrientationError()\n    {\n        static Real Run(bool withConstraint)\n        {\n            var world = new World\n            {\n                Gravity = JVector.Zero,\n                AllowDeactivation = false,\n                SubstepCount = 4\n            };\n\n            var bodyA = world.CreateRigidBody();\n            bodyA.AddShape(new SphereShape(1));\n\n            var bodyB = world.CreateRigidBody();\n            bodyB.AddShape(new SphereShape(1));\n            bodyB.Orientation = JQuaternion.CreateRotationY((Real)(MathR.PI / 4.0));\n\n            if (withConstraint)\n            {\n                var fixedAngle = world.CreateConstraint<FixedAngle>(bodyA, bodyB);\n                fixedAngle.Initialize();\n            }\n\n            bodyB.AngularVelocity = new JVector(0, (Real)8.0, 0);\n            Helper.AdvanceWorld(world, 1, 1f / 100f, false);\n\n            var result = MathR.Abs(JQuaternion.Dot(bodyA.Orientation, bodyB.Orientation));\n            world.Dispose();\n            return result;\n        }\n\n        var unconstrainedDot = Run(false);\n        var constrainedDot = Run(true);\n\n        Assert.That(constrainedDot, Is.GreaterThan(unconstrainedDot));\n    }\n}\n"
  },
  {
    "path": "src/JitterTests/Constraints/ConstraintTests.cs",
    "content": "using Jitter2.Dynamics.Constraints;\nusing Jitter2.SoftBodies;\n\nnamespace JitterTests.Constraints;\n\npublic class ConstraintTests\n{\n    [TestCase]\n    public void TestSizes()\n    {\n        using World world = new World();\n\n        RigidBody b0 = world.CreateRigidBody();\n        RigidBody b1 = world.CreateRigidBody();\n\n        world.Remove(world.CreateConstraint<AngularMotor>(b0, b1));\n        world.Remove(world.CreateConstraint<BallSocket>(b0, b1));\n        world.Remove(world.CreateConstraint<ConeLimit>(b0, b1));\n        world.Remove(world.CreateConstraint<DistanceLimit>(b0, b1));\n        world.Remove(world.CreateConstraint<FixedAngle>(b0, b1));\n        world.Remove(world.CreateConstraint<HingeAngle>(b0, b1));\n        world.Remove(world.CreateConstraint<LinearMotor>(b0, b1));\n        world.Remove(world.CreateConstraint<PointOnLine>(b0, b1));\n        world.Remove(world.CreateConstraint<PointOnPlane>(b0, b1));\n        world.Remove(world.CreateConstraint<TwistAngle>(b0, b1));\n        world.Remove(world.CreateConstraint<SpringConstraint>(b0, b1));\n    }\n\n}\n"
  },
  {
    "path": "src/JitterTests/Constraints/DeterministicConstraintSolverTests.cs",
    "content": "using Jitter2.Dynamics.Constraints;\n\nnamespace JitterTests.Constraints;\n\npublic class DeterministicConstraintSolverTests\n{\n    [TestCase]\n    public void DistanceLimit_WorksInDeterministicSolver()\n    {\n        var world = new World\n        {\n            Gravity = JVector.Zero,\n            AllowDeactivation = false,\n            SubstepCount = 4,\n            SolveMode = SolveMode.Deterministic\n        };\n\n        var bodyA = world.CreateRigidBody();\n        bodyA.AddShape(new SphereShape(1));\n        bodyA.Position = new JVector(-3, 0, 0);\n\n        var bodyB = world.CreateRigidBody();\n        bodyB.AddShape(new SphereShape(1));\n        bodyB.Position = new JVector(3, 0, 0);\n\n        var limit = world.CreateConstraint<DistanceLimit>(bodyA, bodyB);\n        limit.Initialize(bodyA.Position, bodyB.Position);\n        limit.TargetDistance = (Real)2.0;\n\n        Helper.AdvanceWorld(world, 2, 1f / 100f, true);\n\n        Assert.That(limit.Distance, Is.EqualTo((Real)2.0).Within((Real)0.1));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void BallSocket_WorksInDeterministicSolver()\n    {\n        var world = new World\n        {\n            Gravity = JVector.Zero,\n            AllowDeactivation = false,\n            SubstepCount = 4,\n            SolveMode = SolveMode.Deterministic\n        };\n\n        var bodyA = world.CreateRigidBody();\n        bodyA.AddShape(new SphereShape(1));\n        bodyA.Position = new JVector(0, 0, 0);\n\n        var bodyB = world.CreateRigidBody();\n        bodyB.AddShape(new SphereShape(1));\n        bodyB.Position = new JVector(3, 1, 0);\n\n        var anchor = new JVector(1, 0, 0);\n        var socket = world.CreateConstraint<BallSocket>(bodyA, bodyB);\n        socket.Initialize(anchor);\n\n        Helper.AdvanceWorld(world, 2, 1f / 100f, true);\n\n        var delta = socket.Anchor2 - socket.Anchor1;\n        Assert.That(delta.Length(), Is.LessThan((Real)0.1));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void FixedAngle_WorksInDeterministicSolver()\n    {\n        static Real Run(bool withConstraint)\n        {\n            var world = new World\n            {\n                Gravity = JVector.Zero,\n                AllowDeactivation = false,\n                SubstepCount = 4,\n                SolveMode = SolveMode.Deterministic\n            };\n\n            var bodyA = world.CreateRigidBody();\n            bodyA.AddShape(new SphereShape(1));\n\n            var bodyB = world.CreateRigidBody();\n            bodyB.AddShape(new SphereShape(1));\n            bodyB.Orientation = JQuaternion.CreateRotationY((Real)(MathR.PI / 4.0));\n\n            if (withConstraint)\n            {\n                var fixedAngle = world.CreateConstraint<FixedAngle>(bodyA, bodyB);\n                fixedAngle.Initialize();\n            }\n\n            bodyB.AngularVelocity = new JVector(0, (Real)8.0, 0);\n            Helper.AdvanceWorld(world, 1, 1f / 100f, true);\n\n            var result = MathR.Abs(JQuaternion.Dot(bodyA.Orientation, bodyB.Orientation));\n            world.Dispose();\n            return result;\n        }\n\n        var unconstrainedDot = Run(false);\n        var constrainedDot = Run(true);\n\n        Assert.That(constrainedDot, Is.GreaterThan(unconstrainedDot));\n    }\n\n    [TestCase]\n    public void LinearMotor_WorksInDeterministicSolver()\n    {\n        var world = new World\n        {\n            Gravity = JVector.Zero,\n            AllowDeactivation = false,\n            SubstepCount = 4,\n            SolveMode = SolveMode.Deterministic\n        };\n\n        var body = world.CreateRigidBody();\n        body.AddShape(new SphereShape(1));\n\n        var motor = world.CreateConstraint<LinearMotor>(world.NullBody, body);\n        motor.Initialize(JVector.UnitX, JVector.UnitX);\n        motor.TargetVelocity = (Real)2.0;\n        motor.MaximumForce = (Real)100.0;\n\n        Helper.AdvanceWorld(world, 1, 1f / 100f, true);\n\n        Assert.That(body.Velocity.X, Is.EqualTo((Real)2.0).Within((Real)0.2));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void AngularMotor_WorksInDeterministicSolver()\n    {\n        var world = new World\n        {\n            Gravity = JVector.Zero,\n            AllowDeactivation = false,\n            SubstepCount = 4,\n            SolveMode = SolveMode.Deterministic\n        };\n\n        var body = world.CreateRigidBody();\n        body.AddShape(new SphereShape(1));\n\n        var motor = world.CreateConstraint<AngularMotor>(world.NullBody, body);\n        motor.Initialize(JVector.UnitY, JVector.UnitY);\n        motor.TargetVelocity = (Real)3.0;\n        motor.MaximumForce = (Real)100.0;\n\n        Helper.AdvanceWorld(world, 1, 1f / 100f, true);\n\n        Assert.That(body.AngularVelocity.Y, Is.EqualTo((Real)3.0).Within((Real)0.3));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void PointOnPlane_WorksInDeterministicSolver()\n    {\n        var world = new World\n        {\n            Gravity = JVector.Zero,\n            AllowDeactivation = false,\n            SubstepCount = 4,\n            SolveMode = SolveMode.Deterministic\n        };\n\n        var planeBody = world.CreateRigidBody();\n        planeBody.AddShape(new SphereShape(1));\n        planeBody.MotionType = MotionType.Static;\n\n        var body = world.CreateRigidBody();\n        body.AddShape(new SphereShape(1));\n        body.Position = new JVector(1, 3, 2);\n\n        var pointOnPlane = world.CreateConstraint<PointOnPlane>(planeBody, body);\n        pointOnPlane.Initialize(JVector.UnitY, JVector.Zero, body.Position, LinearLimit.Fixed);\n\n        var before = MathR.Abs(body.Position.Y);\n        Helper.AdvanceWorld(world, 2, 1f / 100f, true);\n        var after = MathR.Abs(body.Position.Y);\n\n        Assert.That(after, Is.LessThan(before));\n        Assert.That(after, Is.LessThan((Real)0.2));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void PointOnLine_WorksInDeterministicSolver()\n    {\n        var world = new World\n        {\n            Gravity = JVector.Zero,\n            AllowDeactivation = false,\n            SubstepCount = 4,\n            SolveMode = SolveMode.Deterministic\n        };\n\n        var lineBody = world.CreateRigidBody();\n        lineBody.AddShape(new SphereShape(1));\n        lineBody.MotionType = MotionType.Static;\n\n        var body = world.CreateRigidBody();\n        body.AddShape(new SphereShape(1));\n        body.Position = new JVector(0, 3, 2);\n\n        var pointOnLine = world.CreateConstraint<PointOnLine>(lineBody, body);\n        pointOnLine.Initialize(JVector.UnitX, JVector.Zero, body.Position, LinearLimit.Full);\n\n        var before = MathR.Sqrt(body.Position.Y * body.Position.Y + body.Position.Z * body.Position.Z);\n        Helper.AdvanceWorld(world, 2, 1f / 100f, true);\n        var after = MathR.Sqrt(body.Position.Y * body.Position.Y + body.Position.Z * body.Position.Z);\n\n        Assert.That(after, Is.LessThan(before));\n        Assert.That(after, Is.LessThan((Real)2.1));\n        Assert.That(pointOnLine.Impulse.Length(), Is.GreaterThan((Real)0.0));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void HingeAngle_WorksInDeterministicSolver()\n    {\n        static Real Run(bool constrained)\n        {\n            var world = new World\n            {\n                Gravity = JVector.Zero,\n                AllowDeactivation = false,\n                SubstepCount = 4,\n                SolveMode = SolveMode.Deterministic\n            };\n\n            var body = world.CreateRigidBody();\n            body.AddShape(new SphereShape(1));\n\n            if (constrained)\n            {\n                var hinge = world.CreateConstraint<HingeAngle>(world.NullBody, body);\n                hinge.Initialize(JVector.UnitY, AngularLimit.FromDegree(-10, 10));\n            }\n\n            body.AngularVelocity = new JVector(0, (Real)8.0, 0);\n            for (int i = 0; i < 10; i++)\n            {\n                world.Step(1f / 100f, true);\n            }\n\n            var clampedW = Math.Clamp(MathR.Abs(body.Orientation.W), (Real)0.0, (Real)1.0);\n            var angle = (Real)2.0 * MathR.Acos(clampedW);\n            world.Dispose();\n            return angle;\n        }\n\n        var unconstrained = Run(false);\n        var constrained = Run(true);\n\n        Assert.That(unconstrained, Is.GreaterThan((Real)0.4));\n        Assert.That(constrained, Is.LessThan(unconstrained));\n        Assert.That(constrained, Is.LessThan((Real)0.4));\n    }\n}\n"
  },
  {
    "path": "src/JitterTests/Helper.cs",
    "content": "namespace JitterTests;\n\npublic static class Helper\n{\n    public static void AdvanceWorld(World world, int seconds, Real dt, bool multiThread)\n    {\n        int total = (int)(seconds / dt);\n        for (int i = 0; i < total; i++)\n            world.Step(dt, multiThread);\n    }\n\n    public static RigidBody BuildTower(World world, JVector pos, int size = 40)\n    {\n        JQuaternion halfRotationStep = JQuaternion.CreateRotationY(MathR.PI * (Real)(2.0 / 64.0));\n        JQuaternion fullRotationStep = halfRotationStep * halfRotationStep;\n        JQuaternion orientation = JQuaternion.Identity;\n\n        RigidBody last = null!;\n\n        for (int e = 0; e < size; e++)\n        {\n            orientation *= halfRotationStep;\n\n            for (int i = 0; i < 32; i++)\n            {\n                JVector position = pos + JVector.Transform(\n                    new JVector(0, (Real)0.5 + e, (Real)19.5), orientation);\n\n                var shape = new BoxShape(3f, 1, (Real)0.5);\n\n                last = world.CreateRigidBody();\n\n                last.Orientation = orientation;\n                last.Position = position;\n                last.AddShape(shape);\n\n                orientation *= fullRotationStep;\n\n                if (e == 0) last.MotionType = MotionType.Static;\n            }\n        }\n\n        return last;\n    }\n\n    public static RigidBody BuildSimpleStack(World world, int size = 12)\n    {\n        RigidBody last = null!;\n\n        for (int i = 0; i < size; i++)\n        {\n            last = world.CreateRigidBody();\n            last.Position = new JVector(0, (Real)0.5 + i * (Real)0.99, 0);\n            last.AddShape(new BoxShape(1));\n            last.Damping = ((Real)0.998, (Real)0.998);\n\n            if (i == 0) last.MotionType = MotionType.Static;\n        }\n\n        return last;\n    }\n\n    public static RigidBody BuildPyramidBox(World world, JVector position, int size = 20)\n    {\n        RigidBody last = null!;\n        for (int i = 0; i < size; i++)\n        {\n            for (int e = i; e < size; e++)\n            {\n                last = world.CreateRigidBody();\n                last.Position = position + new JVector((e - i * (Real)0.5) * (Real)1.01, (Real)0.5 + i * (Real)1.0, (Real)0.0);\n                var shape = new BoxShape(1);\n                last.AddShape(shape);\n\n                if (i == 0) last.MotionType = MotionType.Static;\n            }\n        }\n\n        return last;\n    }\n\n    public static RigidBody BuildPyramidCylinder(World world, JVector position, int size = 20)\n    {\n        RigidBody last = null!;\n        for (int i = 0; i < size; i++)\n        {\n            for (int e = i; e < size; e++)\n            {\n                last = world.CreateRigidBody();\n                last.Position = position + new JVector((e - i * (Real)0.5) * (Real)1.01, (Real)0.5 + i * (Real)1.0, (Real)0.0);\n                var shape = new CylinderShape((Real)1.0, (Real)0.5);\n                last.AddShape(shape);\n\n                if (i == 0) last.MotionType = MotionType.Static;\n            }\n        }\n\n        return last;\n    }\n}"
  },
  {
    "path": "src/JitterTests/JitterTests.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n    <PropertyGroup>\n        <TargetFramework>net10.0</TargetFramework>\n        <ImplicitUsings>enable</ImplicitUsings>\n        <Nullable>enable</Nullable>\n        <IsPackable>false</IsPackable>\n    </PropertyGroup>\n\n    <PropertyGroup Condition=\"'$(DoublePrecision)' == 'true'\">\n        <DefineConstants>$(DefineConstants);USE_DOUBLE_PRECISION</DefineConstants>\n    </PropertyGroup>\n\n    <ItemGroup>\n        <PackageReference Include=\"JunitXml.TestLogger\" Version=\"4.1.0\" />\n        <PackageReference Include=\"Microsoft.NET.Test.Sdk\" Version=\"17.12.0\" />\n        <PackageReference Include=\"NUnit\" Version=\"4.2.2\"/>\n        <PackageReference Include=\"NUnit3TestAdapter\" Version=\"4.6.0\"/>\n        <PackageReference Include=\"NUnit.Analyzers\" Version=\"4.4.0\">\n          <PrivateAssets>all</PrivateAssets>\n          <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>\n        </PackageReference>\n        <PackageReference Include=\"coverlet.collector\" Version=\"6.0.2\">\n          <PrivateAssets>all</PrivateAssets>\n          <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>\n        </PackageReference>\n    </ItemGroup>\n\n    <ItemGroup>\n        <ProjectReference Include=\"..\\Jitter2\\Jitter2.csproj\"/>\n    </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "src/JitterTests/Regression/CollisionManifoldTests.cs",
    "content": "namespace JitterTests.Regression;\n\npublic class CollisionManifoldTests\n{\n    private static CollisionManifold BuildManifold<Ta, Tb>(in Ta shapeA, in Tb shapeB,\n        in JQuaternion orientationA, in JQuaternion orientationB,\n        in JVector positionA, in JVector positionB,\n        out JVector pointA, out JVector pointB, out JVector normal, out Real penetration)\n        where Ta : ISupportMappable where Tb : ISupportMappable\n    {\n        bool hit = NarrowPhase.Collision(shapeA, shapeB, orientationA, orientationB, positionA, positionB,\n            out pointA, out pointB, out normal, out penetration);\n\n        Assert.That(hit, Is.True);\n\n        CollisionManifold manifold = default;\n        manifold.BuildManifold(shapeA, shapeB, orientationA, orientationB, positionA, positionB, pointA, pointB, normal);\n\n        return manifold;\n    }\n\n    private static void AssertUniqueContacts(CollisionManifold manifold, Real epsilonSq)\n    {\n        for (int i = 0; i < manifold.Count; i++)\n        {\n            for (int j = i + 1; j < manifold.Count; j++)\n            {\n                Assert.That((manifold.ManifoldA[i] - manifold.ManifoldA[j]).LengthSquared(), Is.GreaterThan(epsilonSq));\n            }\n        }\n    }\n\n    [TestCase]\n    public void EqualFaceBoxes_ProduceFourCornerContacts()\n    {\n        BoxShape shapeA = new BoxShape(new JVector(2, 2, 2));\n        BoxShape shapeB = new BoxShape(new JVector(2, 2, 2));\n\n        CollisionManifold manifold = BuildManifold(shapeA, shapeB,\n            JQuaternion.Identity, JQuaternion.Identity,\n            JVector.Zero, new JVector(0, (Real)1.9, 0),\n            out _, out _, out JVector normal, out Real penetration);\n\n        const Real epsilon = (Real)1e-4;\n\n        Assert.That(manifold.Count, Is.EqualTo(4));\n        AssertUniqueContacts(manifold, epsilon * epsilon);\n\n        for (int i = 0; i < manifold.Count; i++)\n        {\n            JVector mfA = manifold.ManifoldA[i];\n            JVector mfB = manifold.ManifoldB[i];\n\n            Assert.That(MathR.Abs(mfA.Y - (Real)1.0), Is.LessThan(epsilon));\n            Assert.That(MathR.Abs(mfB.Y - (Real)0.9), Is.LessThan(epsilon));\n            Assert.That(MathR.Abs(MathR.Abs(mfA.X) - (Real)1.0), Is.LessThan(epsilon));\n            Assert.That(MathR.Abs(MathR.Abs(mfA.Z) - (Real)1.0), Is.LessThan(epsilon));\n            Assert.That(MathR.Abs(JVector.Dot(mfA - mfB, normal) - penetration), Is.LessThan(epsilon));\n        }\n    }\n\n    [TestCase]\n    public void RotatedFaceBoxes_IncludeIntersectionVertices()\n    {\n        BoxShape shapeA = new BoxShape(new JVector(2, 2, 2));\n        BoxShape shapeB = new BoxShape(new JVector(2, 2, 2));\n\n        JQuaternion orientationB = JQuaternion.CreateRotationY((Real)(MathR.PI / 4.0));\n\n        CollisionManifold manifold = BuildManifold(shapeA, shapeB,\n            JQuaternion.Identity, orientationB,\n            JVector.Zero, new JVector(0, (Real)1.9, 0),\n            out _, out _, out JVector normal, out Real penetration);\n\n        const Real epsilon = (Real)2e-4;\n\n        Assert.That(manifold.Count, Is.EqualTo(4));\n        AssertUniqueContacts(manifold, epsilon * epsilon);\n\n        for (int i = 0; i < manifold.Count; i++)\n        {\n            JVector mfA = manifold.ManifoldA[i];\n            JVector mfB = manifold.ManifoldB[i];\n\n            Assert.That(MathR.Abs(mfA.Y - (Real)1.0), Is.LessThan(epsilon));\n            Assert.That(MathR.Abs(JVector.Dot(mfA - mfB, normal) - penetration), Is.LessThan(epsilon));\n\n            Assert.That(MathR.Abs(mfA.X), Is.LessThanOrEqualTo((Real)1.0 + epsilon));\n            Assert.That(MathR.Abs(mfA.Z), Is.LessThanOrEqualTo((Real)1.0 + epsilon));\n\n            JVector localB = mfB - new JVector(0, (Real)1.9, 0);\n            JVector.ConjugatedTransform(localB, orientationB, out localB);\n\n            Assert.That(MathR.Abs(localB.Y + (Real)1.0), Is.LessThan(epsilon));\n            Assert.That(MathR.Abs(localB.X), Is.LessThanOrEqualTo((Real)1.0 + epsilon));\n            Assert.That(MathR.Abs(localB.Z), Is.LessThanOrEqualTo((Real)1.0 + epsilon));\n        }\n    }\n\n    [TestCase]\n    public void BoxFaceAndRidge_ProduceLineSegmentEndpoints()\n    {\n        SupportPrimitives.Box shapeA = SupportPrimitives.CreateBox(new JVector(2, 2, 2));\n        VertexSupportMap shapeB =\n            new([\n                new JVector(-2, -1, 0),\n                new JVector(2, -1, 0),\n                new JVector(-2, 1, -1),\n                new JVector(2, 1, -1),\n                new JVector(-2, 1, 1),\n                new JVector(2, 1, 1)\n            ]);\n\n        CollisionManifold manifold = default;\n        manifold.BuildManifold(shapeA, shapeB,\n            JQuaternion.Identity, JQuaternion.Identity,\n            JVector.Zero, new JVector(0, (Real)2.9, 0),\n            new JVector(0, (Real)2.0, 0), new JVector(0, (Real)1.9, 0), JVector.UnitY);\n\n        const Real epsilon = (Real)1e-4;\n\n        Assert.That(manifold.Count, Is.EqualTo(2));\n        AssertUniqueContacts(manifold, epsilon * epsilon);\n\n        for (int i = 0; i < manifold.Count; i++)\n        {\n            JVector mfA = manifold.ManifoldA[i];\n            JVector mfB = manifold.ManifoldB[i];\n\n            Assert.That(MathR.Abs(mfA.Y - (Real)2.0), Is.LessThan(epsilon));\n            Assert.That(MathR.Abs(mfB.Y - (Real)1.9), Is.LessThan(epsilon));\n            Assert.That(MathR.Abs(MathR.Abs(mfA.X) - (Real)2.0), Is.LessThan(epsilon));\n            Assert.That(MathR.Abs(mfA.Z), Is.LessThan(epsilon));\n            Assert.That(MathR.Abs(mfB.Z), Is.LessThan(epsilon));\n        }\n    }\n}\n"
  },
  {
    "path": "src/JitterTests/Regression/HistoricalRegressionTests.cs",
    "content": "using Jitter2.Dynamics.Constraints;\n\nnamespace JitterTests.Regression;\n\npublic class HistoricalRegressionTests\n{\n    [TestCase]\n    public void Velocity_SetToZero_OnSleepingBody_DoesNotWakeBody_ButStoresZero()\n    {\n        var world = new World\n        {\n            Gravity = JVector.Zero\n        };\n\n        var body = world.CreateRigidBody();\n        body.AddShape(new SphereShape(1));\n        body.DeactivationTime = TimeSpan.FromSeconds(1);\n        body.DeactivationThreshold = ((Real)10.0, (Real)10.0);\n        body.Velocity = new JVector(1, 0, 0);\n\n        Helper.AdvanceWorld(world, 2, 1f / 100f, false);\n        Assert.That(body.IsActive, Is.False);\n\n        body.Velocity = JVector.Zero;\n\n        Assert.That(body.Velocity, Is.EqualTo(JVector.Zero));\n        Assert.That(body.IsActive, Is.False);\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void AngularVelocity_SetToZero_OnSleepingBody_DoesNotWakeBody_ButStoresZero()\n    {\n        var world = new World\n        {\n            Gravity = JVector.Zero\n        };\n\n        var body = world.CreateRigidBody();\n        body.AddShape(new SphereShape(1));\n        body.DeactivationTime = TimeSpan.FromSeconds(1);\n        body.DeactivationThreshold = ((Real)10.0, (Real)10.0);\n        body.AngularVelocity = new JVector(0, 1, 0);\n\n        Helper.AdvanceWorld(world, 2, 1f / 100f, false);\n        Assert.That(body.IsActive, Is.False);\n\n        body.AngularVelocity = JVector.Zero;\n\n        Assert.That(body.AngularVelocity, Is.EqualTo(JVector.Zero));\n        Assert.That(body.IsActive, Is.False);\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void ConeLimit_Limit_RoundTripsAngles()\n    {\n        var world = new World();\n        var bodyA = world.CreateRigidBody();\n        var bodyB = world.CreateRigidBody();\n\n        var cone = world.CreateConstraint<ConeLimit>(bodyA, bodyB);\n        var expected = AngularLimit.FromDegree(15, 60);\n        cone.Initialize(JVector.UnitY, expected);\n\n        var actual = cone.Limit;\n\n        Assert.That(actual.From.Radian, Is.EqualTo(expected.From.Radian).Within((Real)1e-5));\n        Assert.That(actual.To.Radian, Is.EqualTo(expected.To.Radian).Within((Real)1e-5));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void ConeLimit_Limit_UpperBoundAbovePi_Throws()\n    {\n        var world = new World();\n        var bodyA = world.CreateRigidBody();\n        var bodyB = world.CreateRigidBody();\n\n        var cone = world.CreateConstraint<ConeLimit>(bodyA, bodyB);\n        cone.Initialize(JVector.UnitY, AngularLimit.FromDegree(0, 45));\n\n        Assert.Throws<ArgumentOutOfRangeException>(() =>\n            cone.Limit = new AngularLimit(JAngle.FromRadian((Real)0.0), JAngle.FromRadian((Real)(MathR.PI + 0.1))));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void TwistAngle_Initialize_WithPureSwing_StartsAtZeroTwist()\n    {\n        var world = new World();\n\n        var bodyA = world.CreateRigidBody();\n        bodyA.AddShape(new SphereShape(1));\n\n        var bodyB = world.CreateRigidBody();\n        bodyB.AddShape(new SphereShape(1));\n        bodyB.Orientation = JQuaternion.CreateRotationX((Real)(MathR.PI / 2.0));\n\n        var twist = world.CreateConstraint<TwistAngle>(bodyA, bodyB);\n        twist.Initialize(JVector.UnitY, JVector.UnitZ);\n\n        Assert.That(twist.Angle.Radian, Is.EqualTo((Real)0.0).Within((Real)1e-5));\n        world.Dispose();\n    }\n}\n"
  },
  {
    "path": "src/JitterTests/Regression/PersistentContactManifoldSelectionTests.cs",
    "content": "namespace JitterTests.Regression;\n\npublic class PersistentContactManifoldSelectionTests\n{\n    private static void CreateRotatedFaceContactScenario(World world,\n        out RigidBody bodyA, out RigidBody bodyB, out BoxShape shapeA, out BoxShape shapeB,\n        out CollisionManifold manifold, out JVector normal)\n    {\n        bodyA = world.CreateRigidBody();\n        bodyA.Position = JVector.Zero;\n        shapeA = new BoxShape(new JVector(2, 2, 2));\n        bodyA.AddShape(shapeA);\n\n        bodyB = world.CreateRigidBody();\n        bodyB.Position = new JVector(0, (Real)1.9, 0);\n        bodyB.Orientation = JQuaternion.CreateRotationY((Real)(MathR.PI / 4.0));\n        shapeB = new BoxShape(new JVector(2, 2, 2));\n        bodyB.AddShape(shapeB);\n\n        bool hit = NarrowPhase.Collision(shapeA, shapeB, bodyA.Orientation, bodyB.Orientation, bodyA.Position, bodyB.Position,\n            out JVector pointA, out JVector pointB, out normal, out _);\n\n        Assert.That(hit, Is.True);\n\n        manifold = default;\n        manifold.BuildManifold(shapeA, shapeB, pointA, pointB, normal);\n    }\n\n    private static CollisionManifold RotateManifold(CollisionManifold manifold, int offset)\n    {\n        int count = manifold.Count;\n\n        CollisionManifold rotated = manifold;\n        JVector[] pointsA = new JVector[count];\n        JVector[] pointsB = new JVector[count];\n\n        for (int i = 0; i < count; i++)\n        {\n            pointsA[i] = manifold.ManifoldA[i];\n            pointsB[i] = manifold.ManifoldB[i];\n        }\n\n        for (int i = 0; i < count; i++)\n        {\n            rotated.ManifoldA[i] = pointsA[(i + offset) % count];\n            rotated.ManifoldB[i] = pointsB[(i + offset) % count];\n        }\n\n        return rotated;\n    }\n\n    private static List<JVector> GetWorldContactPositions(Arbiter arbiter)\n    {\n        return GetWorldContactPositions(arbiter.Handle.Data, arbiter.Body1.Position);\n    }\n\n    private static List<JVector> GetWorldContactPositions(ContactData data, in JVector bodyPosition)\n    {\n        List<JVector> contacts = [];\n\n        if ((data.UsageMask & ContactData.MaskContact0) != 0)\n        {\n            contacts.Add(data.Contact0.RelativePosition1 + bodyPosition);\n        }\n\n        if ((data.UsageMask & ContactData.MaskContact1) != 0)\n        {\n            contacts.Add(data.Contact1.RelativePosition1 + bodyPosition);\n        }\n\n        if ((data.UsageMask & ContactData.MaskContact2) != 0)\n        {\n            contacts.Add(data.Contact2.RelativePosition1 + bodyPosition);\n        }\n\n        if ((data.UsageMask & ContactData.MaskContact3) != 0)\n        {\n            contacts.Add(data.Contact3.RelativePosition1 + bodyPosition);\n        }\n\n        return contacts;\n    }\n\n    private static void AssertSamePointSet(IReadOnlyList<JVector> expected, IReadOnlyList<JVector> actual, Real epsilonSq)\n    {\n        Assert.That(actual, Has.Count.EqualTo(expected.Count));\n\n        bool[] matched = new bool[actual.Count];\n\n        foreach (JVector expectedPoint in expected)\n        {\n            int match = -1;\n\n            for (int i = 0; i < actual.Count; i++)\n            {\n                if (matched[i]) continue;\n                if ((actual[i] - expectedPoint).LengthSquared() > epsilonSq) continue;\n\n                match = i;\n                break;\n            }\n\n            Assert.That(match, Is.GreaterThanOrEqualTo(0));\n            matched[match] = true;\n        }\n    }\n\n    [Test]\n    public void RegisterContact_PreservesSameFourContactsRegardlessOfIncomingManifoldOrder()\n    {\n        using var worldA = new World();\n        using var worldB = new World();\n\n        CreateRotatedFaceContactScenario(worldA, out RigidBody bodyA0, out RigidBody bodyB0, out BoxShape shapeA0, out BoxShape shapeB0,\n            out CollisionManifold manifoldA, out JVector normalA);\n        CreateRotatedFaceContactScenario(worldB, out RigidBody bodyA1, out RigidBody bodyB1, out BoxShape shapeA1, out BoxShape shapeB1,\n            out CollisionManifold manifoldB, out JVector normalB);\n\n        Assert.That(manifoldA.Count, Is.EqualTo(4));\n\n        CollisionManifold rotated = RotateManifold(manifoldB, 2);\n\n        worldA.RegisterContact(shapeA0.ShapeId, shapeB0.ShapeId, bodyA0, bodyB0, normalA, ref manifoldA);\n        worldB.RegisterContact(shapeA1.ShapeId, shapeB1.ShapeId, bodyA1, bodyB1, normalB, ref rotated);\n\n        Assert.That(worldA.GetArbiter(shapeA0.ShapeId, shapeB0.ShapeId, out Arbiter? arbiterA), Is.True);\n        Assert.That(worldB.GetArbiter(shapeA1.ShapeId, shapeB1.ShapeId, out Arbiter? arbiterB), Is.True);\n\n        List<JVector> contactsA = GetWorldContactPositions(arbiterA!);\n        List<JVector> contactsB = GetWorldContactPositions(arbiterB!);\n\n        Assert.That(contactsA, Has.Count.EqualTo(4));\n        Assert.That(contactsB, Has.Count.EqualTo(4));\n        AssertSamePointSet(contactsA, contactsB, (Real)1e-8);\n    }\n\n    [Test]\n    public void RegisterContact_PreservesBuildManifoldContactsWhenAlreadyReduced()\n    {\n        using var world = new World();\n\n        CreateRotatedFaceContactScenario(world, out RigidBody bodyA, out RigidBody bodyB, out BoxShape shapeA, out BoxShape shapeB,\n            out CollisionManifold manifold, out JVector normal);\n\n        Assert.That(manifold.Count, Is.EqualTo(4));\n\n        List<JVector> expected = [];\n\n        for (int i = 0; i < manifold.Count; i++)\n        {\n            expected.Add(manifold.ManifoldA[i]);\n        }\n\n        world.RegisterContact(shapeA.ShapeId, shapeB.ShapeId, bodyA, bodyB, normal, ref manifold);\n\n        Assert.That(world.GetArbiter(shapeA.ShapeId, shapeB.ShapeId, out Arbiter? arbiter), Is.True);\n\n        List<JVector> actual = GetWorldContactPositions(arbiter!);\n\n        Assert.That(actual, Has.Count.EqualTo(4));\n        AssertSamePointSet(expected, actual, (Real)1e-8);\n    }\n\n    [Test]\n    public void AddContact_WhenCacheIsFull_ReusesMatchingContactInsteadOfReplacingAnotherSlot()\n    {\n        using var world = new World();\n\n        var bodyA = world.CreateRigidBody();\n        var bodyB = world.CreateRigidBody();\n\n        ContactData data = default;\n        data.Init(bodyA, bodyB);\n\n        JVector normal = new JVector(0, 1, 0);\n        JVector[] points =\n        [\n            new JVector(-1, 0, -1),\n            new JVector(1, 0, -1),\n            new JVector(1, 0, 1),\n            new JVector(-1, 0, 1)\n        ];\n\n        foreach (JVector point in points)\n        {\n            data.AddContact(point, point - (Real)0.1 * normal, normal);\n        }\n\n        List<JVector> original = GetWorldContactPositions(data, bodyA.Position);\n\n        data.AddContact(points[1], points[1] - (Real)0.1 * normal, normal);\n\n        List<JVector> updated = GetWorldContactPositions(data, bodyA.Position);\n\n        Assert.That(updated, Has.Count.EqualTo(4));\n        AssertSamePointSet(original, updated, (Real)1e-10);\n    }\n}\n"
  },
  {
    "path": "src/JitterTests/Robustness/DisposedWorldTests.cs",
    "content": "using Jitter2.Dynamics.Constraints;\n\nnamespace JitterTests.Robustness;\n\npublic class DisposedWorldTests\n{\n    [TestCase]\n    public void Step_AfterDispose_ThrowsObjectDisposedException()\n    {\n        var world = new World();\n        world.Dispose();\n\n        Assert.Throws<ObjectDisposedException>(() => world.Step(1f / 60f, false));\n    }\n\n    [TestCase]\n    public void CreateRigidBody_AfterDispose_ThrowsObjectDisposedException()\n    {\n        var world = new World();\n        world.Dispose();\n\n        Assert.Throws<ObjectDisposedException>(() => world.CreateRigidBody());\n    }\n\n    [TestCase]\n    public void CreateConstraint_AfterDispose_ThrowsObjectDisposedException()\n    {\n        var world = new World();\n        var bodyA = world.CreateRigidBody();\n        var bodyB = world.CreateRigidBody();\n        world.Dispose();\n\n        Assert.Throws<ObjectDisposedException>(() => world.CreateConstraint<BallSocket>(bodyA, bodyB));\n    }\n\n    [TestCase]\n    public void Dispose_CanBeCalledTwice()\n    {\n        var world = new World();\n\n        Assert.DoesNotThrow(() =>\n        {\n            world.Dispose();\n            world.Dispose();\n        });\n    }\n}\n"
  },
  {
    "path": "src/JitterTests/Robustness/LockTests.cs",
    "content": "using System.Threading;\nusing System.Threading.Tasks;\n\nnamespace JitterTests.Robustness\n{\n    public class LockTests\n    {\n        [Test]\n        public void TryLockThenUnlock_AllowsReacquisition()\n        {\n            var world = new World();\n            var bodyA = world.CreateRigidBody();\n            var bodyB = world.CreateRigidBody();\n\n            // First TryLock should succeed\n            bool first = World.TryLockTwoBody(ref bodyA.Data, ref bodyB.Data);\n            Assert.That(first, Is.True, \"First TryLock should succeed.\");\n\n            // Second should fail while locked\n            bool second = World.TryLockTwoBody(ref bodyA.Data, ref bodyB.Data);\n            Assert.That(second, Is.False, \"Second TryLock should fail while locked.\");\n\n            // Unlock, then it should succeed again\n            World.UnlockTwoBody(ref bodyA.Data, ref bodyB.Data);\n\n            bool third = World.TryLockTwoBody(ref bodyA.Data, ref bodyB.Data);\n            Assert.That(third, Is.True, \"TryLock should succeed after unlock.\");\n\n            World.UnlockTwoBody(ref bodyA.Data, ref bodyB.Data);\n\n            world.Dispose();\n        }\n    }\n}\n"
  },
  {
    "path": "src/JitterTests/Robustness/MotionAndPredictionTests.cs",
    "content": "namespace JitterTests.Robustness;\n\npublic class MotionAndPredictionTests\n{\n    [TestCase]\n    public void MotionType_InvalidEnum_Throws()\n    {\n        var world = new World();\n        var body = world.CreateRigidBody();\n        Assert.Throws<ArgumentOutOfRangeException>(() => body.MotionType = (MotionType)1234);\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void MotionType_SetToStatic_ZeroesVelocitiesImmediately()\n    {\n        var world = new World();\n        var body = world.CreateRigidBody();\n        body.AddShape(new SphereShape(1));\n        body.Velocity = new JVector(1, 2, 3);\n        body.AngularVelocity = new JVector(4, 5, 6);\n\n        body.MotionType = MotionType.Static;\n\n        Assert.That(body.Velocity, Is.EqualTo(JVector.Zero));\n        Assert.That(body.AngularVelocity, Is.EqualTo(JVector.Zero));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void MotionType_StaticToDynamic_RestoresConfiguredInverseMass()\n    {\n        var world = new World();\n        var body = world.CreateRigidBody();\n        body.AddShape(new SphereShape(1));\n        var expectedMass = body.Mass;\n\n        body.MotionType = MotionType.Static;\n        Assert.That(body.Data.InverseMass, Is.EqualTo((Real)0.0).Within((Real)1e-6));\n\n        body.MotionType = MotionType.Dynamic;\n\n        Assert.That(body.Mass, Is.EqualTo(expectedMass).Within((Real)1e-6));\n        Assert.That(body.Data.InverseMass, Is.EqualTo((Real)1.0 / expectedMass).Within((Real)1e-6));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void PredictPosition_UsesCurrentVelocity()\n    {\n        var world = new World();\n        var body = world.CreateRigidBody();\n        body.Position = new JVector(1, 2, 3);\n        body.Velocity = new JVector(4, 5, 6);\n\n        var predicted = body.PredictPosition((Real)0.5);\n\n        Assert.That(predicted, Is.EqualTo(new JVector(3, 4.5f, 6)));\n        Assert.That(body.Position, Is.EqualTo(new JVector(1, 2, 3)));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void PredictOrientation_UsesCurrentAngularVelocity()\n    {\n        var world = new World();\n        var body = world.CreateRigidBody();\n        body.Orientation = JQuaternion.Identity;\n        body.AngularVelocity = new JVector(0, MathF.PI, 0);\n\n        var predicted = body.PredictOrientation((Real)0.5);\n        var expected = JQuaternion.Normalize(\n            MathHelper.RotationQuaternion(body.AngularVelocity, (Real)0.5) * body.Orientation);\n\n        Assert.That(predicted.X, Is.EqualTo(expected.X).Within(1e-6f));\n        Assert.That(predicted.Y, Is.EqualTo(expected.Y).Within(1e-6f));\n        Assert.That(predicted.Z, Is.EqualTo(expected.Z).Within(1e-6f));\n        Assert.That(predicted.W, Is.EqualTo(expected.W).Within(1e-6f));\n        Assert.That(body.Orientation, Is.EqualTo(JQuaternion.Identity));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void PredictPose_ReturnsPositionAndOrientationWithoutMutatingState()\n    {\n        var world = new World();\n        var body = world.CreateRigidBody();\n        body.Position = new JVector(1, 2, 3);\n        body.Velocity = new JVector(4, 0, 0);\n        body.AngularVelocity = new JVector(0, MathF.PI, 0);\n\n        body.PredictPose((Real)0.25, out var predictedPosition, out var predictedOrientation);\n\n        var expectedPosition = body.PredictPosition((Real)0.25);\n        var expectedOrientation = body.PredictOrientation((Real)0.25);\n\n        Assert.That(predictedPosition, Is.EqualTo(expectedPosition));\n        Assert.That(predictedOrientation.X, Is.EqualTo(expectedOrientation.X).Within(1e-6f));\n        Assert.That(predictedOrientation.Y, Is.EqualTo(expectedOrientation.Y).Within(1e-6f));\n        Assert.That(predictedOrientation.Z, Is.EqualTo(expectedOrientation.Z).Within(1e-6f));\n        Assert.That(predictedOrientation.W, Is.EqualTo(expectedOrientation.W).Within(1e-6f));\n        Assert.That(body.Position, Is.EqualTo(new JVector(1, 2, 3)));\n        Assert.That(body.Velocity, Is.EqualTo(new JVector(4, 0, 0)));\n        world.Dispose();\n    }\n}\n"
  },
  {
    "path": "src/JitterTests/Robustness/MultiThreadRobustnessTests.cs",
    "content": "namespace JitterTests.Robustness;\n\npublic class MultiThreadRobustnessTests\n{\n    [TestCase]\n    public void MultiThreadedStepping_KeepsRepresentativeSceneFinite()\n    {\n        var world = new World\n        {\n            AllowDeactivation = false,\n            Gravity = new JVector(0, -10, 0),\n            SubstepCount = 4\n        };\n\n        var floor = world.CreateRigidBody();\n        floor.AddShape(new BoxShape(20, 2, 20));\n        floor.Position = new JVector(0, -1, 0);\n        floor.MotionType = MotionType.Static;\n\n        for (int i = 0; i < 6; i++)\n        {\n            var body = world.CreateRigidBody();\n            body.AddShape(new BoxShape(1));\n            body.Position = new JVector(0, i + 0.5f, 0);\n        }\n\n        for (int i = 0; i < 50; i++)\n        {\n            Assert.DoesNotThrow(() => world.Step(1f / 100f, true));\n        }\n\n        foreach (var body in world.RigidBodies)\n        {\n            Assert.That(Real.IsFinite(body.Position.X));\n            Assert.That(Real.IsFinite(body.Position.Y));\n            Assert.That(Real.IsFinite(body.Position.Z));\n            Assert.That(Real.IsFinite(body.Orientation.X));\n            Assert.That(Real.IsFinite(body.Orientation.Y));\n            Assert.That(Real.IsFinite(body.Orientation.Z));\n            Assert.That(Real.IsFinite(body.Orientation.W));\n        }\n\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void SingleAndMultiThreadedStepping_PreserveBasicSceneInvariants()\n    {\n        static (Real topY, int contactCount) Run(bool multiThread)\n        {\n            var world = new World\n            {\n                AllowDeactivation = false,\n                Gravity = new JVector(0, -10, 0),\n                SubstepCount = 4\n            };\n\n            var floor = world.CreateRigidBody();\n            floor.AddShape(new BoxShape(20, 2, 20));\n            floor.Position = new JVector(0, -1, 0);\n            floor.MotionType = MotionType.Static;\n\n            RigidBody top = null!;\n\n            for (int i = 0; i < 4; i++)\n            {\n                top = world.CreateRigidBody();\n                top.AddShape(new BoxShape(1));\n                top.Position = new JVector(0, i + 0.5f, 0);\n            }\n\n            for (int i = 0; i < 80; i++)\n            {\n                world.Step(1f / 100f, multiThread);\n            }\n\n            int totalContacts = 0;\n            foreach (var body in world.RigidBodies)\n            {\n                totalContacts += body.Contacts.Count;\n                Assert.That(Real.IsFinite(body.Position.Y));\n            }\n\n            var result = (top.Position.Y, totalContacts);\n            world.Dispose();\n            return result;\n        }\n\n        var single = Run(false);\n        var multi = Run(true);\n\n        Assert.That(single.topY, Is.GreaterThan((Real)0.0));\n        Assert.That(multi.topY, Is.GreaterThan((Real)0.0));\n        Assert.That(single.topY, Is.EqualTo(multi.topY).Within((Real)0.2));\n        Assert.That(Math.Abs(single.contactCount - multi.contactCount), Is.LessThanOrEqualTo(4));\n    }\n}\n"
  },
  {
    "path": "src/JitterTests/Robustness/NumericEdgeCaseTests.cs",
    "content": "namespace JitterTests.Robustness;\n\npublic class NumericEdgeCaseTests\n{\n    [TestCase]\n    public void Step_WithVerySmallDt_KeepsBodyStateFinite()\n    {\n        var world = new World();\n        world.AllowDeactivation = false;\n        world.Gravity = JVector.Zero;\n\n        var body = world.CreateRigidBody();\n        body.AddShape(new SphereShape(1));\n        body.Velocity = new JVector(10, 20, 30);\n        body.AngularVelocity = new JVector(4, 5, 6);\n\n        world.Step((Real)1e-9, false);\n\n        Assert.That(Real.IsFinite(body.Position.X));\n        Assert.That(Real.IsFinite(body.Position.Y));\n        Assert.That(Real.IsFinite(body.Position.Z));\n        Assert.That(Real.IsFinite(body.Velocity.X));\n        Assert.That(Real.IsFinite(body.Velocity.Y));\n        Assert.That(Real.IsFinite(body.Velocity.Z));\n        Assert.That(Real.IsFinite(body.AngularVelocity.X));\n        Assert.That(Real.IsFinite(body.AngularVelocity.Y));\n        Assert.That(Real.IsFinite(body.AngularVelocity.Z));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void TinyPositiveMass_ImpulseProducesFiniteVelocity()\n    {\n        var world = new World();\n        var body = world.CreateRigidBody();\n        body.SetMassInertia((Real)1e-6);\n\n        body.ApplyImpulse(new JVector(1, 0, 0));\n\n        Assert.That(Real.IsFinite(body.Velocity.X));\n        Assert.That(body.Velocity.X, Is.GreaterThan((Real)0.0));\n        world.Dispose();\n    }\n\n    [TestCase]\n    public void LargePosition_StepKeepsPositionFinite()\n    {\n        var world = new World();\n        world.Gravity = JVector.Zero;\n\n        var body = world.CreateRigidBody();\n        body.AddShape(new SphereShape(1));\n        body.Position = new JVector((Real)1e6, (Real)(-1e6), (Real)1e6);\n        body.Velocity = new JVector(100, -50, 25);\n\n        world.Step(1f / 60f, false);\n\n        Assert.That(Real.IsFinite(body.Position.X));\n        Assert.That(Real.IsFinite(body.Position.Y));\n        Assert.That(Real.IsFinite(body.Position.Z));\n        world.Dispose();\n    }\n}\n"
  },
  {
    "path": "src/JitterTests/Robustness/ParallelTests.cs",
    "content": "using System.Diagnostics;\nusing Parallel = Jitter2.Parallelization.Parallel;\nusing ReaderWriterLock = Jitter2.Parallelization.ReaderWriterLock;\nusing ThreadPool = Jitter2.Parallelization.ThreadPool;\n\nnamespace JitterTests.Robustness;\n\npublic class ParallelTests\n{\n    private static volatile int current;\n\n    [TestCase]\n    public static void ReaderWriterLockTest()\n    {\n        ReaderWriterLock rwl = new();\n\n        int[] test = new int[40];\n        List<Task> tasks = new();\n\n        // 4 readers\n        for (int i = 0; i < 4; i++)\n        {\n            tasks.Add(Task.Run(() =>\n            {\n                Stopwatch sw = Stopwatch.StartNew();\n                while (true)\n                {\n                    if (sw.ElapsedMilliseconds > 1000) break;\n                    rwl.EnterReadLock();\n                    test[current]++;\n                    rwl.ExitReadLock();\n                }\n            }));\n        }\n\n        // 1 writer\n        tasks.Add(Task.Run(() =>\n        {\n            Stopwatch sw = Stopwatch.StartNew();\n            while (true)\n            {\n                if (sw.ElapsedMilliseconds > 1000) break;\n                Thread.Sleep(10);\n                rwl.EnterWriteLock();\n                test[current] = 0;\n                current = (current + 1) % test.Length;\n                rwl.ExitWriteLock();\n            }\n        }));\n\n        Task.WaitAll(tasks.ToArray());\n        test[current] = 0;\n\n        for (int i = 0; i < test.Length; i++)\n        {\n            Assert.That(test[i], Is.EqualTo(0));\n        }\n    }\n}\n"
  },
  {
    "path": "src/JitterTests/Robustness/ReproducibilityTest.cs",
    "content": "using System.Runtime.Intrinsics;\n\n#if USE_DOUBLE_PRECISION\nusing VectorReal = System.Runtime.Intrinsics.Vector256<double>;\n#else\nusing VectorReal = System.Runtime.Intrinsics.Vector128<float>;\n#endif\n\nnamespace JitterTests.Robustness;\n\npublic class ReproducibilityTest\n{\n    private const ulong ExpectedDeterministicSceneHashSingle = 0x611661E0B4727A69;\n    private const ulong ExpectedDeterministicSceneHashDouble = 0x0EC1D25D2C6D8C4E;\n\n    [TestCase]\n    public static void BasicReproducibilityTest()\n    {\n        // This is intentionally a single-threaded reproducibility check on the regular solver.\n        // Given the exact same input/world construction order, the engine should still produce\n        // the same result. The main purpose is to catch hidden state such as uninitialized\n        // memory, stale pooled data, or similar history-dependent bugs.\n        var worldA = new World();\n        worldA.SolverIterations = (2, 2);\n        var last = Helper.BuildSimpleStack(worldA);\n        Helper.AdvanceWorld(worldA, 10, (Real)(1.0 / 100.0), false);\n        worldA.Remove(last);\n        Helper.BuildSimpleStack(worldA);\n        Helper.AdvanceWorld(worldA, 10, (Real)(1.0 / 100.0), false);\n        worldA.Clear();\n        last = Helper.BuildSimpleStack(worldA);\n        last.Velocity = new JVector(10);\n        Helper.AdvanceWorld(worldA, 10, (Real)(1.0 / 100.0), false);\n\n        var worldB = new World();\n        worldB.SolverIterations = (2, 2);\n        last = Helper.BuildSimpleStack(worldB);\n        Helper.AdvanceWorld(worldB, 10, (Real)(1.0 / 100.0), false);\n        worldB.Remove(last);\n        Helper.BuildSimpleStack(worldB);\n        Helper.AdvanceWorld(worldB, 10, (Real)(1.0 / 100.0), false);\n        worldB.Clear();\n        last = Helper.BuildSimpleStack(worldB);\n        last.Velocity = new JVector(10);\n        Helper.AdvanceWorld(worldB, 10, (Real)(1.0 / 100.0), false);\n\n        var positionsA = worldA.RigidBodies.Select(body => body.Position);\n        var positionsB = worldB.RigidBodies.Select(body => body.Position);\n\n        Assert.That(positionsA.SequenceEqual(positionsB));\n\n        worldA.Dispose();\n        worldB.Dispose();\n    }\n\n    [Test]\n    public static void SingleContactMatchesWithAndWithoutContactSimd()\n    {\n        using var simdWorld = new World();\n        using var scalarWorld = new World();\n\n        var (simdBody1, simdBody2, simdContact) = CreateSingleContactCase(simdWorld);\n        var (scalarBody1, scalarBody2, scalarContact) = CreateSingleContactCase(scalarWorld);\n\n        const Real dt = (Real)(1.0 / 100.0);\n        Real idt = (Real)1.0 / dt;\n\n        simdContact.PrepareForIterationAccelerated(idt);\n        scalarContact.PrepareForIterationScalar(idt);\n\n        AssertSolverStateEqual(simdContact, scalarContact, simdBody1, scalarBody1, simdBody2, scalarBody2, \"prepare\");\n\n        for (int i = 0; i < 8; i++)\n        {\n            simdContact.IterateAccelerated(true);\n            scalarContact.IterateScalar(true);\n        }\n\n        for (int i = 0; i < 4; i++)\n        {\n            simdContact.IterateAccelerated(false);\n            scalarContact.IterateScalar(false);\n        }\n\n        AssertSolverStateEqual(simdContact, scalarContact, simdBody1, scalarBody1, simdBody2, scalarBody2, \"solve\");\n    }\n\n    [Test]\n    public static void DeterministicScene_MatchesAcrossThreadingForTwentySeconds()\n    {\n        const Real dt = (Real)(1.0 / 100.0);\n        const int totalSteps = 2000;\n\n        using var singleThreadWorld = CreateDeterministicSleepingWorld();\n        var singleThreadBodies = BuildDeterministicScene(singleThreadWorld);\n\n        using var multiThreadWorld = CreateDeterministicSleepingWorld();\n        var multiThreadBodies = BuildDeterministicScene(multiThreadWorld);\n\n        bool sawSleepingBodies = false;\n\n        for (int step = 1; step <= totalSteps; step++)\n        {\n            singleThreadWorld.Step(dt, false);\n            multiThreadWorld.Step(dt, true);\n\n            AssertIslandActivationInvariant(singleThreadWorld, step, \"single-thread\");\n            AssertIslandActivationInvariant(multiThreadWorld, step, \"multi-thread\");\n            AssertBodyStatesEqual(singleThreadBodies, multiThreadBodies, step);\n            sawSleepingBodies |= singleThreadBodies.Any(body => body.Data.MotionType == MotionType.Dynamic && !body.IsActive);\n        }\n\n        Assert.That(sawSleepingBodies, Is.True,\n            \"At least one dynamic body should go to sleep during the repro.\");\n\n        ulong singleThreadHash = HashPositions(singleThreadBodies);\n        ulong multiThreadHash = HashPositions(multiThreadBodies);\n\n        Assert.That(singleThreadHash, Is.EqualTo(multiThreadHash),\n            $\"Position hash mismatch: single-thread=0x{singleThreadHash:X16}, multi-thread=0x{multiThreadHash:X16}.\");\n\n        ulong expectedHash = Precision.IsDoublePrecision\n            ? ExpectedDeterministicSceneHashDouble\n            : ExpectedDeterministicSceneHashSingle;\n\n        Assert.That(singleThreadHash, Is.EqualTo(expectedHash),\n            $\"Expected position hash 0x{expectedHash:X16}, actual 0x{singleThreadHash:X16}.\");\n    }\n\n    [Test]\n    public static void DeterministicRagdollSceneIsIndependentOfPreviousRagdollBuild()\n    {\n        const Real dt = (Real)(1.0 / 100.0);\n        const int steps = 600;\n\n        using var freshWorld = new World\n        {\n            SolveMode = SolveMode.Deterministic\n        };\n\n        IReadOnlyList<RigidBody> freshBodies = BuildRagdollDropScene(freshWorld);\n\n        using var rebuiltWorld = new World\n        {\n            SolveMode = SolveMode.Deterministic\n        };\n\n        BuildRagdollDropScene(rebuiltWorld);\n        rebuiltWorld.Clear();\n        IReadOnlyList<RigidBody> rebuiltBodies = BuildRagdollDropScene(rebuiltWorld);\n\n        for (int i = 0; i < steps; i++)\n        {\n            freshWorld.Step(dt, false);\n            rebuiltWorld.Step(dt, false);\n        }\n\n        Assert.That(HashPositions(rebuiltBodies), Is.EqualTo(HashPositions(freshBodies)));\n    }\n\n    private static (RigidBody body1, RigidBody body2, ContactData contact) CreateSingleContactCase(World world)\n    {\n        RigidBody body1 = world.CreateRigidBody();\n        body1.AddShape(new BoxShape((Real)1.1, (Real)0.9, (Real)1.3));\n        body1.SetMassInertia((Real)2.0);\n        body1.Position = new JVector((Real)(-0.35), (Real)0.7, (Real)0.1);\n        body1.Orientation = JQuaternion.CreateFromAxisAngle(\n            JVector.Normalize(new JVector((Real)1.0, (Real)2.0, (Real)(-1.0))), (Real)0.35);\n        body1.Velocity = new JVector((Real)1.5, (Real)(-0.35), (Real)0.8);\n        body1.AngularVelocity = new JVector((Real)0.2, (Real)(-1.1), (Real)0.45);\n        body1.Friction = (Real)0.65;\n        body1.Restitution = (Real)0.15;\n\n        RigidBody body2 = world.CreateRigidBody();\n        body2.AddShape(new BoxShape((Real)0.8, (Real)1.4, (Real)1.0));\n        body2.SetMassInertia((Real)3.5);\n        body2.Position = new JVector((Real)0.25, (Real)(-0.15), (Real)0.45);\n        body2.Orientation = JQuaternion.CreateRotationZ((Real)(-0.25)) * JQuaternion.CreateRotationX((Real)0.4);\n        body2.Velocity = new JVector((Real)(-0.9), (Real)0.55, (Real)(-1.2));\n        body2.AngularVelocity = new JVector((Real)(-0.6), (Real)0.3, (Real)1.4);\n        body2.Friction = (Real)0.8;\n        body2.Restitution = (Real)0.05;\n\n        JVector normal = JVector.Normalize(new JVector((Real)0.35, (Real)0.91, (Real)(-0.21)));\n        JVector point1 = body1.Position + new JVector((Real)0.19, (Real)(-0.27), (Real)0.11);\n        JVector point2 = point1 - (Real)0.025 * normal;\n\n        ContactData contact = default;\n        contact.Init(body1, body2);\n        contact.ResetMode();\n        contact.Contact0.Initialize(ref body1.Data, ref body2.Data, point1, point2, normal, true, contact.Restitution);\n        contact.UsageMask = ContactData.MaskContact0;\n\n        return (body1, body2, contact);\n    }\n\n    private static IReadOnlyList<RigidBody> BuildRagdollDropScene(World world)\n    {\n        var bodies = new List<RigidBody>();\n\n        RigidBody floor = world.CreateRigidBody();\n        floor.Position = new JVector(0, -100, 0);\n        floor.MotionType = MotionType.Static;\n        floor.AddShape(new BoxShape(200, 200, 200));\n        bodies.Add(floor);\n\n        for (int i = 0; i < 5; i++)\n        {\n            BuildRagdoll(world, new JVector(0, 3 + 2 * i, 0), bodies);\n        }\n\n        world.SolverIterations = (8, 4);\n\n        return bodies;\n    }\n\n    private static void BuildRagdoll(World world, JVector position, List<RigidBody>? bodies = null)\n    {\n        const int ragdollPartCount = 10;\n\n        RigidBody[] parts = new RigidBody[ragdollPartCount];\n\n        for (int i = 0; i < parts.Length; i++)\n        {\n            parts[i] = world.CreateRigidBody();\n            bodies?.Add(parts[i]);\n        }\n\n        var head = parts[0];\n        var upperLegLeft = parts[1];\n        var upperLegRight = parts[2];\n        var lowerLegLeft = parts[3];\n        var lowerLegRight = parts[4];\n        var upperArmLeft = parts[5];\n        var upperArmRight = parts[6];\n        var lowerArmLeft = parts[7];\n        var lowerArmRight = parts[8];\n        var torso = parts[9];\n\n        head.AddShape(new SphereShape((Real)0.15));\n        upperLegLeft.AddShape(new CapsuleShape((Real)0.08, (Real)0.3));\n        upperLegRight.AddShape(new CapsuleShape((Real)0.08, (Real)0.3));\n        lowerLegLeft.AddShape(new CapsuleShape((Real)0.08, (Real)0.3));\n        lowerLegRight.AddShape(new CapsuleShape((Real)0.08, (Real)0.3));\n        upperArmLeft.AddShape(new CapsuleShape((Real)0.07, (Real)0.2));\n        upperArmRight.AddShape(new CapsuleShape((Real)0.07, (Real)0.2));\n        lowerArmLeft.AddShape(new CapsuleShape((Real)0.06, (Real)0.2));\n        lowerArmRight.AddShape(new CapsuleShape((Real)0.06, (Real)0.2));\n        torso.AddShape(new BoxShape((Real)0.35, (Real)0.6, (Real)0.2));\n\n        head.Position = new JVector(0, 0, 0);\n        torso.Position = new JVector(0, (Real)(-0.46), 0);\n        upperLegLeft.Position = new JVector((Real)0.11, (Real)(-0.85), 0);\n        upperLegRight.Position = new JVector((Real)(-0.11), (Real)(-0.85), 0);\n        lowerLegLeft.Position = new JVector((Real)0.11, (Real)(-1.2), 0);\n        lowerLegRight.Position = new JVector((Real)(-0.11), (Real)(-1.2), 0);\n\n        upperArmLeft.Orientation = JQuaternion.CreateRotationZ((Real)Math.PI / (Real)2.0);\n        upperArmRight.Orientation = JQuaternion.CreateRotationZ((Real)Math.PI / (Real)2.0);\n        lowerArmLeft.Orientation = JQuaternion.CreateRotationZ((Real)Math.PI / (Real)2.0);\n        lowerArmRight.Orientation = JQuaternion.CreateRotationZ((Real)Math.PI / (Real)2.0);\n\n        upperArmLeft.Position = new JVector((Real)0.30, (Real)(-0.2), 0);\n        upperArmRight.Position = new JVector((Real)(-0.30), (Real)(-0.2), 0);\n        lowerArmLeft.Position = new JVector((Real)0.55, (Real)(-0.2), 0);\n        lowerArmRight.Position = new JVector((Real)(-0.55), (Real)(-0.2), 0);\n\n        world.CreateConstraint<BallSocket>(head, torso)\n            .Initialize(new JVector(0, (Real)(-0.15), 0));\n        world.CreateConstraint<ConeLimit>(head, torso)\n            .Initialize(-JVector.UnitZ, AngularLimit.FromDegree(0, 45));\n\n        world.CreateConstraint<BallSocket>(torso, upperLegLeft)\n            .Initialize(new JVector((Real)0.11, (Real)(-0.7), 0));\n        world.CreateConstraint<TwistAngle>(torso, upperLegLeft)\n            .Initialize(JVector.UnitY, JVector.UnitY, AngularLimit.FromDegree(-80, 80));\n        world.CreateConstraint<ConeLimit>(torso, upperLegLeft)\n            .Initialize(-JVector.UnitY, AngularLimit.FromDegree(0, 60));\n\n        world.CreateConstraint<BallSocket>(torso, upperLegRight)\n            .Initialize(new JVector((Real)(-0.11), (Real)(-0.7), 0));\n        world.CreateConstraint<TwistAngle>(torso, upperLegRight)\n            .Initialize(JVector.UnitY, JVector.UnitY, AngularLimit.FromDegree(-80, 80));\n        world.CreateConstraint<ConeLimit>(torso, upperLegRight)\n            .Initialize(-JVector.UnitY, AngularLimit.FromDegree(0, 60));\n\n        world.CreateConstraint<HingeAngle>(upperLegLeft, lowerLegLeft)\n            .Initialize(JVector.UnitX, AngularLimit.FromDegree(-120, 0));\n        world.CreateConstraint<BallSocket>(upperLegLeft, lowerLegLeft)\n            .Initialize(new JVector((Real)0.11, (Real)(-1.05), 0));\n\n        world.CreateConstraint<HingeAngle>(upperLegRight, lowerLegRight)\n            .Initialize(JVector.UnitX, AngularLimit.FromDegree(-120, 0));\n        world.CreateConstraint<BallSocket>(upperLegRight, lowerLegRight)\n            .Initialize(new JVector((Real)(-0.11), (Real)(-1.05), 0));\n\n        world.CreateConstraint<HingeAngle>(lowerArmLeft, upperArmLeft)\n            .Initialize(JVector.UnitY, AngularLimit.FromDegree(-160, 0));\n        world.CreateConstraint<BallSocket>(lowerArmLeft, upperArmLeft)\n            .Initialize(new JVector((Real)0.42, (Real)(-0.2), 0));\n\n        world.CreateConstraint<HingeAngle>(lowerArmRight, upperArmRight)\n            .Initialize(JVector.UnitY, AngularLimit.FromDegree(0, 160));\n        world.CreateConstraint<BallSocket>(lowerArmRight, upperArmRight)\n            .Initialize(new JVector((Real)(-0.42), (Real)(-0.2), 0));\n\n        world.CreateConstraint<BallSocket>(upperArmLeft, torso)\n            .Initialize(new JVector((Real)0.20, (Real)(-0.2), 0));\n        world.CreateConstraint<TwistAngle>(torso, upperArmLeft)\n            .Initialize(JVector.UnitX, JVector.UnitX, AngularLimit.FromDegree(-20, 60));\n\n        world.CreateConstraint<BallSocket>(upperArmRight, torso)\n            .Initialize(new JVector((Real)(-0.20), (Real)(-0.2), 0));\n        world.CreateConstraint<TwistAngle>(torso, upperArmRight)\n            .Initialize(JVector.UnitX, JVector.UnitX, AngularLimit.FromDegree(-20, 60));\n\n        for (int i = 0; i < parts.Length; i++)\n        {\n            parts[i].Position += position;\n        }\n    }\n\n    private static World CreateDeterministicSleepingWorld()\n    {\n        return new World\n        {\n            AllowDeactivation = true,\n            SolveMode = SolveMode.Deterministic\n        };\n    }\n\n    private static RigidBody[] BuildDeterministicScene(World world)\n    {\n        var bodies = new List<RigidBody>();\n\n        var floor = world.CreateRigidBody();\n        floor.Position = new JVector(0, -100, 0);\n        floor.MotionType = MotionType.Static;\n        floor.AddShape(new BoxShape(200, 200, 200));\n        bodies.Add(floor);\n\n        for (int i = 0; i < 320; i++)\n        {\n            var body = world.CreateRigidBody();\n            body.Position = new JVector(0, (Real)0.5 + i * (Real)0.999, 0);\n            body.AddShape(new BoxShape(1));\n            body.Damping = ((Real)0.002, (Real)0.002);\n            bodies.Add(body);\n        }\n\n        for (int i = 0; i < 32; i++)\n        {\n            var body = world.CreateRigidBody();\n            body.Position = new JVector(10, (Real)0.5 + i * (Real)0.999, 0);\n            body.AddShape(new TransformedShape(new ConeShape(), JVector.Zero, JMatrix.CreateScale((Real)0.4, 1, 1)));\n            body.Damping = ((Real)0.002, (Real)0.002);\n            bodies.Add(body);\n        }\n\n        for (int i = 0; i < 5; i++)\n        {\n            BuildRagdoll(world, new JVector(-5, 3 + 2 * i, 0), bodies);\n        }\n\n        world.SolverIterations = (4, 2);\n        world.SubstepCount = 3;\n\n        return [.. bodies];\n    }\n\n    private static void AssertIslandActivationInvariant(World world, int step, string label)\n    {\n        foreach (var island in world.Islands)\n        {\n            if (island.NeedsUpdate) continue;\n\n            bool shouldBeActive = world.Islands.IsActive(island);\n\n            foreach (RigidBody body in island.InternalBodies)\n            {\n                if (body.Data.MotionType == MotionType.Static) continue;\n\n                if (body.Data.IsActive != shouldBeActive)\n                {\n                    Assert.Fail(\n                        $\"Island activation invariant broken in {label} world at step {step}: \" +\n                        $\"islandActive={shouldBeActive}, bodyActive={body.Data.IsActive}, \" +\n                        $\"bodyState={FormatBodyState(body)}.\");\n                }\n            }\n        }\n    }\n\n    private static void AssertBodyStatesEqual(IReadOnlyList<RigidBody> singleThreadBodies,\n        IReadOnlyList<RigidBody> multiThreadBodies, int step)\n    {\n        for (int i = 0; i < singleThreadBodies.Count; i++)\n        {\n            RigidBody single = singleThreadBodies[i];\n            RigidBody multi = multiThreadBodies[i];\n\n            if (single.Position != multi.Position ||\n                single.Orientation != multi.Orientation ||\n                single.Velocity != multi.Velocity ||\n                single.AngularVelocity != multi.AngularVelocity ||\n                single.IsActive != multi.IsActive)\n            {\n                Assert.Fail(\n                    $\"Deterministic mismatch at step {step}, body index {i}: \" +\n                    $\"single={FormatBodyState(single)}, multi={FormatBodyState(multi)}.\");\n            }\n        }\n    }\n\n    private static void AssertSolverStateEqual(ContactData simdContact, ContactData scalarContact,\n        RigidBody simdBody1, RigidBody scalarBody1, RigidBody simdBody2, RigidBody scalarBody2, string phase)\n    {\n        ContactData.Contact simd = simdContact.Contact0;\n        ContactData.Contact scalar = scalarContact.Contact0;\n\n        if (simd.Bias != scalar.Bias ||\n            simd.PenaltyBias != scalar.PenaltyBias ||\n            GetElement(simd.MassNormalTangent, 0) != GetElement(scalar.MassNormalTangent, 0) ||\n            GetElement(simd.MassNormalTangent, 1) != GetElement(scalar.MassNormalTangent, 1) ||\n            GetElement(simd.MassNormalTangent, 2) != GetElement(scalar.MassNormalTangent, 2) ||\n            simd.Impulse != scalar.Impulse ||\n            simd.TangentImpulse1 != scalar.TangentImpulse1 ||\n            simd.TangentImpulse2 != scalar.TangentImpulse2 ||\n            simdBody1.Velocity != scalarBody1.Velocity ||\n            simdBody1.AngularVelocity != scalarBody1.AngularVelocity ||\n            simdBody2.Velocity != scalarBody2.Velocity ||\n            simdBody2.AngularVelocity != scalarBody2.AngularVelocity)\n        {\n            Assert.Fail(\n                $\"{phase} mismatch: \" +\n                $\"simd bias={Format(simd.Bias)}, scalar bias={Format(scalar.Bias)}, \" +\n                $\"simd penalty={Format(simd.PenaltyBias)}, scalar penalty={Format(scalar.PenaltyBias)}, \" +\n                $\"simd mass=[{Format(GetElement(simd.MassNormalTangent, 0))}, {Format(GetElement(simd.MassNormalTangent, 1))}, {Format(GetElement(simd.MassNormalTangent, 2))}], \" +\n                $\"scalar mass=[{Format(GetElement(scalar.MassNormalTangent, 0))}, {Format(GetElement(scalar.MassNormalTangent, 1))}, {Format(GetElement(scalar.MassNormalTangent, 2))}], \" +\n                $\"simd impulse=[{Format(simd.Impulse)}, {Format(simd.TangentImpulse1)}, {Format(simd.TangentImpulse2)}], \" +\n                $\"scalar impulse=[{Format(scalar.Impulse)}, {Format(scalar.TangentImpulse1)}, {Format(scalar.TangentImpulse2)}], \" +\n                $\"simd body1 vel={Format(simdBody1.Velocity)}, scalar body1 vel={Format(scalarBody1.Velocity)}, \" +\n                $\"simd body1 angVel={Format(simdBody1.AngularVelocity)}, scalar body1 angVel={Format(scalarBody1.AngularVelocity)}, \" +\n                $\"simd body2 vel={Format(simdBody2.Velocity)}, scalar body2 vel={Format(scalarBody2.Velocity)}, \" +\n                $\"simd body2 angVel={Format(simdBody2.AngularVelocity)}, scalar body2 angVel={Format(scalarBody2.AngularVelocity)}.\");\n        }\n    }\n\n    private static Real GetElement(VectorReal vector, int index)\n    {\n#if USE_DOUBLE_PRECISION\n        return Vector256.GetElement(vector, index);\n#else\n        return Vector128.GetElement(vector, index);\n#endif\n    }\n\n    private static string Format(JVector vector)\n    {\n        return $\"[{Format(vector.X)}, {Format(vector.Y)}, {Format(vector.Z)}]\";\n    }\n\n    private static string Format(JQuaternion quaternion)\n    {\n        return $\"[{Format(quaternion.X)}, {Format(quaternion.Y)}, {Format(quaternion.Z)}, {Format(quaternion.W)}]\";\n    }\n\n    private static string FormatBodyState(RigidBody body)\n    {\n        return $\"active={body.IsActive}, pos={Format(body.Position)}, orient={Format(body.Orientation)}, \" +\n               $\"vel={Format(body.Velocity)}, angVel={Format(body.AngularVelocity)}, \" +\n               $\"needsUpdate={body.Island.NeedsUpdate}, markedAsActive={body.Island.MarkedAsActive}\";\n    }\n\n    private static string Format(Real value)\n    {\n        if (Precision.IsDoublePrecision)\n        {\n            long bits64 = BitConverter.DoubleToInt64Bits((double)value);\n            return $\"{value:R} (0x{bits64:X16})\";\n        }\n\n        int bits32 = BitConverter.SingleToInt32Bits((float)value);\n        return $\"{value:R} (0x{bits32:X8})\";\n    }\n\n    private static ulong HashPositions(IReadOnlyList<RigidBody> bodies)\n    {\n        const ulong offsetBasis = 14695981039346656037UL;\n        const ulong prime = 1099511628211UL;\n\n        ulong hash = offsetBasis;\n\n        foreach (RigidBody body in bodies)\n        {\n            hash = HashReal(hash, body.Position.X, prime);\n            hash = HashReal(hash, body.Position.Y, prime);\n            hash = HashReal(hash, body.Position.Z, prime);\n        }\n\n        return hash;\n    }\n\n    private static ulong HashReal(ulong hash, Real value, ulong prime)\n    {\n        if (Precision.IsDoublePrecision)\n        {\n            hash ^= (ulong)BitConverter.DoubleToInt64Bits((double)value);\n            return hash * prime;\n        }\n\n        hash ^= BitConverter.SingleToUInt32Bits((float)value);\n        return hash * prime;\n    }\n}\n"
  },
  {
    "path": "src/JitterTests/Usings.cs",
    "content": "global using NUnit.Framework;\nglobal using JitterTests;\nglobal using Jitter2;\nglobal using Jitter2.Collision;\nglobal using Jitter2.Dynamics;\nglobal using Jitter2.Dynamics.Constraints;\nglobal using Jitter2.LinearMath;\nglobal using Jitter2.Collision.Shapes;\n\n#if USE_DOUBLE_PRECISION\n\nglobal using Real = System.Double;\nglobal using MathR = System.Math;\n\n#else\n\nglobal using Real = System.Single;\nglobal using MathR = System.MathF;\n\n#endif\n"
  },
  {
    "path": "tools/CoACD/README",
    "content": "Using CoACD to get a convex decomposition of the Utah teapot.\n"
  },
  {
    "path": "tools/CoACD/run.py",
    "content": "#!/usr/bin/env python3\n\ntry:\n    import trimesh\nexcept ModuleNotFoundError:\n    print(\"trimesh is required. Please install with `pip install trimesh`\")\n    exit(1)\n\n\nimport numpy as np\nimport sys\nimport os\nimport argparse\nimport coacd\n\nif __name__ == \"__main__\":\n    parser = argparse.ArgumentParser()\n    parser.add_argument(\n        \"-i\",\n        \"--input\",\n        type=str,\n        required=True,\n        help=\"input model loaded by trimesh. Supported formats: glb, gltf, obj, off, ply, stl, etc.\",\n    )\n    parser.add_argument(\n        \"-o\",\n        \"--output\",\n        type=str,\n        required=True,\n        help=\"output model exported by trimesh. Supported formats: glb, gltf, obj, off, ply, stl, etc.\",\n    )\n    parser.add_argument(\"--quiet\", action=\"store_true\", help=\"do not print logs\")\n    parser.add_argument(\n        \"-t\",\n        \"--threshold\",\n        type=float,\n        default=0.05,\n        help=\"termination criteria in [0.01, 1] (0.01: most fine-grained; 1: most coarse)\",\n    )\n    parser.add_argument(\n        \"-pm\",\n        \"--preprocess-mode\",\n        type=str,\n        default=\"auto\",\n        help=\"No remeshing before running CoACD. Only suitable for manifold input.\",\n    )\n    parser.add_argument(\n        \"-r\",\n        \"--resolution\",\n        type=int,\n        default=2000,\n        help=\"surface samping resolution for Hausdorff distance computation\",\n    )\n    parser.add_argument(\n        \"-nm\",\n        \"--no-merge\",\n        action=\"store_true\",\n        help=\"If merge is enabled, try to reduce total number of parts by merging.\",\n    )\n    parser.add_argument(\n        \"-c\",\n        \"--max-convex-hull\",\n        type=int,\n        default=-1,\n        help=\"max # convex hulls in the result, -1 for no limit, works only when merge is enabled\",\n    )\n    parser.add_argument(\n        \"-mi\",\n        \"--mcts_iteration\",\n        type=int,\n        default=150,\n        help=\"Number of MCTS iterations.\",\n    )\n    parser.add_argument(\n        \"-md\",\n        \"--mcts-max-depth\",\n        type=int,\n        default=3,\n        help=\"Maximum depth for MCTS search.\",\n    )\n    parser.add_argument(\n        \"-mn\",\n        \"--mcts-node\",\n        type=int,\n        default=20,\n        help=\"Number of cut candidates for MCTS.\",\n    )\n    parser.add_argument(\n        \"-pr\",\n        \"--prep-resolution\",\n        type=int,\n        default=50,\n        help=\"Preprocessing resolution.\",\n    )\n    parser.add_argument(\n        \"--pca\",\n        action=\"store_true\",\n        help=\"Use PCA to align input mesh. Suitable for non-axis-aligned mesh.\",\n    )\n    parser.add_argument(\"--seed\", type=int, default=0, help=\"Random seed.\")\n\n    args = parser.parse_args()\n\n    input_file = args.input\n    output_file = args.output\n\n    if not os.path.isfile(input_file):\n        print(input_file, \"is not a file\")\n        exit(1)\n\n    if args.quiet:\n        coacd.set_log_level(\"error\")\n\n    mesh = trimesh.load(input_file, force=\"mesh\")\n    mesh = coacd.Mesh(mesh.vertices, mesh.faces)\n    result = coacd.run_coacd(\n        mesh,\n        threshold=args.threshold,\n        max_convex_hull=args.max_convex_hull,\n        preprocess_mode=args.preprocess_mode,\n        preprocess_resolution=args.prep_resolution,\n        resolution=args.resolution,\n        mcts_nodes=args.mcts_node,\n        mcts_iterations=args.mcts_iteration,\n        mcts_max_depth=args.mcts_max_depth,\n        pca=args.pca,\n        merge=not args.no_merge,\n        seed=args.seed,\n    )\n    mesh_parts = []\n    for vs, fs in result:\n        mesh_parts.append(trimesh.Trimesh(vs, fs))\n    scene = trimesh.Scene()\n    np.random.seed(0)\n    for p in mesh_parts:\n        p.visual.vertex_colors[:, :3] = (np.random.rand(3) * 255).astype(np.uint8)\n        scene.add_geometry(p)\n    scene.export(output_file, include_normals=True)\n"
  },
  {
    "path": "tools/CoACD/run.sh",
    "content": "./run.py -i teapot.obj -o teapot_hull.obj -t 0.06 -pr 60\n\n# further simplify in blender using decimate modifier and create convehex hulls.\n"
  },
  {
    "path": "tools/ImGui.NET/CodeGenerator/CSharpCodeWriter.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Text;\n\nnamespace CodeGenerator\n{\n    class CSharpCodeWriter : IDisposable\n    {\n        private readonly StreamWriter _sw;\n        private int _indentLevel = 0;\n\n        public CSharpCodeWriter(string outputPath)\n        {\n            _sw = File.CreateText(outputPath);\n        }\n\n        public void Using(string ns)\n        {\n            WriteIndented($\"using {ns};\");\n        }\n\n        public void PushBlock(string blockHeader)\n        {\n            WriteIndented(blockHeader);\n            WriteIndented(\"{\");\n            _indentLevel += 4;\n        }\n\n        public void PopBlock()\n        {\n            _indentLevel -= 4;\n            WriteIndented(\"}\");\n        }\n\n        public void WriteLine(string text)\n        {\n            WriteIndented(text);\n        }\n\n        public void WriteLine()\n        {\n            _sw.WriteLine();\n        }\n\n        private void WriteIndented(string text)\n        {\n            for (int i = 0; i < _indentLevel; i++)\n            {\n                _sw.Write(' ');\n            }\n            _sw.WriteLine(text);\n        }\n\n        public void Dispose()\n        {\n            _sw.Dispose();\n        }\n    }\n}\n"
  },
  {
    "path": "tools/ImGui.NET/CodeGenerator/CodeGenerator.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <OutputType>Exe</OutputType>\n    <TargetFramework>net9.0</TargetFramework>\n  </PropertyGroup>\n\n    <PropertyGroup>\n    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <Content Include=\"definitions\\cimgui\\structs_and_enums.json\" CopyToOutputDirectory=\"PreserveNewest\" />\n    <Content Include=\"definitions\\cimgui\\definitions.json\" CopyToOutputDirectory=\"PreserveNewest\" />\n    <Content Include=\"definitions\\cimgui\\variants.json\" CopyToOutputDirectory=\"PreserveNewest\" />\n\n    <Content Include=\"definitions\\cimplot\\structs_and_enums.json\" CopyToOutputDirectory=\"PreserveNewest\" />\n    <Content Include=\"definitions\\cimplot\\definitions.json\" CopyToOutputDirectory=\"PreserveNewest\" />\n    <Content Include=\"definitions\\cimplot\\variants.json\" CopyToOutputDirectory=\"PreserveNewest\" />\n\n    <Content Include=\"definitions\\cimnodes\\structs_and_enums.json\" CopyToOutputDirectory=\"PreserveNewest\" />\n    <Content Include=\"definitions\\cimnodes\\definitions.json\" CopyToOutputDirectory=\"PreserveNewest\" />\n    <Content Include=\"definitions\\cimnodes\\variants.json\" CopyToOutputDirectory=\"PreserveNewest\" />\n\n    <Content Include=\"definitions\\cimguizmo\\structs_and_enums.json\" CopyToOutputDirectory=\"PreserveNewest\" />\n    <Content Include=\"definitions\\cimguizmo\\definitions.json\" CopyToOutputDirectory=\"PreserveNewest\" />\n    <Content Include=\"definitions\\cimguizmo\\variants.json\" CopyToOutputDirectory=\"PreserveNewest\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"Newtonsoft.Json\" Version=\"12.0.3\" />\n  </ItemGroup>\n</Project>\n"
  },
  {
    "path": "tools/ImGui.NET/CodeGenerator/ImguiDefinitions.cs",
    "content": "using System;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing System.Collections.Generic;\nusing System.IO;\nusing Newtonsoft.Json;\nusing Newtonsoft.Json.Linq;\nusing System.Xml.Linq;\n\nnamespace CodeGenerator\n{\n    class ImguiDefinitions\n    {\n        public EnumDefinition[] Enums;\n        public TypeDefinition[] Types;\n        public FunctionDefinition[] Functions;\n        public Dictionary<string, MethodVariant> Variants;\n\n        static int GetInt(JToken token, string key)\n        {\n            var v = token[key];\n            if (v == null) return 0;\n            return v.ToObject<int>();\n        }\n        public void LoadFrom(string directory)\n        {\n            \n            JObject typesJson;\n            using (StreamReader fs = File.OpenText(Path.Combine(directory, \"structs_and_enums.json\")))\n            using (JsonTextReader jr = new JsonTextReader(fs))\n            {\n                typesJson = JObject.Load(jr);\n            }\n\n            JObject functionsJson;\n            using (StreamReader fs = File.OpenText(Path.Combine(directory, \"definitions.json\")))\n            using (JsonTextReader jr = new JsonTextReader(fs))\n            {\n                functionsJson = JObject.Load(jr);\n            }\n\n            JObject variantsJson = null;\n            if (File.Exists(Path.Combine(directory, \"variants.json\")))\n            {\n                using (StreamReader fs = File.OpenText(Path.Combine(directory, \"variants.json\")))\n                using (JsonTextReader jr = new JsonTextReader(fs))\n                {\n                    variantsJson = JObject.Load(jr);\n                }\n            }\n\n            Variants = new Dictionary<string, MethodVariant>();\n            foreach (var jt in variantsJson.Children())\n            {\n                JProperty jp = (JProperty)jt;\n                ParameterVariant[] methodVariants = jp.Values().Select(jv =>\n                {\n                    return new ParameterVariant(jv[\"name\"].ToString(), jv[\"type\"].ToString(), jv[\"variants\"].Select(s => s.ToString()).ToArray());\n                }).ToArray();\n                Variants.Add(jp.Name, new MethodVariant(jp.Name, methodVariants));\n            }\n\n            var typeLocations = typesJson[\"locations\"];\n\n            Enums = typesJson[\"enums\"].Select(jt =>\n            {\n                JProperty jp = (JProperty)jt;\n                string name = jp.Name;\n                if (typeLocations?[jp.Name]?.Value<string>().Contains(\"internal\") ?? false) {\n                    return null;\n                }\n                EnumMember[] elements = jp.Values().Select(v =>\n                {\n                    return new EnumMember(v[\"name\"].ToString(), v[\"calc_value\"].ToString());\n                }).ToArray();\n                return new EnumDefinition(name, elements);\n            }).Where(x => x != null).ToArray();\n\n            Types = typesJson[\"structs\"].Select(jt =>\n            {\n                JProperty jp = (JProperty)jt;\n                string name = jp.Name;\n                if (typeLocations?[jp.Name]?.Value<string>().Contains(\"internal\") ?? false) {\n                    return null;\n                }\n                TypeReference[] fields = jp.Values().Select(v =>\n                {\n                    if (v[\"type\"].ToString().Contains(\"static\")) { return null; }\n\n                    \n                    return new TypeReference(\n                        v[\"name\"].ToString(),\n                        v[\"type\"].ToString(),\n                            GetInt(v, \"size\"),\n                        v[\"template_type\"]?.ToString(),\n                        Enums);\n                }).Where(tr => tr != null).ToArray();\n                return new TypeDefinition(name, fields);\n            }).Where(x => x != null).ToArray();\n\n            Functions = functionsJson.Children().Select(jt =>\n            {\n                JProperty jp = (JProperty)jt;\n                string name = jp.Name;\n                bool hasNonUdtVariants = jp.Values().Any(val => val[\"ov_cimguiname\"]?.ToString().EndsWith(\"nonUDT\") ?? false);\n                OverloadDefinition[] overloads = jp.Values().Select(val =>\n                {\n                    string ov_cimguiname = val[\"ov_cimguiname\"]?.ToString();\n                    string cimguiname = val[\"cimguiname\"].ToString();\n                    string friendlyName = val[\"funcname\"]?.ToString();\n                    if (cimguiname.EndsWith(\"_destroy\"))\n                    {\n                        friendlyName = \"Destroy\";\n                    }\n                    //skip internal functions\n                    var typename = val[\"stname\"]?.ToString();\n                    if (!string.IsNullOrEmpty(typename))\n                    {\n                        if (!Types.Any(x => x.Name == val[\"stname\"]?.ToString())) {\n                            return null;\n                        }\n                    }\n                    if (friendlyName == null) { return null; }\n                    if (val[\"location\"]?.ToString().Contains(\"internal\") ?? false) return null;\n\n                    string exportedName = ov_cimguiname;\n                    if (exportedName == null)\n                    {\n                        exportedName = cimguiname;\n                    }\n\n                    if (hasNonUdtVariants && !exportedName.EndsWith(\"nonUDT2\"))\n                    {\n                        return null;\n                    }\n\n                    string selfTypeName = null;\n                    int underscoreIndex = exportedName.IndexOf('_');\n                    if (underscoreIndex > 0 && !exportedName.StartsWith(\"ig\")) // Hack to exclude some weirdly-named non-instance functions.\n                    {\n                        selfTypeName = exportedName.Substring(0, underscoreIndex);\n                    }\n\n                    List<TypeReference> parameters = new List<TypeReference>();\n\n                    // find any variants that can be applied to the parameters of this method based on the method name\n                    MethodVariant methodVariants = null;\n                    Variants.TryGetValue(jp.Name, out methodVariants);\n\n                    foreach (JToken p in val[\"argsT\"])\n                    {\n                        string pType = p[\"type\"].ToString();\n                        string pName = p[\"name\"].ToString();\n\n                        // if there are possible variants for this method then try to match them based on the parameter name and expected type\n                        ParameterVariant matchingVariant = methodVariants?.Parameters.Where(pv => pv.Name == pName && pv.OriginalType == pType).FirstOrDefault() ?? null;\n                        if (matchingVariant != null) matchingVariant.Used = true;\n\n                        parameters.Add(new TypeReference(pName, pType, 0, Enums, matchingVariant?.VariantTypes));\n                    }\n\n                    Dictionary<string, string> defaultValues = new Dictionary<string, string>();\n                    foreach (JToken dv in val[\"defaults\"])\n                    {\n                        JProperty dvProp = (JProperty)dv;\n                        defaultValues.Add(dvProp.Name, dvProp.Value.ToString());\n                    }\n                    string returnType = val[\"ret\"]?.ToString() ?? \"void\";\n                    string comment = null;\n\n                    string structName = val[\"stname\"].ToString();\n                    bool isConstructor = val.Value<bool>(\"constructor\");\n                    bool isDestructor = val.Value<bool>(\"destructor\");\n                    if (isConstructor)\n                    {\n                        returnType = structName + \"*\";\n                    }\n\n                    return new OverloadDefinition(\n                        exportedName,\n                        friendlyName,\n                        parameters.ToArray(),\n                        defaultValues,\n                        returnType,\n                        structName,\n                        comment,\n                        isConstructor,\n                        isDestructor);\n                }).Where(od => od != null).ToArray();\n                if(overloads.Length == 0) return null;\n                return new FunctionDefinition(name, overloads, Enums);\n            }).Where(x => x != null).OrderBy(fd => fd.Name).ToArray();\n        }\n    }\n    \n    class MethodVariant\n    {\n        public string Name { get; }\n\n        public ParameterVariant[] Parameters { get; }\n\n        public MethodVariant(string name, ParameterVariant[] parameters)\n        {\n            Name = name;\n            Parameters = parameters;\n        }\n    }\n\n    class ParameterVariant\n    {\n        public string Name { get; }\n\n        public string OriginalType { get; }\n\n        public string[] VariantTypes { get; }\n\n        public bool Used { get; set; }\n\n        public ParameterVariant(string name, string originalType, string[] variantTypes)\n        {\n            Name = name;\n            OriginalType = originalType;\n            VariantTypes = variantTypes;\n            Used = false;\n        }\n    }\n\n    class EnumDefinition\n    {\n        private readonly Dictionary<string, string> _sanitizedNames;\n\n        public string[] Names { get; }\n        public string[] FriendlyNames { get; }\n        public EnumMember[] Members { get; }\n\n        public EnumDefinition(string name, EnumMember[] elements)\n        {\n            if (TypeInfo.AlternateEnumPrefixes.TryGetValue(name, out string altName))\n            {\n                Names = new[] { name, altName };\n            }\n            else\n            {\n                Names = new[] { name };\n            }\n            FriendlyNames = new string[Names.Length];\n            for (int i = 0; i < Names.Length; i++)\n            {\n                string n = Names[i];\n                if (n.EndsWith('_'))\n                {\n                    FriendlyNames[i] = n.Substring(0, n.Length - 1);\n                }\n                else\n                {\n                    FriendlyNames[i] = n;\n                }\n\n            }\n\n            Members = elements;\n\n            _sanitizedNames = new Dictionary<string, string>();\n            foreach (EnumMember el in elements)\n            {\n                _sanitizedNames.Add(el.Name, SanitizeMemberName(el.Name));\n            }\n        }\n\n        public string SanitizeNames(string text)\n        {\n            foreach (KeyValuePair<string, string> kvp in _sanitizedNames)\n            {\n                text = text.Replace(kvp.Key, kvp.Value);\n            }\n\n            return text;\n        }\n\n        private string SanitizeMemberName(string memberName)\n        {\n            string ret = memberName;\n            bool altSubstitution = false;\n\n            // Try alternate substitution first\n            foreach (KeyValuePair<string, string> substitutionPair in TypeInfo.AlternateEnumPrefixSubstitutions)\n            {\n                if (memberName.StartsWith(substitutionPair.Key))\n                {\n                    ret = ret.Replace(substitutionPair.Key, substitutionPair.Value);\n                    altSubstitution = true;\n                    break;\n                }\n            }\n\n            if (!altSubstitution)\n            {\n                foreach (string name in Names)\n                {\n                    if (memberName.StartsWith(name))\n                    {\n                        ret = memberName.Substring(name.Length);\n                        if (ret.StartsWith(\"_\"))\n                        {\n                            ret = ret.Substring(1);\n                        }\n                    }\n                }\n            }\n\n            if (ret.EndsWith('_'))\n            {\n                ret = ret.Substring(0, ret.Length - 1);\n            }\n\n            if (char.IsDigit(ret.First()))\n                ret = \"_\" + ret;\n\n            return ret;\n        }\n    }\n\n    class EnumMember\n    {\n        public EnumMember(string name, string value)\n        {\n            Name = name;\n            Value = value;\n        }\n\n        public string Name { get; }\n        public string Value { get; }\n    }\n\n    class TypeDefinition\n    {\n        public string Name { get; }\n        public TypeReference[] Fields { get; }\n\n        public TypeDefinition(string name, TypeReference[] fields)\n        {\n            Name = name;\n            Fields = fields;\n        }\n    }\n\n    class TypeReference\n    {\n        public string Name { get; }\n        public string Type { get; }\n        public string TemplateType { get; }\n        public int ArraySize { get; }\n        public bool IsFunctionPointer { get; }\n        public string[] TypeVariants { get; }\n        public bool IsEnum { get; }\n\n        public TypeReference(string name, string type, int asize, EnumDefinition[] enums)\n            : this(name, type, asize, null, enums, null) { }\n\n        public TypeReference(string name, string type, int asize, EnumDefinition[] enums, string[] typeVariants)\n            : this(name, type, asize, null, enums, typeVariants) { }\n\n        public TypeReference(string name, string type, int asize, string templateType, EnumDefinition[] enums)\n            : this(name, type, asize, templateType, enums, null) { }\n\n        public TypeReference(string name, string type, int asize, string templateType, EnumDefinition[] enums, string[] typeVariants)\n        {\n            Name = name;\n            Type = type.Replace(\"const\", string.Empty).Trim();\n\n\n            if (Type.StartsWith(\"ImVector_\"))\n            {\n                if (Type.EndsWith(\"*\"))\n                {\n                    Type = \"ImVector*\";\n                }\n                else\n                {\n                    Type = \"ImVector\";\n                }\n            }\n\n            if (Type.StartsWith(\"ImChunkStream_\"))\n            {\n                if (Type.EndsWith(\"*\"))\n                {\n                    Type = \"ImChunkStream*\";\n                }\n                else\n                {\n                    Type = \"ImChunkStream\";\n                }\n            }\n\n            TemplateType = templateType;\n            ArraySize = asize;\n            int startBracket = name.IndexOf('[');\n            if (startBracket != -1)\n            {\n                //This is only for older cimgui binding jsons\n                int endBracket = name.IndexOf(']');\n                string sizePart = name.Substring(startBracket + 1, endBracket - startBracket - 1);\n                if(ArraySize == 0)\n                    ArraySize = ParseSizeString(sizePart, enums);\n                Name = Name.Substring(0, startBracket);\n            }\n            IsFunctionPointer = Type.IndexOf('(') != -1;\n            \n            TypeVariants = typeVariants;\n\n            IsEnum = enums.Any(t => t.Names.Contains(type) || t.FriendlyNames.Contains(type) || TypeInfo.WellKnownEnums.Contains(type));\n        }\n        \n        private int ParseSizeString(string sizePart, EnumDefinition[] enums)\n        {\n            int plusStart = sizePart.IndexOf('+');\n            if (plusStart != -1)\n            {\n                string first = sizePart.Substring(0, plusStart);\n                string second = sizePart.Substring(plusStart, sizePart.Length - plusStart);\n                int firstVal = int.Parse(first);\n                int secondVal = int.Parse(second);\n                return firstVal + secondVal;\n            }\n\n            if (!int.TryParse(sizePart, out int ret))\n            {\n                foreach (EnumDefinition ed in enums)\n                {\n                    if (ed.Names.Any(n => sizePart.StartsWith(n)))\n                    {\n                        foreach (EnumMember member in ed.Members)\n                        {\n                            if (member.Name == sizePart)\n                            {\n                                return int.Parse(member.Value);\n                            }\n                        }\n                    }\n                }\n\n                ret = -1;\n            }\n\n            return ret;\n        }\n\n        public TypeReference WithVariant(int variantIndex, EnumDefinition[] enums)\n        {\n            if (variantIndex == 0) return this;\n            else return new TypeReference(Name, TypeVariants[variantIndex - 1], ArraySize, TemplateType, enums);\n        }\n    }\n\n    class FunctionDefinition\n    {\n        public string Name { get; }\n        public OverloadDefinition[] Overloads { get; }\n\n        public FunctionDefinition(string name, OverloadDefinition[] overloads, EnumDefinition[] enums)\n        {\n            Name = name;\n            Overloads = ExpandOverloadVariants(overloads, enums);\n        }\n\n        private OverloadDefinition[] ExpandOverloadVariants(OverloadDefinition[] overloads, EnumDefinition[] enums)\n        {\n            List<OverloadDefinition> newDefinitions = new List<OverloadDefinition>();\n\n            foreach (OverloadDefinition overload in overloads)\n            {\n                bool hasVariants = false;\n                int[] variantCounts = new int[overload.Parameters.Length];\n\n                for (int i = 0; i < overload.Parameters.Length; i++)\n                {\n                    if (overload.Parameters[i].TypeVariants != null)\n                    {\n                        hasVariants = true;\n                        variantCounts[i] = overload.Parameters[i].TypeVariants.Length + 1;\n                    }\n                    else\n                    {\n                        variantCounts[i] = 1;\n                    }\n                }\n\n                if (hasVariants)\n                {\n                    int totalVariants = variantCounts[0];\n                    for (int i = 1; i < variantCounts.Length; i++) totalVariants *= variantCounts[i];\n\n                    for (int i = 0; i < totalVariants; i++)\n                    {\n                        TypeReference[] parameters = new TypeReference[overload.Parameters.Length];\n                        int div = 1;\n\n                        for (int j = 0; j < parameters.Length; j++)\n                        {\n                            int k = (i / div) % variantCounts[j];\n\n                            parameters[j] = overload.Parameters[j].WithVariant(k, enums);\n\n                            if (j > 0) div *= variantCounts[j];\n                        }\n\n                        newDefinitions.Add(overload.WithParameters(parameters));\n                    }\n                }\n                else\n                {\n                    newDefinitions.Add(overload);\n                }\n            }\n\n            return newDefinitions.ToArray();\n        }\n    }\n\n    class OverloadDefinition\n    {\n        public string ExportedName { get; }\n        public string FriendlyName { get; }\n        public TypeReference[] Parameters { get; }\n        public Dictionary<string, string> DefaultValues { get; }\n        public string ReturnType { get; }\n        public string StructName { get; }\n        public bool IsMemberFunction { get; }\n        public string Comment { get; }\n        public bool IsConstructor { get; }\n        public bool IsDestructor { get; }\n\n        public OverloadDefinition(\n            string exportedName,\n            string friendlyName,\n            TypeReference[] parameters,\n            Dictionary<string, string> defaultValues,\n            string returnType,\n            string structName,\n            string comment,\n            bool isConstructor,\n            bool isDestructor)\n        {\n            ExportedName = exportedName;\n            FriendlyName = friendlyName;\n            Parameters = parameters;\n            DefaultValues = defaultValues;\n            ReturnType = returnType.Replace(\"const\", string.Empty).Replace(\"inline\", string.Empty).Trim();\n            StructName = structName;\n            IsMemberFunction = !string.IsNullOrEmpty(structName);\n            Comment = comment;\n            IsConstructor = isConstructor;\n            IsDestructor = isDestructor;\n        }\n\n        public OverloadDefinition WithParameters(TypeReference[] parameters)\n        {\n            return new OverloadDefinition(ExportedName, FriendlyName, parameters, DefaultValues, ReturnType, StructName, Comment, IsConstructor, IsDestructor);\n        }\n    }\n}\n"
  },
  {
    "path": "tools/ImGui.NET/CodeGenerator/Program.cs",
    "content": "﻿using Newtonsoft.Json;\nusing Newtonsoft.Json.Linq;\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.IO;\nusing System.Linq;\nusing System.Text;\nusing System.Text.RegularExpressions;\nusing System.Threading.Tasks;\n\nnamespace CodeGenerator\n{\n    internal static class Program\n    {\n        static void Main(string[] args)\n        {\n            string outputPath;\n            if (args.Length > 0)\n            {\n                outputPath = args[0];\n            }\n            else\n            {\n                outputPath = AppContext.BaseDirectory;\n            }\n\n            if (!Directory.Exists(outputPath))\n            {\n                Directory.CreateDirectory(outputPath);\n            }\n\n            string libraryName;\n            if (args.Length > 1)\n            {\n                libraryName = args[1];\n            }\n            else\n            {\n                libraryName = \"cimgui\";\n            }\n\n            string projectNamespace = libraryName switch\n            {\n                \"cimgui\" => \"ImGuiNET\",\n                \"cimplot\" => \"ImPlotNET\",\n                \"cimnodes\" => \"imnodesNET\",\n                \"cimguizmo\" => \"ImGuizmoNET\",\n                _ => throw new NotImplementedException($\"Library \\\"{libraryName}\\\" is not supported.\")\n            };\n\n            bool referencesImGui = libraryName switch\n            {\n                \"cimgui\" => false,\n                \"cimplot\" => true,\n                \"cimnodes\" => true,\n                \"cimguizmo\" => true,\n                _ => throw new NotImplementedException($\"Library \\\"{libraryName}\\\" is not supported.\")\n            };\n\n            string classPrefix = libraryName switch\n            {\n                \"cimgui\" => \"ImGui\",\n                \"cimplot\" => \"ImPlot\",\n                \"cimnodes\" => \"imnodes\",\n                \"cimguizmo\" => \"ImGuizmo\",\n                _ => throw new NotImplementedException($\"Library \\\"{libraryName}\\\" is not supported.\")\n            };\n\n            string dllName = libraryName switch\n            {\n                \"cimgui\" => \"cimgui\",\n                \"cimplot\" => \"cimplot\",\n                \"cimnodes\" => \"cimnodes\",\n                \"cimguizmo\" => \"cimguizmo\",\n                _ => throw new NotImplementedException()\n            };\n\n            string definitionsPath = Path.Combine(AppContext.BaseDirectory, \"definitions\", libraryName);\n            var defs = new ImguiDefinitions();\n            defs.LoadFrom(definitionsPath);\n\n            Console.WriteLine($\"Outputting generated code files to {outputPath}.\");\n\n            using (CSharpCodeWriter writer = new CSharpCodeWriter(Path.Combine(outputPath, \"ImGuiStructs.cs\")))\n            {\n                writer.Using(\"System\");\n                writer.Using(\"System.Numerics\");\n                writer.Using(\"System.Runtime.CompilerServices\");\n                writer.Using(\"System.Text\");\n                if (referencesImGui)\n                {\n                    writer.Using(\"ImGuiNET\");\n                }\n                writer.WriteLine(string.Empty);\n                writer.PushBlock($\"namespace {projectNamespace}\");\n\n                // \n                string add = \"\"\"\n                    public unsafe delegate int ImGuiInputTextCallback(ImGuiInputTextCallbackData* data);\n\n                    public unsafe delegate void ImGuiSizeCallback(ImGuiSizeCallbackData* data);\n\n                    public unsafe partial struct ImGuiStoragePair\n                    {\n                        public uint key;\n                        public int val_i;\n                        public float val_f;\n                        public void* val_p;\n                    }\n\n                    public unsafe struct ImVector\n                    {\n                        public readonly int Size;\n                        public readonly int Capacity;\n                        public readonly IntPtr Data;\n\n                        public ImVector(int size, int capacity, IntPtr data)\n                        {\n                            Size = size;\n                            Capacity = capacity;\n                            Data = data;\n                        }\n\n                        public ref T Ref<T>(int index)\n                        {\n                            return ref Unsafe.AsRef<T>((byte*)Data + index * Unsafe.SizeOf<T>());\n                        }\n\n                        public IntPtr Address<T>(int index)\n                        {\n                            return (IntPtr)((byte*)Data + index * Unsafe.SizeOf<T>());\n                        }\n                    }\n                    \"\"\";\n\n                foreach(string line in add.Split(\"\\n\"))\n                {\n                    writer.WriteLine(line);\n                }\n\n\n                foreach (EnumDefinition ed in defs.Enums)\n                {\n                    if (ed.FriendlyNames[0].Contains(\"Flags\"))\n                    {\n                        writer.WriteLine(\"[System.Flags]\");\n                    }\n                    writer.PushBlock($\"public enum {ed.FriendlyNames[0]}\");\n                    foreach (EnumMember member in ed.Members)\n                    {\n                        string sanitizedName = ed.SanitizeNames(member.Name);\n                        string sanitizedValue = ed.SanitizeNames(member.Value);\n                        writer.WriteLine($\"{sanitizedName} = {sanitizedValue},\");\n                    }\n                    writer.PopBlock();\n                    writer.WriteLine();\n                }\n\n                foreach (TypeDefinition td in defs.Types)\n                {\n                    if (TypeInfo.CustomDefinedTypes.Contains(td.Name)) { continue; }\n\n\n                    writer.PushBlock($\"public unsafe partial struct {td.Name}\");\n                    foreach (TypeReference field in td.Fields)\n                    {\n                        string typeStr = GetTypeString(field.Type, field.IsFunctionPointer);\n\n                        if (field.ArraySize != 0)\n                        {\n                            if (TypeInfo.LegalFixedTypes.Contains(typeStr))\n                            {\n                                writer.WriteLine($\"public fixed {typeStr} {field.Name}[{field.ArraySize}];\");\n                            }\n                            else\n                            {\n                                for (int i = 0; i < field.ArraySize; i++)\n                                {\n                                    writer.WriteLine($\"public {typeStr} {field.Name}_{i};\");\n                                }\n                            }\n                        }\n                        else\n                        {\n                            writer.WriteLine($\"public {typeStr} {field.Name};\");\n                        }\n                    }\n                    writer.PopBlock();\n                    writer.WriteLine();\n\n\n                    /*\n                    string ptrTypeName = td.Name + \"Ptr\";\n                    writer.PushBlock($\"public unsafe partial struct {ptrTypeName}\");\n                    writer.WriteLine($\"public {td.Name}* NativePtr {{ get; }}\");\n                    writer.WriteLine($\"public {ptrTypeName}({td.Name}* nativePtr) => NativePtr = nativePtr;\");\n                    writer.WriteLine($\"public {ptrTypeName}(IntPtr nativePtr) => NativePtr = ({td.Name}*)nativePtr;\");\n                    writer.WriteLine($\"public static implicit operator {ptrTypeName}({td.Name}* nativePtr) => new {ptrTypeName}(nativePtr);\");\n                    writer.WriteLine($\"public static implicit operator {td.Name}* ({ptrTypeName} wrappedPtr) => wrappedPtr.NativePtr;\");\n                    writer.WriteLine($\"public static implicit operator {ptrTypeName}(IntPtr nativePtr) => new {ptrTypeName}(nativePtr);\");\n\n                    foreach (TypeReference field in td.Fields)\n                    {\n                        string typeStr = GetTypeString(field.Type, field.IsFunctionPointer);\n                        string rawType = typeStr;\n\n                        if (TypeInfo.WellKnownFieldReplacements.TryGetValue(field.Type, out string wellKnownFieldType))\n                        {\n                            typeStr = wellKnownFieldType;\n                        }\n\n                        if (field.ArraySize != 0)\n                        {\n                            string addrTarget = TypeInfo.LegalFixedTypes.Contains(rawType) ? $\"NativePtr->{field.Name}\" : $\"&NativePtr->{field.Name}_0\";\n                            writer.WriteLine($\"public RangeAccessor<{typeStr}> {field.Name} => new RangeAccessor<{typeStr}>({addrTarget}, {field.ArraySize});\");\n                        }\n                        else if (typeStr.Contains(\"ImVector\"))\n                        {\n                            string vectorElementType = GetTypeString(field.TemplateType, false);\n\n                            if (TypeInfo.WellKnownTypes.TryGetValue(vectorElementType, out string wellKnown))\n                            {\n                                vectorElementType = wellKnown;\n                            }\n\n                            if (GetWrappedType(vectorElementType + \"*\", out string wrappedElementType))\n                            {\n                                writer.WriteLine($\"public ImPtrVector<{wrappedElementType}> {field.Name} => new ImPtrVector<{wrappedElementType}>(NativePtr->{field.Name}, Unsafe.SizeOf<{vectorElementType}>());\");\n                            }\n                            else\n                            {\n                                if (GetWrappedType(vectorElementType, out wrappedElementType))\n                                {\n                                    vectorElementType = wrappedElementType;\n                                }\n                                writer.WriteLine($\"public ImVector<{vectorElementType}> {field.Name} => new ImVector<{vectorElementType}>(NativePtr->{field.Name});\");\n                            }\n                        }\n                        else\n                        {\n                            if (typeStr.Contains(\"*\") && !typeStr.Contains(\"ImVector\"))\n                            {\n                                if (GetWrappedType(typeStr, out string wrappedTypeName))\n                                {\n                                    writer.WriteLine($\"public {wrappedTypeName} {field.Name} => new {wrappedTypeName}(NativePtr->{field.Name});\");\n                                }\n                                else if (typeStr == \"byte*\" && IsStringFieldName(field.Name))\n                                {\n                                    writer.WriteLine($\"public NullTerminatedString {field.Name} => new NullTerminatedString(NativePtr->{field.Name});\");\n                                }\n                                else\n                                {\n                                    writer.WriteLine($\"public IntPtr {field.Name} {{ get => (IntPtr)NativePtr->{field.Name}; set => NativePtr->{field.Name} = ({typeStr})value; }}\");\n                                }\n                            }\n                            else\n                            {\n                                writer.WriteLine($\"public ref {typeStr} {field.Name} => ref Unsafe.AsRef<{typeStr}>(&NativePtr->{field.Name});\");\n                            }\n                        }\n                    }\n                    \n\n                    foreach (FunctionDefinition fd in defs.Functions)\n                    {\n                        foreach (OverloadDefinition overload in fd.Overloads)\n                        {\n                            if (overload.StructName != td.Name)\n                            {\n                                continue;\n                            }\n\n                            if (overload.IsConstructor)\n                            {\n                                // TODO: Emit a static function on the type that invokes the native constructor.\n                                // Also, add a \"Dispose\" function or similar.\n                                continue;\n                            }\n\n                            string exportedName = overload.ExportedName;\n                            if (exportedName.StartsWith(\"ig\"))\n                            {\n                                exportedName = exportedName.Substring(2, exportedName.Length - 2);\n                            }\n                            if (exportedName.Contains(\"~\")) { continue; }\n                            if (overload.Parameters.Any(tr => tr.Type.Contains('('))) { continue; } // TODO: Parse function pointer parameters.\n\n                            bool hasVaList = false;\n                            for (int i = 0; i < overload.Parameters.Length; i++)\n                            {\n                                TypeReference p = overload.Parameters[i];\n                                string paramType = GetTypeString(p.Type, p.IsFunctionPointer);\n                                if (p.Name == \"...\") { continue; }\n\n                                if (paramType == \"va_list\")\n                                {\n                                    hasVaList = true;\n                                    break;\n                                }\n                            }\n                            if (hasVaList) { continue; }\n\n                            KeyValuePair<string, string>[] orderedDefaults = overload.DefaultValues.OrderByDescending(\n                                kvp => GetIndex(overload.Parameters, kvp.Key)).ToArray();\n\n                            for (int i = overload.DefaultValues.Count; i >= 0; i--)\n                            {\n                                Dictionary<string, string> defaults = new Dictionary<string, string>();\n                                for (int j = 0; j < i; j++)\n                                {\n                                    defaults.Add(orderedDefaults[j].Key, orderedDefaults[j].Value);\n                                }\n                                EmitOverload(writer, overload, defaults, \"NativePtr\", classPrefix);\n                            }\n                        }\n                    }\n                    writer.PopBlock();\n                    */\n                }\n                writer.PopBlock();\n            }\n\n            using (CSharpCodeWriter writer = new CSharpCodeWriter(Path.Combine(outputPath, $\"ImGuiNative.cs\")))\n            {\n                writer.Using(\"System\");\n                writer.Using(\"System.Numerics\");\n                writer.Using(\"System.Runtime.InteropServices\");\n                if (referencesImGui)\n                {\n                    writer.Using(\"ImGuiNET\");\n                }\n                writer.WriteLine(string.Empty);\n                writer.PushBlock($\"namespace {projectNamespace}\");\n                writer.PushBlock($\"public static unsafe partial class {classPrefix}Native\");\n                foreach (FunctionDefinition fd in defs.Functions)\n                {\n                    foreach (OverloadDefinition overload in fd.Overloads)\n                    {\n                        string exportedName = overload.ExportedName;\n                        if (exportedName.Contains(\"~\")) { continue; }\n                        if (exportedName.Contains(\"ImVector_\")) { continue; }\n                        if (exportedName.Contains(\"ImChunkStream_\")) { continue; }\n\n                        if (overload.Parameters.Any(tr => tr.Type.Contains('('))) { continue; } // TODO: Parse function pointer parameters.\n\n                        string ret = GetTypeString(overload.ReturnType, false);\n\n                        bool hasVaList = false;\n                        List<string> paramParts = new List<string>();\n                        for (int i = 0; i < overload.Parameters.Length; i++)\n                        {\n                            TypeReference p = overload.Parameters[i];\n                            string paramType = GetTypeString(p.Type, p.IsFunctionPointer);\n                            if (p.ArraySize != 0)\n                            {\n                                paramType = paramType + \"*\";\n                            }\n\n                            if (p.Name == \"...\") { continue; }\n\n                            paramParts.Add($\"{paramType} {CorrectIdentifier(p.Name)}\");\n\n                            if (paramType == \"va_list\")\n                            {\n                                hasVaList = true;\n                                break;\n                            }\n                        }\n\n                        if (hasVaList) { continue; }\n\n                        string parameters = string.Join(\", \", paramParts);\n\n                        bool isUdtVariant = exportedName.Contains(\"nonUDT\");\n                        string methodName = isUdtVariant\n                            ? exportedName.Substring(0, exportedName.IndexOf(\"_nonUDT\"))\n                            : exportedName;\n\n                        if (isUdtVariant)\n                        {\n                            writer.WriteLine($\"[DllImport(\\\"{dllName}\\\", CallingConvention = CallingConvention.Cdecl, EntryPoint = \\\"{exportedName}\\\")]\");\n\n                        }\n                        else\n                        {\n                            writer.WriteLine($\"[DllImport(\\\"{dllName}\\\", CallingConvention = CallingConvention.Cdecl)]\");\n                        }\n                        writer.WriteLine($\"public static extern {ret} {methodName}({parameters});\");\n                    }\n                }\n                writer.PopBlock();\n                writer.PopBlock();\n            }\n\n            /*\n            using (CSharpCodeWriter writer = new CSharpCodeWriter(Path.Combine(outputPath, $\"{classPrefix}.gen.cs\")))\n            {\n                writer.Using(\"System\");\n                writer.Using(\"System.Numerics\");\n                writer.Using(\"System.Runtime.InteropServices\");\n                writer.Using(\"System.Text\");\n                if (referencesImGui)\n                {\n                    writer.Using(\"ImGuiNET\");\n                }\n                writer.WriteLine(string.Empty);\n                writer.PushBlock($\"namespace {projectNamespace}\");\n                writer.PushBlock($\"public static unsafe partial class {classPrefix}\");\n                foreach (FunctionDefinition fd in defs.Functions)\n                {\n                    if (TypeInfo.SkippedFunctions.Contains(fd.Name)) { continue; }\n\n                    foreach (OverloadDefinition overload in fd.Overloads)\n                    {\n                        string exportedName = overload.ExportedName;\n                        if (exportedName.StartsWith(\"ig\"))\n                        {\n                            exportedName = exportedName.Substring(2, exportedName.Length - 2);\n                        }\n                        if (exportedName.Contains(\"~\")) { continue; }\n                        if (overload.Parameters.Any(tr => tr.Type.Contains('('))) { continue; } // TODO: Parse function pointer parameters.\n\n                        bool hasVaList = false;\n                        for (int i = 0; i < overload.Parameters.Length; i++)\n                        {\n                            TypeReference p = overload.Parameters[i];\n                            string paramType = GetTypeString(p.Type, p.IsFunctionPointer);\n                            if (p.Name == \"...\") { continue; }\n\n                            if (paramType == \"va_list\")\n                            {\n                                hasVaList = true;\n                                break;\n                            }\n                        }\n                        if (hasVaList) { continue; }\n\n                        KeyValuePair<string, string>[] orderedDefaults = overload.DefaultValues.OrderByDescending(\n                            kvp => GetIndex(overload.Parameters, kvp.Key)).ToArray();\n\n                        for (int i = overload.DefaultValues.Count; i >= 0; i--)\n                        {\n                            if (overload.IsMemberFunction) { continue; }\n                            Dictionary<string, string> defaults = new Dictionary<string, string>();\n                            for (int j = 0; j < i; j++)\n                            {\n                                defaults.Add(orderedDefaults[j].Key, orderedDefaults[j].Value);\n                            }\n                            EmitOverload(writer, overload, defaults, null, classPrefix);\n                        }\n                    }\n                }\n                writer.PopBlock();\n                writer.PopBlock();\n            }\n            */\n\n            foreach (var method in defs.Variants)\n            {\n                foreach (var variant in method.Value.Parameters)\n                {\n                    if (!variant.Used) Console.WriteLine($\"Error: Variants targetting parameter {variant.Name} with type {variant.OriginalType} could not be applied to method {method.Key}.\");\n                }\n            }\n        }\n\n        private static bool IsStringFieldName(string name)\n        {\n            return Regex.IsMatch(name, \".*Filename.*\")\n                || Regex.IsMatch(name, \".*Name\");\n        }\n\n        private static string GetImVectorElementType(string typeStr)\n        {\n            int start = typeStr.IndexOf('<') + 1;\n            int end = typeStr.IndexOf('>');\n            int length = end - start;\n            return typeStr.Substring(start, length);\n        }\n\n        private static int GetIndex(TypeReference[] parameters, string key)\n        {\n            for (int i = 0; i < parameters.Length; i++)\n            {\n                if (key == parameters[i].Name) { return i; }\n            }\n\n            throw new InvalidOperationException();\n        }\n\n        private static void EmitOverload(\n            CSharpCodeWriter writer,\n            OverloadDefinition overload,\n            Dictionary<string, string> defaultValues,\n            string selfName,\n            string classPrefix)\n        {\n            if (overload.Parameters.Where(tr => tr.Name.EndsWith(\"_begin\") || tr.Name.EndsWith(\"_end\"))\n                .Any(tr => !defaultValues.ContainsKey(tr.Name)))\n            {\n                return;\n            }\n\n            Debug.Assert(!overload.IsMemberFunction || selfName != null);\n\n            string nativeRet = GetTypeString(overload.ReturnType, false);\n            bool isWrappedType = GetWrappedType(nativeRet, out string safeRet);\n            if (!isWrappedType)\n            {\n                safeRet = GetSafeType(overload.ReturnType);\n            }\n\n            List<string> invocationArgs = new List<string>();\n            MarshalledParameter[] marshalledParameters = new MarshalledParameter[overload.Parameters.Length];\n            List<string> preCallLines = new List<string>();\n            List<string> postCallLines = new List<string>();\n            List<string> byRefParams = new List<string>();\n            int selfIndex = -1;\n            int pOutIndex = -1;\n            string overrideRet = null;\n            for (int i = 0; i < overload.Parameters.Length; i++)\n            {\n                TypeReference tr = overload.Parameters[i];\n                if (tr.Name == \"self\")\n                {\n                    selfIndex = i;\n                    continue;\n                }\n                if (tr.Name == \"...\") { continue; }\n\n                string correctedIdentifier = CorrectIdentifier(tr.Name);\n                string nativeTypeName = GetTypeString(tr.Type, tr.IsFunctionPointer);\n                if (correctedIdentifier == \"pOut\" && overload.ReturnType == \"void\")\n                {\n                    pOutIndex = i;\n                    overrideRet = nativeTypeName.TrimEnd('*');\n                    preCallLines.Add($\"{overrideRet} __retval;\");\n                    continue;\n                }\n                if (tr.Type == \"char*\")\n                {\n                    string textToEncode = correctedIdentifier;\n                    bool hasDefault = false;\n                    if (defaultValues.TryGetValue(tr.Name, out string defaultStrVal))\n                    {\n                        hasDefault = true;\n                        if (!CorrectDefaultValue(defaultStrVal, tr, out string correctedDefault))\n                        {\n                            correctedDefault = defaultStrVal;\n                        }\n\n                        textToEncode = correctedDefault;\n                    }\n\n                    string nativeArgName = \"native_\" + tr.Name;\n                    marshalledParameters[i] = new MarshalledParameter(\"string\", false, nativeArgName, hasDefault);\n\n                    if (textToEncode == \"null\")\n                    {\n                        preCallLines.Add($\"byte* {nativeArgName} = null;\");\n                    }\n                    else\n                    {\n                        preCallLines.Add($\"byte* {nativeArgName};\");\n                        preCallLines.Add($\"int {correctedIdentifier}_byteCount = 0;\");\n                        if (!hasDefault)\n                        {\n                            preCallLines.Add($\"if ({textToEncode} != null)\");\n                            preCallLines.Add(\"{\");\n                        }\n                        preCallLines.Add($\"    {correctedIdentifier}_byteCount = Encoding.UTF8.GetByteCount({textToEncode});\");\n                        preCallLines.Add($\"    if ({correctedIdentifier}_byteCount > Util.StackAllocationSizeLimit)\");\n                        preCallLines.Add($\"    {{\");\n                        preCallLines.Add($\"        {nativeArgName} = Util.Allocate({correctedIdentifier}_byteCount + 1);\");\n                        preCallLines.Add($\"    }}\");\n                        preCallLines.Add($\"    else\");\n                        preCallLines.Add($\"    {{\");\n                        preCallLines.Add($\"        byte* {nativeArgName}_stackBytes = stackalloc byte[{correctedIdentifier}_byteCount + 1];\");\n                        preCallLines.Add($\"        {nativeArgName} = {nativeArgName}_stackBytes;\");\n                        preCallLines.Add($\"    }}\");\n                        preCallLines.Add($\"    int {nativeArgName}_offset = Util.GetUtf8({textToEncode}, {nativeArgName}, {correctedIdentifier}_byteCount);\");\n                        preCallLines.Add($\"    {nativeArgName}[{nativeArgName}_offset] = 0;\");\n\n                        if (!hasDefault)\n                        {\n                            preCallLines.Add(\"}\");\n                            preCallLines.Add($\"else {{ {nativeArgName} = null; }}\");\n                        }\n\n                        postCallLines.Add($\"if ({correctedIdentifier}_byteCount > Util.StackAllocationSizeLimit)\");\n                        postCallLines.Add($\"{{\");\n                        postCallLines.Add($\"    Util.Free({nativeArgName});\");\n                        postCallLines.Add($\"}}\");\n                    }\n                }\n                else if (defaultValues.TryGetValue(tr.Name, out string defaultVal))\n                {\n                    if (!CorrectDefaultValue(defaultVal, tr, out string correctedDefault))\n                    {\n                        correctedDefault = defaultVal;\n                    }\n                    marshalledParameters[i] = new MarshalledParameter(nativeTypeName, false, correctedIdentifier, true);\n                    preCallLines.Add($\"{nativeTypeName} {correctedIdentifier} = {correctedDefault};\");\n                }\n                else if (tr.Type == \"char* []\")\n                {\n                    string nativeArgName = \"native_\" + tr.Name;\n                    marshalledParameters[i] = new MarshalledParameter(\"string[]\", false, nativeArgName, false);\n\n                    preCallLines.Add($\"int* {correctedIdentifier}_byteCounts = stackalloc int[{correctedIdentifier}.Length];\");\n\n                    preCallLines.Add($\"int {correctedIdentifier}_byteCount = 0;\");\n                    preCallLines.Add($\"for (int i = 0; i < {correctedIdentifier}.Length; i++)\");\n                    preCallLines.Add(\"{\");\n                    preCallLines.Add($\"    string s = {correctedIdentifier}[i];\");\n                    preCallLines.Add($\"    {correctedIdentifier}_byteCounts[i] = Encoding.UTF8.GetByteCount(s);\");\n                    preCallLines.Add($\"    {correctedIdentifier}_byteCount += {correctedIdentifier}_byteCounts[i] + 1;\");\n                    preCallLines.Add(\"}\");\n\n                    preCallLines.Add($\"byte* {nativeArgName}_data = stackalloc byte[{correctedIdentifier}_byteCount];\");\n\n                    preCallLines.Add(\"int offset = 0;\");\n                    preCallLines.Add($\"for (int i = 0; i < {correctedIdentifier}.Length; i++)\");\n                    preCallLines.Add(\"{\");\n                    preCallLines.Add($\"    string s = {correctedIdentifier}[i];\");\n                    preCallLines.Add($\"    fixed (char* sPtr = s)\");\n                    preCallLines.Add(\"    {\");\n                    preCallLines.Add($\"        offset += Encoding.UTF8.GetBytes(sPtr, s.Length, {nativeArgName}_data + offset, {correctedIdentifier}_byteCounts[i]);\");\n                    preCallLines.Add($\"        {nativeArgName}_data[offset] = 0;\");\n                    preCallLines.Add($\"        offset += 1;\");\n                    preCallLines.Add(\"    }\");\n                    preCallLines.Add(\"}\");\n\n                    preCallLines.Add($\"byte** {nativeArgName} = stackalloc byte*[{correctedIdentifier}.Length];\");\n                    preCallLines.Add(\"offset = 0;\");\n                    preCallLines.Add($\"for (int i = 0; i < {correctedIdentifier}.Length; i++)\");\n                    preCallLines.Add(\"{\");\n                    preCallLines.Add($\"    {nativeArgName}[i] = &{nativeArgName}_data[offset];\");\n                    preCallLines.Add($\"    offset += {correctedIdentifier}_byteCounts[i] + 1;\");\n                    preCallLines.Add(\"}\");\n                }\n                else if (tr.Type == \"bool\")\n                {\n                    string nativeArgName = \"native_\" + tr.Name;\n                    marshalledParameters[i] = new MarshalledParameter(\"bool\", false, nativeArgName, false);\n                    preCallLines.Add($\"byte {nativeArgName} = {tr.Name} ? (byte)1 : (byte)0;\");\n                }\n                else if (tr.Type == \"bool*\")\n                {\n                    string nativeArgName = \"native_\" + tr.Name;\n                    marshalledParameters[i] = new MarshalledParameter(\"ref bool\", false, nativeArgName, false);\n                    preCallLines.Add($\"byte {nativeArgName}_val = {correctedIdentifier} ? (byte)1 : (byte)0;\");\n                    preCallLines.Add($\"byte* {nativeArgName} = &{nativeArgName}_val;\");\n                    postCallLines.Add($\"{correctedIdentifier} = {nativeArgName}_val != 0;\");\n                }\n                else if (tr.Type == \"void*\" || tr.Type == \"ImWchar*\")\n                {\n                    string nativePtrTypeName = tr.Type == \"void*\" ? \"void*\" : \"ushort*\";\n                    string nativeArgName = \"native_\" + tr.Name;\n                    marshalledParameters[i] = new MarshalledParameter(\"IntPtr\", false, nativeArgName, false);\n                    preCallLines.Add($\"{nativePtrTypeName} {nativeArgName} = ({nativePtrTypeName}){correctedIdentifier}.ToPointer();\");\n                }\n                else if (GetWrappedType(tr.Type, out string wrappedParamType)\n                    && !TypeInfo.WellKnownTypes.ContainsKey(tr.Type)\n                    && !TypeInfo.WellKnownTypes.ContainsKey(tr.Type.Substring(0, tr.Type.Length - 1)))\n                {\n                    marshalledParameters[i] = new MarshalledParameter(wrappedParamType, false, \"native_\" + tr.Name, false);\n                    string nativeArgName = \"native_\" + tr.Name;\n                    marshalledParameters[i] = new MarshalledParameter(wrappedParamType, false, nativeArgName, false);\n                    preCallLines.Add($\"{tr.Type} {nativeArgName} = {correctedIdentifier}.NativePtr;\");\n                }\n                else if ((tr.Type.EndsWith(\"*\") || tr.Type.Contains(\"[\") || tr.Type.EndsWith(\"&\")) && tr.Type != \"void*\" && tr.Type != \"ImGuiContext*\" && tr.Type != \"ImPlotContext*\" && tr.Type != \"EditorContext*\")\n                {\n                    string nonPtrType;\n                    if (tr.Type.Contains(\"[\"))\n                    {\n                        string wellKnown = TypeInfo.WellKnownTypes[tr.Type];\n                        nonPtrType = GetTypeString(wellKnown.Substring(0, wellKnown.Length - 1), false);\n                    }\n                    else\n                    {\n                        nonPtrType = GetTypeString(tr.Type.Substring(0, tr.Type.Length - 1), false);\n                    }\n                    string nativeArgName = \"native_\" + tr.Name;\n                    bool isOutParam = tr.Name.Contains(\"out_\") || tr.Name == \"out\";\n                    string direction = isOutParam ? \"out\" : \"ref\";\n                    marshalledParameters[i] = new MarshalledParameter($\"{direction} {nonPtrType}\", true, nativeArgName, false);\n                    marshalledParameters[i].PinTarget = CorrectIdentifier(tr.Name);\n                }\n                else\n                {\n                    marshalledParameters[i] = new MarshalledParameter(nativeTypeName, false, correctedIdentifier, false);\n                }\n\n                if (!marshalledParameters[i].HasDefaultValue)\n                {\n                    invocationArgs.Add($\"{marshalledParameters[i].MarshalledType} {correctedIdentifier}\");\n                }\n            }\n\n            string invocationList = string.Join(\", \", invocationArgs);\n            string friendlyName = overload.FriendlyName;\n\n            string staticPortion = selfName == null ? \"static \" : string.Empty;\n            writer.PushBlock($\"public {staticPortion}{overrideRet ?? safeRet} {friendlyName}({invocationList})\");\n            foreach (string line in preCallLines)\n            {\n                writer.WriteLine(line);\n            }\n\n            List<string> nativeInvocationArgs = new List<string>();\n\n            for (int i = 0; i < marshalledParameters.Length; i++)\n            {\n                TypeReference tr = overload.Parameters[i];\n                if (selfIndex == i)\n                {\n                    //Some overloads seem to be generated with IntPtr as self\n                    //instead of the proper pointer type. TODO: investigate\n                    string tstr = GetTypeString(tr.Type, false);\n                    nativeInvocationArgs.Add($\"({tstr})({selfName})\");\n                    continue;\n                }\n                if (pOutIndex == i)\n                {\n                    nativeInvocationArgs.Add(\"&__retval\");\n                    continue;\n                }\n                MarshalledParameter mp = marshalledParameters[i];\n                if (mp == null) { continue; }\n                if (mp.IsPinned)\n                {\n                    string nativePinType = GetTypeString(tr.Type, false);\n                    writer.PushBlock($\"fixed ({nativePinType} native_{tr.Name} = &{mp.PinTarget})\");\n                }\n\n                nativeInvocationArgs.Add(mp.VarName);\n            }\n\n            string nativeInvocationStr = string.Join(\", \", nativeInvocationArgs);\n            string ret = safeRet == \"void\" ? string.Empty : $\"{nativeRet} ret = \";\n\n            string targetName = overload.ExportedName;\n            if (targetName.Contains(\"nonUDT\"))\n            {\n                targetName = targetName.Substring(0, targetName.IndexOf(\"_nonUDT\"));\n            }\n\n            writer.WriteLine($\"{ret}{classPrefix}Native.{targetName}({nativeInvocationStr});\");\n\n            foreach (string line in postCallLines)\n            {\n                writer.WriteLine(line);\n            }\n\n            if (safeRet != \"void\")\n            {\n                if (safeRet == \"bool\")\n                {\n                    writer.WriteLine(\"return ret != 0;\");\n                }\n                else if (overload.ReturnType == \"char*\")\n                {\n                    writer.WriteLine(\"return Util.StringFromPtr(ret);\");\n                }\n                else if (overload.ReturnType == \"ImWchar*\")\n                {\n                    writer.WriteLine(\"return (IntPtr)ret;\");\n                }\n                else if (overload.ReturnType == \"void*\")\n                {\n                    writer.WriteLine(\"return (IntPtr)ret;\");\n                }\n                else\n                {\n                    string retVal = isWrappedType ? $\"new {safeRet}(ret)\" : \"ret\";\n                    writer.WriteLine($\"return {retVal};\");\n                }\n            }\n\n            if (overrideRet != null)\n                writer.WriteLine(\"return __retval;\");\n\n            for (int i = 0; i < marshalledParameters.Length; i++)\n            {\n                MarshalledParameter mp = marshalledParameters[i];\n                if (mp == null) { continue; }\n                if (mp.IsPinned)\n                {\n                    writer.PopBlock();\n                }\n            }\n\n            writer.PopBlock();\n        }\n\n        private static string GetSafeType(string nativeRet)\n        {\n            if (nativeRet == \"bool\")\n            {\n                return \"bool\";\n            }\n            else if (nativeRet == \"char*\")\n            {\n                return \"string\";\n            }\n            else if (nativeRet == \"ImWchar*\" || nativeRet == \"void*\")\n            {\n                return \"IntPtr\";\n            }\n\n            return GetTypeString(nativeRet, false);\n        }\n\n        private static string GetSafeType(TypeReference typeRef)\n        {\n            return typeRef.Type;\n        }\n\n        private static bool GetWrappedType(string nativeType, out string wrappedType)\n        {\n            if (nativeType.StartsWith(\"Im\") && nativeType.EndsWith(\"*\") && !nativeType.StartsWith(\"ImVector\"))\n            {\n                int pointerLevel = nativeType.Length - nativeType.IndexOf('*');\n                if (pointerLevel > 1)\n                {\n                    wrappedType = null;\n                    return false; // TODO\n                }\n                string nonPtrType = nativeType.Substring(0, nativeType.Length - pointerLevel);\n\n                if (TypeInfo.WellKnownTypes.ContainsKey(nonPtrType))\n                {\n                    wrappedType = null;\n                    return false;\n                }\n\n                wrappedType = nonPtrType + \"Ptr\";\n\n                return true;\n            }\n            else\n            {\n                wrappedType = null;\n                return false;\n            }\n        }\n\n        private static bool CorrectDefaultValue(string defaultVal, TypeReference tr, out string correctedDefault)\n        {\n            if (tr.Type == \"ImGuiContext*\" || tr.Type == \"ImPlotContext*\" || tr.Type == \"EditorContext*\")\n            {\n                correctedDefault = \"IntPtr.Zero\";\n                return true;\n            }\n\n            if (TypeInfo.WellKnownDefaultValues.TryGetValue(defaultVal, out correctedDefault)) { return true; }\n\n            if (tr.Type == \"bool\")\n            {\n                correctedDefault = bool.Parse(defaultVal) ? \"1\" : \"0\";\n                return true;\n            }\n\n            if (defaultVal.Contains(\"%\")) { correctedDefault = null; return false; }\n\n            if (tr.IsEnum)\n            {\n                if (defaultVal.StartsWith(\"-\"))\n                {\n                    correctedDefault = $\"({tr.Type})({defaultVal})\";\n                }\n                else\n                {\n                    correctedDefault = $\"({tr.Type}){defaultVal}\";\n                }\n                return true;\n            }\n\n            correctedDefault = defaultVal;\n            return true;\n        }\n\n        private static string GetTypeString(string typeName, bool isFunctionPointer)\n        {\n            int pointerLevel = 0;\n            if (typeName.EndsWith(\"**\")) { pointerLevel = 2; }\n            else if (typeName.EndsWith(\"*\")) { pointerLevel = 1; }\n\n            if (!TypeInfo.WellKnownTypes.TryGetValue(typeName, out string typeStr))\n            {\n                if (TypeInfo.WellKnownTypes.TryGetValue(typeName.Substring(0, typeName.Length - pointerLevel), out typeStr))\n                {\n                    typeStr = typeStr + new string('*', pointerLevel);\n                }\n                else if (!TypeInfo.WellKnownTypes.TryGetValue(typeName, out typeStr))\n                {\n                    typeStr = typeName;\n                    if (isFunctionPointer) { typeStr = \"IntPtr\"; }\n                }\n            }\n\n            return typeStr;\n        }\n\n        private static string CorrectIdentifier(string identifier)\n        {\n            if (TypeInfo.IdentifierReplacements.TryGetValue(identifier, out string replacement))\n            {\n                return replacement;\n            }\n            else\n            {\n                return identifier;\n            }\n        }\n    }\n\n    class MarshalledParameter\n    {\n        public MarshalledParameter(string marshalledType, bool isPinned, string varName, bool hasDefaultValue)\n        {\n            MarshalledType = marshalledType;\n            IsPinned = isPinned;\n            VarName = varName;\n            HasDefaultValue = hasDefaultValue;\n        }\n\n        public string MarshalledType { get; }\n        public bool IsPinned { get; }\n        public string VarName { get; }\n        public bool HasDefaultValue { get; }\n        public string PinTarget { get; internal set; }\n    }\n}"
  },
  {
    "path": "tools/ImGui.NET/CodeGenerator/TypeInfo.cs",
    "content": "using System.Collections.Generic;\n\nnamespace CodeGenerator\n{\n    public class TypeInfo\n    {\n        public static readonly Dictionary<string, string> WellKnownTypes = new Dictionary<string, string>()\n        {\n            { \"bool\", \"byte\" },\n            { \"unsigned char\", \"byte\" },\n            { \"signed char\", \"sbyte\" },\n            { \"char\", \"byte\" },\n            { \"ImWchar\", \"ushort\" },\n            { \"ImFileHandle\", \"IntPtr\" },\n            { \"ImU8\", \"byte\" },\n            { \"ImS8\", \"sbyte\" },\n            { \"ImU16\", \"ushort\" },\n            { \"ImS16\", \"short\" },\n            { \"ImU32\", \"uint\" },\n            { \"ImS32\", \"int\" },\n            { \"ImU64\", \"ulong\" },\n            { \"ImS64\", \"long\" },\n            { \"unsigned short\", \"ushort\" },\n            { \"unsigned int\", \"uint\" },\n            { \"ImVec2\", \"Vector2\" },\n            { \"ImVec2_Simple\", \"Vector2\" },\n            { \"ImVec3\", \"Vector3\" },\n            { \"ImVec4\", \"Vector4\" },\n            { \"ImWchar16\", \"ushort\" }, //char is not blittable\n            { \"ImVec4_Simple\", \"Vector4\" },\n            { \"ImColor_Simple\", \"ImColor\" },\n            { \"ImTextureID\", \"IntPtr\" },\n            { \"ImGuiID\", \"uint\" },\n            { \"ImDrawIdx\", \"ushort\" },\n            { \"ImDrawListSharedData\", \"IntPtr\" },\n            { \"ImDrawListSharedData*\", \"IntPtr\" },\n            { \"ImDrawCallback\", \"IntPtr\" },\n            { \"size_t\", \"uint\" },\n            { \"ImGuiContext*\", \"IntPtr\" },\n            { \"ImPlotContext*\", \"IntPtr\" },\n            { \"EditorContext*\", \"IntPtr\" },\n            { \"ImGuiMemAllocFunc\", \"IntPtr\" },\n            { \"ImGuiMemFreeFunc\", \"IntPtr\" },\n            { \"ImFontBuilderIO\", \"IntPtr\" },\n            { \"float[2]\", \"Vector2*\" },\n            { \"float[3]\", \"Vector3*\" },\n            { \"float[4]\", \"Vector4*\" },\n            { \"int[2]\", \"int*\" },\n            { \"int[3]\", \"int*\" },\n            { \"int[4]\", \"int*\" },\n            { \"float&\", \"float*\" },\n            { \"ImVec2[2]\", \"Vector2*\" },\n            { \"char* []\", \"byte**\" },\n            { \"unsigned char[256]\", \"byte*\"},\n            { \"ImPlotFormatter\", \"IntPtr\" },\n            { \"ImPlotGetter\", \"IntPtr\" },\n            { \"ImPlotTransform\", \"IntPtr\" },\n            { \"ImGuiKeyChord\", \"ImGuiKey\" },\n            { \"ImGuiSelectionUserData\", \"long\" },\n        };\n        \n        public static readonly List<string> WellKnownEnums = new List<string>()\n        {\n            \"ImGuiMouseButton\"\n        };\n\n        public static readonly Dictionary<string, string> AlternateEnumPrefixes = new Dictionary<string, string>()\n        {\n            { \"ImGuiKey\", \"ImGuiMod\" },\n        };\n\n        public static readonly Dictionary<string, string> AlternateEnumPrefixSubstitutions = new Dictionary<string, string>()\n        {\n            { \"ImGuiMod_\", \"Mod\" },\n        };\n\n        public static readonly Dictionary<string, string> WellKnownFieldReplacements = new Dictionary<string, string>()\n        {\n            { \"bool\", \"bool\" }, // Force bool to remain as bool in type-safe wrappers.\n        };\n\n        public static readonly HashSet<string> CustomDefinedTypes = new HashSet<string>()\n        {\n            //\"ImVector\",\n            //\"ImVec2\",\n            //\"ImVec4\",\n            \"ImGuiStoragePair\"\n        };\n\n        public static readonly Dictionary<string, string> WellKnownDefaultValues = new Dictionary<string, string>()\n        {\n            { \"((void *)0)\", \"null\" },\n            { \"((void*)0)\", \"null\" },\n            { \"NULL\", \"null\"},\n            { \"nullptr\", \"null\"},\n            { \"ImVec2(0,0)\", \"new Vector2()\" },\n            { \"ImVec2(0.0f,0.0f)\", \"new Vector2()\" },\n            { \"ImVec2(-FLT_MIN,0)\", \"new Vector2(-float.MinValue, 0.0f)\" },\n            { \"ImVec2(-1,0)\", \"new Vector2(-1, 0)\" },\n            { \"ImVec2(1,0)\", \"new Vector2(1, 0)\" },\n            { \"ImVec2(1,1)\", \"new Vector2(1, 1)\" },\n            { \"ImVec2(0,1)\", \"new Vector2(0, 1)\" },\n            { \"ImVec4(0,0,0,0)\", \"new Vector4()\" },\n            { \"ImVec4(1,1,1,1)\", \"new Vector4(1, 1, 1, 1)\" },\n            { \"ImVec4(0,0,0,-1)\", \"new Vector4(0, 0, 0, -1)\" },\n            { \"ImPlotPoint(0,0)\", \"new ImPlotPoint { x = 0, y = 0 }\" },\n            { \"ImPlotPoint(1,1)\", \"new ImPlotPoint { x = 1, y = 1 }\" },\n            { \"ImDrawCornerFlags_All\", \"ImDrawCornerFlags.All\" },\n            { \"ImPlotFlags_None\", \"ImPlotFlags.None\"},\n            { \"ImPlotAxisFlags_None\", \"ImPlotAxisFlags.None\"},\n            { \"ImPlotAxisFlags_NoGridLines\", \"ImPlotAxisFlags.NoGridLines\"},\n            { \"ImGuiCond_Once\", \"ImGuiCond.Once\"},\n            { \"ImPlotOrientation_Vertical\", \"ImPlotOrientation.Vertical\"},\n            { \"PinShape_CircleFilled\", \"PinShape.CircleFilled\"},\n            { \"ImGuiPopupFlags_None\", \"ImGuiPopupFlags.None\"},\n            { \"ImGuiNavHighlightFlags_TypeDefault\", \"ImGuiNavHighlightFlags.TypeDefault\"},\n            { \"ImGuiKeyModFlags_Ctrl\", \"ImGuiKeyModFlags.Ctrl\"},\n            { \"ImPlotYAxis_1\", \"ImPlotYAxis._1\"},\n            { \"FLT_MAX\", \"float.MaxValue\" },\n            { \"(((ImU32)(255)<<24)|((ImU32)(255)<<16)|((ImU32)(255)<<8)|((ImU32)(255)<<0))\", \"0xFFFFFFFF\" },\n            { \"sizeof(ImU8)\", \"sizeof(byte)\"},\n            { \"sizeof(ImS8)\", \"sizeof(sbyte)\"},\n            { \"sizeof(ImU16)\", \"sizeof(ushort)\"},\n            { \"sizeof(ImS16)\", \"sizeof(short)\"},\n            { \"sizeof(ImU32)\", \"sizeof(uint)\"},\n            { \"sizeof(ImS32)\", \"sizeof(int)\"},\n            { \"sizeof(ImU64)\", \"sizeof(ulong)\"},\n            { \"sizeof(ImS64)\", \"sizeof(long)\"},\n            { \"ImPlotBin_Sturges\", \"(int)ImPlotBin.Sturges\" },\n            { \"ImPlotRect()\", \"new ImPlotRect()\" },\n            { \"ImPlotCond_Once\", \"ImPlotCond.Once\" },\n            { \"ImPlotRange()\", \"new ImPlotRange()\" },\n            \n        };\n\n        public static readonly Dictionary<string, string> IdentifierReplacements = new Dictionary<string, string>()\n        {\n            { \"in\", \"@in\" },\n            { \"out\", \"@out\" },\n            { \"ref\", \"@ref\" },\n        };\n\n        public static readonly HashSet<string> LegalFixedTypes = new HashSet<string>()\n        {\n            \"byte\",\n            \"sbyte\",\n            \"char\",\n            \"ushort\",\n            \"short\",\n            \"uint\",\n            \"int\",\n            \"ulong\",\n            \"long\",\n            \"float\",\n            \"double\",\n        };\n\n        public static readonly HashSet<string> SkippedFunctions = new HashSet<string>()\n        {\n            \"igInputText\",\n            \"igInputTextMultiline\",\n            \"igCalcTextSize\",\n            \"igInputTextWithHint\"\n        };\n    }\n}\n"
  },
  {
    "path": "tools/ImGui.NET/CodeGenerator/definitions/cimgui/definitions.json",
    "content": "{\n  \"ImBitArray_ClearAllBits\": [\n    {\n      \"args\": \"(ImBitArray* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImBitArray*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImBitArray_ClearAllBits\",\n      \"defaults\": {},\n      \"funcname\": \"ClearAllBits\",\n      \"location\": \"imgui_internal:594\",\n      \"ov_cimguiname\": \"ImBitArray_ClearAllBits\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"ImBitArray\",\n      \"templated\": true\n    }\n  ],\n  \"ImBitArray_ClearBit\": [\n    {\n      \"args\": \"(ImBitArray* self,int n)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImBitArray*\"\n        },\n        {\n          \"name\": \"n\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(int n)\",\n      \"call_args\": \"(n)\",\n      \"cimguiname\": \"ImBitArray_ClearBit\",\n      \"defaults\": {},\n      \"funcname\": \"ClearBit\",\n      \"location\": \"imgui_internal:598\",\n      \"ov_cimguiname\": \"ImBitArray_ClearBit\",\n      \"ret\": \"void\",\n      \"signature\": \"(int)\",\n      \"stname\": \"ImBitArray\",\n      \"templated\": true\n    }\n  ],\n  \"ImBitArray_ImBitArray\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImBitArray_ImBitArray\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImBitArray\",\n      \"location\": \"imgui_internal:593\",\n      \"ov_cimguiname\": \"ImBitArray_ImBitArray\",\n      \"signature\": \"()\",\n      \"stname\": \"ImBitArray\",\n      \"templated\": true\n    }\n  ],\n  \"ImBitArray_SetAllBits\": [\n    {\n      \"args\": \"(ImBitArray* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImBitArray*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImBitArray_SetAllBits\",\n      \"defaults\": {},\n      \"funcname\": \"SetAllBits\",\n      \"location\": \"imgui_internal:595\",\n      \"ov_cimguiname\": \"ImBitArray_SetAllBits\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"ImBitArray\",\n      \"templated\": true\n    }\n  ],\n  \"ImBitArray_SetBit\": [\n    {\n      \"args\": \"(ImBitArray* self,int n)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImBitArray*\"\n        },\n        {\n          \"name\": \"n\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(int n)\",\n      \"call_args\": \"(n)\",\n      \"cimguiname\": \"ImBitArray_SetBit\",\n      \"defaults\": {},\n      \"funcname\": \"SetBit\",\n      \"location\": \"imgui_internal:597\",\n      \"ov_cimguiname\": \"ImBitArray_SetBit\",\n      \"ret\": \"void\",\n      \"signature\": \"(int)\",\n      \"stname\": \"ImBitArray\",\n      \"templated\": true\n    }\n  ],\n  \"ImBitArray_SetBitRange\": [\n    {\n      \"args\": \"(ImBitArray* self,int n,int n2)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImBitArray*\"\n        },\n        {\n          \"name\": \"n\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"n2\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(int n,int n2)\",\n      \"call_args\": \"(n,n2)\",\n      \"cimguiname\": \"ImBitArray_SetBitRange\",\n      \"defaults\": {},\n      \"funcname\": \"SetBitRange\",\n      \"location\": \"imgui_internal:599\",\n      \"ov_cimguiname\": \"ImBitArray_SetBitRange\",\n      \"ret\": \"void\",\n      \"signature\": \"(int,int)\",\n      \"stname\": \"ImBitArray\",\n      \"templated\": true\n    }\n  ],\n  \"ImBitArray_TestBit\": [\n    {\n      \"args\": \"(ImBitArray* self,int n)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImBitArray*\"\n        },\n        {\n          \"name\": \"n\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(int n)\",\n      \"call_args\": \"(n)\",\n      \"cimguiname\": \"ImBitArray_TestBit\",\n      \"defaults\": {},\n      \"funcname\": \"TestBit\",\n      \"location\": \"imgui_internal:596\",\n      \"ov_cimguiname\": \"ImBitArray_TestBit\",\n      \"ret\": \"bool\",\n      \"signature\": \"(int)const\",\n      \"stname\": \"ImBitArray\",\n      \"templated\": true\n    }\n  ],\n  \"ImBitArray_destroy\": [\n    {\n      \"args\": \"(ImBitArray* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImBitArray*\"\n        }\n      ],\n      \"call_args\": \"(self)\",\n      \"cimguiname\": \"ImBitArray_destroy\",\n      \"defaults\": {},\n      \"destructor\": true,\n      \"location\": \"imgui_internal:593\",\n      \"ov_cimguiname\": \"ImBitArray_destroy\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImBitArray*)\",\n      \"stname\": \"ImBitArray\",\n      \"templated\": true\n    }\n  ],\n  \"ImBitVector_Clear\": [\n    {\n      \"args\": \"(ImBitVector* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImBitVector*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImBitVector_Clear\",\n      \"defaults\": {},\n      \"funcname\": \"Clear\",\n      \"location\": \"imgui_internal:609\",\n      \"ov_cimguiname\": \"ImBitVector_Clear\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"ImBitVector\"\n    }\n  ],\n  \"ImBitVector_ClearBit\": [\n    {\n      \"args\": \"(ImBitVector* self,int n)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImBitVector*\"\n        },\n        {\n          \"name\": \"n\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(int n)\",\n      \"call_args\": \"(n)\",\n      \"cimguiname\": \"ImBitVector_ClearBit\",\n      \"defaults\": {},\n      \"funcname\": \"ClearBit\",\n      \"location\": \"imgui_internal:612\",\n      \"ov_cimguiname\": \"ImBitVector_ClearBit\",\n      \"ret\": \"void\",\n      \"signature\": \"(int)\",\n      \"stname\": \"ImBitVector\"\n    }\n  ],\n  \"ImBitVector_Create\": [\n    {\n      \"args\": \"(ImBitVector* self,int sz)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImBitVector*\"\n        },\n        {\n          \"name\": \"sz\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(int sz)\",\n      \"call_args\": \"(sz)\",\n      \"cimguiname\": \"ImBitVector_Create\",\n      \"defaults\": {},\n      \"funcname\": \"Create\",\n      \"location\": \"imgui_internal:608\",\n      \"ov_cimguiname\": \"ImBitVector_Create\",\n      \"ret\": \"void\",\n      \"signature\": \"(int)\",\n      \"stname\": \"ImBitVector\"\n    }\n  ],\n  \"ImBitVector_SetBit\": [\n    {\n      \"args\": \"(ImBitVector* self,int n)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImBitVector*\"\n        },\n        {\n          \"name\": \"n\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(int n)\",\n      \"call_args\": \"(n)\",\n      \"cimguiname\": \"ImBitVector_SetBit\",\n      \"defaults\": {},\n      \"funcname\": \"SetBit\",\n      \"location\": \"imgui_internal:611\",\n      \"ov_cimguiname\": \"ImBitVector_SetBit\",\n      \"ret\": \"void\",\n      \"signature\": \"(int)\",\n      \"stname\": \"ImBitVector\"\n    }\n  ],\n  \"ImBitVector_TestBit\": [\n    {\n      \"args\": \"(ImBitVector* self,int n)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImBitVector*\"\n        },\n        {\n          \"name\": \"n\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(int n)\",\n      \"call_args\": \"(n)\",\n      \"cimguiname\": \"ImBitVector_TestBit\",\n      \"defaults\": {},\n      \"funcname\": \"TestBit\",\n      \"location\": \"imgui_internal:610\",\n      \"ov_cimguiname\": \"ImBitVector_TestBit\",\n      \"ret\": \"bool\",\n      \"signature\": \"(int)const\",\n      \"stname\": \"ImBitVector\"\n    }\n  ],\n  \"ImChunkStream_alloc_chunk\": [\n    {\n      \"args\": \"(ImChunkStream* self,size_t sz)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImChunkStream*\"\n        },\n        {\n          \"name\": \"sz\",\n          \"type\": \"size_t\"\n        }\n      ],\n      \"argsoriginal\": \"(size_t sz)\",\n      \"call_args\": \"(sz)\",\n      \"cimguiname\": \"ImChunkStream_alloc_chunk\",\n      \"defaults\": {},\n      \"funcname\": \"alloc_chunk\",\n      \"location\": \"imgui_internal:713\",\n      \"ov_cimguiname\": \"ImChunkStream_alloc_chunk\",\n      \"ret\": \"T*\",\n      \"signature\": \"(size_t)\",\n      \"stname\": \"ImChunkStream\",\n      \"templated\": true\n    }\n  ],\n  \"ImChunkStream_begin\": [\n    {\n      \"args\": \"(ImChunkStream* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImChunkStream*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImChunkStream_begin\",\n      \"defaults\": {},\n      \"funcname\": \"begin\",\n      \"location\": \"imgui_internal:714\",\n      \"ov_cimguiname\": \"ImChunkStream_begin\",\n      \"ret\": \"T*\",\n      \"signature\": \"()\",\n      \"stname\": \"ImChunkStream\",\n      \"templated\": true\n    }\n  ],\n  \"ImChunkStream_chunk_size\": [\n    {\n      \"args\": \"(ImChunkStream* self,const T* p)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImChunkStream*\"\n        },\n        {\n          \"name\": \"p\",\n          \"type\": \"const T*\"\n        }\n      ],\n      \"argsoriginal\": \"(const T* p)\",\n      \"call_args\": \"(p)\",\n      \"cimguiname\": \"ImChunkStream_chunk_size\",\n      \"defaults\": {},\n      \"funcname\": \"chunk_size\",\n      \"location\": \"imgui_internal:716\",\n      \"ov_cimguiname\": \"ImChunkStream_chunk_size\",\n      \"ret\": \"int\",\n      \"signature\": \"(const T*)\",\n      \"stname\": \"ImChunkStream\",\n      \"templated\": true\n    }\n  ],\n  \"ImChunkStream_clear\": [\n    {\n      \"args\": \"(ImChunkStream* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImChunkStream*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImChunkStream_clear\",\n      \"defaults\": {},\n      \"funcname\": \"clear\",\n      \"location\": \"imgui_internal:710\",\n      \"ov_cimguiname\": \"ImChunkStream_clear\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"ImChunkStream\",\n      \"templated\": true\n    }\n  ],\n  \"ImChunkStream_empty\": [\n    {\n      \"args\": \"(ImChunkStream* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImChunkStream*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImChunkStream_empty\",\n      \"defaults\": {},\n      \"funcname\": \"empty\",\n      \"location\": \"imgui_internal:711\",\n      \"ov_cimguiname\": \"ImChunkStream_empty\",\n      \"ret\": \"bool\",\n      \"signature\": \"()const\",\n      \"stname\": \"ImChunkStream\",\n      \"templated\": true\n    }\n  ],\n  \"ImChunkStream_end\": [\n    {\n      \"args\": \"(ImChunkStream* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImChunkStream*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImChunkStream_end\",\n      \"defaults\": {},\n      \"funcname\": \"end\",\n      \"location\": \"imgui_internal:717\",\n      \"ov_cimguiname\": \"ImChunkStream_end\",\n      \"ret\": \"T*\",\n      \"signature\": \"()\",\n      \"stname\": \"ImChunkStream\",\n      \"templated\": true\n    }\n  ],\n  \"ImChunkStream_next_chunk\": [\n    {\n      \"args\": \"(ImChunkStream* self,T* p)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImChunkStream*\"\n        },\n        {\n          \"name\": \"p\",\n          \"type\": \"T*\"\n        }\n      ],\n      \"argsoriginal\": \"(T* p)\",\n      \"call_args\": \"(p)\",\n      \"cimguiname\": \"ImChunkStream_next_chunk\",\n      \"defaults\": {},\n      \"funcname\": \"next_chunk\",\n      \"location\": \"imgui_internal:715\",\n      \"ov_cimguiname\": \"ImChunkStream_next_chunk\",\n      \"ret\": \"T*\",\n      \"signature\": \"(T*)\",\n      \"stname\": \"ImChunkStream\",\n      \"templated\": true\n    }\n  ],\n  \"ImChunkStream_offset_from_ptr\": [\n    {\n      \"args\": \"(ImChunkStream* self,const T* p)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImChunkStream*\"\n        },\n        {\n          \"name\": \"p\",\n          \"type\": \"const T*\"\n        }\n      ],\n      \"argsoriginal\": \"(const T* p)\",\n      \"call_args\": \"(p)\",\n      \"cimguiname\": \"ImChunkStream_offset_from_ptr\",\n      \"defaults\": {},\n      \"funcname\": \"offset_from_ptr\",\n      \"location\": \"imgui_internal:718\",\n      \"ov_cimguiname\": \"ImChunkStream_offset_from_ptr\",\n      \"ret\": \"int\",\n      \"signature\": \"(const T*)\",\n      \"stname\": \"ImChunkStream\",\n      \"templated\": true\n    }\n  ],\n  \"ImChunkStream_ptr_from_offset\": [\n    {\n      \"args\": \"(ImChunkStream* self,int off)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImChunkStream*\"\n        },\n        {\n          \"name\": \"off\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(int off)\",\n      \"call_args\": \"(off)\",\n      \"cimguiname\": \"ImChunkStream_ptr_from_offset\",\n      \"defaults\": {},\n      \"funcname\": \"ptr_from_offset\",\n      \"location\": \"imgui_internal:719\",\n      \"ov_cimguiname\": \"ImChunkStream_ptr_from_offset\",\n      \"ret\": \"T*\",\n      \"signature\": \"(int)\",\n      \"stname\": \"ImChunkStream\",\n      \"templated\": true\n    }\n  ],\n  \"ImChunkStream_size\": [\n    {\n      \"args\": \"(ImChunkStream* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImChunkStream*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImChunkStream_size\",\n      \"defaults\": {},\n      \"funcname\": \"size\",\n      \"location\": \"imgui_internal:712\",\n      \"ov_cimguiname\": \"ImChunkStream_size\",\n      \"ret\": \"int\",\n      \"signature\": \"()const\",\n      \"stname\": \"ImChunkStream\",\n      \"templated\": true\n    }\n  ],\n  \"ImChunkStream_swap\": [\n    {\n      \"args\": \"(ImChunkStream* self,ImChunkStream_T * rhs)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImChunkStream*\"\n        },\n        {\n          \"name\": \"rhs\",\n          \"reftoptr\": true,\n          \"type\": \"ImChunkStream_T *\"\n        }\n      ],\n      \"argsoriginal\": \"(ImChunkStream<T>& rhs)\",\n      \"call_args\": \"(*rhs)\",\n      \"cimguiname\": \"ImChunkStream_swap\",\n      \"defaults\": {},\n      \"funcname\": \"swap\",\n      \"location\": \"imgui_internal:720\",\n      \"ov_cimguiname\": \"ImChunkStream_swap\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImChunkStream_T *)\",\n      \"stname\": \"ImChunkStream\",\n      \"templated\": true\n    }\n  ],\n  \"ImColor_HSV\": [\n    {\n      \"args\": \"(ImColor *pOut,float h,float s,float v,float a)\",\n      \"argsT\": [\n        {\n          \"name\": \"pOut\",\n          \"type\": \"ImColor*\"\n        },\n        {\n          \"name\": \"h\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"s\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"v\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"a\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(float h,float s,float v,float a=1.0f)\",\n      \"call_args\": \"(h,s,v,a)\",\n      \"cimguiname\": \"ImColor_HSV\",\n      \"defaults\": {\n        \"a\": \"1.0f\"\n      },\n      \"funcname\": \"HSV\",\n      \"is_static_function\": true,\n      \"location\": \"imgui:2768\",\n      \"nonUDT\": 1,\n      \"ov_cimguiname\": \"ImColor_HSV\",\n      \"ret\": \"void\",\n      \"signature\": \"(float,float,float,float)\",\n      \"stname\": \"ImColor\"\n    }\n  ],\n  \"ImColor_ImColor\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImColor_ImColor\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImColor\",\n      \"location\": \"imgui:2758\",\n      \"ov_cimguiname\": \"ImColor_ImColor_Nil\",\n      \"signature\": \"()\",\n      \"stname\": \"ImColor\"\n    },\n    {\n      \"args\": \"(float r,float g,float b,float a)\",\n      \"argsT\": [\n        {\n          \"name\": \"r\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"g\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"b\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"a\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(float r,float g,float b,float a=1.0f)\",\n      \"call_args\": \"(r,g,b,a)\",\n      \"cimguiname\": \"ImColor_ImColor\",\n      \"constructor\": true,\n      \"defaults\": {\n        \"a\": \"1.0f\"\n      },\n      \"funcname\": \"ImColor\",\n      \"location\": \"imgui:2759\",\n      \"ov_cimguiname\": \"ImColor_ImColor_Float\",\n      \"signature\": \"(float,float,float,float)\",\n      \"stname\": \"ImColor\"\n    },\n    {\n      \"args\": \"(const ImVec4 col)\",\n      \"argsT\": [\n        {\n          \"name\": \"col\",\n          \"type\": \"const ImVec4\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImVec4& col)\",\n      \"call_args\": \"(col)\",\n      \"cimguiname\": \"ImColor_ImColor\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImColor\",\n      \"location\": \"imgui:2760\",\n      \"ov_cimguiname\": \"ImColor_ImColor_Vec4\",\n      \"signature\": \"(const ImVec4)\",\n      \"stname\": \"ImColor\"\n    },\n    {\n      \"args\": \"(int r,int g,int b,int a)\",\n      \"argsT\": [\n        {\n          \"name\": \"r\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"g\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"b\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"a\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(int r,int g,int b,int a=255)\",\n      \"call_args\": \"(r,g,b,a)\",\n      \"cimguiname\": \"ImColor_ImColor\",\n      \"constructor\": true,\n      \"defaults\": {\n        \"a\": \"255\"\n      },\n      \"funcname\": \"ImColor\",\n      \"location\": \"imgui:2761\",\n      \"ov_cimguiname\": \"ImColor_ImColor_Int\",\n      \"signature\": \"(int,int,int,int)\",\n      \"stname\": \"ImColor\"\n    },\n    {\n      \"args\": \"(ImU32 rgba)\",\n      \"argsT\": [\n        {\n          \"name\": \"rgba\",\n          \"type\": \"ImU32\"\n        }\n      ],\n      \"argsoriginal\": \"(ImU32 rgba)\",\n      \"call_args\": \"(rgba)\",\n      \"cimguiname\": \"ImColor_ImColor\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImColor\",\n      \"location\": \"imgui:2762\",\n      \"ov_cimguiname\": \"ImColor_ImColor_U32\",\n      \"signature\": \"(ImU32)\",\n      \"stname\": \"ImColor\"\n    }\n  ],\n  \"ImColor_SetHSV\": [\n    {\n      \"args\": \"(ImColor* self,float h,float s,float v,float a)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImColor*\"\n        },\n        {\n          \"name\": \"h\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"s\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"v\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"a\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(float h,float s,float v,float a=1.0f)\",\n      \"call_args\": \"(h,s,v,a)\",\n      \"cimguiname\": \"ImColor_SetHSV\",\n      \"defaults\": {\n        \"a\": \"1.0f\"\n      },\n      \"funcname\": \"SetHSV\",\n      \"location\": \"imgui:2767\",\n      \"ov_cimguiname\": \"ImColor_SetHSV\",\n      \"ret\": \"void\",\n      \"signature\": \"(float,float,float,float)\",\n      \"stname\": \"ImColor\"\n    }\n  ],\n  \"ImColor_destroy\": [\n    {\n      \"args\": \"(ImColor* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImColor*\"\n        }\n      ],\n      \"call_args\": \"(self)\",\n      \"cimguiname\": \"ImColor_destroy\",\n      \"defaults\": {},\n      \"destructor\": true,\n      \"location\": \"imgui:2758\",\n      \"ov_cimguiname\": \"ImColor_destroy\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImColor*)\",\n      \"stname\": \"ImColor\"\n    }\n  ],\n  \"ImDrawCmd_GetTexID\": [\n    {\n      \"args\": \"(ImDrawCmd* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImDrawCmd*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImDrawCmd_GetTexID\",\n      \"defaults\": {},\n      \"funcname\": \"GetTexID\",\n      \"location\": \"imgui:2966\",\n      \"ov_cimguiname\": \"ImDrawCmd_GetTexID\",\n      \"ret\": \"ImTextureID\",\n      \"signature\": \"()const\",\n      \"stname\": \"ImDrawCmd\"\n    }\n  ],\n  \"ImDrawCmd_ImDrawCmd\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImDrawCmd_ImDrawCmd\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImDrawCmd\",\n      \"location\": \"imgui:2963\",\n      \"ov_cimguiname\": \"ImDrawCmd_ImDrawCmd\",\n      \"signature\": \"()\",\n      \"stname\": \"ImDrawCmd\"\n    }\n  ],\n  \"ImDrawCmd_destroy\": [\n    {\n      \"args\": \"(ImDrawCmd* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImDrawCmd*\"\n        }\n      ],\n      \"call_args\": \"(self)\",\n      \"cimguiname\": \"ImDrawCmd_destroy\",\n      \"defaults\": {},\n      \"destructor\": true,\n      \"location\": \"imgui:2963\",\n      \"ov_cimguiname\": \"ImDrawCmd_destroy\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImDrawCmd*)\",\n      \"stname\": \"ImDrawCmd\"\n    }\n  ],\n  \"ImDrawDataBuilder_ImDrawDataBuilder\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImDrawDataBuilder_ImDrawDataBuilder\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImDrawDataBuilder\",\n      \"location\": \"imgui_internal:799\",\n      \"ov_cimguiname\": \"ImDrawDataBuilder_ImDrawDataBuilder\",\n      \"signature\": \"()\",\n      \"stname\": \"ImDrawDataBuilder\"\n    }\n  ],\n  \"ImDrawDataBuilder_destroy\": [\n    {\n      \"args\": \"(ImDrawDataBuilder* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImDrawDataBuilder*\"\n        }\n      ],\n      \"call_args\": \"(self)\",\n      \"cimguiname\": \"ImDrawDataBuilder_destroy\",\n      \"defaults\": {},\n      \"destructor\": true,\n      \"location\": \"imgui_internal:799\",\n      \"ov_cimguiname\": \"ImDrawDataBuilder_destroy\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImDrawDataBuilder*)\",\n      \"stname\": \"ImDrawDataBuilder\"\n    }\n  ],\n  \"ImDrawData_AddDrawList\": [\n    {\n      \"args\": \"(ImDrawData* self,ImDrawList* draw_list)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImDrawData*\"\n        },\n        {\n          \"name\": \"draw_list\",\n          \"type\": \"ImDrawList*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImDrawList* draw_list)\",\n      \"call_args\": \"(draw_list)\",\n      \"cimguiname\": \"ImDrawData_AddDrawList\",\n      \"defaults\": {},\n      \"funcname\": \"AddDrawList\",\n      \"location\": \"imgui:3226\",\n      \"ov_cimguiname\": \"ImDrawData_AddDrawList\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImDrawList*)\",\n      \"stname\": \"ImDrawData\"\n    }\n  ],\n  \"ImDrawData_Clear\": [\n    {\n      \"args\": \"(ImDrawData* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImDrawData*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImDrawData_Clear\",\n      \"defaults\": {},\n      \"funcname\": \"Clear\",\n      \"location\": \"imgui:3225\",\n      \"ov_cimguiname\": \"ImDrawData_Clear\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"ImDrawData\"\n    }\n  ],\n  \"ImDrawData_DeIndexAllBuffers\": [\n    {\n      \"args\": \"(ImDrawData* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImDrawData*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImDrawData_DeIndexAllBuffers\",\n      \"defaults\": {},\n      \"funcname\": \"DeIndexAllBuffers\",\n      \"location\": \"imgui:3227\",\n      \"ov_cimguiname\": \"ImDrawData_DeIndexAllBuffers\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"ImDrawData\"\n    }\n  ],\n  \"ImDrawData_ImDrawData\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImDrawData_ImDrawData\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImDrawData\",\n      \"location\": \"imgui:3224\",\n      \"ov_cimguiname\": \"ImDrawData_ImDrawData\",\n      \"signature\": \"()\",\n      \"stname\": \"ImDrawData\"\n    }\n  ],\n  \"ImDrawData_ScaleClipRects\": [\n    {\n      \"args\": \"(ImDrawData* self,const ImVec2 fb_scale)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImDrawData*\"\n        },\n        {\n          \"name\": \"fb_scale\",\n          \"type\": \"const ImVec2\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImVec2& fb_scale)\",\n      \"call_args\": \"(fb_scale)\",\n      \"cimguiname\": \"ImDrawData_ScaleClipRects\",\n      \"defaults\": {},\n      \"funcname\": \"ScaleClipRects\",\n      \"location\": \"imgui:3228\",\n      \"ov_cimguiname\": \"ImDrawData_ScaleClipRects\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImVec2)\",\n      \"stname\": \"ImDrawData\"\n    }\n  ],\n  \"ImDrawData_destroy\": [\n    {\n      \"args\": \"(ImDrawData* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImDrawData*\"\n        }\n      ],\n      \"call_args\": \"(self)\",\n      \"cimguiname\": \"ImDrawData_destroy\",\n      \"defaults\": {},\n      \"destructor\": true,\n      \"location\": \"imgui:3224\",\n      \"ov_cimguiname\": \"ImDrawData_destroy\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImDrawData*)\",\n      \"stname\": \"ImDrawData\"\n    }\n  ],\n  \"ImDrawListSharedData_ImDrawListSharedData\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImDrawListSharedData_ImDrawListSharedData\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImDrawListSharedData\",\n      \"location\": \"imgui_internal:790\",\n      \"ov_cimguiname\": \"ImDrawListSharedData_ImDrawListSharedData\",\n      \"signature\": \"()\",\n      \"stname\": \"ImDrawListSharedData\"\n    }\n  ],\n  \"ImDrawListSharedData_SetCircleTessellationMaxError\": [\n    {\n      \"args\": \"(ImDrawListSharedData* self,float max_error)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImDrawListSharedData*\"\n        },\n        {\n          \"name\": \"max_error\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(float max_error)\",\n      \"call_args\": \"(max_error)\",\n      \"cimguiname\": \"ImDrawListSharedData_SetCircleTessellationMaxError\",\n      \"defaults\": {},\n      \"funcname\": \"SetCircleTessellationMaxError\",\n      \"location\": \"imgui_internal:791\",\n      \"ov_cimguiname\": \"ImDrawListSharedData_SetCircleTessellationMaxError\",\n      \"ret\": \"void\",\n      \"signature\": \"(float)\",\n      \"stname\": \"ImDrawListSharedData\"\n    }\n  ],\n  \"ImDrawListSharedData_destroy\": [\n    {\n      \"args\": \"(ImDrawListSharedData* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImDrawListSharedData*\"\n        }\n      ],\n      \"call_args\": \"(self)\",\n      \"cimguiname\": \"ImDrawListSharedData_destroy\",\n      \"defaults\": {},\n      \"destructor\": true,\n      \"location\": \"imgui_internal:790\",\n      \"ov_cimguiname\": \"ImDrawListSharedData_destroy\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImDrawListSharedData*)\",\n      \"stname\": \"ImDrawListSharedData\"\n    }\n  ],\n  \"ImDrawListSplitter_Clear\": [\n    {\n      \"args\": \"(ImDrawListSplitter* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImDrawListSplitter*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImDrawListSplitter_Clear\",\n      \"defaults\": {},\n      \"funcname\": \"Clear\",\n      \"location\": \"imgui:3011\",\n      \"ov_cimguiname\": \"ImDrawListSplitter_Clear\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"ImDrawListSplitter\"\n    }\n  ],\n  \"ImDrawListSplitter_ClearFreeMemory\": [\n    {\n      \"args\": \"(ImDrawListSplitter* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImDrawListSplitter*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImDrawListSplitter_ClearFreeMemory\",\n      \"defaults\": {},\n      \"funcname\": \"ClearFreeMemory\",\n      \"location\": \"imgui:3012\",\n      \"ov_cimguiname\": \"ImDrawListSplitter_ClearFreeMemory\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"ImDrawListSplitter\"\n    }\n  ],\n  \"ImDrawListSplitter_ImDrawListSplitter\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImDrawListSplitter_ImDrawListSplitter\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImDrawListSplitter\",\n      \"location\": \"imgui:3009\",\n      \"ov_cimguiname\": \"ImDrawListSplitter_ImDrawListSplitter\",\n      \"signature\": \"()\",\n      \"stname\": \"ImDrawListSplitter\"\n    }\n  ],\n  \"ImDrawListSplitter_Merge\": [\n    {\n      \"args\": \"(ImDrawListSplitter* self,ImDrawList* draw_list)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImDrawListSplitter*\"\n        },\n        {\n          \"name\": \"draw_list\",\n          \"type\": \"ImDrawList*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImDrawList* draw_list)\",\n      \"call_args\": \"(draw_list)\",\n      \"cimguiname\": \"ImDrawListSplitter_Merge\",\n      \"defaults\": {},\n      \"funcname\": \"Merge\",\n      \"location\": \"imgui:3014\",\n      \"ov_cimguiname\": \"ImDrawListSplitter_Merge\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImDrawList*)\",\n      \"stname\": \"ImDrawListSplitter\"\n    }\n  ],\n  \"ImDrawListSplitter_SetCurrentChannel\": [\n    {\n      \"args\": \"(ImDrawListSplitter* self,ImDrawList* draw_list,int channel_idx)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImDrawListSplitter*\"\n        },\n        {\n          \"name\": \"draw_list\",\n          \"type\": \"ImDrawList*\"\n        },\n        {\n          \"name\": \"channel_idx\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(ImDrawList* draw_list,int channel_idx)\",\n      \"call_args\": \"(draw_list,channel_idx)\",\n      \"cimguiname\": \"ImDrawListSplitter_SetCurrentChannel\",\n      \"defaults\": {},\n      \"funcname\": \"SetCurrentChannel\",\n      \"location\": \"imgui:3015\",\n      \"ov_cimguiname\": \"ImDrawListSplitter_SetCurrentChannel\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImDrawList*,int)\",\n      \"stname\": \"ImDrawListSplitter\"\n    }\n  ],\n  \"ImDrawListSplitter_Split\": [\n    {\n      \"args\": \"(ImDrawListSplitter* self,ImDrawList* draw_list,int count)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImDrawListSplitter*\"\n        },\n        {\n          \"name\": \"draw_list\",\n          \"type\": \"ImDrawList*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(ImDrawList* draw_list,int count)\",\n      \"call_args\": \"(draw_list,count)\",\n      \"cimguiname\": \"ImDrawListSplitter_Split\",\n      \"defaults\": {},\n      \"funcname\": \"Split\",\n      \"location\": \"imgui:3013\",\n      \"ov_cimguiname\": \"ImDrawListSplitter_Split\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImDrawList*,int)\",\n      \"stname\": \"ImDrawListSplitter\"\n    }\n  ],\n  \"ImDrawListSplitter_destroy\": [\n    {\n      \"args\": \"(ImDrawListSplitter* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImDrawListSplitter*\"\n        }\n      ],\n      \"call_args\": \"(self)\",\n      \"cimguiname\": \"ImDrawListSplitter_destroy\",\n      \"defaults\": {},\n      \"destructor\": true,\n      \"location\": \"imgui:3010\",\n      \"ov_cimguiname\": \"ImDrawListSplitter_destroy\",\n      \"realdestructor\": true,\n      \"ret\": \"void\",\n      \"signature\": \"(ImDrawListSplitter*)\",\n      \"stname\": \"ImDrawListSplitter\"\n    }\n  ],\n  \"ImDrawList_AddBezierCubic\": [\n    {\n      \"args\": \"(ImDrawList* self,const ImVec2 p1,const ImVec2 p2,const ImVec2 p3,const ImVec2 p4,ImU32 col,float thickness,int num_segments)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImDrawList*\"\n        },\n        {\n          \"name\": \"p1\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"p2\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"p3\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"p4\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"col\",\n          \"type\": \"ImU32\"\n        },\n        {\n          \"name\": \"thickness\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"num_segments\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImVec2& p1,const ImVec2& p2,const ImVec2& p3,const ImVec2& p4,ImU32 col,float thickness,int num_segments=0)\",\n      \"call_args\": \"(p1,p2,p3,p4,col,thickness,num_segments)\",\n      \"cimguiname\": \"ImDrawList_AddBezierCubic\",\n      \"defaults\": {\n        \"num_segments\": \"0\"\n      },\n      \"funcname\": \"AddBezierCubic\",\n      \"location\": \"imgui:3116\",\n      \"ov_cimguiname\": \"ImDrawList_AddBezierCubic\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImVec2,const ImVec2,const ImVec2,const ImVec2,ImU32,float,int)\",\n      \"stname\": \"ImDrawList\"\n    }\n  ],\n  \"ImDrawList_AddBezierQuadratic\": [\n    {\n      \"args\": \"(ImDrawList* self,const ImVec2 p1,const ImVec2 p2,const ImVec2 p3,ImU32 col,float thickness,int num_segments)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImDrawList*\"\n        },\n        {\n          \"name\": \"p1\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"p2\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"p3\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"col\",\n          \"type\": \"ImU32\"\n        },\n        {\n          \"name\": \"thickness\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"num_segments\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImVec2& p1,const ImVec2& p2,const ImVec2& p3,ImU32 col,float thickness,int num_segments=0)\",\n      \"call_args\": \"(p1,p2,p3,col,thickness,num_segments)\",\n      \"cimguiname\": \"ImDrawList_AddBezierQuadratic\",\n      \"defaults\": {\n        \"num_segments\": \"0\"\n      },\n      \"funcname\": \"AddBezierQuadratic\",\n      \"location\": \"imgui:3117\",\n      \"ov_cimguiname\": \"ImDrawList_AddBezierQuadratic\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImVec2,const ImVec2,const ImVec2,ImU32,float,int)\",\n      \"stname\": \"ImDrawList\"\n    }\n  ],\n  \"ImDrawList_AddCallback\": [\n    {\n      \"args\": \"(ImDrawList* self,ImDrawCallback callback,void* userdata,size_t userdata_size)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImDrawList*\"\n        },\n        {\n          \"name\": \"callback\",\n          \"type\": \"ImDrawCallback\"\n        },\n        {\n          \"name\": \"userdata\",\n          \"type\": \"void*\"\n        },\n        {\n          \"name\": \"userdata_size\",\n          \"type\": \"size_t\"\n        }\n      ],\n      \"argsoriginal\": \"(ImDrawCallback callback,void* userdata,size_t userdata_size=0)\",\n      \"call_args\": \"(callback,userdata,userdata_size)\",\n      \"cimguiname\": \"ImDrawList_AddCallback\",\n      \"defaults\": {\n        \"userdata_size\": \"0\"\n      },\n      \"funcname\": \"AddCallback\",\n      \"location\": \"imgui:3159\",\n      \"ov_cimguiname\": \"ImDrawList_AddCallback\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImDrawCallback,void*,size_t)\",\n      \"stname\": \"ImDrawList\"\n    }\n  ],\n  \"ImDrawList_AddCircle\": [\n    {\n      \"args\": \"(ImDrawList* self,const ImVec2 center,float radius,ImU32 col,int num_segments,float thickness)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImDrawList*\"\n        },\n        {\n          \"name\": \"center\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"radius\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"col\",\n          \"type\": \"ImU32\"\n        },\n        {\n          \"name\": \"num_segments\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"thickness\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImVec2& center,float radius,ImU32 col,int num_segments=0,float thickness=1.0f)\",\n      \"call_args\": \"(center,radius,col,num_segments,thickness)\",\n      \"cimguiname\": \"ImDrawList_AddCircle\",\n      \"defaults\": {\n        \"num_segments\": \"0\",\n        \"thickness\": \"1.0f\"\n      },\n      \"funcname\": \"AddCircle\",\n      \"location\": \"imgui:3108\",\n      \"ov_cimguiname\": \"ImDrawList_AddCircle\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImVec2,float,ImU32,int,float)\",\n      \"stname\": \"ImDrawList\"\n    }\n  ],\n  \"ImDrawList_AddCircleFilled\": [\n    {\n      \"args\": \"(ImDrawList* self,const ImVec2 center,float radius,ImU32 col,int num_segments)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImDrawList*\"\n        },\n        {\n          \"name\": \"center\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"radius\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"col\",\n          \"type\": \"ImU32\"\n        },\n        {\n          \"name\": \"num_segments\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImVec2& center,float radius,ImU32 col,int num_segments=0)\",\n      \"call_args\": \"(center,radius,col,num_segments)\",\n      \"cimguiname\": \"ImDrawList_AddCircleFilled\",\n      \"defaults\": {\n        \"num_segments\": \"0\"\n      },\n      \"funcname\": \"AddCircleFilled\",\n      \"location\": \"imgui:3109\",\n      \"ov_cimguiname\": \"ImDrawList_AddCircleFilled\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImVec2,float,ImU32,int)\",\n      \"stname\": \"ImDrawList\"\n    }\n  ],\n  \"ImDrawList_AddConcavePolyFilled\": [\n    {\n      \"args\": \"(ImDrawList* self,const ImVec2* points,int num_points,ImU32 col)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImDrawList*\"\n        },\n        {\n          \"name\": \"points\",\n          \"type\": \"const ImVec2*\"\n        },\n        {\n          \"name\": \"num_points\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"col\",\n          \"type\": \"ImU32\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImVec2* points,int num_points,ImU32 col)\",\n      \"call_args\": \"(points,num_points,col)\",\n      \"cimguiname\": \"ImDrawList_AddConcavePolyFilled\",\n      \"defaults\": {},\n      \"funcname\": \"AddConcavePolyFilled\",\n      \"location\": \"imgui:3124\",\n      \"ov_cimguiname\": \"ImDrawList_AddConcavePolyFilled\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImVec2*,int,ImU32)\",\n      \"stname\": \"ImDrawList\"\n    }\n  ],\n  \"ImDrawList_AddConvexPolyFilled\": [\n    {\n      \"args\": \"(ImDrawList* self,const ImVec2* points,int num_points,ImU32 col)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImDrawList*\"\n        },\n        {\n          \"name\": \"points\",\n          \"type\": \"const ImVec2*\"\n        },\n        {\n          \"name\": \"num_points\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"col\",\n          \"type\": \"ImU32\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImVec2* points,int num_points,ImU32 col)\",\n      \"call_args\": \"(points,num_points,col)\",\n      \"cimguiname\": \"ImDrawList_AddConvexPolyFilled\",\n      \"defaults\": {},\n      \"funcname\": \"AddConvexPolyFilled\",\n      \"location\": \"imgui:3123\",\n      \"ov_cimguiname\": \"ImDrawList_AddConvexPolyFilled\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImVec2*,int,ImU32)\",\n      \"stname\": \"ImDrawList\"\n    }\n  ],\n  \"ImDrawList_AddDrawCmd\": [\n    {\n      \"args\": \"(ImDrawList* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImDrawList*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImDrawList_AddDrawCmd\",\n      \"defaults\": {},\n      \"funcname\": \"AddDrawCmd\",\n      \"location\": \"imgui:3162\",\n      \"ov_cimguiname\": \"ImDrawList_AddDrawCmd\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"ImDrawList\"\n    }\n  ],\n  \"ImDrawList_AddEllipse\": [\n    {\n      \"args\": \"(ImDrawList* self,const ImVec2 center,const ImVec2 radius,ImU32 col,float rot,int num_segments,float thickness)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImDrawList*\"\n        },\n        {\n          \"name\": \"center\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"radius\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"col\",\n          \"type\": \"ImU32\"\n        },\n        {\n          \"name\": \"rot\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"num_segments\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"thickness\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImVec2& center,const ImVec2& radius,ImU32 col,float rot=0.0f,int num_segments=0,float thickness=1.0f)\",\n      \"call_args\": \"(center,radius,col,rot,num_segments,thickness)\",\n      \"cimguiname\": \"ImDrawList_AddEllipse\",\n      \"defaults\": {\n        \"num_segments\": \"0\",\n        \"rot\": \"0.0f\",\n        \"thickness\": \"1.0f\"\n      },\n      \"funcname\": \"AddEllipse\",\n      \"location\": \"imgui:3112\",\n      \"ov_cimguiname\": \"ImDrawList_AddEllipse\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImVec2,const ImVec2,ImU32,float,int,float)\",\n      \"stname\": \"ImDrawList\"\n    }\n  ],\n  \"ImDrawList_AddEllipseFilled\": [\n    {\n      \"args\": \"(ImDrawList* self,const ImVec2 center,const ImVec2 radius,ImU32 col,float rot,int num_segments)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImDrawList*\"\n        },\n        {\n          \"name\": \"center\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"radius\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"col\",\n          \"type\": \"ImU32\"\n        },\n        {\n          \"name\": \"rot\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"num_segments\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImVec2& center,const ImVec2& radius,ImU32 col,float rot=0.0f,int num_segments=0)\",\n      \"call_args\": \"(center,radius,col,rot,num_segments)\",\n      \"cimguiname\": \"ImDrawList_AddEllipseFilled\",\n      \"defaults\": {\n        \"num_segments\": \"0\",\n        \"rot\": \"0.0f\"\n      },\n      \"funcname\": \"AddEllipseFilled\",\n      \"location\": \"imgui:3113\",\n      \"ov_cimguiname\": \"ImDrawList_AddEllipseFilled\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImVec2,const ImVec2,ImU32,float,int)\",\n      \"stname\": \"ImDrawList\"\n    }\n  ],\n  \"ImDrawList_AddImage\": [\n    {\n      \"args\": \"(ImDrawList* self,ImTextureID user_texture_id,const ImVec2 p_min,const ImVec2 p_max,const ImVec2 uv_min,const ImVec2 uv_max,ImU32 col)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImDrawList*\"\n        },\n        {\n          \"name\": \"user_texture_id\",\n          \"type\": \"ImTextureID\"\n        },\n        {\n          \"name\": \"p_min\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"p_max\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"uv_min\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"uv_max\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"col\",\n          \"type\": \"ImU32\"\n        }\n      ],\n      \"argsoriginal\": \"(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=(((ImU32)(255)<<24)|((ImU32)(255)<<16)|((ImU32)(255)<<8)|((ImU32)(255)<<0)))\",\n      \"call_args\": \"(user_texture_id,p_min,p_max,uv_min,uv_max,col)\",\n      \"cimguiname\": \"ImDrawList_AddImage\",\n      \"defaults\": {\n        \"col\": \"4294967295\",\n        \"uv_max\": \"ImVec2(1,1)\",\n        \"uv_min\": \"ImVec2(0,0)\"\n      },\n      \"funcname\": \"AddImage\",\n      \"location\": \"imgui:3130\",\n      \"ov_cimguiname\": \"ImDrawList_AddImage\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImTextureID,const ImVec2,const ImVec2,const ImVec2,const ImVec2,ImU32)\",\n      \"stname\": \"ImDrawList\"\n    }\n  ],\n  \"ImDrawList_AddImageQuad\": [\n    {\n      \"args\": \"(ImDrawList* self,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)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImDrawList*\"\n        },\n        {\n          \"name\": \"user_texture_id\",\n          \"type\": \"ImTextureID\"\n        },\n        {\n          \"name\": \"p1\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"p2\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"p3\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"p4\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"uv1\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"uv2\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"uv3\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"uv4\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"col\",\n          \"type\": \"ImU32\"\n        }\n      ],\n      \"argsoriginal\": \"(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=(((ImU32)(255)<<24)|((ImU32)(255)<<16)|((ImU32)(255)<<8)|((ImU32)(255)<<0)))\",\n      \"call_args\": \"(user_texture_id,p1,p2,p3,p4,uv1,uv2,uv3,uv4,col)\",\n      \"cimguiname\": \"ImDrawList_AddImageQuad\",\n      \"defaults\": {\n        \"col\": \"4294967295\",\n        \"uv1\": \"ImVec2(0,0)\",\n        \"uv2\": \"ImVec2(1,0)\",\n        \"uv3\": \"ImVec2(1,1)\",\n        \"uv4\": \"ImVec2(0,1)\"\n      },\n      \"funcname\": \"AddImageQuad\",\n      \"location\": \"imgui:3131\",\n      \"ov_cimguiname\": \"ImDrawList_AddImageQuad\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImTextureID,const ImVec2,const ImVec2,const ImVec2,const ImVec2,const ImVec2,const ImVec2,const ImVec2,const ImVec2,ImU32)\",\n      \"stname\": \"ImDrawList\"\n    }\n  ],\n  \"ImDrawList_AddImageRounded\": [\n    {\n      \"args\": \"(ImDrawList* self,ImTextureID user_texture_id,const ImVec2 p_min,const ImVec2 p_max,const ImVec2 uv_min,const ImVec2 uv_max,ImU32 col,float rounding,ImDrawFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImDrawList*\"\n        },\n        {\n          \"name\": \"user_texture_id\",\n          \"type\": \"ImTextureID\"\n        },\n        {\n          \"name\": \"p_min\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"p_max\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"uv_min\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"uv_max\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"col\",\n          \"type\": \"ImU32\"\n        },\n        {\n          \"name\": \"rounding\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImDrawFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(ImTextureID user_texture_id,const ImVec2& p_min,const ImVec2& p_max,const ImVec2& uv_min,const ImVec2& uv_max,ImU32 col,float rounding,ImDrawFlags flags=0)\",\n      \"call_args\": \"(user_texture_id,p_min,p_max,uv_min,uv_max,col,rounding,flags)\",\n      \"cimguiname\": \"ImDrawList_AddImageRounded\",\n      \"defaults\": {\n        \"flags\": \"0\"\n      },\n      \"funcname\": \"AddImageRounded\",\n      \"location\": \"imgui:3132\",\n      \"ov_cimguiname\": \"ImDrawList_AddImageRounded\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImTextureID,const ImVec2,const ImVec2,const ImVec2,const ImVec2,ImU32,float,ImDrawFlags)\",\n      \"stname\": \"ImDrawList\"\n    }\n  ],\n  \"ImDrawList_AddLine\": [\n    {\n      \"args\": \"(ImDrawList* self,const ImVec2 p1,const ImVec2 p2,ImU32 col,float thickness)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImDrawList*\"\n        },\n        {\n          \"name\": \"p1\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"p2\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"col\",\n          \"type\": \"ImU32\"\n        },\n        {\n          \"name\": \"thickness\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImVec2& p1,const ImVec2& p2,ImU32 col,float thickness=1.0f)\",\n      \"call_args\": \"(p1,p2,col,thickness)\",\n      \"cimguiname\": \"ImDrawList_AddLine\",\n      \"defaults\": {\n        \"thickness\": \"1.0f\"\n      },\n      \"funcname\": \"AddLine\",\n      \"location\": \"imgui:3100\",\n      \"ov_cimguiname\": \"ImDrawList_AddLine\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImVec2,const ImVec2,ImU32,float)\",\n      \"stname\": \"ImDrawList\"\n    }\n  ],\n  \"ImDrawList_AddNgon\": [\n    {\n      \"args\": \"(ImDrawList* self,const ImVec2 center,float radius,ImU32 col,int num_segments,float thickness)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImDrawList*\"\n        },\n        {\n          \"name\": \"center\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"radius\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"col\",\n          \"type\": \"ImU32\"\n        },\n        {\n          \"name\": \"num_segments\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"thickness\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImVec2& center,float radius,ImU32 col,int num_segments,float thickness=1.0f)\",\n      \"call_args\": \"(center,radius,col,num_segments,thickness)\",\n      \"cimguiname\": \"ImDrawList_AddNgon\",\n      \"defaults\": {\n        \"thickness\": \"1.0f\"\n      },\n      \"funcname\": \"AddNgon\",\n      \"location\": \"imgui:3110\",\n      \"ov_cimguiname\": \"ImDrawList_AddNgon\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImVec2,float,ImU32,int,float)\",\n      \"stname\": \"ImDrawList\"\n    }\n  ],\n  \"ImDrawList_AddNgonFilled\": [\n    {\n      \"args\": \"(ImDrawList* self,const ImVec2 center,float radius,ImU32 col,int num_segments)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImDrawList*\"\n        },\n        {\n          \"name\": \"center\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"radius\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"col\",\n          \"type\": \"ImU32\"\n        },\n        {\n          \"name\": \"num_segments\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImVec2& center,float radius,ImU32 col,int num_segments)\",\n      \"call_args\": \"(center,radius,col,num_segments)\",\n      \"cimguiname\": \"ImDrawList_AddNgonFilled\",\n      \"defaults\": {},\n      \"funcname\": \"AddNgonFilled\",\n      \"location\": \"imgui:3111\",\n      \"ov_cimguiname\": \"ImDrawList_AddNgonFilled\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImVec2,float,ImU32,int)\",\n      \"stname\": \"ImDrawList\"\n    }\n  ],\n  \"ImDrawList_AddPolyline\": [\n    {\n      \"args\": \"(ImDrawList* self,const ImVec2* points,int num_points,ImU32 col,ImDrawFlags flags,float thickness)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImDrawList*\"\n        },\n        {\n          \"name\": \"points\",\n          \"type\": \"const ImVec2*\"\n        },\n        {\n          \"name\": \"num_points\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"col\",\n          \"type\": \"ImU32\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImDrawFlags\"\n        },\n        {\n          \"name\": \"thickness\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImVec2* points,int num_points,ImU32 col,ImDrawFlags flags,float thickness)\",\n      \"call_args\": \"(points,num_points,col,flags,thickness)\",\n      \"cimguiname\": \"ImDrawList_AddPolyline\",\n      \"defaults\": {},\n      \"funcname\": \"AddPolyline\",\n      \"location\": \"imgui:3122\",\n      \"ov_cimguiname\": \"ImDrawList_AddPolyline\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImVec2*,int,ImU32,ImDrawFlags,float)\",\n      \"stname\": \"ImDrawList\"\n    }\n  ],\n  \"ImDrawList_AddQuad\": [\n    {\n      \"args\": \"(ImDrawList* self,const ImVec2 p1,const ImVec2 p2,const ImVec2 p3,const ImVec2 p4,ImU32 col,float thickness)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImDrawList*\"\n        },\n        {\n          \"name\": \"p1\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"p2\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"p3\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"p4\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"col\",\n          \"type\": \"ImU32\"\n        },\n        {\n          \"name\": \"thickness\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImVec2& p1,const ImVec2& p2,const ImVec2& p3,const ImVec2& p4,ImU32 col,float thickness=1.0f)\",\n      \"call_args\": \"(p1,p2,p3,p4,col,thickness)\",\n      \"cimguiname\": \"ImDrawList_AddQuad\",\n      \"defaults\": {\n        \"thickness\": \"1.0f\"\n      },\n      \"funcname\": \"AddQuad\",\n      \"location\": \"imgui:3104\",\n      \"ov_cimguiname\": \"ImDrawList_AddQuad\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImVec2,const ImVec2,const ImVec2,const ImVec2,ImU32,float)\",\n      \"stname\": \"ImDrawList\"\n    }\n  ],\n  \"ImDrawList_AddQuadFilled\": [\n    {\n      \"args\": \"(ImDrawList* self,const ImVec2 p1,const ImVec2 p2,const ImVec2 p3,const ImVec2 p4,ImU32 col)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImDrawList*\"\n        },\n        {\n          \"name\": \"p1\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"p2\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"p3\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"p4\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"col\",\n          \"type\": \"ImU32\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImVec2& p1,const ImVec2& p2,const ImVec2& p3,const ImVec2& p4,ImU32 col)\",\n      \"call_args\": \"(p1,p2,p3,p4,col)\",\n      \"cimguiname\": \"ImDrawList_AddQuadFilled\",\n      \"defaults\": {},\n      \"funcname\": \"AddQuadFilled\",\n      \"location\": \"imgui:3105\",\n      \"ov_cimguiname\": \"ImDrawList_AddQuadFilled\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImVec2,const ImVec2,const ImVec2,const ImVec2,ImU32)\",\n      \"stname\": \"ImDrawList\"\n    }\n  ],\n  \"ImDrawList_AddRect\": [\n    {\n      \"args\": \"(ImDrawList* self,const ImVec2 p_min,const ImVec2 p_max,ImU32 col,float rounding,ImDrawFlags flags,float thickness)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImDrawList*\"\n        },\n        {\n          \"name\": \"p_min\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"p_max\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"col\",\n          \"type\": \"ImU32\"\n        },\n        {\n          \"name\": \"rounding\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImDrawFlags\"\n        },\n        {\n          \"name\": \"thickness\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImVec2& p_min,const ImVec2& p_max,ImU32 col,float rounding=0.0f,ImDrawFlags flags=0,float thickness=1.0f)\",\n      \"call_args\": \"(p_min,p_max,col,rounding,flags,thickness)\",\n      \"cimguiname\": \"ImDrawList_AddRect\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"rounding\": \"0.0f\",\n        \"thickness\": \"1.0f\"\n      },\n      \"funcname\": \"AddRect\",\n      \"location\": \"imgui:3101\",\n      \"ov_cimguiname\": \"ImDrawList_AddRect\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImVec2,const ImVec2,ImU32,float,ImDrawFlags,float)\",\n      \"stname\": \"ImDrawList\"\n    }\n  ],\n  \"ImDrawList_AddRectFilled\": [\n    {\n      \"args\": \"(ImDrawList* self,const ImVec2 p_min,const ImVec2 p_max,ImU32 col,float rounding,ImDrawFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImDrawList*\"\n        },\n        {\n          \"name\": \"p_min\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"p_max\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"col\",\n          \"type\": \"ImU32\"\n        },\n        {\n          \"name\": \"rounding\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImDrawFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImVec2& p_min,const ImVec2& p_max,ImU32 col,float rounding=0.0f,ImDrawFlags flags=0)\",\n      \"call_args\": \"(p_min,p_max,col,rounding,flags)\",\n      \"cimguiname\": \"ImDrawList_AddRectFilled\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"rounding\": \"0.0f\"\n      },\n      \"funcname\": \"AddRectFilled\",\n      \"location\": \"imgui:3102\",\n      \"ov_cimguiname\": \"ImDrawList_AddRectFilled\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImVec2,const ImVec2,ImU32,float,ImDrawFlags)\",\n      \"stname\": \"ImDrawList\"\n    }\n  ],\n  \"ImDrawList_AddRectFilledMultiColor\": [\n    {\n      \"args\": \"(ImDrawList* self,const ImVec2 p_min,const ImVec2 p_max,ImU32 col_upr_left,ImU32 col_upr_right,ImU32 col_bot_right,ImU32 col_bot_left)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImDrawList*\"\n        },\n        {\n          \"name\": \"p_min\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"p_max\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"col_upr_left\",\n          \"type\": \"ImU32\"\n        },\n        {\n          \"name\": \"col_upr_right\",\n          \"type\": \"ImU32\"\n        },\n        {\n          \"name\": \"col_bot_right\",\n          \"type\": \"ImU32\"\n        },\n        {\n          \"name\": \"col_bot_left\",\n          \"type\": \"ImU32\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImVec2& p_min,const ImVec2& p_max,ImU32 col_upr_left,ImU32 col_upr_right,ImU32 col_bot_right,ImU32 col_bot_left)\",\n      \"call_args\": \"(p_min,p_max,col_upr_left,col_upr_right,col_bot_right,col_bot_left)\",\n      \"cimguiname\": \"ImDrawList_AddRectFilledMultiColor\",\n      \"defaults\": {},\n      \"funcname\": \"AddRectFilledMultiColor\",\n      \"location\": \"imgui:3103\",\n      \"ov_cimguiname\": \"ImDrawList_AddRectFilledMultiColor\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImVec2,const ImVec2,ImU32,ImU32,ImU32,ImU32)\",\n      \"stname\": \"ImDrawList\"\n    }\n  ],\n  \"ImDrawList_AddText\": [\n    {\n      \"args\": \"(ImDrawList* self,const ImVec2 pos,ImU32 col,const char* text_begin,const char* text_end)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImDrawList*\"\n        },\n        {\n          \"name\": \"pos\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"col\",\n          \"type\": \"ImU32\"\n        },\n        {\n          \"name\": \"text_begin\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"text_end\",\n          \"type\": \"const char*\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImVec2& pos,ImU32 col,const char* text_begin,const char* text_end=((void*)0))\",\n      \"call_args\": \"(pos,col,text_begin,text_end)\",\n      \"cimguiname\": \"ImDrawList_AddText\",\n      \"defaults\": {\n        \"text_end\": \"NULL\"\n      },\n      \"funcname\": \"AddText\",\n      \"location\": \"imgui:3114\",\n      \"ov_cimguiname\": \"ImDrawList_AddText_Vec2\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImVec2,ImU32,const char*,const char*)\",\n      \"stname\": \"ImDrawList\"\n    },\n    {\n      \"args\": \"(ImDrawList* self,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)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImDrawList*\"\n        },\n        {\n          \"name\": \"font\",\n          \"type\": \"ImFont*\"\n        },\n        {\n          \"name\": \"font_size\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"pos\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"col\",\n          \"type\": \"ImU32\"\n        },\n        {\n          \"name\": \"text_begin\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"text_end\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"wrap_width\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"cpu_fine_clip_rect\",\n          \"type\": \"const ImVec4*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImFont* font,float font_size,const ImVec2& pos,ImU32 col,const char* text_begin,const char* text_end=((void*)0),float wrap_width=0.0f,const ImVec4* cpu_fine_clip_rect=((void*)0))\",\n      \"call_args\": \"(font,font_size,pos,col,text_begin,text_end,wrap_width,cpu_fine_clip_rect)\",\n      \"cimguiname\": \"ImDrawList_AddText\",\n      \"defaults\": {\n        \"cpu_fine_clip_rect\": \"NULL\",\n        \"text_end\": \"NULL\",\n        \"wrap_width\": \"0.0f\"\n      },\n      \"funcname\": \"AddText\",\n      \"location\": \"imgui:3115\",\n      \"ov_cimguiname\": \"ImDrawList_AddText_FontPtr\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImFont*,float,const ImVec2,ImU32,const char*,const char*,float,const ImVec4*)\",\n      \"stname\": \"ImDrawList\"\n    }\n  ],\n  \"ImDrawList_AddTriangle\": [\n    {\n      \"args\": \"(ImDrawList* self,const ImVec2 p1,const ImVec2 p2,const ImVec2 p3,ImU32 col,float thickness)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImDrawList*\"\n        },\n        {\n          \"name\": \"p1\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"p2\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"p3\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"col\",\n          \"type\": \"ImU32\"\n        },\n        {\n          \"name\": \"thickness\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImVec2& p1,const ImVec2& p2,const ImVec2& p3,ImU32 col,float thickness=1.0f)\",\n      \"call_args\": \"(p1,p2,p3,col,thickness)\",\n      \"cimguiname\": \"ImDrawList_AddTriangle\",\n      \"defaults\": {\n        \"thickness\": \"1.0f\"\n      },\n      \"funcname\": \"AddTriangle\",\n      \"location\": \"imgui:3106\",\n      \"ov_cimguiname\": \"ImDrawList_AddTriangle\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImVec2,const ImVec2,const ImVec2,ImU32,float)\",\n      \"stname\": \"ImDrawList\"\n    }\n  ],\n  \"ImDrawList_AddTriangleFilled\": [\n    {\n      \"args\": \"(ImDrawList* self,const ImVec2 p1,const ImVec2 p2,const ImVec2 p3,ImU32 col)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImDrawList*\"\n        },\n        {\n          \"name\": \"p1\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"p2\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"p3\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"col\",\n          \"type\": \"ImU32\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImVec2& p1,const ImVec2& p2,const ImVec2& p3,ImU32 col)\",\n      \"call_args\": \"(p1,p2,p3,col)\",\n      \"cimguiname\": \"ImDrawList_AddTriangleFilled\",\n      \"defaults\": {},\n      \"funcname\": \"AddTriangleFilled\",\n      \"location\": \"imgui:3107\",\n      \"ov_cimguiname\": \"ImDrawList_AddTriangleFilled\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImVec2,const ImVec2,const ImVec2,ImU32)\",\n      \"stname\": \"ImDrawList\"\n    }\n  ],\n  \"ImDrawList_ChannelsMerge\": [\n    {\n      \"args\": \"(ImDrawList* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImDrawList*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImDrawList_ChannelsMerge\",\n      \"defaults\": {},\n      \"funcname\": \"ChannelsMerge\",\n      \"location\": \"imgui:3172\",\n      \"ov_cimguiname\": \"ImDrawList_ChannelsMerge\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"ImDrawList\"\n    }\n  ],\n  \"ImDrawList_ChannelsSetCurrent\": [\n    {\n      \"args\": \"(ImDrawList* self,int n)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImDrawList*\"\n        },\n        {\n          \"name\": \"n\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(int n)\",\n      \"call_args\": \"(n)\",\n      \"cimguiname\": \"ImDrawList_ChannelsSetCurrent\",\n      \"defaults\": {},\n      \"funcname\": \"ChannelsSetCurrent\",\n      \"location\": \"imgui:3173\",\n      \"ov_cimguiname\": \"ImDrawList_ChannelsSetCurrent\",\n      \"ret\": \"void\",\n      \"signature\": \"(int)\",\n      \"stname\": \"ImDrawList\"\n    }\n  ],\n  \"ImDrawList_ChannelsSplit\": [\n    {\n      \"args\": \"(ImDrawList* self,int count)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImDrawList*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(int count)\",\n      \"call_args\": \"(count)\",\n      \"cimguiname\": \"ImDrawList_ChannelsSplit\",\n      \"defaults\": {},\n      \"funcname\": \"ChannelsSplit\",\n      \"location\": \"imgui:3171\",\n      \"ov_cimguiname\": \"ImDrawList_ChannelsSplit\",\n      \"ret\": \"void\",\n      \"signature\": \"(int)\",\n      \"stname\": \"ImDrawList\"\n    }\n  ],\n  \"ImDrawList_CloneOutput\": [\n    {\n      \"args\": \"(ImDrawList* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImDrawList*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImDrawList_CloneOutput\",\n      \"defaults\": {},\n      \"funcname\": \"CloneOutput\",\n      \"location\": \"imgui:3163\",\n      \"ov_cimguiname\": \"ImDrawList_CloneOutput\",\n      \"ret\": \"ImDrawList*\",\n      \"signature\": \"()const\",\n      \"stname\": \"ImDrawList\"\n    }\n  ],\n  \"ImDrawList_GetClipRectMax\": [\n    {\n      \"args\": \"(ImVec2 *pOut,ImDrawList* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"pOut\",\n          \"type\": \"ImVec2*\"\n        },\n        {\n          \"name\": \"self\",\n          \"type\": \"ImDrawList*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImDrawList_GetClipRectMax\",\n      \"defaults\": {},\n      \"funcname\": \"GetClipRectMax\",\n      \"location\": \"imgui:3091\",\n      \"nonUDT\": 1,\n      \"ov_cimguiname\": \"ImDrawList_GetClipRectMax\",\n      \"ret\": \"void\",\n      \"signature\": \"()const\",\n      \"stname\": \"ImDrawList\"\n    }\n  ],\n  \"ImDrawList_GetClipRectMin\": [\n    {\n      \"args\": \"(ImVec2 *pOut,ImDrawList* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"pOut\",\n          \"type\": \"ImVec2*\"\n        },\n        {\n          \"name\": \"self\",\n          \"type\": \"ImDrawList*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImDrawList_GetClipRectMin\",\n      \"defaults\": {},\n      \"funcname\": \"GetClipRectMin\",\n      \"location\": \"imgui:3090\",\n      \"nonUDT\": 1,\n      \"ov_cimguiname\": \"ImDrawList_GetClipRectMin\",\n      \"ret\": \"void\",\n      \"signature\": \"()const\",\n      \"stname\": \"ImDrawList\"\n    }\n  ],\n  \"ImDrawList_ImDrawList\": [\n    {\n      \"args\": \"(ImDrawListSharedData* shared_data)\",\n      \"argsT\": [\n        {\n          \"name\": \"shared_data\",\n          \"type\": \"ImDrawListSharedData*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImDrawListSharedData* shared_data)\",\n      \"call_args\": \"(shared_data)\",\n      \"cimguiname\": \"ImDrawList_ImDrawList\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImDrawList\",\n      \"location\": \"imgui:3082\",\n      \"ov_cimguiname\": \"ImDrawList_ImDrawList\",\n      \"signature\": \"(ImDrawListSharedData*)\",\n      \"stname\": \"ImDrawList\"\n    }\n  ],\n  \"ImDrawList_PathArcTo\": [\n    {\n      \"args\": \"(ImDrawList* self,const ImVec2 center,float radius,float a_min,float a_max,int num_segments)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImDrawList*\"\n        },\n        {\n          \"name\": \"center\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"radius\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"a_min\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"a_max\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"num_segments\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImVec2& center,float radius,float a_min,float a_max,int num_segments=0)\",\n      \"call_args\": \"(center,radius,a_min,a_max,num_segments)\",\n      \"cimguiname\": \"ImDrawList_PathArcTo\",\n      \"defaults\": {\n        \"num_segments\": \"0\"\n      },\n      \"funcname\": \"PathArcTo\",\n      \"location\": \"imgui:3143\",\n      \"ov_cimguiname\": \"ImDrawList_PathArcTo\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImVec2,float,float,float,int)\",\n      \"stname\": \"ImDrawList\"\n    }\n  ],\n  \"ImDrawList_PathArcToFast\": [\n    {\n      \"args\": \"(ImDrawList* self,const ImVec2 center,float radius,int a_min_of_12,int a_max_of_12)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImDrawList*\"\n        },\n        {\n          \"name\": \"center\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"radius\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"a_min_of_12\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"a_max_of_12\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImVec2& center,float radius,int a_min_of_12,int a_max_of_12)\",\n      \"call_args\": \"(center,radius,a_min_of_12,a_max_of_12)\",\n      \"cimguiname\": \"ImDrawList_PathArcToFast\",\n      \"defaults\": {},\n      \"funcname\": \"PathArcToFast\",\n      \"location\": \"imgui:3144\",\n      \"ov_cimguiname\": \"ImDrawList_PathArcToFast\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImVec2,float,int,int)\",\n      \"stname\": \"ImDrawList\"\n    }\n  ],\n  \"ImDrawList_PathBezierCubicCurveTo\": [\n    {\n      \"args\": \"(ImDrawList* self,const ImVec2 p2,const ImVec2 p3,const ImVec2 p4,int num_segments)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImDrawList*\"\n        },\n        {\n          \"name\": \"p2\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"p3\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"p4\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"num_segments\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImVec2& p2,const ImVec2& p3,const ImVec2& p4,int num_segments=0)\",\n      \"call_args\": \"(p2,p3,p4,num_segments)\",\n      \"cimguiname\": \"ImDrawList_PathBezierCubicCurveTo\",\n      \"defaults\": {\n        \"num_segments\": \"0\"\n      },\n      \"funcname\": \"PathBezierCubicCurveTo\",\n      \"location\": \"imgui:3146\",\n      \"ov_cimguiname\": \"ImDrawList_PathBezierCubicCurveTo\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImVec2,const ImVec2,const ImVec2,int)\",\n      \"stname\": \"ImDrawList\"\n    }\n  ],\n  \"ImDrawList_PathBezierQuadraticCurveTo\": [\n    {\n      \"args\": \"(ImDrawList* self,const ImVec2 p2,const ImVec2 p3,int num_segments)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImDrawList*\"\n        },\n        {\n          \"name\": \"p2\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"p3\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"num_segments\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImVec2& p2,const ImVec2& p3,int num_segments=0)\",\n      \"call_args\": \"(p2,p3,num_segments)\",\n      \"cimguiname\": \"ImDrawList_PathBezierQuadraticCurveTo\",\n      \"defaults\": {\n        \"num_segments\": \"0\"\n      },\n      \"funcname\": \"PathBezierQuadraticCurveTo\",\n      \"location\": \"imgui:3147\",\n      \"ov_cimguiname\": \"ImDrawList_PathBezierQuadraticCurveTo\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImVec2,const ImVec2,int)\",\n      \"stname\": \"ImDrawList\"\n    }\n  ],\n  \"ImDrawList_PathClear\": [\n    {\n      \"args\": \"(ImDrawList* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImDrawList*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImDrawList_PathClear\",\n      \"defaults\": {},\n      \"funcname\": \"PathClear\",\n      \"location\": \"imgui:3137\",\n      \"ov_cimguiname\": \"ImDrawList_PathClear\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"ImDrawList\"\n    }\n  ],\n  \"ImDrawList_PathEllipticalArcTo\": [\n    {\n      \"args\": \"(ImDrawList* self,const ImVec2 center,const ImVec2 radius,float rot,float a_min,float a_max,int num_segments)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImDrawList*\"\n        },\n        {\n          \"name\": \"center\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"radius\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"rot\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"a_min\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"a_max\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"num_segments\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImVec2& center,const ImVec2& radius,float rot,float a_min,float a_max,int num_segments=0)\",\n      \"call_args\": \"(center,radius,rot,a_min,a_max,num_segments)\",\n      \"cimguiname\": \"ImDrawList_PathEllipticalArcTo\",\n      \"defaults\": {\n        \"num_segments\": \"0\"\n      },\n      \"funcname\": \"PathEllipticalArcTo\",\n      \"location\": \"imgui:3145\",\n      \"ov_cimguiname\": \"ImDrawList_PathEllipticalArcTo\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImVec2,const ImVec2,float,float,float,int)\",\n      \"stname\": \"ImDrawList\"\n    }\n  ],\n  \"ImDrawList_PathFillConcave\": [\n    {\n      \"args\": \"(ImDrawList* self,ImU32 col)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImDrawList*\"\n        },\n        {\n          \"name\": \"col\",\n          \"type\": \"ImU32\"\n        }\n      ],\n      \"argsoriginal\": \"(ImU32 col)\",\n      \"call_args\": \"(col)\",\n      \"cimguiname\": \"ImDrawList_PathFillConcave\",\n      \"defaults\": {},\n      \"funcname\": \"PathFillConcave\",\n      \"location\": \"imgui:3141\",\n      \"ov_cimguiname\": \"ImDrawList_PathFillConcave\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImU32)\",\n      \"stname\": \"ImDrawList\"\n    }\n  ],\n  \"ImDrawList_PathFillConvex\": [\n    {\n      \"args\": \"(ImDrawList* self,ImU32 col)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImDrawList*\"\n        },\n        {\n          \"name\": \"col\",\n          \"type\": \"ImU32\"\n        }\n      ],\n      \"argsoriginal\": \"(ImU32 col)\",\n      \"call_args\": \"(col)\",\n      \"cimguiname\": \"ImDrawList_PathFillConvex\",\n      \"defaults\": {},\n      \"funcname\": \"PathFillConvex\",\n      \"location\": \"imgui:3140\",\n      \"ov_cimguiname\": \"ImDrawList_PathFillConvex\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImU32)\",\n      \"stname\": \"ImDrawList\"\n    }\n  ],\n  \"ImDrawList_PathLineTo\": [\n    {\n      \"args\": \"(ImDrawList* self,const ImVec2 pos)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImDrawList*\"\n        },\n        {\n          \"name\": \"pos\",\n          \"type\": \"const ImVec2\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImVec2& pos)\",\n      \"call_args\": \"(pos)\",\n      \"cimguiname\": \"ImDrawList_PathLineTo\",\n      \"defaults\": {},\n      \"funcname\": \"PathLineTo\",\n      \"location\": \"imgui:3138\",\n      \"ov_cimguiname\": \"ImDrawList_PathLineTo\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImVec2)\",\n      \"stname\": \"ImDrawList\"\n    }\n  ],\n  \"ImDrawList_PathLineToMergeDuplicate\": [\n    {\n      \"args\": \"(ImDrawList* self,const ImVec2 pos)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImDrawList*\"\n        },\n        {\n          \"name\": \"pos\",\n          \"type\": \"const ImVec2\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImVec2& pos)\",\n      \"call_args\": \"(pos)\",\n      \"cimguiname\": \"ImDrawList_PathLineToMergeDuplicate\",\n      \"defaults\": {},\n      \"funcname\": \"PathLineToMergeDuplicate\",\n      \"location\": \"imgui:3139\",\n      \"ov_cimguiname\": \"ImDrawList_PathLineToMergeDuplicate\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImVec2)\",\n      \"stname\": \"ImDrawList\"\n    }\n  ],\n  \"ImDrawList_PathRect\": [\n    {\n      \"args\": \"(ImDrawList* self,const ImVec2 rect_min,const ImVec2 rect_max,float rounding,ImDrawFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImDrawList*\"\n        },\n        {\n          \"name\": \"rect_min\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"rect_max\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"rounding\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImDrawFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImVec2& rect_min,const ImVec2& rect_max,float rounding=0.0f,ImDrawFlags flags=0)\",\n      \"call_args\": \"(rect_min,rect_max,rounding,flags)\",\n      \"cimguiname\": \"ImDrawList_PathRect\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"rounding\": \"0.0f\"\n      },\n      \"funcname\": \"PathRect\",\n      \"location\": \"imgui:3148\",\n      \"ov_cimguiname\": \"ImDrawList_PathRect\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImVec2,const ImVec2,float,ImDrawFlags)\",\n      \"stname\": \"ImDrawList\"\n    }\n  ],\n  \"ImDrawList_PathStroke\": [\n    {\n      \"args\": \"(ImDrawList* self,ImU32 col,ImDrawFlags flags,float thickness)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImDrawList*\"\n        },\n        {\n          \"name\": \"col\",\n          \"type\": \"ImU32\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImDrawFlags\"\n        },\n        {\n          \"name\": \"thickness\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(ImU32 col,ImDrawFlags flags=0,float thickness=1.0f)\",\n      \"call_args\": \"(col,flags,thickness)\",\n      \"cimguiname\": \"ImDrawList_PathStroke\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"thickness\": \"1.0f\"\n      },\n      \"funcname\": \"PathStroke\",\n      \"location\": \"imgui:3142\",\n      \"ov_cimguiname\": \"ImDrawList_PathStroke\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImU32,ImDrawFlags,float)\",\n      \"stname\": \"ImDrawList\"\n    }\n  ],\n  \"ImDrawList_PopClipRect\": [\n    {\n      \"args\": \"(ImDrawList* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImDrawList*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImDrawList_PopClipRect\",\n      \"defaults\": {},\n      \"funcname\": \"PopClipRect\",\n      \"location\": \"imgui:3087\",\n      \"ov_cimguiname\": \"ImDrawList_PopClipRect\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"ImDrawList\"\n    }\n  ],\n  \"ImDrawList_PopTextureID\": [\n    {\n      \"args\": \"(ImDrawList* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImDrawList*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImDrawList_PopTextureID\",\n      \"defaults\": {},\n      \"funcname\": \"PopTextureID\",\n      \"location\": \"imgui:3089\",\n      \"ov_cimguiname\": \"ImDrawList_PopTextureID\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"ImDrawList\"\n    }\n  ],\n  \"ImDrawList_PrimQuadUV\": [\n    {\n      \"args\": \"(ImDrawList* self,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)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImDrawList*\"\n        },\n        {\n          \"name\": \"a\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"b\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"c\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"d\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"uv_a\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"uv_b\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"uv_c\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"uv_d\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"col\",\n          \"type\": \"ImU32\"\n        }\n      ],\n      \"argsoriginal\": \"(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)\",\n      \"call_args\": \"(a,b,c,d,uv_a,uv_b,uv_c,uv_d,col)\",\n      \"cimguiname\": \"ImDrawList_PrimQuadUV\",\n      \"defaults\": {},\n      \"funcname\": \"PrimQuadUV\",\n      \"location\": \"imgui:3182\",\n      \"ov_cimguiname\": \"ImDrawList_PrimQuadUV\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImVec2,const ImVec2,const ImVec2,const ImVec2,const ImVec2,const ImVec2,const ImVec2,const ImVec2,ImU32)\",\n      \"stname\": \"ImDrawList\"\n    }\n  ],\n  \"ImDrawList_PrimRect\": [\n    {\n      \"args\": \"(ImDrawList* self,const ImVec2 a,const ImVec2 b,ImU32 col)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImDrawList*\"\n        },\n        {\n          \"name\": \"a\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"b\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"col\",\n          \"type\": \"ImU32\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImVec2& a,const ImVec2& b,ImU32 col)\",\n      \"call_args\": \"(a,b,col)\",\n      \"cimguiname\": \"ImDrawList_PrimRect\",\n      \"defaults\": {},\n      \"funcname\": \"PrimRect\",\n      \"location\": \"imgui:3180\",\n      \"ov_cimguiname\": \"ImDrawList_PrimRect\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImVec2,const ImVec2,ImU32)\",\n      \"stname\": \"ImDrawList\"\n    }\n  ],\n  \"ImDrawList_PrimRectUV\": [\n    {\n      \"args\": \"(ImDrawList* self,const ImVec2 a,const ImVec2 b,const ImVec2 uv_a,const ImVec2 uv_b,ImU32 col)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImDrawList*\"\n        },\n        {\n          \"name\": \"a\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"b\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"uv_a\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"uv_b\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"col\",\n          \"type\": \"ImU32\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImVec2& a,const ImVec2& b,const ImVec2& uv_a,const ImVec2& uv_b,ImU32 col)\",\n      \"call_args\": \"(a,b,uv_a,uv_b,col)\",\n      \"cimguiname\": \"ImDrawList_PrimRectUV\",\n      \"defaults\": {},\n      \"funcname\": \"PrimRectUV\",\n      \"location\": \"imgui:3181\",\n      \"ov_cimguiname\": \"ImDrawList_PrimRectUV\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImVec2,const ImVec2,const ImVec2,const ImVec2,ImU32)\",\n      \"stname\": \"ImDrawList\"\n    }\n  ],\n  \"ImDrawList_PrimReserve\": [\n    {\n      \"args\": \"(ImDrawList* self,int idx_count,int vtx_count)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImDrawList*\"\n        },\n        {\n          \"name\": \"idx_count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"vtx_count\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(int idx_count,int vtx_count)\",\n      \"call_args\": \"(idx_count,vtx_count)\",\n      \"cimguiname\": \"ImDrawList_PrimReserve\",\n      \"defaults\": {},\n      \"funcname\": \"PrimReserve\",\n      \"location\": \"imgui:3178\",\n      \"ov_cimguiname\": \"ImDrawList_PrimReserve\",\n      \"ret\": \"void\",\n      \"signature\": \"(int,int)\",\n      \"stname\": \"ImDrawList\"\n    }\n  ],\n  \"ImDrawList_PrimUnreserve\": [\n    {\n      \"args\": \"(ImDrawList* self,int idx_count,int vtx_count)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImDrawList*\"\n        },\n        {\n          \"name\": \"idx_count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"vtx_count\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(int idx_count,int vtx_count)\",\n      \"call_args\": \"(idx_count,vtx_count)\",\n      \"cimguiname\": \"ImDrawList_PrimUnreserve\",\n      \"defaults\": {},\n      \"funcname\": \"PrimUnreserve\",\n      \"location\": \"imgui:3179\",\n      \"ov_cimguiname\": \"ImDrawList_PrimUnreserve\",\n      \"ret\": \"void\",\n      \"signature\": \"(int,int)\",\n      \"stname\": \"ImDrawList\"\n    }\n  ],\n  \"ImDrawList_PrimVtx\": [\n    {\n      \"args\": \"(ImDrawList* self,const ImVec2 pos,const ImVec2 uv,ImU32 col)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImDrawList*\"\n        },\n        {\n          \"name\": \"pos\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"uv\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"col\",\n          \"type\": \"ImU32\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImVec2& pos,const ImVec2& uv,ImU32 col)\",\n      \"call_args\": \"(pos,uv,col)\",\n      \"cimguiname\": \"ImDrawList_PrimVtx\",\n      \"defaults\": {},\n      \"funcname\": \"PrimVtx\",\n      \"location\": \"imgui:3185\",\n      \"ov_cimguiname\": \"ImDrawList_PrimVtx\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImVec2,const ImVec2,ImU32)\",\n      \"stname\": \"ImDrawList\"\n    }\n  ],\n  \"ImDrawList_PrimWriteIdx\": [\n    {\n      \"args\": \"(ImDrawList* self,ImDrawIdx idx)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImDrawList*\"\n        },\n        {\n          \"name\": \"idx\",\n          \"type\": \"ImDrawIdx\"\n        }\n      ],\n      \"argsoriginal\": \"(ImDrawIdx idx)\",\n      \"call_args\": \"(idx)\",\n      \"cimguiname\": \"ImDrawList_PrimWriteIdx\",\n      \"defaults\": {},\n      \"funcname\": \"PrimWriteIdx\",\n      \"location\": \"imgui:3184\",\n      \"ov_cimguiname\": \"ImDrawList_PrimWriteIdx\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImDrawIdx)\",\n      \"stname\": \"ImDrawList\"\n    }\n  ],\n  \"ImDrawList_PrimWriteVtx\": [\n    {\n      \"args\": \"(ImDrawList* self,const ImVec2 pos,const ImVec2 uv,ImU32 col)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImDrawList*\"\n        },\n        {\n          \"name\": \"pos\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"uv\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"col\",\n          \"type\": \"ImU32\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImVec2& pos,const ImVec2& uv,ImU32 col)\",\n      \"call_args\": \"(pos,uv,col)\",\n      \"cimguiname\": \"ImDrawList_PrimWriteVtx\",\n      \"defaults\": {},\n      \"funcname\": \"PrimWriteVtx\",\n      \"location\": \"imgui:3183\",\n      \"ov_cimguiname\": \"ImDrawList_PrimWriteVtx\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImVec2,const ImVec2,ImU32)\",\n      \"stname\": \"ImDrawList\"\n    }\n  ],\n  \"ImDrawList_PushClipRect\": [\n    {\n      \"args\": \"(ImDrawList* self,const ImVec2 clip_rect_min,const ImVec2 clip_rect_max,bool intersect_with_current_clip_rect)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImDrawList*\"\n        },\n        {\n          \"name\": \"clip_rect_min\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"clip_rect_max\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"intersect_with_current_clip_rect\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImVec2& clip_rect_min,const ImVec2& clip_rect_max,bool intersect_with_current_clip_rect=false)\",\n      \"call_args\": \"(clip_rect_min,clip_rect_max,intersect_with_current_clip_rect)\",\n      \"cimguiname\": \"ImDrawList_PushClipRect\",\n      \"defaults\": {\n        \"intersect_with_current_clip_rect\": \"false\"\n      },\n      \"funcname\": \"PushClipRect\",\n      \"location\": \"imgui:3085\",\n      \"ov_cimguiname\": \"ImDrawList_PushClipRect\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImVec2,const ImVec2,bool)\",\n      \"stname\": \"ImDrawList\"\n    }\n  ],\n  \"ImDrawList_PushClipRectFullScreen\": [\n    {\n      \"args\": \"(ImDrawList* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImDrawList*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImDrawList_PushClipRectFullScreen\",\n      \"defaults\": {},\n      \"funcname\": \"PushClipRectFullScreen\",\n      \"location\": \"imgui:3086\",\n      \"ov_cimguiname\": \"ImDrawList_PushClipRectFullScreen\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"ImDrawList\"\n    }\n  ],\n  \"ImDrawList_PushTextureID\": [\n    {\n      \"args\": \"(ImDrawList* self,ImTextureID texture_id)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImDrawList*\"\n        },\n        {\n          \"name\": \"texture_id\",\n          \"type\": \"ImTextureID\"\n        }\n      ],\n      \"argsoriginal\": \"(ImTextureID texture_id)\",\n      \"call_args\": \"(texture_id)\",\n      \"cimguiname\": \"ImDrawList_PushTextureID\",\n      \"defaults\": {},\n      \"funcname\": \"PushTextureID\",\n      \"location\": \"imgui:3088\",\n      \"ov_cimguiname\": \"ImDrawList_PushTextureID\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImTextureID)\",\n      \"stname\": \"ImDrawList\"\n    }\n  ],\n  \"ImDrawList__CalcCircleAutoSegmentCount\": [\n    {\n      \"args\": \"(ImDrawList* self,float radius)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImDrawList*\"\n        },\n        {\n          \"name\": \"radius\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(float radius)\",\n      \"call_args\": \"(radius)\",\n      \"cimguiname\": \"ImDrawList__CalcCircleAutoSegmentCount\",\n      \"defaults\": {},\n      \"funcname\": \"_CalcCircleAutoSegmentCount\",\n      \"location\": \"imgui:3203\",\n      \"ov_cimguiname\": \"ImDrawList__CalcCircleAutoSegmentCount\",\n      \"ret\": \"int\",\n      \"signature\": \"(float)const\",\n      \"stname\": \"ImDrawList\"\n    }\n  ],\n  \"ImDrawList__ClearFreeMemory\": [\n    {\n      \"args\": \"(ImDrawList* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImDrawList*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImDrawList__ClearFreeMemory\",\n      \"defaults\": {},\n      \"funcname\": \"_ClearFreeMemory\",\n      \"location\": \"imgui:3196\",\n      \"ov_cimguiname\": \"ImDrawList__ClearFreeMemory\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"ImDrawList\"\n    }\n  ],\n  \"ImDrawList__OnChangedClipRect\": [\n    {\n      \"args\": \"(ImDrawList* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImDrawList*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImDrawList__OnChangedClipRect\",\n      \"defaults\": {},\n      \"funcname\": \"_OnChangedClipRect\",\n      \"location\": \"imgui:3199\",\n      \"ov_cimguiname\": \"ImDrawList__OnChangedClipRect\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"ImDrawList\"\n    }\n  ],\n  \"ImDrawList__OnChangedTextureID\": [\n    {\n      \"args\": \"(ImDrawList* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImDrawList*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImDrawList__OnChangedTextureID\",\n      \"defaults\": {},\n      \"funcname\": \"_OnChangedTextureID\",\n      \"location\": \"imgui:3200\",\n      \"ov_cimguiname\": \"ImDrawList__OnChangedTextureID\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"ImDrawList\"\n    }\n  ],\n  \"ImDrawList__OnChangedVtxOffset\": [\n    {\n      \"args\": \"(ImDrawList* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImDrawList*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImDrawList__OnChangedVtxOffset\",\n      \"defaults\": {},\n      \"funcname\": \"_OnChangedVtxOffset\",\n      \"location\": \"imgui:3201\",\n      \"ov_cimguiname\": \"ImDrawList__OnChangedVtxOffset\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"ImDrawList\"\n    }\n  ],\n  \"ImDrawList__PathArcToFastEx\": [\n    {\n      \"args\": \"(ImDrawList* self,const ImVec2 center,float radius,int a_min_sample,int a_max_sample,int a_step)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImDrawList*\"\n        },\n        {\n          \"name\": \"center\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"radius\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"a_min_sample\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"a_max_sample\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"a_step\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImVec2& center,float radius,int a_min_sample,int a_max_sample,int a_step)\",\n      \"call_args\": \"(center,radius,a_min_sample,a_max_sample,a_step)\",\n      \"cimguiname\": \"ImDrawList__PathArcToFastEx\",\n      \"defaults\": {},\n      \"funcname\": \"_PathArcToFastEx\",\n      \"location\": \"imgui:3204\",\n      \"ov_cimguiname\": \"ImDrawList__PathArcToFastEx\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImVec2,float,int,int,int)\",\n      \"stname\": \"ImDrawList\"\n    }\n  ],\n  \"ImDrawList__PathArcToN\": [\n    {\n      \"args\": \"(ImDrawList* self,const ImVec2 center,float radius,float a_min,float a_max,int num_segments)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImDrawList*\"\n        },\n        {\n          \"name\": \"center\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"radius\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"a_min\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"a_max\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"num_segments\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImVec2& center,float radius,float a_min,float a_max,int num_segments)\",\n      \"call_args\": \"(center,radius,a_min,a_max,num_segments)\",\n      \"cimguiname\": \"ImDrawList__PathArcToN\",\n      \"defaults\": {},\n      \"funcname\": \"_PathArcToN\",\n      \"location\": \"imgui:3205\",\n      \"ov_cimguiname\": \"ImDrawList__PathArcToN\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImVec2,float,float,float,int)\",\n      \"stname\": \"ImDrawList\"\n    }\n  ],\n  \"ImDrawList__PopUnusedDrawCmd\": [\n    {\n      \"args\": \"(ImDrawList* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImDrawList*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImDrawList__PopUnusedDrawCmd\",\n      \"defaults\": {},\n      \"funcname\": \"_PopUnusedDrawCmd\",\n      \"location\": \"imgui:3197\",\n      \"ov_cimguiname\": \"ImDrawList__PopUnusedDrawCmd\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"ImDrawList\"\n    }\n  ],\n  \"ImDrawList__ResetForNewFrame\": [\n    {\n      \"args\": \"(ImDrawList* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImDrawList*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImDrawList__ResetForNewFrame\",\n      \"defaults\": {},\n      \"funcname\": \"_ResetForNewFrame\",\n      \"location\": \"imgui:3195\",\n      \"ov_cimguiname\": \"ImDrawList__ResetForNewFrame\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"ImDrawList\"\n    }\n  ],\n  \"ImDrawList__SetTextureID\": [\n    {\n      \"args\": \"(ImDrawList* self,ImTextureID texture_id)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImDrawList*\"\n        },\n        {\n          \"name\": \"texture_id\",\n          \"type\": \"ImTextureID\"\n        }\n      ],\n      \"argsoriginal\": \"(ImTextureID texture_id)\",\n      \"call_args\": \"(texture_id)\",\n      \"cimguiname\": \"ImDrawList__SetTextureID\",\n      \"defaults\": {},\n      \"funcname\": \"_SetTextureID\",\n      \"location\": \"imgui:3202\",\n      \"ov_cimguiname\": \"ImDrawList__SetTextureID\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImTextureID)\",\n      \"stname\": \"ImDrawList\"\n    }\n  ],\n  \"ImDrawList__TryMergeDrawCmds\": [\n    {\n      \"args\": \"(ImDrawList* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImDrawList*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImDrawList__TryMergeDrawCmds\",\n      \"defaults\": {},\n      \"funcname\": \"_TryMergeDrawCmds\",\n      \"location\": \"imgui:3198\",\n      \"ov_cimguiname\": \"ImDrawList__TryMergeDrawCmds\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"ImDrawList\"\n    }\n  ],\n  \"ImDrawList_destroy\": [\n    {\n      \"args\": \"(ImDrawList* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImDrawList*\"\n        }\n      ],\n      \"call_args\": \"(self)\",\n      \"cimguiname\": \"ImDrawList_destroy\",\n      \"defaults\": {},\n      \"destructor\": true,\n      \"location\": \"imgui:3083\",\n      \"ov_cimguiname\": \"ImDrawList_destroy\",\n      \"realdestructor\": true,\n      \"ret\": \"void\",\n      \"signature\": \"(ImDrawList*)\",\n      \"stname\": \"ImDrawList\"\n    }\n  ],\n  \"ImFontAtlasCustomRect_ImFontAtlasCustomRect\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImFontAtlasCustomRect_ImFontAtlasCustomRect\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImFontAtlasCustomRect\",\n      \"location\": \"imgui:3303\",\n      \"ov_cimguiname\": \"ImFontAtlasCustomRect_ImFontAtlasCustomRect\",\n      \"signature\": \"()\",\n      \"stname\": \"ImFontAtlasCustomRect\"\n    }\n  ],\n  \"ImFontAtlasCustomRect_IsPacked\": [\n    {\n      \"args\": \"(ImFontAtlasCustomRect* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImFontAtlasCustomRect*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImFontAtlasCustomRect_IsPacked\",\n      \"defaults\": {},\n      \"funcname\": \"IsPacked\",\n      \"location\": \"imgui:3304\",\n      \"ov_cimguiname\": \"ImFontAtlasCustomRect_IsPacked\",\n      \"ret\": \"bool\",\n      \"signature\": \"()const\",\n      \"stname\": \"ImFontAtlasCustomRect\"\n    }\n  ],\n  \"ImFontAtlasCustomRect_destroy\": [\n    {\n      \"args\": \"(ImFontAtlasCustomRect* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImFontAtlasCustomRect*\"\n        }\n      ],\n      \"call_args\": \"(self)\",\n      \"cimguiname\": \"ImFontAtlasCustomRect_destroy\",\n      \"defaults\": {},\n      \"destructor\": true,\n      \"location\": \"imgui:3303\",\n      \"ov_cimguiname\": \"ImFontAtlasCustomRect_destroy\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImFontAtlasCustomRect*)\",\n      \"stname\": \"ImFontAtlasCustomRect\"\n    }\n  ],\n  \"ImFontAtlas_AddCustomRectFontGlyph\": [\n    {\n      \"args\": \"(ImFontAtlas* self,ImFont* font,ImWchar id,int width,int height,float advance_x,const ImVec2 offset)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImFontAtlas*\"\n        },\n        {\n          \"name\": \"font\",\n          \"type\": \"ImFont*\"\n        },\n        {\n          \"name\": \"id\",\n          \"type\": \"ImWchar\"\n        },\n        {\n          \"name\": \"width\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"height\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"advance_x\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"const ImVec2\"\n        }\n      ],\n      \"argsoriginal\": \"(ImFont* font,ImWchar id,int width,int height,float advance_x,const ImVec2& offset=ImVec2(0,0))\",\n      \"call_args\": \"(font,id,width,height,advance_x,offset)\",\n      \"cimguiname\": \"ImFontAtlas_AddCustomRectFontGlyph\",\n      \"defaults\": {\n        \"offset\": \"ImVec2(0,0)\"\n      },\n      \"funcname\": \"AddCustomRectFontGlyph\",\n      \"location\": \"imgui:3389\",\n      \"ov_cimguiname\": \"ImFontAtlas_AddCustomRectFontGlyph\",\n      \"ret\": \"int\",\n      \"signature\": \"(ImFont*,ImWchar,int,int,float,const ImVec2)\",\n      \"stname\": \"ImFontAtlas\"\n    }\n  ],\n  \"ImFontAtlas_AddCustomRectRegular\": [\n    {\n      \"args\": \"(ImFontAtlas* self,int width,int height)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImFontAtlas*\"\n        },\n        {\n          \"name\": \"width\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"height\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(int width,int height)\",\n      \"call_args\": \"(width,height)\",\n      \"cimguiname\": \"ImFontAtlas_AddCustomRectRegular\",\n      \"defaults\": {},\n      \"funcname\": \"AddCustomRectRegular\",\n      \"location\": \"imgui:3388\",\n      \"ov_cimguiname\": \"ImFontAtlas_AddCustomRectRegular\",\n      \"ret\": \"int\",\n      \"signature\": \"(int,int)\",\n      \"stname\": \"ImFontAtlas\"\n    }\n  ],\n  \"ImFontAtlas_AddFont\": [\n    {\n      \"args\": \"(ImFontAtlas* self,const ImFontConfig* font_cfg)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImFontAtlas*\"\n        },\n        {\n          \"name\": \"font_cfg\",\n          \"type\": \"const ImFontConfig*\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImFontConfig* font_cfg)\",\n      \"call_args\": \"(font_cfg)\",\n      \"cimguiname\": \"ImFontAtlas_AddFont\",\n      \"defaults\": {},\n      \"funcname\": \"AddFont\",\n      \"location\": \"imgui:3337\",\n      \"ov_cimguiname\": \"ImFontAtlas_AddFont\",\n      \"ret\": \"ImFont*\",\n      \"signature\": \"(const ImFontConfig*)\",\n      \"stname\": \"ImFontAtlas\"\n    }\n  ],\n  \"ImFontAtlas_AddFontDefault\": [\n    {\n      \"args\": \"(ImFontAtlas* self,const ImFontConfig* font_cfg)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImFontAtlas*\"\n        },\n        {\n          \"name\": \"font_cfg\",\n          \"type\": \"const ImFontConfig*\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImFontConfig* font_cfg=((void*)0))\",\n      \"call_args\": \"(font_cfg)\",\n      \"cimguiname\": \"ImFontAtlas_AddFontDefault\",\n      \"defaults\": {\n        \"font_cfg\": \"NULL\"\n      },\n      \"funcname\": \"AddFontDefault\",\n      \"location\": \"imgui:3338\",\n      \"ov_cimguiname\": \"ImFontAtlas_AddFontDefault\",\n      \"ret\": \"ImFont*\",\n      \"signature\": \"(const ImFontConfig*)\",\n      \"stname\": \"ImFontAtlas\"\n    }\n  ],\n  \"ImFontAtlas_AddFontFromFileTTF\": [\n    {\n      \"args\": \"(ImFontAtlas* self,const char* filename,float size_pixels,const ImFontConfig* font_cfg,const ImWchar* glyph_ranges)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImFontAtlas*\"\n        },\n        {\n          \"name\": \"filename\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"size_pixels\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"font_cfg\",\n          \"type\": \"const ImFontConfig*\"\n        },\n        {\n          \"name\": \"glyph_ranges\",\n          \"type\": \"const ImWchar*\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* filename,float size_pixels,const ImFontConfig* font_cfg=((void*)0),const ImWchar* glyph_ranges=((void*)0))\",\n      \"call_args\": \"(filename,size_pixels,font_cfg,glyph_ranges)\",\n      \"cimguiname\": \"ImFontAtlas_AddFontFromFileTTF\",\n      \"defaults\": {\n        \"font_cfg\": \"NULL\",\n        \"glyph_ranges\": \"NULL\"\n      },\n      \"funcname\": \"AddFontFromFileTTF\",\n      \"location\": \"imgui:3339\",\n      \"ov_cimguiname\": \"ImFontAtlas_AddFontFromFileTTF\",\n      \"ret\": \"ImFont*\",\n      \"signature\": \"(const char*,float,const ImFontConfig*,const ImWchar*)\",\n      \"stname\": \"ImFontAtlas\"\n    }\n  ],\n  \"ImFontAtlas_AddFontFromMemoryCompressedBase85TTF\": [\n    {\n      \"args\": \"(ImFontAtlas* self,const char* compressed_font_data_base85,float size_pixels,const ImFontConfig* font_cfg,const ImWchar* glyph_ranges)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImFontAtlas*\"\n        },\n        {\n          \"name\": \"compressed_font_data_base85\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"size_pixels\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"font_cfg\",\n          \"type\": \"const ImFontConfig*\"\n        },\n        {\n          \"name\": \"glyph_ranges\",\n          \"type\": \"const ImWchar*\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* compressed_font_data_base85,float size_pixels,const ImFontConfig* font_cfg=((void*)0),const ImWchar* glyph_ranges=((void*)0))\",\n      \"call_args\": \"(compressed_font_data_base85,size_pixels,font_cfg,glyph_ranges)\",\n      \"cimguiname\": \"ImFontAtlas_AddFontFromMemoryCompressedBase85TTF\",\n      \"defaults\": {\n        \"font_cfg\": \"NULL\",\n        \"glyph_ranges\": \"NULL\"\n      },\n      \"funcname\": \"AddFontFromMemoryCompressedBase85TTF\",\n      \"location\": \"imgui:3342\",\n      \"ov_cimguiname\": \"ImFontAtlas_AddFontFromMemoryCompressedBase85TTF\",\n      \"ret\": \"ImFont*\",\n      \"signature\": \"(const char*,float,const ImFontConfig*,const ImWchar*)\",\n      \"stname\": \"ImFontAtlas\"\n    }\n  ],\n  \"ImFontAtlas_AddFontFromMemoryCompressedTTF\": [\n    {\n      \"args\": \"(ImFontAtlas* self,const void* compressed_font_data,int compressed_font_data_size,float size_pixels,const ImFontConfig* font_cfg,const ImWchar* glyph_ranges)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImFontAtlas*\"\n        },\n        {\n          \"name\": \"compressed_font_data\",\n          \"type\": \"const void*\"\n        },\n        {\n          \"name\": \"compressed_font_data_size\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"size_pixels\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"font_cfg\",\n          \"type\": \"const ImFontConfig*\"\n        },\n        {\n          \"name\": \"glyph_ranges\",\n          \"type\": \"const ImWchar*\"\n        }\n      ],\n      \"argsoriginal\": \"(const void* compressed_font_data,int compressed_font_data_size,float size_pixels,const ImFontConfig* font_cfg=((void*)0),const ImWchar* glyph_ranges=((void*)0))\",\n      \"call_args\": \"(compressed_font_data,compressed_font_data_size,size_pixels,font_cfg,glyph_ranges)\",\n      \"cimguiname\": \"ImFontAtlas_AddFontFromMemoryCompressedTTF\",\n      \"defaults\": {\n        \"font_cfg\": \"NULL\",\n        \"glyph_ranges\": \"NULL\"\n      },\n      \"funcname\": \"AddFontFromMemoryCompressedTTF\",\n      \"location\": \"imgui:3341\",\n      \"ov_cimguiname\": \"ImFontAtlas_AddFontFromMemoryCompressedTTF\",\n      \"ret\": \"ImFont*\",\n      \"signature\": \"(const void*,int,float,const ImFontConfig*,const ImWchar*)\",\n      \"stname\": \"ImFontAtlas\"\n    }\n  ],\n  \"ImFontAtlas_AddFontFromMemoryTTF\": [\n    {\n      \"args\": \"(ImFontAtlas* self,void* font_data,int font_data_size,float size_pixels,const ImFontConfig* font_cfg,const ImWchar* glyph_ranges)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImFontAtlas*\"\n        },\n        {\n          \"name\": \"font_data\",\n          \"type\": \"void*\"\n        },\n        {\n          \"name\": \"font_data_size\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"size_pixels\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"font_cfg\",\n          \"type\": \"const ImFontConfig*\"\n        },\n        {\n          \"name\": \"glyph_ranges\",\n          \"type\": \"const ImWchar*\"\n        }\n      ],\n      \"argsoriginal\": \"(void* font_data,int font_data_size,float size_pixels,const ImFontConfig* font_cfg=((void*)0),const ImWchar* glyph_ranges=((void*)0))\",\n      \"call_args\": \"(font_data,font_data_size,size_pixels,font_cfg,glyph_ranges)\",\n      \"cimguiname\": \"ImFontAtlas_AddFontFromMemoryTTF\",\n      \"defaults\": {\n        \"font_cfg\": \"NULL\",\n        \"glyph_ranges\": \"NULL\"\n      },\n      \"funcname\": \"AddFontFromMemoryTTF\",\n      \"location\": \"imgui:3340\",\n      \"ov_cimguiname\": \"ImFontAtlas_AddFontFromMemoryTTF\",\n      \"ret\": \"ImFont*\",\n      \"signature\": \"(void*,int,float,const ImFontConfig*,const ImWchar*)\",\n      \"stname\": \"ImFontAtlas\"\n    }\n  ],\n  \"ImFontAtlas_Build\": [\n    {\n      \"args\": \"(ImFontAtlas* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImFontAtlas*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImFontAtlas_Build\",\n      \"defaults\": {},\n      \"funcname\": \"Build\",\n      \"location\": \"imgui:3353\",\n      \"ov_cimguiname\": \"ImFontAtlas_Build\",\n      \"ret\": \"bool\",\n      \"signature\": \"()\",\n      \"stname\": \"ImFontAtlas\"\n    }\n  ],\n  \"ImFontAtlas_CalcCustomRectUV\": [\n    {\n      \"args\": \"(ImFontAtlas* self,const ImFontAtlasCustomRect* rect,ImVec2* out_uv_min,ImVec2* out_uv_max)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImFontAtlas*\"\n        },\n        {\n          \"name\": \"rect\",\n          \"type\": \"const ImFontAtlasCustomRect*\"\n        },\n        {\n          \"name\": \"out_uv_min\",\n          \"type\": \"ImVec2*\"\n        },\n        {\n          \"name\": \"out_uv_max\",\n          \"type\": \"ImVec2*\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImFontAtlasCustomRect* rect,ImVec2* out_uv_min,ImVec2* out_uv_max)\",\n      \"call_args\": \"(rect,out_uv_min,out_uv_max)\",\n      \"cimguiname\": \"ImFontAtlas_CalcCustomRectUV\",\n      \"defaults\": {},\n      \"funcname\": \"CalcCustomRectUV\",\n      \"location\": \"imgui:3393\",\n      \"ov_cimguiname\": \"ImFontAtlas_CalcCustomRectUV\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImFontAtlasCustomRect*,ImVec2*,ImVec2*)const\",\n      \"stname\": \"ImFontAtlas\"\n    }\n  ],\n  \"ImFontAtlas_Clear\": [\n    {\n      \"args\": \"(ImFontAtlas* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImFontAtlas*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImFontAtlas_Clear\",\n      \"defaults\": {},\n      \"funcname\": \"Clear\",\n      \"location\": \"imgui:3346\",\n      \"ov_cimguiname\": \"ImFontAtlas_Clear\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"ImFontAtlas\"\n    }\n  ],\n  \"ImFontAtlas_ClearFonts\": [\n    {\n      \"args\": \"(ImFontAtlas* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImFontAtlas*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImFontAtlas_ClearFonts\",\n      \"defaults\": {},\n      \"funcname\": \"ClearFonts\",\n      \"location\": \"imgui:3345\",\n      \"ov_cimguiname\": \"ImFontAtlas_ClearFonts\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"ImFontAtlas\"\n    }\n  ],\n  \"ImFontAtlas_ClearInputData\": [\n    {\n      \"args\": \"(ImFontAtlas* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImFontAtlas*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImFontAtlas_ClearInputData\",\n      \"defaults\": {},\n      \"funcname\": \"ClearInputData\",\n      \"location\": \"imgui:3343\",\n      \"ov_cimguiname\": \"ImFontAtlas_ClearInputData\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"ImFontAtlas\"\n    }\n  ],\n  \"ImFontAtlas_ClearTexData\": [\n    {\n      \"args\": \"(ImFontAtlas* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImFontAtlas*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImFontAtlas_ClearTexData\",\n      \"defaults\": {},\n      \"funcname\": \"ClearTexData\",\n      \"location\": \"imgui:3344\",\n      \"ov_cimguiname\": \"ImFontAtlas_ClearTexData\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"ImFontAtlas\"\n    }\n  ],\n  \"ImFontAtlas_GetCustomRectByIndex\": [\n    {\n      \"args\": \"(ImFontAtlas* self,int index)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImFontAtlas*\"\n        },\n        {\n          \"name\": \"index\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(int index)\",\n      \"call_args\": \"(index)\",\n      \"cimguiname\": \"ImFontAtlas_GetCustomRectByIndex\",\n      \"defaults\": {},\n      \"funcname\": \"GetCustomRectByIndex\",\n      \"location\": \"imgui:3390\",\n      \"ov_cimguiname\": \"ImFontAtlas_GetCustomRectByIndex\",\n      \"ret\": \"ImFontAtlasCustomRect*\",\n      \"signature\": \"(int)\",\n      \"stname\": \"ImFontAtlas\"\n    }\n  ],\n  \"ImFontAtlas_GetGlyphRangesChineseFull\": [\n    {\n      \"args\": \"(ImFontAtlas* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImFontAtlas*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImFontAtlas_GetGlyphRangesChineseFull\",\n      \"defaults\": {},\n      \"funcname\": \"GetGlyphRangesChineseFull\",\n      \"location\": \"imgui:3371\",\n      \"ov_cimguiname\": \"ImFontAtlas_GetGlyphRangesChineseFull\",\n      \"ret\": \"const ImWchar*\",\n      \"signature\": \"()\",\n      \"stname\": \"ImFontAtlas\"\n    }\n  ],\n  \"ImFontAtlas_GetGlyphRangesChineseSimplifiedCommon\": [\n    {\n      \"args\": \"(ImFontAtlas* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImFontAtlas*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImFontAtlas_GetGlyphRangesChineseSimplifiedCommon\",\n      \"defaults\": {},\n      \"funcname\": \"GetGlyphRangesChineseSimplifiedCommon\",\n      \"location\": \"imgui:3372\",\n      \"ov_cimguiname\": \"ImFontAtlas_GetGlyphRangesChineseSimplifiedCommon\",\n      \"ret\": \"const ImWchar*\",\n      \"signature\": \"()\",\n      \"stname\": \"ImFontAtlas\"\n    }\n  ],\n  \"ImFontAtlas_GetGlyphRangesCyrillic\": [\n    {\n      \"args\": \"(ImFontAtlas* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImFontAtlas*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImFontAtlas_GetGlyphRangesCyrillic\",\n      \"defaults\": {},\n      \"funcname\": \"GetGlyphRangesCyrillic\",\n      \"location\": \"imgui:3373\",\n      \"ov_cimguiname\": \"ImFontAtlas_GetGlyphRangesCyrillic\",\n      \"ret\": \"const ImWchar*\",\n      \"signature\": \"()\",\n      \"stname\": \"ImFontAtlas\"\n    }\n  ],\n  \"ImFontAtlas_GetGlyphRangesDefault\": [\n    {\n      \"args\": \"(ImFontAtlas* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImFontAtlas*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImFontAtlas_GetGlyphRangesDefault\",\n      \"defaults\": {},\n      \"funcname\": \"GetGlyphRangesDefault\",\n      \"location\": \"imgui:3367\",\n      \"ov_cimguiname\": \"ImFontAtlas_GetGlyphRangesDefault\",\n      \"ret\": \"const ImWchar*\",\n      \"signature\": \"()\",\n      \"stname\": \"ImFontAtlas\"\n    }\n  ],\n  \"ImFontAtlas_GetGlyphRangesGreek\": [\n    {\n      \"args\": \"(ImFontAtlas* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImFontAtlas*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImFontAtlas_GetGlyphRangesGreek\",\n      \"defaults\": {},\n      \"funcname\": \"GetGlyphRangesGreek\",\n      \"location\": \"imgui:3368\",\n      \"ov_cimguiname\": \"ImFontAtlas_GetGlyphRangesGreek\",\n      \"ret\": \"const ImWchar*\",\n      \"signature\": \"()\",\n      \"stname\": \"ImFontAtlas\"\n    }\n  ],\n  \"ImFontAtlas_GetGlyphRangesJapanese\": [\n    {\n      \"args\": \"(ImFontAtlas* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImFontAtlas*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImFontAtlas_GetGlyphRangesJapanese\",\n      \"defaults\": {},\n      \"funcname\": \"GetGlyphRangesJapanese\",\n      \"location\": \"imgui:3370\",\n      \"ov_cimguiname\": \"ImFontAtlas_GetGlyphRangesJapanese\",\n      \"ret\": \"const ImWchar*\",\n      \"signature\": \"()\",\n      \"stname\": \"ImFontAtlas\"\n    }\n  ],\n  \"ImFontAtlas_GetGlyphRangesKorean\": [\n    {\n      \"args\": \"(ImFontAtlas* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImFontAtlas*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImFontAtlas_GetGlyphRangesKorean\",\n      \"defaults\": {},\n      \"funcname\": \"GetGlyphRangesKorean\",\n      \"location\": \"imgui:3369\",\n      \"ov_cimguiname\": \"ImFontAtlas_GetGlyphRangesKorean\",\n      \"ret\": \"const ImWchar*\",\n      \"signature\": \"()\",\n      \"stname\": \"ImFontAtlas\"\n    }\n  ],\n  \"ImFontAtlas_GetGlyphRangesThai\": [\n    {\n      \"args\": \"(ImFontAtlas* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImFontAtlas*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImFontAtlas_GetGlyphRangesThai\",\n      \"defaults\": {},\n      \"funcname\": \"GetGlyphRangesThai\",\n      \"location\": \"imgui:3374\",\n      \"ov_cimguiname\": \"ImFontAtlas_GetGlyphRangesThai\",\n      \"ret\": \"const ImWchar*\",\n      \"signature\": \"()\",\n      \"stname\": \"ImFontAtlas\"\n    }\n  ],\n  \"ImFontAtlas_GetGlyphRangesVietnamese\": [\n    {\n      \"args\": \"(ImFontAtlas* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImFontAtlas*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImFontAtlas_GetGlyphRangesVietnamese\",\n      \"defaults\": {},\n      \"funcname\": \"GetGlyphRangesVietnamese\",\n      \"location\": \"imgui:3375\",\n      \"ov_cimguiname\": \"ImFontAtlas_GetGlyphRangesVietnamese\",\n      \"ret\": \"const ImWchar*\",\n      \"signature\": \"()\",\n      \"stname\": \"ImFontAtlas\"\n    }\n  ],\n  \"ImFontAtlas_GetMouseCursorTexData\": [\n    {\n      \"args\": \"(ImFontAtlas* self,ImGuiMouseCursor cursor,ImVec2* out_offset,ImVec2* out_size,ImVec2 out_uv_border[2],ImVec2 out_uv_fill[2])\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImFontAtlas*\"\n        },\n        {\n          \"name\": \"cursor\",\n          \"type\": \"ImGuiMouseCursor\"\n        },\n        {\n          \"name\": \"out_offset\",\n          \"type\": \"ImVec2*\"\n        },\n        {\n          \"name\": \"out_size\",\n          \"type\": \"ImVec2*\"\n        },\n        {\n          \"name\": \"out_uv_border\",\n          \"type\": \"ImVec2[2]\"\n        },\n        {\n          \"name\": \"out_uv_fill\",\n          \"type\": \"ImVec2[2]\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiMouseCursor cursor,ImVec2* out_offset,ImVec2* out_size,ImVec2 out_uv_border[2],ImVec2 out_uv_fill[2])\",\n      \"call_args\": \"(cursor,out_offset,out_size,out_uv_border,out_uv_fill)\",\n      \"cimguiname\": \"ImFontAtlas_GetMouseCursorTexData\",\n      \"defaults\": {},\n      \"funcname\": \"GetMouseCursorTexData\",\n      \"location\": \"imgui:3394\",\n      \"ov_cimguiname\": \"ImFontAtlas_GetMouseCursorTexData\",\n      \"ret\": \"bool\",\n      \"signature\": \"(ImGuiMouseCursor,ImVec2*,ImVec2*,ImVec2[2],ImVec2[2])\",\n      \"stname\": \"ImFontAtlas\"\n    }\n  ],\n  \"ImFontAtlas_GetTexDataAsAlpha8\": [\n    {\n      \"args\": \"(ImFontAtlas* self,unsigned char** out_pixels,int* out_width,int* out_height,int* out_bytes_per_pixel)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImFontAtlas*\"\n        },\n        {\n          \"name\": \"out_pixels\",\n          \"type\": \"unsigned char**\"\n        },\n        {\n          \"name\": \"out_width\",\n          \"type\": \"int*\"\n        },\n        {\n          \"name\": \"out_height\",\n          \"type\": \"int*\"\n        },\n        {\n          \"name\": \"out_bytes_per_pixel\",\n          \"type\": \"int*\"\n        }\n      ],\n      \"argsoriginal\": \"(unsigned char** out_pixels,int* out_width,int* out_height,int* out_bytes_per_pixel=((void*)0))\",\n      \"call_args\": \"(out_pixels,out_width,out_height,out_bytes_per_pixel)\",\n      \"cimguiname\": \"ImFontAtlas_GetTexDataAsAlpha8\",\n      \"defaults\": {\n        \"out_bytes_per_pixel\": \"NULL\"\n      },\n      \"funcname\": \"GetTexDataAsAlpha8\",\n      \"location\": \"imgui:3354\",\n      \"ov_cimguiname\": \"ImFontAtlas_GetTexDataAsAlpha8\",\n      \"ret\": \"void\",\n      \"signature\": \"(unsigned char**,int*,int*,int*)\",\n      \"stname\": \"ImFontAtlas\"\n    }\n  ],\n  \"ImFontAtlas_GetTexDataAsRGBA32\": [\n    {\n      \"args\": \"(ImFontAtlas* self,unsigned char** out_pixels,int* out_width,int* out_height,int* out_bytes_per_pixel)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImFontAtlas*\"\n        },\n        {\n          \"name\": \"out_pixels\",\n          \"type\": \"unsigned char**\"\n        },\n        {\n          \"name\": \"out_width\",\n          \"type\": \"int*\"\n        },\n        {\n          \"name\": \"out_height\",\n          \"type\": \"int*\"\n        },\n        {\n          \"name\": \"out_bytes_per_pixel\",\n          \"type\": \"int*\"\n        }\n      ],\n      \"argsoriginal\": \"(unsigned char** out_pixels,int* out_width,int* out_height,int* out_bytes_per_pixel=((void*)0))\",\n      \"call_args\": \"(out_pixels,out_width,out_height,out_bytes_per_pixel)\",\n      \"cimguiname\": \"ImFontAtlas_GetTexDataAsRGBA32\",\n      \"defaults\": {\n        \"out_bytes_per_pixel\": \"NULL\"\n      },\n      \"funcname\": \"GetTexDataAsRGBA32\",\n      \"location\": \"imgui:3355\",\n      \"ov_cimguiname\": \"ImFontAtlas_GetTexDataAsRGBA32\",\n      \"ret\": \"void\",\n      \"signature\": \"(unsigned char**,int*,int*,int*)\",\n      \"stname\": \"ImFontAtlas\"\n    }\n  ],\n  \"ImFontAtlas_ImFontAtlas\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImFontAtlas_ImFontAtlas\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImFontAtlas\",\n      \"location\": \"imgui:3335\",\n      \"ov_cimguiname\": \"ImFontAtlas_ImFontAtlas\",\n      \"signature\": \"()\",\n      \"stname\": \"ImFontAtlas\"\n    }\n  ],\n  \"ImFontAtlas_IsBuilt\": [\n    {\n      \"args\": \"(ImFontAtlas* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImFontAtlas*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImFontAtlas_IsBuilt\",\n      \"defaults\": {},\n      \"funcname\": \"IsBuilt\",\n      \"location\": \"imgui:3356\",\n      \"ov_cimguiname\": \"ImFontAtlas_IsBuilt\",\n      \"ret\": \"bool\",\n      \"signature\": \"()const\",\n      \"stname\": \"ImFontAtlas\"\n    }\n  ],\n  \"ImFontAtlas_SetTexID\": [\n    {\n      \"args\": \"(ImFontAtlas* self,ImTextureID id)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImFontAtlas*\"\n        },\n        {\n          \"name\": \"id\",\n          \"type\": \"ImTextureID\"\n        }\n      ],\n      \"argsoriginal\": \"(ImTextureID id)\",\n      \"call_args\": \"(id)\",\n      \"cimguiname\": \"ImFontAtlas_SetTexID\",\n      \"defaults\": {},\n      \"funcname\": \"SetTexID\",\n      \"location\": \"imgui:3357\",\n      \"ov_cimguiname\": \"ImFontAtlas_SetTexID\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImTextureID)\",\n      \"stname\": \"ImFontAtlas\"\n    }\n  ],\n  \"ImFontAtlas_destroy\": [\n    {\n      \"args\": \"(ImFontAtlas* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImFontAtlas*\"\n        }\n      ],\n      \"call_args\": \"(self)\",\n      \"cimguiname\": \"ImFontAtlas_destroy\",\n      \"defaults\": {},\n      \"destructor\": true,\n      \"location\": \"imgui:3336\",\n      \"ov_cimguiname\": \"ImFontAtlas_destroy\",\n      \"realdestructor\": true,\n      \"ret\": \"void\",\n      \"signature\": \"(ImFontAtlas*)\",\n      \"stname\": \"ImFontAtlas\"\n    }\n  ],\n  \"ImFontConfig_ImFontConfig\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImFontConfig_ImFontConfig\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImFontConfig\",\n      \"location\": \"imgui:3260\",\n      \"ov_cimguiname\": \"ImFontConfig_ImFontConfig\",\n      \"signature\": \"()\",\n      \"stname\": \"ImFontConfig\"\n    }\n  ],\n  \"ImFontConfig_destroy\": [\n    {\n      \"args\": \"(ImFontConfig* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImFontConfig*\"\n        }\n      ],\n      \"call_args\": \"(self)\",\n      \"cimguiname\": \"ImFontConfig_destroy\",\n      \"defaults\": {},\n      \"destructor\": true,\n      \"location\": \"imgui:3260\",\n      \"ov_cimguiname\": \"ImFontConfig_destroy\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImFontConfig*)\",\n      \"stname\": \"ImFontConfig\"\n    }\n  ],\n  \"ImFontGlyphRangesBuilder_AddChar\": [\n    {\n      \"args\": \"(ImFontGlyphRangesBuilder* self,ImWchar c)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImFontGlyphRangesBuilder*\"\n        },\n        {\n          \"name\": \"c\",\n          \"type\": \"ImWchar\"\n        }\n      ],\n      \"argsoriginal\": \"(ImWchar c)\",\n      \"call_args\": \"(c)\",\n      \"cimguiname\": \"ImFontGlyphRangesBuilder_AddChar\",\n      \"defaults\": {},\n      \"funcname\": \"AddChar\",\n      \"location\": \"imgui:3285\",\n      \"ov_cimguiname\": \"ImFontGlyphRangesBuilder_AddChar\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImWchar)\",\n      \"stname\": \"ImFontGlyphRangesBuilder\"\n    }\n  ],\n  \"ImFontGlyphRangesBuilder_AddRanges\": [\n    {\n      \"args\": \"(ImFontGlyphRangesBuilder* self,const ImWchar* ranges)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImFontGlyphRangesBuilder*\"\n        },\n        {\n          \"name\": \"ranges\",\n          \"type\": \"const ImWchar*\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImWchar* ranges)\",\n      \"call_args\": \"(ranges)\",\n      \"cimguiname\": \"ImFontGlyphRangesBuilder_AddRanges\",\n      \"defaults\": {},\n      \"funcname\": \"AddRanges\",\n      \"location\": \"imgui:3287\",\n      \"ov_cimguiname\": \"ImFontGlyphRangesBuilder_AddRanges\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImWchar*)\",\n      \"stname\": \"ImFontGlyphRangesBuilder\"\n    }\n  ],\n  \"ImFontGlyphRangesBuilder_AddText\": [\n    {\n      \"args\": \"(ImFontGlyphRangesBuilder* self,const char* text,const char* text_end)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImFontGlyphRangesBuilder*\"\n        },\n        {\n          \"name\": \"text\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"text_end\",\n          \"type\": \"const char*\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* text,const char* text_end=((void*)0))\",\n      \"call_args\": \"(text,text_end)\",\n      \"cimguiname\": \"ImFontGlyphRangesBuilder_AddText\",\n      \"defaults\": {\n        \"text_end\": \"NULL\"\n      },\n      \"funcname\": \"AddText\",\n      \"location\": \"imgui:3286\",\n      \"ov_cimguiname\": \"ImFontGlyphRangesBuilder_AddText\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const char*)\",\n      \"stname\": \"ImFontGlyphRangesBuilder\"\n    }\n  ],\n  \"ImFontGlyphRangesBuilder_BuildRanges\": [\n    {\n      \"args\": \"(ImFontGlyphRangesBuilder* self,ImVector_ImWchar* out_ranges)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImFontGlyphRangesBuilder*\"\n        },\n        {\n          \"name\": \"out_ranges\",\n          \"type\": \"ImVector_ImWchar*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImVector<ImWchar>* out_ranges)\",\n      \"call_args\": \"(out_ranges)\",\n      \"cimguiname\": \"ImFontGlyphRangesBuilder_BuildRanges\",\n      \"defaults\": {},\n      \"funcname\": \"BuildRanges\",\n      \"location\": \"imgui:3288\",\n      \"ov_cimguiname\": \"ImFontGlyphRangesBuilder_BuildRanges\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImVector_ImWchar*)\",\n      \"stname\": \"ImFontGlyphRangesBuilder\"\n    }\n  ],\n  \"ImFontGlyphRangesBuilder_Clear\": [\n    {\n      \"args\": \"(ImFontGlyphRangesBuilder* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImFontGlyphRangesBuilder*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImFontGlyphRangesBuilder_Clear\",\n      \"defaults\": {},\n      \"funcname\": \"Clear\",\n      \"location\": \"imgui:3282\",\n      \"ov_cimguiname\": \"ImFontGlyphRangesBuilder_Clear\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"ImFontGlyphRangesBuilder\"\n    }\n  ],\n  \"ImFontGlyphRangesBuilder_GetBit\": [\n    {\n      \"args\": \"(ImFontGlyphRangesBuilder* self,size_t n)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImFontGlyphRangesBuilder*\"\n        },\n        {\n          \"name\": \"n\",\n          \"type\": \"size_t\"\n        }\n      ],\n      \"argsoriginal\": \"(size_t n)\",\n      \"call_args\": \"(n)\",\n      \"cimguiname\": \"ImFontGlyphRangesBuilder_GetBit\",\n      \"defaults\": {},\n      \"funcname\": \"GetBit\",\n      \"location\": \"imgui:3283\",\n      \"ov_cimguiname\": \"ImFontGlyphRangesBuilder_GetBit\",\n      \"ret\": \"bool\",\n      \"signature\": \"(size_t)const\",\n      \"stname\": \"ImFontGlyphRangesBuilder\"\n    }\n  ],\n  \"ImFontGlyphRangesBuilder_ImFontGlyphRangesBuilder\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImFontGlyphRangesBuilder_ImFontGlyphRangesBuilder\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImFontGlyphRangesBuilder\",\n      \"location\": \"imgui:3281\",\n      \"ov_cimguiname\": \"ImFontGlyphRangesBuilder_ImFontGlyphRangesBuilder\",\n      \"signature\": \"()\",\n      \"stname\": \"ImFontGlyphRangesBuilder\"\n    }\n  ],\n  \"ImFontGlyphRangesBuilder_SetBit\": [\n    {\n      \"args\": \"(ImFontGlyphRangesBuilder* self,size_t n)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImFontGlyphRangesBuilder*\"\n        },\n        {\n          \"name\": \"n\",\n          \"type\": \"size_t\"\n        }\n      ],\n      \"argsoriginal\": \"(size_t n)\",\n      \"call_args\": \"(n)\",\n      \"cimguiname\": \"ImFontGlyphRangesBuilder_SetBit\",\n      \"defaults\": {},\n      \"funcname\": \"SetBit\",\n      \"location\": \"imgui:3284\",\n      \"ov_cimguiname\": \"ImFontGlyphRangesBuilder_SetBit\",\n      \"ret\": \"void\",\n      \"signature\": \"(size_t)\",\n      \"stname\": \"ImFontGlyphRangesBuilder\"\n    }\n  ],\n  \"ImFontGlyphRangesBuilder_destroy\": [\n    {\n      \"args\": \"(ImFontGlyphRangesBuilder* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImFontGlyphRangesBuilder*\"\n        }\n      ],\n      \"call_args\": \"(self)\",\n      \"cimguiname\": \"ImFontGlyphRangesBuilder_destroy\",\n      \"defaults\": {},\n      \"destructor\": true,\n      \"location\": \"imgui:3281\",\n      \"ov_cimguiname\": \"ImFontGlyphRangesBuilder_destroy\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImFontGlyphRangesBuilder*)\",\n      \"stname\": \"ImFontGlyphRangesBuilder\"\n    }\n  ],\n  \"ImFont_AddGlyph\": [\n    {\n      \"args\": \"(ImFont* self,const ImFontConfig* src_cfg,ImWchar c,float x0,float y0,float x1,float y1,float u0,float v0,float u1,float v1,float advance_x)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImFont*\"\n        },\n        {\n          \"name\": \"src_cfg\",\n          \"type\": \"const ImFontConfig*\"\n        },\n        {\n          \"name\": \"c\",\n          \"type\": \"ImWchar\"\n        },\n        {\n          \"name\": \"x0\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"y0\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"x1\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"y1\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"u0\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"v0\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"u1\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"v1\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"advance_x\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImFontConfig* src_cfg,ImWchar c,float x0,float y0,float x1,float y1,float u0,float v0,float u1,float v1,float advance_x)\",\n      \"call_args\": \"(src_cfg,c,x0,y0,x1,y1,u0,v0,u1,v1,advance_x)\",\n      \"cimguiname\": \"ImFont_AddGlyph\",\n      \"defaults\": {},\n      \"funcname\": \"AddGlyph\",\n      \"location\": \"imgui:3485\",\n      \"ov_cimguiname\": \"ImFont_AddGlyph\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImFontConfig*,ImWchar,float,float,float,float,float,float,float,float,float)\",\n      \"stname\": \"ImFont\"\n    }\n  ],\n  \"ImFont_AddRemapChar\": [\n    {\n      \"args\": \"(ImFont* self,ImWchar dst,ImWchar src,bool overwrite_dst)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImFont*\"\n        },\n        {\n          \"name\": \"dst\",\n          \"type\": \"ImWchar\"\n        },\n        {\n          \"name\": \"src\",\n          \"type\": \"ImWchar\"\n        },\n        {\n          \"name\": \"overwrite_dst\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"argsoriginal\": \"(ImWchar dst,ImWchar src,bool overwrite_dst=true)\",\n      \"call_args\": \"(dst,src,overwrite_dst)\",\n      \"cimguiname\": \"ImFont_AddRemapChar\",\n      \"defaults\": {\n        \"overwrite_dst\": \"true\"\n      },\n      \"funcname\": \"AddRemapChar\",\n      \"location\": \"imgui:3486\",\n      \"ov_cimguiname\": \"ImFont_AddRemapChar\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImWchar,ImWchar,bool)\",\n      \"stname\": \"ImFont\"\n    }\n  ],\n  \"ImFont_BuildLookupTable\": [\n    {\n      \"args\": \"(ImFont* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImFont*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImFont_BuildLookupTable\",\n      \"defaults\": {},\n      \"funcname\": \"BuildLookupTable\",\n      \"location\": \"imgui:3482\",\n      \"ov_cimguiname\": \"ImFont_BuildLookupTable\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"ImFont\"\n    }\n  ],\n  \"ImFont_CalcTextSizeA\": [\n    {\n      \"args\": \"(ImVec2 *pOut,ImFont* self,float size,float max_width,float wrap_width,const char* text_begin,const char* text_end,const char** remaining)\",\n      \"argsT\": [\n        {\n          \"name\": \"pOut\",\n          \"type\": \"ImVec2*\"\n        },\n        {\n          \"name\": \"self\",\n          \"type\": \"ImFont*\"\n        },\n        {\n          \"name\": \"size\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"max_width\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"wrap_width\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"text_begin\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"text_end\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"remaining\",\n          \"type\": \"const char**\"\n        }\n      ],\n      \"argsoriginal\": \"(float size,float max_width,float wrap_width,const char* text_begin,const char* text_end=((void*)0),const char** remaining=((void*)0))\",\n      \"call_args\": \"(size,max_width,wrap_width,text_begin,text_end,remaining)\",\n      \"cimguiname\": \"ImFont_CalcTextSizeA\",\n      \"defaults\": {\n        \"remaining\": \"NULL\",\n        \"text_end\": \"NULL\"\n      },\n      \"funcname\": \"CalcTextSizeA\",\n      \"location\": \"imgui:3476\",\n      \"nonUDT\": 1,\n      \"ov_cimguiname\": \"ImFont_CalcTextSizeA\",\n      \"ret\": \"void\",\n      \"signature\": \"(float,float,float,const char*,const char*,const char**)\",\n      \"stname\": \"ImFont\"\n    }\n  ],\n  \"ImFont_CalcWordWrapPositionA\": [\n    {\n      \"args\": \"(ImFont* self,float scale,const char* text,const char* text_end,float wrap_width)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImFont*\"\n        },\n        {\n          \"name\": \"scale\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"text\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"text_end\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"wrap_width\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(float scale,const char* text,const char* text_end,float wrap_width)\",\n      \"call_args\": \"(scale,text,text_end,wrap_width)\",\n      \"cimguiname\": \"ImFont_CalcWordWrapPositionA\",\n      \"defaults\": {},\n      \"funcname\": \"CalcWordWrapPositionA\",\n      \"location\": \"imgui:3477\",\n      \"ov_cimguiname\": \"ImFont_CalcWordWrapPositionA\",\n      \"ret\": \"const char*\",\n      \"signature\": \"(float,const char*,const char*,float)\",\n      \"stname\": \"ImFont\"\n    }\n  ],\n  \"ImFont_ClearOutputData\": [\n    {\n      \"args\": \"(ImFont* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImFont*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImFont_ClearOutputData\",\n      \"defaults\": {},\n      \"funcname\": \"ClearOutputData\",\n      \"location\": \"imgui:3483\",\n      \"ov_cimguiname\": \"ImFont_ClearOutputData\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"ImFont\"\n    }\n  ],\n  \"ImFont_FindGlyph\": [\n    {\n      \"args\": \"(ImFont* self,ImWchar c)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImFont*\"\n        },\n        {\n          \"name\": \"c\",\n          \"type\": \"ImWchar\"\n        }\n      ],\n      \"argsoriginal\": \"(ImWchar c)\",\n      \"call_args\": \"(c)\",\n      \"cimguiname\": \"ImFont_FindGlyph\",\n      \"defaults\": {},\n      \"funcname\": \"FindGlyph\",\n      \"location\": \"imgui:3468\",\n      \"ov_cimguiname\": \"ImFont_FindGlyph\",\n      \"ret\": \"const ImFontGlyph*\",\n      \"signature\": \"(ImWchar)\",\n      \"stname\": \"ImFont\"\n    }\n  ],\n  \"ImFont_FindGlyphNoFallback\": [\n    {\n      \"args\": \"(ImFont* self,ImWchar c)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImFont*\"\n        },\n        {\n          \"name\": \"c\",\n          \"type\": \"ImWchar\"\n        }\n      ],\n      \"argsoriginal\": \"(ImWchar c)\",\n      \"call_args\": \"(c)\",\n      \"cimguiname\": \"ImFont_FindGlyphNoFallback\",\n      \"defaults\": {},\n      \"funcname\": \"FindGlyphNoFallback\",\n      \"location\": \"imgui:3469\",\n      \"ov_cimguiname\": \"ImFont_FindGlyphNoFallback\",\n      \"ret\": \"const ImFontGlyph*\",\n      \"signature\": \"(ImWchar)\",\n      \"stname\": \"ImFont\"\n    }\n  ],\n  \"ImFont_GetCharAdvance\": [\n    {\n      \"args\": \"(ImFont* self,ImWchar c)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImFont*\"\n        },\n        {\n          \"name\": \"c\",\n          \"type\": \"ImWchar\"\n        }\n      ],\n      \"argsoriginal\": \"(ImWchar c)\",\n      \"call_args\": \"(c)\",\n      \"cimguiname\": \"ImFont_GetCharAdvance\",\n      \"defaults\": {},\n      \"funcname\": \"GetCharAdvance\",\n      \"location\": \"imgui:3470\",\n      \"ov_cimguiname\": \"ImFont_GetCharAdvance\",\n      \"ret\": \"float\",\n      \"signature\": \"(ImWchar)\",\n      \"stname\": \"ImFont\"\n    }\n  ],\n  \"ImFont_GetDebugName\": [\n    {\n      \"args\": \"(ImFont* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImFont*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImFont_GetDebugName\",\n      \"defaults\": {},\n      \"funcname\": \"GetDebugName\",\n      \"location\": \"imgui:3472\",\n      \"ov_cimguiname\": \"ImFont_GetDebugName\",\n      \"ret\": \"const char*\",\n      \"signature\": \"()const\",\n      \"stname\": \"ImFont\"\n    }\n  ],\n  \"ImFont_GrowIndex\": [\n    {\n      \"args\": \"(ImFont* self,int new_size)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImFont*\"\n        },\n        {\n          \"name\": \"new_size\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(int new_size)\",\n      \"call_args\": \"(new_size)\",\n      \"cimguiname\": \"ImFont_GrowIndex\",\n      \"defaults\": {},\n      \"funcname\": \"GrowIndex\",\n      \"location\": \"imgui:3484\",\n      \"ov_cimguiname\": \"ImFont_GrowIndex\",\n      \"ret\": \"void\",\n      \"signature\": \"(int)\",\n      \"stname\": \"ImFont\"\n    }\n  ],\n  \"ImFont_ImFont\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImFont_ImFont\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImFont\",\n      \"location\": \"imgui:3466\",\n      \"ov_cimguiname\": \"ImFont_ImFont\",\n      \"signature\": \"()\",\n      \"stname\": \"ImFont\"\n    }\n  ],\n  \"ImFont_IsGlyphRangeUnused\": [\n    {\n      \"args\": \"(ImFont* self,unsigned int c_begin,unsigned int c_last)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImFont*\"\n        },\n        {\n          \"name\": \"c_begin\",\n          \"type\": \"unsigned int\"\n        },\n        {\n          \"name\": \"c_last\",\n          \"type\": \"unsigned int\"\n        }\n      ],\n      \"argsoriginal\": \"(unsigned int c_begin,unsigned int c_last)\",\n      \"call_args\": \"(c_begin,c_last)\",\n      \"cimguiname\": \"ImFont_IsGlyphRangeUnused\",\n      \"defaults\": {},\n      \"funcname\": \"IsGlyphRangeUnused\",\n      \"location\": \"imgui:3488\",\n      \"ov_cimguiname\": \"ImFont_IsGlyphRangeUnused\",\n      \"ret\": \"bool\",\n      \"signature\": \"(unsigned int,unsigned int)\",\n      \"stname\": \"ImFont\"\n    }\n  ],\n  \"ImFont_IsLoaded\": [\n    {\n      \"args\": \"(ImFont* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImFont*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImFont_IsLoaded\",\n      \"defaults\": {},\n      \"funcname\": \"IsLoaded\",\n      \"location\": \"imgui:3471\",\n      \"ov_cimguiname\": \"ImFont_IsLoaded\",\n      \"ret\": \"bool\",\n      \"signature\": \"()const\",\n      \"stname\": \"ImFont\"\n    }\n  ],\n  \"ImFont_RenderChar\": [\n    {\n      \"args\": \"(ImFont* self,ImDrawList* draw_list,float size,const ImVec2 pos,ImU32 col,ImWchar c)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImFont*\"\n        },\n        {\n          \"name\": \"draw_list\",\n          \"type\": \"ImDrawList*\"\n        },\n        {\n          \"name\": \"size\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"pos\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"col\",\n          \"type\": \"ImU32\"\n        },\n        {\n          \"name\": \"c\",\n          \"type\": \"ImWchar\"\n        }\n      ],\n      \"argsoriginal\": \"(ImDrawList* draw_list,float size,const ImVec2& pos,ImU32 col,ImWchar c)\",\n      \"call_args\": \"(draw_list,size,pos,col,c)\",\n      \"cimguiname\": \"ImFont_RenderChar\",\n      \"defaults\": {},\n      \"funcname\": \"RenderChar\",\n      \"location\": \"imgui:3478\",\n      \"ov_cimguiname\": \"ImFont_RenderChar\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImDrawList*,float,const ImVec2,ImU32,ImWchar)\",\n      \"stname\": \"ImFont\"\n    }\n  ],\n  \"ImFont_RenderText\": [\n    {\n      \"args\": \"(ImFont* self,ImDrawList* draw_list,float size,const ImVec2 pos,ImU32 col,const ImVec4 clip_rect,const char* text_begin,const char* text_end,float wrap_width,bool cpu_fine_clip)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImFont*\"\n        },\n        {\n          \"name\": \"draw_list\",\n          \"type\": \"ImDrawList*\"\n        },\n        {\n          \"name\": \"size\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"pos\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"col\",\n          \"type\": \"ImU32\"\n        },\n        {\n          \"name\": \"clip_rect\",\n          \"type\": \"const ImVec4\"\n        },\n        {\n          \"name\": \"text_begin\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"text_end\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"wrap_width\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"cpu_fine_clip\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"argsoriginal\": \"(ImDrawList* draw_list,float size,const 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)\",\n      \"call_args\": \"(draw_list,size,pos,col,clip_rect,text_begin,text_end,wrap_width,cpu_fine_clip)\",\n      \"cimguiname\": \"ImFont_RenderText\",\n      \"defaults\": {\n        \"cpu_fine_clip\": \"false\",\n        \"wrap_width\": \"0.0f\"\n      },\n      \"funcname\": \"RenderText\",\n      \"location\": \"imgui:3479\",\n      \"ov_cimguiname\": \"ImFont_RenderText\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImDrawList*,float,const ImVec2,ImU32,const ImVec4,const char*,const char*,float,bool)\",\n      \"stname\": \"ImFont\"\n    }\n  ],\n  \"ImFont_SetGlyphVisible\": [\n    {\n      \"args\": \"(ImFont* self,ImWchar c,bool visible)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImFont*\"\n        },\n        {\n          \"name\": \"c\",\n          \"type\": \"ImWchar\"\n        },\n        {\n          \"name\": \"visible\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"argsoriginal\": \"(ImWchar c,bool visible)\",\n      \"call_args\": \"(c,visible)\",\n      \"cimguiname\": \"ImFont_SetGlyphVisible\",\n      \"defaults\": {},\n      \"funcname\": \"SetGlyphVisible\",\n      \"location\": \"imgui:3487\",\n      \"ov_cimguiname\": \"ImFont_SetGlyphVisible\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImWchar,bool)\",\n      \"stname\": \"ImFont\"\n    }\n  ],\n  \"ImFont_destroy\": [\n    {\n      \"args\": \"(ImFont* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImFont*\"\n        }\n      ],\n      \"call_args\": \"(self)\",\n      \"cimguiname\": \"ImFont_destroy\",\n      \"defaults\": {},\n      \"destructor\": true,\n      \"location\": \"imgui:3467\",\n      \"ov_cimguiname\": \"ImFont_destroy\",\n      \"realdestructor\": true,\n      \"ret\": \"void\",\n      \"signature\": \"(ImFont*)\",\n      \"stname\": \"ImFont\"\n    }\n  ],\n  \"ImGuiBoxSelectState_ImGuiBoxSelectState\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImGuiBoxSelectState_ImGuiBoxSelectState\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImGuiBoxSelectState\",\n      \"location\": \"imgui_internal:1761\",\n      \"ov_cimguiname\": \"ImGuiBoxSelectState_ImGuiBoxSelectState\",\n      \"signature\": \"()\",\n      \"stname\": \"ImGuiBoxSelectState\"\n    }\n  ],\n  \"ImGuiBoxSelectState_destroy\": [\n    {\n      \"args\": \"(ImGuiBoxSelectState* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiBoxSelectState*\"\n        }\n      ],\n      \"call_args\": \"(self)\",\n      \"cimguiname\": \"ImGuiBoxSelectState_destroy\",\n      \"defaults\": {},\n      \"destructor\": true,\n      \"location\": \"imgui_internal:1761\",\n      \"ov_cimguiname\": \"ImGuiBoxSelectState_destroy\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiBoxSelectState*)\",\n      \"stname\": \"ImGuiBoxSelectState\"\n    }\n  ],\n  \"ImGuiComboPreviewData_ImGuiComboPreviewData\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImGuiComboPreviewData_ImGuiComboPreviewData\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImGuiComboPreviewData\",\n      \"location\": \"imgui_internal:1059\",\n      \"ov_cimguiname\": \"ImGuiComboPreviewData_ImGuiComboPreviewData\",\n      \"signature\": \"()\",\n      \"stname\": \"ImGuiComboPreviewData\"\n    }\n  ],\n  \"ImGuiComboPreviewData_destroy\": [\n    {\n      \"args\": \"(ImGuiComboPreviewData* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiComboPreviewData*\"\n        }\n      ],\n      \"call_args\": \"(self)\",\n      \"cimguiname\": \"ImGuiComboPreviewData_destroy\",\n      \"defaults\": {},\n      \"destructor\": true,\n      \"location\": \"imgui_internal:1059\",\n      \"ov_cimguiname\": \"ImGuiComboPreviewData_destroy\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiComboPreviewData*)\",\n      \"stname\": \"ImGuiComboPreviewData\"\n    }\n  ],\n  \"ImGuiContextHook_ImGuiContextHook\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImGuiContextHook_ImGuiContextHook\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImGuiContextHook\",\n      \"location\": \"imgui_internal:2033\",\n      \"ov_cimguiname\": \"ImGuiContextHook_ImGuiContextHook\",\n      \"signature\": \"()\",\n      \"stname\": \"ImGuiContextHook\"\n    }\n  ],\n  \"ImGuiContextHook_destroy\": [\n    {\n      \"args\": \"(ImGuiContextHook* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiContextHook*\"\n        }\n      ],\n      \"call_args\": \"(self)\",\n      \"cimguiname\": \"ImGuiContextHook_destroy\",\n      \"defaults\": {},\n      \"destructor\": true,\n      \"location\": \"imgui_internal:2033\",\n      \"ov_cimguiname\": \"ImGuiContextHook_destroy\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiContextHook*)\",\n      \"stname\": \"ImGuiContextHook\"\n    }\n  ],\n  \"ImGuiContext_ImGuiContext\": [\n    {\n      \"args\": \"(ImFontAtlas* shared_font_atlas)\",\n      \"argsT\": [\n        {\n          \"name\": \"shared_font_atlas\",\n          \"type\": \"ImFontAtlas*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImFontAtlas* shared_font_atlas)\",\n      \"call_args\": \"(shared_font_atlas)\",\n      \"cimguiname\": \"ImGuiContext_ImGuiContext\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImGuiContext\",\n      \"location\": \"imgui_internal:2401\",\n      \"ov_cimguiname\": \"ImGuiContext_ImGuiContext\",\n      \"signature\": \"(ImFontAtlas*)\",\n      \"stname\": \"ImGuiContext\"\n    }\n  ],\n  \"ImGuiContext_destroy\": [\n    {\n      \"args\": \"(ImGuiContext* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiContext*\"\n        }\n      ],\n      \"call_args\": \"(self)\",\n      \"cimguiname\": \"ImGuiContext_destroy\",\n      \"defaults\": {},\n      \"destructor\": true,\n      \"location\": \"imgui_internal:2401\",\n      \"ov_cimguiname\": \"ImGuiContext_destroy\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiContext*)\",\n      \"stname\": \"ImGuiContext\"\n    }\n  ],\n  \"ImGuiDataVarInfo_GetVarPtr\": [\n    {\n      \"args\": \"(ImGuiDataVarInfo* self,void* parent)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiDataVarInfo*\"\n        },\n        {\n          \"name\": \"parent\",\n          \"type\": \"void*\"\n        }\n      ],\n      \"argsoriginal\": \"(void* parent)\",\n      \"call_args\": \"(parent)\",\n      \"cimguiname\": \"ImGuiDataVarInfo_GetVarPtr\",\n      \"defaults\": {},\n      \"funcname\": \"GetVarPtr\",\n      \"location\": \"imgui_internal:811\",\n      \"ov_cimguiname\": \"ImGuiDataVarInfo_GetVarPtr\",\n      \"ret\": \"void*\",\n      \"signature\": \"(void*)const\",\n      \"stname\": \"ImGuiDataVarInfo\"\n    }\n  ],\n  \"ImGuiDebugAllocInfo_ImGuiDebugAllocInfo\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImGuiDebugAllocInfo_ImGuiDebugAllocInfo\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImGuiDebugAllocInfo\",\n      \"location\": \"imgui_internal:1974\",\n      \"ov_cimguiname\": \"ImGuiDebugAllocInfo_ImGuiDebugAllocInfo\",\n      \"signature\": \"()\",\n      \"stname\": \"ImGuiDebugAllocInfo\"\n    }\n  ],\n  \"ImGuiDebugAllocInfo_destroy\": [\n    {\n      \"args\": \"(ImGuiDebugAllocInfo* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiDebugAllocInfo*\"\n        }\n      ],\n      \"call_args\": \"(self)\",\n      \"cimguiname\": \"ImGuiDebugAllocInfo_destroy\",\n      \"defaults\": {},\n      \"destructor\": true,\n      \"location\": \"imgui_internal:1974\",\n      \"ov_cimguiname\": \"ImGuiDebugAllocInfo_destroy\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiDebugAllocInfo*)\",\n      \"stname\": \"ImGuiDebugAllocInfo\"\n    }\n  ],\n  \"ImGuiErrorRecoveryState_ImGuiErrorRecoveryState\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImGuiErrorRecoveryState_ImGuiErrorRecoveryState\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImGuiErrorRecoveryState\",\n      \"location\": \"imgui_internal:1290\",\n      \"ov_cimguiname\": \"ImGuiErrorRecoveryState_ImGuiErrorRecoveryState\",\n      \"signature\": \"()\",\n      \"stname\": \"ImGuiErrorRecoveryState\"\n    }\n  ],\n  \"ImGuiErrorRecoveryState_destroy\": [\n    {\n      \"args\": \"(ImGuiErrorRecoveryState* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiErrorRecoveryState*\"\n        }\n      ],\n      \"call_args\": \"(self)\",\n      \"cimguiname\": \"ImGuiErrorRecoveryState_destroy\",\n      \"defaults\": {},\n      \"destructor\": true,\n      \"location\": \"imgui_internal:1290\",\n      \"ov_cimguiname\": \"ImGuiErrorRecoveryState_destroy\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiErrorRecoveryState*)\",\n      \"stname\": \"ImGuiErrorRecoveryState\"\n    }\n  ],\n  \"ImGuiFreeType_GetBuilderForFreeType\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImGuiFreeType_GetBuilderForFreeType\",\n      \"defaults\": {},\n      \"funcname\": \"GetBuilderForFreeType\",\n      \"location\": \"imgui_freetype:46\",\n      \"namespace\": \"ImGuiFreeType\",\n      \"ov_cimguiname\": \"ImGuiFreeType_GetBuilderForFreeType\",\n      \"ret\": \"const ImFontBuilderIO*\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImGuiFreeType_SetAllocatorFunctions\": [\n    {\n      \"args\": \"(void*(*alloc_func)(size_t sz,void* user_data),void(*free_func)(void* ptr,void* user_data),void* user_data)\",\n      \"argsT\": [\n        {\n          \"name\": \"alloc_func\",\n          \"ret\": \"void*\",\n          \"signature\": \"(size_t sz,void* user_data)\",\n          \"type\": \"void*(*)(size_t sz,void* user_data)\"\n        },\n        {\n          \"name\": \"free_func\",\n          \"ret\": \"void\",\n          \"signature\": \"(void* ptr,void* user_data)\",\n          \"type\": \"void(*)(void* ptr,void* user_data)\"\n        },\n        {\n          \"name\": \"user_data\",\n          \"type\": \"void*\"\n        }\n      ],\n      \"argsoriginal\": \"(void*(*alloc_func)(size_t sz,void* user_data),void(*free_func)(void* ptr,void* user_data),void* user_data=nullptr)\",\n      \"call_args\": \"(alloc_func,free_func,user_data)\",\n      \"cimguiname\": \"ImGuiFreeType_SetAllocatorFunctions\",\n      \"defaults\": {\n        \"user_data\": \"nullptr\"\n      },\n      \"funcname\": \"SetAllocatorFunctions\",\n      \"location\": \"imgui_freetype:50\",\n      \"namespace\": \"ImGuiFreeType\",\n      \"ov_cimguiname\": \"ImGuiFreeType_SetAllocatorFunctions\",\n      \"ret\": \"void\",\n      \"signature\": \"(void*(*)(size_t,void*),void(*)(void*,void*),void*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImGuiIDStackTool_ImGuiIDStackTool\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImGuiIDStackTool_ImGuiIDStackTool\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImGuiIDStackTool\",\n      \"location\": \"imgui_internal:2015\",\n      \"ov_cimguiname\": \"ImGuiIDStackTool_ImGuiIDStackTool\",\n      \"signature\": \"()\",\n      \"stname\": \"ImGuiIDStackTool\"\n    }\n  ],\n  \"ImGuiIDStackTool_destroy\": [\n    {\n      \"args\": \"(ImGuiIDStackTool* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiIDStackTool*\"\n        }\n      ],\n      \"call_args\": \"(self)\",\n      \"cimguiname\": \"ImGuiIDStackTool_destroy\",\n      \"defaults\": {},\n      \"destructor\": true,\n      \"location\": \"imgui_internal:2015\",\n      \"ov_cimguiname\": \"ImGuiIDStackTool_destroy\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiIDStackTool*)\",\n      \"stname\": \"ImGuiIDStackTool\"\n    }\n  ],\n  \"ImGuiIO_AddFocusEvent\": [\n    {\n      \"args\": \"(ImGuiIO* self,bool focused)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiIO*\"\n        },\n        {\n          \"name\": \"focused\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"argsoriginal\": \"(bool focused)\",\n      \"call_args\": \"(focused)\",\n      \"cimguiname\": \"ImGuiIO_AddFocusEvent\",\n      \"defaults\": {},\n      \"funcname\": \"AddFocusEvent\",\n      \"location\": \"imgui:2341\",\n      \"ov_cimguiname\": \"ImGuiIO_AddFocusEvent\",\n      \"ret\": \"void\",\n      \"signature\": \"(bool)\",\n      \"stname\": \"ImGuiIO\"\n    }\n  ],\n  \"ImGuiIO_AddInputCharacter\": [\n    {\n      \"args\": \"(ImGuiIO* self,unsigned int c)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiIO*\"\n        },\n        {\n          \"name\": \"c\",\n          \"type\": \"unsigned int\"\n        }\n      ],\n      \"argsoriginal\": \"(unsigned int c)\",\n      \"call_args\": \"(c)\",\n      \"cimguiname\": \"ImGuiIO_AddInputCharacter\",\n      \"defaults\": {},\n      \"funcname\": \"AddInputCharacter\",\n      \"location\": \"imgui:2342\",\n      \"ov_cimguiname\": \"ImGuiIO_AddInputCharacter\",\n      \"ret\": \"void\",\n      \"signature\": \"(unsigned int)\",\n      \"stname\": \"ImGuiIO\"\n    }\n  ],\n  \"ImGuiIO_AddInputCharacterUTF16\": [\n    {\n      \"args\": \"(ImGuiIO* self,ImWchar16 c)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiIO*\"\n        },\n        {\n          \"name\": \"c\",\n          \"type\": \"ImWchar16\"\n        }\n      ],\n      \"argsoriginal\": \"(ImWchar16 c)\",\n      \"call_args\": \"(c)\",\n      \"cimguiname\": \"ImGuiIO_AddInputCharacterUTF16\",\n      \"defaults\": {},\n      \"funcname\": \"AddInputCharacterUTF16\",\n      \"location\": \"imgui:2343\",\n      \"ov_cimguiname\": \"ImGuiIO_AddInputCharacterUTF16\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImWchar16)\",\n      \"stname\": \"ImGuiIO\"\n    }\n  ],\n  \"ImGuiIO_AddInputCharactersUTF8\": [\n    {\n      \"args\": \"(ImGuiIO* self,const char* str)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiIO*\"\n        },\n        {\n          \"name\": \"str\",\n          \"type\": \"const char*\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* str)\",\n      \"call_args\": \"(str)\",\n      \"cimguiname\": \"ImGuiIO_AddInputCharactersUTF8\",\n      \"defaults\": {},\n      \"funcname\": \"AddInputCharactersUTF8\",\n      \"location\": \"imgui:2344\",\n      \"ov_cimguiname\": \"ImGuiIO_AddInputCharactersUTF8\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*)\",\n      \"stname\": \"ImGuiIO\"\n    }\n  ],\n  \"ImGuiIO_AddKeyAnalogEvent\": [\n    {\n      \"args\": \"(ImGuiIO* self,ImGuiKey key,bool down,float v)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiIO*\"\n        },\n        {\n          \"name\": \"key\",\n          \"type\": \"ImGuiKey\"\n        },\n        {\n          \"name\": \"down\",\n          \"type\": \"bool\"\n        },\n        {\n          \"name\": \"v\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiKey key,bool down,float v)\",\n      \"call_args\": \"(key,down,v)\",\n      \"cimguiname\": \"ImGuiIO_AddKeyAnalogEvent\",\n      \"defaults\": {},\n      \"funcname\": \"AddKeyAnalogEvent\",\n      \"location\": \"imgui:2336\",\n      \"ov_cimguiname\": \"ImGuiIO_AddKeyAnalogEvent\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiKey,bool,float)\",\n      \"stname\": \"ImGuiIO\"\n    }\n  ],\n  \"ImGuiIO_AddKeyEvent\": [\n    {\n      \"args\": \"(ImGuiIO* self,ImGuiKey key,bool down)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiIO*\"\n        },\n        {\n          \"name\": \"key\",\n          \"type\": \"ImGuiKey\"\n        },\n        {\n          \"name\": \"down\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiKey key,bool down)\",\n      \"call_args\": \"(key,down)\",\n      \"cimguiname\": \"ImGuiIO_AddKeyEvent\",\n      \"defaults\": {},\n      \"funcname\": \"AddKeyEvent\",\n      \"location\": \"imgui:2335\",\n      \"ov_cimguiname\": \"ImGuiIO_AddKeyEvent\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiKey,bool)\",\n      \"stname\": \"ImGuiIO\"\n    }\n  ],\n  \"ImGuiIO_AddMouseButtonEvent\": [\n    {\n      \"args\": \"(ImGuiIO* self,int button,bool down)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiIO*\"\n        },\n        {\n          \"name\": \"button\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"down\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"argsoriginal\": \"(int button,bool down)\",\n      \"call_args\": \"(button,down)\",\n      \"cimguiname\": \"ImGuiIO_AddMouseButtonEvent\",\n      \"defaults\": {},\n      \"funcname\": \"AddMouseButtonEvent\",\n      \"location\": \"imgui:2338\",\n      \"ov_cimguiname\": \"ImGuiIO_AddMouseButtonEvent\",\n      \"ret\": \"void\",\n      \"signature\": \"(int,bool)\",\n      \"stname\": \"ImGuiIO\"\n    }\n  ],\n  \"ImGuiIO_AddMousePosEvent\": [\n    {\n      \"args\": \"(ImGuiIO* self,float x,float y)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiIO*\"\n        },\n        {\n          \"name\": \"x\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"y\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(float x,float y)\",\n      \"call_args\": \"(x,y)\",\n      \"cimguiname\": \"ImGuiIO_AddMousePosEvent\",\n      \"defaults\": {},\n      \"funcname\": \"AddMousePosEvent\",\n      \"location\": \"imgui:2337\",\n      \"ov_cimguiname\": \"ImGuiIO_AddMousePosEvent\",\n      \"ret\": \"void\",\n      \"signature\": \"(float,float)\",\n      \"stname\": \"ImGuiIO\"\n    }\n  ],\n  \"ImGuiIO_AddMouseSourceEvent\": [\n    {\n      \"args\": \"(ImGuiIO* self,ImGuiMouseSource source)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiIO*\"\n        },\n        {\n          \"name\": \"source\",\n          \"type\": \"ImGuiMouseSource\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiMouseSource source)\",\n      \"call_args\": \"(source)\",\n      \"cimguiname\": \"ImGuiIO_AddMouseSourceEvent\",\n      \"defaults\": {},\n      \"funcname\": \"AddMouseSourceEvent\",\n      \"location\": \"imgui:2340\",\n      \"ov_cimguiname\": \"ImGuiIO_AddMouseSourceEvent\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiMouseSource)\",\n      \"stname\": \"ImGuiIO\"\n    }\n  ],\n  \"ImGuiIO_AddMouseWheelEvent\": [\n    {\n      \"args\": \"(ImGuiIO* self,float wheel_x,float wheel_y)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiIO*\"\n        },\n        {\n          \"name\": \"wheel_x\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"wheel_y\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(float wheel_x,float wheel_y)\",\n      \"call_args\": \"(wheel_x,wheel_y)\",\n      \"cimguiname\": \"ImGuiIO_AddMouseWheelEvent\",\n      \"defaults\": {},\n      \"funcname\": \"AddMouseWheelEvent\",\n      \"location\": \"imgui:2339\",\n      \"ov_cimguiname\": \"ImGuiIO_AddMouseWheelEvent\",\n      \"ret\": \"void\",\n      \"signature\": \"(float,float)\",\n      \"stname\": \"ImGuiIO\"\n    }\n  ],\n  \"ImGuiIO_ClearEventsQueue\": [\n    {\n      \"args\": \"(ImGuiIO* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiIO*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImGuiIO_ClearEventsQueue\",\n      \"defaults\": {},\n      \"funcname\": \"ClearEventsQueue\",\n      \"location\": \"imgui:2348\",\n      \"ov_cimguiname\": \"ImGuiIO_ClearEventsQueue\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"ImGuiIO\"\n    }\n  ],\n  \"ImGuiIO_ClearInputKeys\": [\n    {\n      \"args\": \"(ImGuiIO* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiIO*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImGuiIO_ClearInputKeys\",\n      \"defaults\": {},\n      \"funcname\": \"ClearInputKeys\",\n      \"location\": \"imgui:2349\",\n      \"ov_cimguiname\": \"ImGuiIO_ClearInputKeys\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"ImGuiIO\"\n    }\n  ],\n  \"ImGuiIO_ClearInputMouse\": [\n    {\n      \"args\": \"(ImGuiIO* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiIO*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImGuiIO_ClearInputMouse\",\n      \"defaults\": {},\n      \"funcname\": \"ClearInputMouse\",\n      \"location\": \"imgui:2350\",\n      \"ov_cimguiname\": \"ImGuiIO_ClearInputMouse\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"ImGuiIO\"\n    }\n  ],\n  \"ImGuiIO_ImGuiIO\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImGuiIO_ImGuiIO\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImGuiIO\",\n      \"location\": \"imgui:2437\",\n      \"ov_cimguiname\": \"ImGuiIO_ImGuiIO\",\n      \"signature\": \"()\",\n      \"stname\": \"ImGuiIO\"\n    }\n  ],\n  \"ImGuiIO_SetAppAcceptingEvents\": [\n    {\n      \"args\": \"(ImGuiIO* self,bool accepting_events)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiIO*\"\n        },\n        {\n          \"name\": \"accepting_events\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"argsoriginal\": \"(bool accepting_events)\",\n      \"call_args\": \"(accepting_events)\",\n      \"cimguiname\": \"ImGuiIO_SetAppAcceptingEvents\",\n      \"defaults\": {},\n      \"funcname\": \"SetAppAcceptingEvents\",\n      \"location\": \"imgui:2347\",\n      \"ov_cimguiname\": \"ImGuiIO_SetAppAcceptingEvents\",\n      \"ret\": \"void\",\n      \"signature\": \"(bool)\",\n      \"stname\": \"ImGuiIO\"\n    }\n  ],\n  \"ImGuiIO_SetKeyEventNativeData\": [\n    {\n      \"args\": \"(ImGuiIO* self,ImGuiKey key,int native_keycode,int native_scancode,int native_legacy_index)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiIO*\"\n        },\n        {\n          \"name\": \"key\",\n          \"type\": \"ImGuiKey\"\n        },\n        {\n          \"name\": \"native_keycode\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"native_scancode\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"native_legacy_index\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiKey key,int native_keycode,int native_scancode,int native_legacy_index=-1)\",\n      \"call_args\": \"(key,native_keycode,native_scancode,native_legacy_index)\",\n      \"cimguiname\": \"ImGuiIO_SetKeyEventNativeData\",\n      \"defaults\": {\n        \"native_legacy_index\": \"-1\"\n      },\n      \"funcname\": \"SetKeyEventNativeData\",\n      \"location\": \"imgui:2346\",\n      \"ov_cimguiname\": \"ImGuiIO_SetKeyEventNativeData\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiKey,int,int,int)\",\n      \"stname\": \"ImGuiIO\"\n    }\n  ],\n  \"ImGuiIO_destroy\": [\n    {\n      \"args\": \"(ImGuiIO* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiIO*\"\n        }\n      ],\n      \"call_args\": \"(self)\",\n      \"cimguiname\": \"ImGuiIO_destroy\",\n      \"defaults\": {},\n      \"destructor\": true,\n      \"location\": \"imgui:2437\",\n      \"ov_cimguiname\": \"ImGuiIO_destroy\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiIO*)\",\n      \"stname\": \"ImGuiIO\"\n    }\n  ],\n  \"ImGuiInputEvent_ImGuiInputEvent\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImGuiInputEvent_ImGuiInputEvent\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImGuiInputEvent\",\n      \"location\": \"imgui_internal:1428\",\n      \"ov_cimguiname\": \"ImGuiInputEvent_ImGuiInputEvent\",\n      \"signature\": \"()\",\n      \"stname\": \"ImGuiInputEvent\"\n    }\n  ],\n  \"ImGuiInputEvent_destroy\": [\n    {\n      \"args\": \"(ImGuiInputEvent* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiInputEvent*\"\n        }\n      ],\n      \"call_args\": \"(self)\",\n      \"cimguiname\": \"ImGuiInputEvent_destroy\",\n      \"defaults\": {},\n      \"destructor\": true,\n      \"location\": \"imgui_internal:1428\",\n      \"ov_cimguiname\": \"ImGuiInputEvent_destroy\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiInputEvent*)\",\n      \"stname\": \"ImGuiInputEvent\"\n    }\n  ],\n  \"ImGuiInputTextCallbackData_ClearSelection\": [\n    {\n      \"args\": \"(ImGuiInputTextCallbackData* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiInputTextCallbackData*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImGuiInputTextCallbackData_ClearSelection\",\n      \"defaults\": {},\n      \"funcname\": \"ClearSelection\",\n      \"location\": \"imgui:2481\",\n      \"ov_cimguiname\": \"ImGuiInputTextCallbackData_ClearSelection\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"ImGuiInputTextCallbackData\"\n    }\n  ],\n  \"ImGuiInputTextCallbackData_DeleteChars\": [\n    {\n      \"args\": \"(ImGuiInputTextCallbackData* self,int pos,int bytes_count)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiInputTextCallbackData*\"\n        },\n        {\n          \"name\": \"pos\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"bytes_count\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(int pos,int bytes_count)\",\n      \"call_args\": \"(pos,bytes_count)\",\n      \"cimguiname\": \"ImGuiInputTextCallbackData_DeleteChars\",\n      \"defaults\": {},\n      \"funcname\": \"DeleteChars\",\n      \"location\": \"imgui:2478\",\n      \"ov_cimguiname\": \"ImGuiInputTextCallbackData_DeleteChars\",\n      \"ret\": \"void\",\n      \"signature\": \"(int,int)\",\n      \"stname\": \"ImGuiInputTextCallbackData\"\n    }\n  ],\n  \"ImGuiInputTextCallbackData_HasSelection\": [\n    {\n      \"args\": \"(ImGuiInputTextCallbackData* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiInputTextCallbackData*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImGuiInputTextCallbackData_HasSelection\",\n      \"defaults\": {},\n      \"funcname\": \"HasSelection\",\n      \"location\": \"imgui:2482\",\n      \"ov_cimguiname\": \"ImGuiInputTextCallbackData_HasSelection\",\n      \"ret\": \"bool\",\n      \"signature\": \"()const\",\n      \"stname\": \"ImGuiInputTextCallbackData\"\n    }\n  ],\n  \"ImGuiInputTextCallbackData_ImGuiInputTextCallbackData\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImGuiInputTextCallbackData_ImGuiInputTextCallbackData\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImGuiInputTextCallbackData\",\n      \"location\": \"imgui:2477\",\n      \"ov_cimguiname\": \"ImGuiInputTextCallbackData_ImGuiInputTextCallbackData\",\n      \"signature\": \"()\",\n      \"stname\": \"ImGuiInputTextCallbackData\"\n    }\n  ],\n  \"ImGuiInputTextCallbackData_InsertChars\": [\n    {\n      \"args\": \"(ImGuiInputTextCallbackData* self,int pos,const char* text,const char* text_end)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiInputTextCallbackData*\"\n        },\n        {\n          \"name\": \"pos\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"text\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"text_end\",\n          \"type\": \"const char*\"\n        }\n      ],\n      \"argsoriginal\": \"(int pos,const char* text,const char* text_end=((void*)0))\",\n      \"call_args\": \"(pos,text,text_end)\",\n      \"cimguiname\": \"ImGuiInputTextCallbackData_InsertChars\",\n      \"defaults\": {\n        \"text_end\": \"NULL\"\n      },\n      \"funcname\": \"InsertChars\",\n      \"location\": \"imgui:2479\",\n      \"ov_cimguiname\": \"ImGuiInputTextCallbackData_InsertChars\",\n      \"ret\": \"void\",\n      \"signature\": \"(int,const char*,const char*)\",\n      \"stname\": \"ImGuiInputTextCallbackData\"\n    }\n  ],\n  \"ImGuiInputTextCallbackData_SelectAll\": [\n    {\n      \"args\": \"(ImGuiInputTextCallbackData* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiInputTextCallbackData*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImGuiInputTextCallbackData_SelectAll\",\n      \"defaults\": {},\n      \"funcname\": \"SelectAll\",\n      \"location\": \"imgui:2480\",\n      \"ov_cimguiname\": \"ImGuiInputTextCallbackData_SelectAll\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"ImGuiInputTextCallbackData\"\n    }\n  ],\n  \"ImGuiInputTextCallbackData_destroy\": [\n    {\n      \"args\": \"(ImGuiInputTextCallbackData* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiInputTextCallbackData*\"\n        }\n      ],\n      \"call_args\": \"(self)\",\n      \"cimguiname\": \"ImGuiInputTextCallbackData_destroy\",\n      \"defaults\": {},\n      \"destructor\": true,\n      \"location\": \"imgui:2477\",\n      \"ov_cimguiname\": \"ImGuiInputTextCallbackData_destroy\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiInputTextCallbackData*)\",\n      \"stname\": \"ImGuiInputTextCallbackData\"\n    }\n  ],\n  \"ImGuiInputTextDeactivatedState_ClearFreeMemory\": [\n    {\n      \"args\": \"(ImGuiInputTextDeactivatedState* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiInputTextDeactivatedState*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImGuiInputTextDeactivatedState_ClearFreeMemory\",\n      \"defaults\": {},\n      \"funcname\": \"ClearFreeMemory\",\n      \"location\": \"imgui_internal:1105\",\n      \"ov_cimguiname\": \"ImGuiInputTextDeactivatedState_ClearFreeMemory\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"ImGuiInputTextDeactivatedState\"\n    }\n  ],\n  \"ImGuiInputTextDeactivatedState_ImGuiInputTextDeactivatedState\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImGuiInputTextDeactivatedState_ImGuiInputTextDeactivatedState\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImGuiInputTextDeactivatedState\",\n      \"location\": \"imgui_internal:1104\",\n      \"ov_cimguiname\": \"ImGuiInputTextDeactivatedState_ImGuiInputTextDeactivatedState\",\n      \"signature\": \"()\",\n      \"stname\": \"ImGuiInputTextDeactivatedState\"\n    }\n  ],\n  \"ImGuiInputTextDeactivatedState_destroy\": [\n    {\n      \"args\": \"(ImGuiInputTextDeactivatedState* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiInputTextDeactivatedState*\"\n        }\n      ],\n      \"call_args\": \"(self)\",\n      \"cimguiname\": \"ImGuiInputTextDeactivatedState_destroy\",\n      \"defaults\": {},\n      \"destructor\": true,\n      \"location\": \"imgui_internal:1104\",\n      \"ov_cimguiname\": \"ImGuiInputTextDeactivatedState_destroy\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiInputTextDeactivatedState*)\",\n      \"stname\": \"ImGuiInputTextDeactivatedState\"\n    }\n  ],\n  \"ImGuiInputTextState_ClearFreeMemory\": [\n    {\n      \"args\": \"(ImGuiInputTextState* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiInputTextState*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImGuiInputTextState_ClearFreeMemory\",\n      \"defaults\": {},\n      \"funcname\": \"ClearFreeMemory\",\n      \"location\": \"imgui_internal:1145\",\n      \"ov_cimguiname\": \"ImGuiInputTextState_ClearFreeMemory\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"ImGuiInputTextState\"\n    }\n  ],\n  \"ImGuiInputTextState_ClearSelection\": [\n    {\n      \"args\": \"(ImGuiInputTextState* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiInputTextState*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImGuiInputTextState_ClearSelection\",\n      \"defaults\": {},\n      \"funcname\": \"ClearSelection\",\n      \"location\": \"imgui_internal:1153\",\n      \"ov_cimguiname\": \"ImGuiInputTextState_ClearSelection\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"ImGuiInputTextState\"\n    }\n  ],\n  \"ImGuiInputTextState_ClearText\": [\n    {\n      \"args\": \"(ImGuiInputTextState* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiInputTextState*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImGuiInputTextState_ClearText\",\n      \"defaults\": {},\n      \"funcname\": \"ClearText\",\n      \"location\": \"imgui_internal:1144\",\n      \"ov_cimguiname\": \"ImGuiInputTextState_ClearText\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"ImGuiInputTextState\"\n    }\n  ],\n  \"ImGuiInputTextState_CursorAnimReset\": [\n    {\n      \"args\": \"(ImGuiInputTextState* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiInputTextState*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImGuiInputTextState_CursorAnimReset\",\n      \"defaults\": {},\n      \"funcname\": \"CursorAnimReset\",\n      \"location\": \"imgui_internal:1150\",\n      \"ov_cimguiname\": \"ImGuiInputTextState_CursorAnimReset\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"ImGuiInputTextState\"\n    }\n  ],\n  \"ImGuiInputTextState_CursorClamp\": [\n    {\n      \"args\": \"(ImGuiInputTextState* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiInputTextState*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImGuiInputTextState_CursorClamp\",\n      \"defaults\": {},\n      \"funcname\": \"CursorClamp\",\n      \"location\": \"imgui_internal:1151\",\n      \"ov_cimguiname\": \"ImGuiInputTextState_CursorClamp\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"ImGuiInputTextState\"\n    }\n  ],\n  \"ImGuiInputTextState_GetCursorPos\": [\n    {\n      \"args\": \"(ImGuiInputTextState* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiInputTextState*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImGuiInputTextState_GetCursorPos\",\n      \"defaults\": {},\n      \"funcname\": \"GetCursorPos\",\n      \"location\": \"imgui_internal:1154\",\n      \"ov_cimguiname\": \"ImGuiInputTextState_GetCursorPos\",\n      \"ret\": \"int\",\n      \"signature\": \"()const\",\n      \"stname\": \"ImGuiInputTextState\"\n    }\n  ],\n  \"ImGuiInputTextState_GetSelectionEnd\": [\n    {\n      \"args\": \"(ImGuiInputTextState* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiInputTextState*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImGuiInputTextState_GetSelectionEnd\",\n      \"defaults\": {},\n      \"funcname\": \"GetSelectionEnd\",\n      \"location\": \"imgui_internal:1156\",\n      \"ov_cimguiname\": \"ImGuiInputTextState_GetSelectionEnd\",\n      \"ret\": \"int\",\n      \"signature\": \"()const\",\n      \"stname\": \"ImGuiInputTextState\"\n    }\n  ],\n  \"ImGuiInputTextState_GetSelectionStart\": [\n    {\n      \"args\": \"(ImGuiInputTextState* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiInputTextState*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImGuiInputTextState_GetSelectionStart\",\n      \"defaults\": {},\n      \"funcname\": \"GetSelectionStart\",\n      \"location\": \"imgui_internal:1155\",\n      \"ov_cimguiname\": \"ImGuiInputTextState_GetSelectionStart\",\n      \"ret\": \"int\",\n      \"signature\": \"()const\",\n      \"stname\": \"ImGuiInputTextState\"\n    }\n  ],\n  \"ImGuiInputTextState_HasSelection\": [\n    {\n      \"args\": \"(ImGuiInputTextState* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiInputTextState*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImGuiInputTextState_HasSelection\",\n      \"defaults\": {},\n      \"funcname\": \"HasSelection\",\n      \"location\": \"imgui_internal:1152\",\n      \"ov_cimguiname\": \"ImGuiInputTextState_HasSelection\",\n      \"ret\": \"bool\",\n      \"signature\": \"()const\",\n      \"stname\": \"ImGuiInputTextState\"\n    }\n  ],\n  \"ImGuiInputTextState_ImGuiInputTextState\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImGuiInputTextState_ImGuiInputTextState\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImGuiInputTextState\",\n      \"location\": \"imgui_internal:1142\",\n      \"ov_cimguiname\": \"ImGuiInputTextState_ImGuiInputTextState\",\n      \"signature\": \"()\",\n      \"stname\": \"ImGuiInputTextState\"\n    }\n  ],\n  \"ImGuiInputTextState_OnCharPressed\": [\n    {\n      \"args\": \"(ImGuiInputTextState* self,unsigned int c)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiInputTextState*\"\n        },\n        {\n          \"name\": \"c\",\n          \"type\": \"unsigned int\"\n        }\n      ],\n      \"argsoriginal\": \"(unsigned int c)\",\n      \"call_args\": \"(c)\",\n      \"cimguiname\": \"ImGuiInputTextState_OnCharPressed\",\n      \"defaults\": {},\n      \"funcname\": \"OnCharPressed\",\n      \"location\": \"imgui_internal:1147\",\n      \"ov_cimguiname\": \"ImGuiInputTextState_OnCharPressed\",\n      \"ret\": \"void\",\n      \"signature\": \"(unsigned int)\",\n      \"stname\": \"ImGuiInputTextState\"\n    }\n  ],\n  \"ImGuiInputTextState_OnKeyPressed\": [\n    {\n      \"args\": \"(ImGuiInputTextState* self,int key)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiInputTextState*\"\n        },\n        {\n          \"name\": \"key\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(int key)\",\n      \"call_args\": \"(key)\",\n      \"cimguiname\": \"ImGuiInputTextState_OnKeyPressed\",\n      \"defaults\": {},\n      \"funcname\": \"OnKeyPressed\",\n      \"location\": \"imgui_internal:1146\",\n      \"ov_cimguiname\": \"ImGuiInputTextState_OnKeyPressed\",\n      \"ret\": \"void\",\n      \"signature\": \"(int)\",\n      \"stname\": \"ImGuiInputTextState\"\n    }\n  ],\n  \"ImGuiInputTextState_ReloadUserBufAndKeepSelection\": [\n    {\n      \"args\": \"(ImGuiInputTextState* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiInputTextState*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImGuiInputTextState_ReloadUserBufAndKeepSelection\",\n      \"defaults\": {},\n      \"funcname\": \"ReloadUserBufAndKeepSelection\",\n      \"location\": \"imgui_internal:1165\",\n      \"ov_cimguiname\": \"ImGuiInputTextState_ReloadUserBufAndKeepSelection\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"ImGuiInputTextState\"\n    }\n  ],\n  \"ImGuiInputTextState_ReloadUserBufAndMoveToEnd\": [\n    {\n      \"args\": \"(ImGuiInputTextState* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiInputTextState*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImGuiInputTextState_ReloadUserBufAndMoveToEnd\",\n      \"defaults\": {},\n      \"funcname\": \"ReloadUserBufAndMoveToEnd\",\n      \"location\": \"imgui_internal:1166\",\n      \"ov_cimguiname\": \"ImGuiInputTextState_ReloadUserBufAndMoveToEnd\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"ImGuiInputTextState\"\n    }\n  ],\n  \"ImGuiInputTextState_ReloadUserBufAndSelectAll\": [\n    {\n      \"args\": \"(ImGuiInputTextState* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiInputTextState*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImGuiInputTextState_ReloadUserBufAndSelectAll\",\n      \"defaults\": {},\n      \"funcname\": \"ReloadUserBufAndSelectAll\",\n      \"location\": \"imgui_internal:1164\",\n      \"ov_cimguiname\": \"ImGuiInputTextState_ReloadUserBufAndSelectAll\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"ImGuiInputTextState\"\n    }\n  ],\n  \"ImGuiInputTextState_SelectAll\": [\n    {\n      \"args\": \"(ImGuiInputTextState* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiInputTextState*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImGuiInputTextState_SelectAll\",\n      \"defaults\": {},\n      \"funcname\": \"SelectAll\",\n      \"location\": \"imgui_internal:1157\",\n      \"ov_cimguiname\": \"ImGuiInputTextState_SelectAll\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"ImGuiInputTextState\"\n    }\n  ],\n  \"ImGuiInputTextState_destroy\": [\n    {\n      \"args\": \"(ImGuiInputTextState* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiInputTextState*\"\n        }\n      ],\n      \"call_args\": \"(self)\",\n      \"cimguiname\": \"ImGuiInputTextState_destroy\",\n      \"defaults\": {},\n      \"destructor\": true,\n      \"location\": \"imgui_internal:1143\",\n      \"ov_cimguiname\": \"ImGuiInputTextState_destroy\",\n      \"realdestructor\": true,\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiInputTextState*)\",\n      \"stname\": \"ImGuiInputTextState\"\n    }\n  ],\n  \"ImGuiKeyOwnerData_ImGuiKeyOwnerData\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImGuiKeyOwnerData_ImGuiKeyOwnerData\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImGuiKeyOwnerData\",\n      \"location\": \"imgui_internal:1472\",\n      \"ov_cimguiname\": \"ImGuiKeyOwnerData_ImGuiKeyOwnerData\",\n      \"signature\": \"()\",\n      \"stname\": \"ImGuiKeyOwnerData\"\n    }\n  ],\n  \"ImGuiKeyOwnerData_destroy\": [\n    {\n      \"args\": \"(ImGuiKeyOwnerData* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiKeyOwnerData*\"\n        }\n      ],\n      \"call_args\": \"(self)\",\n      \"cimguiname\": \"ImGuiKeyOwnerData_destroy\",\n      \"defaults\": {},\n      \"destructor\": true,\n      \"location\": \"imgui_internal:1472\",\n      \"ov_cimguiname\": \"ImGuiKeyOwnerData_destroy\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiKeyOwnerData*)\",\n      \"stname\": \"ImGuiKeyOwnerData\"\n    }\n  ],\n  \"ImGuiKeyRoutingData_ImGuiKeyRoutingData\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImGuiKeyRoutingData_ImGuiKeyRoutingData\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImGuiKeyRoutingData\",\n      \"location\": \"imgui_internal:1448\",\n      \"ov_cimguiname\": \"ImGuiKeyRoutingData_ImGuiKeyRoutingData\",\n      \"signature\": \"()\",\n      \"stname\": \"ImGuiKeyRoutingData\"\n    }\n  ],\n  \"ImGuiKeyRoutingData_destroy\": [\n    {\n      \"args\": \"(ImGuiKeyRoutingData* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiKeyRoutingData*\"\n        }\n      ],\n      \"call_args\": \"(self)\",\n      \"cimguiname\": \"ImGuiKeyRoutingData_destroy\",\n      \"defaults\": {},\n      \"destructor\": true,\n      \"location\": \"imgui_internal:1448\",\n      \"ov_cimguiname\": \"ImGuiKeyRoutingData_destroy\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiKeyRoutingData*)\",\n      \"stname\": \"ImGuiKeyRoutingData\"\n    }\n  ],\n  \"ImGuiKeyRoutingTable_Clear\": [\n    {\n      \"args\": \"(ImGuiKeyRoutingTable* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiKeyRoutingTable*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImGuiKeyRoutingTable_Clear\",\n      \"defaults\": {},\n      \"funcname\": \"Clear\",\n      \"location\": \"imgui_internal:1460\",\n      \"ov_cimguiname\": \"ImGuiKeyRoutingTable_Clear\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"ImGuiKeyRoutingTable\"\n    }\n  ],\n  \"ImGuiKeyRoutingTable_ImGuiKeyRoutingTable\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImGuiKeyRoutingTable_ImGuiKeyRoutingTable\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImGuiKeyRoutingTable\",\n      \"location\": \"imgui_internal:1459\",\n      \"ov_cimguiname\": \"ImGuiKeyRoutingTable_ImGuiKeyRoutingTable\",\n      \"signature\": \"()\",\n      \"stname\": \"ImGuiKeyRoutingTable\"\n    }\n  ],\n  \"ImGuiKeyRoutingTable_destroy\": [\n    {\n      \"args\": \"(ImGuiKeyRoutingTable* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiKeyRoutingTable*\"\n        }\n      ],\n      \"call_args\": \"(self)\",\n      \"cimguiname\": \"ImGuiKeyRoutingTable_destroy\",\n      \"defaults\": {},\n      \"destructor\": true,\n      \"location\": \"imgui_internal:1459\",\n      \"ov_cimguiname\": \"ImGuiKeyRoutingTable_destroy\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiKeyRoutingTable*)\",\n      \"stname\": \"ImGuiKeyRoutingTable\"\n    }\n  ],\n  \"ImGuiLastItemData_ImGuiLastItemData\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImGuiLastItemData_ImGuiLastItemData\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImGuiLastItemData\",\n      \"location\": \"imgui_internal:1260\",\n      \"ov_cimguiname\": \"ImGuiLastItemData_ImGuiLastItemData\",\n      \"signature\": \"()\",\n      \"stname\": \"ImGuiLastItemData\"\n    }\n  ],\n  \"ImGuiLastItemData_destroy\": [\n    {\n      \"args\": \"(ImGuiLastItemData* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiLastItemData*\"\n        }\n      ],\n      \"call_args\": \"(self)\",\n      \"cimguiname\": \"ImGuiLastItemData_destroy\",\n      \"defaults\": {},\n      \"destructor\": true,\n      \"location\": \"imgui_internal:1260\",\n      \"ov_cimguiname\": \"ImGuiLastItemData_destroy\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiLastItemData*)\",\n      \"stname\": \"ImGuiLastItemData\"\n    }\n  ],\n  \"ImGuiListClipperData_ImGuiListClipperData\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImGuiListClipperData_ImGuiListClipperData\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImGuiListClipperData\",\n      \"location\": \"imgui_internal:1543\",\n      \"ov_cimguiname\": \"ImGuiListClipperData_ImGuiListClipperData\",\n      \"signature\": \"()\",\n      \"stname\": \"ImGuiListClipperData\"\n    }\n  ],\n  \"ImGuiListClipperData_Reset\": [\n    {\n      \"args\": \"(ImGuiListClipperData* self,ImGuiListClipper* clipper)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiListClipperData*\"\n        },\n        {\n          \"name\": \"clipper\",\n          \"type\": \"ImGuiListClipper*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiListClipper* clipper)\",\n      \"call_args\": \"(clipper)\",\n      \"cimguiname\": \"ImGuiListClipperData_Reset\",\n      \"defaults\": {},\n      \"funcname\": \"Reset\",\n      \"location\": \"imgui_internal:1544\",\n      \"ov_cimguiname\": \"ImGuiListClipperData_Reset\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiListClipper*)\",\n      \"stname\": \"ImGuiListClipperData\"\n    }\n  ],\n  \"ImGuiListClipperData_destroy\": [\n    {\n      \"args\": \"(ImGuiListClipperData* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiListClipperData*\"\n        }\n      ],\n      \"call_args\": \"(self)\",\n      \"cimguiname\": \"ImGuiListClipperData_destroy\",\n      \"defaults\": {},\n      \"destructor\": true,\n      \"location\": \"imgui_internal:1543\",\n      \"ov_cimguiname\": \"ImGuiListClipperData_destroy\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiListClipperData*)\",\n      \"stname\": \"ImGuiListClipperData\"\n    }\n  ],\n  \"ImGuiListClipperRange_FromIndices\": [\n    {\n      \"args\": \"(int min,int max)\",\n      \"argsT\": [\n        {\n          \"name\": \"min\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"max\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(int min,int max)\",\n      \"call_args\": \"(min,max)\",\n      \"cimguiname\": \"ImGuiListClipperRange_FromIndices\",\n      \"defaults\": {},\n      \"funcname\": \"FromIndices\",\n      \"is_static_function\": true,\n      \"location\": \"imgui_internal:1530\",\n      \"ov_cimguiname\": \"ImGuiListClipperRange_FromIndices\",\n      \"ret\": \"ImGuiListClipperRange\",\n      \"signature\": \"(int,int)\",\n      \"stname\": \"ImGuiListClipperRange\"\n    }\n  ],\n  \"ImGuiListClipperRange_FromPositions\": [\n    {\n      \"args\": \"(float y1,float y2,int off_min,int off_max)\",\n      \"argsT\": [\n        {\n          \"name\": \"y1\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"y2\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"off_min\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"off_max\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(float y1,float y2,int off_min,int off_max)\",\n      \"call_args\": \"(y1,y2,off_min,off_max)\",\n      \"cimguiname\": \"ImGuiListClipperRange_FromPositions\",\n      \"defaults\": {},\n      \"funcname\": \"FromPositions\",\n      \"is_static_function\": true,\n      \"location\": \"imgui_internal:1531\",\n      \"ov_cimguiname\": \"ImGuiListClipperRange_FromPositions\",\n      \"ret\": \"ImGuiListClipperRange\",\n      \"signature\": \"(float,float,int,int)\",\n      \"stname\": \"ImGuiListClipperRange\"\n    }\n  ],\n  \"ImGuiListClipper_Begin\": [\n    {\n      \"args\": \"(ImGuiListClipper* self,int items_count,float items_height)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiListClipper*\"\n        },\n        {\n          \"name\": \"items_count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"items_height\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(int items_count,float items_height=-1.0f)\",\n      \"call_args\": \"(items_count,items_height)\",\n      \"cimguiname\": \"ImGuiListClipper_Begin\",\n      \"defaults\": {\n        \"items_height\": \"-1.0f\"\n      },\n      \"funcname\": \"Begin\",\n      \"location\": \"imgui:2675\",\n      \"ov_cimguiname\": \"ImGuiListClipper_Begin\",\n      \"ret\": \"void\",\n      \"signature\": \"(int,float)\",\n      \"stname\": \"ImGuiListClipper\"\n    }\n  ],\n  \"ImGuiListClipper_End\": [\n    {\n      \"args\": \"(ImGuiListClipper* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiListClipper*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImGuiListClipper_End\",\n      \"defaults\": {},\n      \"funcname\": \"End\",\n      \"location\": \"imgui:2676\",\n      \"ov_cimguiname\": \"ImGuiListClipper_End\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"ImGuiListClipper\"\n    }\n  ],\n  \"ImGuiListClipper_ImGuiListClipper\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImGuiListClipper_ImGuiListClipper\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImGuiListClipper\",\n      \"location\": \"imgui:2673\",\n      \"ov_cimguiname\": \"ImGuiListClipper_ImGuiListClipper\",\n      \"signature\": \"()\",\n      \"stname\": \"ImGuiListClipper\"\n    }\n  ],\n  \"ImGuiListClipper_IncludeItemByIndex\": [\n    {\n      \"args\": \"(ImGuiListClipper* self,int item_index)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiListClipper*\"\n        },\n        {\n          \"name\": \"item_index\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(int item_index)\",\n      \"call_args\": \"(item_index)\",\n      \"cimguiname\": \"ImGuiListClipper_IncludeItemByIndex\",\n      \"defaults\": {},\n      \"funcname\": \"IncludeItemByIndex\",\n      \"location\": \"imgui:2681\",\n      \"ov_cimguiname\": \"ImGuiListClipper_IncludeItemByIndex\",\n      \"ret\": \"void\",\n      \"signature\": \"(int)\",\n      \"stname\": \"ImGuiListClipper\"\n    }\n  ],\n  \"ImGuiListClipper_IncludeItemsByIndex\": [\n    {\n      \"args\": \"(ImGuiListClipper* self,int item_begin,int item_end)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiListClipper*\"\n        },\n        {\n          \"name\": \"item_begin\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"item_end\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(int item_begin,int item_end)\",\n      \"call_args\": \"(item_begin,item_end)\",\n      \"cimguiname\": \"ImGuiListClipper_IncludeItemsByIndex\",\n      \"defaults\": {},\n      \"funcname\": \"IncludeItemsByIndex\",\n      \"location\": \"imgui:2682\",\n      \"ov_cimguiname\": \"ImGuiListClipper_IncludeItemsByIndex\",\n      \"ret\": \"void\",\n      \"signature\": \"(int,int)\",\n      \"stname\": \"ImGuiListClipper\"\n    }\n  ],\n  \"ImGuiListClipper_SeekCursorForItem\": [\n    {\n      \"args\": \"(ImGuiListClipper* self,int item_index)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiListClipper*\"\n        },\n        {\n          \"name\": \"item_index\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(int item_index)\",\n      \"call_args\": \"(item_index)\",\n      \"cimguiname\": \"ImGuiListClipper_SeekCursorForItem\",\n      \"defaults\": {},\n      \"funcname\": \"SeekCursorForItem\",\n      \"location\": \"imgui:2687\",\n      \"ov_cimguiname\": \"ImGuiListClipper_SeekCursorForItem\",\n      \"ret\": \"void\",\n      \"signature\": \"(int)\",\n      \"stname\": \"ImGuiListClipper\"\n    }\n  ],\n  \"ImGuiListClipper_Step\": [\n    {\n      \"args\": \"(ImGuiListClipper* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiListClipper*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImGuiListClipper_Step\",\n      \"defaults\": {},\n      \"funcname\": \"Step\",\n      \"location\": \"imgui:2677\",\n      \"ov_cimguiname\": \"ImGuiListClipper_Step\",\n      \"ret\": \"bool\",\n      \"signature\": \"()\",\n      \"stname\": \"ImGuiListClipper\"\n    }\n  ],\n  \"ImGuiListClipper_destroy\": [\n    {\n      \"args\": \"(ImGuiListClipper* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiListClipper*\"\n        }\n      ],\n      \"call_args\": \"(self)\",\n      \"cimguiname\": \"ImGuiListClipper_destroy\",\n      \"defaults\": {},\n      \"destructor\": true,\n      \"location\": \"imgui:2674\",\n      \"ov_cimguiname\": \"ImGuiListClipper_destroy\",\n      \"realdestructor\": true,\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiListClipper*)\",\n      \"stname\": \"ImGuiListClipper\"\n    }\n  ],\n  \"ImGuiMenuColumns_CalcNextTotalWidth\": [\n    {\n      \"args\": \"(ImGuiMenuColumns* self,bool update_offsets)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiMenuColumns*\"\n        },\n        {\n          \"name\": \"update_offsets\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"argsoriginal\": \"(bool update_offsets)\",\n      \"call_args\": \"(update_offsets)\",\n      \"cimguiname\": \"ImGuiMenuColumns_CalcNextTotalWidth\",\n      \"defaults\": {},\n      \"funcname\": \"CalcNextTotalWidth\",\n      \"location\": \"imgui_internal:1095\",\n      \"ov_cimguiname\": \"ImGuiMenuColumns_CalcNextTotalWidth\",\n      \"ret\": \"void\",\n      \"signature\": \"(bool)\",\n      \"stname\": \"ImGuiMenuColumns\"\n    }\n  ],\n  \"ImGuiMenuColumns_DeclColumns\": [\n    {\n      \"args\": \"(ImGuiMenuColumns* self,float w_icon,float w_label,float w_shortcut,float w_mark)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiMenuColumns*\"\n        },\n        {\n          \"name\": \"w_icon\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"w_label\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"w_shortcut\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"w_mark\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(float w_icon,float w_label,float w_shortcut,float w_mark)\",\n      \"call_args\": \"(w_icon,w_label,w_shortcut,w_mark)\",\n      \"cimguiname\": \"ImGuiMenuColumns_DeclColumns\",\n      \"defaults\": {},\n      \"funcname\": \"DeclColumns\",\n      \"location\": \"imgui_internal:1094\",\n      \"ov_cimguiname\": \"ImGuiMenuColumns_DeclColumns\",\n      \"ret\": \"float\",\n      \"signature\": \"(float,float,float,float)\",\n      \"stname\": \"ImGuiMenuColumns\"\n    }\n  ],\n  \"ImGuiMenuColumns_ImGuiMenuColumns\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImGuiMenuColumns_ImGuiMenuColumns\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImGuiMenuColumns\",\n      \"location\": \"imgui_internal:1092\",\n      \"ov_cimguiname\": \"ImGuiMenuColumns_ImGuiMenuColumns\",\n      \"signature\": \"()\",\n      \"stname\": \"ImGuiMenuColumns\"\n    }\n  ],\n  \"ImGuiMenuColumns_Update\": [\n    {\n      \"args\": \"(ImGuiMenuColumns* self,float spacing,bool window_reappearing)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiMenuColumns*\"\n        },\n        {\n          \"name\": \"spacing\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"window_reappearing\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"argsoriginal\": \"(float spacing,bool window_reappearing)\",\n      \"call_args\": \"(spacing,window_reappearing)\",\n      \"cimguiname\": \"ImGuiMenuColumns_Update\",\n      \"defaults\": {},\n      \"funcname\": \"Update\",\n      \"location\": \"imgui_internal:1093\",\n      \"ov_cimguiname\": \"ImGuiMenuColumns_Update\",\n      \"ret\": \"void\",\n      \"signature\": \"(float,bool)\",\n      \"stname\": \"ImGuiMenuColumns\"\n    }\n  ],\n  \"ImGuiMenuColumns_destroy\": [\n    {\n      \"args\": \"(ImGuiMenuColumns* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiMenuColumns*\"\n        }\n      ],\n      \"call_args\": \"(self)\",\n      \"cimguiname\": \"ImGuiMenuColumns_destroy\",\n      \"defaults\": {},\n      \"destructor\": true,\n      \"location\": \"imgui_internal:1092\",\n      \"ov_cimguiname\": \"ImGuiMenuColumns_destroy\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiMenuColumns*)\",\n      \"stname\": \"ImGuiMenuColumns\"\n    }\n  ],\n  \"ImGuiMultiSelectState_ImGuiMultiSelectState\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImGuiMultiSelectState_ImGuiMultiSelectState\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImGuiMultiSelectState\",\n      \"location\": \"imgui_internal:1808\",\n      \"ov_cimguiname\": \"ImGuiMultiSelectState_ImGuiMultiSelectState\",\n      \"signature\": \"()\",\n      \"stname\": \"ImGuiMultiSelectState\"\n    }\n  ],\n  \"ImGuiMultiSelectState_destroy\": [\n    {\n      \"args\": \"(ImGuiMultiSelectState* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiMultiSelectState*\"\n        }\n      ],\n      \"call_args\": \"(self)\",\n      \"cimguiname\": \"ImGuiMultiSelectState_destroy\",\n      \"defaults\": {},\n      \"destructor\": true,\n      \"location\": \"imgui_internal:1808\",\n      \"ov_cimguiname\": \"ImGuiMultiSelectState_destroy\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiMultiSelectState*)\",\n      \"stname\": \"ImGuiMultiSelectState\"\n    }\n  ],\n  \"ImGuiMultiSelectTempData_Clear\": [\n    {\n      \"args\": \"(ImGuiMultiSelectTempData* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiMultiSelectTempData*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImGuiMultiSelectTempData_Clear\",\n      \"defaults\": {},\n      \"funcname\": \"Clear\",\n      \"location\": \"imgui_internal:1792\",\n      \"ov_cimguiname\": \"ImGuiMultiSelectTempData_Clear\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"ImGuiMultiSelectTempData\"\n    }\n  ],\n  \"ImGuiMultiSelectTempData_ClearIO\": [\n    {\n      \"args\": \"(ImGuiMultiSelectTempData* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiMultiSelectTempData*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImGuiMultiSelectTempData_ClearIO\",\n      \"defaults\": {},\n      \"funcname\": \"ClearIO\",\n      \"location\": \"imgui_internal:1793\",\n      \"ov_cimguiname\": \"ImGuiMultiSelectTempData_ClearIO\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"ImGuiMultiSelectTempData\"\n    }\n  ],\n  \"ImGuiMultiSelectTempData_ImGuiMultiSelectTempData\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImGuiMultiSelectTempData_ImGuiMultiSelectTempData\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImGuiMultiSelectTempData\",\n      \"location\": \"imgui_internal:1791\",\n      \"ov_cimguiname\": \"ImGuiMultiSelectTempData_ImGuiMultiSelectTempData\",\n      \"signature\": \"()\",\n      \"stname\": \"ImGuiMultiSelectTempData\"\n    }\n  ],\n  \"ImGuiMultiSelectTempData_destroy\": [\n    {\n      \"args\": \"(ImGuiMultiSelectTempData* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiMultiSelectTempData*\"\n        }\n      ],\n      \"call_args\": \"(self)\",\n      \"cimguiname\": \"ImGuiMultiSelectTempData_destroy\",\n      \"defaults\": {},\n      \"destructor\": true,\n      \"location\": \"imgui_internal:1791\",\n      \"ov_cimguiname\": \"ImGuiMultiSelectTempData_destroy\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiMultiSelectTempData*)\",\n      \"stname\": \"ImGuiMultiSelectTempData\"\n    }\n  ],\n  \"ImGuiNavItemData_Clear\": [\n    {\n      \"args\": \"(ImGuiNavItemData* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiNavItemData*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImGuiNavItemData_Clear\",\n      \"defaults\": {},\n      \"funcname\": \"Clear\",\n      \"location\": \"imgui_internal:1633\",\n      \"ov_cimguiname\": \"ImGuiNavItemData_Clear\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"ImGuiNavItemData\"\n    }\n  ],\n  \"ImGuiNavItemData_ImGuiNavItemData\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImGuiNavItemData_ImGuiNavItemData\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImGuiNavItemData\",\n      \"location\": \"imgui_internal:1632\",\n      \"ov_cimguiname\": \"ImGuiNavItemData_ImGuiNavItemData\",\n      \"signature\": \"()\",\n      \"stname\": \"ImGuiNavItemData\"\n    }\n  ],\n  \"ImGuiNavItemData_destroy\": [\n    {\n      \"args\": \"(ImGuiNavItemData* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiNavItemData*\"\n        }\n      ],\n      \"call_args\": \"(self)\",\n      \"cimguiname\": \"ImGuiNavItemData_destroy\",\n      \"defaults\": {},\n      \"destructor\": true,\n      \"location\": \"imgui_internal:1632\",\n      \"ov_cimguiname\": \"ImGuiNavItemData_destroy\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiNavItemData*)\",\n      \"stname\": \"ImGuiNavItemData\"\n    }\n  ],\n  \"ImGuiNextItemData_ClearFlags\": [\n    {\n      \"args\": \"(ImGuiNextItemData* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiNextItemData*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImGuiNextItemData_ClearFlags\",\n      \"defaults\": {},\n      \"funcname\": \"ClearFlags\",\n      \"location\": \"imgui_internal:1244\",\n      \"ov_cimguiname\": \"ImGuiNextItemData_ClearFlags\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"ImGuiNextItemData\"\n    }\n  ],\n  \"ImGuiNextItemData_ImGuiNextItemData\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImGuiNextItemData_ImGuiNextItemData\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImGuiNextItemData\",\n      \"location\": \"imgui_internal:1243\",\n      \"ov_cimguiname\": \"ImGuiNextItemData_ImGuiNextItemData\",\n      \"signature\": \"()\",\n      \"stname\": \"ImGuiNextItemData\"\n    }\n  ],\n  \"ImGuiNextItemData_destroy\": [\n    {\n      \"args\": \"(ImGuiNextItemData* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiNextItemData*\"\n        }\n      ],\n      \"call_args\": \"(self)\",\n      \"cimguiname\": \"ImGuiNextItemData_destroy\",\n      \"defaults\": {},\n      \"destructor\": true,\n      \"location\": \"imgui_internal:1243\",\n      \"ov_cimguiname\": \"ImGuiNextItemData_destroy\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiNextItemData*)\",\n      \"stname\": \"ImGuiNextItemData\"\n    }\n  ],\n  \"ImGuiNextWindowData_ClearFlags\": [\n    {\n      \"args\": \"(ImGuiNextWindowData* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiNextWindowData*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImGuiNextWindowData_ClearFlags\",\n      \"defaults\": {},\n      \"funcname\": \"ClearFlags\",\n      \"location\": \"imgui_internal:1215\",\n      \"ov_cimguiname\": \"ImGuiNextWindowData_ClearFlags\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"ImGuiNextWindowData\"\n    }\n  ],\n  \"ImGuiNextWindowData_ImGuiNextWindowData\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImGuiNextWindowData_ImGuiNextWindowData\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImGuiNextWindowData\",\n      \"location\": \"imgui_internal:1214\",\n      \"ov_cimguiname\": \"ImGuiNextWindowData_ImGuiNextWindowData\",\n      \"signature\": \"()\",\n      \"stname\": \"ImGuiNextWindowData\"\n    }\n  ],\n  \"ImGuiNextWindowData_destroy\": [\n    {\n      \"args\": \"(ImGuiNextWindowData* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiNextWindowData*\"\n        }\n      ],\n      \"call_args\": \"(self)\",\n      \"cimguiname\": \"ImGuiNextWindowData_destroy\",\n      \"defaults\": {},\n      \"destructor\": true,\n      \"location\": \"imgui_internal:1214\",\n      \"ov_cimguiname\": \"ImGuiNextWindowData_destroy\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiNextWindowData*)\",\n      \"stname\": \"ImGuiNextWindowData\"\n    }\n  ],\n  \"ImGuiOldColumnData_ImGuiOldColumnData\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImGuiOldColumnData_ImGuiOldColumnData\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImGuiOldColumnData\",\n      \"location\": \"imgui_internal:1712\",\n      \"ov_cimguiname\": \"ImGuiOldColumnData_ImGuiOldColumnData\",\n      \"signature\": \"()\",\n      \"stname\": \"ImGuiOldColumnData\"\n    }\n  ],\n  \"ImGuiOldColumnData_destroy\": [\n    {\n      \"args\": \"(ImGuiOldColumnData* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiOldColumnData*\"\n        }\n      ],\n      \"call_args\": \"(self)\",\n      \"cimguiname\": \"ImGuiOldColumnData_destroy\",\n      \"defaults\": {},\n      \"destructor\": true,\n      \"location\": \"imgui_internal:1712\",\n      \"ov_cimguiname\": \"ImGuiOldColumnData_destroy\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiOldColumnData*)\",\n      \"stname\": \"ImGuiOldColumnData\"\n    }\n  ],\n  \"ImGuiOldColumns_ImGuiOldColumns\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImGuiOldColumns_ImGuiOldColumns\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImGuiOldColumns\",\n      \"location\": \"imgui_internal:1733\",\n      \"ov_cimguiname\": \"ImGuiOldColumns_ImGuiOldColumns\",\n      \"signature\": \"()\",\n      \"stname\": \"ImGuiOldColumns\"\n    }\n  ],\n  \"ImGuiOldColumns_destroy\": [\n    {\n      \"args\": \"(ImGuiOldColumns* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiOldColumns*\"\n        }\n      ],\n      \"call_args\": \"(self)\",\n      \"cimguiname\": \"ImGuiOldColumns_destroy\",\n      \"defaults\": {},\n      \"destructor\": true,\n      \"location\": \"imgui_internal:1733\",\n      \"ov_cimguiname\": \"ImGuiOldColumns_destroy\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiOldColumns*)\",\n      \"stname\": \"ImGuiOldColumns\"\n    }\n  ],\n  \"ImGuiOnceUponAFrame_ImGuiOnceUponAFrame\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImGuiOnceUponAFrame_ImGuiOnceUponAFrame\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImGuiOnceUponAFrame\",\n      \"location\": \"imgui:2533\",\n      \"ov_cimguiname\": \"ImGuiOnceUponAFrame_ImGuiOnceUponAFrame\",\n      \"signature\": \"()\",\n      \"stname\": \"ImGuiOnceUponAFrame\"\n    }\n  ],\n  \"ImGuiOnceUponAFrame_destroy\": [\n    {\n      \"args\": \"(ImGuiOnceUponAFrame* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiOnceUponAFrame*\"\n        }\n      ],\n      \"call_args\": \"(self)\",\n      \"cimguiname\": \"ImGuiOnceUponAFrame_destroy\",\n      \"defaults\": {},\n      \"destructor\": true,\n      \"location\": \"imgui:2533\",\n      \"ov_cimguiname\": \"ImGuiOnceUponAFrame_destroy\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiOnceUponAFrame*)\",\n      \"stname\": \"ImGuiOnceUponAFrame\"\n    }\n  ],\n  \"ImGuiPayload_Clear\": [\n    {\n      \"args\": \"(ImGuiPayload* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiPayload*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImGuiPayload_Clear\",\n      \"defaults\": {},\n      \"funcname\": \"Clear\",\n      \"location\": \"imgui:2511\",\n      \"ov_cimguiname\": \"ImGuiPayload_Clear\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"ImGuiPayload\"\n    }\n  ],\n  \"ImGuiPayload_ImGuiPayload\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImGuiPayload_ImGuiPayload\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImGuiPayload\",\n      \"location\": \"imgui:2510\",\n      \"ov_cimguiname\": \"ImGuiPayload_ImGuiPayload\",\n      \"signature\": \"()\",\n      \"stname\": \"ImGuiPayload\"\n    }\n  ],\n  \"ImGuiPayload_IsDataType\": [\n    {\n      \"args\": \"(ImGuiPayload* self,const char* type)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiPayload*\"\n        },\n        {\n          \"name\": \"type\",\n          \"type\": \"const char*\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* type)\",\n      \"call_args\": \"(type)\",\n      \"cimguiname\": \"ImGuiPayload_IsDataType\",\n      \"defaults\": {},\n      \"funcname\": \"IsDataType\",\n      \"location\": \"imgui:2512\",\n      \"ov_cimguiname\": \"ImGuiPayload_IsDataType\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*)const\",\n      \"stname\": \"ImGuiPayload\"\n    }\n  ],\n  \"ImGuiPayload_IsDelivery\": [\n    {\n      \"args\": \"(ImGuiPayload* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiPayload*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImGuiPayload_IsDelivery\",\n      \"defaults\": {},\n      \"funcname\": \"IsDelivery\",\n      \"location\": \"imgui:2514\",\n      \"ov_cimguiname\": \"ImGuiPayload_IsDelivery\",\n      \"ret\": \"bool\",\n      \"signature\": \"()const\",\n      \"stname\": \"ImGuiPayload\"\n    }\n  ],\n  \"ImGuiPayload_IsPreview\": [\n    {\n      \"args\": \"(ImGuiPayload* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiPayload*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImGuiPayload_IsPreview\",\n      \"defaults\": {},\n      \"funcname\": \"IsPreview\",\n      \"location\": \"imgui:2513\",\n      \"ov_cimguiname\": \"ImGuiPayload_IsPreview\",\n      \"ret\": \"bool\",\n      \"signature\": \"()const\",\n      \"stname\": \"ImGuiPayload\"\n    }\n  ],\n  \"ImGuiPayload_destroy\": [\n    {\n      \"args\": \"(ImGuiPayload* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiPayload*\"\n        }\n      ],\n      \"call_args\": \"(self)\",\n      \"cimguiname\": \"ImGuiPayload_destroy\",\n      \"defaults\": {},\n      \"destructor\": true,\n      \"location\": \"imgui:2510\",\n      \"ov_cimguiname\": \"ImGuiPayload_destroy\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiPayload*)\",\n      \"stname\": \"ImGuiPayload\"\n    }\n  ],\n  \"ImGuiPlatformIO_ImGuiPlatformIO\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImGuiPlatformIO_ImGuiPlatformIO\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImGuiPlatformIO\",\n      \"location\": \"imgui:3538\",\n      \"ov_cimguiname\": \"ImGuiPlatformIO_ImGuiPlatformIO\",\n      \"signature\": \"()\",\n      \"stname\": \"ImGuiPlatformIO\"\n    }\n  ],\n  \"ImGuiPlatformIO_destroy\": [\n    {\n      \"args\": \"(ImGuiPlatformIO* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiPlatformIO*\"\n        }\n      ],\n      \"call_args\": \"(self)\",\n      \"cimguiname\": \"ImGuiPlatformIO_destroy\",\n      \"defaults\": {},\n      \"destructor\": true,\n      \"location\": \"imgui:3538\",\n      \"ov_cimguiname\": \"ImGuiPlatformIO_destroy\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiPlatformIO*)\",\n      \"stname\": \"ImGuiPlatformIO\"\n    }\n  ],\n  \"ImGuiPlatformImeData_ImGuiPlatformImeData\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImGuiPlatformImeData_ImGuiPlatformImeData\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImGuiPlatformImeData\",\n      \"location\": \"imgui:3580\",\n      \"ov_cimguiname\": \"ImGuiPlatformImeData_ImGuiPlatformImeData\",\n      \"signature\": \"()\",\n      \"stname\": \"ImGuiPlatformImeData\"\n    }\n  ],\n  \"ImGuiPlatformImeData_destroy\": [\n    {\n      \"args\": \"(ImGuiPlatformImeData* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiPlatformImeData*\"\n        }\n      ],\n      \"call_args\": \"(self)\",\n      \"cimguiname\": \"ImGuiPlatformImeData_destroy\",\n      \"defaults\": {},\n      \"destructor\": true,\n      \"location\": \"imgui:3580\",\n      \"ov_cimguiname\": \"ImGuiPlatformImeData_destroy\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiPlatformImeData*)\",\n      \"stname\": \"ImGuiPlatformImeData\"\n    }\n  ],\n  \"ImGuiPopupData_ImGuiPopupData\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImGuiPopupData_ImGuiPopupData\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImGuiPopupData\",\n      \"location\": \"imgui_internal:1350\",\n      \"ov_cimguiname\": \"ImGuiPopupData_ImGuiPopupData\",\n      \"signature\": \"()\",\n      \"stname\": \"ImGuiPopupData\"\n    }\n  ],\n  \"ImGuiPopupData_destroy\": [\n    {\n      \"args\": \"(ImGuiPopupData* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiPopupData*\"\n        }\n      ],\n      \"call_args\": \"(self)\",\n      \"cimguiname\": \"ImGuiPopupData_destroy\",\n      \"defaults\": {},\n      \"destructor\": true,\n      \"location\": \"imgui_internal:1350\",\n      \"ov_cimguiname\": \"ImGuiPopupData_destroy\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiPopupData*)\",\n      \"stname\": \"ImGuiPopupData\"\n    }\n  ],\n  \"ImGuiPtrOrIndex_ImGuiPtrOrIndex\": [\n    {\n      \"args\": \"(void* ptr)\",\n      \"argsT\": [\n        {\n          \"name\": \"ptr\",\n          \"type\": \"void*\"\n        }\n      ],\n      \"argsoriginal\": \"(void* ptr)\",\n      \"call_args\": \"(ptr)\",\n      \"cimguiname\": \"ImGuiPtrOrIndex_ImGuiPtrOrIndex\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImGuiPtrOrIndex\",\n      \"location\": \"imgui_internal:1314\",\n      \"ov_cimguiname\": \"ImGuiPtrOrIndex_ImGuiPtrOrIndex_Ptr\",\n      \"signature\": \"(void*)\",\n      \"stname\": \"ImGuiPtrOrIndex\"\n    },\n    {\n      \"args\": \"(int index)\",\n      \"argsT\": [\n        {\n          \"name\": \"index\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(int index)\",\n      \"call_args\": \"(index)\",\n      \"cimguiname\": \"ImGuiPtrOrIndex_ImGuiPtrOrIndex\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImGuiPtrOrIndex\",\n      \"location\": \"imgui_internal:1315\",\n      \"ov_cimguiname\": \"ImGuiPtrOrIndex_ImGuiPtrOrIndex_Int\",\n      \"signature\": \"(int)\",\n      \"stname\": \"ImGuiPtrOrIndex\"\n    }\n  ],\n  \"ImGuiPtrOrIndex_destroy\": [\n    {\n      \"args\": \"(ImGuiPtrOrIndex* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiPtrOrIndex*\"\n        }\n      ],\n      \"call_args\": \"(self)\",\n      \"cimguiname\": \"ImGuiPtrOrIndex_destroy\",\n      \"defaults\": {},\n      \"destructor\": true,\n      \"location\": \"imgui_internal:1314\",\n      \"ov_cimguiname\": \"ImGuiPtrOrIndex_destroy\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiPtrOrIndex*)\",\n      \"stname\": \"ImGuiPtrOrIndex\"\n    }\n  ],\n  \"ImGuiSelectionBasicStorage_ApplyRequests\": [\n    {\n      \"args\": \"(ImGuiSelectionBasicStorage* self,ImGuiMultiSelectIO* ms_io)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiSelectionBasicStorage*\"\n        },\n        {\n          \"name\": \"ms_io\",\n          \"type\": \"ImGuiMultiSelectIO*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiMultiSelectIO* ms_io)\",\n      \"call_args\": \"(ms_io)\",\n      \"cimguiname\": \"ImGuiSelectionBasicStorage_ApplyRequests\",\n      \"defaults\": {},\n      \"funcname\": \"ApplyRequests\",\n      \"location\": \"imgui:2897\",\n      \"ov_cimguiname\": \"ImGuiSelectionBasicStorage_ApplyRequests\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiMultiSelectIO*)\",\n      \"stname\": \"ImGuiSelectionBasicStorage\"\n    }\n  ],\n  \"ImGuiSelectionBasicStorage_Clear\": [\n    {\n      \"args\": \"(ImGuiSelectionBasicStorage* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiSelectionBasicStorage*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImGuiSelectionBasicStorage_Clear\",\n      \"defaults\": {},\n      \"funcname\": \"Clear\",\n      \"location\": \"imgui:2899\",\n      \"ov_cimguiname\": \"ImGuiSelectionBasicStorage_Clear\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"ImGuiSelectionBasicStorage\"\n    }\n  ],\n  \"ImGuiSelectionBasicStorage_Contains\": [\n    {\n      \"args\": \"(ImGuiSelectionBasicStorage* self,ImGuiID id)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiSelectionBasicStorage*\"\n        },\n        {\n          \"name\": \"id\",\n          \"type\": \"ImGuiID\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiID id)\",\n      \"call_args\": \"(id)\",\n      \"cimguiname\": \"ImGuiSelectionBasicStorage_Contains\",\n      \"defaults\": {},\n      \"funcname\": \"Contains\",\n      \"location\": \"imgui:2898\",\n      \"ov_cimguiname\": \"ImGuiSelectionBasicStorage_Contains\",\n      \"ret\": \"bool\",\n      \"signature\": \"(ImGuiID)const\",\n      \"stname\": \"ImGuiSelectionBasicStorage\"\n    }\n  ],\n  \"ImGuiSelectionBasicStorage_GetNextSelectedItem\": [\n    {\n      \"args\": \"(ImGuiSelectionBasicStorage* self,void** opaque_it,ImGuiID* out_id)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiSelectionBasicStorage*\"\n        },\n        {\n          \"name\": \"opaque_it\",\n          \"type\": \"void**\"\n        },\n        {\n          \"name\": \"out_id\",\n          \"type\": \"ImGuiID*\"\n        }\n      ],\n      \"argsoriginal\": \"(void** opaque_it,ImGuiID* out_id)\",\n      \"call_args\": \"(opaque_it,out_id)\",\n      \"cimguiname\": \"ImGuiSelectionBasicStorage_GetNextSelectedItem\",\n      \"defaults\": {},\n      \"funcname\": \"GetNextSelectedItem\",\n      \"location\": \"imgui:2902\",\n      \"ov_cimguiname\": \"ImGuiSelectionBasicStorage_GetNextSelectedItem\",\n      \"ret\": \"bool\",\n      \"signature\": \"(void**,ImGuiID*)\",\n      \"stname\": \"ImGuiSelectionBasicStorage\"\n    }\n  ],\n  \"ImGuiSelectionBasicStorage_GetStorageIdFromIndex\": [\n    {\n      \"args\": \"(ImGuiSelectionBasicStorage* self,int idx)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiSelectionBasicStorage*\"\n        },\n        {\n          \"name\": \"idx\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(int idx)\",\n      \"call_args\": \"(idx)\",\n      \"cimguiname\": \"ImGuiSelectionBasicStorage_GetStorageIdFromIndex\",\n      \"defaults\": {},\n      \"funcname\": \"GetStorageIdFromIndex\",\n      \"location\": \"imgui:2903\",\n      \"ov_cimguiname\": \"ImGuiSelectionBasicStorage_GetStorageIdFromIndex\",\n      \"ret\": \"ImGuiID\",\n      \"signature\": \"(int)\",\n      \"stname\": \"ImGuiSelectionBasicStorage\"\n    }\n  ],\n  \"ImGuiSelectionBasicStorage_ImGuiSelectionBasicStorage\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImGuiSelectionBasicStorage_ImGuiSelectionBasicStorage\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImGuiSelectionBasicStorage\",\n      \"location\": \"imgui:2896\",\n      \"ov_cimguiname\": \"ImGuiSelectionBasicStorage_ImGuiSelectionBasicStorage\",\n      \"signature\": \"()\",\n      \"stname\": \"ImGuiSelectionBasicStorage\"\n    }\n  ],\n  \"ImGuiSelectionBasicStorage_SetItemSelected\": [\n    {\n      \"args\": \"(ImGuiSelectionBasicStorage* self,ImGuiID id,bool selected)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiSelectionBasicStorage*\"\n        },\n        {\n          \"name\": \"id\",\n          \"type\": \"ImGuiID\"\n        },\n        {\n          \"name\": \"selected\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiID id,bool selected)\",\n      \"call_args\": \"(id,selected)\",\n      \"cimguiname\": \"ImGuiSelectionBasicStorage_SetItemSelected\",\n      \"defaults\": {},\n      \"funcname\": \"SetItemSelected\",\n      \"location\": \"imgui:2901\",\n      \"ov_cimguiname\": \"ImGuiSelectionBasicStorage_SetItemSelected\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiID,bool)\",\n      \"stname\": \"ImGuiSelectionBasicStorage\"\n    }\n  ],\n  \"ImGuiSelectionBasicStorage_Swap\": [\n    {\n      \"args\": \"(ImGuiSelectionBasicStorage* self,ImGuiSelectionBasicStorage* r)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiSelectionBasicStorage*\"\n        },\n        {\n          \"name\": \"r\",\n          \"reftoptr\": true,\n          \"type\": \"ImGuiSelectionBasicStorage*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiSelectionBasicStorage& r)\",\n      \"call_args\": \"(*r)\",\n      \"cimguiname\": \"ImGuiSelectionBasicStorage_Swap\",\n      \"defaults\": {},\n      \"funcname\": \"Swap\",\n      \"location\": \"imgui:2900\",\n      \"ov_cimguiname\": \"ImGuiSelectionBasicStorage_Swap\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiSelectionBasicStorage*)\",\n      \"stname\": \"ImGuiSelectionBasicStorage\"\n    }\n  ],\n  \"ImGuiSelectionBasicStorage_destroy\": [\n    {\n      \"args\": \"(ImGuiSelectionBasicStorage* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiSelectionBasicStorage*\"\n        }\n      ],\n      \"call_args\": \"(self)\",\n      \"cimguiname\": \"ImGuiSelectionBasicStorage_destroy\",\n      \"defaults\": {},\n      \"destructor\": true,\n      \"location\": \"imgui:2896\",\n      \"ov_cimguiname\": \"ImGuiSelectionBasicStorage_destroy\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiSelectionBasicStorage*)\",\n      \"stname\": \"ImGuiSelectionBasicStorage\"\n    }\n  ],\n  \"ImGuiSelectionExternalStorage_ApplyRequests\": [\n    {\n      \"args\": \"(ImGuiSelectionExternalStorage* self,ImGuiMultiSelectIO* ms_io)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiSelectionExternalStorage*\"\n        },\n        {\n          \"name\": \"ms_io\",\n          \"type\": \"ImGuiMultiSelectIO*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiMultiSelectIO* ms_io)\",\n      \"call_args\": \"(ms_io)\",\n      \"cimguiname\": \"ImGuiSelectionExternalStorage_ApplyRequests\",\n      \"defaults\": {},\n      \"funcname\": \"ApplyRequests\",\n      \"location\": \"imgui:2916\",\n      \"ov_cimguiname\": \"ImGuiSelectionExternalStorage_ApplyRequests\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiMultiSelectIO*)\",\n      \"stname\": \"ImGuiSelectionExternalStorage\"\n    }\n  ],\n  \"ImGuiSelectionExternalStorage_ImGuiSelectionExternalStorage\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImGuiSelectionExternalStorage_ImGuiSelectionExternalStorage\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImGuiSelectionExternalStorage\",\n      \"location\": \"imgui:2915\",\n      \"ov_cimguiname\": \"ImGuiSelectionExternalStorage_ImGuiSelectionExternalStorage\",\n      \"signature\": \"()\",\n      \"stname\": \"ImGuiSelectionExternalStorage\"\n    }\n  ],\n  \"ImGuiSelectionExternalStorage_destroy\": [\n    {\n      \"args\": \"(ImGuiSelectionExternalStorage* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiSelectionExternalStorage*\"\n        }\n      ],\n      \"call_args\": \"(self)\",\n      \"cimguiname\": \"ImGuiSelectionExternalStorage_destroy\",\n      \"defaults\": {},\n      \"destructor\": true,\n      \"location\": \"imgui:2915\",\n      \"ov_cimguiname\": \"ImGuiSelectionExternalStorage_destroy\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiSelectionExternalStorage*)\",\n      \"stname\": \"ImGuiSelectionExternalStorage\"\n    }\n  ],\n  \"ImGuiSettingsHandler_ImGuiSettingsHandler\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImGuiSettingsHandler_ImGuiSettingsHandler\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImGuiSettingsHandler\",\n      \"location\": \"imgui_internal:1888\",\n      \"ov_cimguiname\": \"ImGuiSettingsHandler_ImGuiSettingsHandler\",\n      \"signature\": \"()\",\n      \"stname\": \"ImGuiSettingsHandler\"\n    }\n  ],\n  \"ImGuiSettingsHandler_destroy\": [\n    {\n      \"args\": \"(ImGuiSettingsHandler* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiSettingsHandler*\"\n        }\n      ],\n      \"call_args\": \"(self)\",\n      \"cimguiname\": \"ImGuiSettingsHandler_destroy\",\n      \"defaults\": {},\n      \"destructor\": true,\n      \"location\": \"imgui_internal:1888\",\n      \"ov_cimguiname\": \"ImGuiSettingsHandler_destroy\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiSettingsHandler*)\",\n      \"stname\": \"ImGuiSettingsHandler\"\n    }\n  ],\n  \"ImGuiStackLevelInfo_ImGuiStackLevelInfo\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImGuiStackLevelInfo_ImGuiStackLevelInfo\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImGuiStackLevelInfo\",\n      \"location\": \"imgui_internal:2002\",\n      \"ov_cimguiname\": \"ImGuiStackLevelInfo_ImGuiStackLevelInfo\",\n      \"signature\": \"()\",\n      \"stname\": \"ImGuiStackLevelInfo\"\n    }\n  ],\n  \"ImGuiStackLevelInfo_destroy\": [\n    {\n      \"args\": \"(ImGuiStackLevelInfo* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiStackLevelInfo*\"\n        }\n      ],\n      \"call_args\": \"(self)\",\n      \"cimguiname\": \"ImGuiStackLevelInfo_destroy\",\n      \"defaults\": {},\n      \"destructor\": true,\n      \"location\": \"imgui_internal:2002\",\n      \"ov_cimguiname\": \"ImGuiStackLevelInfo_destroy\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiStackLevelInfo*)\",\n      \"stname\": \"ImGuiStackLevelInfo\"\n    }\n  ],\n  \"ImGuiStoragePair_ImGuiStoragePair\": [\n    {\n      \"args\": \"(ImGuiID _key,int _val)\",\n      \"argsT\": [\n        {\n          \"name\": \"_key\",\n          \"type\": \"ImGuiID\"\n        },\n        {\n          \"name\": \"_val\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiID _key,int _val)\",\n      \"call_args\": \"(_key,_val)\",\n      \"cimguiname\": \"ImGuiStoragePair_ImGuiStoragePair\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImGuiStoragePair\",\n      \"location\": \"imgui:2590\",\n      \"ov_cimguiname\": \"ImGuiStoragePair_ImGuiStoragePair_Int\",\n      \"signature\": \"(ImGuiID,int)\",\n      \"stname\": \"ImGuiStoragePair\"\n    },\n    {\n      \"args\": \"(ImGuiID _key,float _val)\",\n      \"argsT\": [\n        {\n          \"name\": \"_key\",\n          \"type\": \"ImGuiID\"\n        },\n        {\n          \"name\": \"_val\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiID _key,float _val)\",\n      \"call_args\": \"(_key,_val)\",\n      \"cimguiname\": \"ImGuiStoragePair_ImGuiStoragePair\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImGuiStoragePair\",\n      \"location\": \"imgui:2591\",\n      \"ov_cimguiname\": \"ImGuiStoragePair_ImGuiStoragePair_Float\",\n      \"signature\": \"(ImGuiID,float)\",\n      \"stname\": \"ImGuiStoragePair\"\n    },\n    {\n      \"args\": \"(ImGuiID _key,void* _val)\",\n      \"argsT\": [\n        {\n          \"name\": \"_key\",\n          \"type\": \"ImGuiID\"\n        },\n        {\n          \"name\": \"_val\",\n          \"type\": \"void*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiID _key,void* _val)\",\n      \"call_args\": \"(_key,_val)\",\n      \"cimguiname\": \"ImGuiStoragePair_ImGuiStoragePair\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImGuiStoragePair\",\n      \"location\": \"imgui:2592\",\n      \"ov_cimguiname\": \"ImGuiStoragePair_ImGuiStoragePair_Ptr\",\n      \"signature\": \"(ImGuiID,void*)\",\n      \"stname\": \"ImGuiStoragePair\"\n    }\n  ],\n  \"ImGuiStoragePair_destroy\": [\n    {\n      \"args\": \"(ImGuiStoragePair* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiStoragePair*\"\n        }\n      ],\n      \"call_args\": \"(self)\",\n      \"cimguiname\": \"ImGuiStoragePair_destroy\",\n      \"defaults\": {},\n      \"destructor\": true,\n      \"location\": \"imgui:2590\",\n      \"ov_cimguiname\": \"ImGuiStoragePair_destroy\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiStoragePair*)\",\n      \"stname\": \"ImGuiStoragePair\"\n    }\n  ],\n  \"ImGuiStorage_BuildSortByKey\": [\n    {\n      \"args\": \"(ImGuiStorage* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiStorage*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImGuiStorage_BuildSortByKey\",\n      \"defaults\": {},\n      \"funcname\": \"BuildSortByKey\",\n      \"location\": \"imgui:2631\",\n      \"ov_cimguiname\": \"ImGuiStorage_BuildSortByKey\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"ImGuiStorage\"\n    }\n  ],\n  \"ImGuiStorage_Clear\": [\n    {\n      \"args\": \"(ImGuiStorage* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiStorage*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImGuiStorage_Clear\",\n      \"defaults\": {},\n      \"funcname\": \"Clear\",\n      \"location\": \"imgui:2611\",\n      \"ov_cimguiname\": \"ImGuiStorage_Clear\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"ImGuiStorage\"\n    }\n  ],\n  \"ImGuiStorage_GetBool\": [\n    {\n      \"args\": \"(ImGuiStorage* self,ImGuiID key,bool default_val)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiStorage*\"\n        },\n        {\n          \"name\": \"key\",\n          \"type\": \"ImGuiID\"\n        },\n        {\n          \"name\": \"default_val\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiID key,bool default_val=false)\",\n      \"call_args\": \"(key,default_val)\",\n      \"cimguiname\": \"ImGuiStorage_GetBool\",\n      \"defaults\": {\n        \"default_val\": \"false\"\n      },\n      \"funcname\": \"GetBool\",\n      \"location\": \"imgui:2614\",\n      \"ov_cimguiname\": \"ImGuiStorage_GetBool\",\n      \"ret\": \"bool\",\n      \"signature\": \"(ImGuiID,bool)const\",\n      \"stname\": \"ImGuiStorage\"\n    }\n  ],\n  \"ImGuiStorage_GetBoolRef\": [\n    {\n      \"args\": \"(ImGuiStorage* self,ImGuiID key,bool default_val)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiStorage*\"\n        },\n        {\n          \"name\": \"key\",\n          \"type\": \"ImGuiID\"\n        },\n        {\n          \"name\": \"default_val\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiID key,bool default_val=false)\",\n      \"call_args\": \"(key,default_val)\",\n      \"cimguiname\": \"ImGuiStorage_GetBoolRef\",\n      \"defaults\": {\n        \"default_val\": \"false\"\n      },\n      \"funcname\": \"GetBoolRef\",\n      \"location\": \"imgui:2626\",\n      \"ov_cimguiname\": \"ImGuiStorage_GetBoolRef\",\n      \"ret\": \"bool*\",\n      \"signature\": \"(ImGuiID,bool)\",\n      \"stname\": \"ImGuiStorage\"\n    }\n  ],\n  \"ImGuiStorage_GetFloat\": [\n    {\n      \"args\": \"(ImGuiStorage* self,ImGuiID key,float default_val)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiStorage*\"\n        },\n        {\n          \"name\": \"key\",\n          \"type\": \"ImGuiID\"\n        },\n        {\n          \"name\": \"default_val\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiID key,float default_val=0.0f)\",\n      \"call_args\": \"(key,default_val)\",\n      \"cimguiname\": \"ImGuiStorage_GetFloat\",\n      \"defaults\": {\n        \"default_val\": \"0.0f\"\n      },\n      \"funcname\": \"GetFloat\",\n      \"location\": \"imgui:2616\",\n      \"ov_cimguiname\": \"ImGuiStorage_GetFloat\",\n      \"ret\": \"float\",\n      \"signature\": \"(ImGuiID,float)const\",\n      \"stname\": \"ImGuiStorage\"\n    }\n  ],\n  \"ImGuiStorage_GetFloatRef\": [\n    {\n      \"args\": \"(ImGuiStorage* self,ImGuiID key,float default_val)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiStorage*\"\n        },\n        {\n          \"name\": \"key\",\n          \"type\": \"ImGuiID\"\n        },\n        {\n          \"name\": \"default_val\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiID key,float default_val=0.0f)\",\n      \"call_args\": \"(key,default_val)\",\n      \"cimguiname\": \"ImGuiStorage_GetFloatRef\",\n      \"defaults\": {\n        \"default_val\": \"0.0f\"\n      },\n      \"funcname\": \"GetFloatRef\",\n      \"location\": \"imgui:2627\",\n      \"ov_cimguiname\": \"ImGuiStorage_GetFloatRef\",\n      \"ret\": \"float*\",\n      \"signature\": \"(ImGuiID,float)\",\n      \"stname\": \"ImGuiStorage\"\n    }\n  ],\n  \"ImGuiStorage_GetInt\": [\n    {\n      \"args\": \"(ImGuiStorage* self,ImGuiID key,int default_val)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiStorage*\"\n        },\n        {\n          \"name\": \"key\",\n          \"type\": \"ImGuiID\"\n        },\n        {\n          \"name\": \"default_val\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiID key,int default_val=0)\",\n      \"call_args\": \"(key,default_val)\",\n      \"cimguiname\": \"ImGuiStorage_GetInt\",\n      \"defaults\": {\n        \"default_val\": \"0\"\n      },\n      \"funcname\": \"GetInt\",\n      \"location\": \"imgui:2612\",\n      \"ov_cimguiname\": \"ImGuiStorage_GetInt\",\n      \"ret\": \"int\",\n      \"signature\": \"(ImGuiID,int)const\",\n      \"stname\": \"ImGuiStorage\"\n    }\n  ],\n  \"ImGuiStorage_GetIntRef\": [\n    {\n      \"args\": \"(ImGuiStorage* self,ImGuiID key,int default_val)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiStorage*\"\n        },\n        {\n          \"name\": \"key\",\n          \"type\": \"ImGuiID\"\n        },\n        {\n          \"name\": \"default_val\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiID key,int default_val=0)\",\n      \"call_args\": \"(key,default_val)\",\n      \"cimguiname\": \"ImGuiStorage_GetIntRef\",\n      \"defaults\": {\n        \"default_val\": \"0\"\n      },\n      \"funcname\": \"GetIntRef\",\n      \"location\": \"imgui:2625\",\n      \"ov_cimguiname\": \"ImGuiStorage_GetIntRef\",\n      \"ret\": \"int*\",\n      \"signature\": \"(ImGuiID,int)\",\n      \"stname\": \"ImGuiStorage\"\n    }\n  ],\n  \"ImGuiStorage_GetVoidPtr\": [\n    {\n      \"args\": \"(ImGuiStorage* self,ImGuiID key)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiStorage*\"\n        },\n        {\n          \"name\": \"key\",\n          \"type\": \"ImGuiID\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiID key)\",\n      \"call_args\": \"(key)\",\n      \"cimguiname\": \"ImGuiStorage_GetVoidPtr\",\n      \"defaults\": {},\n      \"funcname\": \"GetVoidPtr\",\n      \"location\": \"imgui:2618\",\n      \"ov_cimguiname\": \"ImGuiStorage_GetVoidPtr\",\n      \"ret\": \"void*\",\n      \"signature\": \"(ImGuiID)const\",\n      \"stname\": \"ImGuiStorage\"\n    }\n  ],\n  \"ImGuiStorage_GetVoidPtrRef\": [\n    {\n      \"args\": \"(ImGuiStorage* self,ImGuiID key,void* default_val)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiStorage*\"\n        },\n        {\n          \"name\": \"key\",\n          \"type\": \"ImGuiID\"\n        },\n        {\n          \"name\": \"default_val\",\n          \"type\": \"void*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiID key,void* default_val=((void*)0))\",\n      \"call_args\": \"(key,default_val)\",\n      \"cimguiname\": \"ImGuiStorage_GetVoidPtrRef\",\n      \"defaults\": {\n        \"default_val\": \"NULL\"\n      },\n      \"funcname\": \"GetVoidPtrRef\",\n      \"location\": \"imgui:2628\",\n      \"ov_cimguiname\": \"ImGuiStorage_GetVoidPtrRef\",\n      \"ret\": \"void**\",\n      \"signature\": \"(ImGuiID,void*)\",\n      \"stname\": \"ImGuiStorage\"\n    }\n  ],\n  \"ImGuiStorage_SetAllInt\": [\n    {\n      \"args\": \"(ImGuiStorage* self,int val)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiStorage*\"\n        },\n        {\n          \"name\": \"val\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(int val)\",\n      \"call_args\": \"(val)\",\n      \"cimguiname\": \"ImGuiStorage_SetAllInt\",\n      \"defaults\": {},\n      \"funcname\": \"SetAllInt\",\n      \"location\": \"imgui:2633\",\n      \"ov_cimguiname\": \"ImGuiStorage_SetAllInt\",\n      \"ret\": \"void\",\n      \"signature\": \"(int)\",\n      \"stname\": \"ImGuiStorage\"\n    }\n  ],\n  \"ImGuiStorage_SetBool\": [\n    {\n      \"args\": \"(ImGuiStorage* self,ImGuiID key,bool val)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiStorage*\"\n        },\n        {\n          \"name\": \"key\",\n          \"type\": \"ImGuiID\"\n        },\n        {\n          \"name\": \"val\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiID key,bool val)\",\n      \"call_args\": \"(key,val)\",\n      \"cimguiname\": \"ImGuiStorage_SetBool\",\n      \"defaults\": {},\n      \"funcname\": \"SetBool\",\n      \"location\": \"imgui:2615\",\n      \"ov_cimguiname\": \"ImGuiStorage_SetBool\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiID,bool)\",\n      \"stname\": \"ImGuiStorage\"\n    }\n  ],\n  \"ImGuiStorage_SetFloat\": [\n    {\n      \"args\": \"(ImGuiStorage* self,ImGuiID key,float val)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiStorage*\"\n        },\n        {\n          \"name\": \"key\",\n          \"type\": \"ImGuiID\"\n        },\n        {\n          \"name\": \"val\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiID key,float val)\",\n      \"call_args\": \"(key,val)\",\n      \"cimguiname\": \"ImGuiStorage_SetFloat\",\n      \"defaults\": {},\n      \"funcname\": \"SetFloat\",\n      \"location\": \"imgui:2617\",\n      \"ov_cimguiname\": \"ImGuiStorage_SetFloat\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiID,float)\",\n      \"stname\": \"ImGuiStorage\"\n    }\n  ],\n  \"ImGuiStorage_SetInt\": [\n    {\n      \"args\": \"(ImGuiStorage* self,ImGuiID key,int val)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiStorage*\"\n        },\n        {\n          \"name\": \"key\",\n          \"type\": \"ImGuiID\"\n        },\n        {\n          \"name\": \"val\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiID key,int val)\",\n      \"call_args\": \"(key,val)\",\n      \"cimguiname\": \"ImGuiStorage_SetInt\",\n      \"defaults\": {},\n      \"funcname\": \"SetInt\",\n      \"location\": \"imgui:2613\",\n      \"ov_cimguiname\": \"ImGuiStorage_SetInt\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiID,int)\",\n      \"stname\": \"ImGuiStorage\"\n    }\n  ],\n  \"ImGuiStorage_SetVoidPtr\": [\n    {\n      \"args\": \"(ImGuiStorage* self,ImGuiID key,void* val)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiStorage*\"\n        },\n        {\n          \"name\": \"key\",\n          \"type\": \"ImGuiID\"\n        },\n        {\n          \"name\": \"val\",\n          \"type\": \"void*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiID key,void* val)\",\n      \"call_args\": \"(key,val)\",\n      \"cimguiname\": \"ImGuiStorage_SetVoidPtr\",\n      \"defaults\": {},\n      \"funcname\": \"SetVoidPtr\",\n      \"location\": \"imgui:2619\",\n      \"ov_cimguiname\": \"ImGuiStorage_SetVoidPtr\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiID,void*)\",\n      \"stname\": \"ImGuiStorage\"\n    }\n  ],\n  \"ImGuiStyleMod_ImGuiStyleMod\": [\n    {\n      \"args\": \"(ImGuiStyleVar idx,int v)\",\n      \"argsT\": [\n        {\n          \"name\": \"idx\",\n          \"type\": \"ImGuiStyleVar\"\n        },\n        {\n          \"name\": \"v\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiStyleVar idx,int v)\",\n      \"call_args\": \"(idx,v)\",\n      \"cimguiname\": \"ImGuiStyleMod_ImGuiStyleMod\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImGuiStyleMod\",\n      \"location\": \"imgui_internal:1044\",\n      \"ov_cimguiname\": \"ImGuiStyleMod_ImGuiStyleMod_Int\",\n      \"signature\": \"(ImGuiStyleVar,int)\",\n      \"stname\": \"ImGuiStyleMod\"\n    },\n    {\n      \"args\": \"(ImGuiStyleVar idx,float v)\",\n      \"argsT\": [\n        {\n          \"name\": \"idx\",\n          \"type\": \"ImGuiStyleVar\"\n        },\n        {\n          \"name\": \"v\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiStyleVar idx,float v)\",\n      \"call_args\": \"(idx,v)\",\n      \"cimguiname\": \"ImGuiStyleMod_ImGuiStyleMod\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImGuiStyleMod\",\n      \"location\": \"imgui_internal:1045\",\n      \"ov_cimguiname\": \"ImGuiStyleMod_ImGuiStyleMod_Float\",\n      \"signature\": \"(ImGuiStyleVar,float)\",\n      \"stname\": \"ImGuiStyleMod\"\n    },\n    {\n      \"args\": \"(ImGuiStyleVar idx,ImVec2 v)\",\n      \"argsT\": [\n        {\n          \"name\": \"idx\",\n          \"type\": \"ImGuiStyleVar\"\n        },\n        {\n          \"name\": \"v\",\n          \"type\": \"ImVec2\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiStyleVar idx,ImVec2 v)\",\n      \"call_args\": \"(idx,v)\",\n      \"cimguiname\": \"ImGuiStyleMod_ImGuiStyleMod\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImGuiStyleMod\",\n      \"location\": \"imgui_internal:1046\",\n      \"ov_cimguiname\": \"ImGuiStyleMod_ImGuiStyleMod_Vec2\",\n      \"signature\": \"(ImGuiStyleVar,ImVec2)\",\n      \"stname\": \"ImGuiStyleMod\"\n    }\n  ],\n  \"ImGuiStyleMod_destroy\": [\n    {\n      \"args\": \"(ImGuiStyleMod* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiStyleMod*\"\n        }\n      ],\n      \"call_args\": \"(self)\",\n      \"cimguiname\": \"ImGuiStyleMod_destroy\",\n      \"defaults\": {},\n      \"destructor\": true,\n      \"location\": \"imgui_internal:1044\",\n      \"ov_cimguiname\": \"ImGuiStyleMod_destroy\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiStyleMod*)\",\n      \"stname\": \"ImGuiStyleMod\"\n    }\n  ],\n  \"ImGuiStyle_ImGuiStyle\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImGuiStyle_ImGuiStyle\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImGuiStyle\",\n      \"location\": \"imgui:2188\",\n      \"ov_cimguiname\": \"ImGuiStyle_ImGuiStyle\",\n      \"signature\": \"()\",\n      \"stname\": \"ImGuiStyle\"\n    }\n  ],\n  \"ImGuiStyle_ScaleAllSizes\": [\n    {\n      \"args\": \"(ImGuiStyle* self,float scale_factor)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiStyle*\"\n        },\n        {\n          \"name\": \"scale_factor\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(float scale_factor)\",\n      \"call_args\": \"(scale_factor)\",\n      \"cimguiname\": \"ImGuiStyle_ScaleAllSizes\",\n      \"defaults\": {},\n      \"funcname\": \"ScaleAllSizes\",\n      \"location\": \"imgui:2189\",\n      \"ov_cimguiname\": \"ImGuiStyle_ScaleAllSizes\",\n      \"ret\": \"void\",\n      \"signature\": \"(float)\",\n      \"stname\": \"ImGuiStyle\"\n    }\n  ],\n  \"ImGuiStyle_destroy\": [\n    {\n      \"args\": \"(ImGuiStyle* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiStyle*\"\n        }\n      ],\n      \"call_args\": \"(self)\",\n      \"cimguiname\": \"ImGuiStyle_destroy\",\n      \"defaults\": {},\n      \"destructor\": true,\n      \"location\": \"imgui:2188\",\n      \"ov_cimguiname\": \"ImGuiStyle_destroy\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiStyle*)\",\n      \"stname\": \"ImGuiStyle\"\n    }\n  ],\n  \"ImGuiTabBar_ImGuiTabBar\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImGuiTabBar_ImGuiTabBar\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImGuiTabBar\",\n      \"location\": \"imgui_internal:2662\",\n      \"ov_cimguiname\": \"ImGuiTabBar_ImGuiTabBar\",\n      \"signature\": \"()\",\n      \"stname\": \"ImGuiTabBar\"\n    }\n  ],\n  \"ImGuiTabBar_destroy\": [\n    {\n      \"args\": \"(ImGuiTabBar* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiTabBar*\"\n        }\n      ],\n      \"call_args\": \"(self)\",\n      \"cimguiname\": \"ImGuiTabBar_destroy\",\n      \"defaults\": {},\n      \"destructor\": true,\n      \"location\": \"imgui_internal:2662\",\n      \"ov_cimguiname\": \"ImGuiTabBar_destroy\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiTabBar*)\",\n      \"stname\": \"ImGuiTabBar\"\n    }\n  ],\n  \"ImGuiTabItem_ImGuiTabItem\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImGuiTabItem_ImGuiTabItem\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImGuiTabItem\",\n      \"location\": \"imgui_internal:2621\",\n      \"ov_cimguiname\": \"ImGuiTabItem_ImGuiTabItem\",\n      \"signature\": \"()\",\n      \"stname\": \"ImGuiTabItem\"\n    }\n  ],\n  \"ImGuiTabItem_destroy\": [\n    {\n      \"args\": \"(ImGuiTabItem* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiTabItem*\"\n        }\n      ],\n      \"call_args\": \"(self)\",\n      \"cimguiname\": \"ImGuiTabItem_destroy\",\n      \"defaults\": {},\n      \"destructor\": true,\n      \"location\": \"imgui_internal:2621\",\n      \"ov_cimguiname\": \"ImGuiTabItem_destroy\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiTabItem*)\",\n      \"stname\": \"ImGuiTabItem\"\n    }\n  ],\n  \"ImGuiTableColumnSettings_ImGuiTableColumnSettings\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImGuiTableColumnSettings_ImGuiTableColumnSettings\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImGuiTableColumnSettings\",\n      \"location\": \"imgui_internal:2930\",\n      \"ov_cimguiname\": \"ImGuiTableColumnSettings_ImGuiTableColumnSettings\",\n      \"signature\": \"()\",\n      \"stname\": \"ImGuiTableColumnSettings\"\n    }\n  ],\n  \"ImGuiTableColumnSettings_destroy\": [\n    {\n      \"args\": \"(ImGuiTableColumnSettings* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiTableColumnSettings*\"\n        }\n      ],\n      \"call_args\": \"(self)\",\n      \"cimguiname\": \"ImGuiTableColumnSettings_destroy\",\n      \"defaults\": {},\n      \"destructor\": true,\n      \"location\": \"imgui_internal:2930\",\n      \"ov_cimguiname\": \"ImGuiTableColumnSettings_destroy\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiTableColumnSettings*)\",\n      \"stname\": \"ImGuiTableColumnSettings\"\n    }\n  ],\n  \"ImGuiTableColumnSortSpecs_ImGuiTableColumnSortSpecs\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImGuiTableColumnSortSpecs_ImGuiTableColumnSortSpecs\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImGuiTableColumnSortSpecs\",\n      \"location\": \"imgui:2012\",\n      \"ov_cimguiname\": \"ImGuiTableColumnSortSpecs_ImGuiTableColumnSortSpecs\",\n      \"signature\": \"()\",\n      \"stname\": \"ImGuiTableColumnSortSpecs\"\n    }\n  ],\n  \"ImGuiTableColumnSortSpecs_destroy\": [\n    {\n      \"args\": \"(ImGuiTableColumnSortSpecs* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiTableColumnSortSpecs*\"\n        }\n      ],\n      \"call_args\": \"(self)\",\n      \"cimguiname\": \"ImGuiTableColumnSortSpecs_destroy\",\n      \"defaults\": {},\n      \"destructor\": true,\n      \"location\": \"imgui:2012\",\n      \"ov_cimguiname\": \"ImGuiTableColumnSortSpecs_destroy\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiTableColumnSortSpecs*)\",\n      \"stname\": \"ImGuiTableColumnSortSpecs\"\n    }\n  ],\n  \"ImGuiTableColumn_ImGuiTableColumn\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImGuiTableColumn_ImGuiTableColumn\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImGuiTableColumn\",\n      \"location\": \"imgui_internal:2725\",\n      \"ov_cimguiname\": \"ImGuiTableColumn_ImGuiTableColumn\",\n      \"signature\": \"()\",\n      \"stname\": \"ImGuiTableColumn\"\n    }\n  ],\n  \"ImGuiTableColumn_destroy\": [\n    {\n      \"args\": \"(ImGuiTableColumn* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiTableColumn*\"\n        }\n      ],\n      \"call_args\": \"(self)\",\n      \"cimguiname\": \"ImGuiTableColumn_destroy\",\n      \"defaults\": {},\n      \"destructor\": true,\n      \"location\": \"imgui_internal:2725\",\n      \"ov_cimguiname\": \"ImGuiTableColumn_destroy\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiTableColumn*)\",\n      \"stname\": \"ImGuiTableColumn\"\n    }\n  ],\n  \"ImGuiTableInstanceData_ImGuiTableInstanceData\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImGuiTableInstanceData_ImGuiTableInstanceData\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImGuiTableInstanceData\",\n      \"location\": \"imgui_internal:2768\",\n      \"ov_cimguiname\": \"ImGuiTableInstanceData_ImGuiTableInstanceData\",\n      \"signature\": \"()\",\n      \"stname\": \"ImGuiTableInstanceData\"\n    }\n  ],\n  \"ImGuiTableInstanceData_destroy\": [\n    {\n      \"args\": \"(ImGuiTableInstanceData* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiTableInstanceData*\"\n        }\n      ],\n      \"call_args\": \"(self)\",\n      \"cimguiname\": \"ImGuiTableInstanceData_destroy\",\n      \"defaults\": {},\n      \"destructor\": true,\n      \"location\": \"imgui_internal:2768\",\n      \"ov_cimguiname\": \"ImGuiTableInstanceData_destroy\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiTableInstanceData*)\",\n      \"stname\": \"ImGuiTableInstanceData\"\n    }\n  ],\n  \"ImGuiTableSettings_GetColumnSettings\": [\n    {\n      \"args\": \"(ImGuiTableSettings* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiTableSettings*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImGuiTableSettings_GetColumnSettings\",\n      \"defaults\": {},\n      \"funcname\": \"GetColumnSettings\",\n      \"location\": \"imgui_internal:2953\",\n      \"ov_cimguiname\": \"ImGuiTableSettings_GetColumnSettings\",\n      \"ret\": \"ImGuiTableColumnSettings*\",\n      \"signature\": \"()\",\n      \"stname\": \"ImGuiTableSettings\"\n    }\n  ],\n  \"ImGuiTableSettings_ImGuiTableSettings\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImGuiTableSettings_ImGuiTableSettings\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImGuiTableSettings\",\n      \"location\": \"imgui_internal:2952\",\n      \"ov_cimguiname\": \"ImGuiTableSettings_ImGuiTableSettings\",\n      \"signature\": \"()\",\n      \"stname\": \"ImGuiTableSettings\"\n    }\n  ],\n  \"ImGuiTableSettings_destroy\": [\n    {\n      \"args\": \"(ImGuiTableSettings* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiTableSettings*\"\n        }\n      ],\n      \"call_args\": \"(self)\",\n      \"cimguiname\": \"ImGuiTableSettings_destroy\",\n      \"defaults\": {},\n      \"destructor\": true,\n      \"location\": \"imgui_internal:2952\",\n      \"ov_cimguiname\": \"ImGuiTableSettings_destroy\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiTableSettings*)\",\n      \"stname\": \"ImGuiTableSettings\"\n    }\n  ],\n  \"ImGuiTableSortSpecs_ImGuiTableSortSpecs\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImGuiTableSortSpecs_ImGuiTableSortSpecs\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImGuiTableSortSpecs\",\n      \"location\": \"imgui:2001\",\n      \"ov_cimguiname\": \"ImGuiTableSortSpecs_ImGuiTableSortSpecs\",\n      \"signature\": \"()\",\n      \"stname\": \"ImGuiTableSortSpecs\"\n    }\n  ],\n  \"ImGuiTableSortSpecs_destroy\": [\n    {\n      \"args\": \"(ImGuiTableSortSpecs* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiTableSortSpecs*\"\n        }\n      ],\n      \"call_args\": \"(self)\",\n      \"cimguiname\": \"ImGuiTableSortSpecs_destroy\",\n      \"defaults\": {},\n      \"destructor\": true,\n      \"location\": \"imgui:2001\",\n      \"ov_cimguiname\": \"ImGuiTableSortSpecs_destroy\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiTableSortSpecs*)\",\n      \"stname\": \"ImGuiTableSortSpecs\"\n    }\n  ],\n  \"ImGuiTableTempData_ImGuiTableTempData\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImGuiTableTempData_ImGuiTableTempData\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImGuiTableTempData\",\n      \"location\": \"imgui_internal:2915\",\n      \"ov_cimguiname\": \"ImGuiTableTempData_ImGuiTableTempData\",\n      \"signature\": \"()\",\n      \"stname\": \"ImGuiTableTempData\"\n    }\n  ],\n  \"ImGuiTableTempData_destroy\": [\n    {\n      \"args\": \"(ImGuiTableTempData* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiTableTempData*\"\n        }\n      ],\n      \"call_args\": \"(self)\",\n      \"cimguiname\": \"ImGuiTableTempData_destroy\",\n      \"defaults\": {},\n      \"destructor\": true,\n      \"location\": \"imgui_internal:2915\",\n      \"ov_cimguiname\": \"ImGuiTableTempData_destroy\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiTableTempData*)\",\n      \"stname\": \"ImGuiTableTempData\"\n    }\n  ],\n  \"ImGuiTable_ImGuiTable\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImGuiTable_ImGuiTable\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImGuiTable\",\n      \"location\": \"imgui_internal:2887\",\n      \"ov_cimguiname\": \"ImGuiTable_ImGuiTable\",\n      \"signature\": \"()\",\n      \"stname\": \"ImGuiTable\"\n    }\n  ],\n  \"ImGuiTable_destroy\": [\n    {\n      \"args\": \"(ImGuiTable* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiTable*\"\n        }\n      ],\n      \"call_args\": \"(self)\",\n      \"cimguiname\": \"ImGuiTable_destroy\",\n      \"defaults\": {},\n      \"destructor\": true,\n      \"location\": \"imgui_internal:2888\",\n      \"ov_cimguiname\": \"ImGuiTable_destroy\",\n      \"realdestructor\": true,\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiTable*)\",\n      \"stname\": \"ImGuiTable\"\n    }\n  ],\n  \"ImGuiTextBuffer_ImGuiTextBuffer\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImGuiTextBuffer_ImGuiTextBuffer\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImGuiTextBuffer\",\n      \"location\": \"imgui:2571\",\n      \"ov_cimguiname\": \"ImGuiTextBuffer_ImGuiTextBuffer\",\n      \"signature\": \"()\",\n      \"stname\": \"ImGuiTextBuffer\"\n    }\n  ],\n  \"ImGuiTextBuffer_append\": [\n    {\n      \"args\": \"(ImGuiTextBuffer* self,const char* str,const char* str_end)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiTextBuffer*\"\n        },\n        {\n          \"name\": \"str\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"str_end\",\n          \"type\": \"const char*\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* str,const char* str_end=((void*)0))\",\n      \"call_args\": \"(str,str_end)\",\n      \"cimguiname\": \"ImGuiTextBuffer_append\",\n      \"defaults\": {\n        \"str_end\": \"NULL\"\n      },\n      \"funcname\": \"append\",\n      \"location\": \"imgui:2580\",\n      \"ov_cimguiname\": \"ImGuiTextBuffer_append\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const char*)\",\n      \"stname\": \"ImGuiTextBuffer\"\n    }\n  ],\n  \"ImGuiTextBuffer_appendf\": [\n    {\n      \"args\": \"(ImGuiTextBuffer* self, const char* fmt,...)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiTextBuffer*\"\n        },\n        {\n          \"name\": \"fmt\",\n          \"type\": \" const char*\"\n        },\n        {\n          \"name\": \"...\",\n          \"type\": \"...\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiTextBuffer* self, const char* fmt, ...)\",\n      \"call_args\": \"(self,fmt,...)\",\n      \"cimguiname\": \"ImGuiTextBuffer_appendf\",\n      \"defaults\": {},\n      \"funcname\": \"appendf\",\n      \"isvararg\": \"...)\",\n      \"location\": \"imgui:2581\",\n      \"manual\": true,\n      \"ov_cimguiname\": \"ImGuiTextBuffer_appendf\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiTextBuffer*, const char*,...)\",\n      \"stname\": \"ImGuiTextBuffer\"\n    }\n  ],\n  \"ImGuiTextBuffer_appendfv\": [\n    {\n      \"args\": \"(ImGuiTextBuffer* self,const char* fmt,va_list args)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiTextBuffer*\"\n        },\n        {\n          \"name\": \"fmt\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"args\",\n          \"type\": \"va_list\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* fmt,va_list args)\",\n      \"call_args\": \"(fmt,args)\",\n      \"cimguiname\": \"ImGuiTextBuffer_appendfv\",\n      \"defaults\": {},\n      \"funcname\": \"appendfv\",\n      \"location\": \"imgui:2582\",\n      \"ov_cimguiname\": \"ImGuiTextBuffer_appendfv\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,va_list)\",\n      \"stname\": \"ImGuiTextBuffer\"\n    }\n  ],\n  \"ImGuiTextBuffer_begin\": [\n    {\n      \"args\": \"(ImGuiTextBuffer* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiTextBuffer*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImGuiTextBuffer_begin\",\n      \"defaults\": {},\n      \"funcname\": \"begin\",\n      \"location\": \"imgui:2573\",\n      \"ov_cimguiname\": \"ImGuiTextBuffer_begin\",\n      \"ret\": \"const char*\",\n      \"signature\": \"()const\",\n      \"stname\": \"ImGuiTextBuffer\"\n    }\n  ],\n  \"ImGuiTextBuffer_c_str\": [\n    {\n      \"args\": \"(ImGuiTextBuffer* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiTextBuffer*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImGuiTextBuffer_c_str\",\n      \"defaults\": {},\n      \"funcname\": \"c_str\",\n      \"location\": \"imgui:2579\",\n      \"ov_cimguiname\": \"ImGuiTextBuffer_c_str\",\n      \"ret\": \"const char*\",\n      \"signature\": \"()const\",\n      \"stname\": \"ImGuiTextBuffer\"\n    }\n  ],\n  \"ImGuiTextBuffer_clear\": [\n    {\n      \"args\": \"(ImGuiTextBuffer* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiTextBuffer*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImGuiTextBuffer_clear\",\n      \"defaults\": {},\n      \"funcname\": \"clear\",\n      \"location\": \"imgui:2577\",\n      \"ov_cimguiname\": \"ImGuiTextBuffer_clear\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"ImGuiTextBuffer\"\n    }\n  ],\n  \"ImGuiTextBuffer_destroy\": [\n    {\n      \"args\": \"(ImGuiTextBuffer* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiTextBuffer*\"\n        }\n      ],\n      \"call_args\": \"(self)\",\n      \"cimguiname\": \"ImGuiTextBuffer_destroy\",\n      \"defaults\": {},\n      \"destructor\": true,\n      \"location\": \"imgui:2571\",\n      \"ov_cimguiname\": \"ImGuiTextBuffer_destroy\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiTextBuffer*)\",\n      \"stname\": \"ImGuiTextBuffer\"\n    }\n  ],\n  \"ImGuiTextBuffer_empty\": [\n    {\n      \"args\": \"(ImGuiTextBuffer* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiTextBuffer*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImGuiTextBuffer_empty\",\n      \"defaults\": {},\n      \"funcname\": \"empty\",\n      \"location\": \"imgui:2576\",\n      \"ov_cimguiname\": \"ImGuiTextBuffer_empty\",\n      \"ret\": \"bool\",\n      \"signature\": \"()const\",\n      \"stname\": \"ImGuiTextBuffer\"\n    }\n  ],\n  \"ImGuiTextBuffer_end\": [\n    {\n      \"args\": \"(ImGuiTextBuffer* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiTextBuffer*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImGuiTextBuffer_end\",\n      \"defaults\": {},\n      \"funcname\": \"end\",\n      \"location\": \"imgui:2574\",\n      \"ov_cimguiname\": \"ImGuiTextBuffer_end\",\n      \"ret\": \"const char*\",\n      \"signature\": \"()const\",\n      \"stname\": \"ImGuiTextBuffer\"\n    }\n  ],\n  \"ImGuiTextBuffer_reserve\": [\n    {\n      \"args\": \"(ImGuiTextBuffer* self,int capacity)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiTextBuffer*\"\n        },\n        {\n          \"name\": \"capacity\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(int capacity)\",\n      \"call_args\": \"(capacity)\",\n      \"cimguiname\": \"ImGuiTextBuffer_reserve\",\n      \"defaults\": {},\n      \"funcname\": \"reserve\",\n      \"location\": \"imgui:2578\",\n      \"ov_cimguiname\": \"ImGuiTextBuffer_reserve\",\n      \"ret\": \"void\",\n      \"signature\": \"(int)\",\n      \"stname\": \"ImGuiTextBuffer\"\n    }\n  ],\n  \"ImGuiTextBuffer_size\": [\n    {\n      \"args\": \"(ImGuiTextBuffer* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiTextBuffer*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImGuiTextBuffer_size\",\n      \"defaults\": {},\n      \"funcname\": \"size\",\n      \"location\": \"imgui:2575\",\n      \"ov_cimguiname\": \"ImGuiTextBuffer_size\",\n      \"ret\": \"int\",\n      \"signature\": \"()const\",\n      \"stname\": \"ImGuiTextBuffer\"\n    }\n  ],\n  \"ImGuiTextFilter_Build\": [\n    {\n      \"args\": \"(ImGuiTextFilter* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiTextFilter*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImGuiTextFilter_Build\",\n      \"defaults\": {},\n      \"funcname\": \"Build\",\n      \"location\": \"imgui:2544\",\n      \"ov_cimguiname\": \"ImGuiTextFilter_Build\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"ImGuiTextFilter\"\n    }\n  ],\n  \"ImGuiTextFilter_Clear\": [\n    {\n      \"args\": \"(ImGuiTextFilter* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiTextFilter*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImGuiTextFilter_Clear\",\n      \"defaults\": {},\n      \"funcname\": \"Clear\",\n      \"location\": \"imgui:2545\",\n      \"ov_cimguiname\": \"ImGuiTextFilter_Clear\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"ImGuiTextFilter\"\n    }\n  ],\n  \"ImGuiTextFilter_Draw\": [\n    {\n      \"args\": \"(ImGuiTextFilter* self,const char* label,float width)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiTextFilter*\"\n        },\n        {\n          \"name\": \"label\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"width\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label=\\\"Filter(inc,-exc)\\\",float width=0.0f)\",\n      \"call_args\": \"(label,width)\",\n      \"cimguiname\": \"ImGuiTextFilter_Draw\",\n      \"defaults\": {\n        \"label\": \"\\\"Filter(inc,-exc)\\\"\",\n        \"width\": \"0.0f\"\n      },\n      \"funcname\": \"Draw\",\n      \"location\": \"imgui:2542\",\n      \"ov_cimguiname\": \"ImGuiTextFilter_Draw\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*,float)\",\n      \"stname\": \"ImGuiTextFilter\"\n    }\n  ],\n  \"ImGuiTextFilter_ImGuiTextFilter\": [\n    {\n      \"args\": \"(const char* default_filter)\",\n      \"argsT\": [\n        {\n          \"name\": \"default_filter\",\n          \"type\": \"const char*\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* default_filter=\\\"\\\")\",\n      \"call_args\": \"(default_filter)\",\n      \"cimguiname\": \"ImGuiTextFilter_ImGuiTextFilter\",\n      \"constructor\": true,\n      \"defaults\": {\n        \"default_filter\": \"\\\"\\\"\"\n      },\n      \"funcname\": \"ImGuiTextFilter\",\n      \"location\": \"imgui:2541\",\n      \"ov_cimguiname\": \"ImGuiTextFilter_ImGuiTextFilter\",\n      \"signature\": \"(const char*)\",\n      \"stname\": \"ImGuiTextFilter\"\n    }\n  ],\n  \"ImGuiTextFilter_IsActive\": [\n    {\n      \"args\": \"(ImGuiTextFilter* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiTextFilter*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImGuiTextFilter_IsActive\",\n      \"defaults\": {},\n      \"funcname\": \"IsActive\",\n      \"location\": \"imgui:2546\",\n      \"ov_cimguiname\": \"ImGuiTextFilter_IsActive\",\n      \"ret\": \"bool\",\n      \"signature\": \"()const\",\n      \"stname\": \"ImGuiTextFilter\"\n    }\n  ],\n  \"ImGuiTextFilter_PassFilter\": [\n    {\n      \"args\": \"(ImGuiTextFilter* self,const char* text,const char* text_end)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiTextFilter*\"\n        },\n        {\n          \"name\": \"text\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"text_end\",\n          \"type\": \"const char*\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* text,const char* text_end=((void*)0))\",\n      \"call_args\": \"(text,text_end)\",\n      \"cimguiname\": \"ImGuiTextFilter_PassFilter\",\n      \"defaults\": {\n        \"text_end\": \"NULL\"\n      },\n      \"funcname\": \"PassFilter\",\n      \"location\": \"imgui:2543\",\n      \"ov_cimguiname\": \"ImGuiTextFilter_PassFilter\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*,const char*)const\",\n      \"stname\": \"ImGuiTextFilter\"\n    }\n  ],\n  \"ImGuiTextFilter_destroy\": [\n    {\n      \"args\": \"(ImGuiTextFilter* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiTextFilter*\"\n        }\n      ],\n      \"call_args\": \"(self)\",\n      \"cimguiname\": \"ImGuiTextFilter_destroy\",\n      \"defaults\": {},\n      \"destructor\": true,\n      \"location\": \"imgui:2541\",\n      \"ov_cimguiname\": \"ImGuiTextFilter_destroy\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiTextFilter*)\",\n      \"stname\": \"ImGuiTextFilter\"\n    }\n  ],\n  \"ImGuiTextIndex_append\": [\n    {\n      \"args\": \"(ImGuiTextIndex* self,const char* base,int old_size,int new_size)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiTextIndex*\"\n        },\n        {\n          \"name\": \"base\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"old_size\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"new_size\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* base,int old_size,int new_size)\",\n      \"call_args\": \"(base,old_size,new_size)\",\n      \"cimguiname\": \"ImGuiTextIndex_append\",\n      \"defaults\": {},\n      \"funcname\": \"append\",\n      \"location\": \"imgui_internal:734\",\n      \"ov_cimguiname\": \"ImGuiTextIndex_append\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,int,int)\",\n      \"stname\": \"ImGuiTextIndex\"\n    }\n  ],\n  \"ImGuiTextIndex_clear\": [\n    {\n      \"args\": \"(ImGuiTextIndex* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiTextIndex*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImGuiTextIndex_clear\",\n      \"defaults\": {},\n      \"funcname\": \"clear\",\n      \"location\": \"imgui_internal:730\",\n      \"ov_cimguiname\": \"ImGuiTextIndex_clear\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"ImGuiTextIndex\"\n    }\n  ],\n  \"ImGuiTextIndex_get_line_begin\": [\n    {\n      \"args\": \"(ImGuiTextIndex* self,const char* base,int n)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiTextIndex*\"\n        },\n        {\n          \"name\": \"base\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"n\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* base,int n)\",\n      \"call_args\": \"(base,n)\",\n      \"cimguiname\": \"ImGuiTextIndex_get_line_begin\",\n      \"defaults\": {},\n      \"funcname\": \"get_line_begin\",\n      \"location\": \"imgui_internal:732\",\n      \"ov_cimguiname\": \"ImGuiTextIndex_get_line_begin\",\n      \"ret\": \"const char*\",\n      \"signature\": \"(const char*,int)\",\n      \"stname\": \"ImGuiTextIndex\"\n    }\n  ],\n  \"ImGuiTextIndex_get_line_end\": [\n    {\n      \"args\": \"(ImGuiTextIndex* self,const char* base,int n)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiTextIndex*\"\n        },\n        {\n          \"name\": \"base\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"n\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* base,int n)\",\n      \"call_args\": \"(base,n)\",\n      \"cimguiname\": \"ImGuiTextIndex_get_line_end\",\n      \"defaults\": {},\n      \"funcname\": \"get_line_end\",\n      \"location\": \"imgui_internal:733\",\n      \"ov_cimguiname\": \"ImGuiTextIndex_get_line_end\",\n      \"ret\": \"const char*\",\n      \"signature\": \"(const char*,int)\",\n      \"stname\": \"ImGuiTextIndex\"\n    }\n  ],\n  \"ImGuiTextIndex_size\": [\n    {\n      \"args\": \"(ImGuiTextIndex* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiTextIndex*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImGuiTextIndex_size\",\n      \"defaults\": {},\n      \"funcname\": \"size\",\n      \"location\": \"imgui_internal:731\",\n      \"ov_cimguiname\": \"ImGuiTextIndex_size\",\n      \"ret\": \"int\",\n      \"signature\": \"()\",\n      \"stname\": \"ImGuiTextIndex\"\n    }\n  ],\n  \"ImGuiTextRange_ImGuiTextRange\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImGuiTextRange_ImGuiTextRange\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImGuiTextRange\",\n      \"location\": \"imgui:2554\",\n      \"ov_cimguiname\": \"ImGuiTextRange_ImGuiTextRange_Nil\",\n      \"signature\": \"()\",\n      \"stname\": \"ImGuiTextRange\"\n    },\n    {\n      \"args\": \"(const char* _b,const char* _e)\",\n      \"argsT\": [\n        {\n          \"name\": \"_b\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"_e\",\n          \"type\": \"const char*\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* _b,const char* _e)\",\n      \"call_args\": \"(_b,_e)\",\n      \"cimguiname\": \"ImGuiTextRange_ImGuiTextRange\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImGuiTextRange\",\n      \"location\": \"imgui:2555\",\n      \"ov_cimguiname\": \"ImGuiTextRange_ImGuiTextRange_Str\",\n      \"signature\": \"(const char*,const char*)\",\n      \"stname\": \"ImGuiTextRange\"\n    }\n  ],\n  \"ImGuiTextRange_destroy\": [\n    {\n      \"args\": \"(ImGuiTextRange* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiTextRange*\"\n        }\n      ],\n      \"call_args\": \"(self)\",\n      \"cimguiname\": \"ImGuiTextRange_destroy\",\n      \"defaults\": {},\n      \"destructor\": true,\n      \"location\": \"imgui:2554\",\n      \"ov_cimguiname\": \"ImGuiTextRange_destroy\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiTextRange*)\",\n      \"stname\": \"ImGuiTextRange\"\n    }\n  ],\n  \"ImGuiTextRange_empty\": [\n    {\n      \"args\": \"(ImGuiTextRange* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiTextRange*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImGuiTextRange_empty\",\n      \"defaults\": {},\n      \"funcname\": \"empty\",\n      \"location\": \"imgui:2556\",\n      \"ov_cimguiname\": \"ImGuiTextRange_empty\",\n      \"ret\": \"bool\",\n      \"signature\": \"()const\",\n      \"stname\": \"ImGuiTextRange\"\n    }\n  ],\n  \"ImGuiTextRange_split\": [\n    {\n      \"args\": \"(ImGuiTextRange* self,char separator,ImVector_ImGuiTextRange* out)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiTextRange*\"\n        },\n        {\n          \"name\": \"separator\",\n          \"type\": \"char\"\n        },\n        {\n          \"name\": \"out\",\n          \"type\": \"ImVector_ImGuiTextRange*\"\n        }\n      ],\n      \"argsoriginal\": \"(char separator,ImVector<ImGuiTextRange>* out)\",\n      \"call_args\": \"(separator,out)\",\n      \"cimguiname\": \"ImGuiTextRange_split\",\n      \"defaults\": {},\n      \"funcname\": \"split\",\n      \"location\": \"imgui:2557\",\n      \"ov_cimguiname\": \"ImGuiTextRange_split\",\n      \"ret\": \"void\",\n      \"signature\": \"(char,ImVector_ImGuiTextRange*)const\",\n      \"stname\": \"ImGuiTextRange\"\n    }\n  ],\n  \"ImGuiTypingSelectState_Clear\": [\n    {\n      \"args\": \"(ImGuiTypingSelectState* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiTypingSelectState*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImGuiTypingSelectState_Clear\",\n      \"defaults\": {},\n      \"funcname\": \"Clear\",\n      \"location\": \"imgui_internal:1677\",\n      \"ov_cimguiname\": \"ImGuiTypingSelectState_Clear\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"ImGuiTypingSelectState\"\n    }\n  ],\n  \"ImGuiTypingSelectState_ImGuiTypingSelectState\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImGuiTypingSelectState_ImGuiTypingSelectState\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImGuiTypingSelectState\",\n      \"location\": \"imgui_internal:1676\",\n      \"ov_cimguiname\": \"ImGuiTypingSelectState_ImGuiTypingSelectState\",\n      \"signature\": \"()\",\n      \"stname\": \"ImGuiTypingSelectState\"\n    }\n  ],\n  \"ImGuiTypingSelectState_destroy\": [\n    {\n      \"args\": \"(ImGuiTypingSelectState* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiTypingSelectState*\"\n        }\n      ],\n      \"call_args\": \"(self)\",\n      \"cimguiname\": \"ImGuiTypingSelectState_destroy\",\n      \"defaults\": {},\n      \"destructor\": true,\n      \"location\": \"imgui_internal:1676\",\n      \"ov_cimguiname\": \"ImGuiTypingSelectState_destroy\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiTypingSelectState*)\",\n      \"stname\": \"ImGuiTypingSelectState\"\n    }\n  ],\n  \"ImGuiViewportP_CalcWorkRectPos\": [\n    {\n      \"args\": \"(ImVec2 *pOut,ImGuiViewportP* self,const ImVec2 inset_min)\",\n      \"argsT\": [\n        {\n          \"name\": \"pOut\",\n          \"type\": \"ImVec2*\"\n        },\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiViewportP*\"\n        },\n        {\n          \"name\": \"inset_min\",\n          \"type\": \"const ImVec2\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImVec2& inset_min)\",\n      \"call_args\": \"(inset_min)\",\n      \"cimguiname\": \"ImGuiViewportP_CalcWorkRectPos\",\n      \"defaults\": {},\n      \"funcname\": \"CalcWorkRectPos\",\n      \"location\": \"imgui_internal:1845\",\n      \"nonUDT\": 1,\n      \"ov_cimguiname\": \"ImGuiViewportP_CalcWorkRectPos\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImVec2)const\",\n      \"stname\": \"ImGuiViewportP\"\n    }\n  ],\n  \"ImGuiViewportP_CalcWorkRectSize\": [\n    {\n      \"args\": \"(ImVec2 *pOut,ImGuiViewportP* self,const ImVec2 inset_min,const ImVec2 inset_max)\",\n      \"argsT\": [\n        {\n          \"name\": \"pOut\",\n          \"type\": \"ImVec2*\"\n        },\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiViewportP*\"\n        },\n        {\n          \"name\": \"inset_min\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"inset_max\",\n          \"type\": \"const ImVec2\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImVec2& inset_min,const ImVec2& inset_max)\",\n      \"call_args\": \"(inset_min,inset_max)\",\n      \"cimguiname\": \"ImGuiViewportP_CalcWorkRectSize\",\n      \"defaults\": {},\n      \"funcname\": \"CalcWorkRectSize\",\n      \"location\": \"imgui_internal:1846\",\n      \"nonUDT\": 1,\n      \"ov_cimguiname\": \"ImGuiViewportP_CalcWorkRectSize\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImVec2,const ImVec2)const\",\n      \"stname\": \"ImGuiViewportP\"\n    }\n  ],\n  \"ImGuiViewportP_GetBuildWorkRect\": [\n    {\n      \"args\": \"(ImRect *pOut,ImGuiViewportP* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"pOut\",\n          \"type\": \"ImRect*\"\n        },\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiViewportP*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImGuiViewportP_GetBuildWorkRect\",\n      \"defaults\": {},\n      \"funcname\": \"GetBuildWorkRect\",\n      \"location\": \"imgui_internal:1852\",\n      \"nonUDT\": 1,\n      \"ov_cimguiname\": \"ImGuiViewportP_GetBuildWorkRect\",\n      \"ret\": \"void\",\n      \"signature\": \"()const\",\n      \"stname\": \"ImGuiViewportP\"\n    }\n  ],\n  \"ImGuiViewportP_GetMainRect\": [\n    {\n      \"args\": \"(ImRect *pOut,ImGuiViewportP* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"pOut\",\n          \"type\": \"ImRect*\"\n        },\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiViewportP*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImGuiViewportP_GetMainRect\",\n      \"defaults\": {},\n      \"funcname\": \"GetMainRect\",\n      \"location\": \"imgui_internal:1850\",\n      \"nonUDT\": 1,\n      \"ov_cimguiname\": \"ImGuiViewportP_GetMainRect\",\n      \"ret\": \"void\",\n      \"signature\": \"()const\",\n      \"stname\": \"ImGuiViewportP\"\n    }\n  ],\n  \"ImGuiViewportP_GetWorkRect\": [\n    {\n      \"args\": \"(ImRect *pOut,ImGuiViewportP* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"pOut\",\n          \"type\": \"ImRect*\"\n        },\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiViewportP*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImGuiViewportP_GetWorkRect\",\n      \"defaults\": {},\n      \"funcname\": \"GetWorkRect\",\n      \"location\": \"imgui_internal:1851\",\n      \"nonUDT\": 1,\n      \"ov_cimguiname\": \"ImGuiViewportP_GetWorkRect\",\n      \"ret\": \"void\",\n      \"signature\": \"()const\",\n      \"stname\": \"ImGuiViewportP\"\n    }\n  ],\n  \"ImGuiViewportP_ImGuiViewportP\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImGuiViewportP_ImGuiViewportP\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImGuiViewportP\",\n      \"location\": \"imgui_internal:1841\",\n      \"ov_cimguiname\": \"ImGuiViewportP_ImGuiViewportP\",\n      \"signature\": \"()\",\n      \"stname\": \"ImGuiViewportP\"\n    }\n  ],\n  \"ImGuiViewportP_UpdateWorkRect\": [\n    {\n      \"args\": \"(ImGuiViewportP* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiViewportP*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImGuiViewportP_UpdateWorkRect\",\n      \"defaults\": {},\n      \"funcname\": \"UpdateWorkRect\",\n      \"location\": \"imgui_internal:1847\",\n      \"ov_cimguiname\": \"ImGuiViewportP_UpdateWorkRect\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"ImGuiViewportP\"\n    }\n  ],\n  \"ImGuiViewportP_destroy\": [\n    {\n      \"args\": \"(ImGuiViewportP* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiViewportP*\"\n        }\n      ],\n      \"call_args\": \"(self)\",\n      \"cimguiname\": \"ImGuiViewportP_destroy\",\n      \"defaults\": {},\n      \"destructor\": true,\n      \"location\": \"imgui_internal:1842\",\n      \"ov_cimguiname\": \"ImGuiViewportP_destroy\",\n      \"realdestructor\": true,\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiViewportP*)\",\n      \"stname\": \"ImGuiViewportP\"\n    }\n  ],\n  \"ImGuiViewport_GetCenter\": [\n    {\n      \"args\": \"(ImVec2 *pOut,ImGuiViewport* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"pOut\",\n          \"type\": \"ImVec2*\"\n        },\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiViewport*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImGuiViewport_GetCenter\",\n      \"defaults\": {},\n      \"funcname\": \"GetCenter\",\n      \"location\": \"imgui:3527\",\n      \"nonUDT\": 1,\n      \"ov_cimguiname\": \"ImGuiViewport_GetCenter\",\n      \"ret\": \"void\",\n      \"signature\": \"()const\",\n      \"stname\": \"ImGuiViewport\"\n    }\n  ],\n  \"ImGuiViewport_GetWorkCenter\": [\n    {\n      \"args\": \"(ImVec2 *pOut,ImGuiViewport* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"pOut\",\n          \"type\": \"ImVec2*\"\n        },\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiViewport*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImGuiViewport_GetWorkCenter\",\n      \"defaults\": {},\n      \"funcname\": \"GetWorkCenter\",\n      \"location\": \"imgui:3528\",\n      \"nonUDT\": 1,\n      \"ov_cimguiname\": \"ImGuiViewport_GetWorkCenter\",\n      \"ret\": \"void\",\n      \"signature\": \"()const\",\n      \"stname\": \"ImGuiViewport\"\n    }\n  ],\n  \"ImGuiViewport_ImGuiViewport\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImGuiViewport_ImGuiViewport\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImGuiViewport\",\n      \"location\": \"imgui:3524\",\n      \"ov_cimguiname\": \"ImGuiViewport_ImGuiViewport\",\n      \"signature\": \"()\",\n      \"stname\": \"ImGuiViewport\"\n    }\n  ],\n  \"ImGuiViewport_destroy\": [\n    {\n      \"args\": \"(ImGuiViewport* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiViewport*\"\n        }\n      ],\n      \"call_args\": \"(self)\",\n      \"cimguiname\": \"ImGuiViewport_destroy\",\n      \"defaults\": {},\n      \"destructor\": true,\n      \"location\": \"imgui:3524\",\n      \"ov_cimguiname\": \"ImGuiViewport_destroy\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiViewport*)\",\n      \"stname\": \"ImGuiViewport\"\n    }\n  ],\n  \"ImGuiWindowSettings_GetName\": [\n    {\n      \"args\": \"(ImGuiWindowSettings* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiWindowSettings*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImGuiWindowSettings_GetName\",\n      \"defaults\": {},\n      \"funcname\": \"GetName\",\n      \"location\": \"imgui_internal:1873\",\n      \"ov_cimguiname\": \"ImGuiWindowSettings_GetName\",\n      \"ret\": \"char*\",\n      \"signature\": \"()\",\n      \"stname\": \"ImGuiWindowSettings\"\n    }\n  ],\n  \"ImGuiWindowSettings_ImGuiWindowSettings\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImGuiWindowSettings_ImGuiWindowSettings\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImGuiWindowSettings\",\n      \"location\": \"imgui_internal:1872\",\n      \"ov_cimguiname\": \"ImGuiWindowSettings_ImGuiWindowSettings\",\n      \"signature\": \"()\",\n      \"stname\": \"ImGuiWindowSettings\"\n    }\n  ],\n  \"ImGuiWindowSettings_destroy\": [\n    {\n      \"args\": \"(ImGuiWindowSettings* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiWindowSettings*\"\n        }\n      ],\n      \"call_args\": \"(self)\",\n      \"cimguiname\": \"ImGuiWindowSettings_destroy\",\n      \"defaults\": {},\n      \"destructor\": true,\n      \"location\": \"imgui_internal:1872\",\n      \"ov_cimguiname\": \"ImGuiWindowSettings_destroy\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiWindowSettings*)\",\n      \"stname\": \"ImGuiWindowSettings\"\n    }\n  ],\n  \"ImGuiWindow_CalcFontSize\": [\n    {\n      \"args\": \"(ImGuiWindow* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiWindow*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImGuiWindow_CalcFontSize\",\n      \"defaults\": {},\n      \"funcname\": \"CalcFontSize\",\n      \"location\": \"imgui_internal:2580\",\n      \"ov_cimguiname\": \"ImGuiWindow_CalcFontSize\",\n      \"ret\": \"float\",\n      \"signature\": \"()const\",\n      \"stname\": \"ImGuiWindow\"\n    }\n  ],\n  \"ImGuiWindow_GetID\": [\n    {\n      \"args\": \"(ImGuiWindow* self,const char* str,const char* str_end)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiWindow*\"\n        },\n        {\n          \"name\": \"str\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"str_end\",\n          \"type\": \"const char*\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* str,const char* str_end=((void*)0))\",\n      \"call_args\": \"(str,str_end)\",\n      \"cimguiname\": \"ImGuiWindow_GetID\",\n      \"defaults\": {\n        \"str_end\": \"NULL\"\n      },\n      \"funcname\": \"GetID\",\n      \"location\": \"imgui_internal:2572\",\n      \"ov_cimguiname\": \"ImGuiWindow_GetID_Str\",\n      \"ret\": \"ImGuiID\",\n      \"signature\": \"(const char*,const char*)\",\n      \"stname\": \"ImGuiWindow\"\n    },\n    {\n      \"args\": \"(ImGuiWindow* self,const void* ptr)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiWindow*\"\n        },\n        {\n          \"name\": \"ptr\",\n          \"type\": \"const void*\"\n        }\n      ],\n      \"argsoriginal\": \"(const void* ptr)\",\n      \"call_args\": \"(ptr)\",\n      \"cimguiname\": \"ImGuiWindow_GetID\",\n      \"defaults\": {},\n      \"funcname\": \"GetID\",\n      \"location\": \"imgui_internal:2573\",\n      \"ov_cimguiname\": \"ImGuiWindow_GetID_Ptr\",\n      \"ret\": \"ImGuiID\",\n      \"signature\": \"(const void*)\",\n      \"stname\": \"ImGuiWindow\"\n    },\n    {\n      \"args\": \"(ImGuiWindow* self,int n)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiWindow*\"\n        },\n        {\n          \"name\": \"n\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(int n)\",\n      \"call_args\": \"(n)\",\n      \"cimguiname\": \"ImGuiWindow_GetID\",\n      \"defaults\": {},\n      \"funcname\": \"GetID\",\n      \"location\": \"imgui_internal:2574\",\n      \"ov_cimguiname\": \"ImGuiWindow_GetID_Int\",\n      \"ret\": \"ImGuiID\",\n      \"signature\": \"(int)\",\n      \"stname\": \"ImGuiWindow\"\n    }\n  ],\n  \"ImGuiWindow_GetIDFromPos\": [\n    {\n      \"args\": \"(ImGuiWindow* self,const ImVec2 p_abs)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiWindow*\"\n        },\n        {\n          \"name\": \"p_abs\",\n          \"type\": \"const ImVec2\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImVec2& p_abs)\",\n      \"call_args\": \"(p_abs)\",\n      \"cimguiname\": \"ImGuiWindow_GetIDFromPos\",\n      \"defaults\": {},\n      \"funcname\": \"GetIDFromPos\",\n      \"location\": \"imgui_internal:2575\",\n      \"ov_cimguiname\": \"ImGuiWindow_GetIDFromPos\",\n      \"ret\": \"ImGuiID\",\n      \"signature\": \"(const ImVec2)\",\n      \"stname\": \"ImGuiWindow\"\n    }\n  ],\n  \"ImGuiWindow_GetIDFromRectangle\": [\n    {\n      \"args\": \"(ImGuiWindow* self,const ImRect r_abs)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiWindow*\"\n        },\n        {\n          \"name\": \"r_abs\",\n          \"type\": \"const ImRect\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImRect& r_abs)\",\n      \"call_args\": \"(r_abs)\",\n      \"cimguiname\": \"ImGuiWindow_GetIDFromRectangle\",\n      \"defaults\": {},\n      \"funcname\": \"GetIDFromRectangle\",\n      \"location\": \"imgui_internal:2576\",\n      \"ov_cimguiname\": \"ImGuiWindow_GetIDFromRectangle\",\n      \"ret\": \"ImGuiID\",\n      \"signature\": \"(const ImRect)\",\n      \"stname\": \"ImGuiWindow\"\n    }\n  ],\n  \"ImGuiWindow_ImGuiWindow\": [\n    {\n      \"args\": \"(ImGuiContext* context,const char* name)\",\n      \"argsT\": [\n        {\n          \"name\": \"context\",\n          \"type\": \"ImGuiContext*\"\n        },\n        {\n          \"name\": \"name\",\n          \"type\": \"const char*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiContext* context,const char* name)\",\n      \"call_args\": \"(context,name)\",\n      \"cimguiname\": \"ImGuiWindow_ImGuiWindow\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImGuiWindow\",\n      \"location\": \"imgui_internal:2568\",\n      \"ov_cimguiname\": \"ImGuiWindow_ImGuiWindow\",\n      \"signature\": \"(ImGuiContext*,const char*)\",\n      \"stname\": \"ImGuiWindow\"\n    }\n  ],\n  \"ImGuiWindow_MenuBarRect\": [\n    {\n      \"args\": \"(ImRect *pOut,ImGuiWindow* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"pOut\",\n          \"type\": \"ImRect*\"\n        },\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiWindow*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImGuiWindow_MenuBarRect\",\n      \"defaults\": {},\n      \"funcname\": \"MenuBarRect\",\n      \"location\": \"imgui_internal:2582\",\n      \"nonUDT\": 1,\n      \"ov_cimguiname\": \"ImGuiWindow_MenuBarRect\",\n      \"ret\": \"void\",\n      \"signature\": \"()const\",\n      \"stname\": \"ImGuiWindow\"\n    }\n  ],\n  \"ImGuiWindow_Rect\": [\n    {\n      \"args\": \"(ImRect *pOut,ImGuiWindow* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"pOut\",\n          \"type\": \"ImRect*\"\n        },\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiWindow*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImGuiWindow_Rect\",\n      \"defaults\": {},\n      \"funcname\": \"Rect\",\n      \"location\": \"imgui_internal:2579\",\n      \"nonUDT\": 1,\n      \"ov_cimguiname\": \"ImGuiWindow_Rect\",\n      \"ret\": \"void\",\n      \"signature\": \"()const\",\n      \"stname\": \"ImGuiWindow\"\n    }\n  ],\n  \"ImGuiWindow_TitleBarRect\": [\n    {\n      \"args\": \"(ImRect *pOut,ImGuiWindow* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"pOut\",\n          \"type\": \"ImRect*\"\n        },\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiWindow*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImGuiWindow_TitleBarRect\",\n      \"defaults\": {},\n      \"funcname\": \"TitleBarRect\",\n      \"location\": \"imgui_internal:2581\",\n      \"nonUDT\": 1,\n      \"ov_cimguiname\": \"ImGuiWindow_TitleBarRect\",\n      \"ret\": \"void\",\n      \"signature\": \"()const\",\n      \"stname\": \"ImGuiWindow\"\n    }\n  ],\n  \"ImGuiWindow_destroy\": [\n    {\n      \"args\": \"(ImGuiWindow* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImGuiWindow*\"\n        }\n      ],\n      \"call_args\": \"(self)\",\n      \"cimguiname\": \"ImGuiWindow_destroy\",\n      \"defaults\": {},\n      \"destructor\": true,\n      \"location\": \"imgui_internal:2570\",\n      \"ov_cimguiname\": \"ImGuiWindow_destroy\",\n      \"realdestructor\": true,\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiWindow*)\",\n      \"stname\": \"ImGuiWindow\"\n    }\n  ],\n  \"ImPool_Add\": [\n    {\n      \"args\": \"(ImPool* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPool*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImPool_Add\",\n      \"defaults\": {},\n      \"funcname\": \"Add\",\n      \"location\": \"imgui_internal:687\",\n      \"ov_cimguiname\": \"ImPool_Add\",\n      \"ret\": \"T*\",\n      \"signature\": \"()\",\n      \"stname\": \"ImPool\",\n      \"templated\": true\n    }\n  ],\n  \"ImPool_Clear\": [\n    {\n      \"args\": \"(ImPool* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPool*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImPool_Clear\",\n      \"defaults\": {},\n      \"funcname\": \"Clear\",\n      \"location\": \"imgui_internal:686\",\n      \"ov_cimguiname\": \"ImPool_Clear\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"ImPool\",\n      \"templated\": true\n    }\n  ],\n  \"ImPool_Contains\": [\n    {\n      \"args\": \"(ImPool* self,const T* p)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPool*\"\n        },\n        {\n          \"name\": \"p\",\n          \"type\": \"const T*\"\n        }\n      ],\n      \"argsoriginal\": \"(const T* p)\",\n      \"call_args\": \"(p)\",\n      \"cimguiname\": \"ImPool_Contains\",\n      \"defaults\": {},\n      \"funcname\": \"Contains\",\n      \"location\": \"imgui_internal:685\",\n      \"ov_cimguiname\": \"ImPool_Contains\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const T*)const\",\n      \"stname\": \"ImPool\",\n      \"templated\": true\n    }\n  ],\n  \"ImPool_GetAliveCount\": [\n    {\n      \"args\": \"(ImPool* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPool*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImPool_GetAliveCount\",\n      \"defaults\": {},\n      \"funcname\": \"GetAliveCount\",\n      \"location\": \"imgui_internal:694\",\n      \"ov_cimguiname\": \"ImPool_GetAliveCount\",\n      \"ret\": \"int\",\n      \"signature\": \"()const\",\n      \"stname\": \"ImPool\",\n      \"templated\": true\n    }\n  ],\n  \"ImPool_GetBufSize\": [\n    {\n      \"args\": \"(ImPool* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPool*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImPool_GetBufSize\",\n      \"defaults\": {},\n      \"funcname\": \"GetBufSize\",\n      \"location\": \"imgui_internal:695\",\n      \"ov_cimguiname\": \"ImPool_GetBufSize\",\n      \"ret\": \"int\",\n      \"signature\": \"()const\",\n      \"stname\": \"ImPool\",\n      \"templated\": true\n    }\n  ],\n  \"ImPool_GetByIndex\": [\n    {\n      \"args\": \"(ImPool* self,ImPoolIdx n)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPool*\"\n        },\n        {\n          \"name\": \"n\",\n          \"type\": \"ImPoolIdx\"\n        }\n      ],\n      \"argsoriginal\": \"(ImPoolIdx n)\",\n      \"call_args\": \"(n)\",\n      \"cimguiname\": \"ImPool_GetByIndex\",\n      \"defaults\": {},\n      \"funcname\": \"GetByIndex\",\n      \"location\": \"imgui_internal:682\",\n      \"ov_cimguiname\": \"ImPool_GetByIndex\",\n      \"ret\": \"T*\",\n      \"signature\": \"(ImPoolIdx)\",\n      \"stname\": \"ImPool\",\n      \"templated\": true\n    }\n  ],\n  \"ImPool_GetByKey\": [\n    {\n      \"args\": \"(ImPool* self,ImGuiID key)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPool*\"\n        },\n        {\n          \"name\": \"key\",\n          \"type\": \"ImGuiID\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiID key)\",\n      \"call_args\": \"(key)\",\n      \"cimguiname\": \"ImPool_GetByKey\",\n      \"defaults\": {},\n      \"funcname\": \"GetByKey\",\n      \"location\": \"imgui_internal:681\",\n      \"ov_cimguiname\": \"ImPool_GetByKey\",\n      \"ret\": \"T*\",\n      \"signature\": \"(ImGuiID)\",\n      \"stname\": \"ImPool\",\n      \"templated\": true\n    }\n  ],\n  \"ImPool_GetIndex\": [\n    {\n      \"args\": \"(ImPool* self,const T* p)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPool*\"\n        },\n        {\n          \"name\": \"p\",\n          \"type\": \"const T*\"\n        }\n      ],\n      \"argsoriginal\": \"(const T* p)\",\n      \"call_args\": \"(p)\",\n      \"cimguiname\": \"ImPool_GetIndex\",\n      \"defaults\": {},\n      \"funcname\": \"GetIndex\",\n      \"location\": \"imgui_internal:683\",\n      \"ov_cimguiname\": \"ImPool_GetIndex\",\n      \"ret\": \"ImPoolIdx\",\n      \"signature\": \"(const T*)const\",\n      \"stname\": \"ImPool\",\n      \"templated\": true\n    }\n  ],\n  \"ImPool_GetMapSize\": [\n    {\n      \"args\": \"(ImPool* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPool*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImPool_GetMapSize\",\n      \"defaults\": {},\n      \"funcname\": \"GetMapSize\",\n      \"location\": \"imgui_internal:696\",\n      \"ov_cimguiname\": \"ImPool_GetMapSize\",\n      \"ret\": \"int\",\n      \"signature\": \"()const\",\n      \"stname\": \"ImPool\",\n      \"templated\": true\n    }\n  ],\n  \"ImPool_GetOrAddByKey\": [\n    {\n      \"args\": \"(ImPool* self,ImGuiID key)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPool*\"\n        },\n        {\n          \"name\": \"key\",\n          \"type\": \"ImGuiID\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiID key)\",\n      \"call_args\": \"(key)\",\n      \"cimguiname\": \"ImPool_GetOrAddByKey\",\n      \"defaults\": {},\n      \"funcname\": \"GetOrAddByKey\",\n      \"location\": \"imgui_internal:684\",\n      \"ov_cimguiname\": \"ImPool_GetOrAddByKey\",\n      \"ret\": \"T*\",\n      \"signature\": \"(ImGuiID)\",\n      \"stname\": \"ImPool\",\n      \"templated\": true\n    }\n  ],\n  \"ImPool_ImPool\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImPool_ImPool\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImPool\",\n      \"location\": \"imgui_internal:679\",\n      \"ov_cimguiname\": \"ImPool_ImPool\",\n      \"signature\": \"()\",\n      \"stname\": \"ImPool\",\n      \"templated\": true\n    }\n  ],\n  \"ImPool_Remove\": [\n    {\n      \"args\": \"(ImPool* self,ImGuiID key,const T* p)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPool*\"\n        },\n        {\n          \"name\": \"key\",\n          \"type\": \"ImGuiID\"\n        },\n        {\n          \"name\": \"p\",\n          \"type\": \"const T*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiID key,const T* p)\",\n      \"call_args\": \"(key,p)\",\n      \"cimguiname\": \"ImPool_Remove\",\n      \"defaults\": {},\n      \"funcname\": \"Remove\",\n      \"location\": \"imgui_internal:688\",\n      \"ov_cimguiname\": \"ImPool_Remove_TPtr\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiID,const T*)\",\n      \"stname\": \"ImPool\",\n      \"templated\": true\n    },\n    {\n      \"args\": \"(ImPool* self,ImGuiID key,ImPoolIdx idx)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPool*\"\n        },\n        {\n          \"name\": \"key\",\n          \"type\": \"ImGuiID\"\n        },\n        {\n          \"name\": \"idx\",\n          \"type\": \"ImPoolIdx\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiID key,ImPoolIdx idx)\",\n      \"call_args\": \"(key,idx)\",\n      \"cimguiname\": \"ImPool_Remove\",\n      \"defaults\": {},\n      \"funcname\": \"Remove\",\n      \"location\": \"imgui_internal:689\",\n      \"ov_cimguiname\": \"ImPool_Remove_PoolIdx\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiID,ImPoolIdx)\",\n      \"stname\": \"ImPool\",\n      \"templated\": true\n    }\n  ],\n  \"ImPool_Reserve\": [\n    {\n      \"args\": \"(ImPool* self,int capacity)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPool*\"\n        },\n        {\n          \"name\": \"capacity\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(int capacity)\",\n      \"call_args\": \"(capacity)\",\n      \"cimguiname\": \"ImPool_Reserve\",\n      \"defaults\": {},\n      \"funcname\": \"Reserve\",\n      \"location\": \"imgui_internal:690\",\n      \"ov_cimguiname\": \"ImPool_Reserve\",\n      \"ret\": \"void\",\n      \"signature\": \"(int)\",\n      \"stname\": \"ImPool\",\n      \"templated\": true\n    }\n  ],\n  \"ImPool_TryGetMapData\": [\n    {\n      \"args\": \"(ImPool* self,ImPoolIdx n)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPool*\"\n        },\n        {\n          \"name\": \"n\",\n          \"type\": \"ImPoolIdx\"\n        }\n      ],\n      \"argsoriginal\": \"(ImPoolIdx n)\",\n      \"call_args\": \"(n)\",\n      \"cimguiname\": \"ImPool_TryGetMapData\",\n      \"defaults\": {},\n      \"funcname\": \"TryGetMapData\",\n      \"location\": \"imgui_internal:697\",\n      \"ov_cimguiname\": \"ImPool_TryGetMapData\",\n      \"ret\": \"T*\",\n      \"signature\": \"(ImPoolIdx)\",\n      \"stname\": \"ImPool\",\n      \"templated\": true\n    }\n  ],\n  \"ImPool_destroy\": [\n    {\n      \"args\": \"(ImPool* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPool*\"\n        }\n      ],\n      \"call_args\": \"(self)\",\n      \"cimguiname\": \"ImPool_destroy\",\n      \"defaults\": {},\n      \"destructor\": true,\n      \"location\": \"imgui_internal:680\",\n      \"ov_cimguiname\": \"ImPool_destroy\",\n      \"realdestructor\": true,\n      \"ret\": \"void\",\n      \"signature\": \"(ImPool*)\",\n      \"stname\": \"ImPool\",\n      \"templated\": true\n    }\n  ],\n  \"ImRect_Add\": [\n    {\n      \"args\": \"(ImRect* self,const ImVec2 p)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImRect*\"\n        },\n        {\n          \"name\": \"p\",\n          \"type\": \"const ImVec2\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImVec2& p)\",\n      \"call_args\": \"(p)\",\n      \"cimguiname\": \"ImRect_Add\",\n      \"defaults\": {},\n      \"funcname\": \"Add\",\n      \"location\": \"imgui_internal:550\",\n      \"ov_cimguiname\": \"ImRect_Add_Vec2\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImVec2)\",\n      \"stname\": \"ImRect\"\n    },\n    {\n      \"args\": \"(ImRect* self,const ImRect r)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImRect*\"\n        },\n        {\n          \"name\": \"r\",\n          \"type\": \"const ImRect\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImRect& r)\",\n      \"call_args\": \"(r)\",\n      \"cimguiname\": \"ImRect_Add\",\n      \"defaults\": {},\n      \"funcname\": \"Add\",\n      \"location\": \"imgui_internal:551\",\n      \"ov_cimguiname\": \"ImRect_Add_Rect\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImRect)\",\n      \"stname\": \"ImRect\"\n    }\n  ],\n  \"ImRect_ClipWith\": [\n    {\n      \"args\": \"(ImRect* self,const ImRect r)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImRect*\"\n        },\n        {\n          \"name\": \"r\",\n          \"type\": \"const ImRect\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImRect& r)\",\n      \"call_args\": \"(r)\",\n      \"cimguiname\": \"ImRect_ClipWith\",\n      \"defaults\": {},\n      \"funcname\": \"ClipWith\",\n      \"location\": \"imgui_internal:557\",\n      \"ov_cimguiname\": \"ImRect_ClipWith\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImRect)\",\n      \"stname\": \"ImRect\"\n    }\n  ],\n  \"ImRect_ClipWithFull\": [\n    {\n      \"args\": \"(ImRect* self,const ImRect r)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImRect*\"\n        },\n        {\n          \"name\": \"r\",\n          \"type\": \"const ImRect\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImRect& r)\",\n      \"call_args\": \"(r)\",\n      \"cimguiname\": \"ImRect_ClipWithFull\",\n      \"defaults\": {},\n      \"funcname\": \"ClipWithFull\",\n      \"location\": \"imgui_internal:558\",\n      \"ov_cimguiname\": \"ImRect_ClipWithFull\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImRect)\",\n      \"stname\": \"ImRect\"\n    }\n  ],\n  \"ImRect_Contains\": [\n    {\n      \"args\": \"(ImRect* self,const ImVec2 p)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImRect*\"\n        },\n        {\n          \"name\": \"p\",\n          \"type\": \"const ImVec2\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImVec2& p)\",\n      \"call_args\": \"(p)\",\n      \"cimguiname\": \"ImRect_Contains\",\n      \"defaults\": {},\n      \"funcname\": \"Contains\",\n      \"location\": \"imgui_internal:546\",\n      \"ov_cimguiname\": \"ImRect_Contains_Vec2\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const ImVec2)const\",\n      \"stname\": \"ImRect\"\n    },\n    {\n      \"args\": \"(ImRect* self,const ImRect r)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImRect*\"\n        },\n        {\n          \"name\": \"r\",\n          \"type\": \"const ImRect\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImRect& r)\",\n      \"call_args\": \"(r)\",\n      \"cimguiname\": \"ImRect_Contains\",\n      \"defaults\": {},\n      \"funcname\": \"Contains\",\n      \"location\": \"imgui_internal:547\",\n      \"ov_cimguiname\": \"ImRect_Contains_Rect\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const ImRect)const\",\n      \"stname\": \"ImRect\"\n    }\n  ],\n  \"ImRect_ContainsWithPad\": [\n    {\n      \"args\": \"(ImRect* self,const ImVec2 p,const ImVec2 pad)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImRect*\"\n        },\n        {\n          \"name\": \"p\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"pad\",\n          \"type\": \"const ImVec2\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImVec2& p,const ImVec2& pad)\",\n      \"call_args\": \"(p,pad)\",\n      \"cimguiname\": \"ImRect_ContainsWithPad\",\n      \"defaults\": {},\n      \"funcname\": \"ContainsWithPad\",\n      \"location\": \"imgui_internal:548\",\n      \"ov_cimguiname\": \"ImRect_ContainsWithPad\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const ImVec2,const ImVec2)const\",\n      \"stname\": \"ImRect\"\n    }\n  ],\n  \"ImRect_Expand\": [\n    {\n      \"args\": \"(ImRect* self,const float amount)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImRect*\"\n        },\n        {\n          \"name\": \"amount\",\n          \"type\": \"const float\"\n        }\n      ],\n      \"argsoriginal\": \"(const float amount)\",\n      \"call_args\": \"(amount)\",\n      \"cimguiname\": \"ImRect_Expand\",\n      \"defaults\": {},\n      \"funcname\": \"Expand\",\n      \"location\": \"imgui_internal:552\",\n      \"ov_cimguiname\": \"ImRect_Expand_Float\",\n      \"ret\": \"void\",\n      \"signature\": \"(const float)\",\n      \"stname\": \"ImRect\"\n    },\n    {\n      \"args\": \"(ImRect* self,const ImVec2 amount)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImRect*\"\n        },\n        {\n          \"name\": \"amount\",\n          \"type\": \"const ImVec2\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImVec2& amount)\",\n      \"call_args\": \"(amount)\",\n      \"cimguiname\": \"ImRect_Expand\",\n      \"defaults\": {},\n      \"funcname\": \"Expand\",\n      \"location\": \"imgui_internal:553\",\n      \"ov_cimguiname\": \"ImRect_Expand_Vec2\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImVec2)\",\n      \"stname\": \"ImRect\"\n    }\n  ],\n  \"ImRect_Floor\": [\n    {\n      \"args\": \"(ImRect* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImRect*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImRect_Floor\",\n      \"defaults\": {},\n      \"funcname\": \"Floor\",\n      \"location\": \"imgui_internal:559\",\n      \"ov_cimguiname\": \"ImRect_Floor\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"ImRect\"\n    }\n  ],\n  \"ImRect_GetArea\": [\n    {\n      \"args\": \"(ImRect* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImRect*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImRect_GetArea\",\n      \"defaults\": {},\n      \"funcname\": \"GetArea\",\n      \"location\": \"imgui_internal:541\",\n      \"ov_cimguiname\": \"ImRect_GetArea\",\n      \"ret\": \"float\",\n      \"signature\": \"()const\",\n      \"stname\": \"ImRect\"\n    }\n  ],\n  \"ImRect_GetBL\": [\n    {\n      \"args\": \"(ImVec2 *pOut,ImRect* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"pOut\",\n          \"type\": \"ImVec2*\"\n        },\n        {\n          \"name\": \"self\",\n          \"type\": \"ImRect*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImRect_GetBL\",\n      \"defaults\": {},\n      \"funcname\": \"GetBL\",\n      \"location\": \"imgui_internal:544\",\n      \"nonUDT\": 1,\n      \"ov_cimguiname\": \"ImRect_GetBL\",\n      \"ret\": \"void\",\n      \"signature\": \"()const\",\n      \"stname\": \"ImRect\"\n    }\n  ],\n  \"ImRect_GetBR\": [\n    {\n      \"args\": \"(ImVec2 *pOut,ImRect* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"pOut\",\n          \"type\": \"ImVec2*\"\n        },\n        {\n          \"name\": \"self\",\n          \"type\": \"ImRect*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImRect_GetBR\",\n      \"defaults\": {},\n      \"funcname\": \"GetBR\",\n      \"location\": \"imgui_internal:545\",\n      \"nonUDT\": 1,\n      \"ov_cimguiname\": \"ImRect_GetBR\",\n      \"ret\": \"void\",\n      \"signature\": \"()const\",\n      \"stname\": \"ImRect\"\n    }\n  ],\n  \"ImRect_GetCenter\": [\n    {\n      \"args\": \"(ImVec2 *pOut,ImRect* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"pOut\",\n          \"type\": \"ImVec2*\"\n        },\n        {\n          \"name\": \"self\",\n          \"type\": \"ImRect*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImRect_GetCenter\",\n      \"defaults\": {},\n      \"funcname\": \"GetCenter\",\n      \"location\": \"imgui_internal:537\",\n      \"nonUDT\": 1,\n      \"ov_cimguiname\": \"ImRect_GetCenter\",\n      \"ret\": \"void\",\n      \"signature\": \"()const\",\n      \"stname\": \"ImRect\"\n    }\n  ],\n  \"ImRect_GetHeight\": [\n    {\n      \"args\": \"(ImRect* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImRect*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImRect_GetHeight\",\n      \"defaults\": {},\n      \"funcname\": \"GetHeight\",\n      \"location\": \"imgui_internal:540\",\n      \"ov_cimguiname\": \"ImRect_GetHeight\",\n      \"ret\": \"float\",\n      \"signature\": \"()const\",\n      \"stname\": \"ImRect\"\n    }\n  ],\n  \"ImRect_GetSize\": [\n    {\n      \"args\": \"(ImVec2 *pOut,ImRect* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"pOut\",\n          \"type\": \"ImVec2*\"\n        },\n        {\n          \"name\": \"self\",\n          \"type\": \"ImRect*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImRect_GetSize\",\n      \"defaults\": {},\n      \"funcname\": \"GetSize\",\n      \"location\": \"imgui_internal:538\",\n      \"nonUDT\": 1,\n      \"ov_cimguiname\": \"ImRect_GetSize\",\n      \"ret\": \"void\",\n      \"signature\": \"()const\",\n      \"stname\": \"ImRect\"\n    }\n  ],\n  \"ImRect_GetTL\": [\n    {\n      \"args\": \"(ImVec2 *pOut,ImRect* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"pOut\",\n          \"type\": \"ImVec2*\"\n        },\n        {\n          \"name\": \"self\",\n          \"type\": \"ImRect*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImRect_GetTL\",\n      \"defaults\": {},\n      \"funcname\": \"GetTL\",\n      \"location\": \"imgui_internal:542\",\n      \"nonUDT\": 1,\n      \"ov_cimguiname\": \"ImRect_GetTL\",\n      \"ret\": \"void\",\n      \"signature\": \"()const\",\n      \"stname\": \"ImRect\"\n    }\n  ],\n  \"ImRect_GetTR\": [\n    {\n      \"args\": \"(ImVec2 *pOut,ImRect* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"pOut\",\n          \"type\": \"ImVec2*\"\n        },\n        {\n          \"name\": \"self\",\n          \"type\": \"ImRect*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImRect_GetTR\",\n      \"defaults\": {},\n      \"funcname\": \"GetTR\",\n      \"location\": \"imgui_internal:543\",\n      \"nonUDT\": 1,\n      \"ov_cimguiname\": \"ImRect_GetTR\",\n      \"ret\": \"void\",\n      \"signature\": \"()const\",\n      \"stname\": \"ImRect\"\n    }\n  ],\n  \"ImRect_GetWidth\": [\n    {\n      \"args\": \"(ImRect* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImRect*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImRect_GetWidth\",\n      \"defaults\": {},\n      \"funcname\": \"GetWidth\",\n      \"location\": \"imgui_internal:539\",\n      \"ov_cimguiname\": \"ImRect_GetWidth\",\n      \"ret\": \"float\",\n      \"signature\": \"()const\",\n      \"stname\": \"ImRect\"\n    }\n  ],\n  \"ImRect_ImRect\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImRect_ImRect\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImRect\",\n      \"location\": \"imgui_internal:532\",\n      \"ov_cimguiname\": \"ImRect_ImRect_Nil\",\n      \"signature\": \"()\",\n      \"stname\": \"ImRect\"\n    },\n    {\n      \"args\": \"(const ImVec2 min,const ImVec2 max)\",\n      \"argsT\": [\n        {\n          \"name\": \"min\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"max\",\n          \"type\": \"const ImVec2\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImVec2& min,const ImVec2& max)\",\n      \"call_args\": \"(min,max)\",\n      \"cimguiname\": \"ImRect_ImRect\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImRect\",\n      \"location\": \"imgui_internal:533\",\n      \"ov_cimguiname\": \"ImRect_ImRect_Vec2\",\n      \"signature\": \"(const ImVec2,const ImVec2)\",\n      \"stname\": \"ImRect\"\n    },\n    {\n      \"args\": \"(const ImVec4 v)\",\n      \"argsT\": [\n        {\n          \"name\": \"v\",\n          \"type\": \"const ImVec4\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImVec4& v)\",\n      \"call_args\": \"(v)\",\n      \"cimguiname\": \"ImRect_ImRect\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImRect\",\n      \"location\": \"imgui_internal:534\",\n      \"ov_cimguiname\": \"ImRect_ImRect_Vec4\",\n      \"signature\": \"(const ImVec4)\",\n      \"stname\": \"ImRect\"\n    },\n    {\n      \"args\": \"(float x1,float y1,float x2,float y2)\",\n      \"argsT\": [\n        {\n          \"name\": \"x1\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"y1\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"x2\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"y2\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(float x1,float y1,float x2,float y2)\",\n      \"call_args\": \"(x1,y1,x2,y2)\",\n      \"cimguiname\": \"ImRect_ImRect\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImRect\",\n      \"location\": \"imgui_internal:535\",\n      \"ov_cimguiname\": \"ImRect_ImRect_Float\",\n      \"signature\": \"(float,float,float,float)\",\n      \"stname\": \"ImRect\"\n    }\n  ],\n  \"ImRect_IsInverted\": [\n    {\n      \"args\": \"(ImRect* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImRect*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImRect_IsInverted\",\n      \"defaults\": {},\n      \"funcname\": \"IsInverted\",\n      \"location\": \"imgui_internal:560\",\n      \"ov_cimguiname\": \"ImRect_IsInverted\",\n      \"ret\": \"bool\",\n      \"signature\": \"()const\",\n      \"stname\": \"ImRect\"\n    }\n  ],\n  \"ImRect_Overlaps\": [\n    {\n      \"args\": \"(ImRect* self,const ImRect r)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImRect*\"\n        },\n        {\n          \"name\": \"r\",\n          \"type\": \"const ImRect\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImRect& r)\",\n      \"call_args\": \"(r)\",\n      \"cimguiname\": \"ImRect_Overlaps\",\n      \"defaults\": {},\n      \"funcname\": \"Overlaps\",\n      \"location\": \"imgui_internal:549\",\n      \"ov_cimguiname\": \"ImRect_Overlaps\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const ImRect)const\",\n      \"stname\": \"ImRect\"\n    }\n  ],\n  \"ImRect_ToVec4\": [\n    {\n      \"args\": \"(ImVec4 *pOut,ImRect* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"pOut\",\n          \"type\": \"ImVec4*\"\n        },\n        {\n          \"name\": \"self\",\n          \"type\": \"ImRect*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImRect_ToVec4\",\n      \"defaults\": {},\n      \"funcname\": \"ToVec4\",\n      \"location\": \"imgui_internal:561\",\n      \"nonUDT\": 1,\n      \"ov_cimguiname\": \"ImRect_ToVec4\",\n      \"ret\": \"void\",\n      \"signature\": \"()const\",\n      \"stname\": \"ImRect\"\n    }\n  ],\n  \"ImRect_Translate\": [\n    {\n      \"args\": \"(ImRect* self,const ImVec2 d)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImRect*\"\n        },\n        {\n          \"name\": \"d\",\n          \"type\": \"const ImVec2\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImVec2& d)\",\n      \"call_args\": \"(d)\",\n      \"cimguiname\": \"ImRect_Translate\",\n      \"defaults\": {},\n      \"funcname\": \"Translate\",\n      \"location\": \"imgui_internal:554\",\n      \"ov_cimguiname\": \"ImRect_Translate\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImVec2)\",\n      \"stname\": \"ImRect\"\n    }\n  ],\n  \"ImRect_TranslateX\": [\n    {\n      \"args\": \"(ImRect* self,float dx)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImRect*\"\n        },\n        {\n          \"name\": \"dx\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(float dx)\",\n      \"call_args\": \"(dx)\",\n      \"cimguiname\": \"ImRect_TranslateX\",\n      \"defaults\": {},\n      \"funcname\": \"TranslateX\",\n      \"location\": \"imgui_internal:555\",\n      \"ov_cimguiname\": \"ImRect_TranslateX\",\n      \"ret\": \"void\",\n      \"signature\": \"(float)\",\n      \"stname\": \"ImRect\"\n    }\n  ],\n  \"ImRect_TranslateY\": [\n    {\n      \"args\": \"(ImRect* self,float dy)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImRect*\"\n        },\n        {\n          \"name\": \"dy\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(float dy)\",\n      \"call_args\": \"(dy)\",\n      \"cimguiname\": \"ImRect_TranslateY\",\n      \"defaults\": {},\n      \"funcname\": \"TranslateY\",\n      \"location\": \"imgui_internal:556\",\n      \"ov_cimguiname\": \"ImRect_TranslateY\",\n      \"ret\": \"void\",\n      \"signature\": \"(float)\",\n      \"stname\": \"ImRect\"\n    }\n  ],\n  \"ImRect_destroy\": [\n    {\n      \"args\": \"(ImRect* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImRect*\"\n        }\n      ],\n      \"call_args\": \"(self)\",\n      \"cimguiname\": \"ImRect_destroy\",\n      \"defaults\": {},\n      \"destructor\": true,\n      \"location\": \"imgui_internal:532\",\n      \"ov_cimguiname\": \"ImRect_destroy\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImRect*)\",\n      \"stname\": \"ImRect\"\n    }\n  ],\n  \"ImSpanAllocator_GetArenaSizeInBytes\": [\n    {\n      \"args\": \"(ImSpanAllocator* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImSpanAllocator*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImSpanAllocator_GetArenaSizeInBytes\",\n      \"defaults\": {},\n      \"funcname\": \"GetArenaSizeInBytes\",\n      \"location\": \"imgui_internal:659\",\n      \"ov_cimguiname\": \"ImSpanAllocator_GetArenaSizeInBytes\",\n      \"ret\": \"int\",\n      \"signature\": \"()\",\n      \"stname\": \"ImSpanAllocator\",\n      \"templated\": true\n    }\n  ],\n  \"ImSpanAllocator_GetSpanPtrBegin\": [\n    {\n      \"args\": \"(ImSpanAllocator* self,int n)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImSpanAllocator*\"\n        },\n        {\n          \"name\": \"n\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(int n)\",\n      \"call_args\": \"(n)\",\n      \"cimguiname\": \"ImSpanAllocator_GetSpanPtrBegin\",\n      \"defaults\": {},\n      \"funcname\": \"GetSpanPtrBegin\",\n      \"location\": \"imgui_internal:661\",\n      \"ov_cimguiname\": \"ImSpanAllocator_GetSpanPtrBegin\",\n      \"ret\": \"void*\",\n      \"signature\": \"(int)\",\n      \"stname\": \"ImSpanAllocator\",\n      \"templated\": true\n    }\n  ],\n  \"ImSpanAllocator_GetSpanPtrEnd\": [\n    {\n      \"args\": \"(ImSpanAllocator* self,int n)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImSpanAllocator*\"\n        },\n        {\n          \"name\": \"n\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(int n)\",\n      \"call_args\": \"(n)\",\n      \"cimguiname\": \"ImSpanAllocator_GetSpanPtrEnd\",\n      \"defaults\": {},\n      \"funcname\": \"GetSpanPtrEnd\",\n      \"location\": \"imgui_internal:662\",\n      \"ov_cimguiname\": \"ImSpanAllocator_GetSpanPtrEnd\",\n      \"ret\": \"void*\",\n      \"signature\": \"(int)\",\n      \"stname\": \"ImSpanAllocator\",\n      \"templated\": true\n    }\n  ],\n  \"ImSpanAllocator_ImSpanAllocator\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImSpanAllocator_ImSpanAllocator\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImSpanAllocator\",\n      \"location\": \"imgui_internal:657\",\n      \"ov_cimguiname\": \"ImSpanAllocator_ImSpanAllocator\",\n      \"signature\": \"()\",\n      \"stname\": \"ImSpanAllocator\",\n      \"templated\": true\n    }\n  ],\n  \"ImSpanAllocator_Reserve\": [\n    {\n      \"args\": \"(ImSpanAllocator* self,int n,size_t sz,int a)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImSpanAllocator*\"\n        },\n        {\n          \"name\": \"n\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"sz\",\n          \"type\": \"size_t\"\n        },\n        {\n          \"name\": \"a\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(int n,size_t sz,int a=4)\",\n      \"call_args\": \"(n,sz,a)\",\n      \"cimguiname\": \"ImSpanAllocator_Reserve\",\n      \"defaults\": {\n        \"a\": \"4\"\n      },\n      \"funcname\": \"Reserve\",\n      \"location\": \"imgui_internal:658\",\n      \"ov_cimguiname\": \"ImSpanAllocator_Reserve\",\n      \"ret\": \"void\",\n      \"signature\": \"(int,size_t,int)\",\n      \"stname\": \"ImSpanAllocator\",\n      \"templated\": true\n    }\n  ],\n  \"ImSpanAllocator_SetArenaBasePtr\": [\n    {\n      \"args\": \"(ImSpanAllocator* self,void* base_ptr)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImSpanAllocator*\"\n        },\n        {\n          \"name\": \"base_ptr\",\n          \"type\": \"void*\"\n        }\n      ],\n      \"argsoriginal\": \"(void* base_ptr)\",\n      \"call_args\": \"(base_ptr)\",\n      \"cimguiname\": \"ImSpanAllocator_SetArenaBasePtr\",\n      \"defaults\": {},\n      \"funcname\": \"SetArenaBasePtr\",\n      \"location\": \"imgui_internal:660\",\n      \"ov_cimguiname\": \"ImSpanAllocator_SetArenaBasePtr\",\n      \"ret\": \"void\",\n      \"signature\": \"(void*)\",\n      \"stname\": \"ImSpanAllocator\",\n      \"templated\": true\n    }\n  ],\n  \"ImSpanAllocator_destroy\": [\n    {\n      \"args\": \"(ImSpanAllocator* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImSpanAllocator*\"\n        }\n      ],\n      \"call_args\": \"(self)\",\n      \"cimguiname\": \"ImSpanAllocator_destroy\",\n      \"defaults\": {},\n      \"destructor\": true,\n      \"location\": \"imgui_internal:657\",\n      \"ov_cimguiname\": \"ImSpanAllocator_destroy\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImSpanAllocator*)\",\n      \"stname\": \"ImSpanAllocator\",\n      \"templated\": true\n    }\n  ],\n  \"ImSpan_ImSpan\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImSpan_ImSpan\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImSpan\",\n      \"location\": \"imgui_internal:625\",\n      \"ov_cimguiname\": \"ImSpan_ImSpan_Nil\",\n      \"signature\": \"()\",\n      \"stname\": \"ImSpan\",\n      \"templated\": true\n    },\n    {\n      \"args\": \"(T* data,int size)\",\n      \"argsT\": [\n        {\n          \"name\": \"data\",\n          \"type\": \"T*\"\n        },\n        {\n          \"name\": \"size\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(T* data,int size)\",\n      \"call_args\": \"(data,size)\",\n      \"cimguiname\": \"ImSpan_ImSpan\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImSpan\",\n      \"location\": \"imgui_internal:626\",\n      \"ov_cimguiname\": \"ImSpan_ImSpan_TPtrInt\",\n      \"signature\": \"(T*,int)\",\n      \"stname\": \"ImSpan\",\n      \"templated\": true\n    },\n    {\n      \"args\": \"(T* data,T* data_end)\",\n      \"argsT\": [\n        {\n          \"name\": \"data\",\n          \"type\": \"T*\"\n        },\n        {\n          \"name\": \"data_end\",\n          \"type\": \"T*\"\n        }\n      ],\n      \"argsoriginal\": \"(T* data,T* data_end)\",\n      \"call_args\": \"(data,data_end)\",\n      \"cimguiname\": \"ImSpan_ImSpan\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImSpan\",\n      \"location\": \"imgui_internal:627\",\n      \"ov_cimguiname\": \"ImSpan_ImSpan_TPtrTPtr\",\n      \"signature\": \"(T*,T*)\",\n      \"stname\": \"ImSpan\",\n      \"templated\": true\n    }\n  ],\n  \"ImSpan_begin\": [\n    {\n      \"args\": \"(ImSpan* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImSpan*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImSpan_begin\",\n      \"defaults\": {},\n      \"funcname\": \"begin\",\n      \"location\": \"imgui_internal:636\",\n      \"ov_cimguiname\": \"ImSpan_begin_Nil\",\n      \"ret\": \"T*\",\n      \"signature\": \"()\",\n      \"stname\": \"ImSpan\",\n      \"templated\": true\n    },\n    {\n      \"args\": \"(ImSpan* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImSpan*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImSpan_begin\",\n      \"defaults\": {},\n      \"funcname\": \"begin\",\n      \"location\": \"imgui_internal:637\",\n      \"ov_cimguiname\": \"ImSpan_begin__const\",\n      \"ret\": \"const T*\",\n      \"signature\": \"()const\",\n      \"stname\": \"ImSpan\",\n      \"templated\": true\n    }\n  ],\n  \"ImSpan_destroy\": [\n    {\n      \"args\": \"(ImSpan* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImSpan*\"\n        }\n      ],\n      \"call_args\": \"(self)\",\n      \"cimguiname\": \"ImSpan_destroy\",\n      \"defaults\": {},\n      \"destructor\": true,\n      \"location\": \"imgui_internal:625\",\n      \"ov_cimguiname\": \"ImSpan_destroy\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImSpan*)\",\n      \"stname\": \"ImSpan\",\n      \"templated\": true\n    }\n  ],\n  \"ImSpan_end\": [\n    {\n      \"args\": \"(ImSpan* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImSpan*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImSpan_end\",\n      \"defaults\": {},\n      \"funcname\": \"end\",\n      \"location\": \"imgui_internal:638\",\n      \"ov_cimguiname\": \"ImSpan_end_Nil\",\n      \"ret\": \"T*\",\n      \"signature\": \"()\",\n      \"stname\": \"ImSpan\",\n      \"templated\": true\n    },\n    {\n      \"args\": \"(ImSpan* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImSpan*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImSpan_end\",\n      \"defaults\": {},\n      \"funcname\": \"end\",\n      \"location\": \"imgui_internal:639\",\n      \"ov_cimguiname\": \"ImSpan_end__const\",\n      \"ret\": \"const T*\",\n      \"signature\": \"()const\",\n      \"stname\": \"ImSpan\",\n      \"templated\": true\n    }\n  ],\n  \"ImSpan_index_from_ptr\": [\n    {\n      \"args\": \"(ImSpan* self,const T* it)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImSpan*\"\n        },\n        {\n          \"name\": \"it\",\n          \"type\": \"const T*\"\n        }\n      ],\n      \"argsoriginal\": \"(const T* it)\",\n      \"call_args\": \"(it)\",\n      \"cimguiname\": \"ImSpan_index_from_ptr\",\n      \"defaults\": {},\n      \"funcname\": \"index_from_ptr\",\n      \"location\": \"imgui_internal:642\",\n      \"ov_cimguiname\": \"ImSpan_index_from_ptr\",\n      \"ret\": \"int\",\n      \"signature\": \"(const T*)const\",\n      \"stname\": \"ImSpan\",\n      \"templated\": true\n    }\n  ],\n  \"ImSpan_set\": [\n    {\n      \"args\": \"(ImSpan* self,T* data,int size)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImSpan*\"\n        },\n        {\n          \"name\": \"data\",\n          \"type\": \"T*\"\n        },\n        {\n          \"name\": \"size\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(T* data,int size)\",\n      \"call_args\": \"(data,size)\",\n      \"cimguiname\": \"ImSpan_set\",\n      \"defaults\": {},\n      \"funcname\": \"set\",\n      \"location\": \"imgui_internal:629\",\n      \"ov_cimguiname\": \"ImSpan_set_Int\",\n      \"ret\": \"void\",\n      \"signature\": \"(T*,int)\",\n      \"stname\": \"ImSpan\",\n      \"templated\": true\n    },\n    {\n      \"args\": \"(ImSpan* self,T* data,T* data_end)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImSpan*\"\n        },\n        {\n          \"name\": \"data\",\n          \"type\": \"T*\"\n        },\n        {\n          \"name\": \"data_end\",\n          \"type\": \"T*\"\n        }\n      ],\n      \"argsoriginal\": \"(T* data,T* data_end)\",\n      \"call_args\": \"(data,data_end)\",\n      \"cimguiname\": \"ImSpan_set\",\n      \"defaults\": {},\n      \"funcname\": \"set\",\n      \"location\": \"imgui_internal:630\",\n      \"ov_cimguiname\": \"ImSpan_set_TPtr\",\n      \"ret\": \"void\",\n      \"signature\": \"(T*,T*)\",\n      \"stname\": \"ImSpan\",\n      \"templated\": true\n    }\n  ],\n  \"ImSpan_size\": [\n    {\n      \"args\": \"(ImSpan* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImSpan*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImSpan_size\",\n      \"defaults\": {},\n      \"funcname\": \"size\",\n      \"location\": \"imgui_internal:631\",\n      \"ov_cimguiname\": \"ImSpan_size\",\n      \"ret\": \"int\",\n      \"signature\": \"()const\",\n      \"stname\": \"ImSpan\",\n      \"templated\": true\n    }\n  ],\n  \"ImSpan_size_in_bytes\": [\n    {\n      \"args\": \"(ImSpan* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImSpan*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImSpan_size_in_bytes\",\n      \"defaults\": {},\n      \"funcname\": \"size_in_bytes\",\n      \"location\": \"imgui_internal:632\",\n      \"ov_cimguiname\": \"ImSpan_size_in_bytes\",\n      \"ret\": \"int\",\n      \"signature\": \"()const\",\n      \"stname\": \"ImSpan\",\n      \"templated\": true\n    }\n  ],\n  \"ImVec1_ImVec1\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImVec1_ImVec1\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImVec1\",\n      \"location\": \"imgui_internal:512\",\n      \"ov_cimguiname\": \"ImVec1_ImVec1_Nil\",\n      \"signature\": \"()\",\n      \"stname\": \"ImVec1\"\n    },\n    {\n      \"args\": \"(float _x)\",\n      \"argsT\": [\n        {\n          \"name\": \"_x\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(float _x)\",\n      \"call_args\": \"(_x)\",\n      \"cimguiname\": \"ImVec1_ImVec1\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImVec1\",\n      \"location\": \"imgui_internal:513\",\n      \"ov_cimguiname\": \"ImVec1_ImVec1_Float\",\n      \"signature\": \"(float)\",\n      \"stname\": \"ImVec1\"\n    }\n  ],\n  \"ImVec1_destroy\": [\n    {\n      \"args\": \"(ImVec1* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImVec1*\"\n        }\n      ],\n      \"call_args\": \"(self)\",\n      \"cimguiname\": \"ImVec1_destroy\",\n      \"defaults\": {},\n      \"destructor\": true,\n      \"location\": \"imgui_internal:512\",\n      \"ov_cimguiname\": \"ImVec1_destroy\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImVec1*)\",\n      \"stname\": \"ImVec1\"\n    }\n  ],\n  \"ImVec2_ImVec2\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImVec2_ImVec2\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImVec2\",\n      \"location\": \"imgui:295\",\n      \"ov_cimguiname\": \"ImVec2_ImVec2_Nil\",\n      \"signature\": \"()\",\n      \"stname\": \"ImVec2\"\n    },\n    {\n      \"args\": \"(float _x,float _y)\",\n      \"argsT\": [\n        {\n          \"name\": \"_x\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"_y\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(float _x,float _y)\",\n      \"call_args\": \"(_x,_y)\",\n      \"cimguiname\": \"ImVec2_ImVec2\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImVec2\",\n      \"location\": \"imgui:296\",\n      \"ov_cimguiname\": \"ImVec2_ImVec2_Float\",\n      \"signature\": \"(float,float)\",\n      \"stname\": \"ImVec2\"\n    }\n  ],\n  \"ImVec2_destroy\": [\n    {\n      \"args\": \"(ImVec2* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImVec2*\"\n        }\n      ],\n      \"call_args\": \"(self)\",\n      \"cimguiname\": \"ImVec2_destroy\",\n      \"defaults\": {},\n      \"destructor\": true,\n      \"location\": \"imgui:295\",\n      \"ov_cimguiname\": \"ImVec2_destroy\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImVec2*)\",\n      \"stname\": \"ImVec2\"\n    }\n  ],\n  \"ImVec2ih_ImVec2ih\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImVec2ih_ImVec2ih\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImVec2ih\",\n      \"location\": \"imgui_internal:520\",\n      \"ov_cimguiname\": \"ImVec2ih_ImVec2ih_Nil\",\n      \"signature\": \"()\",\n      \"stname\": \"ImVec2ih\"\n    },\n    {\n      \"args\": \"(short _x,short _y)\",\n      \"argsT\": [\n        {\n          \"name\": \"_x\",\n          \"type\": \"short\"\n        },\n        {\n          \"name\": \"_y\",\n          \"type\": \"short\"\n        }\n      ],\n      \"argsoriginal\": \"(short _x,short _y)\",\n      \"call_args\": \"(_x,_y)\",\n      \"cimguiname\": \"ImVec2ih_ImVec2ih\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImVec2ih\",\n      \"location\": \"imgui_internal:521\",\n      \"ov_cimguiname\": \"ImVec2ih_ImVec2ih_short\",\n      \"signature\": \"(short,short)\",\n      \"stname\": \"ImVec2ih\"\n    },\n    {\n      \"args\": \"(const ImVec2 rhs)\",\n      \"argsT\": [\n        {\n          \"name\": \"rhs\",\n          \"type\": \"const ImVec2\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImVec2& rhs)\",\n      \"call_args\": \"(rhs)\",\n      \"cimguiname\": \"ImVec2ih_ImVec2ih\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImVec2ih\",\n      \"location\": \"imgui_internal:522\",\n      \"ov_cimguiname\": \"ImVec2ih_ImVec2ih_Vec2\",\n      \"signature\": \"(const ImVec2)\",\n      \"stname\": \"ImVec2ih\"\n    }\n  ],\n  \"ImVec2ih_destroy\": [\n    {\n      \"args\": \"(ImVec2ih* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImVec2ih*\"\n        }\n      ],\n      \"call_args\": \"(self)\",\n      \"cimguiname\": \"ImVec2ih_destroy\",\n      \"defaults\": {},\n      \"destructor\": true,\n      \"location\": \"imgui_internal:520\",\n      \"ov_cimguiname\": \"ImVec2ih_destroy\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImVec2ih*)\",\n      \"stname\": \"ImVec2ih\"\n    }\n  ],\n  \"ImVec4_ImVec4\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImVec4_ImVec4\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImVec4\",\n      \"location\": \"imgui:308\",\n      \"ov_cimguiname\": \"ImVec4_ImVec4_Nil\",\n      \"signature\": \"()\",\n      \"stname\": \"ImVec4\"\n    },\n    {\n      \"args\": \"(float _x,float _y,float _z,float _w)\",\n      \"argsT\": [\n        {\n          \"name\": \"_x\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"_y\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"_z\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"_w\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(float _x,float _y,float _z,float _w)\",\n      \"call_args\": \"(_x,_y,_z,_w)\",\n      \"cimguiname\": \"ImVec4_ImVec4\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImVec4\",\n      \"location\": \"imgui:309\",\n      \"ov_cimguiname\": \"ImVec4_ImVec4_Float\",\n      \"signature\": \"(float,float,float,float)\",\n      \"stname\": \"ImVec4\"\n    }\n  ],\n  \"ImVec4_destroy\": [\n    {\n      \"args\": \"(ImVec4* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImVec4*\"\n        }\n      ],\n      \"call_args\": \"(self)\",\n      \"cimguiname\": \"ImVec4_destroy\",\n      \"defaults\": {},\n      \"destructor\": true,\n      \"location\": \"imgui:308\",\n      \"ov_cimguiname\": \"ImVec4_destroy\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImVec4*)\",\n      \"stname\": \"ImVec4\"\n    }\n  ],\n  \"ImVector_ImVector\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImVector_ImVector\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImVector\",\n      \"location\": \"imgui:2069\",\n      \"ov_cimguiname\": \"ImVector_ImVector_Nil\",\n      \"signature\": \"()\",\n      \"stname\": \"ImVector\",\n      \"templated\": true\n    },\n    {\n      \"args\": \"(const ImVector_T  src)\",\n      \"argsT\": [\n        {\n          \"name\": \"src\",\n          \"type\": \"const ImVector_T \"\n        }\n      ],\n      \"argsoriginal\": \"(const ImVector<T>& src)\",\n      \"call_args\": \"(src)\",\n      \"cimguiname\": \"ImVector_ImVector\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImVector\",\n      \"location\": \"imgui:2070\",\n      \"ov_cimguiname\": \"ImVector_ImVector_Vector_T_\",\n      \"signature\": \"(const ImVector_T )\",\n      \"stname\": \"ImVector\",\n      \"templated\": true\n    }\n  ],\n  \"ImVector__grow_capacity\": [\n    {\n      \"args\": \"(ImVector* self,int sz)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImVector*\"\n        },\n        {\n          \"name\": \"sz\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(int sz)\",\n      \"call_args\": \"(sz)\",\n      \"cimguiname\": \"ImVector__grow_capacity\",\n      \"defaults\": {},\n      \"funcname\": \"_grow_capacity\",\n      \"location\": \"imgui:2096\",\n      \"ov_cimguiname\": \"ImVector__grow_capacity\",\n      \"ret\": \"int\",\n      \"signature\": \"(int)const\",\n      \"stname\": \"ImVector\",\n      \"templated\": true\n    }\n  ],\n  \"ImVector_back\": [\n    {\n      \"args\": \"(ImVector* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImVector*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImVector_back\",\n      \"defaults\": {},\n      \"funcname\": \"back\",\n      \"location\": \"imgui:2092\",\n      \"ov_cimguiname\": \"ImVector_back_Nil\",\n      \"ret\": \"T*\",\n      \"retref\": \"&\",\n      \"signature\": \"()\",\n      \"stname\": \"ImVector\",\n      \"templated\": true\n    },\n    {\n      \"args\": \"(ImVector* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImVector*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImVector_back\",\n      \"defaults\": {},\n      \"funcname\": \"back\",\n      \"location\": \"imgui:2093\",\n      \"ov_cimguiname\": \"ImVector_back__const\",\n      \"ret\": \"const T*\",\n      \"retref\": \"&\",\n      \"signature\": \"()const\",\n      \"stname\": \"ImVector\",\n      \"templated\": true\n    }\n  ],\n  \"ImVector_begin\": [\n    {\n      \"args\": \"(ImVector* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImVector*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImVector_begin\",\n      \"defaults\": {},\n      \"funcname\": \"begin\",\n      \"location\": \"imgui:2086\",\n      \"ov_cimguiname\": \"ImVector_begin_Nil\",\n      \"ret\": \"T*\",\n      \"signature\": \"()\",\n      \"stname\": \"ImVector\",\n      \"templated\": true\n    },\n    {\n      \"args\": \"(ImVector* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImVector*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImVector_begin\",\n      \"defaults\": {},\n      \"funcname\": \"begin\",\n      \"location\": \"imgui:2087\",\n      \"ov_cimguiname\": \"ImVector_begin__const\",\n      \"ret\": \"const T*\",\n      \"signature\": \"()const\",\n      \"stname\": \"ImVector\",\n      \"templated\": true\n    }\n  ],\n  \"ImVector_capacity\": [\n    {\n      \"args\": \"(ImVector* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImVector*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImVector_capacity\",\n      \"defaults\": {},\n      \"funcname\": \"capacity\",\n      \"location\": \"imgui:2082\",\n      \"ov_cimguiname\": \"ImVector_capacity\",\n      \"ret\": \"int\",\n      \"signature\": \"()const\",\n      \"stname\": \"ImVector\",\n      \"templated\": true\n    }\n  ],\n  \"ImVector_clear\": [\n    {\n      \"args\": \"(ImVector* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImVector*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImVector_clear\",\n      \"defaults\": {},\n      \"funcname\": \"clear\",\n      \"location\": \"imgui:2074\",\n      \"ov_cimguiname\": \"ImVector_clear\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"ImVector\",\n      \"templated\": true\n    }\n  ],\n  \"ImVector_clear_delete\": [\n    {\n      \"args\": \"(ImVector* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImVector*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImVector_clear_delete\",\n      \"defaults\": {},\n      \"funcname\": \"clear_delete\",\n      \"location\": \"imgui:2075\",\n      \"ov_cimguiname\": \"ImVector_clear_delete\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"ImVector\",\n      \"templated\": true\n    }\n  ],\n  \"ImVector_clear_destruct\": [\n    {\n      \"args\": \"(ImVector* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImVector*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImVector_clear_destruct\",\n      \"defaults\": {},\n      \"funcname\": \"clear_destruct\",\n      \"location\": \"imgui:2076\",\n      \"ov_cimguiname\": \"ImVector_clear_destruct\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"ImVector\",\n      \"templated\": true\n    }\n  ],\n  \"ImVector_contains\": [\n    {\n      \"args\": \"(ImVector* self,const T v)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImVector*\"\n        },\n        {\n          \"name\": \"v\",\n          \"type\": \"const T\"\n        }\n      ],\n      \"argsoriginal\": \"(const T& v)\",\n      \"call_args\": \"(v)\",\n      \"cimguiname\": \"ImVector_contains\",\n      \"defaults\": {},\n      \"funcname\": \"contains\",\n      \"location\": \"imgui:2111\",\n      \"ov_cimguiname\": \"ImVector_contains\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const T)const\",\n      \"stname\": \"ImVector\",\n      \"templated\": true\n    }\n  ],\n  \"ImVector_destroy\": [\n    {\n      \"args\": \"(ImVector* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImVector*\"\n        }\n      ],\n      \"call_args\": \"(self)\",\n      \"cimguiname\": \"ImVector_destroy\",\n      \"defaults\": {},\n      \"destructor\": true,\n      \"location\": \"imgui:2072\",\n      \"ov_cimguiname\": \"ImVector_destroy\",\n      \"realdestructor\": true,\n      \"ret\": \"void\",\n      \"signature\": \"(ImVector*)\",\n      \"stname\": \"ImVector\",\n      \"templated\": true\n    }\n  ],\n  \"ImVector_empty\": [\n    {\n      \"args\": \"(ImVector* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImVector*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImVector_empty\",\n      \"defaults\": {},\n      \"funcname\": \"empty\",\n      \"location\": \"imgui:2078\",\n      \"ov_cimguiname\": \"ImVector_empty\",\n      \"ret\": \"bool\",\n      \"signature\": \"()const\",\n      \"stname\": \"ImVector\",\n      \"templated\": true\n    }\n  ],\n  \"ImVector_end\": [\n    {\n      \"args\": \"(ImVector* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImVector*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImVector_end\",\n      \"defaults\": {},\n      \"funcname\": \"end\",\n      \"location\": \"imgui:2088\",\n      \"ov_cimguiname\": \"ImVector_end_Nil\",\n      \"ret\": \"T*\",\n      \"signature\": \"()\",\n      \"stname\": \"ImVector\",\n      \"templated\": true\n    },\n    {\n      \"args\": \"(ImVector* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImVector*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImVector_end\",\n      \"defaults\": {},\n      \"funcname\": \"end\",\n      \"location\": \"imgui:2089\",\n      \"ov_cimguiname\": \"ImVector_end__const\",\n      \"ret\": \"const T*\",\n      \"signature\": \"()const\",\n      \"stname\": \"ImVector\",\n      \"templated\": true\n    }\n  ],\n  \"ImVector_erase\": [\n    {\n      \"args\": \"(ImVector* self,const T* it)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImVector*\"\n        },\n        {\n          \"name\": \"it\",\n          \"type\": \"const T*\"\n        }\n      ],\n      \"argsoriginal\": \"(const T* it)\",\n      \"call_args\": \"(it)\",\n      \"cimguiname\": \"ImVector_erase\",\n      \"defaults\": {},\n      \"funcname\": \"erase\",\n      \"location\": \"imgui:2107\",\n      \"ov_cimguiname\": \"ImVector_erase_Nil\",\n      \"ret\": \"T*\",\n      \"signature\": \"(const T*)\",\n      \"stname\": \"ImVector\",\n      \"templated\": true\n    },\n    {\n      \"args\": \"(ImVector* self,const T* it,const T* it_last)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImVector*\"\n        },\n        {\n          \"name\": \"it\",\n          \"type\": \"const T*\"\n        },\n        {\n          \"name\": \"it_last\",\n          \"type\": \"const T*\"\n        }\n      ],\n      \"argsoriginal\": \"(const T* it,const T* it_last)\",\n      \"call_args\": \"(it,it_last)\",\n      \"cimguiname\": \"ImVector_erase\",\n      \"defaults\": {},\n      \"funcname\": \"erase\",\n      \"location\": \"imgui:2108\",\n      \"ov_cimguiname\": \"ImVector_erase_TPtr\",\n      \"ret\": \"T*\",\n      \"signature\": \"(const T*,const T*)\",\n      \"stname\": \"ImVector\",\n      \"templated\": true\n    }\n  ],\n  \"ImVector_erase_unsorted\": [\n    {\n      \"args\": \"(ImVector* self,const T* it)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImVector*\"\n        },\n        {\n          \"name\": \"it\",\n          \"type\": \"const T*\"\n        }\n      ],\n      \"argsoriginal\": \"(const T* it)\",\n      \"call_args\": \"(it)\",\n      \"cimguiname\": \"ImVector_erase_unsorted\",\n      \"defaults\": {},\n      \"funcname\": \"erase_unsorted\",\n      \"location\": \"imgui:2109\",\n      \"ov_cimguiname\": \"ImVector_erase_unsorted\",\n      \"ret\": \"T*\",\n      \"signature\": \"(const T*)\",\n      \"stname\": \"ImVector\",\n      \"templated\": true\n    }\n  ],\n  \"ImVector_find\": [\n    {\n      \"args\": \"(ImVector* self,const T v)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImVector*\"\n        },\n        {\n          \"name\": \"v\",\n          \"type\": \"const T\"\n        }\n      ],\n      \"argsoriginal\": \"(const T& v)\",\n      \"call_args\": \"(v)\",\n      \"cimguiname\": \"ImVector_find\",\n      \"defaults\": {},\n      \"funcname\": \"find\",\n      \"location\": \"imgui:2112\",\n      \"ov_cimguiname\": \"ImVector_find_Nil\",\n      \"ret\": \"T*\",\n      \"signature\": \"(const T)\",\n      \"stname\": \"ImVector\",\n      \"templated\": true\n    },\n    {\n      \"args\": \"(ImVector* self,const T v)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImVector*\"\n        },\n        {\n          \"name\": \"v\",\n          \"type\": \"const T\"\n        }\n      ],\n      \"argsoriginal\": \"(const T& v)\",\n      \"call_args\": \"(v)\",\n      \"cimguiname\": \"ImVector_find\",\n      \"defaults\": {},\n      \"funcname\": \"find\",\n      \"location\": \"imgui:2113\",\n      \"ov_cimguiname\": \"ImVector_find__const\",\n      \"ret\": \"const T*\",\n      \"signature\": \"(const T)const\",\n      \"stname\": \"ImVector\",\n      \"templated\": true\n    }\n  ],\n  \"ImVector_find_erase\": [\n    {\n      \"args\": \"(ImVector* self,const T v)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImVector*\"\n        },\n        {\n          \"name\": \"v\",\n          \"type\": \"const T\"\n        }\n      ],\n      \"argsoriginal\": \"(const T& v)\",\n      \"call_args\": \"(v)\",\n      \"cimguiname\": \"ImVector_find_erase\",\n      \"defaults\": {},\n      \"funcname\": \"find_erase\",\n      \"location\": \"imgui:2115\",\n      \"ov_cimguiname\": \"ImVector_find_erase\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const T)\",\n      \"stname\": \"ImVector\",\n      \"templated\": true\n    }\n  ],\n  \"ImVector_find_erase_unsorted\": [\n    {\n      \"args\": \"(ImVector* self,const T v)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImVector*\"\n        },\n        {\n          \"name\": \"v\",\n          \"type\": \"const T\"\n        }\n      ],\n      \"argsoriginal\": \"(const T& v)\",\n      \"call_args\": \"(v)\",\n      \"cimguiname\": \"ImVector_find_erase_unsorted\",\n      \"defaults\": {},\n      \"funcname\": \"find_erase_unsorted\",\n      \"location\": \"imgui:2116\",\n      \"ov_cimguiname\": \"ImVector_find_erase_unsorted\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const T)\",\n      \"stname\": \"ImVector\",\n      \"templated\": true\n    }\n  ],\n  \"ImVector_find_index\": [\n    {\n      \"args\": \"(ImVector* self,const T v)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImVector*\"\n        },\n        {\n          \"name\": \"v\",\n          \"type\": \"const T\"\n        }\n      ],\n      \"argsoriginal\": \"(const T& v)\",\n      \"call_args\": \"(v)\",\n      \"cimguiname\": \"ImVector_find_index\",\n      \"defaults\": {},\n      \"funcname\": \"find_index\",\n      \"location\": \"imgui:2114\",\n      \"ov_cimguiname\": \"ImVector_find_index\",\n      \"ret\": \"int\",\n      \"signature\": \"(const T)const\",\n      \"stname\": \"ImVector\",\n      \"templated\": true\n    }\n  ],\n  \"ImVector_front\": [\n    {\n      \"args\": \"(ImVector* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImVector*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImVector_front\",\n      \"defaults\": {},\n      \"funcname\": \"front\",\n      \"location\": \"imgui:2090\",\n      \"ov_cimguiname\": \"ImVector_front_Nil\",\n      \"ret\": \"T*\",\n      \"retref\": \"&\",\n      \"signature\": \"()\",\n      \"stname\": \"ImVector\",\n      \"templated\": true\n    },\n    {\n      \"args\": \"(ImVector* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImVector*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImVector_front\",\n      \"defaults\": {},\n      \"funcname\": \"front\",\n      \"location\": \"imgui:2091\",\n      \"ov_cimguiname\": \"ImVector_front__const\",\n      \"ret\": \"const T*\",\n      \"retref\": \"&\",\n      \"signature\": \"()const\",\n      \"stname\": \"ImVector\",\n      \"templated\": true\n    }\n  ],\n  \"ImVector_index_from_ptr\": [\n    {\n      \"args\": \"(ImVector* self,const T* it)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImVector*\"\n        },\n        {\n          \"name\": \"it\",\n          \"type\": \"const T*\"\n        }\n      ],\n      \"argsoriginal\": \"(const T* it)\",\n      \"call_args\": \"(it)\",\n      \"cimguiname\": \"ImVector_index_from_ptr\",\n      \"defaults\": {},\n      \"funcname\": \"index_from_ptr\",\n      \"location\": \"imgui:2117\",\n      \"ov_cimguiname\": \"ImVector_index_from_ptr\",\n      \"ret\": \"int\",\n      \"signature\": \"(const T*)const\",\n      \"stname\": \"ImVector\",\n      \"templated\": true\n    }\n  ],\n  \"ImVector_insert\": [\n    {\n      \"args\": \"(ImVector* self,const T* it,const T v)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImVector*\"\n        },\n        {\n          \"name\": \"it\",\n          \"type\": \"const T*\"\n        },\n        {\n          \"name\": \"v\",\n          \"type\": \"const T\"\n        }\n      ],\n      \"argsoriginal\": \"(const T* it,const T& v)\",\n      \"call_args\": \"(it,v)\",\n      \"cimguiname\": \"ImVector_insert\",\n      \"defaults\": {},\n      \"funcname\": \"insert\",\n      \"location\": \"imgui:2110\",\n      \"ov_cimguiname\": \"ImVector_insert\",\n      \"ret\": \"T*\",\n      \"signature\": \"(const T*,const T)\",\n      \"stname\": \"ImVector\",\n      \"templated\": true\n    }\n  ],\n  \"ImVector_max_size\": [\n    {\n      \"args\": \"(ImVector* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImVector*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImVector_max_size\",\n      \"defaults\": {},\n      \"funcname\": \"max_size\",\n      \"location\": \"imgui:2081\",\n      \"ov_cimguiname\": \"ImVector_max_size\",\n      \"ret\": \"int\",\n      \"signature\": \"()const\",\n      \"stname\": \"ImVector\",\n      \"templated\": true\n    }\n  ],\n  \"ImVector_pop_back\": [\n    {\n      \"args\": \"(ImVector* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImVector*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImVector_pop_back\",\n      \"defaults\": {},\n      \"funcname\": \"pop_back\",\n      \"location\": \"imgui:2105\",\n      \"ov_cimguiname\": \"ImVector_pop_back\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"ImVector\",\n      \"templated\": true\n    }\n  ],\n  \"ImVector_push_back\": [\n    {\n      \"args\": \"(ImVector* self,const T v)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImVector*\"\n        },\n        {\n          \"name\": \"v\",\n          \"type\": \"const T\"\n        }\n      ],\n      \"argsoriginal\": \"(const T& v)\",\n      \"call_args\": \"(v)\",\n      \"cimguiname\": \"ImVector_push_back\",\n      \"defaults\": {},\n      \"funcname\": \"push_back\",\n      \"location\": \"imgui:2104\",\n      \"ov_cimguiname\": \"ImVector_push_back\",\n      \"ret\": \"void\",\n      \"signature\": \"(const T)\",\n      \"stname\": \"ImVector\",\n      \"templated\": true\n    }\n  ],\n  \"ImVector_push_front\": [\n    {\n      \"args\": \"(ImVector* self,const T v)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImVector*\"\n        },\n        {\n          \"name\": \"v\",\n          \"type\": \"const T\"\n        }\n      ],\n      \"argsoriginal\": \"(const T& v)\",\n      \"call_args\": \"(v)\",\n      \"cimguiname\": \"ImVector_push_front\",\n      \"defaults\": {},\n      \"funcname\": \"push_front\",\n      \"location\": \"imgui:2106\",\n      \"ov_cimguiname\": \"ImVector_push_front\",\n      \"ret\": \"void\",\n      \"signature\": \"(const T)\",\n      \"stname\": \"ImVector\",\n      \"templated\": true\n    }\n  ],\n  \"ImVector_reserve\": [\n    {\n      \"args\": \"(ImVector* self,int new_capacity)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImVector*\"\n        },\n        {\n          \"name\": \"new_capacity\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(int new_capacity)\",\n      \"call_args\": \"(new_capacity)\",\n      \"cimguiname\": \"ImVector_reserve\",\n      \"defaults\": {},\n      \"funcname\": \"reserve\",\n      \"location\": \"imgui:2100\",\n      \"ov_cimguiname\": \"ImVector_reserve\",\n      \"ret\": \"void\",\n      \"signature\": \"(int)\",\n      \"stname\": \"ImVector\",\n      \"templated\": true\n    }\n  ],\n  \"ImVector_reserve_discard\": [\n    {\n      \"args\": \"(ImVector* self,int new_capacity)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImVector*\"\n        },\n        {\n          \"name\": \"new_capacity\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(int new_capacity)\",\n      \"call_args\": \"(new_capacity)\",\n      \"cimguiname\": \"ImVector_reserve_discard\",\n      \"defaults\": {},\n      \"funcname\": \"reserve_discard\",\n      \"location\": \"imgui:2101\",\n      \"ov_cimguiname\": \"ImVector_reserve_discard\",\n      \"ret\": \"void\",\n      \"signature\": \"(int)\",\n      \"stname\": \"ImVector\",\n      \"templated\": true\n    }\n  ],\n  \"ImVector_resize\": [\n    {\n      \"args\": \"(ImVector* self,int new_size)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImVector*\"\n        },\n        {\n          \"name\": \"new_size\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(int new_size)\",\n      \"call_args\": \"(new_size)\",\n      \"cimguiname\": \"ImVector_resize\",\n      \"defaults\": {},\n      \"funcname\": \"resize\",\n      \"location\": \"imgui:2097\",\n      \"ov_cimguiname\": \"ImVector_resize_Nil\",\n      \"ret\": \"void\",\n      \"signature\": \"(int)\",\n      \"stname\": \"ImVector\",\n      \"templated\": true\n    },\n    {\n      \"args\": \"(ImVector* self,int new_size,const T v)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImVector*\"\n        },\n        {\n          \"name\": \"new_size\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"v\",\n          \"type\": \"const T\"\n        }\n      ],\n      \"argsoriginal\": \"(int new_size,const T& v)\",\n      \"call_args\": \"(new_size,v)\",\n      \"cimguiname\": \"ImVector_resize\",\n      \"defaults\": {},\n      \"funcname\": \"resize\",\n      \"location\": \"imgui:2098\",\n      \"ov_cimguiname\": \"ImVector_resize_T\",\n      \"ret\": \"void\",\n      \"signature\": \"(int,const T)\",\n      \"stname\": \"ImVector\",\n      \"templated\": true\n    }\n  ],\n  \"ImVector_shrink\": [\n    {\n      \"args\": \"(ImVector* self,int new_size)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImVector*\"\n        },\n        {\n          \"name\": \"new_size\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(int new_size)\",\n      \"call_args\": \"(new_size)\",\n      \"cimguiname\": \"ImVector_shrink\",\n      \"defaults\": {},\n      \"funcname\": \"shrink\",\n      \"location\": \"imgui:2099\",\n      \"ov_cimguiname\": \"ImVector_shrink\",\n      \"ret\": \"void\",\n      \"signature\": \"(int)\",\n      \"stname\": \"ImVector\",\n      \"templated\": true\n    }\n  ],\n  \"ImVector_size\": [\n    {\n      \"args\": \"(ImVector* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImVector*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImVector_size\",\n      \"defaults\": {},\n      \"funcname\": \"size\",\n      \"location\": \"imgui:2079\",\n      \"ov_cimguiname\": \"ImVector_size\",\n      \"ret\": \"int\",\n      \"signature\": \"()const\",\n      \"stname\": \"ImVector\",\n      \"templated\": true\n    }\n  ],\n  \"ImVector_size_in_bytes\": [\n    {\n      \"args\": \"(ImVector* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImVector*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImVector_size_in_bytes\",\n      \"defaults\": {},\n      \"funcname\": \"size_in_bytes\",\n      \"location\": \"imgui:2080\",\n      \"ov_cimguiname\": \"ImVector_size_in_bytes\",\n      \"ret\": \"int\",\n      \"signature\": \"()const\",\n      \"stname\": \"ImVector\",\n      \"templated\": true\n    }\n  ],\n  \"ImVector_swap\": [\n    {\n      \"args\": \"(ImVector* self,ImVector_T * rhs)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImVector*\"\n        },\n        {\n          \"name\": \"rhs\",\n          \"reftoptr\": true,\n          \"type\": \"ImVector_T *\"\n        }\n      ],\n      \"argsoriginal\": \"(ImVector<T>& rhs)\",\n      \"call_args\": \"(*rhs)\",\n      \"cimguiname\": \"ImVector_swap\",\n      \"defaults\": {},\n      \"funcname\": \"swap\",\n      \"location\": \"imgui:2094\",\n      \"ov_cimguiname\": \"ImVector_swap\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImVector_T *)\",\n      \"stname\": \"ImVector\",\n      \"templated\": true\n    }\n  ],\n  \"igAcceptDragDropPayload\": [\n    {\n      \"args\": \"(const char* type,ImGuiDragDropFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"type\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiDragDropFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* type,ImGuiDragDropFlags flags=0)\",\n      \"call_args\": \"(type,flags)\",\n      \"cimguiname\": \"igAcceptDragDropPayload\",\n      \"defaults\": {\n        \"flags\": \"0\"\n      },\n      \"funcname\": \"AcceptDragDropPayload\",\n      \"location\": \"imgui:889\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igAcceptDragDropPayload\",\n      \"ret\": \"const ImGuiPayload*\",\n      \"signature\": \"(const char*,ImGuiDragDropFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igActivateItemByID\": [\n    {\n      \"args\": \"(ImGuiID id)\",\n      \"argsT\": [\n        {\n          \"name\": \"id\",\n          \"type\": \"ImGuiID\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiID id)\",\n      \"call_args\": \"(id)\",\n      \"cimguiname\": \"igActivateItemByID\",\n      \"defaults\": {},\n      \"funcname\": \"ActivateItemByID\",\n      \"location\": \"imgui_internal:3159\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igActivateItemByID\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiID)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igAddContextHook\": [\n    {\n      \"args\": \"(ImGuiContext* context,const ImGuiContextHook* hook)\",\n      \"argsT\": [\n        {\n          \"name\": \"context\",\n          \"type\": \"ImGuiContext*\"\n        },\n        {\n          \"name\": \"hook\",\n          \"type\": \"const ImGuiContextHook*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiContext* context,const ImGuiContextHook* hook)\",\n      \"call_args\": \"(context,hook)\",\n      \"cimguiname\": \"igAddContextHook\",\n      \"defaults\": {},\n      \"funcname\": \"AddContextHook\",\n      \"location\": \"imgui_internal:3025\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igAddContextHook\",\n      \"ret\": \"ImGuiID\",\n      \"signature\": \"(ImGuiContext*,const ImGuiContextHook*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igAddDrawListToDrawDataEx\": [\n    {\n      \"args\": \"(ImDrawData* draw_data,ImVector_ImDrawListPtr* out_list,ImDrawList* draw_list)\",\n      \"argsT\": [\n        {\n          \"name\": \"draw_data\",\n          \"type\": \"ImDrawData*\"\n        },\n        {\n          \"name\": \"out_list\",\n          \"type\": \"ImVector_ImDrawListPtr*\"\n        },\n        {\n          \"name\": \"draw_list\",\n          \"type\": \"ImDrawList*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImDrawData* draw_data,ImVector<ImDrawList*>* out_list,ImDrawList* draw_list)\",\n      \"call_args\": \"(draw_data,out_list,draw_list)\",\n      \"cimguiname\": \"igAddDrawListToDrawDataEx\",\n      \"defaults\": {},\n      \"funcname\": \"AddDrawListToDrawDataEx\",\n      \"location\": \"imgui_internal:3010\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igAddDrawListToDrawDataEx\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImDrawData*,ImVector_ImDrawListPtr*,ImDrawList*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igAddSettingsHandler\": [\n    {\n      \"args\": \"(const ImGuiSettingsHandler* handler)\",\n      \"argsT\": [\n        {\n          \"name\": \"handler\",\n          \"type\": \"const ImGuiSettingsHandler*\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImGuiSettingsHandler* handler)\",\n      \"call_args\": \"(handler)\",\n      \"cimguiname\": \"igAddSettingsHandler\",\n      \"defaults\": {},\n      \"funcname\": \"AddSettingsHandler\",\n      \"location\": \"imgui_internal:3037\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igAddSettingsHandler\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImGuiSettingsHandler*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igAlignTextToFramePadding\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igAlignTextToFramePadding\",\n      \"defaults\": {},\n      \"funcname\": \"AlignTextToFramePadding\",\n      \"location\": \"imgui:504\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igAlignTextToFramePadding\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igArrowButton\": [\n    {\n      \"args\": \"(const char* str_id,ImGuiDir dir)\",\n      \"argsT\": [\n        {\n          \"name\": \"str_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"dir\",\n          \"type\": \"ImGuiDir\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* str_id,ImGuiDir dir)\",\n      \"call_args\": \"(str_id,dir)\",\n      \"cimguiname\": \"igArrowButton\",\n      \"defaults\": {},\n      \"funcname\": \"ArrowButton\",\n      \"location\": \"imgui:553\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igArrowButton\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*,ImGuiDir)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igArrowButtonEx\": [\n    {\n      \"args\": \"(const char* str_id,ImGuiDir dir,ImVec2 size_arg,ImGuiButtonFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"str_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"dir\",\n          \"type\": \"ImGuiDir\"\n        },\n        {\n          \"name\": \"size_arg\",\n          \"type\": \"ImVec2\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiButtonFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* str_id,ImGuiDir dir,ImVec2 size_arg,ImGuiButtonFlags flags=0)\",\n      \"call_args\": \"(str_id,dir,size_arg,flags)\",\n      \"cimguiname\": \"igArrowButtonEx\",\n      \"defaults\": {\n        \"flags\": \"0\"\n      },\n      \"funcname\": \"ArrowButtonEx\",\n      \"location\": \"imgui_internal:3403\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igArrowButtonEx\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*,ImGuiDir,ImVec2,ImGuiButtonFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igBegin\": [\n    {\n      \"args\": \"(const char* name,bool* p_open,ImGuiWindowFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"name\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"p_open\",\n          \"type\": \"bool*\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiWindowFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* name,bool* p_open=((void*)0),ImGuiWindowFlags flags=0)\",\n      \"call_args\": \"(name,p_open,flags)\",\n      \"cimguiname\": \"igBegin\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"p_open\": \"NULL\"\n      },\n      \"funcname\": \"Begin\",\n      \"location\": \"imgui:370\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igBegin\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*,bool*,ImGuiWindowFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igBeginBoxSelect\": [\n    {\n      \"args\": \"(const ImRect scope_rect,ImGuiWindow* window,ImGuiID box_select_id,ImGuiMultiSelectFlags ms_flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"scope_rect\",\n          \"type\": \"const ImRect\"\n        },\n        {\n          \"name\": \"window\",\n          \"type\": \"ImGuiWindow*\"\n        },\n        {\n          \"name\": \"box_select_id\",\n          \"type\": \"ImGuiID\"\n        },\n        {\n          \"name\": \"ms_flags\",\n          \"type\": \"ImGuiMultiSelectFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImRect& scope_rect,ImGuiWindow* window,ImGuiID box_select_id,ImGuiMultiSelectFlags ms_flags)\",\n      \"call_args\": \"(scope_rect,window,box_select_id,ms_flags)\",\n      \"cimguiname\": \"igBeginBoxSelect\",\n      \"defaults\": {},\n      \"funcname\": \"BeginBoxSelect\",\n      \"location\": \"imgui_internal:3274\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igBeginBoxSelect\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const ImRect,ImGuiWindow*,ImGuiID,ImGuiMultiSelectFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igBeginChild\": [\n    {\n      \"args\": \"(const char* str_id,const ImVec2 size,ImGuiChildFlags child_flags,ImGuiWindowFlags window_flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"str_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"size\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"child_flags\",\n          \"type\": \"ImGuiChildFlags\"\n        },\n        {\n          \"name\": \"window_flags\",\n          \"type\": \"ImGuiWindowFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* str_id,const ImVec2& size=ImVec2(0,0),ImGuiChildFlags child_flags=0,ImGuiWindowFlags window_flags=0)\",\n      \"call_args\": \"(str_id,size,child_flags,window_flags)\",\n      \"cimguiname\": \"igBeginChild\",\n      \"defaults\": {\n        \"child_flags\": \"0\",\n        \"size\": \"ImVec2(0,0)\",\n        \"window_flags\": \"0\"\n      },\n      \"funcname\": \"BeginChild\",\n      \"location\": \"imgui:391\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igBeginChild_Str\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*,const ImVec2,ImGuiChildFlags,ImGuiWindowFlags)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(ImGuiID id,const ImVec2 size,ImGuiChildFlags child_flags,ImGuiWindowFlags window_flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"id\",\n          \"type\": \"ImGuiID\"\n        },\n        {\n          \"name\": \"size\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"child_flags\",\n          \"type\": \"ImGuiChildFlags\"\n        },\n        {\n          \"name\": \"window_flags\",\n          \"type\": \"ImGuiWindowFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiID id,const ImVec2& size=ImVec2(0,0),ImGuiChildFlags child_flags=0,ImGuiWindowFlags window_flags=0)\",\n      \"call_args\": \"(id,size,child_flags,window_flags)\",\n      \"cimguiname\": \"igBeginChild\",\n      \"defaults\": {\n        \"child_flags\": \"0\",\n        \"size\": \"ImVec2(0,0)\",\n        \"window_flags\": \"0\"\n      },\n      \"funcname\": \"BeginChild\",\n      \"location\": \"imgui:392\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igBeginChild_ID\",\n      \"ret\": \"bool\",\n      \"signature\": \"(ImGuiID,const ImVec2,ImGuiChildFlags,ImGuiWindowFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igBeginChildEx\": [\n    {\n      \"args\": \"(const char* name,ImGuiID id,const ImVec2 size_arg,ImGuiChildFlags child_flags,ImGuiWindowFlags window_flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"name\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"id\",\n          \"type\": \"ImGuiID\"\n        },\n        {\n          \"name\": \"size_arg\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"child_flags\",\n          \"type\": \"ImGuiChildFlags\"\n        },\n        {\n          \"name\": \"window_flags\",\n          \"type\": \"ImGuiWindowFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* name,ImGuiID id,const ImVec2& size_arg,ImGuiChildFlags child_flags,ImGuiWindowFlags window_flags)\",\n      \"call_args\": \"(name,id,size_arg,child_flags,window_flags)\",\n      \"cimguiname\": \"igBeginChildEx\",\n      \"defaults\": {},\n      \"funcname\": \"BeginChildEx\",\n      \"location\": \"imgui_internal:3106\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igBeginChildEx\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*,ImGuiID,const ImVec2,ImGuiChildFlags,ImGuiWindowFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igBeginColumns\": [\n    {\n      \"args\": \"(const char* str_id,int count,ImGuiOldColumnFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"str_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiOldColumnFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* str_id,int count,ImGuiOldColumnFlags flags=0)\",\n      \"call_args\": \"(str_id,count,flags)\",\n      \"cimguiname\": \"igBeginColumns\",\n      \"defaults\": {\n        \"flags\": \"0\"\n      },\n      \"funcname\": \"BeginColumns\",\n      \"location\": \"imgui_internal:3287\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igBeginColumns\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,int,ImGuiOldColumnFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igBeginCombo\": [\n    {\n      \"args\": \"(const char* label,const char* preview_value,ImGuiComboFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"label\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"preview_value\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiComboFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label,const char* preview_value,ImGuiComboFlags flags=0)\",\n      \"call_args\": \"(label,preview_value,flags)\",\n      \"cimguiname\": \"igBeginCombo\",\n      \"defaults\": {\n        \"flags\": \"0\"\n      },\n      \"funcname\": \"BeginCombo\",\n      \"location\": \"imgui:575\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igBeginCombo\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*,const char*,ImGuiComboFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igBeginComboPopup\": [\n    {\n      \"args\": \"(ImGuiID popup_id,const ImRect bb,ImGuiComboFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"popup_id\",\n          \"type\": \"ImGuiID\"\n        },\n        {\n          \"name\": \"bb\",\n          \"type\": \"const ImRect\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiComboFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiID popup_id,const ImRect& bb,ImGuiComboFlags flags)\",\n      \"call_args\": \"(popup_id,bb,flags)\",\n      \"cimguiname\": \"igBeginComboPopup\",\n      \"defaults\": {},\n      \"funcname\": \"BeginComboPopup\",\n      \"location\": \"imgui_internal:3132\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igBeginComboPopup\",\n      \"ret\": \"bool\",\n      \"signature\": \"(ImGuiID,const ImRect,ImGuiComboFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igBeginComboPreview\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igBeginComboPreview\",\n      \"defaults\": {},\n      \"funcname\": \"BeginComboPreview\",\n      \"location\": \"imgui_internal:3133\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igBeginComboPreview\",\n      \"ret\": \"bool\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igBeginDisabled\": [\n    {\n      \"args\": \"(bool disabled)\",\n      \"argsT\": [\n        {\n          \"name\": \"disabled\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"argsoriginal\": \"(bool disabled=true)\",\n      \"call_args\": \"(disabled)\",\n      \"cimguiname\": \"igBeginDisabled\",\n      \"defaults\": {\n        \"disabled\": \"true\"\n      },\n      \"funcname\": \"BeginDisabled\",\n      \"location\": \"imgui:898\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igBeginDisabled\",\n      \"ret\": \"void\",\n      \"signature\": \"(bool)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igBeginDisabledOverrideReenable\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igBeginDisabledOverrideReenable\",\n      \"defaults\": {},\n      \"funcname\": \"BeginDisabledOverrideReenable\",\n      \"location\": \"imgui_internal:3096\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igBeginDisabledOverrideReenable\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igBeginDragDropSource\": [\n    {\n      \"args\": \"(ImGuiDragDropFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiDragDropFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiDragDropFlags flags=0)\",\n      \"call_args\": \"(flags)\",\n      \"cimguiname\": \"igBeginDragDropSource\",\n      \"defaults\": {\n        \"flags\": \"0\"\n      },\n      \"funcname\": \"BeginDragDropSource\",\n      \"location\": \"imgui:885\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igBeginDragDropSource\",\n      \"ret\": \"bool\",\n      \"signature\": \"(ImGuiDragDropFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igBeginDragDropTarget\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igBeginDragDropTarget\",\n      \"defaults\": {},\n      \"funcname\": \"BeginDragDropTarget\",\n      \"location\": \"imgui:888\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igBeginDragDropTarget\",\n      \"ret\": \"bool\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igBeginDragDropTargetCustom\": [\n    {\n      \"args\": \"(const ImRect bb,ImGuiID id)\",\n      \"argsT\": [\n        {\n          \"name\": \"bb\",\n          \"type\": \"const ImRect\"\n        },\n        {\n          \"name\": \"id\",\n          \"type\": \"ImGuiID\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImRect& bb,ImGuiID id)\",\n      \"call_args\": \"(bb,id)\",\n      \"cimguiname\": \"igBeginDragDropTargetCustom\",\n      \"defaults\": {},\n      \"funcname\": \"BeginDragDropTargetCustom\",\n      \"location\": \"imgui_internal:3260\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igBeginDragDropTargetCustom\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const ImRect,ImGuiID)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igBeginErrorTooltip\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igBeginErrorTooltip\",\n      \"defaults\": {},\n      \"funcname\": \"BeginErrorTooltip\",\n      \"location\": \"imgui_internal:3486\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igBeginErrorTooltip\",\n      \"ret\": \"bool\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igBeginGroup\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igBeginGroup\",\n      \"defaults\": {},\n      \"funcname\": \"BeginGroup\",\n      \"location\": \"imgui:502\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igBeginGroup\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igBeginItemTooltip\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igBeginItemTooltip\",\n      \"defaults\": {},\n      \"funcname\": \"BeginItemTooltip\",\n      \"location\": \"imgui:747\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igBeginItemTooltip\",\n      \"ret\": \"bool\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igBeginListBox\": [\n    {\n      \"args\": \"(const char* label,const ImVec2 size)\",\n      \"argsT\": [\n        {\n          \"name\": \"label\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"size\",\n          \"type\": \"const ImVec2\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label,const ImVec2& size=ImVec2(0,0))\",\n      \"call_args\": \"(label,size)\",\n      \"cimguiname\": \"igBeginListBox\",\n      \"defaults\": {\n        \"size\": \"ImVec2(0,0)\"\n      },\n      \"funcname\": \"BeginListBox\",\n      \"location\": \"imgui:701\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igBeginListBox\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*,const ImVec2)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igBeginMainMenuBar\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igBeginMainMenuBar\",\n      \"defaults\": {},\n      \"funcname\": \"BeginMainMenuBar\",\n      \"location\": \"imgui:727\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igBeginMainMenuBar\",\n      \"ret\": \"bool\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igBeginMenu\": [\n    {\n      \"args\": \"(const char* label,bool enabled)\",\n      \"argsT\": [\n        {\n          \"name\": \"label\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"enabled\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label,bool enabled=true)\",\n      \"call_args\": \"(label,enabled)\",\n      \"cimguiname\": \"igBeginMenu\",\n      \"defaults\": {\n        \"enabled\": \"true\"\n      },\n      \"funcname\": \"BeginMenu\",\n      \"location\": \"imgui:729\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igBeginMenu\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*,bool)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igBeginMenuBar\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igBeginMenuBar\",\n      \"defaults\": {},\n      \"funcname\": \"BeginMenuBar\",\n      \"location\": \"imgui:725\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igBeginMenuBar\",\n      \"ret\": \"bool\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igBeginMenuEx\": [\n    {\n      \"args\": \"(const char* label,const char* icon,bool enabled)\",\n      \"argsT\": [\n        {\n          \"name\": \"label\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"icon\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"enabled\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label,const char* icon,bool enabled=true)\",\n      \"call_args\": \"(label,icon,enabled)\",\n      \"cimguiname\": \"igBeginMenuEx\",\n      \"defaults\": {\n        \"enabled\": \"true\"\n      },\n      \"funcname\": \"BeginMenuEx\",\n      \"location\": \"imgui_internal:3128\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igBeginMenuEx\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*,const char*,bool)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igBeginMultiSelect\": [\n    {\n      \"args\": \"(ImGuiMultiSelectFlags flags,int selection_size,int items_count)\",\n      \"argsT\": [\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiMultiSelectFlags\"\n        },\n        {\n          \"name\": \"selection_size\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"items_count\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiMultiSelectFlags flags,int selection_size=-1,int items_count=-1)\",\n      \"call_args\": \"(flags,selection_size,items_count)\",\n      \"cimguiname\": \"igBeginMultiSelect\",\n      \"defaults\": {\n        \"items_count\": \"-1\",\n        \"selection_size\": \"-1\"\n      },\n      \"funcname\": \"BeginMultiSelect\",\n      \"location\": \"imgui:689\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igBeginMultiSelect\",\n      \"ret\": \"ImGuiMultiSelectIO*\",\n      \"signature\": \"(ImGuiMultiSelectFlags,int,int)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igBeginPopup\": [\n    {\n      \"args\": \"(const char* str_id,ImGuiWindowFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"str_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiWindowFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* str_id,ImGuiWindowFlags flags=0)\",\n      \"call_args\": \"(str_id,flags)\",\n      \"cimguiname\": \"igBeginPopup\",\n      \"defaults\": {\n        \"flags\": \"0\"\n      },\n      \"funcname\": \"BeginPopup\",\n      \"location\": \"imgui:761\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igBeginPopup\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*,ImGuiWindowFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igBeginPopupContextItem\": [\n    {\n      \"args\": \"(const char* str_id,ImGuiPopupFlags popup_flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"str_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"popup_flags\",\n          \"type\": \"ImGuiPopupFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* str_id=((void*)0),ImGuiPopupFlags popup_flags=1)\",\n      \"call_args\": \"(str_id,popup_flags)\",\n      \"cimguiname\": \"igBeginPopupContextItem\",\n      \"defaults\": {\n        \"popup_flags\": \"1\",\n        \"str_id\": \"NULL\"\n      },\n      \"funcname\": \"BeginPopupContextItem\",\n      \"location\": \"imgui:783\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igBeginPopupContextItem\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*,ImGuiPopupFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igBeginPopupContextVoid\": [\n    {\n      \"args\": \"(const char* str_id,ImGuiPopupFlags popup_flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"str_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"popup_flags\",\n          \"type\": \"ImGuiPopupFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* str_id=((void*)0),ImGuiPopupFlags popup_flags=1)\",\n      \"call_args\": \"(str_id,popup_flags)\",\n      \"cimguiname\": \"igBeginPopupContextVoid\",\n      \"defaults\": {\n        \"popup_flags\": \"1\",\n        \"str_id\": \"NULL\"\n      },\n      \"funcname\": \"BeginPopupContextVoid\",\n      \"location\": \"imgui:785\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igBeginPopupContextVoid\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*,ImGuiPopupFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igBeginPopupContextWindow\": [\n    {\n      \"args\": \"(const char* str_id,ImGuiPopupFlags popup_flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"str_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"popup_flags\",\n          \"type\": \"ImGuiPopupFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* str_id=((void*)0),ImGuiPopupFlags popup_flags=1)\",\n      \"call_args\": \"(str_id,popup_flags)\",\n      \"cimguiname\": \"igBeginPopupContextWindow\",\n      \"defaults\": {\n        \"popup_flags\": \"1\",\n        \"str_id\": \"NULL\"\n      },\n      \"funcname\": \"BeginPopupContextWindow\",\n      \"location\": \"imgui:784\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igBeginPopupContextWindow\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*,ImGuiPopupFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igBeginPopupEx\": [\n    {\n      \"args\": \"(ImGuiID id,ImGuiWindowFlags extra_window_flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"id\",\n          \"type\": \"ImGuiID\"\n        },\n        {\n          \"name\": \"extra_window_flags\",\n          \"type\": \"ImGuiWindowFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiID id,ImGuiWindowFlags extra_window_flags)\",\n      \"call_args\": \"(id,extra_window_flags)\",\n      \"cimguiname\": \"igBeginPopupEx\",\n      \"defaults\": {},\n      \"funcname\": \"BeginPopupEx\",\n      \"location\": \"imgui_internal:3109\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igBeginPopupEx\",\n      \"ret\": \"bool\",\n      \"signature\": \"(ImGuiID,ImGuiWindowFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igBeginPopupModal\": [\n    {\n      \"args\": \"(const char* name,bool* p_open,ImGuiWindowFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"name\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"p_open\",\n          \"type\": \"bool*\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiWindowFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* name,bool* p_open=((void*)0),ImGuiWindowFlags flags=0)\",\n      \"call_args\": \"(name,p_open,flags)\",\n      \"cimguiname\": \"igBeginPopupModal\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"p_open\": \"NULL\"\n      },\n      \"funcname\": \"BeginPopupModal\",\n      \"location\": \"imgui:762\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igBeginPopupModal\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*,bool*,ImGuiWindowFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igBeginTabBar\": [\n    {\n      \"args\": \"(const char* str_id,ImGuiTabBarFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"str_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiTabBarFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* str_id,ImGuiTabBarFlags flags=0)\",\n      \"call_args\": \"(str_id,flags)\",\n      \"cimguiname\": \"igBeginTabBar\",\n      \"defaults\": {\n        \"flags\": \"0\"\n      },\n      \"funcname\": \"BeginTabBar\",\n      \"location\": \"imgui:863\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igBeginTabBar\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*,ImGuiTabBarFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igBeginTabBarEx\": [\n    {\n      \"args\": \"(ImGuiTabBar* tab_bar,const ImRect bb,ImGuiTabBarFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"tab_bar\",\n          \"type\": \"ImGuiTabBar*\"\n        },\n        {\n          \"name\": \"bb\",\n          \"type\": \"const ImRect\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiTabBarFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiTabBar* tab_bar,const ImRect& bb,ImGuiTabBarFlags flags)\",\n      \"call_args\": \"(tab_bar,bb,flags)\",\n      \"cimguiname\": \"igBeginTabBarEx\",\n      \"defaults\": {},\n      \"funcname\": \"BeginTabBarEx\",\n      \"location\": \"imgui_internal:3355\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igBeginTabBarEx\",\n      \"ret\": \"bool\",\n      \"signature\": \"(ImGuiTabBar*,const ImRect,ImGuiTabBarFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igBeginTabItem\": [\n    {\n      \"args\": \"(const char* label,bool* p_open,ImGuiTabItemFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"label\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"p_open\",\n          \"type\": \"bool*\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiTabItemFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label,bool* p_open=((void*)0),ImGuiTabItemFlags flags=0)\",\n      \"call_args\": \"(label,p_open,flags)\",\n      \"cimguiname\": \"igBeginTabItem\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"p_open\": \"NULL\"\n      },\n      \"funcname\": \"BeginTabItem\",\n      \"location\": \"imgui:865\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igBeginTabItem\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*,bool*,ImGuiTabItemFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igBeginTable\": [\n    {\n      \"args\": \"(const char* str_id,int columns,ImGuiTableFlags flags,const ImVec2 outer_size,float inner_width)\",\n      \"argsT\": [\n        {\n          \"name\": \"str_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"columns\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiTableFlags\"\n        },\n        {\n          \"name\": \"outer_size\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"inner_width\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* str_id,int columns,ImGuiTableFlags flags=0,const ImVec2& outer_size=ImVec2(0.0f,0.0f),float inner_width=0.0f)\",\n      \"call_args\": \"(str_id,columns,flags,outer_size,inner_width)\",\n      \"cimguiname\": \"igBeginTable\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"inner_width\": \"0.0f\",\n        \"outer_size\": \"ImVec2(0.0f,0.0f)\"\n      },\n      \"funcname\": \"BeginTable\",\n      \"location\": \"imgui:814\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igBeginTable\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*,int,ImGuiTableFlags,const ImVec2,float)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igBeginTableEx\": [\n    {\n      \"args\": \"(const char* name,ImGuiID id,int columns_count,ImGuiTableFlags flags,const ImVec2 outer_size,float inner_width)\",\n      \"argsT\": [\n        {\n          \"name\": \"name\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"id\",\n          \"type\": \"ImGuiID\"\n        },\n        {\n          \"name\": \"columns_count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiTableFlags\"\n        },\n        {\n          \"name\": \"outer_size\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"inner_width\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* name,ImGuiID id,int columns_count,ImGuiTableFlags flags=0,const ImVec2& outer_size=ImVec2(0,0),float inner_width=0.0f)\",\n      \"call_args\": \"(name,id,columns_count,flags,outer_size,inner_width)\",\n      \"cimguiname\": \"igBeginTableEx\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"inner_width\": \"0.0f\",\n        \"outer_size\": \"ImVec2(0,0)\"\n      },\n      \"funcname\": \"BeginTableEx\",\n      \"location\": \"imgui_internal:3311\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igBeginTableEx\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*,ImGuiID,int,ImGuiTableFlags,const ImVec2,float)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igBeginTooltip\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igBeginTooltip\",\n      \"defaults\": {},\n      \"funcname\": \"BeginTooltip\",\n      \"location\": \"imgui:738\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igBeginTooltip\",\n      \"ret\": \"bool\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igBeginTooltipEx\": [\n    {\n      \"args\": \"(ImGuiTooltipFlags tooltip_flags,ImGuiWindowFlags extra_window_flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"tooltip_flags\",\n          \"type\": \"ImGuiTooltipFlags\"\n        },\n        {\n          \"name\": \"extra_window_flags\",\n          \"type\": \"ImGuiWindowFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiTooltipFlags tooltip_flags,ImGuiWindowFlags extra_window_flags)\",\n      \"call_args\": \"(tooltip_flags,extra_window_flags)\",\n      \"cimguiname\": \"igBeginTooltipEx\",\n      \"defaults\": {},\n      \"funcname\": \"BeginTooltipEx\",\n      \"location\": \"imgui_internal:3123\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igBeginTooltipEx\",\n      \"ret\": \"bool\",\n      \"signature\": \"(ImGuiTooltipFlags,ImGuiWindowFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igBeginTooltipHidden\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igBeginTooltipHidden\",\n      \"defaults\": {},\n      \"funcname\": \"BeginTooltipHidden\",\n      \"location\": \"imgui_internal:3124\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igBeginTooltipHidden\",\n      \"ret\": \"bool\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igBeginViewportSideBar\": [\n    {\n      \"args\": \"(const char* name,ImGuiViewport* viewport,ImGuiDir dir,float size,ImGuiWindowFlags window_flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"name\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"viewport\",\n          \"type\": \"ImGuiViewport*\"\n        },\n        {\n          \"name\": \"dir\",\n          \"type\": \"ImGuiDir\"\n        },\n        {\n          \"name\": \"size\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"window_flags\",\n          \"type\": \"ImGuiWindowFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* name,ImGuiViewport* viewport,ImGuiDir dir,float size,ImGuiWindowFlags window_flags)\",\n      \"call_args\": \"(name,viewport,dir,size,window_flags)\",\n      \"cimguiname\": \"igBeginViewportSideBar\",\n      \"defaults\": {},\n      \"funcname\": \"BeginViewportSideBar\",\n      \"location\": \"imgui_internal:3127\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igBeginViewportSideBar\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*,ImGuiViewport*,ImGuiDir,float,ImGuiWindowFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igBringWindowToDisplayBack\": [\n    {\n      \"args\": \"(ImGuiWindow* window)\",\n      \"argsT\": [\n        {\n          \"name\": \"window\",\n          \"type\": \"ImGuiWindow*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiWindow* window)\",\n      \"call_args\": \"(window)\",\n      \"cimguiname\": \"igBringWindowToDisplayBack\",\n      \"defaults\": {},\n      \"funcname\": \"BringWindowToDisplayBack\",\n      \"location\": \"imgui_internal:2996\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igBringWindowToDisplayBack\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiWindow*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igBringWindowToDisplayBehind\": [\n    {\n      \"args\": \"(ImGuiWindow* window,ImGuiWindow* above_window)\",\n      \"argsT\": [\n        {\n          \"name\": \"window\",\n          \"type\": \"ImGuiWindow*\"\n        },\n        {\n          \"name\": \"above_window\",\n          \"type\": \"ImGuiWindow*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiWindow* window,ImGuiWindow* above_window)\",\n      \"call_args\": \"(window,above_window)\",\n      \"cimguiname\": \"igBringWindowToDisplayBehind\",\n      \"defaults\": {},\n      \"funcname\": \"BringWindowToDisplayBehind\",\n      \"location\": \"imgui_internal:2997\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igBringWindowToDisplayBehind\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiWindow*,ImGuiWindow*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igBringWindowToDisplayFront\": [\n    {\n      \"args\": \"(ImGuiWindow* window)\",\n      \"argsT\": [\n        {\n          \"name\": \"window\",\n          \"type\": \"ImGuiWindow*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiWindow* window)\",\n      \"call_args\": \"(window)\",\n      \"cimguiname\": \"igBringWindowToDisplayFront\",\n      \"defaults\": {},\n      \"funcname\": \"BringWindowToDisplayFront\",\n      \"location\": \"imgui_internal:2995\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igBringWindowToDisplayFront\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiWindow*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igBringWindowToFocusFront\": [\n    {\n      \"args\": \"(ImGuiWindow* window)\",\n      \"argsT\": [\n        {\n          \"name\": \"window\",\n          \"type\": \"ImGuiWindow*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiWindow* window)\",\n      \"call_args\": \"(window)\",\n      \"cimguiname\": \"igBringWindowToFocusFront\",\n      \"defaults\": {},\n      \"funcname\": \"BringWindowToFocusFront\",\n      \"location\": \"imgui_internal:2994\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igBringWindowToFocusFront\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiWindow*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igBullet\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igBullet\",\n      \"defaults\": {},\n      \"funcname\": \"Bullet\",\n      \"location\": \"imgui:560\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igBullet\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igBulletText\": [\n    {\n      \"args\": \"(const char* fmt,...)\",\n      \"argsT\": [\n        {\n          \"name\": \"fmt\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"...\",\n          \"type\": \"...\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* fmt,...)\",\n      \"call_args\": \"(fmt,...)\",\n      \"cimguiname\": \"igBulletText\",\n      \"defaults\": {},\n      \"funcname\": \"BulletText\",\n      \"isvararg\": \"...)\",\n      \"location\": \"imgui:543\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igBulletText\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,...)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igBulletTextV\": [\n    {\n      \"args\": \"(const char* fmt,va_list args)\",\n      \"argsT\": [\n        {\n          \"name\": \"fmt\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"args\",\n          \"type\": \"va_list\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* fmt,va_list args)\",\n      \"call_args\": \"(fmt,args)\",\n      \"cimguiname\": \"igBulletTextV\",\n      \"defaults\": {},\n      \"funcname\": \"BulletTextV\",\n      \"location\": \"imgui:544\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igBulletTextV\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,va_list)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igButton\": [\n    {\n      \"args\": \"(const char* label,const ImVec2 size)\",\n      \"argsT\": [\n        {\n          \"name\": \"label\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"size\",\n          \"type\": \"const ImVec2\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label,const ImVec2& size=ImVec2(0,0))\",\n      \"call_args\": \"(label,size)\",\n      \"cimguiname\": \"igButton\",\n      \"defaults\": {\n        \"size\": \"ImVec2(0,0)\"\n      },\n      \"funcname\": \"Button\",\n      \"location\": \"imgui:550\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igButton\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*,const ImVec2)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igButtonBehavior\": [\n    {\n      \"args\": \"(const ImRect bb,ImGuiID id,bool* out_hovered,bool* out_held,ImGuiButtonFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"bb\",\n          \"type\": \"const ImRect\"\n        },\n        {\n          \"name\": \"id\",\n          \"type\": \"ImGuiID\"\n        },\n        {\n          \"name\": \"out_hovered\",\n          \"type\": \"bool*\"\n        },\n        {\n          \"name\": \"out_held\",\n          \"type\": \"bool*\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiButtonFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImRect& bb,ImGuiID id,bool* out_hovered,bool* out_held,ImGuiButtonFlags flags=0)\",\n      \"call_args\": \"(bb,id,out_hovered,out_held,flags)\",\n      \"cimguiname\": \"igButtonBehavior\",\n      \"defaults\": {\n        \"flags\": \"0\"\n      },\n      \"funcname\": \"ButtonBehavior\",\n      \"location\": \"imgui_internal:3421\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igButtonBehavior\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const ImRect,ImGuiID,bool*,bool*,ImGuiButtonFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igButtonEx\": [\n    {\n      \"args\": \"(const char* label,const ImVec2 size_arg,ImGuiButtonFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"label\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"size_arg\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiButtonFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label,const ImVec2& size_arg=ImVec2(0,0),ImGuiButtonFlags flags=0)\",\n      \"call_args\": \"(label,size_arg,flags)\",\n      \"cimguiname\": \"igButtonEx\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"size_arg\": \"ImVec2(0,0)\"\n      },\n      \"funcname\": \"ButtonEx\",\n      \"location\": \"imgui_internal:3402\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igButtonEx\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*,const ImVec2,ImGuiButtonFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igCalcItemSize\": [\n    {\n      \"args\": \"(ImVec2 *pOut,ImVec2 size,float default_w,float default_h)\",\n      \"argsT\": [\n        {\n          \"name\": \"pOut\",\n          \"type\": \"ImVec2*\"\n        },\n        {\n          \"name\": \"size\",\n          \"type\": \"ImVec2\"\n        },\n        {\n          \"name\": \"default_w\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"default_h\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(ImVec2 size,float default_w,float default_h)\",\n      \"call_args\": \"(size,default_w,default_h)\",\n      \"cimguiname\": \"igCalcItemSize\",\n      \"defaults\": {},\n      \"funcname\": \"CalcItemSize\",\n      \"location\": \"imgui_internal:3089\",\n      \"namespace\": \"ImGui\",\n      \"nonUDT\": 1,\n      \"ov_cimguiname\": \"igCalcItemSize\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImVec2,float,float)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igCalcItemWidth\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igCalcItemWidth\",\n      \"defaults\": {},\n      \"funcname\": \"CalcItemWidth\",\n      \"location\": \"imgui:459\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igCalcItemWidth\",\n      \"ret\": \"float\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igCalcTextSize\": [\n    {\n      \"args\": \"(ImVec2 *pOut,const char* text,const char* text_end,bool hide_text_after_double_hash,float wrap_width)\",\n      \"argsT\": [\n        {\n          \"name\": \"pOut\",\n          \"type\": \"ImVec2*\"\n        },\n        {\n          \"name\": \"text\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"text_end\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"hide_text_after_double_hash\",\n          \"type\": \"bool\"\n        },\n        {\n          \"name\": \"wrap_width\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* text,const char* text_end=((void*)0),bool hide_text_after_double_hash=false,float wrap_width=-1.0f)\",\n      \"call_args\": \"(text,text_end,hide_text_after_double_hash,wrap_width)\",\n      \"cimguiname\": \"igCalcTextSize\",\n      \"defaults\": {\n        \"hide_text_after_double_hash\": \"false\",\n        \"text_end\": \"NULL\",\n        \"wrap_width\": \"-1.0f\"\n      },\n      \"funcname\": \"CalcTextSize\",\n      \"location\": \"imgui:958\",\n      \"namespace\": \"ImGui\",\n      \"nonUDT\": 1,\n      \"ov_cimguiname\": \"igCalcTextSize\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const char*,bool,float)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igCalcTypematicRepeatAmount\": [\n    {\n      \"args\": \"(float t0,float t1,float repeat_delay,float repeat_rate)\",\n      \"argsT\": [\n        {\n          \"name\": \"t0\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"t1\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"repeat_delay\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"repeat_rate\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(float t0,float t1,float repeat_delay,float repeat_rate)\",\n      \"call_args\": \"(t0,t1,repeat_delay,repeat_rate)\",\n      \"cimguiname\": \"igCalcTypematicRepeatAmount\",\n      \"defaults\": {},\n      \"funcname\": \"CalcTypematicRepeatAmount\",\n      \"location\": \"imgui_internal:3188\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igCalcTypematicRepeatAmount\",\n      \"ret\": \"int\",\n      \"signature\": \"(float,float,float,float)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igCalcWindowNextAutoFitSize\": [\n    {\n      \"args\": \"(ImVec2 *pOut,ImGuiWindow* window)\",\n      \"argsT\": [\n        {\n          \"name\": \"pOut\",\n          \"type\": \"ImVec2*\"\n        },\n        {\n          \"name\": \"window\",\n          \"type\": \"ImGuiWindow*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiWindow* window)\",\n      \"call_args\": \"(window)\",\n      \"cimguiname\": \"igCalcWindowNextAutoFitSize\",\n      \"defaults\": {},\n      \"funcname\": \"CalcWindowNextAutoFitSize\",\n      \"location\": \"imgui_internal:2975\",\n      \"namespace\": \"ImGui\",\n      \"nonUDT\": 1,\n      \"ov_cimguiname\": \"igCalcWindowNextAutoFitSize\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiWindow*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igCalcWrapWidthForPos\": [\n    {\n      \"args\": \"(const ImVec2 pos,float wrap_pos_x)\",\n      \"argsT\": [\n        {\n          \"name\": \"pos\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"wrap_pos_x\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImVec2& pos,float wrap_pos_x)\",\n      \"call_args\": \"(pos,wrap_pos_x)\",\n      \"cimguiname\": \"igCalcWrapWidthForPos\",\n      \"defaults\": {},\n      \"funcname\": \"CalcWrapWidthForPos\",\n      \"location\": \"imgui_internal:3090\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igCalcWrapWidthForPos\",\n      \"ret\": \"float\",\n      \"signature\": \"(const ImVec2,float)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igCallContextHooks\": [\n    {\n      \"args\": \"(ImGuiContext* context,ImGuiContextHookType type)\",\n      \"argsT\": [\n        {\n          \"name\": \"context\",\n          \"type\": \"ImGuiContext*\"\n        },\n        {\n          \"name\": \"type\",\n          \"type\": \"ImGuiContextHookType\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiContext* context,ImGuiContextHookType type)\",\n      \"call_args\": \"(context,type)\",\n      \"cimguiname\": \"igCallContextHooks\",\n      \"defaults\": {},\n      \"funcname\": \"CallContextHooks\",\n      \"location\": \"imgui_internal:3027\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igCallContextHooks\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiContext*,ImGuiContextHookType)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igCheckbox\": [\n    {\n      \"args\": \"(const char* label,bool* v)\",\n      \"argsT\": [\n        {\n          \"name\": \"label\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"v\",\n          \"type\": \"bool*\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label,bool* v)\",\n      \"call_args\": \"(label,v)\",\n      \"cimguiname\": \"igCheckbox\",\n      \"defaults\": {},\n      \"funcname\": \"Checkbox\",\n      \"location\": \"imgui:554\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igCheckbox\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*,bool*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igCheckboxFlags\": [\n    {\n      \"args\": \"(const char* label,int* flags,int flags_value)\",\n      \"argsT\": [\n        {\n          \"name\": \"label\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"int*\"\n        },\n        {\n          \"name\": \"flags_value\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label,int* flags,int flags_value)\",\n      \"call_args\": \"(label,flags,flags_value)\",\n      \"cimguiname\": \"igCheckboxFlags\",\n      \"defaults\": {},\n      \"funcname\": \"CheckboxFlags\",\n      \"location\": \"imgui:555\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igCheckboxFlags_IntPtr\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*,int*,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label,unsigned int* flags,unsigned int flags_value)\",\n      \"argsT\": [\n        {\n          \"name\": \"label\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"unsigned int*\"\n        },\n        {\n          \"name\": \"flags_value\",\n          \"type\": \"unsigned int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label,unsigned int* flags,unsigned int flags_value)\",\n      \"call_args\": \"(label,flags,flags_value)\",\n      \"cimguiname\": \"igCheckboxFlags\",\n      \"defaults\": {},\n      \"funcname\": \"CheckboxFlags\",\n      \"location\": \"imgui:556\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igCheckboxFlags_UintPtr\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*,unsigned int*,unsigned int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label,ImS64* flags,ImS64 flags_value)\",\n      \"argsT\": [\n        {\n          \"name\": \"label\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImS64*\"\n        },\n        {\n          \"name\": \"flags_value\",\n          \"type\": \"ImS64\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label,ImS64* flags,ImS64 flags_value)\",\n      \"call_args\": \"(label,flags,flags_value)\",\n      \"cimguiname\": \"igCheckboxFlags\",\n      \"defaults\": {},\n      \"funcname\": \"CheckboxFlags\",\n      \"location\": \"imgui_internal:3407\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igCheckboxFlags_S64Ptr\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*,ImS64*,ImS64)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label,ImU64* flags,ImU64 flags_value)\",\n      \"argsT\": [\n        {\n          \"name\": \"label\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImU64*\"\n        },\n        {\n          \"name\": \"flags_value\",\n          \"type\": \"ImU64\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label,ImU64* flags,ImU64 flags_value)\",\n      \"call_args\": \"(label,flags,flags_value)\",\n      \"cimguiname\": \"igCheckboxFlags\",\n      \"defaults\": {},\n      \"funcname\": \"CheckboxFlags\",\n      \"location\": \"imgui_internal:3408\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igCheckboxFlags_U64Ptr\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*,ImU64*,ImU64)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igClearActiveID\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igClearActiveID\",\n      \"defaults\": {},\n      \"funcname\": \"ClearActiveID\",\n      \"location\": \"imgui_internal:3072\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igClearActiveID\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igClearDragDrop\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igClearDragDrop\",\n      \"defaults\": {},\n      \"funcname\": \"ClearDragDrop\",\n      \"location\": \"imgui_internal:3261\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igClearDragDrop\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igClearIniSettings\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igClearIniSettings\",\n      \"defaults\": {},\n      \"funcname\": \"ClearIniSettings\",\n      \"location\": \"imgui_internal:3036\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igClearIniSettings\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igClearWindowSettings\": [\n    {\n      \"args\": \"(const char* name)\",\n      \"argsT\": [\n        {\n          \"name\": \"name\",\n          \"type\": \"const char*\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* name)\",\n      \"call_args\": \"(name)\",\n      \"cimguiname\": \"igClearWindowSettings\",\n      \"defaults\": {},\n      \"funcname\": \"ClearWindowSettings\",\n      \"location\": \"imgui_internal:3045\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igClearWindowSettings\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igCloseButton\": [\n    {\n      \"args\": \"(ImGuiID id,const ImVec2 pos)\",\n      \"argsT\": [\n        {\n          \"name\": \"id\",\n          \"type\": \"ImGuiID\"\n        },\n        {\n          \"name\": \"pos\",\n          \"type\": \"const ImVec2\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiID id,const ImVec2& pos)\",\n      \"call_args\": \"(id,pos)\",\n      \"cimguiname\": \"igCloseButton\",\n      \"defaults\": {},\n      \"funcname\": \"CloseButton\",\n      \"location\": \"imgui_internal:3411\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igCloseButton\",\n      \"ret\": \"bool\",\n      \"signature\": \"(ImGuiID,const ImVec2)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igCloseCurrentPopup\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igCloseCurrentPopup\",\n      \"defaults\": {},\n      \"funcname\": \"CloseCurrentPopup\",\n      \"location\": \"imgui:776\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igCloseCurrentPopup\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igClosePopupToLevel\": [\n    {\n      \"args\": \"(int remaining,bool restore_focus_to_window_under_popup)\",\n      \"argsT\": [\n        {\n          \"name\": \"remaining\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"restore_focus_to_window_under_popup\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"argsoriginal\": \"(int remaining,bool restore_focus_to_window_under_popup)\",\n      \"call_args\": \"(remaining,restore_focus_to_window_under_popup)\",\n      \"cimguiname\": \"igClosePopupToLevel\",\n      \"defaults\": {},\n      \"funcname\": \"ClosePopupToLevel\",\n      \"location\": \"imgui_internal:3111\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igClosePopupToLevel\",\n      \"ret\": \"void\",\n      \"signature\": \"(int,bool)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igClosePopupsExceptModals\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igClosePopupsExceptModals\",\n      \"defaults\": {},\n      \"funcname\": \"ClosePopupsExceptModals\",\n      \"location\": \"imgui_internal:3113\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igClosePopupsExceptModals\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igClosePopupsOverWindow\": [\n    {\n      \"args\": \"(ImGuiWindow* ref_window,bool restore_focus_to_window_under_popup)\",\n      \"argsT\": [\n        {\n          \"name\": \"ref_window\",\n          \"type\": \"ImGuiWindow*\"\n        },\n        {\n          \"name\": \"restore_focus_to_window_under_popup\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiWindow* ref_window,bool restore_focus_to_window_under_popup)\",\n      \"call_args\": \"(ref_window,restore_focus_to_window_under_popup)\",\n      \"cimguiname\": \"igClosePopupsOverWindow\",\n      \"defaults\": {},\n      \"funcname\": \"ClosePopupsOverWindow\",\n      \"location\": \"imgui_internal:3112\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igClosePopupsOverWindow\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiWindow*,bool)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igCollapseButton\": [\n    {\n      \"args\": \"(ImGuiID id,const ImVec2 pos)\",\n      \"argsT\": [\n        {\n          \"name\": \"id\",\n          \"type\": \"ImGuiID\"\n        },\n        {\n          \"name\": \"pos\",\n          \"type\": \"const ImVec2\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiID id,const ImVec2& pos)\",\n      \"call_args\": \"(id,pos)\",\n      \"cimguiname\": \"igCollapseButton\",\n      \"defaults\": {},\n      \"funcname\": \"CollapseButton\",\n      \"location\": \"imgui_internal:3412\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igCollapseButton\",\n      \"ret\": \"bool\",\n      \"signature\": \"(ImGuiID,const ImVec2)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igCollapsingHeader\": [\n    {\n      \"args\": \"(const char* label,ImGuiTreeNodeFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"label\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiTreeNodeFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label,ImGuiTreeNodeFlags flags=0)\",\n      \"call_args\": \"(label,flags)\",\n      \"cimguiname\": \"igCollapsingHeader\",\n      \"defaults\": {\n        \"flags\": \"0\"\n      },\n      \"funcname\": \"CollapsingHeader\",\n      \"location\": \"imgui:671\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igCollapsingHeader_TreeNodeFlags\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*,ImGuiTreeNodeFlags)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label,bool* p_visible,ImGuiTreeNodeFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"label\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"p_visible\",\n          \"type\": \"bool*\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiTreeNodeFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label,bool* p_visible,ImGuiTreeNodeFlags flags=0)\",\n      \"call_args\": \"(label,p_visible,flags)\",\n      \"cimguiname\": \"igCollapsingHeader\",\n      \"defaults\": {\n        \"flags\": \"0\"\n      },\n      \"funcname\": \"CollapsingHeader\",\n      \"location\": \"imgui:672\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igCollapsingHeader_BoolPtr\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*,bool*,ImGuiTreeNodeFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igColorButton\": [\n    {\n      \"args\": \"(const char* desc_id,const ImVec4 col,ImGuiColorEditFlags flags,const ImVec2 size)\",\n      \"argsT\": [\n        {\n          \"name\": \"desc_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"col\",\n          \"type\": \"const ImVec4\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiColorEditFlags\"\n        },\n        {\n          \"name\": \"size\",\n          \"type\": \"const ImVec2\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* desc_id,const ImVec4& col,ImGuiColorEditFlags flags=0,const ImVec2& size=ImVec2(0,0))\",\n      \"call_args\": \"(desc_id,col,flags,size)\",\n      \"cimguiname\": \"igColorButton\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"size\": \"ImVec2(0,0)\"\n      },\n      \"funcname\": \"ColorButton\",\n      \"location\": \"imgui:652\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igColorButton\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*,const ImVec4,ImGuiColorEditFlags,const ImVec2)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igColorConvertFloat4ToU32\": [\n    {\n      \"args\": \"(const ImVec4 in)\",\n      \"argsT\": [\n        {\n          \"name\": \"in\",\n          \"type\": \"const ImVec4\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImVec4& in)\",\n      \"call_args\": \"(in)\",\n      \"cimguiname\": \"igColorConvertFloat4ToU32\",\n      \"defaults\": {},\n      \"funcname\": \"ColorConvertFloat4ToU32\",\n      \"location\": \"imgui:962\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igColorConvertFloat4ToU32\",\n      \"ret\": \"ImU32\",\n      \"signature\": \"(const ImVec4)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igColorConvertHSVtoRGB\": [\n    {\n      \"args\": \"(float h,float s,float v,float* out_r,float* out_g,float* out_b)\",\n      \"argsT\": [\n        {\n          \"name\": \"h\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"s\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"v\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"out_r\",\n          \"reftoptr\": true,\n          \"type\": \"float*\"\n        },\n        {\n          \"name\": \"out_g\",\n          \"reftoptr\": true,\n          \"type\": \"float*\"\n        },\n        {\n          \"name\": \"out_b\",\n          \"reftoptr\": true,\n          \"type\": \"float*\"\n        }\n      ],\n      \"argsoriginal\": \"(float h,float s,float v,float& out_r,float& out_g,float& out_b)\",\n      \"call_args\": \"(h,s,v,*out_r,*out_g,*out_b)\",\n      \"cimguiname\": \"igColorConvertHSVtoRGB\",\n      \"defaults\": {},\n      \"funcname\": \"ColorConvertHSVtoRGB\",\n      \"location\": \"imgui:964\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igColorConvertHSVtoRGB\",\n      \"ret\": \"void\",\n      \"signature\": \"(float,float,float,float*,float*,float*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igColorConvertRGBtoHSV\": [\n    {\n      \"args\": \"(float r,float g,float b,float* out_h,float* out_s,float* out_v)\",\n      \"argsT\": [\n        {\n          \"name\": \"r\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"g\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"b\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"out_h\",\n          \"reftoptr\": true,\n          \"type\": \"float*\"\n        },\n        {\n          \"name\": \"out_s\",\n          \"reftoptr\": true,\n          \"type\": \"float*\"\n        },\n        {\n          \"name\": \"out_v\",\n          \"reftoptr\": true,\n          \"type\": \"float*\"\n        }\n      ],\n      \"argsoriginal\": \"(float r,float g,float b,float& out_h,float& out_s,float& out_v)\",\n      \"call_args\": \"(r,g,b,*out_h,*out_s,*out_v)\",\n      \"cimguiname\": \"igColorConvertRGBtoHSV\",\n      \"defaults\": {},\n      \"funcname\": \"ColorConvertRGBtoHSV\",\n      \"location\": \"imgui:963\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igColorConvertRGBtoHSV\",\n      \"ret\": \"void\",\n      \"signature\": \"(float,float,float,float*,float*,float*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igColorConvertU32ToFloat4\": [\n    {\n      \"args\": \"(ImVec4 *pOut,ImU32 in)\",\n      \"argsT\": [\n        {\n          \"name\": \"pOut\",\n          \"type\": \"ImVec4*\"\n        },\n        {\n          \"name\": \"in\",\n          \"type\": \"ImU32\"\n        }\n      ],\n      \"argsoriginal\": \"(ImU32 in)\",\n      \"call_args\": \"(in)\",\n      \"cimguiname\": \"igColorConvertU32ToFloat4\",\n      \"defaults\": {},\n      \"funcname\": \"ColorConvertU32ToFloat4\",\n      \"location\": \"imgui:961\",\n      \"namespace\": \"ImGui\",\n      \"nonUDT\": 1,\n      \"ov_cimguiname\": \"igColorConvertU32ToFloat4\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImU32)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igColorEdit3\": [\n    {\n      \"args\": \"(const char* label,float col[3],ImGuiColorEditFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"label\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"col\",\n          \"type\": \"float[3]\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiColorEditFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label,float col[3],ImGuiColorEditFlags flags=0)\",\n      \"call_args\": \"(label,col,flags)\",\n      \"cimguiname\": \"igColorEdit3\",\n      \"defaults\": {\n        \"flags\": \"0\"\n      },\n      \"funcname\": \"ColorEdit3\",\n      \"location\": \"imgui:648\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igColorEdit3\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*,float[3],ImGuiColorEditFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igColorEdit4\": [\n    {\n      \"args\": \"(const char* label,float col[4],ImGuiColorEditFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"label\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"col\",\n          \"type\": \"float[4]\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiColorEditFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label,float col[4],ImGuiColorEditFlags flags=0)\",\n      \"call_args\": \"(label,col,flags)\",\n      \"cimguiname\": \"igColorEdit4\",\n      \"defaults\": {\n        \"flags\": \"0\"\n      },\n      \"funcname\": \"ColorEdit4\",\n      \"location\": \"imgui:649\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igColorEdit4\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*,float[4],ImGuiColorEditFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igColorEditOptionsPopup\": [\n    {\n      \"args\": \"(const float* col,ImGuiColorEditFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"col\",\n          \"type\": \"const float*\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiColorEditFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const float* col,ImGuiColorEditFlags flags)\",\n      \"call_args\": \"(col,flags)\",\n      \"cimguiname\": \"igColorEditOptionsPopup\",\n      \"defaults\": {},\n      \"funcname\": \"ColorEditOptionsPopup\",\n      \"location\": \"imgui_internal:3463\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igColorEditOptionsPopup\",\n      \"ret\": \"void\",\n      \"signature\": \"(const float*,ImGuiColorEditFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igColorPicker3\": [\n    {\n      \"args\": \"(const char* label,float col[3],ImGuiColorEditFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"label\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"col\",\n          \"type\": \"float[3]\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiColorEditFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label,float col[3],ImGuiColorEditFlags flags=0)\",\n      \"call_args\": \"(label,col,flags)\",\n      \"cimguiname\": \"igColorPicker3\",\n      \"defaults\": {\n        \"flags\": \"0\"\n      },\n      \"funcname\": \"ColorPicker3\",\n      \"location\": \"imgui:650\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igColorPicker3\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*,float[3],ImGuiColorEditFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igColorPicker4\": [\n    {\n      \"args\": \"(const char* label,float col[4],ImGuiColorEditFlags flags,const float* ref_col)\",\n      \"argsT\": [\n        {\n          \"name\": \"label\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"col\",\n          \"type\": \"float[4]\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiColorEditFlags\"\n        },\n        {\n          \"name\": \"ref_col\",\n          \"type\": \"const float*\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label,float col[4],ImGuiColorEditFlags flags=0,const float* ref_col=((void*)0))\",\n      \"call_args\": \"(label,col,flags,ref_col)\",\n      \"cimguiname\": \"igColorPicker4\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"ref_col\": \"NULL\"\n      },\n      \"funcname\": \"ColorPicker4\",\n      \"location\": \"imgui:651\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igColorPicker4\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*,float[4],ImGuiColorEditFlags,const float*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igColorPickerOptionsPopup\": [\n    {\n      \"args\": \"(const float* ref_col,ImGuiColorEditFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"ref_col\",\n          \"type\": \"const float*\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiColorEditFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const float* ref_col,ImGuiColorEditFlags flags)\",\n      \"call_args\": \"(ref_col,flags)\",\n      \"cimguiname\": \"igColorPickerOptionsPopup\",\n      \"defaults\": {},\n      \"funcname\": \"ColorPickerOptionsPopup\",\n      \"location\": \"imgui_internal:3464\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igColorPickerOptionsPopup\",\n      \"ret\": \"void\",\n      \"signature\": \"(const float*,ImGuiColorEditFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igColorTooltip\": [\n    {\n      \"args\": \"(const char* text,const float* col,ImGuiColorEditFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"text\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"col\",\n          \"type\": \"const float*\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiColorEditFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* text,const float* col,ImGuiColorEditFlags flags)\",\n      \"call_args\": \"(text,col,flags)\",\n      \"cimguiname\": \"igColorTooltip\",\n      \"defaults\": {},\n      \"funcname\": \"ColorTooltip\",\n      \"location\": \"imgui_internal:3462\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igColorTooltip\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const float*,ImGuiColorEditFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igColumns\": [\n    {\n      \"args\": \"(int count,const char* id,bool borders)\",\n      \"argsT\": [\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"borders\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"argsoriginal\": \"(int count=1,const char* id=((void*)0),bool borders=true)\",\n      \"call_args\": \"(count,id,borders)\",\n      \"cimguiname\": \"igColumns\",\n      \"defaults\": {\n        \"borders\": \"true\",\n        \"count\": \"1\",\n        \"id\": \"NULL\"\n      },\n      \"funcname\": \"Columns\",\n      \"location\": \"imgui:852\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igColumns\",\n      \"ret\": \"void\",\n      \"signature\": \"(int,const char*,bool)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igCombo\": [\n    {\n      \"args\": \"(const char* label,int* current_item,const char* const items[],int items_count,int popup_max_height_in_items)\",\n      \"argsT\": [\n        {\n          \"name\": \"label\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"current_item\",\n          \"type\": \"int*\"\n        },\n        {\n          \"name\": \"items\",\n          \"type\": \"const char* const[]\"\n        },\n        {\n          \"name\": \"items_count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"popup_max_height_in_items\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label,int* current_item,const char* const items[],int items_count,int popup_max_height_in_items=-1)\",\n      \"call_args\": \"(label,current_item,items,items_count,popup_max_height_in_items)\",\n      \"cimguiname\": \"igCombo\",\n      \"defaults\": {\n        \"popup_max_height_in_items\": \"-1\"\n      },\n      \"funcname\": \"Combo\",\n      \"location\": \"imgui:577\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igCombo_Str_arr\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*,int*,const char* const[],int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label,int* current_item,const char* items_separated_by_zeros,int popup_max_height_in_items)\",\n      \"argsT\": [\n        {\n          \"name\": \"label\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"current_item\",\n          \"type\": \"int*\"\n        },\n        {\n          \"name\": \"items_separated_by_zeros\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"popup_max_height_in_items\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label,int* current_item,const char* items_separated_by_zeros,int popup_max_height_in_items=-1)\",\n      \"call_args\": \"(label,current_item,items_separated_by_zeros,popup_max_height_in_items)\",\n      \"cimguiname\": \"igCombo\",\n      \"defaults\": {\n        \"popup_max_height_in_items\": \"-1\"\n      },\n      \"funcname\": \"Combo\",\n      \"location\": \"imgui:578\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igCombo_Str\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*,int*,const char*,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label,int* current_item,const char*(*getter)(void* user_data,int idx),void* user_data,int items_count,int popup_max_height_in_items)\",\n      \"argsT\": [\n        {\n          \"name\": \"label\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"current_item\",\n          \"type\": \"int*\"\n        },\n        {\n          \"name\": \"getter\",\n          \"ret\": \"const char*\",\n          \"signature\": \"(void* user_data,int idx)\",\n          \"type\": \"const char*(*)(void* user_data,int idx)\"\n        },\n        {\n          \"name\": \"user_data\",\n          \"type\": \"void*\"\n        },\n        {\n          \"name\": \"items_count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"popup_max_height_in_items\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label,int* current_item,const char*(*getter)(void* user_data,int idx),void* user_data,int items_count,int popup_max_height_in_items=-1)\",\n      \"call_args\": \"(label,current_item,getter,user_data,items_count,popup_max_height_in_items)\",\n      \"cimguiname\": \"igCombo\",\n      \"defaults\": {\n        \"popup_max_height_in_items\": \"-1\"\n      },\n      \"funcname\": \"Combo\",\n      \"location\": \"imgui:579\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igCombo_FnStrPtr\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*,int*,const char*(*)(void*,int),void*,int,int)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igConvertSingleModFlagToKey\": [\n    {\n      \"args\": \"(ImGuiKey key)\",\n      \"argsT\": [\n        {\n          \"name\": \"key\",\n          \"type\": \"ImGuiKey\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiKey key)\",\n      \"call_args\": \"(key)\",\n      \"cimguiname\": \"igConvertSingleModFlagToKey\",\n      \"defaults\": {},\n      \"funcname\": \"ConvertSingleModFlagToKey\",\n      \"location\": \"imgui_internal:3172\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igConvertSingleModFlagToKey\",\n      \"ret\": \"ImGuiKey\",\n      \"signature\": \"(ImGuiKey)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igCreateContext\": [\n    {\n      \"args\": \"(ImFontAtlas* shared_font_atlas)\",\n      \"argsT\": [\n        {\n          \"name\": \"shared_font_atlas\",\n          \"type\": \"ImFontAtlas*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImFontAtlas* shared_font_atlas=((void*)0))\",\n      \"call_args\": \"(shared_font_atlas)\",\n      \"cimguiname\": \"igCreateContext\",\n      \"defaults\": {\n        \"shared_font_atlas\": \"NULL\"\n      },\n      \"funcname\": \"CreateContext\",\n      \"location\": \"imgui:327\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igCreateContext\",\n      \"ret\": \"ImGuiContext*\",\n      \"signature\": \"(ImFontAtlas*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igCreateNewWindowSettings\": [\n    {\n      \"args\": \"(const char* name)\",\n      \"argsT\": [\n        {\n          \"name\": \"name\",\n          \"type\": \"const char*\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* name)\",\n      \"call_args\": \"(name)\",\n      \"cimguiname\": \"igCreateNewWindowSettings\",\n      \"defaults\": {},\n      \"funcname\": \"CreateNewWindowSettings\",\n      \"location\": \"imgui_internal:3042\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igCreateNewWindowSettings\",\n      \"ret\": \"ImGuiWindowSettings*\",\n      \"signature\": \"(const char*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igDataTypeApplyFromText\": [\n    {\n      \"args\": \"(const char* buf,ImGuiDataType data_type,void* p_data,const char* format,void* p_data_when_empty)\",\n      \"argsT\": [\n        {\n          \"name\": \"buf\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"data_type\",\n          \"type\": \"ImGuiDataType\"\n        },\n        {\n          \"name\": \"p_data\",\n          \"type\": \"void*\"\n        },\n        {\n          \"name\": \"format\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"p_data_when_empty\",\n          \"type\": \"void*\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* buf,ImGuiDataType data_type,void* p_data,const char* format,void* p_data_when_empty=((void*)0))\",\n      \"call_args\": \"(buf,data_type,p_data,format,p_data_when_empty)\",\n      \"cimguiname\": \"igDataTypeApplyFromText\",\n      \"defaults\": {\n        \"p_data_when_empty\": \"NULL\"\n      },\n      \"funcname\": \"DataTypeApplyFromText\",\n      \"location\": \"imgui_internal:3447\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igDataTypeApplyFromText\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*,ImGuiDataType,void*,const char*,void*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igDataTypeApplyOp\": [\n    {\n      \"args\": \"(ImGuiDataType data_type,int op,void* output,const void* arg_1,const void* arg_2)\",\n      \"argsT\": [\n        {\n          \"name\": \"data_type\",\n          \"type\": \"ImGuiDataType\"\n        },\n        {\n          \"name\": \"op\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"output\",\n          \"type\": \"void*\"\n        },\n        {\n          \"name\": \"arg_1\",\n          \"type\": \"const void*\"\n        },\n        {\n          \"name\": \"arg_2\",\n          \"type\": \"const void*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiDataType data_type,int op,void* output,const void* arg_1,const void* arg_2)\",\n      \"call_args\": \"(data_type,op,output,arg_1,arg_2)\",\n      \"cimguiname\": \"igDataTypeApplyOp\",\n      \"defaults\": {},\n      \"funcname\": \"DataTypeApplyOp\",\n      \"location\": \"imgui_internal:3446\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igDataTypeApplyOp\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiDataType,int,void*,const void*,const void*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igDataTypeClamp\": [\n    {\n      \"args\": \"(ImGuiDataType data_type,void* p_data,const void* p_min,const void* p_max)\",\n      \"argsT\": [\n        {\n          \"name\": \"data_type\",\n          \"type\": \"ImGuiDataType\"\n        },\n        {\n          \"name\": \"p_data\",\n          \"type\": \"void*\"\n        },\n        {\n          \"name\": \"p_min\",\n          \"type\": \"const void*\"\n        },\n        {\n          \"name\": \"p_max\",\n          \"type\": \"const void*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiDataType data_type,void* p_data,const void* p_min,const void* p_max)\",\n      \"call_args\": \"(data_type,p_data,p_min,p_max)\",\n      \"cimguiname\": \"igDataTypeClamp\",\n      \"defaults\": {},\n      \"funcname\": \"DataTypeClamp\",\n      \"location\": \"imgui_internal:3449\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igDataTypeClamp\",\n      \"ret\": \"bool\",\n      \"signature\": \"(ImGuiDataType,void*,const void*,const void*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igDataTypeCompare\": [\n    {\n      \"args\": \"(ImGuiDataType data_type,const void* arg_1,const void* arg_2)\",\n      \"argsT\": [\n        {\n          \"name\": \"data_type\",\n          \"type\": \"ImGuiDataType\"\n        },\n        {\n          \"name\": \"arg_1\",\n          \"type\": \"const void*\"\n        },\n        {\n          \"name\": \"arg_2\",\n          \"type\": \"const void*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiDataType data_type,const void* arg_1,const void* arg_2)\",\n      \"call_args\": \"(data_type,arg_1,arg_2)\",\n      \"cimguiname\": \"igDataTypeCompare\",\n      \"defaults\": {},\n      \"funcname\": \"DataTypeCompare\",\n      \"location\": \"imgui_internal:3448\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igDataTypeCompare\",\n      \"ret\": \"int\",\n      \"signature\": \"(ImGuiDataType,const void*,const void*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igDataTypeFormatString\": [\n    {\n      \"args\": \"(char* buf,int buf_size,ImGuiDataType data_type,const void* p_data,const char* format)\",\n      \"argsT\": [\n        {\n          \"name\": \"buf\",\n          \"type\": \"char*\"\n        },\n        {\n          \"name\": \"buf_size\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"data_type\",\n          \"type\": \"ImGuiDataType\"\n        },\n        {\n          \"name\": \"p_data\",\n          \"type\": \"const void*\"\n        },\n        {\n          \"name\": \"format\",\n          \"type\": \"const char*\"\n        }\n      ],\n      \"argsoriginal\": \"(char* buf,int buf_size,ImGuiDataType data_type,const void* p_data,const char* format)\",\n      \"call_args\": \"(buf,buf_size,data_type,p_data,format)\",\n      \"cimguiname\": \"igDataTypeFormatString\",\n      \"defaults\": {},\n      \"funcname\": \"DataTypeFormatString\",\n      \"location\": \"imgui_internal:3445\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igDataTypeFormatString\",\n      \"ret\": \"int\",\n      \"signature\": \"(char*,int,ImGuiDataType,const void*,const char*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igDataTypeGetInfo\": [\n    {\n      \"args\": \"(ImGuiDataType data_type)\",\n      \"argsT\": [\n        {\n          \"name\": \"data_type\",\n          \"type\": \"ImGuiDataType\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiDataType data_type)\",\n      \"call_args\": \"(data_type)\",\n      \"cimguiname\": \"igDataTypeGetInfo\",\n      \"defaults\": {},\n      \"funcname\": \"DataTypeGetInfo\",\n      \"location\": \"imgui_internal:3444\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igDataTypeGetInfo\",\n      \"ret\": \"const ImGuiDataTypeInfo*\",\n      \"signature\": \"(ImGuiDataType)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igDataTypeIsZero\": [\n    {\n      \"args\": \"(ImGuiDataType data_type,const void* p_data)\",\n      \"argsT\": [\n        {\n          \"name\": \"data_type\",\n          \"type\": \"ImGuiDataType\"\n        },\n        {\n          \"name\": \"p_data\",\n          \"type\": \"const void*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiDataType data_type,const void* p_data)\",\n      \"call_args\": \"(data_type,p_data)\",\n      \"cimguiname\": \"igDataTypeIsZero\",\n      \"defaults\": {},\n      \"funcname\": \"DataTypeIsZero\",\n      \"location\": \"imgui_internal:3450\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igDataTypeIsZero\",\n      \"ret\": \"bool\",\n      \"signature\": \"(ImGuiDataType,const void*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igDebugAllocHook\": [\n    {\n      \"args\": \"(ImGuiDebugAllocInfo* info,int frame_count,void* ptr,size_t size)\",\n      \"argsT\": [\n        {\n          \"name\": \"info\",\n          \"type\": \"ImGuiDebugAllocInfo*\"\n        },\n        {\n          \"name\": \"frame_count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"ptr\",\n          \"type\": \"void*\"\n        },\n        {\n          \"name\": \"size\",\n          \"type\": \"size_t\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiDebugAllocInfo* info,int frame_count,void* ptr,size_t size)\",\n      \"call_args\": \"(info,frame_count,ptr,size)\",\n      \"cimguiname\": \"igDebugAllocHook\",\n      \"defaults\": {},\n      \"funcname\": \"DebugAllocHook\",\n      \"location\": \"imgui_internal:3490\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igDebugAllocHook\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiDebugAllocInfo*,int,void*,size_t)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igDebugBreakButton\": [\n    {\n      \"args\": \"(const char* label,const char* description_of_location)\",\n      \"argsT\": [\n        {\n          \"name\": \"label\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"description_of_location\",\n          \"type\": \"const char*\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label,const char* description_of_location)\",\n      \"call_args\": \"(label,description_of_location)\",\n      \"cimguiname\": \"igDebugBreakButton\",\n      \"defaults\": {},\n      \"funcname\": \"DebugBreakButton\",\n      \"location\": \"imgui_internal:3499\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igDebugBreakButton\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*,const char*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igDebugBreakButtonTooltip\": [\n    {\n      \"args\": \"(bool keyboard_only,const char* description_of_location)\",\n      \"argsT\": [\n        {\n          \"name\": \"keyboard_only\",\n          \"type\": \"bool\"\n        },\n        {\n          \"name\": \"description_of_location\",\n          \"type\": \"const char*\"\n        }\n      ],\n      \"argsoriginal\": \"(bool keyboard_only,const char* description_of_location)\",\n      \"call_args\": \"(keyboard_only,description_of_location)\",\n      \"cimguiname\": \"igDebugBreakButtonTooltip\",\n      \"defaults\": {},\n      \"funcname\": \"DebugBreakButtonTooltip\",\n      \"location\": \"imgui_internal:3500\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igDebugBreakButtonTooltip\",\n      \"ret\": \"void\",\n      \"signature\": \"(bool,const char*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igDebugBreakClearData\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igDebugBreakClearData\",\n      \"defaults\": {},\n      \"funcname\": \"DebugBreakClearData\",\n      \"location\": \"imgui_internal:3498\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igDebugBreakClearData\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igDebugCheckVersionAndDataLayout\": [\n    {\n      \"args\": \"(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)\",\n      \"argsT\": [\n        {\n          \"name\": \"version_str\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"sz_io\",\n          \"type\": \"size_t\"\n        },\n        {\n          \"name\": \"sz_style\",\n          \"type\": \"size_t\"\n        },\n        {\n          \"name\": \"sz_vec2\",\n          \"type\": \"size_t\"\n        },\n        {\n          \"name\": \"sz_vec4\",\n          \"type\": \"size_t\"\n        },\n        {\n          \"name\": \"sz_drawvert\",\n          \"type\": \"size_t\"\n        },\n        {\n          \"name\": \"sz_drawidx\",\n          \"type\": \"size_t\"\n        }\n      ],\n      \"argsoriginal\": \"(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)\",\n      \"call_args\": \"(version_str,sz_io,sz_style,sz_vec2,sz_vec4,sz_drawvert,sz_drawidx)\",\n      \"cimguiname\": \"igDebugCheckVersionAndDataLayout\",\n      \"defaults\": {},\n      \"funcname\": \"DebugCheckVersionAndDataLayout\",\n      \"location\": \"imgui:1044\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igDebugCheckVersionAndDataLayout\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*,size_t,size_t,size_t,size_t,size_t,size_t)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igDebugDrawCursorPos\": [\n    {\n      \"args\": \"(ImU32 col)\",\n      \"argsT\": [\n        {\n          \"name\": \"col\",\n          \"type\": \"ImU32\"\n        }\n      ],\n      \"argsoriginal\": \"(ImU32 col=(((ImU32)(255)<<24)|((ImU32)(0)<<16)|((ImU32)(0)<<8)|((ImU32)(255)<<0)))\",\n      \"call_args\": \"(col)\",\n      \"cimguiname\": \"igDebugDrawCursorPos\",\n      \"defaults\": {\n        \"col\": \"4278190335\"\n      },\n      \"funcname\": \"DebugDrawCursorPos\",\n      \"location\": \"imgui_internal:3491\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igDebugDrawCursorPos\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImU32)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igDebugDrawItemRect\": [\n    {\n      \"args\": \"(ImU32 col)\",\n      \"argsT\": [\n        {\n          \"name\": \"col\",\n          \"type\": \"ImU32\"\n        }\n      ],\n      \"argsoriginal\": \"(ImU32 col=(((ImU32)(255)<<24)|((ImU32)(0)<<16)|((ImU32)(0)<<8)|((ImU32)(255)<<0)))\",\n      \"call_args\": \"(col)\",\n      \"cimguiname\": \"igDebugDrawItemRect\",\n      \"defaults\": {\n        \"col\": \"4278190335\"\n      },\n      \"funcname\": \"DebugDrawItemRect\",\n      \"location\": \"imgui_internal:3493\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igDebugDrawItemRect\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImU32)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igDebugDrawLineExtents\": [\n    {\n      \"args\": \"(ImU32 col)\",\n      \"argsT\": [\n        {\n          \"name\": \"col\",\n          \"type\": \"ImU32\"\n        }\n      ],\n      \"argsoriginal\": \"(ImU32 col=(((ImU32)(255)<<24)|((ImU32)(0)<<16)|((ImU32)(0)<<8)|((ImU32)(255)<<0)))\",\n      \"call_args\": \"(col)\",\n      \"cimguiname\": \"igDebugDrawLineExtents\",\n      \"defaults\": {\n        \"col\": \"4278190335\"\n      },\n      \"funcname\": \"DebugDrawLineExtents\",\n      \"location\": \"imgui_internal:3492\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igDebugDrawLineExtents\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImU32)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igDebugFlashStyleColor\": [\n    {\n      \"args\": \"(ImGuiCol idx)\",\n      \"argsT\": [\n        {\n          \"name\": \"idx\",\n          \"type\": \"ImGuiCol\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiCol idx)\",\n      \"call_args\": \"(idx)\",\n      \"cimguiname\": \"igDebugFlashStyleColor\",\n      \"defaults\": {},\n      \"funcname\": \"DebugFlashStyleColor\",\n      \"location\": \"imgui:1042\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igDebugFlashStyleColor\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiCol)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igDebugHookIdInfo\": [\n    {\n      \"args\": \"(ImGuiID id,ImGuiDataType data_type,const void* data_id,const void* data_id_end)\",\n      \"argsT\": [\n        {\n          \"name\": \"id\",\n          \"type\": \"ImGuiID\"\n        },\n        {\n          \"name\": \"data_type\",\n          \"type\": \"ImGuiDataType\"\n        },\n        {\n          \"name\": \"data_id\",\n          \"type\": \"const void*\"\n        },\n        {\n          \"name\": \"data_id_end\",\n          \"type\": \"const void*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiID id,ImGuiDataType data_type,const void* data_id,const void* data_id_end)\",\n      \"call_args\": \"(id,data_type,data_id,data_id_end)\",\n      \"cimguiname\": \"igDebugHookIdInfo\",\n      \"defaults\": {},\n      \"funcname\": \"DebugHookIdInfo\",\n      \"location\": \"imgui_internal:3502\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igDebugHookIdInfo\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiID,ImGuiDataType,const void*,const void*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igDebugLocateItem\": [\n    {\n      \"args\": \"(ImGuiID target_id)\",\n      \"argsT\": [\n        {\n          \"name\": \"target_id\",\n          \"type\": \"ImGuiID\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiID target_id)\",\n      \"call_args\": \"(target_id)\",\n      \"cimguiname\": \"igDebugLocateItem\",\n      \"defaults\": {},\n      \"funcname\": \"DebugLocateItem\",\n      \"location\": \"imgui_internal:3495\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igDebugLocateItem\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiID)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igDebugLocateItemOnHover\": [\n    {\n      \"args\": \"(ImGuiID target_id)\",\n      \"argsT\": [\n        {\n          \"name\": \"target_id\",\n          \"type\": \"ImGuiID\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiID target_id)\",\n      \"call_args\": \"(target_id)\",\n      \"cimguiname\": \"igDebugLocateItemOnHover\",\n      \"defaults\": {},\n      \"funcname\": \"DebugLocateItemOnHover\",\n      \"location\": \"imgui_internal:3496\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igDebugLocateItemOnHover\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiID)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igDebugLocateItemResolveWithLastItem\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igDebugLocateItemResolveWithLastItem\",\n      \"defaults\": {},\n      \"funcname\": \"DebugLocateItemResolveWithLastItem\",\n      \"location\": \"imgui_internal:3497\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igDebugLocateItemResolveWithLastItem\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igDebugLog\": [\n    {\n      \"args\": \"(const char* fmt,...)\",\n      \"argsT\": [\n        {\n          \"name\": \"fmt\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"...\",\n          \"type\": \"...\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* fmt,...)\",\n      \"call_args\": \"(fmt,...)\",\n      \"cimguiname\": \"igDebugLog\",\n      \"defaults\": {},\n      \"funcname\": \"DebugLog\",\n      \"isvararg\": \"...)\",\n      \"location\": \"imgui:1046\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igDebugLog\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,...)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igDebugLogV\": [\n    {\n      \"args\": \"(const char* fmt,va_list args)\",\n      \"argsT\": [\n        {\n          \"name\": \"fmt\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"args\",\n          \"type\": \"va_list\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* fmt,va_list args)\",\n      \"call_args\": \"(fmt,args)\",\n      \"cimguiname\": \"igDebugLogV\",\n      \"defaults\": {},\n      \"funcname\": \"DebugLogV\",\n      \"location\": \"imgui:1047\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igDebugLogV\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,va_list)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igDebugNodeColumns\": [\n    {\n      \"args\": \"(ImGuiOldColumns* columns)\",\n      \"argsT\": [\n        {\n          \"name\": \"columns\",\n          \"type\": \"ImGuiOldColumns*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiOldColumns* columns)\",\n      \"call_args\": \"(columns)\",\n      \"cimguiname\": \"igDebugNodeColumns\",\n      \"defaults\": {},\n      \"funcname\": \"DebugNodeColumns\",\n      \"location\": \"imgui_internal:3503\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igDebugNodeColumns\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiOldColumns*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igDebugNodeDrawCmdShowMeshAndBoundingBox\": [\n    {\n      \"args\": \"(ImDrawList* out_draw_list,const ImDrawList* draw_list,const ImDrawCmd* draw_cmd,bool show_mesh,bool show_aabb)\",\n      \"argsT\": [\n        {\n          \"name\": \"out_draw_list\",\n          \"type\": \"ImDrawList*\"\n        },\n        {\n          \"name\": \"draw_list\",\n          \"type\": \"const ImDrawList*\"\n        },\n        {\n          \"name\": \"draw_cmd\",\n          \"type\": \"const ImDrawCmd*\"\n        },\n        {\n          \"name\": \"show_mesh\",\n          \"type\": \"bool\"\n        },\n        {\n          \"name\": \"show_aabb\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"argsoriginal\": \"(ImDrawList* out_draw_list,const ImDrawList* draw_list,const ImDrawCmd* draw_cmd,bool show_mesh,bool show_aabb)\",\n      \"call_args\": \"(out_draw_list,draw_list,draw_cmd,show_mesh,show_aabb)\",\n      \"cimguiname\": \"igDebugNodeDrawCmdShowMeshAndBoundingBox\",\n      \"defaults\": {},\n      \"funcname\": \"DebugNodeDrawCmdShowMeshAndBoundingBox\",\n      \"location\": \"imgui_internal:3505\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igDebugNodeDrawCmdShowMeshAndBoundingBox\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImDrawList*,const ImDrawList*,const ImDrawCmd*,bool,bool)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igDebugNodeDrawList\": [\n    {\n      \"args\": \"(ImGuiWindow* window,ImGuiViewportP* viewport,const ImDrawList* draw_list,const char* label)\",\n      \"argsT\": [\n        {\n          \"name\": \"window\",\n          \"type\": \"ImGuiWindow*\"\n        },\n        {\n          \"name\": \"viewport\",\n          \"type\": \"ImGuiViewportP*\"\n        },\n        {\n          \"name\": \"draw_list\",\n          \"type\": \"const ImDrawList*\"\n        },\n        {\n          \"name\": \"label\",\n          \"type\": \"const char*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiWindow* window,ImGuiViewportP* viewport,const ImDrawList* draw_list,const char* label)\",\n      \"call_args\": \"(window,viewport,draw_list,label)\",\n      \"cimguiname\": \"igDebugNodeDrawList\",\n      \"defaults\": {},\n      \"funcname\": \"DebugNodeDrawList\",\n      \"location\": \"imgui_internal:3504\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igDebugNodeDrawList\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiWindow*,ImGuiViewportP*,const ImDrawList*,const char*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igDebugNodeFont\": [\n    {\n      \"args\": \"(ImFont* font)\",\n      \"argsT\": [\n        {\n          \"name\": \"font\",\n          \"type\": \"ImFont*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImFont* font)\",\n      \"call_args\": \"(font)\",\n      \"cimguiname\": \"igDebugNodeFont\",\n      \"defaults\": {},\n      \"funcname\": \"DebugNodeFont\",\n      \"location\": \"imgui_internal:3506\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igDebugNodeFont\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImFont*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igDebugNodeFontGlyph\": [\n    {\n      \"args\": \"(ImFont* font,const ImFontGlyph* glyph)\",\n      \"argsT\": [\n        {\n          \"name\": \"font\",\n          \"type\": \"ImFont*\"\n        },\n        {\n          \"name\": \"glyph\",\n          \"type\": \"const ImFontGlyph*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImFont* font,const ImFontGlyph* glyph)\",\n      \"call_args\": \"(font,glyph)\",\n      \"cimguiname\": \"igDebugNodeFontGlyph\",\n      \"defaults\": {},\n      \"funcname\": \"DebugNodeFontGlyph\",\n      \"location\": \"imgui_internal:3507\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igDebugNodeFontGlyph\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImFont*,const ImFontGlyph*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igDebugNodeInputTextState\": [\n    {\n      \"args\": \"(ImGuiInputTextState* state)\",\n      \"argsT\": [\n        {\n          \"name\": \"state\",\n          \"type\": \"ImGuiInputTextState*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiInputTextState* state)\",\n      \"call_args\": \"(state)\",\n      \"cimguiname\": \"igDebugNodeInputTextState\",\n      \"defaults\": {},\n      \"funcname\": \"DebugNodeInputTextState\",\n      \"location\": \"imgui_internal:3512\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igDebugNodeInputTextState\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiInputTextState*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igDebugNodeMultiSelectState\": [\n    {\n      \"args\": \"(ImGuiMultiSelectState* state)\",\n      \"argsT\": [\n        {\n          \"name\": \"state\",\n          \"type\": \"ImGuiMultiSelectState*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiMultiSelectState* state)\",\n      \"call_args\": \"(state)\",\n      \"cimguiname\": \"igDebugNodeMultiSelectState\",\n      \"defaults\": {},\n      \"funcname\": \"DebugNodeMultiSelectState\",\n      \"location\": \"imgui_internal:3514\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igDebugNodeMultiSelectState\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiMultiSelectState*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igDebugNodeStorage\": [\n    {\n      \"args\": \"(ImGuiStorage* storage,const char* label)\",\n      \"argsT\": [\n        {\n          \"name\": \"storage\",\n          \"type\": \"ImGuiStorage*\"\n        },\n        {\n          \"name\": \"label\",\n          \"type\": \"const char*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiStorage* storage,const char* label)\",\n      \"call_args\": \"(storage,label)\",\n      \"cimguiname\": \"igDebugNodeStorage\",\n      \"defaults\": {},\n      \"funcname\": \"DebugNodeStorage\",\n      \"location\": \"imgui_internal:3508\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igDebugNodeStorage\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiStorage*,const char*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igDebugNodeTabBar\": [\n    {\n      \"args\": \"(ImGuiTabBar* tab_bar,const char* label)\",\n      \"argsT\": [\n        {\n          \"name\": \"tab_bar\",\n          \"type\": \"ImGuiTabBar*\"\n        },\n        {\n          \"name\": \"label\",\n          \"type\": \"const char*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiTabBar* tab_bar,const char* label)\",\n      \"call_args\": \"(tab_bar,label)\",\n      \"cimguiname\": \"igDebugNodeTabBar\",\n      \"defaults\": {},\n      \"funcname\": \"DebugNodeTabBar\",\n      \"location\": \"imgui_internal:3509\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igDebugNodeTabBar\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiTabBar*,const char*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igDebugNodeTable\": [\n    {\n      \"args\": \"(ImGuiTable* table)\",\n      \"argsT\": [\n        {\n          \"name\": \"table\",\n          \"type\": \"ImGuiTable*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiTable* table)\",\n      \"call_args\": \"(table)\",\n      \"cimguiname\": \"igDebugNodeTable\",\n      \"defaults\": {},\n      \"funcname\": \"DebugNodeTable\",\n      \"location\": \"imgui_internal:3510\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igDebugNodeTable\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiTable*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igDebugNodeTableSettings\": [\n    {\n      \"args\": \"(ImGuiTableSettings* settings)\",\n      \"argsT\": [\n        {\n          \"name\": \"settings\",\n          \"type\": \"ImGuiTableSettings*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiTableSettings* settings)\",\n      \"call_args\": \"(settings)\",\n      \"cimguiname\": \"igDebugNodeTableSettings\",\n      \"defaults\": {},\n      \"funcname\": \"DebugNodeTableSettings\",\n      \"location\": \"imgui_internal:3511\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igDebugNodeTableSettings\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiTableSettings*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igDebugNodeTypingSelectState\": [\n    {\n      \"args\": \"(ImGuiTypingSelectState* state)\",\n      \"argsT\": [\n        {\n          \"name\": \"state\",\n          \"type\": \"ImGuiTypingSelectState*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiTypingSelectState* state)\",\n      \"call_args\": \"(state)\",\n      \"cimguiname\": \"igDebugNodeTypingSelectState\",\n      \"defaults\": {},\n      \"funcname\": \"DebugNodeTypingSelectState\",\n      \"location\": \"imgui_internal:3513\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igDebugNodeTypingSelectState\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiTypingSelectState*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igDebugNodeViewport\": [\n    {\n      \"args\": \"(ImGuiViewportP* viewport)\",\n      \"argsT\": [\n        {\n          \"name\": \"viewport\",\n          \"type\": \"ImGuiViewportP*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiViewportP* viewport)\",\n      \"call_args\": \"(viewport)\",\n      \"cimguiname\": \"igDebugNodeViewport\",\n      \"defaults\": {},\n      \"funcname\": \"DebugNodeViewport\",\n      \"location\": \"imgui_internal:3519\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igDebugNodeViewport\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiViewportP*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igDebugNodeWindow\": [\n    {\n      \"args\": \"(ImGuiWindow* window,const char* label)\",\n      \"argsT\": [\n        {\n          \"name\": \"window\",\n          \"type\": \"ImGuiWindow*\"\n        },\n        {\n          \"name\": \"label\",\n          \"type\": \"const char*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiWindow* window,const char* label)\",\n      \"call_args\": \"(window,label)\",\n      \"cimguiname\": \"igDebugNodeWindow\",\n      \"defaults\": {},\n      \"funcname\": \"DebugNodeWindow\",\n      \"location\": \"imgui_internal:3515\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igDebugNodeWindow\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiWindow*,const char*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igDebugNodeWindowSettings\": [\n    {\n      \"args\": \"(ImGuiWindowSettings* settings)\",\n      \"argsT\": [\n        {\n          \"name\": \"settings\",\n          \"type\": \"ImGuiWindowSettings*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiWindowSettings* settings)\",\n      \"call_args\": \"(settings)\",\n      \"cimguiname\": \"igDebugNodeWindowSettings\",\n      \"defaults\": {},\n      \"funcname\": \"DebugNodeWindowSettings\",\n      \"location\": \"imgui_internal:3516\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igDebugNodeWindowSettings\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiWindowSettings*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igDebugNodeWindowsList\": [\n    {\n      \"args\": \"(ImVector_ImGuiWindowPtr* windows,const char* label)\",\n      \"argsT\": [\n        {\n          \"name\": \"windows\",\n          \"type\": \"ImVector_ImGuiWindowPtr*\"\n        },\n        {\n          \"name\": \"label\",\n          \"type\": \"const char*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImVector<ImGuiWindow*>* windows,const char* label)\",\n      \"call_args\": \"(windows,label)\",\n      \"cimguiname\": \"igDebugNodeWindowsList\",\n      \"defaults\": {},\n      \"funcname\": \"DebugNodeWindowsList\",\n      \"location\": \"imgui_internal:3517\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igDebugNodeWindowsList\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImVector_ImGuiWindowPtr*,const char*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igDebugNodeWindowsListByBeginStackParent\": [\n    {\n      \"args\": \"(ImGuiWindow** windows,int windows_size,ImGuiWindow* parent_in_begin_stack)\",\n      \"argsT\": [\n        {\n          \"name\": \"windows\",\n          \"type\": \"ImGuiWindow**\"\n        },\n        {\n          \"name\": \"windows_size\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"parent_in_begin_stack\",\n          \"type\": \"ImGuiWindow*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiWindow** windows,int windows_size,ImGuiWindow* parent_in_begin_stack)\",\n      \"call_args\": \"(windows,windows_size,parent_in_begin_stack)\",\n      \"cimguiname\": \"igDebugNodeWindowsListByBeginStackParent\",\n      \"defaults\": {},\n      \"funcname\": \"DebugNodeWindowsListByBeginStackParent\",\n      \"location\": \"imgui_internal:3518\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igDebugNodeWindowsListByBeginStackParent\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiWindow**,int,ImGuiWindow*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igDebugRenderKeyboardPreview\": [\n    {\n      \"args\": \"(ImDrawList* draw_list)\",\n      \"argsT\": [\n        {\n          \"name\": \"draw_list\",\n          \"type\": \"ImDrawList*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImDrawList* draw_list)\",\n      \"call_args\": \"(draw_list)\",\n      \"cimguiname\": \"igDebugRenderKeyboardPreview\",\n      \"defaults\": {},\n      \"funcname\": \"DebugRenderKeyboardPreview\",\n      \"location\": \"imgui_internal:3520\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igDebugRenderKeyboardPreview\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImDrawList*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igDebugRenderViewportThumbnail\": [\n    {\n      \"args\": \"(ImDrawList* draw_list,ImGuiViewportP* viewport,const ImRect bb)\",\n      \"argsT\": [\n        {\n          \"name\": \"draw_list\",\n          \"type\": \"ImDrawList*\"\n        },\n        {\n          \"name\": \"viewport\",\n          \"type\": \"ImGuiViewportP*\"\n        },\n        {\n          \"name\": \"bb\",\n          \"type\": \"const ImRect\"\n        }\n      ],\n      \"argsoriginal\": \"(ImDrawList* draw_list,ImGuiViewportP* viewport,const ImRect& bb)\",\n      \"call_args\": \"(draw_list,viewport,bb)\",\n      \"cimguiname\": \"igDebugRenderViewportThumbnail\",\n      \"defaults\": {},\n      \"funcname\": \"DebugRenderViewportThumbnail\",\n      \"location\": \"imgui_internal:3521\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igDebugRenderViewportThumbnail\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImDrawList*,ImGuiViewportP*,const ImRect)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igDebugStartItemPicker\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igDebugStartItemPicker\",\n      \"defaults\": {},\n      \"funcname\": \"DebugStartItemPicker\",\n      \"location\": \"imgui:1043\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igDebugStartItemPicker\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igDebugTextEncoding\": [\n    {\n      \"args\": \"(const char* text)\",\n      \"argsT\": [\n        {\n          \"name\": \"text\",\n          \"type\": \"const char*\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* text)\",\n      \"call_args\": \"(text)\",\n      \"cimguiname\": \"igDebugTextEncoding\",\n      \"defaults\": {},\n      \"funcname\": \"DebugTextEncoding\",\n      \"location\": \"imgui:1041\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igDebugTextEncoding\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igDebugTextUnformattedWithLocateItem\": [\n    {\n      \"args\": \"(const char* line_begin,const char* line_end)\",\n      \"argsT\": [\n        {\n          \"name\": \"line_begin\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"line_end\",\n          \"type\": \"const char*\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* line_begin,const char* line_end)\",\n      \"call_args\": \"(line_begin,line_end)\",\n      \"cimguiname\": \"igDebugTextUnformattedWithLocateItem\",\n      \"defaults\": {},\n      \"funcname\": \"DebugTextUnformattedWithLocateItem\",\n      \"location\": \"imgui_internal:3494\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igDebugTextUnformattedWithLocateItem\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const char*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igDestroyContext\": [\n    {\n      \"args\": \"(ImGuiContext* ctx)\",\n      \"argsT\": [\n        {\n          \"name\": \"ctx\",\n          \"type\": \"ImGuiContext*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiContext* ctx=((void*)0))\",\n      \"call_args\": \"(ctx)\",\n      \"cimguiname\": \"igDestroyContext\",\n      \"defaults\": {\n        \"ctx\": \"NULL\"\n      },\n      \"funcname\": \"DestroyContext\",\n      \"location\": \"imgui:328\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igDestroyContext\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiContext*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igDragBehavior\": [\n    {\n      \"args\": \"(ImGuiID id,ImGuiDataType data_type,void* p_v,float v_speed,const void* p_min,const void* p_max,const char* format,ImGuiSliderFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"id\",\n          \"type\": \"ImGuiID\"\n        },\n        {\n          \"name\": \"data_type\",\n          \"type\": \"ImGuiDataType\"\n        },\n        {\n          \"name\": \"p_v\",\n          \"type\": \"void*\"\n        },\n        {\n          \"name\": \"v_speed\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"p_min\",\n          \"type\": \"const void*\"\n        },\n        {\n          \"name\": \"p_max\",\n          \"type\": \"const void*\"\n        },\n        {\n          \"name\": \"format\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiSliderFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiID id,ImGuiDataType data_type,void* p_v,float v_speed,const void* p_min,const void* p_max,const char* format,ImGuiSliderFlags flags)\",\n      \"call_args\": \"(id,data_type,p_v,v_speed,p_min,p_max,format,flags)\",\n      \"cimguiname\": \"igDragBehavior\",\n      \"defaults\": {},\n      \"funcname\": \"DragBehavior\",\n      \"location\": \"imgui_internal:3422\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igDragBehavior\",\n      \"ret\": \"bool\",\n      \"signature\": \"(ImGuiID,ImGuiDataType,void*,float,const void*,const void*,const char*,ImGuiSliderFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igDragFloat\": [\n    {\n      \"args\": \"(const char* label,float* v,float v_speed,float v_min,float v_max,const char* format,ImGuiSliderFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"label\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"v\",\n          \"type\": \"float*\"\n        },\n        {\n          \"name\": \"v_speed\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"v_min\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"v_max\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"format\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiSliderFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label,float* v,float v_speed=1.0f,float v_min=0.0f,float v_max=0.0f,const char* format=\\\"%.3f\\\",ImGuiSliderFlags flags=0)\",\n      \"call_args\": \"(label,v,v_speed,v_min,v_max,format,flags)\",\n      \"cimguiname\": \"igDragFloat\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"format\": \"\\\"%.3f\\\"\",\n        \"v_max\": \"0.0f\",\n        \"v_min\": \"0.0f\",\n        \"v_speed\": \"1.0f\"\n      },\n      \"funcname\": \"DragFloat\",\n      \"location\": \"imgui:593\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igDragFloat\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*,float*,float,float,float,const char*,ImGuiSliderFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igDragFloat2\": [\n    {\n      \"args\": \"(const char* label,float v[2],float v_speed,float v_min,float v_max,const char* format,ImGuiSliderFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"label\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"v\",\n          \"type\": \"float[2]\"\n        },\n        {\n          \"name\": \"v_speed\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"v_min\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"v_max\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"format\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiSliderFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(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\\\",ImGuiSliderFlags flags=0)\",\n      \"call_args\": \"(label,v,v_speed,v_min,v_max,format,flags)\",\n      \"cimguiname\": \"igDragFloat2\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"format\": \"\\\"%.3f\\\"\",\n        \"v_max\": \"0.0f\",\n        \"v_min\": \"0.0f\",\n        \"v_speed\": \"1.0f\"\n      },\n      \"funcname\": \"DragFloat2\",\n      \"location\": \"imgui:594\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igDragFloat2\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*,float[2],float,float,float,const char*,ImGuiSliderFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igDragFloat3\": [\n    {\n      \"args\": \"(const char* label,float v[3],float v_speed,float v_min,float v_max,const char* format,ImGuiSliderFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"label\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"v\",\n          \"type\": \"float[3]\"\n        },\n        {\n          \"name\": \"v_speed\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"v_min\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"v_max\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"format\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiSliderFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(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\\\",ImGuiSliderFlags flags=0)\",\n      \"call_args\": \"(label,v,v_speed,v_min,v_max,format,flags)\",\n      \"cimguiname\": \"igDragFloat3\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"format\": \"\\\"%.3f\\\"\",\n        \"v_max\": \"0.0f\",\n        \"v_min\": \"0.0f\",\n        \"v_speed\": \"1.0f\"\n      },\n      \"funcname\": \"DragFloat3\",\n      \"location\": \"imgui:595\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igDragFloat3\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*,float[3],float,float,float,const char*,ImGuiSliderFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igDragFloat4\": [\n    {\n      \"args\": \"(const char* label,float v[4],float v_speed,float v_min,float v_max,const char* format,ImGuiSliderFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"label\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"v\",\n          \"type\": \"float[4]\"\n        },\n        {\n          \"name\": \"v_speed\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"v_min\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"v_max\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"format\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiSliderFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(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\\\",ImGuiSliderFlags flags=0)\",\n      \"call_args\": \"(label,v,v_speed,v_min,v_max,format,flags)\",\n      \"cimguiname\": \"igDragFloat4\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"format\": \"\\\"%.3f\\\"\",\n        \"v_max\": \"0.0f\",\n        \"v_min\": \"0.0f\",\n        \"v_speed\": \"1.0f\"\n      },\n      \"funcname\": \"DragFloat4\",\n      \"location\": \"imgui:596\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igDragFloat4\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*,float[4],float,float,float,const char*,ImGuiSliderFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igDragFloatRange2\": [\n    {\n      \"args\": \"(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,ImGuiSliderFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"label\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"v_current_min\",\n          \"type\": \"float*\"\n        },\n        {\n          \"name\": \"v_current_max\",\n          \"type\": \"float*\"\n        },\n        {\n          \"name\": \"v_speed\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"v_min\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"v_max\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"format\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"format_max\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiSliderFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(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=((void*)0),ImGuiSliderFlags flags=0)\",\n      \"call_args\": \"(label,v_current_min,v_current_max,v_speed,v_min,v_max,format,format_max,flags)\",\n      \"cimguiname\": \"igDragFloatRange2\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"format\": \"\\\"%.3f\\\"\",\n        \"format_max\": \"NULL\",\n        \"v_max\": \"0.0f\",\n        \"v_min\": \"0.0f\",\n        \"v_speed\": \"1.0f\"\n      },\n      \"funcname\": \"DragFloatRange2\",\n      \"location\": \"imgui:597\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igDragFloatRange2\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*,float*,float*,float,float,float,const char*,const char*,ImGuiSliderFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igDragInt\": [\n    {\n      \"args\": \"(const char* label,int* v,float v_speed,int v_min,int v_max,const char* format,ImGuiSliderFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"label\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"v\",\n          \"type\": \"int*\"\n        },\n        {\n          \"name\": \"v_speed\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"v_min\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"v_max\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"format\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiSliderFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label,int* v,float v_speed=1.0f,int v_min=0,int v_max=0,const char* format=\\\"%d\\\",ImGuiSliderFlags flags=0)\",\n      \"call_args\": \"(label,v,v_speed,v_min,v_max,format,flags)\",\n      \"cimguiname\": \"igDragInt\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"format\": \"\\\"%d\\\"\",\n        \"v_max\": \"0\",\n        \"v_min\": \"0\",\n        \"v_speed\": \"1.0f\"\n      },\n      \"funcname\": \"DragInt\",\n      \"location\": \"imgui:598\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igDragInt\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*,int*,float,int,int,const char*,ImGuiSliderFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igDragInt2\": [\n    {\n      \"args\": \"(const char* label,int v[2],float v_speed,int v_min,int v_max,const char* format,ImGuiSliderFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"label\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"v\",\n          \"type\": \"int[2]\"\n        },\n        {\n          \"name\": \"v_speed\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"v_min\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"v_max\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"format\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiSliderFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label,int v[2],float v_speed=1.0f,int v_min=0,int v_max=0,const char* format=\\\"%d\\\",ImGuiSliderFlags flags=0)\",\n      \"call_args\": \"(label,v,v_speed,v_min,v_max,format,flags)\",\n      \"cimguiname\": \"igDragInt2\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"format\": \"\\\"%d\\\"\",\n        \"v_max\": \"0\",\n        \"v_min\": \"0\",\n        \"v_speed\": \"1.0f\"\n      },\n      \"funcname\": \"DragInt2\",\n      \"location\": \"imgui:599\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igDragInt2\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*,int[2],float,int,int,const char*,ImGuiSliderFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igDragInt3\": [\n    {\n      \"args\": \"(const char* label,int v[3],float v_speed,int v_min,int v_max,const char* format,ImGuiSliderFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"label\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"v\",\n          \"type\": \"int[3]\"\n        },\n        {\n          \"name\": \"v_speed\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"v_min\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"v_max\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"format\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiSliderFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label,int v[3],float v_speed=1.0f,int v_min=0,int v_max=0,const char* format=\\\"%d\\\",ImGuiSliderFlags flags=0)\",\n      \"call_args\": \"(label,v,v_speed,v_min,v_max,format,flags)\",\n      \"cimguiname\": \"igDragInt3\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"format\": \"\\\"%d\\\"\",\n        \"v_max\": \"0\",\n        \"v_min\": \"0\",\n        \"v_speed\": \"1.0f\"\n      },\n      \"funcname\": \"DragInt3\",\n      \"location\": \"imgui:600\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igDragInt3\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*,int[3],float,int,int,const char*,ImGuiSliderFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igDragInt4\": [\n    {\n      \"args\": \"(const char* label,int v[4],float v_speed,int v_min,int v_max,const char* format,ImGuiSliderFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"label\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"v\",\n          \"type\": \"int[4]\"\n        },\n        {\n          \"name\": \"v_speed\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"v_min\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"v_max\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"format\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiSliderFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label,int v[4],float v_speed=1.0f,int v_min=0,int v_max=0,const char* format=\\\"%d\\\",ImGuiSliderFlags flags=0)\",\n      \"call_args\": \"(label,v,v_speed,v_min,v_max,format,flags)\",\n      \"cimguiname\": \"igDragInt4\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"format\": \"\\\"%d\\\"\",\n        \"v_max\": \"0\",\n        \"v_min\": \"0\",\n        \"v_speed\": \"1.0f\"\n      },\n      \"funcname\": \"DragInt4\",\n      \"location\": \"imgui:601\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igDragInt4\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*,int[4],float,int,int,const char*,ImGuiSliderFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igDragIntRange2\": [\n    {\n      \"args\": \"(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,ImGuiSliderFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"label\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"v_current_min\",\n          \"type\": \"int*\"\n        },\n        {\n          \"name\": \"v_current_max\",\n          \"type\": \"int*\"\n        },\n        {\n          \"name\": \"v_speed\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"v_min\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"v_max\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"format\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"format_max\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiSliderFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(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=((void*)0),ImGuiSliderFlags flags=0)\",\n      \"call_args\": \"(label,v_current_min,v_current_max,v_speed,v_min,v_max,format,format_max,flags)\",\n      \"cimguiname\": \"igDragIntRange2\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"format\": \"\\\"%d\\\"\",\n        \"format_max\": \"NULL\",\n        \"v_max\": \"0\",\n        \"v_min\": \"0\",\n        \"v_speed\": \"1.0f\"\n      },\n      \"funcname\": \"DragIntRange2\",\n      \"location\": \"imgui:602\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igDragIntRange2\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*,int*,int*,float,int,int,const char*,const char*,ImGuiSliderFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igDragScalar\": [\n    {\n      \"args\": \"(const char* label,ImGuiDataType data_type,void* p_data,float v_speed,const void* p_min,const void* p_max,const char* format,ImGuiSliderFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"label\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"data_type\",\n          \"type\": \"ImGuiDataType\"\n        },\n        {\n          \"name\": \"p_data\",\n          \"type\": \"void*\"\n        },\n        {\n          \"name\": \"v_speed\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"p_min\",\n          \"type\": \"const void*\"\n        },\n        {\n          \"name\": \"p_max\",\n          \"type\": \"const void*\"\n        },\n        {\n          \"name\": \"format\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiSliderFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label,ImGuiDataType data_type,void* p_data,float v_speed=1.0f,const void* p_min=((void*)0),const void* p_max=((void*)0),const char* format=((void*)0),ImGuiSliderFlags flags=0)\",\n      \"call_args\": \"(label,data_type,p_data,v_speed,p_min,p_max,format,flags)\",\n      \"cimguiname\": \"igDragScalar\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"format\": \"NULL\",\n        \"p_max\": \"NULL\",\n        \"p_min\": \"NULL\",\n        \"v_speed\": \"1.0f\"\n      },\n      \"funcname\": \"DragScalar\",\n      \"location\": \"imgui:603\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igDragScalar\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*,ImGuiDataType,void*,float,const void*,const void*,const char*,ImGuiSliderFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igDragScalarN\": [\n    {\n      \"args\": \"(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,ImGuiSliderFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"label\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"data_type\",\n          \"type\": \"ImGuiDataType\"\n        },\n        {\n          \"name\": \"p_data\",\n          \"type\": \"void*\"\n        },\n        {\n          \"name\": \"components\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"v_speed\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"p_min\",\n          \"type\": \"const void*\"\n        },\n        {\n          \"name\": \"p_max\",\n          \"type\": \"const void*\"\n        },\n        {\n          \"name\": \"format\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiSliderFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label,ImGuiDataType data_type,void* p_data,int components,float v_speed=1.0f,const void* p_min=((void*)0),const void* p_max=((void*)0),const char* format=((void*)0),ImGuiSliderFlags flags=0)\",\n      \"call_args\": \"(label,data_type,p_data,components,v_speed,p_min,p_max,format,flags)\",\n      \"cimguiname\": \"igDragScalarN\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"format\": \"NULL\",\n        \"p_max\": \"NULL\",\n        \"p_min\": \"NULL\",\n        \"v_speed\": \"1.0f\"\n      },\n      \"funcname\": \"DragScalarN\",\n      \"location\": \"imgui:604\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igDragScalarN\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*,ImGuiDataType,void*,int,float,const void*,const void*,const char*,ImGuiSliderFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igDummy\": [\n    {\n      \"args\": \"(const ImVec2 size)\",\n      \"argsT\": [\n        {\n          \"name\": \"size\",\n          \"type\": \"const ImVec2\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImVec2& size)\",\n      \"call_args\": \"(size)\",\n      \"cimguiname\": \"igDummy\",\n      \"defaults\": {},\n      \"funcname\": \"Dummy\",\n      \"location\": \"imgui:499\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igDummy\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImVec2)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igEnd\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igEnd\",\n      \"defaults\": {},\n      \"funcname\": \"End\",\n      \"location\": \"imgui:371\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igEnd\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igEndBoxSelect\": [\n    {\n      \"args\": \"(const ImRect scope_rect,ImGuiMultiSelectFlags ms_flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"scope_rect\",\n          \"type\": \"const ImRect\"\n        },\n        {\n          \"name\": \"ms_flags\",\n          \"type\": \"ImGuiMultiSelectFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImRect& scope_rect,ImGuiMultiSelectFlags ms_flags)\",\n      \"call_args\": \"(scope_rect,ms_flags)\",\n      \"cimguiname\": \"igEndBoxSelect\",\n      \"defaults\": {},\n      \"funcname\": \"EndBoxSelect\",\n      \"location\": \"imgui_internal:3275\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igEndBoxSelect\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImRect,ImGuiMultiSelectFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igEndChild\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igEndChild\",\n      \"defaults\": {},\n      \"funcname\": \"EndChild\",\n      \"location\": \"imgui:393\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igEndChild\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igEndColumns\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igEndColumns\",\n      \"defaults\": {},\n      \"funcname\": \"EndColumns\",\n      \"location\": \"imgui_internal:3288\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igEndColumns\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igEndCombo\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igEndCombo\",\n      \"defaults\": {},\n      \"funcname\": \"EndCombo\",\n      \"location\": \"imgui:576\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igEndCombo\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igEndComboPreview\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igEndComboPreview\",\n      \"defaults\": {},\n      \"funcname\": \"EndComboPreview\",\n      \"location\": \"imgui_internal:3134\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igEndComboPreview\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igEndDisabled\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igEndDisabled\",\n      \"defaults\": {},\n      \"funcname\": \"EndDisabled\",\n      \"location\": \"imgui:899\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igEndDisabled\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igEndDisabledOverrideReenable\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igEndDisabledOverrideReenable\",\n      \"defaults\": {},\n      \"funcname\": \"EndDisabledOverrideReenable\",\n      \"location\": \"imgui_internal:3097\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igEndDisabledOverrideReenable\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igEndDragDropSource\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igEndDragDropSource\",\n      \"defaults\": {},\n      \"funcname\": \"EndDragDropSource\",\n      \"location\": \"imgui:887\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igEndDragDropSource\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igEndDragDropTarget\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igEndDragDropTarget\",\n      \"defaults\": {},\n      \"funcname\": \"EndDragDropTarget\",\n      \"location\": \"imgui:890\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igEndDragDropTarget\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igEndErrorTooltip\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igEndErrorTooltip\",\n      \"defaults\": {},\n      \"funcname\": \"EndErrorTooltip\",\n      \"location\": \"imgui_internal:3487\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igEndErrorTooltip\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igEndFrame\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igEndFrame\",\n      \"defaults\": {},\n      \"funcname\": \"EndFrame\",\n      \"location\": \"imgui:337\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igEndFrame\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igEndGroup\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igEndGroup\",\n      \"defaults\": {},\n      \"funcname\": \"EndGroup\",\n      \"location\": \"imgui:503\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igEndGroup\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igEndListBox\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igEndListBox\",\n      \"defaults\": {},\n      \"funcname\": \"EndListBox\",\n      \"location\": \"imgui:702\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igEndListBox\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igEndMainMenuBar\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igEndMainMenuBar\",\n      \"defaults\": {},\n      \"funcname\": \"EndMainMenuBar\",\n      \"location\": \"imgui:728\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igEndMainMenuBar\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igEndMenu\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igEndMenu\",\n      \"defaults\": {},\n      \"funcname\": \"EndMenu\",\n      \"location\": \"imgui:730\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igEndMenu\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igEndMenuBar\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igEndMenuBar\",\n      \"defaults\": {},\n      \"funcname\": \"EndMenuBar\",\n      \"location\": \"imgui:726\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igEndMenuBar\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igEndMultiSelect\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igEndMultiSelect\",\n      \"defaults\": {},\n      \"funcname\": \"EndMultiSelect\",\n      \"location\": \"imgui:690\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igEndMultiSelect\",\n      \"ret\": \"ImGuiMultiSelectIO*\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igEndPopup\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igEndPopup\",\n      \"defaults\": {},\n      \"funcname\": \"EndPopup\",\n      \"location\": \"imgui:763\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igEndPopup\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igEndTabBar\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igEndTabBar\",\n      \"defaults\": {},\n      \"funcname\": \"EndTabBar\",\n      \"location\": \"imgui:864\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igEndTabBar\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igEndTabItem\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igEndTabItem\",\n      \"defaults\": {},\n      \"funcname\": \"EndTabItem\",\n      \"location\": \"imgui:866\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igEndTabItem\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igEndTable\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igEndTable\",\n      \"defaults\": {},\n      \"funcname\": \"EndTable\",\n      \"location\": \"imgui:815\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igEndTable\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igEndTooltip\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igEndTooltip\",\n      \"defaults\": {},\n      \"funcname\": \"EndTooltip\",\n      \"location\": \"imgui:739\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igEndTooltip\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igErrorCheckEndFrameFinalizeErrorTooltip\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igErrorCheckEndFrameFinalizeErrorTooltip\",\n      \"defaults\": {},\n      \"funcname\": \"ErrorCheckEndFrameFinalizeErrorTooltip\",\n      \"location\": \"imgui_internal:3485\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igErrorCheckEndFrameFinalizeErrorTooltip\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igErrorCheckUsingSetCursorPosToExtendParentBoundaries\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igErrorCheckUsingSetCursorPosToExtendParentBoundaries\",\n      \"defaults\": {},\n      \"funcname\": \"ErrorCheckUsingSetCursorPosToExtendParentBoundaries\",\n      \"location\": \"imgui_internal:3484\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igErrorCheckUsingSetCursorPosToExtendParentBoundaries\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igErrorLog\": [\n    {\n      \"args\": \"(const char* msg)\",\n      \"argsT\": [\n        {\n          \"name\": \"msg\",\n          \"type\": \"const char*\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* msg)\",\n      \"call_args\": \"(msg)\",\n      \"cimguiname\": \"igErrorLog\",\n      \"defaults\": {},\n      \"funcname\": \"ErrorLog\",\n      \"location\": \"imgui_internal:3480\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igErrorLog\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igErrorRecoveryStoreState\": [\n    {\n      \"args\": \"(ImGuiErrorRecoveryState* state_out)\",\n      \"argsT\": [\n        {\n          \"name\": \"state_out\",\n          \"type\": \"ImGuiErrorRecoveryState*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiErrorRecoveryState* state_out)\",\n      \"call_args\": \"(state_out)\",\n      \"cimguiname\": \"igErrorRecoveryStoreState\",\n      \"defaults\": {},\n      \"funcname\": \"ErrorRecoveryStoreState\",\n      \"location\": \"imgui_internal:3481\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igErrorRecoveryStoreState\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiErrorRecoveryState*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igErrorRecoveryTryToRecoverState\": [\n    {\n      \"args\": \"(const ImGuiErrorRecoveryState* state_in)\",\n      \"argsT\": [\n        {\n          \"name\": \"state_in\",\n          \"type\": \"const ImGuiErrorRecoveryState*\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImGuiErrorRecoveryState* state_in)\",\n      \"call_args\": \"(state_in)\",\n      \"cimguiname\": \"igErrorRecoveryTryToRecoverState\",\n      \"defaults\": {},\n      \"funcname\": \"ErrorRecoveryTryToRecoverState\",\n      \"location\": \"imgui_internal:3482\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igErrorRecoveryTryToRecoverState\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImGuiErrorRecoveryState*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igErrorRecoveryTryToRecoverWindowState\": [\n    {\n      \"args\": \"(const ImGuiErrorRecoveryState* state_in)\",\n      \"argsT\": [\n        {\n          \"name\": \"state_in\",\n          \"type\": \"const ImGuiErrorRecoveryState*\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImGuiErrorRecoveryState* state_in)\",\n      \"call_args\": \"(state_in)\",\n      \"cimguiname\": \"igErrorRecoveryTryToRecoverWindowState\",\n      \"defaults\": {},\n      \"funcname\": \"ErrorRecoveryTryToRecoverWindowState\",\n      \"location\": \"imgui_internal:3483\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igErrorRecoveryTryToRecoverWindowState\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImGuiErrorRecoveryState*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igFindBestWindowPosForPopup\": [\n    {\n      \"args\": \"(ImVec2 *pOut,ImGuiWindow* window)\",\n      \"argsT\": [\n        {\n          \"name\": \"pOut\",\n          \"type\": \"ImVec2*\"\n        },\n        {\n          \"name\": \"window\",\n          \"type\": \"ImGuiWindow*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiWindow* window)\",\n      \"call_args\": \"(window)\",\n      \"cimguiname\": \"igFindBestWindowPosForPopup\",\n      \"defaults\": {},\n      \"funcname\": \"FindBestWindowPosForPopup\",\n      \"location\": \"imgui_internal:3119\",\n      \"namespace\": \"ImGui\",\n      \"nonUDT\": 1,\n      \"ov_cimguiname\": \"igFindBestWindowPosForPopup\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiWindow*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igFindBestWindowPosForPopupEx\": [\n    {\n      \"args\": \"(ImVec2 *pOut,const ImVec2 ref_pos,const ImVec2 size,ImGuiDir* last_dir,const ImRect r_outer,const ImRect r_avoid,ImGuiPopupPositionPolicy policy)\",\n      \"argsT\": [\n        {\n          \"name\": \"pOut\",\n          \"type\": \"ImVec2*\"\n        },\n        {\n          \"name\": \"ref_pos\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"size\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"last_dir\",\n          \"type\": \"ImGuiDir*\"\n        },\n        {\n          \"name\": \"r_outer\",\n          \"type\": \"const ImRect\"\n        },\n        {\n          \"name\": \"r_avoid\",\n          \"type\": \"const ImRect\"\n        },\n        {\n          \"name\": \"policy\",\n          \"type\": \"ImGuiPopupPositionPolicy\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImVec2& ref_pos,const ImVec2& size,ImGuiDir* last_dir,const ImRect& r_outer,const ImRect& r_avoid,ImGuiPopupPositionPolicy policy)\",\n      \"call_args\": \"(ref_pos,size,last_dir,r_outer,r_avoid,policy)\",\n      \"cimguiname\": \"igFindBestWindowPosForPopupEx\",\n      \"defaults\": {},\n      \"funcname\": \"FindBestWindowPosForPopupEx\",\n      \"location\": \"imgui_internal:3120\",\n      \"namespace\": \"ImGui\",\n      \"nonUDT\": 1,\n      \"ov_cimguiname\": \"igFindBestWindowPosForPopupEx\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImVec2,const ImVec2,ImGuiDir*,const ImRect,const ImRect,ImGuiPopupPositionPolicy)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igFindBlockingModal\": [\n    {\n      \"args\": \"(ImGuiWindow* window)\",\n      \"argsT\": [\n        {\n          \"name\": \"window\",\n          \"type\": \"ImGuiWindow*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiWindow* window)\",\n      \"call_args\": \"(window)\",\n      \"cimguiname\": \"igFindBlockingModal\",\n      \"defaults\": {},\n      \"funcname\": \"FindBlockingModal\",\n      \"location\": \"imgui_internal:3118\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igFindBlockingModal\",\n      \"ret\": \"ImGuiWindow*\",\n      \"signature\": \"(ImGuiWindow*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igFindBottomMostVisibleWindowWithinBeginStack\": [\n    {\n      \"args\": \"(ImGuiWindow* window)\",\n      \"argsT\": [\n        {\n          \"name\": \"window\",\n          \"type\": \"ImGuiWindow*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiWindow* window)\",\n      \"call_args\": \"(window)\",\n      \"cimguiname\": \"igFindBottomMostVisibleWindowWithinBeginStack\",\n      \"defaults\": {},\n      \"funcname\": \"FindBottomMostVisibleWindowWithinBeginStack\",\n      \"location\": \"imgui_internal:2999\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igFindBottomMostVisibleWindowWithinBeginStack\",\n      \"ret\": \"ImGuiWindow*\",\n      \"signature\": \"(ImGuiWindow*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igFindHoveredWindowEx\": [\n    {\n      \"args\": \"(const ImVec2 pos,bool find_first_and_in_any_viewport,ImGuiWindow** out_hovered_window,ImGuiWindow** out_hovered_window_under_moving_window)\",\n      \"argsT\": [\n        {\n          \"name\": \"pos\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"find_first_and_in_any_viewport\",\n          \"type\": \"bool\"\n        },\n        {\n          \"name\": \"out_hovered_window\",\n          \"type\": \"ImGuiWindow**\"\n        },\n        {\n          \"name\": \"out_hovered_window_under_moving_window\",\n          \"type\": \"ImGuiWindow**\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImVec2& pos,bool find_first_and_in_any_viewport,ImGuiWindow** out_hovered_window,ImGuiWindow** out_hovered_window_under_moving_window)\",\n      \"call_args\": \"(pos,find_first_and_in_any_viewport,out_hovered_window,out_hovered_window_under_moving_window)\",\n      \"cimguiname\": \"igFindHoveredWindowEx\",\n      \"defaults\": {},\n      \"funcname\": \"FindHoveredWindowEx\",\n      \"location\": \"imgui_internal:3019\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igFindHoveredWindowEx\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImVec2,bool,ImGuiWindow**,ImGuiWindow**)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igFindOrCreateColumns\": [\n    {\n      \"args\": \"(ImGuiWindow* window,ImGuiID id)\",\n      \"argsT\": [\n        {\n          \"name\": \"window\",\n          \"type\": \"ImGuiWindow*\"\n        },\n        {\n          \"name\": \"id\",\n          \"type\": \"ImGuiID\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiWindow* window,ImGuiID id)\",\n      \"call_args\": \"(window,id)\",\n      \"cimguiname\": \"igFindOrCreateColumns\",\n      \"defaults\": {},\n      \"funcname\": \"FindOrCreateColumns\",\n      \"location\": \"imgui_internal:3293\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igFindOrCreateColumns\",\n      \"ret\": \"ImGuiOldColumns*\",\n      \"signature\": \"(ImGuiWindow*,ImGuiID)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igFindRenderedTextEnd\": [\n    {\n      \"args\": \"(const char* text,const char* text_end)\",\n      \"argsT\": [\n        {\n          \"name\": \"text\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"text_end\",\n          \"type\": \"const char*\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* text,const char* text_end=((void*)0))\",\n      \"call_args\": \"(text,text_end)\",\n      \"cimguiname\": \"igFindRenderedTextEnd\",\n      \"defaults\": {\n        \"text_end\": \"NULL\"\n      },\n      \"funcname\": \"FindRenderedTextEnd\",\n      \"location\": \"imgui_internal:3389\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igFindRenderedTextEnd\",\n      \"ret\": \"const char*\",\n      \"signature\": \"(const char*,const char*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igFindSettingsHandler\": [\n    {\n      \"args\": \"(const char* type_name)\",\n      \"argsT\": [\n        {\n          \"name\": \"type_name\",\n          \"type\": \"const char*\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* type_name)\",\n      \"call_args\": \"(type_name)\",\n      \"cimguiname\": \"igFindSettingsHandler\",\n      \"defaults\": {},\n      \"funcname\": \"FindSettingsHandler\",\n      \"location\": \"imgui_internal:3039\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igFindSettingsHandler\",\n      \"ret\": \"ImGuiSettingsHandler*\",\n      \"signature\": \"(const char*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igFindWindowByID\": [\n    {\n      \"args\": \"(ImGuiID id)\",\n      \"argsT\": [\n        {\n          \"name\": \"id\",\n          \"type\": \"ImGuiID\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiID id)\",\n      \"call_args\": \"(id)\",\n      \"cimguiname\": \"igFindWindowByID\",\n      \"defaults\": {},\n      \"funcname\": \"FindWindowByID\",\n      \"location\": \"imgui_internal:2971\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igFindWindowByID\",\n      \"ret\": \"ImGuiWindow*\",\n      \"signature\": \"(ImGuiID)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igFindWindowByName\": [\n    {\n      \"args\": \"(const char* name)\",\n      \"argsT\": [\n        {\n          \"name\": \"name\",\n          \"type\": \"const char*\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* name)\",\n      \"call_args\": \"(name)\",\n      \"cimguiname\": \"igFindWindowByName\",\n      \"defaults\": {},\n      \"funcname\": \"FindWindowByName\",\n      \"location\": \"imgui_internal:2972\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igFindWindowByName\",\n      \"ret\": \"ImGuiWindow*\",\n      \"signature\": \"(const char*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igFindWindowDisplayIndex\": [\n    {\n      \"args\": \"(ImGuiWindow* window)\",\n      \"argsT\": [\n        {\n          \"name\": \"window\",\n          \"type\": \"ImGuiWindow*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiWindow* window)\",\n      \"call_args\": \"(window)\",\n      \"cimguiname\": \"igFindWindowDisplayIndex\",\n      \"defaults\": {},\n      \"funcname\": \"FindWindowDisplayIndex\",\n      \"location\": \"imgui_internal:2998\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igFindWindowDisplayIndex\",\n      \"ret\": \"int\",\n      \"signature\": \"(ImGuiWindow*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igFindWindowSettingsByID\": [\n    {\n      \"args\": \"(ImGuiID id)\",\n      \"argsT\": [\n        {\n          \"name\": \"id\",\n          \"type\": \"ImGuiID\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiID id)\",\n      \"call_args\": \"(id)\",\n      \"cimguiname\": \"igFindWindowSettingsByID\",\n      \"defaults\": {},\n      \"funcname\": \"FindWindowSettingsByID\",\n      \"location\": \"imgui_internal:3043\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igFindWindowSettingsByID\",\n      \"ret\": \"ImGuiWindowSettings*\",\n      \"signature\": \"(ImGuiID)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igFindWindowSettingsByWindow\": [\n    {\n      \"args\": \"(ImGuiWindow* window)\",\n      \"argsT\": [\n        {\n          \"name\": \"window\",\n          \"type\": \"ImGuiWindow*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiWindow* window)\",\n      \"call_args\": \"(window)\",\n      \"cimguiname\": \"igFindWindowSettingsByWindow\",\n      \"defaults\": {},\n      \"funcname\": \"FindWindowSettingsByWindow\",\n      \"location\": \"imgui_internal:3044\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igFindWindowSettingsByWindow\",\n      \"ret\": \"ImGuiWindowSettings*\",\n      \"signature\": \"(ImGuiWindow*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igFixupKeyChord\": [\n    {\n      \"args\": \"(ImGuiKeyChord key_chord)\",\n      \"argsT\": [\n        {\n          \"name\": \"key_chord\",\n          \"type\": \"ImGuiKeyChord\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiKeyChord key_chord)\",\n      \"call_args\": \"(key_chord)\",\n      \"cimguiname\": \"igFixupKeyChord\",\n      \"defaults\": {},\n      \"funcname\": \"FixupKeyChord\",\n      \"location\": \"imgui_internal:3171\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igFixupKeyChord\",\n      \"ret\": \"ImGuiKeyChord\",\n      \"signature\": \"(ImGuiKeyChord)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igFocusItem\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igFocusItem\",\n      \"defaults\": {},\n      \"funcname\": \"FocusItem\",\n      \"location\": \"imgui_internal:3158\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igFocusItem\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igFocusTopMostWindowUnderOne\": [\n    {\n      \"args\": \"(ImGuiWindow* under_this_window,ImGuiWindow* ignore_window,ImGuiViewport* filter_viewport,ImGuiFocusRequestFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"under_this_window\",\n          \"type\": \"ImGuiWindow*\"\n        },\n        {\n          \"name\": \"ignore_window\",\n          \"type\": \"ImGuiWindow*\"\n        },\n        {\n          \"name\": \"filter_viewport\",\n          \"type\": \"ImGuiViewport*\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiFocusRequestFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiWindow* under_this_window,ImGuiWindow* ignore_window,ImGuiViewport* filter_viewport,ImGuiFocusRequestFlags flags)\",\n      \"call_args\": \"(under_this_window,ignore_window,filter_viewport,flags)\",\n      \"cimguiname\": \"igFocusTopMostWindowUnderOne\",\n      \"defaults\": {},\n      \"funcname\": \"FocusTopMostWindowUnderOne\",\n      \"location\": \"imgui_internal:2993\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igFocusTopMostWindowUnderOne\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiWindow*,ImGuiWindow*,ImGuiViewport*,ImGuiFocusRequestFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igFocusWindow\": [\n    {\n      \"args\": \"(ImGuiWindow* window,ImGuiFocusRequestFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"window\",\n          \"type\": \"ImGuiWindow*\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiFocusRequestFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiWindow* window,ImGuiFocusRequestFlags flags=0)\",\n      \"call_args\": \"(window,flags)\",\n      \"cimguiname\": \"igFocusWindow\",\n      \"defaults\": {\n        \"flags\": \"0\"\n      },\n      \"funcname\": \"FocusWindow\",\n      \"location\": \"imgui_internal:2992\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igFocusWindow\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiWindow*,ImGuiFocusRequestFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igGcAwakeTransientWindowBuffers\": [\n    {\n      \"args\": \"(ImGuiWindow* window)\",\n      \"argsT\": [\n        {\n          \"name\": \"window\",\n          \"type\": \"ImGuiWindow*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiWindow* window)\",\n      \"call_args\": \"(window)\",\n      \"cimguiname\": \"igGcAwakeTransientWindowBuffers\",\n      \"defaults\": {},\n      \"funcname\": \"GcAwakeTransientWindowBuffers\",\n      \"location\": \"imgui_internal:3477\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igGcAwakeTransientWindowBuffers\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiWindow*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igGcCompactTransientMiscBuffers\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igGcCompactTransientMiscBuffers\",\n      \"defaults\": {},\n      \"funcname\": \"GcCompactTransientMiscBuffers\",\n      \"location\": \"imgui_internal:3475\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igGcCompactTransientMiscBuffers\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igGcCompactTransientWindowBuffers\": [\n    {\n      \"args\": \"(ImGuiWindow* window)\",\n      \"argsT\": [\n        {\n          \"name\": \"window\",\n          \"type\": \"ImGuiWindow*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiWindow* window)\",\n      \"call_args\": \"(window)\",\n      \"cimguiname\": \"igGcCompactTransientWindowBuffers\",\n      \"defaults\": {},\n      \"funcname\": \"GcCompactTransientWindowBuffers\",\n      \"location\": \"imgui_internal:3476\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igGcCompactTransientWindowBuffers\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiWindow*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igGetActiveID\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igGetActiveID\",\n      \"defaults\": {},\n      \"funcname\": \"GetActiveID\",\n      \"location\": \"imgui_internal:3068\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igGetActiveID\",\n      \"ret\": \"ImGuiID\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igGetAllocatorFunctions\": [\n    {\n      \"args\": \"(ImGuiMemAllocFunc* p_alloc_func,ImGuiMemFreeFunc* p_free_func,void** p_user_data)\",\n      \"argsT\": [\n        {\n          \"name\": \"p_alloc_func\",\n          \"type\": \"ImGuiMemAllocFunc*\"\n        },\n        {\n          \"name\": \"p_free_func\",\n          \"type\": \"ImGuiMemFreeFunc*\"\n        },\n        {\n          \"name\": \"p_user_data\",\n          \"type\": \"void**\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiMemAllocFunc* p_alloc_func,ImGuiMemFreeFunc* p_free_func,void** p_user_data)\",\n      \"call_args\": \"(p_alloc_func,p_free_func,p_user_data)\",\n      \"cimguiname\": \"igGetAllocatorFunctions\",\n      \"defaults\": {},\n      \"funcname\": \"GetAllocatorFunctions\",\n      \"location\": \"imgui:1055\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igGetAllocatorFunctions\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiMemAllocFunc*,ImGuiMemFreeFunc*,void**)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igGetBackgroundDrawList\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igGetBackgroundDrawList\",\n      \"defaults\": {},\n      \"funcname\": \"GetBackgroundDrawList\",\n      \"location\": \"imgui:944\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igGetBackgroundDrawList_Nil\",\n      \"ret\": \"ImDrawList*\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(ImGuiViewport* viewport)\",\n      \"argsT\": [\n        {\n          \"name\": \"viewport\",\n          \"type\": \"ImGuiViewport*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiViewport* viewport)\",\n      \"call_args\": \"(viewport)\",\n      \"cimguiname\": \"igGetBackgroundDrawList\",\n      \"defaults\": {},\n      \"funcname\": \"GetBackgroundDrawList\",\n      \"location\": \"imgui_internal:3008\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igGetBackgroundDrawList_ViewportPtr\",\n      \"ret\": \"ImDrawList*\",\n      \"signature\": \"(ImGuiViewport*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igGetBoxSelectState\": [\n    {\n      \"args\": \"(ImGuiID id)\",\n      \"argsT\": [\n        {\n          \"name\": \"id\",\n          \"type\": \"ImGuiID\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiID id)\",\n      \"call_args\": \"(id)\",\n      \"cimguiname\": \"igGetBoxSelectState\",\n      \"defaults\": {},\n      \"funcname\": \"GetBoxSelectState\",\n      \"location\": \"imgui_internal:3282\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igGetBoxSelectState\",\n      \"ret\": \"ImGuiBoxSelectState*\",\n      \"signature\": \"(ImGuiID)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igGetClipboardText\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igGetClipboardText\",\n      \"defaults\": {},\n      \"funcname\": \"GetClipboardText\",\n      \"location\": \"imgui:1027\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igGetClipboardText\",\n      \"ret\": \"const char*\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igGetColorU32\": [\n    {\n      \"args\": \"(ImGuiCol idx,float alpha_mul)\",\n      \"argsT\": [\n        {\n          \"name\": \"idx\",\n          \"type\": \"ImGuiCol\"\n        },\n        {\n          \"name\": \"alpha_mul\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiCol idx,float alpha_mul=1.0f)\",\n      \"call_args\": \"(idx,alpha_mul)\",\n      \"cimguiname\": \"igGetColorU32\",\n      \"defaults\": {\n        \"alpha_mul\": \"1.0f\"\n      },\n      \"funcname\": \"GetColorU32\",\n      \"location\": \"imgui:468\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igGetColorU32_Col\",\n      \"ret\": \"ImU32\",\n      \"signature\": \"(ImGuiCol,float)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const ImVec4 col)\",\n      \"argsT\": [\n        {\n          \"name\": \"col\",\n          \"type\": \"const ImVec4\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImVec4& col)\",\n      \"call_args\": \"(col)\",\n      \"cimguiname\": \"igGetColorU32\",\n      \"defaults\": {},\n      \"funcname\": \"GetColorU32\",\n      \"location\": \"imgui:469\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igGetColorU32_Vec4\",\n      \"ret\": \"ImU32\",\n      \"signature\": \"(const ImVec4)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(ImU32 col,float alpha_mul)\",\n      \"argsT\": [\n        {\n          \"name\": \"col\",\n          \"type\": \"ImU32\"\n        },\n        {\n          \"name\": \"alpha_mul\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(ImU32 col,float alpha_mul=1.0f)\",\n      \"call_args\": \"(col,alpha_mul)\",\n      \"cimguiname\": \"igGetColorU32\",\n      \"defaults\": {\n        \"alpha_mul\": \"1.0f\"\n      },\n      \"funcname\": \"GetColorU32\",\n      \"location\": \"imgui:470\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igGetColorU32_U32\",\n      \"ret\": \"ImU32\",\n      \"signature\": \"(ImU32,float)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igGetColumnIndex\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igGetColumnIndex\",\n      \"defaults\": {},\n      \"funcname\": \"GetColumnIndex\",\n      \"location\": \"imgui:854\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igGetColumnIndex\",\n      \"ret\": \"int\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igGetColumnNormFromOffset\": [\n    {\n      \"args\": \"(const ImGuiOldColumns* columns,float offset)\",\n      \"argsT\": [\n        {\n          \"name\": \"columns\",\n          \"type\": \"const ImGuiOldColumns*\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImGuiOldColumns* columns,float offset)\",\n      \"call_args\": \"(columns,offset)\",\n      \"cimguiname\": \"igGetColumnNormFromOffset\",\n      \"defaults\": {},\n      \"funcname\": \"GetColumnNormFromOffset\",\n      \"location\": \"imgui_internal:3295\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igGetColumnNormFromOffset\",\n      \"ret\": \"float\",\n      \"signature\": \"(const ImGuiOldColumns*,float)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igGetColumnOffset\": [\n    {\n      \"args\": \"(int column_index)\",\n      \"argsT\": [\n        {\n          \"name\": \"column_index\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(int column_index=-1)\",\n      \"call_args\": \"(column_index)\",\n      \"cimguiname\": \"igGetColumnOffset\",\n      \"defaults\": {\n        \"column_index\": \"-1\"\n      },\n      \"funcname\": \"GetColumnOffset\",\n      \"location\": \"imgui:857\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igGetColumnOffset\",\n      \"ret\": \"float\",\n      \"signature\": \"(int)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igGetColumnOffsetFromNorm\": [\n    {\n      \"args\": \"(const ImGuiOldColumns* columns,float offset_norm)\",\n      \"argsT\": [\n        {\n          \"name\": \"columns\",\n          \"type\": \"const ImGuiOldColumns*\"\n        },\n        {\n          \"name\": \"offset_norm\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImGuiOldColumns* columns,float offset_norm)\",\n      \"call_args\": \"(columns,offset_norm)\",\n      \"cimguiname\": \"igGetColumnOffsetFromNorm\",\n      \"defaults\": {},\n      \"funcname\": \"GetColumnOffsetFromNorm\",\n      \"location\": \"imgui_internal:3294\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igGetColumnOffsetFromNorm\",\n      \"ret\": \"float\",\n      \"signature\": \"(const ImGuiOldColumns*,float)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igGetColumnWidth\": [\n    {\n      \"args\": \"(int column_index)\",\n      \"argsT\": [\n        {\n          \"name\": \"column_index\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(int column_index=-1)\",\n      \"call_args\": \"(column_index)\",\n      \"cimguiname\": \"igGetColumnWidth\",\n      \"defaults\": {\n        \"column_index\": \"-1\"\n      },\n      \"funcname\": \"GetColumnWidth\",\n      \"location\": \"imgui:855\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igGetColumnWidth\",\n      \"ret\": \"float\",\n      \"signature\": \"(int)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igGetColumnsCount\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igGetColumnsCount\",\n      \"defaults\": {},\n      \"funcname\": \"GetColumnsCount\",\n      \"location\": \"imgui:859\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igGetColumnsCount\",\n      \"ret\": \"int\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igGetColumnsID\": [\n    {\n      \"args\": \"(const char* str_id,int count)\",\n      \"argsT\": [\n        {\n          \"name\": \"str_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* str_id,int count)\",\n      \"call_args\": \"(str_id,count)\",\n      \"cimguiname\": \"igGetColumnsID\",\n      \"defaults\": {},\n      \"funcname\": \"GetColumnsID\",\n      \"location\": \"imgui_internal:3292\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igGetColumnsID\",\n      \"ret\": \"ImGuiID\",\n      \"signature\": \"(const char*,int)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igGetContentRegionAvail\": [\n    {\n      \"args\": \"(ImVec2 *pOut)\",\n      \"argsT\": [\n        {\n          \"name\": \"pOut\",\n          \"type\": \"ImVec2*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igGetContentRegionAvail\",\n      \"defaults\": {},\n      \"funcname\": \"GetContentRegionAvail\",\n      \"location\": \"imgui:485\",\n      \"namespace\": \"ImGui\",\n      \"nonUDT\": 1,\n      \"ov_cimguiname\": \"igGetContentRegionAvail\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igGetCurrentContext\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igGetCurrentContext\",\n      \"defaults\": {},\n      \"funcname\": \"GetCurrentContext\",\n      \"location\": \"imgui:329\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igGetCurrentContext\",\n      \"ret\": \"ImGuiContext*\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igGetCurrentFocusScope\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igGetCurrentFocusScope\",\n      \"defaults\": {},\n      \"funcname\": \"GetCurrentFocusScope\",\n      \"location\": \"imgui_internal:3256\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igGetCurrentFocusScope\",\n      \"ret\": \"ImGuiID\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igGetCurrentTabBar\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igGetCurrentTabBar\",\n      \"defaults\": {},\n      \"funcname\": \"GetCurrentTabBar\",\n      \"location\": \"imgui_internal:3354\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igGetCurrentTabBar\",\n      \"ret\": \"ImGuiTabBar*\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igGetCurrentTable\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igGetCurrentTable\",\n      \"defaults\": {},\n      \"funcname\": \"GetCurrentTable\",\n      \"location\": \"imgui_internal:3309\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igGetCurrentTable\",\n      \"ret\": \"ImGuiTable*\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igGetCurrentWindow\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igGetCurrentWindow\",\n      \"defaults\": {},\n      \"funcname\": \"GetCurrentWindow\",\n      \"location\": \"imgui_internal:2970\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igGetCurrentWindow\",\n      \"ret\": \"ImGuiWindow*\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igGetCurrentWindowRead\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igGetCurrentWindowRead\",\n      \"defaults\": {},\n      \"funcname\": \"GetCurrentWindowRead\",\n      \"location\": \"imgui_internal:2969\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igGetCurrentWindowRead\",\n      \"ret\": \"ImGuiWindow*\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igGetCursorPos\": [\n    {\n      \"args\": \"(ImVec2 *pOut)\",\n      \"argsT\": [\n        {\n          \"name\": \"pOut\",\n          \"type\": \"ImVec2*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igGetCursorPos\",\n      \"defaults\": {},\n      \"funcname\": \"GetCursorPos\",\n      \"location\": \"imgui:486\",\n      \"namespace\": \"ImGui\",\n      \"nonUDT\": 1,\n      \"ov_cimguiname\": \"igGetCursorPos\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igGetCursorPosX\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igGetCursorPosX\",\n      \"defaults\": {},\n      \"funcname\": \"GetCursorPosX\",\n      \"location\": \"imgui:487\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igGetCursorPosX\",\n      \"ret\": \"float\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igGetCursorPosY\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igGetCursorPosY\",\n      \"defaults\": {},\n      \"funcname\": \"GetCursorPosY\",\n      \"location\": \"imgui:488\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igGetCursorPosY\",\n      \"ret\": \"float\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igGetCursorScreenPos\": [\n    {\n      \"args\": \"(ImVec2 *pOut)\",\n      \"argsT\": [\n        {\n          \"name\": \"pOut\",\n          \"type\": \"ImVec2*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igGetCursorScreenPos\",\n      \"defaults\": {},\n      \"funcname\": \"GetCursorScreenPos\",\n      \"location\": \"imgui:483\",\n      \"namespace\": \"ImGui\",\n      \"nonUDT\": 1,\n      \"ov_cimguiname\": \"igGetCursorScreenPos\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igGetCursorStartPos\": [\n    {\n      \"args\": \"(ImVec2 *pOut)\",\n      \"argsT\": [\n        {\n          \"name\": \"pOut\",\n          \"type\": \"ImVec2*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igGetCursorStartPos\",\n      \"defaults\": {},\n      \"funcname\": \"GetCursorStartPos\",\n      \"location\": \"imgui:492\",\n      \"namespace\": \"ImGui\",\n      \"nonUDT\": 1,\n      \"ov_cimguiname\": \"igGetCursorStartPos\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igGetDefaultFont\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igGetDefaultFont\",\n      \"defaults\": {},\n      \"funcname\": \"GetDefaultFont\",\n      \"location\": \"imgui_internal:3006\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igGetDefaultFont\",\n      \"ret\": \"ImFont*\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igGetDragDropPayload\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igGetDragDropPayload\",\n      \"defaults\": {},\n      \"funcname\": \"GetDragDropPayload\",\n      \"location\": \"imgui:891\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igGetDragDropPayload\",\n      \"ret\": \"const ImGuiPayload*\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igGetDrawData\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igGetDrawData\",\n      \"defaults\": {},\n      \"funcname\": \"GetDrawData\",\n      \"location\": \"imgui:339\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igGetDrawData\",\n      \"ret\": \"ImDrawData*\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igGetDrawListSharedData\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igGetDrawListSharedData\",\n      \"defaults\": {},\n      \"funcname\": \"GetDrawListSharedData\",\n      \"location\": \"imgui:952\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igGetDrawListSharedData\",\n      \"ret\": \"ImDrawListSharedData*\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igGetFocusID\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igGetFocusID\",\n      \"defaults\": {},\n      \"funcname\": \"GetFocusID\",\n      \"location\": \"imgui_internal:3069\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igGetFocusID\",\n      \"ret\": \"ImGuiID\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igGetFont\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igGetFont\",\n      \"defaults\": {},\n      \"funcname\": \"GetFont\",\n      \"location\": \"imgui:465\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igGetFont\",\n      \"ret\": \"ImFont*\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igGetFontSize\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igGetFontSize\",\n      \"defaults\": {},\n      \"funcname\": \"GetFontSize\",\n      \"location\": \"imgui:466\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igGetFontSize\",\n      \"ret\": \"float\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igGetFontTexUvWhitePixel\": [\n    {\n      \"args\": \"(ImVec2 *pOut)\",\n      \"argsT\": [\n        {\n          \"name\": \"pOut\",\n          \"type\": \"ImVec2*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igGetFontTexUvWhitePixel\",\n      \"defaults\": {},\n      \"funcname\": \"GetFontTexUvWhitePixel\",\n      \"location\": \"imgui:467\",\n      \"namespace\": \"ImGui\",\n      \"nonUDT\": 1,\n      \"ov_cimguiname\": \"igGetFontTexUvWhitePixel\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igGetForegroundDrawList\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igGetForegroundDrawList\",\n      \"defaults\": {},\n      \"funcname\": \"GetForegroundDrawList\",\n      \"location\": \"imgui:945\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igGetForegroundDrawList_Nil\",\n      \"ret\": \"ImDrawList*\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(ImGuiWindow* window)\",\n      \"argsT\": [\n        {\n          \"name\": \"window\",\n          \"type\": \"ImGuiWindow*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiWindow* window)\",\n      \"call_args\": \"(window)\",\n      \"cimguiname\": \"igGetForegroundDrawList\",\n      \"defaults\": {},\n      \"funcname\": \"GetForegroundDrawList\",\n      \"location\": \"imgui_internal:3007\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igGetForegroundDrawList_WindowPtr\",\n      \"ret\": \"ImDrawList*\",\n      \"signature\": \"(ImGuiWindow*)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(ImGuiViewport* viewport)\",\n      \"argsT\": [\n        {\n          \"name\": \"viewport\",\n          \"type\": \"ImGuiViewport*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiViewport* viewport)\",\n      \"call_args\": \"(viewport)\",\n      \"cimguiname\": \"igGetForegroundDrawList\",\n      \"defaults\": {},\n      \"funcname\": \"GetForegroundDrawList\",\n      \"location\": \"imgui_internal:3009\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igGetForegroundDrawList_ViewportPtr\",\n      \"ret\": \"ImDrawList*\",\n      \"signature\": \"(ImGuiViewport*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igGetFrameCount\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igGetFrameCount\",\n      \"defaults\": {},\n      \"funcname\": \"GetFrameCount\",\n      \"location\": \"imgui:951\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igGetFrameCount\",\n      \"ret\": \"int\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igGetFrameHeight\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igGetFrameHeight\",\n      \"defaults\": {},\n      \"funcname\": \"GetFrameHeight\",\n      \"location\": \"imgui:507\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igGetFrameHeight\",\n      \"ret\": \"float\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igGetFrameHeightWithSpacing\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igGetFrameHeightWithSpacing\",\n      \"defaults\": {},\n      \"funcname\": \"GetFrameHeightWithSpacing\",\n      \"location\": \"imgui:508\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igGetFrameHeightWithSpacing\",\n      \"ret\": \"float\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igGetHoveredID\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igGetHoveredID\",\n      \"defaults\": {},\n      \"funcname\": \"GetHoveredID\",\n      \"location\": \"imgui_internal:3073\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igGetHoveredID\",\n      \"ret\": \"ImGuiID\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igGetID\": [\n    {\n      \"args\": \"(const char* str_id)\",\n      \"argsT\": [\n        {\n          \"name\": \"str_id\",\n          \"type\": \"const char*\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* str_id)\",\n      \"call_args\": \"(str_id)\",\n      \"cimguiname\": \"igGetID\",\n      \"defaults\": {},\n      \"funcname\": \"GetID\",\n      \"location\": \"imgui:526\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igGetID_Str\",\n      \"ret\": \"ImGuiID\",\n      \"signature\": \"(const char*)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* str_id_begin,const char* str_id_end)\",\n      \"argsT\": [\n        {\n          \"name\": \"str_id_begin\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"str_id_end\",\n          \"type\": \"const char*\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* str_id_begin,const char* str_id_end)\",\n      \"call_args\": \"(str_id_begin,str_id_end)\",\n      \"cimguiname\": \"igGetID\",\n      \"defaults\": {},\n      \"funcname\": \"GetID\",\n      \"location\": \"imgui:527\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igGetID_StrStr\",\n      \"ret\": \"ImGuiID\",\n      \"signature\": \"(const char*,const char*)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const void* ptr_id)\",\n      \"argsT\": [\n        {\n          \"name\": \"ptr_id\",\n          \"type\": \"const void*\"\n        }\n      ],\n      \"argsoriginal\": \"(const void* ptr_id)\",\n      \"call_args\": \"(ptr_id)\",\n      \"cimguiname\": \"igGetID\",\n      \"defaults\": {},\n      \"funcname\": \"GetID\",\n      \"location\": \"imgui:528\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igGetID_Ptr\",\n      \"ret\": \"ImGuiID\",\n      \"signature\": \"(const void*)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(int int_id)\",\n      \"argsT\": [\n        {\n          \"name\": \"int_id\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(int int_id)\",\n      \"call_args\": \"(int_id)\",\n      \"cimguiname\": \"igGetID\",\n      \"defaults\": {},\n      \"funcname\": \"GetID\",\n      \"location\": \"imgui:529\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igGetID_Int\",\n      \"ret\": \"ImGuiID\",\n      \"signature\": \"(int)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igGetIDWithSeed\": [\n    {\n      \"args\": \"(const char* str_id_begin,const char* str_id_end,ImGuiID seed)\",\n      \"argsT\": [\n        {\n          \"name\": \"str_id_begin\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"str_id_end\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"seed\",\n          \"type\": \"ImGuiID\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* str_id_begin,const char* str_id_end,ImGuiID seed)\",\n      \"call_args\": \"(str_id_begin,str_id_end,seed)\",\n      \"cimguiname\": \"igGetIDWithSeed\",\n      \"defaults\": {},\n      \"funcname\": \"GetIDWithSeed\",\n      \"location\": \"imgui_internal:3078\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igGetIDWithSeed_Str\",\n      \"ret\": \"ImGuiID\",\n      \"signature\": \"(const char*,const char*,ImGuiID)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(int n,ImGuiID seed)\",\n      \"argsT\": [\n        {\n          \"name\": \"n\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"seed\",\n          \"type\": \"ImGuiID\"\n        }\n      ],\n      \"argsoriginal\": \"(int n,ImGuiID seed)\",\n      \"call_args\": \"(n,seed)\",\n      \"cimguiname\": \"igGetIDWithSeed\",\n      \"defaults\": {},\n      \"funcname\": \"GetIDWithSeed\",\n      \"location\": \"imgui_internal:3079\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igGetIDWithSeed_Int\",\n      \"ret\": \"ImGuiID\",\n      \"signature\": \"(int,ImGuiID)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igGetIO\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igGetIO\",\n      \"defaults\": {},\n      \"funcname\": \"GetIO\",\n      \"location\": \"imgui:333\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igGetIO\",\n      \"ret\": \"ImGuiIO*\",\n      \"retref\": \"&\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igGetIOEx\": [\n    {\n      \"args\": \"(ImGuiContext* ctx)\",\n      \"argsT\": [\n        {\n          \"name\": \"ctx\",\n          \"type\": \"ImGuiContext*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiContext* ctx)\",\n      \"call_args\": \"(ctx)\",\n      \"cimguiname\": \"igGetIOEx\",\n      \"defaults\": {},\n      \"funcname\": \"GetIOEx\",\n      \"location\": \"imgui_internal:2968\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igGetIOEx\",\n      \"ret\": \"ImGuiIO*\",\n      \"retref\": \"&\",\n      \"signature\": \"(ImGuiContext*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igGetInputTextState\": [\n    {\n      \"args\": \"(ImGuiID id)\",\n      \"argsT\": [\n        {\n          \"name\": \"id\",\n          \"type\": \"ImGuiID\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiID id)\",\n      \"call_args\": \"(id)\",\n      \"cimguiname\": \"igGetInputTextState\",\n      \"defaults\": {},\n      \"funcname\": \"GetInputTextState\",\n      \"location\": \"imgui_internal:3458\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igGetInputTextState\",\n      \"ret\": \"ImGuiInputTextState*\",\n      \"signature\": \"(ImGuiID)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igGetItemFlags\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igGetItemFlags\",\n      \"defaults\": {},\n      \"funcname\": \"GetItemFlags\",\n      \"location\": \"imgui_internal:3067\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igGetItemFlags\",\n      \"ret\": \"ImGuiItemFlags\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igGetItemID\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igGetItemID\",\n      \"defaults\": {},\n      \"funcname\": \"GetItemID\",\n      \"location\": \"imgui:932\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igGetItemID\",\n      \"ret\": \"ImGuiID\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igGetItemRectMax\": [\n    {\n      \"args\": \"(ImVec2 *pOut)\",\n      \"argsT\": [\n        {\n          \"name\": \"pOut\",\n          \"type\": \"ImVec2*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igGetItemRectMax\",\n      \"defaults\": {},\n      \"funcname\": \"GetItemRectMax\",\n      \"location\": \"imgui:934\",\n      \"namespace\": \"ImGui\",\n      \"nonUDT\": 1,\n      \"ov_cimguiname\": \"igGetItemRectMax\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igGetItemRectMin\": [\n    {\n      \"args\": \"(ImVec2 *pOut)\",\n      \"argsT\": [\n        {\n          \"name\": \"pOut\",\n          \"type\": \"ImVec2*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igGetItemRectMin\",\n      \"defaults\": {},\n      \"funcname\": \"GetItemRectMin\",\n      \"location\": \"imgui:933\",\n      \"namespace\": \"ImGui\",\n      \"nonUDT\": 1,\n      \"ov_cimguiname\": \"igGetItemRectMin\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igGetItemRectSize\": [\n    {\n      \"args\": \"(ImVec2 *pOut)\",\n      \"argsT\": [\n        {\n          \"name\": \"pOut\",\n          \"type\": \"ImVec2*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igGetItemRectSize\",\n      \"defaults\": {},\n      \"funcname\": \"GetItemRectSize\",\n      \"location\": \"imgui:935\",\n      \"namespace\": \"ImGui\",\n      \"nonUDT\": 1,\n      \"ov_cimguiname\": \"igGetItemRectSize\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igGetItemStatusFlags\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igGetItemStatusFlags\",\n      \"defaults\": {},\n      \"funcname\": \"GetItemStatusFlags\",\n      \"location\": \"imgui_internal:3066\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igGetItemStatusFlags\",\n      \"ret\": \"ImGuiItemStatusFlags\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igGetKeyChordName\": [\n    {\n      \"args\": \"(ImGuiKeyChord key_chord)\",\n      \"argsT\": [\n        {\n          \"name\": \"key_chord\",\n          \"type\": \"ImGuiKeyChord\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiKeyChord key_chord)\",\n      \"call_args\": \"(key_chord)\",\n      \"cimguiname\": \"igGetKeyChordName\",\n      \"defaults\": {},\n      \"funcname\": \"GetKeyChordName\",\n      \"location\": \"imgui_internal:3183\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igGetKeyChordName\",\n      \"ret\": \"const char*\",\n      \"signature\": \"(ImGuiKeyChord)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igGetKeyData\": [\n    {\n      \"args\": \"(ImGuiContext* ctx,ImGuiKey key)\",\n      \"argsT\": [\n        {\n          \"name\": \"ctx\",\n          \"type\": \"ImGuiContext*\"\n        },\n        {\n          \"name\": \"key\",\n          \"type\": \"ImGuiKey\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiContext* ctx,ImGuiKey key)\",\n      \"call_args\": \"(ctx,key)\",\n      \"cimguiname\": \"igGetKeyData\",\n      \"defaults\": {},\n      \"funcname\": \"GetKeyData\",\n      \"location\": \"imgui_internal:3181\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igGetKeyData_ContextPtr\",\n      \"ret\": \"ImGuiKeyData*\",\n      \"signature\": \"(ImGuiContext*,ImGuiKey)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(ImGuiKey key)\",\n      \"argsT\": [\n        {\n          \"name\": \"key\",\n          \"type\": \"ImGuiKey\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiKey key)\",\n      \"call_args\": \"(key)\",\n      \"cimguiname\": \"igGetKeyData\",\n      \"defaults\": {},\n      \"funcname\": \"GetKeyData\",\n      \"location\": \"imgui_internal:3182\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igGetKeyData_Key\",\n      \"ret\": \"ImGuiKeyData*\",\n      \"signature\": \"(ImGuiKey)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igGetKeyMagnitude2d\": [\n    {\n      \"args\": \"(ImVec2 *pOut,ImGuiKey key_left,ImGuiKey key_right,ImGuiKey key_up,ImGuiKey key_down)\",\n      \"argsT\": [\n        {\n          \"name\": \"pOut\",\n          \"type\": \"ImVec2*\"\n        },\n        {\n          \"name\": \"key_left\",\n          \"type\": \"ImGuiKey\"\n        },\n        {\n          \"name\": \"key_right\",\n          \"type\": \"ImGuiKey\"\n        },\n        {\n          \"name\": \"key_up\",\n          \"type\": \"ImGuiKey\"\n        },\n        {\n          \"name\": \"key_down\",\n          \"type\": \"ImGuiKey\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiKey key_left,ImGuiKey key_right,ImGuiKey key_up,ImGuiKey key_down)\",\n      \"call_args\": \"(key_left,key_right,key_up,key_down)\",\n      \"cimguiname\": \"igGetKeyMagnitude2d\",\n      \"defaults\": {},\n      \"funcname\": \"GetKeyMagnitude2d\",\n      \"location\": \"imgui_internal:3186\",\n      \"namespace\": \"ImGui\",\n      \"nonUDT\": 1,\n      \"ov_cimguiname\": \"igGetKeyMagnitude2d\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiKey,ImGuiKey,ImGuiKey,ImGuiKey)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igGetKeyName\": [\n    {\n      \"args\": \"(ImGuiKey key)\",\n      \"argsT\": [\n        {\n          \"name\": \"key\",\n          \"type\": \"ImGuiKey\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiKey key)\",\n      \"call_args\": \"(key)\",\n      \"cimguiname\": \"igGetKeyName\",\n      \"defaults\": {},\n      \"funcname\": \"GetKeyName\",\n      \"location\": \"imgui:975\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igGetKeyName\",\n      \"ret\": \"const char*\",\n      \"signature\": \"(ImGuiKey)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igGetKeyOwner\": [\n    {\n      \"args\": \"(ImGuiKey key)\",\n      \"argsT\": [\n        {\n          \"name\": \"key\",\n          \"type\": \"ImGuiKey\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiKey key)\",\n      \"call_args\": \"(key)\",\n      \"cimguiname\": \"igGetKeyOwner\",\n      \"defaults\": {},\n      \"funcname\": \"GetKeyOwner\",\n      \"location\": \"imgui_internal:3205\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igGetKeyOwner\",\n      \"ret\": \"ImGuiID\",\n      \"signature\": \"(ImGuiKey)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igGetKeyOwnerData\": [\n    {\n      \"args\": \"(ImGuiContext* ctx,ImGuiKey key)\",\n      \"argsT\": [\n        {\n          \"name\": \"ctx\",\n          \"type\": \"ImGuiContext*\"\n        },\n        {\n          \"name\": \"key\",\n          \"type\": \"ImGuiKey\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiContext* ctx,ImGuiKey key)\",\n      \"call_args\": \"(ctx,key)\",\n      \"cimguiname\": \"igGetKeyOwnerData\",\n      \"defaults\": {},\n      \"funcname\": \"GetKeyOwnerData\",\n      \"location\": \"imgui_internal:3210\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igGetKeyOwnerData\",\n      \"ret\": \"ImGuiKeyOwnerData*\",\n      \"signature\": \"(ImGuiContext*,ImGuiKey)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igGetKeyPressedAmount\": [\n    {\n      \"args\": \"(ImGuiKey key,float repeat_delay,float rate)\",\n      \"argsT\": [\n        {\n          \"name\": \"key\",\n          \"type\": \"ImGuiKey\"\n        },\n        {\n          \"name\": \"repeat_delay\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"rate\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiKey key,float repeat_delay,float rate)\",\n      \"call_args\": \"(key,repeat_delay,rate)\",\n      \"cimguiname\": \"igGetKeyPressedAmount\",\n      \"defaults\": {},\n      \"funcname\": \"GetKeyPressedAmount\",\n      \"location\": \"imgui:974\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igGetKeyPressedAmount\",\n      \"ret\": \"int\",\n      \"signature\": \"(ImGuiKey,float,float)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igGetMainViewport\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igGetMainViewport\",\n      \"defaults\": {},\n      \"funcname\": \"GetMainViewport\",\n      \"location\": \"imgui:941\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igGetMainViewport\",\n      \"ret\": \"ImGuiViewport*\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igGetMouseClickedCount\": [\n    {\n      \"args\": \"(ImGuiMouseButton button)\",\n      \"argsT\": [\n        {\n          \"name\": \"button\",\n          \"type\": \"ImGuiMouseButton\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiMouseButton button)\",\n      \"call_args\": \"(button)\",\n      \"cimguiname\": \"igGetMouseClickedCount\",\n      \"defaults\": {},\n      \"funcname\": \"GetMouseClickedCount\",\n      \"location\": \"imgui:1012\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igGetMouseClickedCount\",\n      \"ret\": \"int\",\n      \"signature\": \"(ImGuiMouseButton)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igGetMouseCursor\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igGetMouseCursor\",\n      \"defaults\": {},\n      \"funcname\": \"GetMouseCursor\",\n      \"location\": \"imgui:1021\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igGetMouseCursor\",\n      \"ret\": \"ImGuiMouseCursor\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igGetMouseDragDelta\": [\n    {\n      \"args\": \"(ImVec2 *pOut,ImGuiMouseButton button,float lock_threshold)\",\n      \"argsT\": [\n        {\n          \"name\": \"pOut\",\n          \"type\": \"ImVec2*\"\n        },\n        {\n          \"name\": \"button\",\n          \"type\": \"ImGuiMouseButton\"\n        },\n        {\n          \"name\": \"lock_threshold\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiMouseButton button=0,float lock_threshold=-1.0f)\",\n      \"call_args\": \"(button,lock_threshold)\",\n      \"cimguiname\": \"igGetMouseDragDelta\",\n      \"defaults\": {\n        \"button\": \"0\",\n        \"lock_threshold\": \"-1.0f\"\n      },\n      \"funcname\": \"GetMouseDragDelta\",\n      \"location\": \"imgui:1019\",\n      \"namespace\": \"ImGui\",\n      \"nonUDT\": 1,\n      \"ov_cimguiname\": \"igGetMouseDragDelta\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiMouseButton,float)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igGetMousePos\": [\n    {\n      \"args\": \"(ImVec2 *pOut)\",\n      \"argsT\": [\n        {\n          \"name\": \"pOut\",\n          \"type\": \"ImVec2*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igGetMousePos\",\n      \"defaults\": {},\n      \"funcname\": \"GetMousePos\",\n      \"location\": \"imgui:1016\",\n      \"namespace\": \"ImGui\",\n      \"nonUDT\": 1,\n      \"ov_cimguiname\": \"igGetMousePos\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igGetMousePosOnOpeningCurrentPopup\": [\n    {\n      \"args\": \"(ImVec2 *pOut)\",\n      \"argsT\": [\n        {\n          \"name\": \"pOut\",\n          \"type\": \"ImVec2*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igGetMousePosOnOpeningCurrentPopup\",\n      \"defaults\": {},\n      \"funcname\": \"GetMousePosOnOpeningCurrentPopup\",\n      \"location\": \"imgui:1017\",\n      \"namespace\": \"ImGui\",\n      \"nonUDT\": 1,\n      \"ov_cimguiname\": \"igGetMousePosOnOpeningCurrentPopup\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igGetMultiSelectState\": [\n    {\n      \"args\": \"(ImGuiID id)\",\n      \"argsT\": [\n        {\n          \"name\": \"id\",\n          \"type\": \"ImGuiID\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiID id)\",\n      \"call_args\": \"(id)\",\n      \"cimguiname\": \"igGetMultiSelectState\",\n      \"defaults\": {},\n      \"funcname\": \"GetMultiSelectState\",\n      \"location\": \"imgui_internal:3283\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igGetMultiSelectState\",\n      \"ret\": \"ImGuiMultiSelectState*\",\n      \"signature\": \"(ImGuiID)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igGetNavTweakPressedAmount\": [\n    {\n      \"args\": \"(ImGuiAxis axis)\",\n      \"argsT\": [\n        {\n          \"name\": \"axis\",\n          \"type\": \"ImGuiAxis\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiAxis axis)\",\n      \"call_args\": \"(axis)\",\n      \"cimguiname\": \"igGetNavTweakPressedAmount\",\n      \"defaults\": {},\n      \"funcname\": \"GetNavTweakPressedAmount\",\n      \"location\": \"imgui_internal:3187\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igGetNavTweakPressedAmount\",\n      \"ret\": \"float\",\n      \"signature\": \"(ImGuiAxis)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igGetPlatformIO\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igGetPlatformIO\",\n      \"defaults\": {},\n      \"funcname\": \"GetPlatformIO\",\n      \"location\": \"imgui:334\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igGetPlatformIO\",\n      \"ret\": \"ImGuiPlatformIO*\",\n      \"retref\": \"&\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igGetPopupAllowedExtentRect\": [\n    {\n      \"args\": \"(ImRect *pOut,ImGuiWindow* window)\",\n      \"argsT\": [\n        {\n          \"name\": \"pOut\",\n          \"type\": \"ImRect*\"\n        },\n        {\n          \"name\": \"window\",\n          \"type\": \"ImGuiWindow*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiWindow* window)\",\n      \"call_args\": \"(window)\",\n      \"cimguiname\": \"igGetPopupAllowedExtentRect\",\n      \"defaults\": {},\n      \"funcname\": \"GetPopupAllowedExtentRect\",\n      \"location\": \"imgui_internal:3115\",\n      \"namespace\": \"ImGui\",\n      \"nonUDT\": 1,\n      \"ov_cimguiname\": \"igGetPopupAllowedExtentRect\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiWindow*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igGetScrollMaxX\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igGetScrollMaxX\",\n      \"defaults\": {},\n      \"funcname\": \"GetScrollMaxX\",\n      \"location\": \"imgui:434\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igGetScrollMaxX\",\n      \"ret\": \"float\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igGetScrollMaxY\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igGetScrollMaxY\",\n      \"defaults\": {},\n      \"funcname\": \"GetScrollMaxY\",\n      \"location\": \"imgui:435\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igGetScrollMaxY\",\n      \"ret\": \"float\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igGetScrollX\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igGetScrollX\",\n      \"defaults\": {},\n      \"funcname\": \"GetScrollX\",\n      \"location\": \"imgui:430\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igGetScrollX\",\n      \"ret\": \"float\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igGetScrollY\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igGetScrollY\",\n      \"defaults\": {},\n      \"funcname\": \"GetScrollY\",\n      \"location\": \"imgui:431\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igGetScrollY\",\n      \"ret\": \"float\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igGetShortcutRoutingData\": [\n    {\n      \"args\": \"(ImGuiKeyChord key_chord)\",\n      \"argsT\": [\n        {\n          \"name\": \"key_chord\",\n          \"type\": \"ImGuiKeyChord\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiKeyChord key_chord)\",\n      \"call_args\": \"(key_chord)\",\n      \"cimguiname\": \"igGetShortcutRoutingData\",\n      \"defaults\": {},\n      \"funcname\": \"GetShortcutRoutingData\",\n      \"location\": \"imgui_internal:3244\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igGetShortcutRoutingData\",\n      \"ret\": \"ImGuiKeyRoutingData*\",\n      \"signature\": \"(ImGuiKeyChord)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igGetStateStorage\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igGetStateStorage\",\n      \"defaults\": {},\n      \"funcname\": \"GetStateStorage\",\n      \"location\": \"imgui:955\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igGetStateStorage\",\n      \"ret\": \"ImGuiStorage*\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igGetStyle\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igGetStyle\",\n      \"defaults\": {},\n      \"funcname\": \"GetStyle\",\n      \"location\": \"imgui:335\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igGetStyle\",\n      \"ret\": \"ImGuiStyle*\",\n      \"retref\": \"&\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igGetStyleColorName\": [\n    {\n      \"args\": \"(ImGuiCol idx)\",\n      \"argsT\": [\n        {\n          \"name\": \"idx\",\n          \"type\": \"ImGuiCol\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiCol idx)\",\n      \"call_args\": \"(idx)\",\n      \"cimguiname\": \"igGetStyleColorName\",\n      \"defaults\": {},\n      \"funcname\": \"GetStyleColorName\",\n      \"location\": \"imgui:953\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igGetStyleColorName\",\n      \"ret\": \"const char*\",\n      \"signature\": \"(ImGuiCol)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igGetStyleColorVec4\": [\n    {\n      \"args\": \"(ImGuiCol idx)\",\n      \"argsT\": [\n        {\n          \"name\": \"idx\",\n          \"type\": \"ImGuiCol\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiCol idx)\",\n      \"call_args\": \"(idx)\",\n      \"cimguiname\": \"igGetStyleColorVec4\",\n      \"defaults\": {},\n      \"funcname\": \"GetStyleColorVec4\",\n      \"location\": \"imgui:471\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igGetStyleColorVec4\",\n      \"ret\": \"const ImVec4*\",\n      \"retref\": \"&\",\n      \"signature\": \"(ImGuiCol)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igGetStyleVarInfo\": [\n    {\n      \"args\": \"(ImGuiStyleVar idx)\",\n      \"argsT\": [\n        {\n          \"name\": \"idx\",\n          \"type\": \"ImGuiStyleVar\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiStyleVar idx)\",\n      \"call_args\": \"(idx)\",\n      \"cimguiname\": \"igGetStyleVarInfo\",\n      \"defaults\": {},\n      \"funcname\": \"GetStyleVarInfo\",\n      \"location\": \"imgui_internal:3095\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igGetStyleVarInfo\",\n      \"ret\": \"const ImGuiDataVarInfo*\",\n      \"signature\": \"(ImGuiStyleVar)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igGetTextLineHeight\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igGetTextLineHeight\",\n      \"defaults\": {},\n      \"funcname\": \"GetTextLineHeight\",\n      \"location\": \"imgui:505\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igGetTextLineHeight\",\n      \"ret\": \"float\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igGetTextLineHeightWithSpacing\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igGetTextLineHeightWithSpacing\",\n      \"defaults\": {},\n      \"funcname\": \"GetTextLineHeightWithSpacing\",\n      \"location\": \"imgui:506\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igGetTextLineHeightWithSpacing\",\n      \"ret\": \"float\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igGetTime\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igGetTime\",\n      \"defaults\": {},\n      \"funcname\": \"GetTime\",\n      \"location\": \"imgui:950\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igGetTime\",\n      \"ret\": \"double\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igGetTopMostAndVisiblePopupModal\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igGetTopMostAndVisiblePopupModal\",\n      \"defaults\": {},\n      \"funcname\": \"GetTopMostAndVisiblePopupModal\",\n      \"location\": \"imgui_internal:3117\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igGetTopMostAndVisiblePopupModal\",\n      \"ret\": \"ImGuiWindow*\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igGetTopMostPopupModal\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igGetTopMostPopupModal\",\n      \"defaults\": {},\n      \"funcname\": \"GetTopMostPopupModal\",\n      \"location\": \"imgui_internal:3116\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igGetTopMostPopupModal\",\n      \"ret\": \"ImGuiWindow*\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igGetTreeNodeToLabelSpacing\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igGetTreeNodeToLabelSpacing\",\n      \"defaults\": {},\n      \"funcname\": \"GetTreeNodeToLabelSpacing\",\n      \"location\": \"imgui:670\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igGetTreeNodeToLabelSpacing\",\n      \"ret\": \"float\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igGetTypematicRepeatRate\": [\n    {\n      \"args\": \"(ImGuiInputFlags flags,float* repeat_delay,float* repeat_rate)\",\n      \"argsT\": [\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiInputFlags\"\n        },\n        {\n          \"name\": \"repeat_delay\",\n          \"type\": \"float*\"\n        },\n        {\n          \"name\": \"repeat_rate\",\n          \"type\": \"float*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiInputFlags flags,float* repeat_delay,float* repeat_rate)\",\n      \"call_args\": \"(flags,repeat_delay,repeat_rate)\",\n      \"cimguiname\": \"igGetTypematicRepeatRate\",\n      \"defaults\": {},\n      \"funcname\": \"GetTypematicRepeatRate\",\n      \"location\": \"imgui_internal:3189\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igGetTypematicRepeatRate\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiInputFlags,float*,float*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igGetTypingSelectRequest\": [\n    {\n      \"args\": \"(ImGuiTypingSelectFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiTypingSelectFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiTypingSelectFlags flags=ImGuiTypingSelectFlags_None)\",\n      \"call_args\": \"(flags)\",\n      \"cimguiname\": \"igGetTypingSelectRequest\",\n      \"defaults\": {\n        \"flags\": \"ImGuiTypingSelectFlags_None\"\n      },\n      \"funcname\": \"GetTypingSelectRequest\",\n      \"location\": \"imgui_internal:3268\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igGetTypingSelectRequest\",\n      \"ret\": \"ImGuiTypingSelectRequest*\",\n      \"signature\": \"(ImGuiTypingSelectFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igGetVersion\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igGetVersion\",\n      \"defaults\": {},\n      \"funcname\": \"GetVersion\",\n      \"location\": \"imgui:351\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igGetVersion\",\n      \"ret\": \"const char*\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igGetWindowDrawList\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igGetWindowDrawList\",\n      \"defaults\": {},\n      \"funcname\": \"GetWindowDrawList\",\n      \"location\": \"imgui:401\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igGetWindowDrawList\",\n      \"ret\": \"ImDrawList*\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igGetWindowHeight\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igGetWindowHeight\",\n      \"defaults\": {},\n      \"funcname\": \"GetWindowHeight\",\n      \"location\": \"imgui:405\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igGetWindowHeight\",\n      \"ret\": \"float\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igGetWindowPos\": [\n    {\n      \"args\": \"(ImVec2 *pOut)\",\n      \"argsT\": [\n        {\n          \"name\": \"pOut\",\n          \"type\": \"ImVec2*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igGetWindowPos\",\n      \"defaults\": {},\n      \"funcname\": \"GetWindowPos\",\n      \"location\": \"imgui:402\",\n      \"namespace\": \"ImGui\",\n      \"nonUDT\": 1,\n      \"ov_cimguiname\": \"igGetWindowPos\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igGetWindowResizeBorderID\": [\n    {\n      \"args\": \"(ImGuiWindow* window,ImGuiDir dir)\",\n      \"argsT\": [\n        {\n          \"name\": \"window\",\n          \"type\": \"ImGuiWindow*\"\n        },\n        {\n          \"name\": \"dir\",\n          \"type\": \"ImGuiDir\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiWindow* window,ImGuiDir dir)\",\n      \"call_args\": \"(window,dir)\",\n      \"cimguiname\": \"igGetWindowResizeBorderID\",\n      \"defaults\": {},\n      \"funcname\": \"GetWindowResizeBorderID\",\n      \"location\": \"imgui_internal:3418\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igGetWindowResizeBorderID\",\n      \"ret\": \"ImGuiID\",\n      \"signature\": \"(ImGuiWindow*,ImGuiDir)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igGetWindowResizeCornerID\": [\n    {\n      \"args\": \"(ImGuiWindow* window,int n)\",\n      \"argsT\": [\n        {\n          \"name\": \"window\",\n          \"type\": \"ImGuiWindow*\"\n        },\n        {\n          \"name\": \"n\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiWindow* window,int n)\",\n      \"call_args\": \"(window,n)\",\n      \"cimguiname\": \"igGetWindowResizeCornerID\",\n      \"defaults\": {},\n      \"funcname\": \"GetWindowResizeCornerID\",\n      \"location\": \"imgui_internal:3417\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igGetWindowResizeCornerID\",\n      \"ret\": \"ImGuiID\",\n      \"signature\": \"(ImGuiWindow*,int)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igGetWindowScrollbarID\": [\n    {\n      \"args\": \"(ImGuiWindow* window,ImGuiAxis axis)\",\n      \"argsT\": [\n        {\n          \"name\": \"window\",\n          \"type\": \"ImGuiWindow*\"\n        },\n        {\n          \"name\": \"axis\",\n          \"type\": \"ImGuiAxis\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiWindow* window,ImGuiAxis axis)\",\n      \"call_args\": \"(window,axis)\",\n      \"cimguiname\": \"igGetWindowScrollbarID\",\n      \"defaults\": {},\n      \"funcname\": \"GetWindowScrollbarID\",\n      \"location\": \"imgui_internal:3416\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igGetWindowScrollbarID\",\n      \"ret\": \"ImGuiID\",\n      \"signature\": \"(ImGuiWindow*,ImGuiAxis)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igGetWindowScrollbarRect\": [\n    {\n      \"args\": \"(ImRect *pOut,ImGuiWindow* window,ImGuiAxis axis)\",\n      \"argsT\": [\n        {\n          \"name\": \"pOut\",\n          \"type\": \"ImRect*\"\n        },\n        {\n          \"name\": \"window\",\n          \"type\": \"ImGuiWindow*\"\n        },\n        {\n          \"name\": \"axis\",\n          \"type\": \"ImGuiAxis\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiWindow* window,ImGuiAxis axis)\",\n      \"call_args\": \"(window,axis)\",\n      \"cimguiname\": \"igGetWindowScrollbarRect\",\n      \"defaults\": {},\n      \"funcname\": \"GetWindowScrollbarRect\",\n      \"location\": \"imgui_internal:3415\",\n      \"namespace\": \"ImGui\",\n      \"nonUDT\": 1,\n      \"ov_cimguiname\": \"igGetWindowScrollbarRect\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiWindow*,ImGuiAxis)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igGetWindowSize\": [\n    {\n      \"args\": \"(ImVec2 *pOut)\",\n      \"argsT\": [\n        {\n          \"name\": \"pOut\",\n          \"type\": \"ImVec2*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igGetWindowSize\",\n      \"defaults\": {},\n      \"funcname\": \"GetWindowSize\",\n      \"location\": \"imgui:403\",\n      \"namespace\": \"ImGui\",\n      \"nonUDT\": 1,\n      \"ov_cimguiname\": \"igGetWindowSize\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igGetWindowWidth\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igGetWindowWidth\",\n      \"defaults\": {},\n      \"funcname\": \"GetWindowWidth\",\n      \"location\": \"imgui:404\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igGetWindowWidth\",\n      \"ret\": \"float\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igImAbs\": [\n    {\n      \"args\": \"(int x)\",\n      \"argsT\": [\n        {\n          \"name\": \"x\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(int x)\",\n      \"call_args\": \"(x)\",\n      \"cimguiname\": \"igImAbs\",\n      \"defaults\": {},\n      \"funcname\": \"ImAbs\",\n      \"location\": \"imgui_internal:448\",\n      \"ov_cimguiname\": \"igImAbs_Int\",\n      \"ret\": \"int\",\n      \"signature\": \"(int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(float x)\",\n      \"argsT\": [\n        {\n          \"name\": \"x\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(float x)\",\n      \"call_args\": \"(x)\",\n      \"cimguiname\": \"igImAbs\",\n      \"defaults\": {},\n      \"funcname\": \"ImAbs\",\n      \"location\": \"imgui_internal:449\",\n      \"ov_cimguiname\": \"igImAbs_Float\",\n      \"ret\": \"float\",\n      \"signature\": \"(float)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(double x)\",\n      \"argsT\": [\n        {\n          \"name\": \"x\",\n          \"type\": \"double\"\n        }\n      ],\n      \"argsoriginal\": \"(double x)\",\n      \"call_args\": \"(x)\",\n      \"cimguiname\": \"igImAbs\",\n      \"defaults\": {},\n      \"funcname\": \"ImAbs\",\n      \"location\": \"imgui_internal:450\",\n      \"ov_cimguiname\": \"igImAbs_double\",\n      \"ret\": \"double\",\n      \"signature\": \"(double)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igImAlphaBlendColors\": [\n    {\n      \"args\": \"(ImU32 col_a,ImU32 col_b)\",\n      \"argsT\": [\n        {\n          \"name\": \"col_a\",\n          \"type\": \"ImU32\"\n        },\n        {\n          \"name\": \"col_b\",\n          \"type\": \"ImU32\"\n        }\n      ],\n      \"argsoriginal\": \"(ImU32 col_a,ImU32 col_b)\",\n      \"call_args\": \"(col_a,col_b)\",\n      \"cimguiname\": \"igImAlphaBlendColors\",\n      \"defaults\": {},\n      \"funcname\": \"ImAlphaBlendColors\",\n      \"location\": \"imgui_internal:359\",\n      \"ov_cimguiname\": \"igImAlphaBlendColors\",\n      \"ret\": \"ImU32\",\n      \"signature\": \"(ImU32,ImU32)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igImBezierCubicCalc\": [\n    {\n      \"args\": \"(ImVec2 *pOut,const ImVec2 p1,const ImVec2 p2,const ImVec2 p3,const ImVec2 p4,float t)\",\n      \"argsT\": [\n        {\n          \"name\": \"pOut\",\n          \"type\": \"ImVec2*\"\n        },\n        {\n          \"name\": \"p1\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"p2\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"p3\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"p4\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"t\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImVec2& p1,const ImVec2& p2,const ImVec2& p3,const ImVec2& p4,float t)\",\n      \"call_args\": \"(p1,p2,p3,p4,t)\",\n      \"cimguiname\": \"igImBezierCubicCalc\",\n      \"defaults\": {},\n      \"funcname\": \"ImBezierCubicCalc\",\n      \"location\": \"imgui_internal:495\",\n      \"nonUDT\": 1,\n      \"ov_cimguiname\": \"igImBezierCubicCalc\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImVec2,const ImVec2,const ImVec2,const ImVec2,float)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igImBezierCubicClosestPoint\": [\n    {\n      \"args\": \"(ImVec2 *pOut,const ImVec2 p1,const ImVec2 p2,const ImVec2 p3,const ImVec2 p4,const ImVec2 p,int num_segments)\",\n      \"argsT\": [\n        {\n          \"name\": \"pOut\",\n          \"type\": \"ImVec2*\"\n        },\n        {\n          \"name\": \"p1\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"p2\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"p3\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"p4\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"p\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"num_segments\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImVec2& p1,const ImVec2& p2,const ImVec2& p3,const ImVec2& p4,const ImVec2& p,int num_segments)\",\n      \"call_args\": \"(p1,p2,p3,p4,p,num_segments)\",\n      \"cimguiname\": \"igImBezierCubicClosestPoint\",\n      \"defaults\": {},\n      \"funcname\": \"ImBezierCubicClosestPoint\",\n      \"location\": \"imgui_internal:496\",\n      \"nonUDT\": 1,\n      \"ov_cimguiname\": \"igImBezierCubicClosestPoint\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImVec2,const ImVec2,const ImVec2,const ImVec2,const ImVec2,int)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igImBezierCubicClosestPointCasteljau\": [\n    {\n      \"args\": \"(ImVec2 *pOut,const ImVec2 p1,const ImVec2 p2,const ImVec2 p3,const ImVec2 p4,const ImVec2 p,float tess_tol)\",\n      \"argsT\": [\n        {\n          \"name\": \"pOut\",\n          \"type\": \"ImVec2*\"\n        },\n        {\n          \"name\": \"p1\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"p2\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"p3\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"p4\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"p\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"tess_tol\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImVec2& p1,const ImVec2& p2,const ImVec2& p3,const ImVec2& p4,const ImVec2& p,float tess_tol)\",\n      \"call_args\": \"(p1,p2,p3,p4,p,tess_tol)\",\n      \"cimguiname\": \"igImBezierCubicClosestPointCasteljau\",\n      \"defaults\": {},\n      \"funcname\": \"ImBezierCubicClosestPointCasteljau\",\n      \"location\": \"imgui_internal:497\",\n      \"nonUDT\": 1,\n      \"ov_cimguiname\": \"igImBezierCubicClosestPointCasteljau\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImVec2,const ImVec2,const ImVec2,const ImVec2,const ImVec2,float)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igImBezierQuadraticCalc\": [\n    {\n      \"args\": \"(ImVec2 *pOut,const ImVec2 p1,const ImVec2 p2,const ImVec2 p3,float t)\",\n      \"argsT\": [\n        {\n          \"name\": \"pOut\",\n          \"type\": \"ImVec2*\"\n        },\n        {\n          \"name\": \"p1\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"p2\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"p3\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"t\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImVec2& p1,const ImVec2& p2,const ImVec2& p3,float t)\",\n      \"call_args\": \"(p1,p2,p3,t)\",\n      \"cimguiname\": \"igImBezierQuadraticCalc\",\n      \"defaults\": {},\n      \"funcname\": \"ImBezierQuadraticCalc\",\n      \"location\": \"imgui_internal:498\",\n      \"nonUDT\": 1,\n      \"ov_cimguiname\": \"igImBezierQuadraticCalc\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImVec2,const ImVec2,const ImVec2,float)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igImBitArrayClearAllBits\": [\n    {\n      \"args\": \"(ImU32* arr,int bitcount)\",\n      \"argsT\": [\n        {\n          \"name\": \"arr\",\n          \"type\": \"ImU32*\"\n        },\n        {\n          \"name\": \"bitcount\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(ImU32* arr,int bitcount)\",\n      \"call_args\": \"(arr,bitcount)\",\n      \"cimguiname\": \"igImBitArrayClearAllBits\",\n      \"defaults\": {},\n      \"funcname\": \"ImBitArrayClearAllBits\",\n      \"location\": \"imgui_internal:568\",\n      \"ov_cimguiname\": \"igImBitArrayClearAllBits\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImU32*,int)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igImBitArrayClearBit\": [\n    {\n      \"args\": \"(ImU32* arr,int n)\",\n      \"argsT\": [\n        {\n          \"name\": \"arr\",\n          \"type\": \"ImU32*\"\n        },\n        {\n          \"name\": \"n\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(ImU32* arr,int n)\",\n      \"call_args\": \"(arr,n)\",\n      \"cimguiname\": \"igImBitArrayClearBit\",\n      \"defaults\": {},\n      \"funcname\": \"ImBitArrayClearBit\",\n      \"location\": \"imgui_internal:570\",\n      \"ov_cimguiname\": \"igImBitArrayClearBit\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImU32*,int)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igImBitArrayGetStorageSizeInBytes\": [\n    {\n      \"args\": \"(int bitcount)\",\n      \"argsT\": [\n        {\n          \"name\": \"bitcount\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(int bitcount)\",\n      \"call_args\": \"(bitcount)\",\n      \"cimguiname\": \"igImBitArrayGetStorageSizeInBytes\",\n      \"defaults\": {},\n      \"funcname\": \"ImBitArrayGetStorageSizeInBytes\",\n      \"location\": \"imgui_internal:567\",\n      \"ov_cimguiname\": \"igImBitArrayGetStorageSizeInBytes\",\n      \"ret\": \"size_t\",\n      \"signature\": \"(int)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igImBitArraySetBit\": [\n    {\n      \"args\": \"(ImU32* arr,int n)\",\n      \"argsT\": [\n        {\n          \"name\": \"arr\",\n          \"type\": \"ImU32*\"\n        },\n        {\n          \"name\": \"n\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(ImU32* arr,int n)\",\n      \"call_args\": \"(arr,n)\",\n      \"cimguiname\": \"igImBitArraySetBit\",\n      \"defaults\": {},\n      \"funcname\": \"ImBitArraySetBit\",\n      \"location\": \"imgui_internal:571\",\n      \"ov_cimguiname\": \"igImBitArraySetBit\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImU32*,int)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igImBitArraySetBitRange\": [\n    {\n      \"args\": \"(ImU32* arr,int n,int n2)\",\n      \"argsT\": [\n        {\n          \"name\": \"arr\",\n          \"type\": \"ImU32*\"\n        },\n        {\n          \"name\": \"n\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"n2\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(ImU32* arr,int n,int n2)\",\n      \"call_args\": \"(arr,n,n2)\",\n      \"cimguiname\": \"igImBitArraySetBitRange\",\n      \"defaults\": {},\n      \"funcname\": \"ImBitArraySetBitRange\",\n      \"location\": \"imgui_internal:572\",\n      \"ov_cimguiname\": \"igImBitArraySetBitRange\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImU32*,int,int)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igImBitArrayTestBit\": [\n    {\n      \"args\": \"(const ImU32* arr,int n)\",\n      \"argsT\": [\n        {\n          \"name\": \"arr\",\n          \"type\": \"const ImU32*\"\n        },\n        {\n          \"name\": \"n\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImU32* arr,int n)\",\n      \"call_args\": \"(arr,n)\",\n      \"cimguiname\": \"igImBitArrayTestBit\",\n      \"defaults\": {},\n      \"funcname\": \"ImBitArrayTestBit\",\n      \"location\": \"imgui_internal:569\",\n      \"ov_cimguiname\": \"igImBitArrayTestBit\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const ImU32*,int)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igImCharIsBlankA\": [\n    {\n      \"args\": \"(char c)\",\n      \"argsT\": [\n        {\n          \"name\": \"c\",\n          \"type\": \"char\"\n        }\n      ],\n      \"argsoriginal\": \"(char c)\",\n      \"call_args\": \"(c)\",\n      \"cimguiname\": \"igImCharIsBlankA\",\n      \"defaults\": {},\n      \"funcname\": \"ImCharIsBlankA\",\n      \"location\": \"imgui_internal:381\",\n      \"ov_cimguiname\": \"igImCharIsBlankA\",\n      \"ret\": \"bool\",\n      \"signature\": \"(char)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igImCharIsBlankW\": [\n    {\n      \"args\": \"(unsigned int c)\",\n      \"argsT\": [\n        {\n          \"name\": \"c\",\n          \"type\": \"unsigned int\"\n        }\n      ],\n      \"argsoriginal\": \"(unsigned int c)\",\n      \"call_args\": \"(c)\",\n      \"cimguiname\": \"igImCharIsBlankW\",\n      \"defaults\": {},\n      \"funcname\": \"ImCharIsBlankW\",\n      \"location\": \"imgui_internal:382\",\n      \"ov_cimguiname\": \"igImCharIsBlankW\",\n      \"ret\": \"bool\",\n      \"signature\": \"(unsigned int)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igImCharIsXdigitA\": [\n    {\n      \"args\": \"(char c)\",\n      \"argsT\": [\n        {\n          \"name\": \"c\",\n          \"type\": \"char\"\n        }\n      ],\n      \"argsoriginal\": \"(char c)\",\n      \"call_args\": \"(c)\",\n      \"cimguiname\": \"igImCharIsXdigitA\",\n      \"defaults\": {},\n      \"funcname\": \"ImCharIsXdigitA\",\n      \"location\": \"imgui_internal:383\",\n      \"ov_cimguiname\": \"igImCharIsXdigitA\",\n      \"ret\": \"bool\",\n      \"signature\": \"(char)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igImClamp\": [\n    {\n      \"args\": \"(ImVec2 *pOut,const ImVec2 v,const ImVec2 mn,const ImVec2 mx)\",\n      \"argsT\": [\n        {\n          \"name\": \"pOut\",\n          \"type\": \"ImVec2*\"\n        },\n        {\n          \"name\": \"v\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"mn\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"mx\",\n          \"type\": \"const ImVec2\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImVec2& v,const ImVec2&mn,const ImVec2&mx)\",\n      \"call_args\": \"(v,mn,mx)\",\n      \"cimguiname\": \"igImClamp\",\n      \"defaults\": {},\n      \"funcname\": \"ImClamp\",\n      \"location\": \"imgui_internal:472\",\n      \"nonUDT\": 1,\n      \"ov_cimguiname\": \"igImClamp\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImVec2,const ImVec2,const ImVec2)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igImDot\": [\n    {\n      \"args\": \"(const ImVec2 a,const ImVec2 b)\",\n      \"argsT\": [\n        {\n          \"name\": \"a\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"b\",\n          \"type\": \"const ImVec2\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImVec2& a,const ImVec2& b)\",\n      \"call_args\": \"(a,b)\",\n      \"cimguiname\": \"igImDot\",\n      \"defaults\": {},\n      \"funcname\": \"ImDot\",\n      \"location\": \"imgui_internal:485\",\n      \"ov_cimguiname\": \"igImDot\",\n      \"ret\": \"float\",\n      \"signature\": \"(const ImVec2,const ImVec2)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igImExponentialMovingAverage\": [\n    {\n      \"args\": \"(float avg,float sample,int n)\",\n      \"argsT\": [\n        {\n          \"name\": \"avg\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"sample\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"n\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(float avg,float sample,int n)\",\n      \"call_args\": \"(avg,sample,n)\",\n      \"cimguiname\": \"igImExponentialMovingAverage\",\n      \"defaults\": {},\n      \"funcname\": \"ImExponentialMovingAverage\",\n      \"location\": \"imgui_internal:491\",\n      \"ov_cimguiname\": \"igImExponentialMovingAverage\",\n      \"ret\": \"float\",\n      \"signature\": \"(float,float,int)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igImFileClose\": [\n    {\n      \"args\": \"(ImFileHandle file)\",\n      \"argsT\": [\n        {\n          \"name\": \"file\",\n          \"type\": \"ImFileHandle\"\n        }\n      ],\n      \"argsoriginal\": \"(ImFileHandle file)\",\n      \"call_args\": \"(file)\",\n      \"cimguiname\": \"igImFileClose\",\n      \"defaults\": {},\n      \"funcname\": \"ImFileClose\",\n      \"location\": \"imgui_internal:422\",\n      \"ov_cimguiname\": \"igImFileClose\",\n      \"ret\": \"bool\",\n      \"signature\": \"(ImFileHandle)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igImFileGetSize\": [\n    {\n      \"args\": \"(ImFileHandle file)\",\n      \"argsT\": [\n        {\n          \"name\": \"file\",\n          \"type\": \"ImFileHandle\"\n        }\n      ],\n      \"argsoriginal\": \"(ImFileHandle file)\",\n      \"call_args\": \"(file)\",\n      \"cimguiname\": \"igImFileGetSize\",\n      \"defaults\": {},\n      \"funcname\": \"ImFileGetSize\",\n      \"location\": \"imgui_internal:423\",\n      \"ov_cimguiname\": \"igImFileGetSize\",\n      \"ret\": \"ImU64\",\n      \"signature\": \"(ImFileHandle)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igImFileLoadToMemory\": [\n    {\n      \"args\": \"(const char* filename,const char* mode,size_t* out_file_size,int padding_bytes)\",\n      \"argsT\": [\n        {\n          \"name\": \"filename\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"mode\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"out_file_size\",\n          \"type\": \"size_t*\"\n        },\n        {\n          \"name\": \"padding_bytes\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* filename,const char* mode,size_t* out_file_size=((void*)0),int padding_bytes=0)\",\n      \"call_args\": \"(filename,mode,out_file_size,padding_bytes)\",\n      \"cimguiname\": \"igImFileLoadToMemory\",\n      \"defaults\": {\n        \"out_file_size\": \"NULL\",\n        \"padding_bytes\": \"0\"\n      },\n      \"funcname\": \"ImFileLoadToMemory\",\n      \"location\": \"imgui_internal:429\",\n      \"ov_cimguiname\": \"igImFileLoadToMemory\",\n      \"ret\": \"void*\",\n      \"signature\": \"(const char*,const char*,size_t*,int)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igImFileOpen\": [\n    {\n      \"args\": \"(const char* filename,const char* mode)\",\n      \"argsT\": [\n        {\n          \"name\": \"filename\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"mode\",\n          \"type\": \"const char*\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* filename,const char* mode)\",\n      \"call_args\": \"(filename,mode)\",\n      \"cimguiname\": \"igImFileOpen\",\n      \"defaults\": {},\n      \"funcname\": \"ImFileOpen\",\n      \"location\": \"imgui_internal:421\",\n      \"ov_cimguiname\": \"igImFileOpen\",\n      \"ret\": \"ImFileHandle\",\n      \"signature\": \"(const char*,const char*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igImFileRead\": [\n    {\n      \"args\": \"(void* data,ImU64 size,ImU64 count,ImFileHandle file)\",\n      \"argsT\": [\n        {\n          \"name\": \"data\",\n          \"type\": \"void*\"\n        },\n        {\n          \"name\": \"size\",\n          \"type\": \"ImU64\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"ImU64\"\n        },\n        {\n          \"name\": \"file\",\n          \"type\": \"ImFileHandle\"\n        }\n      ],\n      \"argsoriginal\": \"(void* data,ImU64 size,ImU64 count,ImFileHandle file)\",\n      \"call_args\": \"(data,size,count,file)\",\n      \"cimguiname\": \"igImFileRead\",\n      \"defaults\": {},\n      \"funcname\": \"ImFileRead\",\n      \"location\": \"imgui_internal:424\",\n      \"ov_cimguiname\": \"igImFileRead\",\n      \"ret\": \"ImU64\",\n      \"signature\": \"(void*,ImU64,ImU64,ImFileHandle)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igImFileWrite\": [\n    {\n      \"args\": \"(const void* data,ImU64 size,ImU64 count,ImFileHandle file)\",\n      \"argsT\": [\n        {\n          \"name\": \"data\",\n          \"type\": \"const void*\"\n        },\n        {\n          \"name\": \"size\",\n          \"type\": \"ImU64\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"ImU64\"\n        },\n        {\n          \"name\": \"file\",\n          \"type\": \"ImFileHandle\"\n        }\n      ],\n      \"argsoriginal\": \"(const void* data,ImU64 size,ImU64 count,ImFileHandle file)\",\n      \"call_args\": \"(data,size,count,file)\",\n      \"cimguiname\": \"igImFileWrite\",\n      \"defaults\": {},\n      \"funcname\": \"ImFileWrite\",\n      \"location\": \"imgui_internal:425\",\n      \"ov_cimguiname\": \"igImFileWrite\",\n      \"ret\": \"ImU64\",\n      \"signature\": \"(const void*,ImU64,ImU64,ImFileHandle)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igImFloor\": [\n    {\n      \"args\": \"(float f)\",\n      \"argsT\": [\n        {\n          \"name\": \"f\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(float f)\",\n      \"call_args\": \"(f)\",\n      \"cimguiname\": \"igImFloor\",\n      \"defaults\": {},\n      \"funcname\": \"ImFloor\",\n      \"location\": \"imgui_internal:482\",\n      \"ov_cimguiname\": \"igImFloor_Float\",\n      \"ret\": \"float\",\n      \"signature\": \"(float)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(ImVec2 *pOut,const ImVec2 v)\",\n      \"argsT\": [\n        {\n          \"name\": \"pOut\",\n          \"type\": \"ImVec2*\"\n        },\n        {\n          \"name\": \"v\",\n          \"type\": \"const ImVec2\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImVec2& v)\",\n      \"call_args\": \"(v)\",\n      \"cimguiname\": \"igImFloor\",\n      \"defaults\": {},\n      \"funcname\": \"ImFloor\",\n      \"location\": \"imgui_internal:483\",\n      \"nonUDT\": 1,\n      \"ov_cimguiname\": \"igImFloor_Vec2\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImVec2)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igImFontAtlasBuildFinish\": [\n    {\n      \"args\": \"(ImFontAtlas* atlas)\",\n      \"argsT\": [\n        {\n          \"name\": \"atlas\",\n          \"type\": \"ImFontAtlas*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImFontAtlas* atlas)\",\n      \"call_args\": \"(atlas)\",\n      \"cimguiname\": \"igImFontAtlasBuildFinish\",\n      \"defaults\": {},\n      \"funcname\": \"ImFontAtlasBuildFinish\",\n      \"location\": \"imgui_internal:3559\",\n      \"ov_cimguiname\": \"igImFontAtlasBuildFinish\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImFontAtlas*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igImFontAtlasBuildInit\": [\n    {\n      \"args\": \"(ImFontAtlas* atlas)\",\n      \"argsT\": [\n        {\n          \"name\": \"atlas\",\n          \"type\": \"ImFontAtlas*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImFontAtlas* atlas)\",\n      \"call_args\": \"(atlas)\",\n      \"cimguiname\": \"igImFontAtlasBuildInit\",\n      \"defaults\": {},\n      \"funcname\": \"ImFontAtlasBuildInit\",\n      \"location\": \"imgui_internal:3556\",\n      \"ov_cimguiname\": \"igImFontAtlasBuildInit\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImFontAtlas*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igImFontAtlasBuildMultiplyCalcLookupTable\": [\n    {\n      \"args\": \"(unsigned char out_table[256],float in_multiply_factor)\",\n      \"argsT\": [\n        {\n          \"name\": \"out_table\",\n          \"type\": \"unsigned char[256]\"\n        },\n        {\n          \"name\": \"in_multiply_factor\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(unsigned char out_table[256],float in_multiply_factor)\",\n      \"call_args\": \"(out_table,in_multiply_factor)\",\n      \"cimguiname\": \"igImFontAtlasBuildMultiplyCalcLookupTable\",\n      \"defaults\": {},\n      \"funcname\": \"ImFontAtlasBuildMultiplyCalcLookupTable\",\n      \"location\": \"imgui_internal:3562\",\n      \"ov_cimguiname\": \"igImFontAtlasBuildMultiplyCalcLookupTable\",\n      \"ret\": \"void\",\n      \"signature\": \"(unsigned char[256],float)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igImFontAtlasBuildMultiplyRectAlpha8\": [\n    {\n      \"args\": \"(const unsigned char table[256],unsigned char* pixels,int x,int y,int w,int h,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"table\",\n          \"type\": \"const unsigned char[256]\"\n        },\n        {\n          \"name\": \"pixels\",\n          \"type\": \"unsigned char*\"\n        },\n        {\n          \"name\": \"x\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"y\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"w\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"h\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const unsigned char table[256],unsigned char* pixels,int x,int y,int w,int h,int stride)\",\n      \"call_args\": \"(table,pixels,x,y,w,h,stride)\",\n      \"cimguiname\": \"igImFontAtlasBuildMultiplyRectAlpha8\",\n      \"defaults\": {},\n      \"funcname\": \"ImFontAtlasBuildMultiplyRectAlpha8\",\n      \"location\": \"imgui_internal:3563\",\n      \"ov_cimguiname\": \"igImFontAtlasBuildMultiplyRectAlpha8\",\n      \"ret\": \"void\",\n      \"signature\": \"(const unsigned char[256],unsigned char*,int,int,int,int,int)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igImFontAtlasBuildPackCustomRects\": [\n    {\n      \"args\": \"(ImFontAtlas* atlas,void* stbrp_context_opaque)\",\n      \"argsT\": [\n        {\n          \"name\": \"atlas\",\n          \"type\": \"ImFontAtlas*\"\n        },\n        {\n          \"name\": \"stbrp_context_opaque\",\n          \"type\": \"void*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImFontAtlas* atlas,void* stbrp_context_opaque)\",\n      \"call_args\": \"(atlas,stbrp_context_opaque)\",\n      \"cimguiname\": \"igImFontAtlasBuildPackCustomRects\",\n      \"defaults\": {},\n      \"funcname\": \"ImFontAtlasBuildPackCustomRects\",\n      \"location\": \"imgui_internal:3558\",\n      \"ov_cimguiname\": \"igImFontAtlasBuildPackCustomRects\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImFontAtlas*,void*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igImFontAtlasBuildRender32bppRectFromString\": [\n    {\n      \"args\": \"(ImFontAtlas* atlas,int x,int y,int w,int h,const char* in_str,char in_marker_char,unsigned int in_marker_pixel_value)\",\n      \"argsT\": [\n        {\n          \"name\": \"atlas\",\n          \"type\": \"ImFontAtlas*\"\n        },\n        {\n          \"name\": \"x\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"y\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"w\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"h\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"in_str\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"in_marker_char\",\n          \"type\": \"char\"\n        },\n        {\n          \"name\": \"in_marker_pixel_value\",\n          \"type\": \"unsigned int\"\n        }\n      ],\n      \"argsoriginal\": \"(ImFontAtlas* atlas,int x,int y,int w,int h,const char* in_str,char in_marker_char,unsigned int in_marker_pixel_value)\",\n      \"call_args\": \"(atlas,x,y,w,h,in_str,in_marker_char,in_marker_pixel_value)\",\n      \"cimguiname\": \"igImFontAtlasBuildRender32bppRectFromString\",\n      \"defaults\": {},\n      \"funcname\": \"ImFontAtlasBuildRender32bppRectFromString\",\n      \"location\": \"imgui_internal:3561\",\n      \"ov_cimguiname\": \"igImFontAtlasBuildRender32bppRectFromString\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImFontAtlas*,int,int,int,int,const char*,char,unsigned int)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igImFontAtlasBuildRender8bppRectFromString\": [\n    {\n      \"args\": \"(ImFontAtlas* atlas,int x,int y,int w,int h,const char* in_str,char in_marker_char,unsigned char in_marker_pixel_value)\",\n      \"argsT\": [\n        {\n          \"name\": \"atlas\",\n          \"type\": \"ImFontAtlas*\"\n        },\n        {\n          \"name\": \"x\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"y\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"w\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"h\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"in_str\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"in_marker_char\",\n          \"type\": \"char\"\n        },\n        {\n          \"name\": \"in_marker_pixel_value\",\n          \"type\": \"unsigned char\"\n        }\n      ],\n      \"argsoriginal\": \"(ImFontAtlas* atlas,int x,int y,int w,int h,const char* in_str,char in_marker_char,unsigned char in_marker_pixel_value)\",\n      \"call_args\": \"(atlas,x,y,w,h,in_str,in_marker_char,in_marker_pixel_value)\",\n      \"cimguiname\": \"igImFontAtlasBuildRender8bppRectFromString\",\n      \"defaults\": {},\n      \"funcname\": \"ImFontAtlasBuildRender8bppRectFromString\",\n      \"location\": \"imgui_internal:3560\",\n      \"ov_cimguiname\": \"igImFontAtlasBuildRender8bppRectFromString\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImFontAtlas*,int,int,int,int,const char*,char,unsigned char)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igImFontAtlasBuildSetupFont\": [\n    {\n      \"args\": \"(ImFontAtlas* atlas,ImFont* font,ImFontConfig* font_config,float ascent,float descent)\",\n      \"argsT\": [\n        {\n          \"name\": \"atlas\",\n          \"type\": \"ImFontAtlas*\"\n        },\n        {\n          \"name\": \"font\",\n          \"type\": \"ImFont*\"\n        },\n        {\n          \"name\": \"font_config\",\n          \"type\": \"ImFontConfig*\"\n        },\n        {\n          \"name\": \"ascent\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"descent\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(ImFontAtlas* atlas,ImFont* font,ImFontConfig* font_config,float ascent,float descent)\",\n      \"call_args\": \"(atlas,font,font_config,ascent,descent)\",\n      \"cimguiname\": \"igImFontAtlasBuildSetupFont\",\n      \"defaults\": {},\n      \"funcname\": \"ImFontAtlasBuildSetupFont\",\n      \"location\": \"imgui_internal:3557\",\n      \"ov_cimguiname\": \"igImFontAtlasBuildSetupFont\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImFontAtlas*,ImFont*,ImFontConfig*,float,float)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igImFontAtlasGetBuilderForStbTruetype\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igImFontAtlasGetBuilderForStbTruetype\",\n      \"defaults\": {},\n      \"funcname\": \"ImFontAtlasGetBuilderForStbTruetype\",\n      \"location\": \"imgui_internal:3553\",\n      \"ov_cimguiname\": \"igImFontAtlasGetBuilderForStbTruetype\",\n      \"ret\": \"const ImFontBuilderIO*\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igImFontAtlasUpdateConfigDataPointers\": [\n    {\n      \"args\": \"(ImFontAtlas* atlas)\",\n      \"argsT\": [\n        {\n          \"name\": \"atlas\",\n          \"type\": \"ImFontAtlas*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImFontAtlas* atlas)\",\n      \"call_args\": \"(atlas)\",\n      \"cimguiname\": \"igImFontAtlasUpdateConfigDataPointers\",\n      \"defaults\": {},\n      \"funcname\": \"ImFontAtlasUpdateConfigDataPointers\",\n      \"location\": \"imgui_internal:3555\",\n      \"ov_cimguiname\": \"igImFontAtlasUpdateConfigDataPointers\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImFontAtlas*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igImFormatString\": [\n    {\n      \"args\": \"(char* buf,size_t buf_size,const char* fmt,...)\",\n      \"argsT\": [\n        {\n          \"name\": \"buf\",\n          \"type\": \"char*\"\n        },\n        {\n          \"name\": \"buf_size\",\n          \"type\": \"size_t\"\n        },\n        {\n          \"name\": \"fmt\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"...\",\n          \"type\": \"...\"\n        }\n      ],\n      \"argsoriginal\": \"(char* buf,size_t buf_size,const char* fmt,...)\",\n      \"call_args\": \"(buf,buf_size,fmt,...)\",\n      \"cimguiname\": \"igImFormatString\",\n      \"defaults\": {},\n      \"funcname\": \"ImFormatString\",\n      \"isvararg\": \"...)\",\n      \"location\": \"imgui_internal:387\",\n      \"ov_cimguiname\": \"igImFormatString\",\n      \"ret\": \"int\",\n      \"signature\": \"(char*,size_t,const char*,...)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igImFormatStringToTempBuffer\": [\n    {\n      \"args\": \"(const char** out_buf,const char** out_buf_end,const char* fmt,...)\",\n      \"argsT\": [\n        {\n          \"name\": \"out_buf\",\n          \"type\": \"const char**\"\n        },\n        {\n          \"name\": \"out_buf_end\",\n          \"type\": \"const char**\"\n        },\n        {\n          \"name\": \"fmt\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"...\",\n          \"type\": \"...\"\n        }\n      ],\n      \"argsoriginal\": \"(const char** out_buf,const char** out_buf_end,const char* fmt,...)\",\n      \"call_args\": \"(out_buf,out_buf_end,fmt,...)\",\n      \"cimguiname\": \"igImFormatStringToTempBuffer\",\n      \"defaults\": {},\n      \"funcname\": \"ImFormatStringToTempBuffer\",\n      \"isvararg\": \"...)\",\n      \"location\": \"imgui_internal:389\",\n      \"ov_cimguiname\": \"igImFormatStringToTempBuffer\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char**,const char**,const char*,...)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igImFormatStringToTempBufferV\": [\n    {\n      \"args\": \"(const char** out_buf,const char** out_buf_end,const char* fmt,va_list args)\",\n      \"argsT\": [\n        {\n          \"name\": \"out_buf\",\n          \"type\": \"const char**\"\n        },\n        {\n          \"name\": \"out_buf_end\",\n          \"type\": \"const char**\"\n        },\n        {\n          \"name\": \"fmt\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"args\",\n          \"type\": \"va_list\"\n        }\n      ],\n      \"argsoriginal\": \"(const char** out_buf,const char** out_buf_end,const char* fmt,va_list args)\",\n      \"call_args\": \"(out_buf,out_buf_end,fmt,args)\",\n      \"cimguiname\": \"igImFormatStringToTempBufferV\",\n      \"defaults\": {},\n      \"funcname\": \"ImFormatStringToTempBufferV\",\n      \"location\": \"imgui_internal:390\",\n      \"ov_cimguiname\": \"igImFormatStringToTempBufferV\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char**,const char**,const char*,va_list)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igImFormatStringV\": [\n    {\n      \"args\": \"(char* buf,size_t buf_size,const char* fmt,va_list args)\",\n      \"argsT\": [\n        {\n          \"name\": \"buf\",\n          \"type\": \"char*\"\n        },\n        {\n          \"name\": \"buf_size\",\n          \"type\": \"size_t\"\n        },\n        {\n          \"name\": \"fmt\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"args\",\n          \"type\": \"va_list\"\n        }\n      ],\n      \"argsoriginal\": \"(char* buf,size_t buf_size,const char* fmt,va_list args)\",\n      \"call_args\": \"(buf,buf_size,fmt,args)\",\n      \"cimguiname\": \"igImFormatStringV\",\n      \"defaults\": {},\n      \"funcname\": \"ImFormatStringV\",\n      \"location\": \"imgui_internal:388\",\n      \"ov_cimguiname\": \"igImFormatStringV\",\n      \"ret\": \"int\",\n      \"signature\": \"(char*,size_t,const char*,va_list)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igImHashData\": [\n    {\n      \"args\": \"(const void* data,size_t data_size,ImGuiID seed)\",\n      \"argsT\": [\n        {\n          \"name\": \"data\",\n          \"type\": \"const void*\"\n        },\n        {\n          \"name\": \"data_size\",\n          \"type\": \"size_t\"\n        },\n        {\n          \"name\": \"seed\",\n          \"type\": \"ImGuiID\"\n        }\n      ],\n      \"argsoriginal\": \"(const void* data,size_t data_size,ImGuiID seed=0)\",\n      \"call_args\": \"(data,data_size,seed)\",\n      \"cimguiname\": \"igImHashData\",\n      \"defaults\": {\n        \"seed\": \"0\"\n      },\n      \"funcname\": \"ImHashData\",\n      \"location\": \"imgui_internal:350\",\n      \"ov_cimguiname\": \"igImHashData\",\n      \"ret\": \"ImGuiID\",\n      \"signature\": \"(const void*,size_t,ImGuiID)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igImHashStr\": [\n    {\n      \"args\": \"(const char* data,size_t data_size,ImGuiID seed)\",\n      \"argsT\": [\n        {\n          \"name\": \"data\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"data_size\",\n          \"type\": \"size_t\"\n        },\n        {\n          \"name\": \"seed\",\n          \"type\": \"ImGuiID\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* data,size_t data_size=0,ImGuiID seed=0)\",\n      \"call_args\": \"(data,data_size,seed)\",\n      \"cimguiname\": \"igImHashStr\",\n      \"defaults\": {\n        \"data_size\": \"0\",\n        \"seed\": \"0\"\n      },\n      \"funcname\": \"ImHashStr\",\n      \"location\": \"imgui_internal:351\",\n      \"ov_cimguiname\": \"igImHashStr\",\n      \"ret\": \"ImGuiID\",\n      \"signature\": \"(const char*,size_t,ImGuiID)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igImInvLength\": [\n    {\n      \"args\": \"(const ImVec2 lhs,float fail_value)\",\n      \"argsT\": [\n        {\n          \"name\": \"lhs\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"fail_value\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImVec2& lhs,float fail_value)\",\n      \"call_args\": \"(lhs,fail_value)\",\n      \"cimguiname\": \"igImInvLength\",\n      \"defaults\": {},\n      \"funcname\": \"ImInvLength\",\n      \"location\": \"imgui_internal:479\",\n      \"ov_cimguiname\": \"igImInvLength\",\n      \"ret\": \"float\",\n      \"signature\": \"(const ImVec2,float)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igImIsFloatAboveGuaranteedIntegerPrecision\": [\n    {\n      \"args\": \"(float f)\",\n      \"argsT\": [\n        {\n          \"name\": \"f\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(float f)\",\n      \"call_args\": \"(f)\",\n      \"cimguiname\": \"igImIsFloatAboveGuaranteedIntegerPrecision\",\n      \"defaults\": {},\n      \"funcname\": \"ImIsFloatAboveGuaranteedIntegerPrecision\",\n      \"location\": \"imgui_internal:490\",\n      \"ov_cimguiname\": \"igImIsFloatAboveGuaranteedIntegerPrecision\",\n      \"ret\": \"bool\",\n      \"signature\": \"(float)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igImIsPowerOfTwo\": [\n    {\n      \"args\": \"(int v)\",\n      \"argsT\": [\n        {\n          \"name\": \"v\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(int v)\",\n      \"call_args\": \"(v)\",\n      \"cimguiname\": \"igImIsPowerOfTwo\",\n      \"defaults\": {},\n      \"funcname\": \"ImIsPowerOfTwo\",\n      \"location\": \"imgui_internal:362\",\n      \"ov_cimguiname\": \"igImIsPowerOfTwo_Int\",\n      \"ret\": \"bool\",\n      \"signature\": \"(int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(ImU64 v)\",\n      \"argsT\": [\n        {\n          \"name\": \"v\",\n          \"type\": \"ImU64\"\n        }\n      ],\n      \"argsoriginal\": \"(ImU64 v)\",\n      \"call_args\": \"(v)\",\n      \"cimguiname\": \"igImIsPowerOfTwo\",\n      \"defaults\": {},\n      \"funcname\": \"ImIsPowerOfTwo\",\n      \"location\": \"imgui_internal:363\",\n      \"ov_cimguiname\": \"igImIsPowerOfTwo_U64\",\n      \"ret\": \"bool\",\n      \"signature\": \"(ImU64)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igImLengthSqr\": [\n    {\n      \"args\": \"(const ImVec2 lhs)\",\n      \"argsT\": [\n        {\n          \"name\": \"lhs\",\n          \"type\": \"const ImVec2\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImVec2& lhs)\",\n      \"call_args\": \"(lhs)\",\n      \"cimguiname\": \"igImLengthSqr\",\n      \"defaults\": {},\n      \"funcname\": \"ImLengthSqr\",\n      \"location\": \"imgui_internal:477\",\n      \"ov_cimguiname\": \"igImLengthSqr_Vec2\",\n      \"ret\": \"float\",\n      \"signature\": \"(const ImVec2)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const ImVec4 lhs)\",\n      \"argsT\": [\n        {\n          \"name\": \"lhs\",\n          \"type\": \"const ImVec4\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImVec4& lhs)\",\n      \"call_args\": \"(lhs)\",\n      \"cimguiname\": \"igImLengthSqr\",\n      \"defaults\": {},\n      \"funcname\": \"ImLengthSqr\",\n      \"location\": \"imgui_internal:478\",\n      \"ov_cimguiname\": \"igImLengthSqr_Vec4\",\n      \"ret\": \"float\",\n      \"signature\": \"(const ImVec4)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igImLerp\": [\n    {\n      \"args\": \"(ImVec2 *pOut,const ImVec2 a,const ImVec2 b,float t)\",\n      \"argsT\": [\n        {\n          \"name\": \"pOut\",\n          \"type\": \"ImVec2*\"\n        },\n        {\n          \"name\": \"a\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"b\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"t\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImVec2& a,const ImVec2& b,float t)\",\n      \"call_args\": \"(a,b,t)\",\n      \"cimguiname\": \"igImLerp\",\n      \"defaults\": {},\n      \"funcname\": \"ImLerp\",\n      \"location\": \"imgui_internal:473\",\n      \"nonUDT\": 1,\n      \"ov_cimguiname\": \"igImLerp_Vec2Float\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImVec2,const ImVec2,float)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(ImVec2 *pOut,const ImVec2 a,const ImVec2 b,const ImVec2 t)\",\n      \"argsT\": [\n        {\n          \"name\": \"pOut\",\n          \"type\": \"ImVec2*\"\n        },\n        {\n          \"name\": \"a\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"b\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"t\",\n          \"type\": \"const ImVec2\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImVec2& a,const ImVec2& b,const ImVec2& t)\",\n      \"call_args\": \"(a,b,t)\",\n      \"cimguiname\": \"igImLerp\",\n      \"defaults\": {},\n      \"funcname\": \"ImLerp\",\n      \"location\": \"imgui_internal:474\",\n      \"nonUDT\": 1,\n      \"ov_cimguiname\": \"igImLerp_Vec2Vec2\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImVec2,const ImVec2,const ImVec2)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(ImVec4 *pOut,const ImVec4 a,const ImVec4 b,float t)\",\n      \"argsT\": [\n        {\n          \"name\": \"pOut\",\n          \"type\": \"ImVec4*\"\n        },\n        {\n          \"name\": \"a\",\n          \"type\": \"const ImVec4\"\n        },\n        {\n          \"name\": \"b\",\n          \"type\": \"const ImVec4\"\n        },\n        {\n          \"name\": \"t\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImVec4& a,const ImVec4& b,float t)\",\n      \"call_args\": \"(a,b,t)\",\n      \"cimguiname\": \"igImLerp\",\n      \"defaults\": {},\n      \"funcname\": \"ImLerp\",\n      \"location\": \"imgui_internal:475\",\n      \"nonUDT\": 1,\n      \"ov_cimguiname\": \"igImLerp_Vec4\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImVec4,const ImVec4,float)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igImLineClosestPoint\": [\n    {\n      \"args\": \"(ImVec2 *pOut,const ImVec2 a,const ImVec2 b,const ImVec2 p)\",\n      \"argsT\": [\n        {\n          \"name\": \"pOut\",\n          \"type\": \"ImVec2*\"\n        },\n        {\n          \"name\": \"a\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"b\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"p\",\n          \"type\": \"const ImVec2\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImVec2& a,const ImVec2& b,const ImVec2& p)\",\n      \"call_args\": \"(a,b,p)\",\n      \"cimguiname\": \"igImLineClosestPoint\",\n      \"defaults\": {},\n      \"funcname\": \"ImLineClosestPoint\",\n      \"location\": \"imgui_internal:499\",\n      \"nonUDT\": 1,\n      \"ov_cimguiname\": \"igImLineClosestPoint\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImVec2,const ImVec2,const ImVec2)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igImLinearRemapClamp\": [\n    {\n      \"args\": \"(float s0,float s1,float d0,float d1,float x)\",\n      \"argsT\": [\n        {\n          \"name\": \"s0\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"s1\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"d0\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"d1\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"x\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(float s0,float s1,float d0,float d1,float x)\",\n      \"call_args\": \"(s0,s1,d0,d1,x)\",\n      \"cimguiname\": \"igImLinearRemapClamp\",\n      \"defaults\": {},\n      \"funcname\": \"ImLinearRemapClamp\",\n      \"location\": \"imgui_internal:488\",\n      \"ov_cimguiname\": \"igImLinearRemapClamp\",\n      \"ret\": \"float\",\n      \"signature\": \"(float,float,float,float,float)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igImLinearSweep\": [\n    {\n      \"args\": \"(float current,float target,float speed)\",\n      \"argsT\": [\n        {\n          \"name\": \"current\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"target\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"speed\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(float current,float target,float speed)\",\n      \"call_args\": \"(current,target,speed)\",\n      \"cimguiname\": \"igImLinearSweep\",\n      \"defaults\": {},\n      \"funcname\": \"ImLinearSweep\",\n      \"location\": \"imgui_internal:487\",\n      \"ov_cimguiname\": \"igImLinearSweep\",\n      \"ret\": \"float\",\n      \"signature\": \"(float,float,float)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igImLog\": [\n    {\n      \"args\": \"(float x)\",\n      \"argsT\": [\n        {\n          \"name\": \"x\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(float x)\",\n      \"call_args\": \"(x)\",\n      \"cimguiname\": \"igImLog\",\n      \"defaults\": {},\n      \"funcname\": \"ImLog\",\n      \"location\": \"imgui_internal:446\",\n      \"ov_cimguiname\": \"igImLog_Float\",\n      \"ret\": \"float\",\n      \"signature\": \"(float)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(double x)\",\n      \"argsT\": [\n        {\n          \"name\": \"x\",\n          \"type\": \"double\"\n        }\n      ],\n      \"argsoriginal\": \"(double x)\",\n      \"call_args\": \"(x)\",\n      \"cimguiname\": \"igImLog\",\n      \"defaults\": {},\n      \"funcname\": \"ImLog\",\n      \"location\": \"imgui_internal:447\",\n      \"ov_cimguiname\": \"igImLog_double\",\n      \"ret\": \"double\",\n      \"signature\": \"(double)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igImLowerBound\": [\n    {\n      \"args\": \"(ImGuiStoragePair* in_begin,ImGuiStoragePair* in_end,ImGuiID key)\",\n      \"argsT\": [\n        {\n          \"name\": \"in_begin\",\n          \"type\": \"ImGuiStoragePair*\"\n        },\n        {\n          \"name\": \"in_end\",\n          \"type\": \"ImGuiStoragePair*\"\n        },\n        {\n          \"name\": \"key\",\n          \"type\": \"ImGuiID\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiStoragePair* in_begin,ImGuiStoragePair* in_end,ImGuiID key)\",\n      \"call_args\": \"(in_begin,in_end,key)\",\n      \"cimguiname\": \"igImLowerBound\",\n      \"defaults\": {},\n      \"funcname\": \"ImLowerBound\",\n      \"location\": \"imgui_internal:738\",\n      \"ov_cimguiname\": \"igImLowerBound\",\n      \"ret\": \"ImGuiStoragePair*\",\n      \"signature\": \"(ImGuiStoragePair*,ImGuiStoragePair*,ImGuiID)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igImMax\": [\n    {\n      \"args\": \"(ImVec2 *pOut,const ImVec2 lhs,const ImVec2 rhs)\",\n      \"argsT\": [\n        {\n          \"name\": \"pOut\",\n          \"type\": \"ImVec2*\"\n        },\n        {\n          \"name\": \"lhs\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"rhs\",\n          \"type\": \"const ImVec2\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImVec2& lhs,const ImVec2& rhs)\",\n      \"call_args\": \"(lhs,rhs)\",\n      \"cimguiname\": \"igImMax\",\n      \"defaults\": {},\n      \"funcname\": \"ImMax\",\n      \"location\": \"imgui_internal:471\",\n      \"nonUDT\": 1,\n      \"ov_cimguiname\": \"igImMax\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImVec2,const ImVec2)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igImMin\": [\n    {\n      \"args\": \"(ImVec2 *pOut,const ImVec2 lhs,const ImVec2 rhs)\",\n      \"argsT\": [\n        {\n          \"name\": \"pOut\",\n          \"type\": \"ImVec2*\"\n        },\n        {\n          \"name\": \"lhs\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"rhs\",\n          \"type\": \"const ImVec2\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImVec2& lhs,const ImVec2& rhs)\",\n      \"call_args\": \"(lhs,rhs)\",\n      \"cimguiname\": \"igImMin\",\n      \"defaults\": {},\n      \"funcname\": \"ImMin\",\n      \"location\": \"imgui_internal:470\",\n      \"nonUDT\": 1,\n      \"ov_cimguiname\": \"igImMin\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImVec2,const ImVec2)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igImModPositive\": [\n    {\n      \"args\": \"(int a,int b)\",\n      \"argsT\": [\n        {\n          \"name\": \"a\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"b\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(int a,int b)\",\n      \"call_args\": \"(a,b)\",\n      \"cimguiname\": \"igImModPositive\",\n      \"defaults\": {},\n      \"funcname\": \"ImModPositive\",\n      \"location\": \"imgui_internal:484\",\n      \"ov_cimguiname\": \"igImModPositive\",\n      \"ret\": \"int\",\n      \"signature\": \"(int,int)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igImMul\": [\n    {\n      \"args\": \"(ImVec2 *pOut,const ImVec2 lhs,const ImVec2 rhs)\",\n      \"argsT\": [\n        {\n          \"name\": \"pOut\",\n          \"type\": \"ImVec2*\"\n        },\n        {\n          \"name\": \"lhs\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"rhs\",\n          \"type\": \"const ImVec2\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImVec2& lhs,const ImVec2& rhs)\",\n      \"call_args\": \"(lhs,rhs)\",\n      \"cimguiname\": \"igImMul\",\n      \"defaults\": {},\n      \"funcname\": \"ImMul\",\n      \"location\": \"imgui_internal:489\",\n      \"nonUDT\": 1,\n      \"ov_cimguiname\": \"igImMul\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImVec2,const ImVec2)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igImParseFormatFindEnd\": [\n    {\n      \"args\": \"(const char* format)\",\n      \"argsT\": [\n        {\n          \"name\": \"format\",\n          \"type\": \"const char*\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* format)\",\n      \"call_args\": \"(format)\",\n      \"cimguiname\": \"igImParseFormatFindEnd\",\n      \"defaults\": {},\n      \"funcname\": \"ImParseFormatFindEnd\",\n      \"location\": \"imgui_internal:392\",\n      \"ov_cimguiname\": \"igImParseFormatFindEnd\",\n      \"ret\": \"const char*\",\n      \"signature\": \"(const char*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igImParseFormatFindStart\": [\n    {\n      \"args\": \"(const char* format)\",\n      \"argsT\": [\n        {\n          \"name\": \"format\",\n          \"type\": \"const char*\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* format)\",\n      \"call_args\": \"(format)\",\n      \"cimguiname\": \"igImParseFormatFindStart\",\n      \"defaults\": {},\n      \"funcname\": \"ImParseFormatFindStart\",\n      \"location\": \"imgui_internal:391\",\n      \"ov_cimguiname\": \"igImParseFormatFindStart\",\n      \"ret\": \"const char*\",\n      \"signature\": \"(const char*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igImParseFormatPrecision\": [\n    {\n      \"args\": \"(const char* format,int default_value)\",\n      \"argsT\": [\n        {\n          \"name\": \"format\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"default_value\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* format,int default_value)\",\n      \"call_args\": \"(format,default_value)\",\n      \"cimguiname\": \"igImParseFormatPrecision\",\n      \"defaults\": {},\n      \"funcname\": \"ImParseFormatPrecision\",\n      \"location\": \"imgui_internal:396\",\n      \"ov_cimguiname\": \"igImParseFormatPrecision\",\n      \"ret\": \"int\",\n      \"signature\": \"(const char*,int)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igImParseFormatSanitizeForPrinting\": [\n    {\n      \"args\": \"(const char* fmt_in,char* fmt_out,size_t fmt_out_size)\",\n      \"argsT\": [\n        {\n          \"name\": \"fmt_in\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"fmt_out\",\n          \"type\": \"char*\"\n        },\n        {\n          \"name\": \"fmt_out_size\",\n          \"type\": \"size_t\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* fmt_in,char* fmt_out,size_t fmt_out_size)\",\n      \"call_args\": \"(fmt_in,fmt_out,fmt_out_size)\",\n      \"cimguiname\": \"igImParseFormatSanitizeForPrinting\",\n      \"defaults\": {},\n      \"funcname\": \"ImParseFormatSanitizeForPrinting\",\n      \"location\": \"imgui_internal:394\",\n      \"ov_cimguiname\": \"igImParseFormatSanitizeForPrinting\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,char*,size_t)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igImParseFormatSanitizeForScanning\": [\n    {\n      \"args\": \"(const char* fmt_in,char* fmt_out,size_t fmt_out_size)\",\n      \"argsT\": [\n        {\n          \"name\": \"fmt_in\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"fmt_out\",\n          \"type\": \"char*\"\n        },\n        {\n          \"name\": \"fmt_out_size\",\n          \"type\": \"size_t\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* fmt_in,char* fmt_out,size_t fmt_out_size)\",\n      \"call_args\": \"(fmt_in,fmt_out,fmt_out_size)\",\n      \"cimguiname\": \"igImParseFormatSanitizeForScanning\",\n      \"defaults\": {},\n      \"funcname\": \"ImParseFormatSanitizeForScanning\",\n      \"location\": \"imgui_internal:395\",\n      \"ov_cimguiname\": \"igImParseFormatSanitizeForScanning\",\n      \"ret\": \"const char*\",\n      \"signature\": \"(const char*,char*,size_t)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igImParseFormatTrimDecorations\": [\n    {\n      \"args\": \"(const char* format,char* buf,size_t buf_size)\",\n      \"argsT\": [\n        {\n          \"name\": \"format\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"buf\",\n          \"type\": \"char*\"\n        },\n        {\n          \"name\": \"buf_size\",\n          \"type\": \"size_t\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* format,char* buf,size_t buf_size)\",\n      \"call_args\": \"(format,buf,buf_size)\",\n      \"cimguiname\": \"igImParseFormatTrimDecorations\",\n      \"defaults\": {},\n      \"funcname\": \"ImParseFormatTrimDecorations\",\n      \"location\": \"imgui_internal:393\",\n      \"ov_cimguiname\": \"igImParseFormatTrimDecorations\",\n      \"ret\": \"const char*\",\n      \"signature\": \"(const char*,char*,size_t)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igImPow\": [\n    {\n      \"args\": \"(float x,float y)\",\n      \"argsT\": [\n        {\n          \"name\": \"x\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"y\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(float x,float y)\",\n      \"call_args\": \"(x,y)\",\n      \"cimguiname\": \"igImPow\",\n      \"defaults\": {},\n      \"funcname\": \"ImPow\",\n      \"location\": \"imgui_internal:444\",\n      \"ov_cimguiname\": \"igImPow_Float\",\n      \"ret\": \"float\",\n      \"signature\": \"(float,float)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(double x,double y)\",\n      \"argsT\": [\n        {\n          \"name\": \"x\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"y\",\n          \"type\": \"double\"\n        }\n      ],\n      \"argsoriginal\": \"(double x,double y)\",\n      \"call_args\": \"(x,y)\",\n      \"cimguiname\": \"igImPow\",\n      \"defaults\": {},\n      \"funcname\": \"ImPow\",\n      \"location\": \"imgui_internal:445\",\n      \"ov_cimguiname\": \"igImPow_double\",\n      \"ret\": \"double\",\n      \"signature\": \"(double,double)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igImQsort\": [\n    {\n      \"args\": \"(void* base,size_t count,size_t size_of_element,int(*compare_func)(void const*,void const*))\",\n      \"argsT\": [\n        {\n          \"name\": \"base\",\n          \"type\": \"void*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"size_t\"\n        },\n        {\n          \"name\": \"size_of_element\",\n          \"type\": \"size_t\"\n        },\n        {\n          \"name\": \"compare_func\",\n          \"ret\": \"int\",\n          \"signature\": \"(void const*,void const*)\",\n          \"type\": \"int(*)(void const*,void const*)\"\n        }\n      ],\n      \"argsoriginal\": \"(void* base,size_t count,size_t size_of_element,int(*compare_func)(void const*,void const*))\",\n      \"call_args\": \"(base,count,size_of_element,compare_func)\",\n      \"cimguiname\": \"igImQsort\",\n      \"defaults\": {},\n      \"funcname\": \"ImQsort\",\n      \"location\": \"imgui_internal:355\",\n      \"ov_cimguiname\": \"igImQsort\",\n      \"ret\": \"void\",\n      \"signature\": \"(void*,size_t,size_t,int(*)(void const*,void const*))\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igImRotate\": [\n    {\n      \"args\": \"(ImVec2 *pOut,const ImVec2 v,float cos_a,float sin_a)\",\n      \"argsT\": [\n        {\n          \"name\": \"pOut\",\n          \"type\": \"ImVec2*\"\n        },\n        {\n          \"name\": \"v\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"cos_a\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"sin_a\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImVec2& v,float cos_a,float sin_a)\",\n      \"call_args\": \"(v,cos_a,sin_a)\",\n      \"cimguiname\": \"igImRotate\",\n      \"defaults\": {},\n      \"funcname\": \"ImRotate\",\n      \"location\": \"imgui_internal:486\",\n      \"nonUDT\": 1,\n      \"ov_cimguiname\": \"igImRotate\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImVec2,float,float)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igImRsqrt\": [\n    {\n      \"args\": \"(float x)\",\n      \"argsT\": [\n        {\n          \"name\": \"x\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(float x)\",\n      \"call_args\": \"(x)\",\n      \"cimguiname\": \"igImRsqrt\",\n      \"defaults\": {},\n      \"funcname\": \"ImRsqrt\",\n      \"location\": \"imgui_internal:454\",\n      \"ov_cimguiname\": \"igImRsqrt_Float\",\n      \"ret\": \"float\",\n      \"signature\": \"(float)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(double x)\",\n      \"argsT\": [\n        {\n          \"name\": \"x\",\n          \"type\": \"double\"\n        }\n      ],\n      \"argsoriginal\": \"(double x)\",\n      \"call_args\": \"(x)\",\n      \"cimguiname\": \"igImRsqrt\",\n      \"defaults\": {},\n      \"funcname\": \"ImRsqrt\",\n      \"location\": \"imgui_internal:458\",\n      \"ov_cimguiname\": \"igImRsqrt_double\",\n      \"ret\": \"double\",\n      \"signature\": \"(double)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igImSaturate\": [\n    {\n      \"args\": \"(float f)\",\n      \"argsT\": [\n        {\n          \"name\": \"f\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(float f)\",\n      \"call_args\": \"(f)\",\n      \"cimguiname\": \"igImSaturate\",\n      \"defaults\": {},\n      \"funcname\": \"ImSaturate\",\n      \"location\": \"imgui_internal:476\",\n      \"ov_cimguiname\": \"igImSaturate\",\n      \"ret\": \"float\",\n      \"signature\": \"(float)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igImSign\": [\n    {\n      \"args\": \"(float x)\",\n      \"argsT\": [\n        {\n          \"name\": \"x\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(float x)\",\n      \"call_args\": \"(x)\",\n      \"cimguiname\": \"igImSign\",\n      \"defaults\": {},\n      \"funcname\": \"ImSign\",\n      \"location\": \"imgui_internal:451\",\n      \"ov_cimguiname\": \"igImSign_Float\",\n      \"ret\": \"float\",\n      \"signature\": \"(float)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(double x)\",\n      \"argsT\": [\n        {\n          \"name\": \"x\",\n          \"type\": \"double\"\n        }\n      ],\n      \"argsoriginal\": \"(double x)\",\n      \"call_args\": \"(x)\",\n      \"cimguiname\": \"igImSign\",\n      \"defaults\": {},\n      \"funcname\": \"ImSign\",\n      \"location\": \"imgui_internal:452\",\n      \"ov_cimguiname\": \"igImSign_double\",\n      \"ret\": \"double\",\n      \"signature\": \"(double)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igImStrSkipBlank\": [\n    {\n      \"args\": \"(const char* str)\",\n      \"argsT\": [\n        {\n          \"name\": \"str\",\n          \"type\": \"const char*\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* str)\",\n      \"call_args\": \"(str)\",\n      \"cimguiname\": \"igImStrSkipBlank\",\n      \"defaults\": {},\n      \"funcname\": \"ImStrSkipBlank\",\n      \"location\": \"imgui_internal:376\",\n      \"ov_cimguiname\": \"igImStrSkipBlank\",\n      \"ret\": \"const char*\",\n      \"signature\": \"(const char*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igImStrTrimBlanks\": [\n    {\n      \"args\": \"(char* str)\",\n      \"argsT\": [\n        {\n          \"name\": \"str\",\n          \"type\": \"char*\"\n        }\n      ],\n      \"argsoriginal\": \"(char* str)\",\n      \"call_args\": \"(str)\",\n      \"cimguiname\": \"igImStrTrimBlanks\",\n      \"defaults\": {},\n      \"funcname\": \"ImStrTrimBlanks\",\n      \"location\": \"imgui_internal:375\",\n      \"ov_cimguiname\": \"igImStrTrimBlanks\",\n      \"ret\": \"void\",\n      \"signature\": \"(char*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igImStrbol\": [\n    {\n      \"args\": \"(const char* buf_mid_line,const char* buf_begin)\",\n      \"argsT\": [\n        {\n          \"name\": \"buf_mid_line\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"buf_begin\",\n          \"type\": \"const char*\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* buf_mid_line,const char* buf_begin)\",\n      \"call_args\": \"(buf_mid_line,buf_begin)\",\n      \"cimguiname\": \"igImStrbol\",\n      \"defaults\": {},\n      \"funcname\": \"ImStrbol\",\n      \"location\": \"imgui_internal:378\",\n      \"ov_cimguiname\": \"igImStrbol\",\n      \"ret\": \"const char*\",\n      \"signature\": \"(const char*,const char*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igImStrchrRange\": [\n    {\n      \"args\": \"(const char* str_begin,const char* str_end,char c)\",\n      \"argsT\": [\n        {\n          \"name\": \"str_begin\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"str_end\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"c\",\n          \"type\": \"char\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* str_begin,const char* str_end,char c)\",\n      \"call_args\": \"(str_begin,str_end,c)\",\n      \"cimguiname\": \"igImStrchrRange\",\n      \"defaults\": {},\n      \"funcname\": \"ImStrchrRange\",\n      \"location\": \"imgui_internal:372\",\n      \"ov_cimguiname\": \"igImStrchrRange\",\n      \"ret\": \"const char*\",\n      \"signature\": \"(const char*,const char*,char)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igImStrdup\": [\n    {\n      \"args\": \"(const char* str)\",\n      \"argsT\": [\n        {\n          \"name\": \"str\",\n          \"type\": \"const char*\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* str)\",\n      \"call_args\": \"(str)\",\n      \"cimguiname\": \"igImStrdup\",\n      \"defaults\": {},\n      \"funcname\": \"ImStrdup\",\n      \"location\": \"imgui_internal:370\",\n      \"ov_cimguiname\": \"igImStrdup\",\n      \"ret\": \"char*\",\n      \"signature\": \"(const char*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igImStrdupcpy\": [\n    {\n      \"args\": \"(char* dst,size_t* p_dst_size,const char* str)\",\n      \"argsT\": [\n        {\n          \"name\": \"dst\",\n          \"type\": \"char*\"\n        },\n        {\n          \"name\": \"p_dst_size\",\n          \"type\": \"size_t*\"\n        },\n        {\n          \"name\": \"str\",\n          \"type\": \"const char*\"\n        }\n      ],\n      \"argsoriginal\": \"(char* dst,size_t* p_dst_size,const char* str)\",\n      \"call_args\": \"(dst,p_dst_size,str)\",\n      \"cimguiname\": \"igImStrdupcpy\",\n      \"defaults\": {},\n      \"funcname\": \"ImStrdupcpy\",\n      \"location\": \"imgui_internal:371\",\n      \"ov_cimguiname\": \"igImStrdupcpy\",\n      \"ret\": \"char*\",\n      \"signature\": \"(char*,size_t*,const char*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igImStreolRange\": [\n    {\n      \"args\": \"(const char* str,const char* str_end)\",\n      \"argsT\": [\n        {\n          \"name\": \"str\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"str_end\",\n          \"type\": \"const char*\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* str,const char* str_end)\",\n      \"call_args\": \"(str,str_end)\",\n      \"cimguiname\": \"igImStreolRange\",\n      \"defaults\": {},\n      \"funcname\": \"ImStreolRange\",\n      \"location\": \"imgui_internal:373\",\n      \"ov_cimguiname\": \"igImStreolRange\",\n      \"ret\": \"const char*\",\n      \"signature\": \"(const char*,const char*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igImStricmp\": [\n    {\n      \"args\": \"(const char* str1,const char* str2)\",\n      \"argsT\": [\n        {\n          \"name\": \"str1\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"str2\",\n          \"type\": \"const char*\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* str1,const char* str2)\",\n      \"call_args\": \"(str1,str2)\",\n      \"cimguiname\": \"igImStricmp\",\n      \"defaults\": {},\n      \"funcname\": \"ImStricmp\",\n      \"location\": \"imgui_internal:367\",\n      \"ov_cimguiname\": \"igImStricmp\",\n      \"ret\": \"int\",\n      \"signature\": \"(const char*,const char*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igImStristr\": [\n    {\n      \"args\": \"(const char* haystack,const char* haystack_end,const char* needle,const char* needle_end)\",\n      \"argsT\": [\n        {\n          \"name\": \"haystack\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"haystack_end\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"needle\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"needle_end\",\n          \"type\": \"const char*\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* haystack,const char* haystack_end,const char* needle,const char* needle_end)\",\n      \"call_args\": \"(haystack,haystack_end,needle,needle_end)\",\n      \"cimguiname\": \"igImStristr\",\n      \"defaults\": {},\n      \"funcname\": \"ImStristr\",\n      \"location\": \"imgui_internal:374\",\n      \"ov_cimguiname\": \"igImStristr\",\n      \"ret\": \"const char*\",\n      \"signature\": \"(const char*,const char*,const char*,const char*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igImStrlenW\": [\n    {\n      \"args\": \"(const ImWchar* str)\",\n      \"argsT\": [\n        {\n          \"name\": \"str\",\n          \"type\": \"const ImWchar*\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImWchar* str)\",\n      \"call_args\": \"(str)\",\n      \"cimguiname\": \"igImStrlenW\",\n      \"defaults\": {},\n      \"funcname\": \"ImStrlenW\",\n      \"location\": \"imgui_internal:377\",\n      \"ov_cimguiname\": \"igImStrlenW\",\n      \"ret\": \"int\",\n      \"signature\": \"(const ImWchar*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igImStrncpy\": [\n    {\n      \"args\": \"(char* dst,const char* src,size_t count)\",\n      \"argsT\": [\n        {\n          \"name\": \"dst\",\n          \"type\": \"char*\"\n        },\n        {\n          \"name\": \"src\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"size_t\"\n        }\n      ],\n      \"argsoriginal\": \"(char* dst,const char* src,size_t count)\",\n      \"call_args\": \"(dst,src,count)\",\n      \"cimguiname\": \"igImStrncpy\",\n      \"defaults\": {},\n      \"funcname\": \"ImStrncpy\",\n      \"location\": \"imgui_internal:369\",\n      \"ov_cimguiname\": \"igImStrncpy\",\n      \"ret\": \"void\",\n      \"signature\": \"(char*,const char*,size_t)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igImStrnicmp\": [\n    {\n      \"args\": \"(const char* str1,const char* str2,size_t count)\",\n      \"argsT\": [\n        {\n          \"name\": \"str1\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"str2\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"size_t\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* str1,const char* str2,size_t count)\",\n      \"call_args\": \"(str1,str2,count)\",\n      \"cimguiname\": \"igImStrnicmp\",\n      \"defaults\": {},\n      \"funcname\": \"ImStrnicmp\",\n      \"location\": \"imgui_internal:368\",\n      \"ov_cimguiname\": \"igImStrnicmp\",\n      \"ret\": \"int\",\n      \"signature\": \"(const char*,const char*,size_t)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igImTextCharFromUtf8\": [\n    {\n      \"args\": \"(unsigned int* out_char,const char* in_text,const char* in_text_end)\",\n      \"argsT\": [\n        {\n          \"name\": \"out_char\",\n          \"type\": \"unsigned int*\"\n        },\n        {\n          \"name\": \"in_text\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"in_text_end\",\n          \"type\": \"const char*\"\n        }\n      ],\n      \"argsoriginal\": \"(unsigned int* out_char,const char* in_text,const char* in_text_end)\",\n      \"call_args\": \"(out_char,in_text,in_text_end)\",\n      \"cimguiname\": \"igImTextCharFromUtf8\",\n      \"defaults\": {},\n      \"funcname\": \"ImTextCharFromUtf8\",\n      \"location\": \"imgui_internal:401\",\n      \"ov_cimguiname\": \"igImTextCharFromUtf8\",\n      \"ret\": \"int\",\n      \"signature\": \"(unsigned int*,const char*,const char*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igImTextCharToUtf8\": [\n    {\n      \"args\": \"(char out_buf[5],unsigned int c)\",\n      \"argsT\": [\n        {\n          \"name\": \"out_buf\",\n          \"type\": \"char[5]\"\n        },\n        {\n          \"name\": \"c\",\n          \"type\": \"unsigned int\"\n        }\n      ],\n      \"argsoriginal\": \"(char out_buf[5],unsigned int c)\",\n      \"call_args\": \"(out_buf,c)\",\n      \"cimguiname\": \"igImTextCharToUtf8\",\n      \"defaults\": {},\n      \"funcname\": \"ImTextCharToUtf8\",\n      \"location\": \"imgui_internal:399\",\n      \"ov_cimguiname\": \"igImTextCharToUtf8\",\n      \"ret\": \"const char*\",\n      \"signature\": \"(char[5],unsigned int)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igImTextCountCharsFromUtf8\": [\n    {\n      \"args\": \"(const char* in_text,const char* in_text_end)\",\n      \"argsT\": [\n        {\n          \"name\": \"in_text\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"in_text_end\",\n          \"type\": \"const char*\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* in_text,const char* in_text_end)\",\n      \"call_args\": \"(in_text,in_text_end)\",\n      \"cimguiname\": \"igImTextCountCharsFromUtf8\",\n      \"defaults\": {},\n      \"funcname\": \"ImTextCountCharsFromUtf8\",\n      \"location\": \"imgui_internal:403\",\n      \"ov_cimguiname\": \"igImTextCountCharsFromUtf8\",\n      \"ret\": \"int\",\n      \"signature\": \"(const char*,const char*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igImTextCountLines\": [\n    {\n      \"args\": \"(const char* in_text,const char* in_text_end)\",\n      \"argsT\": [\n        {\n          \"name\": \"in_text\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"in_text_end\",\n          \"type\": \"const char*\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* in_text,const char* in_text_end)\",\n      \"call_args\": \"(in_text,in_text_end)\",\n      \"cimguiname\": \"igImTextCountLines\",\n      \"defaults\": {},\n      \"funcname\": \"ImTextCountLines\",\n      \"location\": \"imgui_internal:407\",\n      \"ov_cimguiname\": \"igImTextCountLines\",\n      \"ret\": \"int\",\n      \"signature\": \"(const char*,const char*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igImTextCountUtf8BytesFromChar\": [\n    {\n      \"args\": \"(const char* in_text,const char* in_text_end)\",\n      \"argsT\": [\n        {\n          \"name\": \"in_text\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"in_text_end\",\n          \"type\": \"const char*\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* in_text,const char* in_text_end)\",\n      \"call_args\": \"(in_text,in_text_end)\",\n      \"cimguiname\": \"igImTextCountUtf8BytesFromChar\",\n      \"defaults\": {},\n      \"funcname\": \"ImTextCountUtf8BytesFromChar\",\n      \"location\": \"imgui_internal:404\",\n      \"ov_cimguiname\": \"igImTextCountUtf8BytesFromChar\",\n      \"ret\": \"int\",\n      \"signature\": \"(const char*,const char*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igImTextCountUtf8BytesFromStr\": [\n    {\n      \"args\": \"(const ImWchar* in_text,const ImWchar* in_text_end)\",\n      \"argsT\": [\n        {\n          \"name\": \"in_text\",\n          \"type\": \"const ImWchar*\"\n        },\n        {\n          \"name\": \"in_text_end\",\n          \"type\": \"const ImWchar*\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImWchar* in_text,const ImWchar* in_text_end)\",\n      \"call_args\": \"(in_text,in_text_end)\",\n      \"cimguiname\": \"igImTextCountUtf8BytesFromStr\",\n      \"defaults\": {},\n      \"funcname\": \"ImTextCountUtf8BytesFromStr\",\n      \"location\": \"imgui_internal:405\",\n      \"ov_cimguiname\": \"igImTextCountUtf8BytesFromStr\",\n      \"ret\": \"int\",\n      \"signature\": \"(const ImWchar*,const ImWchar*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igImTextFindPreviousUtf8Codepoint\": [\n    {\n      \"args\": \"(const char* in_text_start,const char* in_text_curr)\",\n      \"argsT\": [\n        {\n          \"name\": \"in_text_start\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"in_text_curr\",\n          \"type\": \"const char*\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* in_text_start,const char* in_text_curr)\",\n      \"call_args\": \"(in_text_start,in_text_curr)\",\n      \"cimguiname\": \"igImTextFindPreviousUtf8Codepoint\",\n      \"defaults\": {},\n      \"funcname\": \"ImTextFindPreviousUtf8Codepoint\",\n      \"location\": \"imgui_internal:406\",\n      \"ov_cimguiname\": \"igImTextFindPreviousUtf8Codepoint\",\n      \"ret\": \"const char*\",\n      \"signature\": \"(const char*,const char*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igImTextStrFromUtf8\": [\n    {\n      \"args\": \"(ImWchar* out_buf,int out_buf_size,const char* in_text,const char* in_text_end,const char** in_remaining)\",\n      \"argsT\": [\n        {\n          \"name\": \"out_buf\",\n          \"type\": \"ImWchar*\"\n        },\n        {\n          \"name\": \"out_buf_size\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"in_text\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"in_text_end\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"in_remaining\",\n          \"type\": \"const char**\"\n        }\n      ],\n      \"argsoriginal\": \"(ImWchar* out_buf,int out_buf_size,const char* in_text,const char* in_text_end,const char** in_remaining=((void*)0))\",\n      \"call_args\": \"(out_buf,out_buf_size,in_text,in_text_end,in_remaining)\",\n      \"cimguiname\": \"igImTextStrFromUtf8\",\n      \"defaults\": {\n        \"in_remaining\": \"NULL\"\n      },\n      \"funcname\": \"ImTextStrFromUtf8\",\n      \"location\": \"imgui_internal:402\",\n      \"ov_cimguiname\": \"igImTextStrFromUtf8\",\n      \"ret\": \"int\",\n      \"signature\": \"(ImWchar*,int,const char*,const char*,const char**)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igImTextStrToUtf8\": [\n    {\n      \"args\": \"(char* out_buf,int out_buf_size,const ImWchar* in_text,const ImWchar* in_text_end)\",\n      \"argsT\": [\n        {\n          \"name\": \"out_buf\",\n          \"type\": \"char*\"\n        },\n        {\n          \"name\": \"out_buf_size\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"in_text\",\n          \"type\": \"const ImWchar*\"\n        },\n        {\n          \"name\": \"in_text_end\",\n          \"type\": \"const ImWchar*\"\n        }\n      ],\n      \"argsoriginal\": \"(char* out_buf,int out_buf_size,const ImWchar* in_text,const ImWchar* in_text_end)\",\n      \"call_args\": \"(out_buf,out_buf_size,in_text,in_text_end)\",\n      \"cimguiname\": \"igImTextStrToUtf8\",\n      \"defaults\": {},\n      \"funcname\": \"ImTextStrToUtf8\",\n      \"location\": \"imgui_internal:400\",\n      \"ov_cimguiname\": \"igImTextStrToUtf8\",\n      \"ret\": \"int\",\n      \"signature\": \"(char*,int,const ImWchar*,const ImWchar*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igImToUpper\": [\n    {\n      \"args\": \"(char c)\",\n      \"argsT\": [\n        {\n          \"name\": \"c\",\n          \"type\": \"char\"\n        }\n      ],\n      \"argsoriginal\": \"(char c)\",\n      \"call_args\": \"(c)\",\n      \"cimguiname\": \"igImToUpper\",\n      \"defaults\": {},\n      \"funcname\": \"ImToUpper\",\n      \"location\": \"imgui_internal:380\",\n      \"ov_cimguiname\": \"igImToUpper\",\n      \"ret\": \"char\",\n      \"signature\": \"(char)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igImTriangleArea\": [\n    {\n      \"args\": \"(const ImVec2 a,const ImVec2 b,const ImVec2 c)\",\n      \"argsT\": [\n        {\n          \"name\": \"a\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"b\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"c\",\n          \"type\": \"const ImVec2\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImVec2& a,const ImVec2& b,const ImVec2& c)\",\n      \"call_args\": \"(a,b,c)\",\n      \"cimguiname\": \"igImTriangleArea\",\n      \"defaults\": {},\n      \"funcname\": \"ImTriangleArea\",\n      \"location\": \"imgui_internal:503\",\n      \"ov_cimguiname\": \"igImTriangleArea\",\n      \"ret\": \"float\",\n      \"signature\": \"(const ImVec2,const ImVec2,const ImVec2)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igImTriangleBarycentricCoords\": [\n    {\n      \"args\": \"(const ImVec2 a,const ImVec2 b,const ImVec2 c,const ImVec2 p,float* out_u,float* out_v,float* out_w)\",\n      \"argsT\": [\n        {\n          \"name\": \"a\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"b\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"c\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"p\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"out_u\",\n          \"reftoptr\": true,\n          \"type\": \"float*\"\n        },\n        {\n          \"name\": \"out_v\",\n          \"reftoptr\": true,\n          \"type\": \"float*\"\n        },\n        {\n          \"name\": \"out_w\",\n          \"reftoptr\": true,\n          \"type\": \"float*\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImVec2& a,const ImVec2& b,const ImVec2& c,const ImVec2& p,float& out_u,float& out_v,float& out_w)\",\n      \"call_args\": \"(a,b,c,p,*out_u,*out_v,*out_w)\",\n      \"cimguiname\": \"igImTriangleBarycentricCoords\",\n      \"defaults\": {},\n      \"funcname\": \"ImTriangleBarycentricCoords\",\n      \"location\": \"imgui_internal:502\",\n      \"ov_cimguiname\": \"igImTriangleBarycentricCoords\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImVec2,const ImVec2,const ImVec2,const ImVec2,float*,float*,float*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igImTriangleClosestPoint\": [\n    {\n      \"args\": \"(ImVec2 *pOut,const ImVec2 a,const ImVec2 b,const ImVec2 c,const ImVec2 p)\",\n      \"argsT\": [\n        {\n          \"name\": \"pOut\",\n          \"type\": \"ImVec2*\"\n        },\n        {\n          \"name\": \"a\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"b\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"c\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"p\",\n          \"type\": \"const ImVec2\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImVec2& a,const ImVec2& b,const ImVec2& c,const ImVec2& p)\",\n      \"call_args\": \"(a,b,c,p)\",\n      \"cimguiname\": \"igImTriangleClosestPoint\",\n      \"defaults\": {},\n      \"funcname\": \"ImTriangleClosestPoint\",\n      \"location\": \"imgui_internal:501\",\n      \"nonUDT\": 1,\n      \"ov_cimguiname\": \"igImTriangleClosestPoint\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImVec2,const ImVec2,const ImVec2,const ImVec2)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igImTriangleContainsPoint\": [\n    {\n      \"args\": \"(const ImVec2 a,const ImVec2 b,const ImVec2 c,const ImVec2 p)\",\n      \"argsT\": [\n        {\n          \"name\": \"a\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"b\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"c\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"p\",\n          \"type\": \"const ImVec2\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImVec2& a,const ImVec2& b,const ImVec2& c,const ImVec2& p)\",\n      \"call_args\": \"(a,b,c,p)\",\n      \"cimguiname\": \"igImTriangleContainsPoint\",\n      \"defaults\": {},\n      \"funcname\": \"ImTriangleContainsPoint\",\n      \"location\": \"imgui_internal:500\",\n      \"ov_cimguiname\": \"igImTriangleContainsPoint\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const ImVec2,const ImVec2,const ImVec2,const ImVec2)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igImTriangleIsClockwise\": [\n    {\n      \"args\": \"(const ImVec2 a,const ImVec2 b,const ImVec2 c)\",\n      \"argsT\": [\n        {\n          \"name\": \"a\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"b\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"c\",\n          \"type\": \"const ImVec2\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImVec2& a,const ImVec2& b,const ImVec2& c)\",\n      \"call_args\": \"(a,b,c)\",\n      \"cimguiname\": \"igImTriangleIsClockwise\",\n      \"defaults\": {},\n      \"funcname\": \"ImTriangleIsClockwise\",\n      \"location\": \"imgui_internal:504\",\n      \"ov_cimguiname\": \"igImTriangleIsClockwise\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const ImVec2,const ImVec2,const ImVec2)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igImTrunc\": [\n    {\n      \"args\": \"(float f)\",\n      \"argsT\": [\n        {\n          \"name\": \"f\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(float f)\",\n      \"call_args\": \"(f)\",\n      \"cimguiname\": \"igImTrunc\",\n      \"defaults\": {},\n      \"funcname\": \"ImTrunc\",\n      \"location\": \"imgui_internal:480\",\n      \"ov_cimguiname\": \"igImTrunc_Float\",\n      \"ret\": \"float\",\n      \"signature\": \"(float)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(ImVec2 *pOut,const ImVec2 v)\",\n      \"argsT\": [\n        {\n          \"name\": \"pOut\",\n          \"type\": \"ImVec2*\"\n        },\n        {\n          \"name\": \"v\",\n          \"type\": \"const ImVec2\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImVec2& v)\",\n      \"call_args\": \"(v)\",\n      \"cimguiname\": \"igImTrunc\",\n      \"defaults\": {},\n      \"funcname\": \"ImTrunc\",\n      \"location\": \"imgui_internal:481\",\n      \"nonUDT\": 1,\n      \"ov_cimguiname\": \"igImTrunc_Vec2\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImVec2)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igImUpperPowerOfTwo\": [\n    {\n      \"args\": \"(int v)\",\n      \"argsT\": [\n        {\n          \"name\": \"v\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(int v)\",\n      \"call_args\": \"(v)\",\n      \"cimguiname\": \"igImUpperPowerOfTwo\",\n      \"defaults\": {},\n      \"funcname\": \"ImUpperPowerOfTwo\",\n      \"location\": \"imgui_internal:364\",\n      \"ov_cimguiname\": \"igImUpperPowerOfTwo\",\n      \"ret\": \"int\",\n      \"signature\": \"(int)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igImage\": [\n    {\n      \"args\": \"(ImTextureID user_texture_id,const ImVec2 image_size,const ImVec2 uv0,const ImVec2 uv1,const ImVec4 tint_col,const ImVec4 border_col)\",\n      \"argsT\": [\n        {\n          \"name\": \"user_texture_id\",\n          \"type\": \"ImTextureID\"\n        },\n        {\n          \"name\": \"image_size\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"uv0\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"uv1\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"tint_col\",\n          \"type\": \"const ImVec4\"\n        },\n        {\n          \"name\": \"border_col\",\n          \"type\": \"const ImVec4\"\n        }\n      ],\n      \"argsoriginal\": \"(ImTextureID user_texture_id,const ImVec2& image_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))\",\n      \"call_args\": \"(user_texture_id,image_size,uv0,uv1,tint_col,border_col)\",\n      \"cimguiname\": \"igImage\",\n      \"defaults\": {\n        \"border_col\": \"ImVec4(0,0,0,0)\",\n        \"tint_col\": \"ImVec4(1,1,1,1)\",\n        \"uv0\": \"ImVec2(0,0)\",\n        \"uv1\": \"ImVec2(1,1)\"\n      },\n      \"funcname\": \"Image\",\n      \"location\": \"imgui:569\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igImage\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImTextureID,const ImVec2,const ImVec2,const ImVec2,const ImVec4,const ImVec4)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igImageButton\": [\n    {\n      \"args\": \"(const char* str_id,ImTextureID user_texture_id,const ImVec2 image_size,const ImVec2 uv0,const ImVec2 uv1,const ImVec4 bg_col,const ImVec4 tint_col)\",\n      \"argsT\": [\n        {\n          \"name\": \"str_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"user_texture_id\",\n          \"type\": \"ImTextureID\"\n        },\n        {\n          \"name\": \"image_size\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"uv0\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"uv1\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"bg_col\",\n          \"type\": \"const ImVec4\"\n        },\n        {\n          \"name\": \"tint_col\",\n          \"type\": \"const ImVec4\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* str_id,ImTextureID user_texture_id,const ImVec2& image_size,const ImVec2& uv0=ImVec2(0,0),const ImVec2& uv1=ImVec2(1,1),const ImVec4& bg_col=ImVec4(0,0,0,0),const ImVec4& tint_col=ImVec4(1,1,1,1))\",\n      \"call_args\": \"(str_id,user_texture_id,image_size,uv0,uv1,bg_col,tint_col)\",\n      \"cimguiname\": \"igImageButton\",\n      \"defaults\": {\n        \"bg_col\": \"ImVec4(0,0,0,0)\",\n        \"tint_col\": \"ImVec4(1,1,1,1)\",\n        \"uv0\": \"ImVec2(0,0)\",\n        \"uv1\": \"ImVec2(1,1)\"\n      },\n      \"funcname\": \"ImageButton\",\n      \"location\": \"imgui:570\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igImageButton\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*,ImTextureID,const ImVec2,const ImVec2,const ImVec2,const ImVec4,const ImVec4)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igImageButtonEx\": [\n    {\n      \"args\": \"(ImGuiID id,ImTextureID user_texture_id,const ImVec2 image_size,const ImVec2 uv0,const ImVec2 uv1,const ImVec4 bg_col,const ImVec4 tint_col,ImGuiButtonFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"id\",\n          \"type\": \"ImGuiID\"\n        },\n        {\n          \"name\": \"user_texture_id\",\n          \"type\": \"ImTextureID\"\n        },\n        {\n          \"name\": \"image_size\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"uv0\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"uv1\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"bg_col\",\n          \"type\": \"const ImVec4\"\n        },\n        {\n          \"name\": \"tint_col\",\n          \"type\": \"const ImVec4\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiButtonFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiID id,ImTextureID user_texture_id,const ImVec2& image_size,const ImVec2& uv0,const ImVec2& uv1,const ImVec4& bg_col,const ImVec4& tint_col,ImGuiButtonFlags flags=0)\",\n      \"call_args\": \"(id,user_texture_id,image_size,uv0,uv1,bg_col,tint_col,flags)\",\n      \"cimguiname\": \"igImageButtonEx\",\n      \"defaults\": {\n        \"flags\": \"0\"\n      },\n      \"funcname\": \"ImageButtonEx\",\n      \"location\": \"imgui_internal:3404\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igImageButtonEx\",\n      \"ret\": \"bool\",\n      \"signature\": \"(ImGuiID,ImTextureID,const ImVec2,const ImVec2,const ImVec2,const ImVec4,const ImVec4,ImGuiButtonFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igIndent\": [\n    {\n      \"args\": \"(float indent_w)\",\n      \"argsT\": [\n        {\n          \"name\": \"indent_w\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(float indent_w=0.0f)\",\n      \"call_args\": \"(indent_w)\",\n      \"cimguiname\": \"igIndent\",\n      \"defaults\": {\n        \"indent_w\": \"0.0f\"\n      },\n      \"funcname\": \"Indent\",\n      \"location\": \"imgui:500\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igIndent\",\n      \"ret\": \"void\",\n      \"signature\": \"(float)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igInitialize\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igInitialize\",\n      \"defaults\": {},\n      \"funcname\": \"Initialize\",\n      \"location\": \"imgui_internal:3013\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igInitialize\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igInputDouble\": [\n    {\n      \"args\": \"(const char* label,double* v,double step,double step_fast,const char* format,ImGuiInputTextFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"label\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"v\",\n          \"type\": \"double*\"\n        },\n        {\n          \"name\": \"step\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"step_fast\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"format\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiInputTextFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label,double* v,double step=0.0,double step_fast=0.0,const char* format=\\\"%.6f\\\",ImGuiInputTextFlags flags=0)\",\n      \"call_args\": \"(label,v,step,step_fast,format,flags)\",\n      \"cimguiname\": \"igInputDouble\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"format\": \"\\\"%.6f\\\"\",\n        \"step\": \"0.0\",\n        \"step_fast\": \"0.0\"\n      },\n      \"funcname\": \"InputDouble\",\n      \"location\": \"imgui:641\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igInputDouble\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*,double*,double,double,const char*,ImGuiInputTextFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igInputFloat\": [\n    {\n      \"args\": \"(const char* label,float* v,float step,float step_fast,const char* format,ImGuiInputTextFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"label\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"v\",\n          \"type\": \"float*\"\n        },\n        {\n          \"name\": \"step\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"step_fast\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"format\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiInputTextFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label,float* v,float step=0.0f,float step_fast=0.0f,const char* format=\\\"%.3f\\\",ImGuiInputTextFlags flags=0)\",\n      \"call_args\": \"(label,v,step,step_fast,format,flags)\",\n      \"cimguiname\": \"igInputFloat\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"format\": \"\\\"%.3f\\\"\",\n        \"step\": \"0.0f\",\n        \"step_fast\": \"0.0f\"\n      },\n      \"funcname\": \"InputFloat\",\n      \"location\": \"imgui:633\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igInputFloat\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*,float*,float,float,const char*,ImGuiInputTextFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igInputFloat2\": [\n    {\n      \"args\": \"(const char* label,float v[2],const char* format,ImGuiInputTextFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"label\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"v\",\n          \"type\": \"float[2]\"\n        },\n        {\n          \"name\": \"format\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiInputTextFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label,float v[2],const char* format=\\\"%.3f\\\",ImGuiInputTextFlags flags=0)\",\n      \"call_args\": \"(label,v,format,flags)\",\n      \"cimguiname\": \"igInputFloat2\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"format\": \"\\\"%.3f\\\"\"\n      },\n      \"funcname\": \"InputFloat2\",\n      \"location\": \"imgui:634\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igInputFloat2\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*,float[2],const char*,ImGuiInputTextFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igInputFloat3\": [\n    {\n      \"args\": \"(const char* label,float v[3],const char* format,ImGuiInputTextFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"label\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"v\",\n          \"type\": \"float[3]\"\n        },\n        {\n          \"name\": \"format\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiInputTextFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label,float v[3],const char* format=\\\"%.3f\\\",ImGuiInputTextFlags flags=0)\",\n      \"call_args\": \"(label,v,format,flags)\",\n      \"cimguiname\": \"igInputFloat3\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"format\": \"\\\"%.3f\\\"\"\n      },\n      \"funcname\": \"InputFloat3\",\n      \"location\": \"imgui:635\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igInputFloat3\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*,float[3],const char*,ImGuiInputTextFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igInputFloat4\": [\n    {\n      \"args\": \"(const char* label,float v[4],const char* format,ImGuiInputTextFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"label\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"v\",\n          \"type\": \"float[4]\"\n        },\n        {\n          \"name\": \"format\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiInputTextFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label,float v[4],const char* format=\\\"%.3f\\\",ImGuiInputTextFlags flags=0)\",\n      \"call_args\": \"(label,v,format,flags)\",\n      \"cimguiname\": \"igInputFloat4\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"format\": \"\\\"%.3f\\\"\"\n      },\n      \"funcname\": \"InputFloat4\",\n      \"location\": \"imgui:636\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igInputFloat4\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*,float[4],const char*,ImGuiInputTextFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igInputInt\": [\n    {\n      \"args\": \"(const char* label,int* v,int step,int step_fast,ImGuiInputTextFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"label\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"v\",\n          \"type\": \"int*\"\n        },\n        {\n          \"name\": \"step\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"step_fast\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiInputTextFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label,int* v,int step=1,int step_fast=100,ImGuiInputTextFlags flags=0)\",\n      \"call_args\": \"(label,v,step,step_fast,flags)\",\n      \"cimguiname\": \"igInputInt\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"step\": \"1\",\n        \"step_fast\": \"100\"\n      },\n      \"funcname\": \"InputInt\",\n      \"location\": \"imgui:637\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igInputInt\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*,int*,int,int,ImGuiInputTextFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igInputInt2\": [\n    {\n      \"args\": \"(const char* label,int v[2],ImGuiInputTextFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"label\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"v\",\n          \"type\": \"int[2]\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiInputTextFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label,int v[2],ImGuiInputTextFlags flags=0)\",\n      \"call_args\": \"(label,v,flags)\",\n      \"cimguiname\": \"igInputInt2\",\n      \"defaults\": {\n        \"flags\": \"0\"\n      },\n      \"funcname\": \"InputInt2\",\n      \"location\": \"imgui:638\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igInputInt2\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*,int[2],ImGuiInputTextFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igInputInt3\": [\n    {\n      \"args\": \"(const char* label,int v[3],ImGuiInputTextFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"label\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"v\",\n          \"type\": \"int[3]\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiInputTextFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label,int v[3],ImGuiInputTextFlags flags=0)\",\n      \"call_args\": \"(label,v,flags)\",\n      \"cimguiname\": \"igInputInt3\",\n      \"defaults\": {\n        \"flags\": \"0\"\n      },\n      \"funcname\": \"InputInt3\",\n      \"location\": \"imgui:639\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igInputInt3\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*,int[3],ImGuiInputTextFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igInputInt4\": [\n    {\n      \"args\": \"(const char* label,int v[4],ImGuiInputTextFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"label\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"v\",\n          \"type\": \"int[4]\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiInputTextFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label,int v[4],ImGuiInputTextFlags flags=0)\",\n      \"call_args\": \"(label,v,flags)\",\n      \"cimguiname\": \"igInputInt4\",\n      \"defaults\": {\n        \"flags\": \"0\"\n      },\n      \"funcname\": \"InputInt4\",\n      \"location\": \"imgui:640\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igInputInt4\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*,int[4],ImGuiInputTextFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igInputScalar\": [\n    {\n      \"args\": \"(const char* label,ImGuiDataType data_type,void* p_data,const void* p_step,const void* p_step_fast,const char* format,ImGuiInputTextFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"label\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"data_type\",\n          \"type\": \"ImGuiDataType\"\n        },\n        {\n          \"name\": \"p_data\",\n          \"type\": \"void*\"\n        },\n        {\n          \"name\": \"p_step\",\n          \"type\": \"const void*\"\n        },\n        {\n          \"name\": \"p_step_fast\",\n          \"type\": \"const void*\"\n        },\n        {\n          \"name\": \"format\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiInputTextFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label,ImGuiDataType data_type,void* p_data,const void* p_step=((void*)0),const void* p_step_fast=((void*)0),const char* format=((void*)0),ImGuiInputTextFlags flags=0)\",\n      \"call_args\": \"(label,data_type,p_data,p_step,p_step_fast,format,flags)\",\n      \"cimguiname\": \"igInputScalar\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"format\": \"NULL\",\n        \"p_step\": \"NULL\",\n        \"p_step_fast\": \"NULL\"\n      },\n      \"funcname\": \"InputScalar\",\n      \"location\": \"imgui:642\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igInputScalar\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*,ImGuiDataType,void*,const void*,const void*,const char*,ImGuiInputTextFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igInputScalarN\": [\n    {\n      \"args\": \"(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)\",\n      \"argsT\": [\n        {\n          \"name\": \"label\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"data_type\",\n          \"type\": \"ImGuiDataType\"\n        },\n        {\n          \"name\": \"p_data\",\n          \"type\": \"void*\"\n        },\n        {\n          \"name\": \"components\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"p_step\",\n          \"type\": \"const void*\"\n        },\n        {\n          \"name\": \"p_step_fast\",\n          \"type\": \"const void*\"\n        },\n        {\n          \"name\": \"format\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiInputTextFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label,ImGuiDataType data_type,void* p_data,int components,const void* p_step=((void*)0),const void* p_step_fast=((void*)0),const char* format=((void*)0),ImGuiInputTextFlags flags=0)\",\n      \"call_args\": \"(label,data_type,p_data,components,p_step,p_step_fast,format,flags)\",\n      \"cimguiname\": \"igInputScalarN\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"format\": \"NULL\",\n        \"p_step\": \"NULL\",\n        \"p_step_fast\": \"NULL\"\n      },\n      \"funcname\": \"InputScalarN\",\n      \"location\": \"imgui:643\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igInputScalarN\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*,ImGuiDataType,void*,int,const void*,const void*,const char*,ImGuiInputTextFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igInputText\": [\n    {\n      \"args\": \"(const char* label,char* buf,size_t buf_size,ImGuiInputTextFlags flags,ImGuiInputTextCallback callback,void* user_data)\",\n      \"argsT\": [\n        {\n          \"name\": \"label\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"buf\",\n          \"type\": \"char*\"\n        },\n        {\n          \"name\": \"buf_size\",\n          \"type\": \"size_t\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiInputTextFlags\"\n        },\n        {\n          \"name\": \"callback\",\n          \"type\": \"ImGuiInputTextCallback\"\n        },\n        {\n          \"name\": \"user_data\",\n          \"type\": \"void*\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label,char* buf,size_t buf_size,ImGuiInputTextFlags flags=0,ImGuiInputTextCallback callback=((void*)0),void* user_data=((void*)0))\",\n      \"call_args\": \"(label,buf,buf_size,flags,callback,user_data)\",\n      \"cimguiname\": \"igInputText\",\n      \"defaults\": {\n        \"callback\": \"NULL\",\n        \"flags\": \"0\",\n        \"user_data\": \"NULL\"\n      },\n      \"funcname\": \"InputText\",\n      \"location\": \"imgui:630\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igInputText\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*,char*,size_t,ImGuiInputTextFlags,ImGuiInputTextCallback,void*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igInputTextDeactivateHook\": [\n    {\n      \"args\": \"(ImGuiID id)\",\n      \"argsT\": [\n        {\n          \"name\": \"id\",\n          \"type\": \"ImGuiID\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiID id)\",\n      \"call_args\": \"(id)\",\n      \"cimguiname\": \"igInputTextDeactivateHook\",\n      \"defaults\": {},\n      \"funcname\": \"InputTextDeactivateHook\",\n      \"location\": \"imgui_internal:3454\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igInputTextDeactivateHook\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiID)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igInputTextEx\": [\n    {\n      \"args\": \"(const char* label,const char* hint,char* buf,int buf_size,const ImVec2 size_arg,ImGuiInputTextFlags flags,ImGuiInputTextCallback callback,void* user_data)\",\n      \"argsT\": [\n        {\n          \"name\": \"label\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"hint\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"buf\",\n          \"type\": \"char*\"\n        },\n        {\n          \"name\": \"buf_size\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"size_arg\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiInputTextFlags\"\n        },\n        {\n          \"name\": \"callback\",\n          \"type\": \"ImGuiInputTextCallback\"\n        },\n        {\n          \"name\": \"user_data\",\n          \"type\": \"void*\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label,const char* hint,char* buf,int buf_size,const ImVec2& size_arg,ImGuiInputTextFlags flags,ImGuiInputTextCallback callback=((void*)0),void* user_data=((void*)0))\",\n      \"call_args\": \"(label,hint,buf,buf_size,size_arg,flags,callback,user_data)\",\n      \"cimguiname\": \"igInputTextEx\",\n      \"defaults\": {\n        \"callback\": \"NULL\",\n        \"user_data\": \"NULL\"\n      },\n      \"funcname\": \"InputTextEx\",\n      \"location\": \"imgui_internal:3453\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igInputTextEx\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*,const char*,char*,int,const ImVec2,ImGuiInputTextFlags,ImGuiInputTextCallback,void*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igInputTextMultiline\": [\n    {\n      \"args\": \"(const char* label,char* buf,size_t buf_size,const ImVec2 size,ImGuiInputTextFlags flags,ImGuiInputTextCallback callback,void* user_data)\",\n      \"argsT\": [\n        {\n          \"name\": \"label\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"buf\",\n          \"type\": \"char*\"\n        },\n        {\n          \"name\": \"buf_size\",\n          \"type\": \"size_t\"\n        },\n        {\n          \"name\": \"size\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiInputTextFlags\"\n        },\n        {\n          \"name\": \"callback\",\n          \"type\": \"ImGuiInputTextCallback\"\n        },\n        {\n          \"name\": \"user_data\",\n          \"type\": \"void*\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label,char* buf,size_t buf_size,const ImVec2& size=ImVec2(0,0),ImGuiInputTextFlags flags=0,ImGuiInputTextCallback callback=((void*)0),void* user_data=((void*)0))\",\n      \"call_args\": \"(label,buf,buf_size,size,flags,callback,user_data)\",\n      \"cimguiname\": \"igInputTextMultiline\",\n      \"defaults\": {\n        \"callback\": \"NULL\",\n        \"flags\": \"0\",\n        \"size\": \"ImVec2(0,0)\",\n        \"user_data\": \"NULL\"\n      },\n      \"funcname\": \"InputTextMultiline\",\n      \"location\": \"imgui:631\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igInputTextMultiline\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*,char*,size_t,const ImVec2,ImGuiInputTextFlags,ImGuiInputTextCallback,void*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igInputTextWithHint\": [\n    {\n      \"args\": \"(const char* label,const char* hint,char* buf,size_t buf_size,ImGuiInputTextFlags flags,ImGuiInputTextCallback callback,void* user_data)\",\n      \"argsT\": [\n        {\n          \"name\": \"label\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"hint\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"buf\",\n          \"type\": \"char*\"\n        },\n        {\n          \"name\": \"buf_size\",\n          \"type\": \"size_t\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiInputTextFlags\"\n        },\n        {\n          \"name\": \"callback\",\n          \"type\": \"ImGuiInputTextCallback\"\n        },\n        {\n          \"name\": \"user_data\",\n          \"type\": \"void*\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label,const char* hint,char* buf,size_t buf_size,ImGuiInputTextFlags flags=0,ImGuiInputTextCallback callback=((void*)0),void* user_data=((void*)0))\",\n      \"call_args\": \"(label,hint,buf,buf_size,flags,callback,user_data)\",\n      \"cimguiname\": \"igInputTextWithHint\",\n      \"defaults\": {\n        \"callback\": \"NULL\",\n        \"flags\": \"0\",\n        \"user_data\": \"NULL\"\n      },\n      \"funcname\": \"InputTextWithHint\",\n      \"location\": \"imgui:632\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igInputTextWithHint\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*,const char*,char*,size_t,ImGuiInputTextFlags,ImGuiInputTextCallback,void*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igInvisibleButton\": [\n    {\n      \"args\": \"(const char* str_id,const ImVec2 size,ImGuiButtonFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"str_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"size\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiButtonFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* str_id,const ImVec2& size,ImGuiButtonFlags flags=0)\",\n      \"call_args\": \"(str_id,size,flags)\",\n      \"cimguiname\": \"igInvisibleButton\",\n      \"defaults\": {\n        \"flags\": \"0\"\n      },\n      \"funcname\": \"InvisibleButton\",\n      \"location\": \"imgui:552\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igInvisibleButton\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*,const ImVec2,ImGuiButtonFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igIsActiveIdUsingNavDir\": [\n    {\n      \"args\": \"(ImGuiDir dir)\",\n      \"argsT\": [\n        {\n          \"name\": \"dir\",\n          \"type\": \"ImGuiDir\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiDir dir)\",\n      \"call_args\": \"(dir)\",\n      \"cimguiname\": \"igIsActiveIdUsingNavDir\",\n      \"defaults\": {},\n      \"funcname\": \"IsActiveIdUsingNavDir\",\n      \"location\": \"imgui_internal:3192\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igIsActiveIdUsingNavDir\",\n      \"ret\": \"bool\",\n      \"signature\": \"(ImGuiDir)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igIsAliasKey\": [\n    {\n      \"args\": \"(ImGuiKey key)\",\n      \"argsT\": [\n        {\n          \"name\": \"key\",\n          \"type\": \"ImGuiKey\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiKey key)\",\n      \"call_args\": \"(key)\",\n      \"cimguiname\": \"igIsAliasKey\",\n      \"defaults\": {},\n      \"funcname\": \"IsAliasKey\",\n      \"location\": \"imgui_internal:3169\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igIsAliasKey\",\n      \"ret\": \"bool\",\n      \"signature\": \"(ImGuiKey)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igIsAnyItemActive\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igIsAnyItemActive\",\n      \"defaults\": {},\n      \"funcname\": \"IsAnyItemActive\",\n      \"location\": \"imgui:930\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igIsAnyItemActive\",\n      \"ret\": \"bool\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igIsAnyItemFocused\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igIsAnyItemFocused\",\n      \"defaults\": {},\n      \"funcname\": \"IsAnyItemFocused\",\n      \"location\": \"imgui:931\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igIsAnyItemFocused\",\n      \"ret\": \"bool\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igIsAnyItemHovered\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igIsAnyItemHovered\",\n      \"defaults\": {},\n      \"funcname\": \"IsAnyItemHovered\",\n      \"location\": \"imgui:929\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igIsAnyItemHovered\",\n      \"ret\": \"bool\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igIsAnyMouseDown\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igIsAnyMouseDown\",\n      \"defaults\": {},\n      \"funcname\": \"IsAnyMouseDown\",\n      \"location\": \"imgui:1015\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igIsAnyMouseDown\",\n      \"ret\": \"bool\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igIsClippedEx\": [\n    {\n      \"args\": \"(const ImRect bb,ImGuiID id)\",\n      \"argsT\": [\n        {\n          \"name\": \"bb\",\n          \"type\": \"const ImRect\"\n        },\n        {\n          \"name\": \"id\",\n          \"type\": \"ImGuiID\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImRect& bb,ImGuiID id)\",\n      \"call_args\": \"(bb,id)\",\n      \"cimguiname\": \"igIsClippedEx\",\n      \"defaults\": {},\n      \"funcname\": \"IsClippedEx\",\n      \"location\": \"imgui_internal:3087\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igIsClippedEx\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const ImRect,ImGuiID)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igIsDragDropActive\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igIsDragDropActive\",\n      \"defaults\": {},\n      \"funcname\": \"IsDragDropActive\",\n      \"location\": \"imgui_internal:3259\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igIsDragDropActive\",\n      \"ret\": \"bool\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igIsDragDropPayloadBeingAccepted\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igIsDragDropPayloadBeingAccepted\",\n      \"defaults\": {},\n      \"funcname\": \"IsDragDropPayloadBeingAccepted\",\n      \"location\": \"imgui_internal:3262\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igIsDragDropPayloadBeingAccepted\",\n      \"ret\": \"bool\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igIsGamepadKey\": [\n    {\n      \"args\": \"(ImGuiKey key)\",\n      \"argsT\": [\n        {\n          \"name\": \"key\",\n          \"type\": \"ImGuiKey\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiKey key)\",\n      \"call_args\": \"(key)\",\n      \"cimguiname\": \"igIsGamepadKey\",\n      \"defaults\": {},\n      \"funcname\": \"IsGamepadKey\",\n      \"location\": \"imgui_internal:3167\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igIsGamepadKey\",\n      \"ret\": \"bool\",\n      \"signature\": \"(ImGuiKey)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igIsItemActivated\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igIsItemActivated\",\n      \"defaults\": {},\n      \"funcname\": \"IsItemActivated\",\n      \"location\": \"imgui:925\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igIsItemActivated\",\n      \"ret\": \"bool\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igIsItemActive\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igIsItemActive\",\n      \"defaults\": {},\n      \"funcname\": \"IsItemActive\",\n      \"location\": \"imgui:920\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igIsItemActive\",\n      \"ret\": \"bool\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igIsItemClicked\": [\n    {\n      \"args\": \"(ImGuiMouseButton mouse_button)\",\n      \"argsT\": [\n        {\n          \"name\": \"mouse_button\",\n          \"type\": \"ImGuiMouseButton\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiMouseButton mouse_button=0)\",\n      \"call_args\": \"(mouse_button)\",\n      \"cimguiname\": \"igIsItemClicked\",\n      \"defaults\": {\n        \"mouse_button\": \"0\"\n      },\n      \"funcname\": \"IsItemClicked\",\n      \"location\": \"imgui:922\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igIsItemClicked\",\n      \"ret\": \"bool\",\n      \"signature\": \"(ImGuiMouseButton)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igIsItemDeactivated\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igIsItemDeactivated\",\n      \"defaults\": {},\n      \"funcname\": \"IsItemDeactivated\",\n      \"location\": \"imgui:926\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igIsItemDeactivated\",\n      \"ret\": \"bool\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igIsItemDeactivatedAfterEdit\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igIsItemDeactivatedAfterEdit\",\n      \"defaults\": {},\n      \"funcname\": \"IsItemDeactivatedAfterEdit\",\n      \"location\": \"imgui:927\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igIsItemDeactivatedAfterEdit\",\n      \"ret\": \"bool\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igIsItemEdited\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igIsItemEdited\",\n      \"defaults\": {},\n      \"funcname\": \"IsItemEdited\",\n      \"location\": \"imgui:924\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igIsItemEdited\",\n      \"ret\": \"bool\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igIsItemFocused\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igIsItemFocused\",\n      \"defaults\": {},\n      \"funcname\": \"IsItemFocused\",\n      \"location\": \"imgui:921\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igIsItemFocused\",\n      \"ret\": \"bool\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igIsItemHovered\": [\n    {\n      \"args\": \"(ImGuiHoveredFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiHoveredFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiHoveredFlags flags=0)\",\n      \"call_args\": \"(flags)\",\n      \"cimguiname\": \"igIsItemHovered\",\n      \"defaults\": {\n        \"flags\": \"0\"\n      },\n      \"funcname\": \"IsItemHovered\",\n      \"location\": \"imgui:919\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igIsItemHovered\",\n      \"ret\": \"bool\",\n      \"signature\": \"(ImGuiHoveredFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igIsItemToggledOpen\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igIsItemToggledOpen\",\n      \"defaults\": {},\n      \"funcname\": \"IsItemToggledOpen\",\n      \"location\": \"imgui:928\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igIsItemToggledOpen\",\n      \"ret\": \"bool\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igIsItemToggledSelection\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igIsItemToggledSelection\",\n      \"defaults\": {},\n      \"funcname\": \"IsItemToggledSelection\",\n      \"location\": \"imgui:692\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igIsItemToggledSelection\",\n      \"ret\": \"bool\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igIsItemVisible\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igIsItemVisible\",\n      \"defaults\": {},\n      \"funcname\": \"IsItemVisible\",\n      \"location\": \"imgui:923\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igIsItemVisible\",\n      \"ret\": \"bool\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igIsKeyChordPressed\": [\n    {\n      \"args\": \"(ImGuiKeyChord key_chord)\",\n      \"argsT\": [\n        {\n          \"name\": \"key_chord\",\n          \"type\": \"ImGuiKeyChord\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiKeyChord key_chord)\",\n      \"call_args\": \"(key_chord)\",\n      \"cimguiname\": \"igIsKeyChordPressed\",\n      \"defaults\": {},\n      \"funcname\": \"IsKeyChordPressed\",\n      \"location\": \"imgui:973\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igIsKeyChordPressed_Nil\",\n      \"ret\": \"bool\",\n      \"signature\": \"(ImGuiKeyChord)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(ImGuiKeyChord key_chord,ImGuiInputFlags flags,ImGuiID owner_id)\",\n      \"argsT\": [\n        {\n          \"name\": \"key_chord\",\n          \"type\": \"ImGuiKeyChord\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiInputFlags\"\n        },\n        {\n          \"name\": \"owner_id\",\n          \"type\": \"ImGuiID\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiKeyChord key_chord,ImGuiInputFlags flags,ImGuiID owner_id=0)\",\n      \"call_args\": \"(key_chord,flags,owner_id)\",\n      \"cimguiname\": \"igIsKeyChordPressed\",\n      \"defaults\": {\n        \"owner_id\": \"0\"\n      },\n      \"funcname\": \"IsKeyChordPressed\",\n      \"location\": \"imgui_internal:3221\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igIsKeyChordPressed_InputFlags\",\n      \"ret\": \"bool\",\n      \"signature\": \"(ImGuiKeyChord,ImGuiInputFlags,ImGuiID)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igIsKeyDown\": [\n    {\n      \"args\": \"(ImGuiKey key)\",\n      \"argsT\": [\n        {\n          \"name\": \"key\",\n          \"type\": \"ImGuiKey\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiKey key)\",\n      \"call_args\": \"(key)\",\n      \"cimguiname\": \"igIsKeyDown\",\n      \"defaults\": {},\n      \"funcname\": \"IsKeyDown\",\n      \"location\": \"imgui:970\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igIsKeyDown_Nil\",\n      \"ret\": \"bool\",\n      \"signature\": \"(ImGuiKey)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(ImGuiKey key,ImGuiID owner_id)\",\n      \"argsT\": [\n        {\n          \"name\": \"key\",\n          \"type\": \"ImGuiKey\"\n        },\n        {\n          \"name\": \"owner_id\",\n          \"type\": \"ImGuiID\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiKey key,ImGuiID owner_id)\",\n      \"call_args\": \"(key,owner_id)\",\n      \"cimguiname\": \"igIsKeyDown\",\n      \"defaults\": {},\n      \"funcname\": \"IsKeyDown\",\n      \"location\": \"imgui_internal:3218\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igIsKeyDown_ID\",\n      \"ret\": \"bool\",\n      \"signature\": \"(ImGuiKey,ImGuiID)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igIsKeyPressed\": [\n    {\n      \"args\": \"(ImGuiKey key,bool repeat)\",\n      \"argsT\": [\n        {\n          \"name\": \"key\",\n          \"type\": \"ImGuiKey\"\n        },\n        {\n          \"name\": \"repeat\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiKey key,bool repeat=true)\",\n      \"call_args\": \"(key,repeat)\",\n      \"cimguiname\": \"igIsKeyPressed\",\n      \"defaults\": {\n        \"repeat\": \"true\"\n      },\n      \"funcname\": \"IsKeyPressed\",\n      \"location\": \"imgui:971\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igIsKeyPressed_Bool\",\n      \"ret\": \"bool\",\n      \"signature\": \"(ImGuiKey,bool)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(ImGuiKey key,ImGuiInputFlags flags,ImGuiID owner_id)\",\n      \"argsT\": [\n        {\n          \"name\": \"key\",\n          \"type\": \"ImGuiKey\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiInputFlags\"\n        },\n        {\n          \"name\": \"owner_id\",\n          \"type\": \"ImGuiID\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiKey key,ImGuiInputFlags flags,ImGuiID owner_id=0)\",\n      \"call_args\": \"(key,flags,owner_id)\",\n      \"cimguiname\": \"igIsKeyPressed\",\n      \"defaults\": {\n        \"owner_id\": \"0\"\n      },\n      \"funcname\": \"IsKeyPressed\",\n      \"location\": \"imgui_internal:3219\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igIsKeyPressed_InputFlags\",\n      \"ret\": \"bool\",\n      \"signature\": \"(ImGuiKey,ImGuiInputFlags,ImGuiID)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igIsKeyReleased\": [\n    {\n      \"args\": \"(ImGuiKey key)\",\n      \"argsT\": [\n        {\n          \"name\": \"key\",\n          \"type\": \"ImGuiKey\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiKey key)\",\n      \"call_args\": \"(key)\",\n      \"cimguiname\": \"igIsKeyReleased\",\n      \"defaults\": {},\n      \"funcname\": \"IsKeyReleased\",\n      \"location\": \"imgui:972\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igIsKeyReleased_Nil\",\n      \"ret\": \"bool\",\n      \"signature\": \"(ImGuiKey)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(ImGuiKey key,ImGuiID owner_id)\",\n      \"argsT\": [\n        {\n          \"name\": \"key\",\n          \"type\": \"ImGuiKey\"\n        },\n        {\n          \"name\": \"owner_id\",\n          \"type\": \"ImGuiID\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiKey key,ImGuiID owner_id)\",\n      \"call_args\": \"(key,owner_id)\",\n      \"cimguiname\": \"igIsKeyReleased\",\n      \"defaults\": {},\n      \"funcname\": \"IsKeyReleased\",\n      \"location\": \"imgui_internal:3220\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igIsKeyReleased_ID\",\n      \"ret\": \"bool\",\n      \"signature\": \"(ImGuiKey,ImGuiID)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igIsKeyboardKey\": [\n    {\n      \"args\": \"(ImGuiKey key)\",\n      \"argsT\": [\n        {\n          \"name\": \"key\",\n          \"type\": \"ImGuiKey\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiKey key)\",\n      \"call_args\": \"(key)\",\n      \"cimguiname\": \"igIsKeyboardKey\",\n      \"defaults\": {},\n      \"funcname\": \"IsKeyboardKey\",\n      \"location\": \"imgui_internal:3166\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igIsKeyboardKey\",\n      \"ret\": \"bool\",\n      \"signature\": \"(ImGuiKey)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igIsLRModKey\": [\n    {\n      \"args\": \"(ImGuiKey key)\",\n      \"argsT\": [\n        {\n          \"name\": \"key\",\n          \"type\": \"ImGuiKey\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiKey key)\",\n      \"call_args\": \"(key)\",\n      \"cimguiname\": \"igIsLRModKey\",\n      \"defaults\": {},\n      \"funcname\": \"IsLRModKey\",\n      \"location\": \"imgui_internal:3170\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igIsLRModKey\",\n      \"ret\": \"bool\",\n      \"signature\": \"(ImGuiKey)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igIsLegacyKey\": [\n    {\n      \"args\": \"(ImGuiKey key)\",\n      \"argsT\": [\n        {\n          \"name\": \"key\",\n          \"type\": \"ImGuiKey\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiKey key)\",\n      \"call_args\": \"(key)\",\n      \"cimguiname\": \"igIsLegacyKey\",\n      \"defaults\": {},\n      \"funcname\": \"IsLegacyKey\",\n      \"location\": \"imgui_internal:3165\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igIsLegacyKey\",\n      \"ret\": \"bool\",\n      \"signature\": \"(ImGuiKey)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igIsMouseClicked\": [\n    {\n      \"args\": \"(ImGuiMouseButton button,bool repeat)\",\n      \"argsT\": [\n        {\n          \"name\": \"button\",\n          \"type\": \"ImGuiMouseButton\"\n        },\n        {\n          \"name\": \"repeat\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiMouseButton button,bool repeat=false)\",\n      \"call_args\": \"(button,repeat)\",\n      \"cimguiname\": \"igIsMouseClicked\",\n      \"defaults\": {\n        \"repeat\": \"false\"\n      },\n      \"funcname\": \"IsMouseClicked\",\n      \"location\": \"imgui:1009\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igIsMouseClicked_Bool\",\n      \"ret\": \"bool\",\n      \"signature\": \"(ImGuiMouseButton,bool)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(ImGuiMouseButton button,ImGuiInputFlags flags,ImGuiID owner_id)\",\n      \"argsT\": [\n        {\n          \"name\": \"button\",\n          \"type\": \"ImGuiMouseButton\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiInputFlags\"\n        },\n        {\n          \"name\": \"owner_id\",\n          \"type\": \"ImGuiID\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiMouseButton button,ImGuiInputFlags flags,ImGuiID owner_id=0)\",\n      \"call_args\": \"(button,flags,owner_id)\",\n      \"cimguiname\": \"igIsMouseClicked\",\n      \"defaults\": {\n        \"owner_id\": \"0\"\n      },\n      \"funcname\": \"IsMouseClicked\",\n      \"location\": \"imgui_internal:3223\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igIsMouseClicked_InputFlags\",\n      \"ret\": \"bool\",\n      \"signature\": \"(ImGuiMouseButton,ImGuiInputFlags,ImGuiID)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igIsMouseDoubleClicked\": [\n    {\n      \"args\": \"(ImGuiMouseButton button)\",\n      \"argsT\": [\n        {\n          \"name\": \"button\",\n          \"type\": \"ImGuiMouseButton\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiMouseButton button)\",\n      \"call_args\": \"(button)\",\n      \"cimguiname\": \"igIsMouseDoubleClicked\",\n      \"defaults\": {},\n      \"funcname\": \"IsMouseDoubleClicked\",\n      \"location\": \"imgui:1011\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igIsMouseDoubleClicked_Nil\",\n      \"ret\": \"bool\",\n      \"signature\": \"(ImGuiMouseButton)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(ImGuiMouseButton button,ImGuiID owner_id)\",\n      \"argsT\": [\n        {\n          \"name\": \"button\",\n          \"type\": \"ImGuiMouseButton\"\n        },\n        {\n          \"name\": \"owner_id\",\n          \"type\": \"ImGuiID\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiMouseButton button,ImGuiID owner_id)\",\n      \"call_args\": \"(button,owner_id)\",\n      \"cimguiname\": \"igIsMouseDoubleClicked\",\n      \"defaults\": {},\n      \"funcname\": \"IsMouseDoubleClicked\",\n      \"location\": \"imgui_internal:3225\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igIsMouseDoubleClicked_ID\",\n      \"ret\": \"bool\",\n      \"signature\": \"(ImGuiMouseButton,ImGuiID)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igIsMouseDown\": [\n    {\n      \"args\": \"(ImGuiMouseButton button)\",\n      \"argsT\": [\n        {\n          \"name\": \"button\",\n          \"type\": \"ImGuiMouseButton\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiMouseButton button)\",\n      \"call_args\": \"(button)\",\n      \"cimguiname\": \"igIsMouseDown\",\n      \"defaults\": {},\n      \"funcname\": \"IsMouseDown\",\n      \"location\": \"imgui:1008\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igIsMouseDown_Nil\",\n      \"ret\": \"bool\",\n      \"signature\": \"(ImGuiMouseButton)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(ImGuiMouseButton button,ImGuiID owner_id)\",\n      \"argsT\": [\n        {\n          \"name\": \"button\",\n          \"type\": \"ImGuiMouseButton\"\n        },\n        {\n          \"name\": \"owner_id\",\n          \"type\": \"ImGuiID\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiMouseButton button,ImGuiID owner_id)\",\n      \"call_args\": \"(button,owner_id)\",\n      \"cimguiname\": \"igIsMouseDown\",\n      \"defaults\": {},\n      \"funcname\": \"IsMouseDown\",\n      \"location\": \"imgui_internal:3222\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igIsMouseDown_ID\",\n      \"ret\": \"bool\",\n      \"signature\": \"(ImGuiMouseButton,ImGuiID)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igIsMouseDragPastThreshold\": [\n    {\n      \"args\": \"(ImGuiMouseButton button,float lock_threshold)\",\n      \"argsT\": [\n        {\n          \"name\": \"button\",\n          \"type\": \"ImGuiMouseButton\"\n        },\n        {\n          \"name\": \"lock_threshold\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiMouseButton button,float lock_threshold=-1.0f)\",\n      \"call_args\": \"(button,lock_threshold)\",\n      \"cimguiname\": \"igIsMouseDragPastThreshold\",\n      \"defaults\": {\n        \"lock_threshold\": \"-1.0f\"\n      },\n      \"funcname\": \"IsMouseDragPastThreshold\",\n      \"location\": \"imgui_internal:3185\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igIsMouseDragPastThreshold\",\n      \"ret\": \"bool\",\n      \"signature\": \"(ImGuiMouseButton,float)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igIsMouseDragging\": [\n    {\n      \"args\": \"(ImGuiMouseButton button,float lock_threshold)\",\n      \"argsT\": [\n        {\n          \"name\": \"button\",\n          \"type\": \"ImGuiMouseButton\"\n        },\n        {\n          \"name\": \"lock_threshold\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiMouseButton button,float lock_threshold=-1.0f)\",\n      \"call_args\": \"(button,lock_threshold)\",\n      \"cimguiname\": \"igIsMouseDragging\",\n      \"defaults\": {\n        \"lock_threshold\": \"-1.0f\"\n      },\n      \"funcname\": \"IsMouseDragging\",\n      \"location\": \"imgui:1018\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igIsMouseDragging\",\n      \"ret\": \"bool\",\n      \"signature\": \"(ImGuiMouseButton,float)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igIsMouseHoveringRect\": [\n    {\n      \"args\": \"(const ImVec2 r_min,const ImVec2 r_max,bool clip)\",\n      \"argsT\": [\n        {\n          \"name\": \"r_min\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"r_max\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"clip\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImVec2& r_min,const ImVec2& r_max,bool clip=true)\",\n      \"call_args\": \"(r_min,r_max,clip)\",\n      \"cimguiname\": \"igIsMouseHoveringRect\",\n      \"defaults\": {\n        \"clip\": \"true\"\n      },\n      \"funcname\": \"IsMouseHoveringRect\",\n      \"location\": \"imgui:1013\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igIsMouseHoveringRect\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const ImVec2,const ImVec2,bool)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igIsMouseKey\": [\n    {\n      \"args\": \"(ImGuiKey key)\",\n      \"argsT\": [\n        {\n          \"name\": \"key\",\n          \"type\": \"ImGuiKey\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiKey key)\",\n      \"call_args\": \"(key)\",\n      \"cimguiname\": \"igIsMouseKey\",\n      \"defaults\": {},\n      \"funcname\": \"IsMouseKey\",\n      \"location\": \"imgui_internal:3168\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igIsMouseKey\",\n      \"ret\": \"bool\",\n      \"signature\": \"(ImGuiKey)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igIsMousePosValid\": [\n    {\n      \"args\": \"(const ImVec2* mouse_pos)\",\n      \"argsT\": [\n        {\n          \"name\": \"mouse_pos\",\n          \"type\": \"const ImVec2*\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImVec2* mouse_pos=((void*)0))\",\n      \"call_args\": \"(mouse_pos)\",\n      \"cimguiname\": \"igIsMousePosValid\",\n      \"defaults\": {\n        \"mouse_pos\": \"NULL\"\n      },\n      \"funcname\": \"IsMousePosValid\",\n      \"location\": \"imgui:1014\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igIsMousePosValid\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const ImVec2*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igIsMouseReleased\": [\n    {\n      \"args\": \"(ImGuiMouseButton button)\",\n      \"argsT\": [\n        {\n          \"name\": \"button\",\n          \"type\": \"ImGuiMouseButton\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiMouseButton button)\",\n      \"call_args\": \"(button)\",\n      \"cimguiname\": \"igIsMouseReleased\",\n      \"defaults\": {},\n      \"funcname\": \"IsMouseReleased\",\n      \"location\": \"imgui:1010\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igIsMouseReleased_Nil\",\n      \"ret\": \"bool\",\n      \"signature\": \"(ImGuiMouseButton)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(ImGuiMouseButton button,ImGuiID owner_id)\",\n      \"argsT\": [\n        {\n          \"name\": \"button\",\n          \"type\": \"ImGuiMouseButton\"\n        },\n        {\n          \"name\": \"owner_id\",\n          \"type\": \"ImGuiID\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiMouseButton button,ImGuiID owner_id)\",\n      \"call_args\": \"(button,owner_id)\",\n      \"cimguiname\": \"igIsMouseReleased\",\n      \"defaults\": {},\n      \"funcname\": \"IsMouseReleased\",\n      \"location\": \"imgui_internal:3224\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igIsMouseReleased_ID\",\n      \"ret\": \"bool\",\n      \"signature\": \"(ImGuiMouseButton,ImGuiID)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igIsNamedKey\": [\n    {\n      \"args\": \"(ImGuiKey key)\",\n      \"argsT\": [\n        {\n          \"name\": \"key\",\n          \"type\": \"ImGuiKey\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiKey key)\",\n      \"call_args\": \"(key)\",\n      \"cimguiname\": \"igIsNamedKey\",\n      \"defaults\": {},\n      \"funcname\": \"IsNamedKey\",\n      \"location\": \"imgui_internal:3163\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igIsNamedKey\",\n      \"ret\": \"bool\",\n      \"signature\": \"(ImGuiKey)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igIsNamedKeyOrMod\": [\n    {\n      \"args\": \"(ImGuiKey key)\",\n      \"argsT\": [\n        {\n          \"name\": \"key\",\n          \"type\": \"ImGuiKey\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiKey key)\",\n      \"call_args\": \"(key)\",\n      \"cimguiname\": \"igIsNamedKeyOrMod\",\n      \"defaults\": {},\n      \"funcname\": \"IsNamedKeyOrMod\",\n      \"location\": \"imgui_internal:3164\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igIsNamedKeyOrMod\",\n      \"ret\": \"bool\",\n      \"signature\": \"(ImGuiKey)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igIsPopupOpen\": [\n    {\n      \"args\": \"(const char* str_id,ImGuiPopupFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"str_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiPopupFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* str_id,ImGuiPopupFlags flags=0)\",\n      \"call_args\": \"(str_id,flags)\",\n      \"cimguiname\": \"igIsPopupOpen\",\n      \"defaults\": {\n        \"flags\": \"0\"\n      },\n      \"funcname\": \"IsPopupOpen\",\n      \"location\": \"imgui:791\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igIsPopupOpen_Str\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*,ImGuiPopupFlags)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(ImGuiID id,ImGuiPopupFlags popup_flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"id\",\n          \"type\": \"ImGuiID\"\n        },\n        {\n          \"name\": \"popup_flags\",\n          \"type\": \"ImGuiPopupFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiID id,ImGuiPopupFlags popup_flags)\",\n      \"call_args\": \"(id,popup_flags)\",\n      \"cimguiname\": \"igIsPopupOpen\",\n      \"defaults\": {},\n      \"funcname\": \"IsPopupOpen\",\n      \"location\": \"imgui_internal:3114\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igIsPopupOpen_ID\",\n      \"ret\": \"bool\",\n      \"signature\": \"(ImGuiID,ImGuiPopupFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igIsRectVisible\": [\n    {\n      \"args\": \"(const ImVec2 size)\",\n      \"argsT\": [\n        {\n          \"name\": \"size\",\n          \"type\": \"const ImVec2\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImVec2& size)\",\n      \"call_args\": \"(size)\",\n      \"cimguiname\": \"igIsRectVisible\",\n      \"defaults\": {},\n      \"funcname\": \"IsRectVisible\",\n      \"location\": \"imgui:948\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igIsRectVisible_Nil\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const ImVec2)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const ImVec2 rect_min,const ImVec2 rect_max)\",\n      \"argsT\": [\n        {\n          \"name\": \"rect_min\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"rect_max\",\n          \"type\": \"const ImVec2\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImVec2& rect_min,const ImVec2& rect_max)\",\n      \"call_args\": \"(rect_min,rect_max)\",\n      \"cimguiname\": \"igIsRectVisible\",\n      \"defaults\": {},\n      \"funcname\": \"IsRectVisible\",\n      \"location\": \"imgui:949\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igIsRectVisible_Vec2\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const ImVec2,const ImVec2)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igIsWindowAbove\": [\n    {\n      \"args\": \"(ImGuiWindow* potential_above,ImGuiWindow* potential_below)\",\n      \"argsT\": [\n        {\n          \"name\": \"potential_above\",\n          \"type\": \"ImGuiWindow*\"\n        },\n        {\n          \"name\": \"potential_below\",\n          \"type\": \"ImGuiWindow*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiWindow* potential_above,ImGuiWindow* potential_below)\",\n      \"call_args\": \"(potential_above,potential_below)\",\n      \"cimguiname\": \"igIsWindowAbove\",\n      \"defaults\": {},\n      \"funcname\": \"IsWindowAbove\",\n      \"location\": \"imgui_internal:2978\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igIsWindowAbove\",\n      \"ret\": \"bool\",\n      \"signature\": \"(ImGuiWindow*,ImGuiWindow*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igIsWindowAppearing\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igIsWindowAppearing\",\n      \"defaults\": {},\n      \"funcname\": \"IsWindowAppearing\",\n      \"location\": \"imgui:397\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igIsWindowAppearing\",\n      \"ret\": \"bool\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igIsWindowChildOf\": [\n    {\n      \"args\": \"(ImGuiWindow* window,ImGuiWindow* potential_parent,bool popup_hierarchy)\",\n      \"argsT\": [\n        {\n          \"name\": \"window\",\n          \"type\": \"ImGuiWindow*\"\n        },\n        {\n          \"name\": \"potential_parent\",\n          \"type\": \"ImGuiWindow*\"\n        },\n        {\n          \"name\": \"popup_hierarchy\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiWindow* window,ImGuiWindow* potential_parent,bool popup_hierarchy)\",\n      \"call_args\": \"(window,potential_parent,popup_hierarchy)\",\n      \"cimguiname\": \"igIsWindowChildOf\",\n      \"defaults\": {},\n      \"funcname\": \"IsWindowChildOf\",\n      \"location\": \"imgui_internal:2976\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igIsWindowChildOf\",\n      \"ret\": \"bool\",\n      \"signature\": \"(ImGuiWindow*,ImGuiWindow*,bool)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igIsWindowCollapsed\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igIsWindowCollapsed\",\n      \"defaults\": {},\n      \"funcname\": \"IsWindowCollapsed\",\n      \"location\": \"imgui:398\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igIsWindowCollapsed\",\n      \"ret\": \"bool\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igIsWindowContentHoverable\": [\n    {\n      \"args\": \"(ImGuiWindow* window,ImGuiHoveredFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"window\",\n          \"type\": \"ImGuiWindow*\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiHoveredFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiWindow* window,ImGuiHoveredFlags flags=0)\",\n      \"call_args\": \"(window,flags)\",\n      \"cimguiname\": \"igIsWindowContentHoverable\",\n      \"defaults\": {\n        \"flags\": \"0\"\n      },\n      \"funcname\": \"IsWindowContentHoverable\",\n      \"location\": \"imgui_internal:3086\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igIsWindowContentHoverable\",\n      \"ret\": \"bool\",\n      \"signature\": \"(ImGuiWindow*,ImGuiHoveredFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igIsWindowFocused\": [\n    {\n      \"args\": \"(ImGuiFocusedFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiFocusedFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiFocusedFlags flags=0)\",\n      \"call_args\": \"(flags)\",\n      \"cimguiname\": \"igIsWindowFocused\",\n      \"defaults\": {\n        \"flags\": \"0\"\n      },\n      \"funcname\": \"IsWindowFocused\",\n      \"location\": \"imgui:399\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igIsWindowFocused\",\n      \"ret\": \"bool\",\n      \"signature\": \"(ImGuiFocusedFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igIsWindowHovered\": [\n    {\n      \"args\": \"(ImGuiHoveredFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiHoveredFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiHoveredFlags flags=0)\",\n      \"call_args\": \"(flags)\",\n      \"cimguiname\": \"igIsWindowHovered\",\n      \"defaults\": {\n        \"flags\": \"0\"\n      },\n      \"funcname\": \"IsWindowHovered\",\n      \"location\": \"imgui:400\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igIsWindowHovered\",\n      \"ret\": \"bool\",\n      \"signature\": \"(ImGuiHoveredFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igIsWindowNavFocusable\": [\n    {\n      \"args\": \"(ImGuiWindow* window)\",\n      \"argsT\": [\n        {\n          \"name\": \"window\",\n          \"type\": \"ImGuiWindow*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiWindow* window)\",\n      \"call_args\": \"(window)\",\n      \"cimguiname\": \"igIsWindowNavFocusable\",\n      \"defaults\": {},\n      \"funcname\": \"IsWindowNavFocusable\",\n      \"location\": \"imgui_internal:2979\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igIsWindowNavFocusable\",\n      \"ret\": \"bool\",\n      \"signature\": \"(ImGuiWindow*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igIsWindowWithinBeginStackOf\": [\n    {\n      \"args\": \"(ImGuiWindow* window,ImGuiWindow* potential_parent)\",\n      \"argsT\": [\n        {\n          \"name\": \"window\",\n          \"type\": \"ImGuiWindow*\"\n        },\n        {\n          \"name\": \"potential_parent\",\n          \"type\": \"ImGuiWindow*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiWindow* window,ImGuiWindow* potential_parent)\",\n      \"call_args\": \"(window,potential_parent)\",\n      \"cimguiname\": \"igIsWindowWithinBeginStackOf\",\n      \"defaults\": {},\n      \"funcname\": \"IsWindowWithinBeginStackOf\",\n      \"location\": \"imgui_internal:2977\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igIsWindowWithinBeginStackOf\",\n      \"ret\": \"bool\",\n      \"signature\": \"(ImGuiWindow*,ImGuiWindow*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igItemAdd\": [\n    {\n      \"args\": \"(const ImRect bb,ImGuiID id,const ImRect* nav_bb,ImGuiItemFlags extra_flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"bb\",\n          \"type\": \"const ImRect\"\n        },\n        {\n          \"name\": \"id\",\n          \"type\": \"ImGuiID\"\n        },\n        {\n          \"name\": \"nav_bb\",\n          \"type\": \"const ImRect*\"\n        },\n        {\n          \"name\": \"extra_flags\",\n          \"type\": \"ImGuiItemFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImRect& bb,ImGuiID id,const ImRect* nav_bb=((void*)0),ImGuiItemFlags extra_flags=0)\",\n      \"call_args\": \"(bb,id,nav_bb,extra_flags)\",\n      \"cimguiname\": \"igItemAdd\",\n      \"defaults\": {\n        \"extra_flags\": \"0\",\n        \"nav_bb\": \"NULL\"\n      },\n      \"funcname\": \"ItemAdd\",\n      \"location\": \"imgui_internal:3084\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igItemAdd\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const ImRect,ImGuiID,const ImRect*,ImGuiItemFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igItemHoverable\": [\n    {\n      \"args\": \"(const ImRect bb,ImGuiID id,ImGuiItemFlags item_flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"bb\",\n          \"type\": \"const ImRect\"\n        },\n        {\n          \"name\": \"id\",\n          \"type\": \"ImGuiID\"\n        },\n        {\n          \"name\": \"item_flags\",\n          \"type\": \"ImGuiItemFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImRect& bb,ImGuiID id,ImGuiItemFlags item_flags)\",\n      \"call_args\": \"(bb,id,item_flags)\",\n      \"cimguiname\": \"igItemHoverable\",\n      \"defaults\": {},\n      \"funcname\": \"ItemHoverable\",\n      \"location\": \"imgui_internal:3085\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igItemHoverable\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const ImRect,ImGuiID,ImGuiItemFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igItemSize\": [\n    {\n      \"args\": \"(const ImVec2 size,float text_baseline_y)\",\n      \"argsT\": [\n        {\n          \"name\": \"size\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"text_baseline_y\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImVec2& size,float text_baseline_y=-1.0f)\",\n      \"call_args\": \"(size,text_baseline_y)\",\n      \"cimguiname\": \"igItemSize\",\n      \"defaults\": {\n        \"text_baseline_y\": \"-1.0f\"\n      },\n      \"funcname\": \"ItemSize\",\n      \"location\": \"imgui_internal:3082\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igItemSize_Vec2\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImVec2,float)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const ImRect bb,float text_baseline_y)\",\n      \"argsT\": [\n        {\n          \"name\": \"bb\",\n          \"type\": \"const ImRect\"\n        },\n        {\n          \"name\": \"text_baseline_y\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImRect& bb,float text_baseline_y=-1.0f)\",\n      \"call_args\": \"(bb,text_baseline_y)\",\n      \"cimguiname\": \"igItemSize\",\n      \"defaults\": {\n        \"text_baseline_y\": \"-1.0f\"\n      },\n      \"funcname\": \"ItemSize\",\n      \"location\": \"imgui_internal:3083\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igItemSize_Rect\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImRect,float)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igKeepAliveID\": [\n    {\n      \"args\": \"(ImGuiID id)\",\n      \"argsT\": [\n        {\n          \"name\": \"id\",\n          \"type\": \"ImGuiID\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiID id)\",\n      \"call_args\": \"(id)\",\n      \"cimguiname\": \"igKeepAliveID\",\n      \"defaults\": {},\n      \"funcname\": \"KeepAliveID\",\n      \"location\": \"imgui_internal:3075\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igKeepAliveID\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiID)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igLabelText\": [\n    {\n      \"args\": \"(const char* label,const char* fmt,...)\",\n      \"argsT\": [\n        {\n          \"name\": \"label\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"fmt\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"...\",\n          \"type\": \"...\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label,const char* fmt,...)\",\n      \"call_args\": \"(label,fmt,...)\",\n      \"cimguiname\": \"igLabelText\",\n      \"defaults\": {},\n      \"funcname\": \"LabelText\",\n      \"isvararg\": \"...)\",\n      \"location\": \"imgui:541\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igLabelText\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const char*,...)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igLabelTextV\": [\n    {\n      \"args\": \"(const char* label,const char* fmt,va_list args)\",\n      \"argsT\": [\n        {\n          \"name\": \"label\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"fmt\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"args\",\n          \"type\": \"va_list\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label,const char* fmt,va_list args)\",\n      \"call_args\": \"(label,fmt,args)\",\n      \"cimguiname\": \"igLabelTextV\",\n      \"defaults\": {},\n      \"funcname\": \"LabelTextV\",\n      \"location\": \"imgui:542\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igLabelTextV\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const char*,va_list)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igListBox\": [\n    {\n      \"args\": \"(const char* label,int* current_item,const char* const items[],int items_count,int height_in_items)\",\n      \"argsT\": [\n        {\n          \"name\": \"label\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"current_item\",\n          \"type\": \"int*\"\n        },\n        {\n          \"name\": \"items\",\n          \"type\": \"const char* const[]\"\n        },\n        {\n          \"name\": \"items_count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"height_in_items\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label,int* current_item,const char* const items[],int items_count,int height_in_items=-1)\",\n      \"call_args\": \"(label,current_item,items,items_count,height_in_items)\",\n      \"cimguiname\": \"igListBox\",\n      \"defaults\": {\n        \"height_in_items\": \"-1\"\n      },\n      \"funcname\": \"ListBox\",\n      \"location\": \"imgui:703\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igListBox_Str_arr\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*,int*,const char* const[],int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label,int* current_item,const char*(*getter)(void* user_data,int idx),void* user_data,int items_count,int height_in_items)\",\n      \"argsT\": [\n        {\n          \"name\": \"label\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"current_item\",\n          \"type\": \"int*\"\n        },\n        {\n          \"name\": \"getter\",\n          \"ret\": \"const char*\",\n          \"signature\": \"(void* user_data,int idx)\",\n          \"type\": \"const char*(*)(void* user_data,int idx)\"\n        },\n        {\n          \"name\": \"user_data\",\n          \"type\": \"void*\"\n        },\n        {\n          \"name\": \"items_count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"height_in_items\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label,int* current_item,const char*(*getter)(void* user_data,int idx),void* user_data,int items_count,int height_in_items=-1)\",\n      \"call_args\": \"(label,current_item,getter,user_data,items_count,height_in_items)\",\n      \"cimguiname\": \"igListBox\",\n      \"defaults\": {\n        \"height_in_items\": \"-1\"\n      },\n      \"funcname\": \"ListBox\",\n      \"location\": \"imgui:704\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igListBox_FnStrPtr\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*,int*,const char*(*)(void*,int),void*,int,int)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igLoadIniSettingsFromDisk\": [\n    {\n      \"args\": \"(const char* ini_filename)\",\n      \"argsT\": [\n        {\n          \"name\": \"ini_filename\",\n          \"type\": \"const char*\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* ini_filename)\",\n      \"call_args\": \"(ini_filename)\",\n      \"cimguiname\": \"igLoadIniSettingsFromDisk\",\n      \"defaults\": {},\n      \"funcname\": \"LoadIniSettingsFromDisk\",\n      \"location\": \"imgui:1034\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igLoadIniSettingsFromDisk\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igLoadIniSettingsFromMemory\": [\n    {\n      \"args\": \"(const char* ini_data,size_t ini_size)\",\n      \"argsT\": [\n        {\n          \"name\": \"ini_data\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"ini_size\",\n          \"type\": \"size_t\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* ini_data,size_t ini_size=0)\",\n      \"call_args\": \"(ini_data,ini_size)\",\n      \"cimguiname\": \"igLoadIniSettingsFromMemory\",\n      \"defaults\": {\n        \"ini_size\": \"0\"\n      },\n      \"funcname\": \"LoadIniSettingsFromMemory\",\n      \"location\": \"imgui:1035\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igLoadIniSettingsFromMemory\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,size_t)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igLocalizeGetMsg\": [\n    {\n      \"args\": \"(ImGuiLocKey key)\",\n      \"argsT\": [\n        {\n          \"name\": \"key\",\n          \"type\": \"ImGuiLocKey\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiLocKey key)\",\n      \"call_args\": \"(key)\",\n      \"cimguiname\": \"igLocalizeGetMsg\",\n      \"defaults\": {},\n      \"funcname\": \"LocalizeGetMsg\",\n      \"location\": \"imgui_internal:3049\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igLocalizeGetMsg\",\n      \"ret\": \"const char*\",\n      \"signature\": \"(ImGuiLocKey)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igLocalizeRegisterEntries\": [\n    {\n      \"args\": \"(const ImGuiLocEntry* entries,int count)\",\n      \"argsT\": [\n        {\n          \"name\": \"entries\",\n          \"type\": \"const ImGuiLocEntry*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImGuiLocEntry* entries,int count)\",\n      \"call_args\": \"(entries,count)\",\n      \"cimguiname\": \"igLocalizeRegisterEntries\",\n      \"defaults\": {},\n      \"funcname\": \"LocalizeRegisterEntries\",\n      \"location\": \"imgui_internal:3048\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igLocalizeRegisterEntries\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImGuiLocEntry*,int)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igLogBegin\": [\n    {\n      \"args\": \"(ImGuiLogFlags flags,int auto_open_depth)\",\n      \"argsT\": [\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiLogFlags\"\n        },\n        {\n          \"name\": \"auto_open_depth\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiLogFlags flags,int auto_open_depth)\",\n      \"call_args\": \"(flags,auto_open_depth)\",\n      \"cimguiname\": \"igLogBegin\",\n      \"defaults\": {},\n      \"funcname\": \"LogBegin\",\n      \"location\": \"imgui_internal:3100\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igLogBegin\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiLogFlags,int)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igLogButtons\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igLogButtons\",\n      \"defaults\": {},\n      \"funcname\": \"LogButtons\",\n      \"location\": \"imgui:876\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igLogButtons\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igLogFinish\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igLogFinish\",\n      \"defaults\": {},\n      \"funcname\": \"LogFinish\",\n      \"location\": \"imgui:875\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igLogFinish\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igLogRenderedText\": [\n    {\n      \"args\": \"(const ImVec2* ref_pos,const char* text,const char* text_end)\",\n      \"argsT\": [\n        {\n          \"name\": \"ref_pos\",\n          \"type\": \"const ImVec2*\"\n        },\n        {\n          \"name\": \"text\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"text_end\",\n          \"type\": \"const char*\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImVec2* ref_pos,const char* text,const char* text_end=((void*)0))\",\n      \"call_args\": \"(ref_pos,text,text_end)\",\n      \"cimguiname\": \"igLogRenderedText\",\n      \"defaults\": {\n        \"text_end\": \"NULL\"\n      },\n      \"funcname\": \"LogRenderedText\",\n      \"location\": \"imgui_internal:3102\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igLogRenderedText\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImVec2*,const char*,const char*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igLogSetNextTextDecoration\": [\n    {\n      \"args\": \"(const char* prefix,const char* suffix)\",\n      \"argsT\": [\n        {\n          \"name\": \"prefix\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"suffix\",\n          \"type\": \"const char*\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* prefix,const char* suffix)\",\n      \"call_args\": \"(prefix,suffix)\",\n      \"cimguiname\": \"igLogSetNextTextDecoration\",\n      \"defaults\": {},\n      \"funcname\": \"LogSetNextTextDecoration\",\n      \"location\": \"imgui_internal:3103\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igLogSetNextTextDecoration\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const char*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igLogText\": [\n    {\n      \"args\": \"(const char* fmt,...)\",\n      \"argsT\": [\n        {\n          \"name\": \"fmt\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"...\",\n          \"type\": \"...\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* fmt, ...)\",\n      \"call_args\": \"(fmt,...)\",\n      \"cimguiname\": \"igLogText\",\n      \"defaults\": {},\n      \"funcname\": \"LogText\",\n      \"isvararg\": \"...)\",\n      \"location\": \"imgui:877\",\n      \"manual\": true,\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igLogText\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,...)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igLogTextV\": [\n    {\n      \"args\": \"(const char* fmt,va_list args)\",\n      \"argsT\": [\n        {\n          \"name\": \"fmt\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"args\",\n          \"type\": \"va_list\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* fmt,va_list args)\",\n      \"call_args\": \"(fmt,args)\",\n      \"cimguiname\": \"igLogTextV\",\n      \"defaults\": {},\n      \"funcname\": \"LogTextV\",\n      \"location\": \"imgui:878\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igLogTextV\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,va_list)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igLogToBuffer\": [\n    {\n      \"args\": \"(int auto_open_depth)\",\n      \"argsT\": [\n        {\n          \"name\": \"auto_open_depth\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(int auto_open_depth=-1)\",\n      \"call_args\": \"(auto_open_depth)\",\n      \"cimguiname\": \"igLogToBuffer\",\n      \"defaults\": {\n        \"auto_open_depth\": \"-1\"\n      },\n      \"funcname\": \"LogToBuffer\",\n      \"location\": \"imgui_internal:3101\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igLogToBuffer\",\n      \"ret\": \"void\",\n      \"signature\": \"(int)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igLogToClipboard\": [\n    {\n      \"args\": \"(int auto_open_depth)\",\n      \"argsT\": [\n        {\n          \"name\": \"auto_open_depth\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(int auto_open_depth=-1)\",\n      \"call_args\": \"(auto_open_depth)\",\n      \"cimguiname\": \"igLogToClipboard\",\n      \"defaults\": {\n        \"auto_open_depth\": \"-1\"\n      },\n      \"funcname\": \"LogToClipboard\",\n      \"location\": \"imgui:874\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igLogToClipboard\",\n      \"ret\": \"void\",\n      \"signature\": \"(int)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igLogToFile\": [\n    {\n      \"args\": \"(int auto_open_depth,const char* filename)\",\n      \"argsT\": [\n        {\n          \"name\": \"auto_open_depth\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"filename\",\n          \"type\": \"const char*\"\n        }\n      ],\n      \"argsoriginal\": \"(int auto_open_depth=-1,const char* filename=((void*)0))\",\n      \"call_args\": \"(auto_open_depth,filename)\",\n      \"cimguiname\": \"igLogToFile\",\n      \"defaults\": {\n        \"auto_open_depth\": \"-1\",\n        \"filename\": \"NULL\"\n      },\n      \"funcname\": \"LogToFile\",\n      \"location\": \"imgui:873\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igLogToFile\",\n      \"ret\": \"void\",\n      \"signature\": \"(int,const char*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igLogToTTY\": [\n    {\n      \"args\": \"(int auto_open_depth)\",\n      \"argsT\": [\n        {\n          \"name\": \"auto_open_depth\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(int auto_open_depth=-1)\",\n      \"call_args\": \"(auto_open_depth)\",\n      \"cimguiname\": \"igLogToTTY\",\n      \"defaults\": {\n        \"auto_open_depth\": \"-1\"\n      },\n      \"funcname\": \"LogToTTY\",\n      \"location\": \"imgui:872\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igLogToTTY\",\n      \"ret\": \"void\",\n      \"signature\": \"(int)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igMarkIniSettingsDirty\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igMarkIniSettingsDirty\",\n      \"defaults\": {},\n      \"funcname\": \"MarkIniSettingsDirty\",\n      \"location\": \"imgui_internal:3034\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igMarkIniSettingsDirty_Nil\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(ImGuiWindow* window)\",\n      \"argsT\": [\n        {\n          \"name\": \"window\",\n          \"type\": \"ImGuiWindow*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiWindow* window)\",\n      \"call_args\": \"(window)\",\n      \"cimguiname\": \"igMarkIniSettingsDirty\",\n      \"defaults\": {},\n      \"funcname\": \"MarkIniSettingsDirty\",\n      \"location\": \"imgui_internal:3035\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igMarkIniSettingsDirty_WindowPtr\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiWindow*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igMarkItemEdited\": [\n    {\n      \"args\": \"(ImGuiID id)\",\n      \"argsT\": [\n        {\n          \"name\": \"id\",\n          \"type\": \"ImGuiID\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiID id)\",\n      \"call_args\": \"(id)\",\n      \"cimguiname\": \"igMarkItemEdited\",\n      \"defaults\": {},\n      \"funcname\": \"MarkItemEdited\",\n      \"location\": \"imgui_internal:3076\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igMarkItemEdited\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiID)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igMemAlloc\": [\n    {\n      \"args\": \"(size_t size)\",\n      \"argsT\": [\n        {\n          \"name\": \"size\",\n          \"type\": \"size_t\"\n        }\n      ],\n      \"argsoriginal\": \"(size_t size)\",\n      \"call_args\": \"(size)\",\n      \"cimguiname\": \"igMemAlloc\",\n      \"defaults\": {},\n      \"funcname\": \"MemAlloc\",\n      \"location\": \"imgui:1056\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igMemAlloc\",\n      \"ret\": \"void*\",\n      \"signature\": \"(size_t)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igMemFree\": [\n    {\n      \"args\": \"(void* ptr)\",\n      \"argsT\": [\n        {\n          \"name\": \"ptr\",\n          \"type\": \"void*\"\n        }\n      ],\n      \"argsoriginal\": \"(void* ptr)\",\n      \"call_args\": \"(ptr)\",\n      \"cimguiname\": \"igMemFree\",\n      \"defaults\": {},\n      \"funcname\": \"MemFree\",\n      \"location\": \"imgui:1057\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igMemFree\",\n      \"ret\": \"void\",\n      \"signature\": \"(void*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igMenuItem\": [\n    {\n      \"args\": \"(const char* label,const char* shortcut,bool selected,bool enabled)\",\n      \"argsT\": [\n        {\n          \"name\": \"label\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"shortcut\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"selected\",\n          \"type\": \"bool\"\n        },\n        {\n          \"name\": \"enabled\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label,const char* shortcut=((void*)0),bool selected=false,bool enabled=true)\",\n      \"call_args\": \"(label,shortcut,selected,enabled)\",\n      \"cimguiname\": \"igMenuItem\",\n      \"defaults\": {\n        \"enabled\": \"true\",\n        \"selected\": \"false\",\n        \"shortcut\": \"NULL\"\n      },\n      \"funcname\": \"MenuItem\",\n      \"location\": \"imgui:731\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igMenuItem_Bool\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*,const char*,bool,bool)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label,const char* shortcut,bool* p_selected,bool enabled)\",\n      \"argsT\": [\n        {\n          \"name\": \"label\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"shortcut\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"p_selected\",\n          \"type\": \"bool*\"\n        },\n        {\n          \"name\": \"enabled\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label,const char* shortcut,bool* p_selected,bool enabled=true)\",\n      \"call_args\": \"(label,shortcut,p_selected,enabled)\",\n      \"cimguiname\": \"igMenuItem\",\n      \"defaults\": {\n        \"enabled\": \"true\"\n      },\n      \"funcname\": \"MenuItem\",\n      \"location\": \"imgui:732\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igMenuItem_BoolPtr\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*,const char*,bool*,bool)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igMenuItemEx\": [\n    {\n      \"args\": \"(const char* label,const char* icon,const char* shortcut,bool selected,bool enabled)\",\n      \"argsT\": [\n        {\n          \"name\": \"label\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"icon\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"shortcut\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"selected\",\n          \"type\": \"bool\"\n        },\n        {\n          \"name\": \"enabled\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label,const char* icon,const char* shortcut=((void*)0),bool selected=false,bool enabled=true)\",\n      \"call_args\": \"(label,icon,shortcut,selected,enabled)\",\n      \"cimguiname\": \"igMenuItemEx\",\n      \"defaults\": {\n        \"enabled\": \"true\",\n        \"selected\": \"false\",\n        \"shortcut\": \"NULL\"\n      },\n      \"funcname\": \"MenuItemEx\",\n      \"location\": \"imgui_internal:3129\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igMenuItemEx\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*,const char*,const char*,bool,bool)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igMouseButtonToKey\": [\n    {\n      \"args\": \"(ImGuiMouseButton button)\",\n      \"argsT\": [\n        {\n          \"name\": \"button\",\n          \"type\": \"ImGuiMouseButton\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiMouseButton button)\",\n      \"call_args\": \"(button)\",\n      \"cimguiname\": \"igMouseButtonToKey\",\n      \"defaults\": {},\n      \"funcname\": \"MouseButtonToKey\",\n      \"location\": \"imgui_internal:3184\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igMouseButtonToKey\",\n      \"ret\": \"ImGuiKey\",\n      \"signature\": \"(ImGuiMouseButton)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igMultiSelectAddSetAll\": [\n    {\n      \"args\": \"(ImGuiMultiSelectTempData* ms,bool selected)\",\n      \"argsT\": [\n        {\n          \"name\": \"ms\",\n          \"type\": \"ImGuiMultiSelectTempData*\"\n        },\n        {\n          \"name\": \"selected\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiMultiSelectTempData* ms,bool selected)\",\n      \"call_args\": \"(ms,selected)\",\n      \"cimguiname\": \"igMultiSelectAddSetAll\",\n      \"defaults\": {},\n      \"funcname\": \"MultiSelectAddSetAll\",\n      \"location\": \"imgui_internal:3280\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igMultiSelectAddSetAll\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiMultiSelectTempData*,bool)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igMultiSelectAddSetRange\": [\n    {\n      \"args\": \"(ImGuiMultiSelectTempData* ms,bool selected,int range_dir,ImGuiSelectionUserData first_item,ImGuiSelectionUserData last_item)\",\n      \"argsT\": [\n        {\n          \"name\": \"ms\",\n          \"type\": \"ImGuiMultiSelectTempData*\"\n        },\n        {\n          \"name\": \"selected\",\n          \"type\": \"bool\"\n        },\n        {\n          \"name\": \"range_dir\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"first_item\",\n          \"type\": \"ImGuiSelectionUserData\"\n        },\n        {\n          \"name\": \"last_item\",\n          \"type\": \"ImGuiSelectionUserData\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiMultiSelectTempData* ms,bool selected,int range_dir,ImGuiSelectionUserData first_item,ImGuiSelectionUserData last_item)\",\n      \"call_args\": \"(ms,selected,range_dir,first_item,last_item)\",\n      \"cimguiname\": \"igMultiSelectAddSetRange\",\n      \"defaults\": {},\n      \"funcname\": \"MultiSelectAddSetRange\",\n      \"location\": \"imgui_internal:3281\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igMultiSelectAddSetRange\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiMultiSelectTempData*,bool,int,ImGuiSelectionUserData,ImGuiSelectionUserData)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igMultiSelectItemFooter\": [\n    {\n      \"args\": \"(ImGuiID id,bool* p_selected,bool* p_pressed)\",\n      \"argsT\": [\n        {\n          \"name\": \"id\",\n          \"type\": \"ImGuiID\"\n        },\n        {\n          \"name\": \"p_selected\",\n          \"type\": \"bool*\"\n        },\n        {\n          \"name\": \"p_pressed\",\n          \"type\": \"bool*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiID id,bool* p_selected,bool* p_pressed)\",\n      \"call_args\": \"(id,p_selected,p_pressed)\",\n      \"cimguiname\": \"igMultiSelectItemFooter\",\n      \"defaults\": {},\n      \"funcname\": \"MultiSelectItemFooter\",\n      \"location\": \"imgui_internal:3279\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igMultiSelectItemFooter\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiID,bool*,bool*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igMultiSelectItemHeader\": [\n    {\n      \"args\": \"(ImGuiID id,bool* p_selected,ImGuiButtonFlags* p_button_flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"id\",\n          \"type\": \"ImGuiID\"\n        },\n        {\n          \"name\": \"p_selected\",\n          \"type\": \"bool*\"\n        },\n        {\n          \"name\": \"p_button_flags\",\n          \"type\": \"ImGuiButtonFlags*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiID id,bool* p_selected,ImGuiButtonFlags* p_button_flags)\",\n      \"call_args\": \"(id,p_selected,p_button_flags)\",\n      \"cimguiname\": \"igMultiSelectItemHeader\",\n      \"defaults\": {},\n      \"funcname\": \"MultiSelectItemHeader\",\n      \"location\": \"imgui_internal:3278\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igMultiSelectItemHeader\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiID,bool*,ImGuiButtonFlags*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igNavClearPreferredPosForAxis\": [\n    {\n      \"args\": \"(ImGuiAxis axis)\",\n      \"argsT\": [\n        {\n          \"name\": \"axis\",\n          \"type\": \"ImGuiAxis\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiAxis axis)\",\n      \"call_args\": \"(axis)\",\n      \"cimguiname\": \"igNavClearPreferredPosForAxis\",\n      \"defaults\": {},\n      \"funcname\": \"NavClearPreferredPosForAxis\",\n      \"location\": \"imgui_internal:3148\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igNavClearPreferredPosForAxis\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiAxis)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igNavHighlightActivated\": [\n    {\n      \"args\": \"(ImGuiID id)\",\n      \"argsT\": [\n        {\n          \"name\": \"id\",\n          \"type\": \"ImGuiID\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiID id)\",\n      \"call_args\": \"(id)\",\n      \"cimguiname\": \"igNavHighlightActivated\",\n      \"defaults\": {},\n      \"funcname\": \"NavHighlightActivated\",\n      \"location\": \"imgui_internal:3147\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igNavHighlightActivated\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiID)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igNavInitRequestApplyResult\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igNavInitRequestApplyResult\",\n      \"defaults\": {},\n      \"funcname\": \"NavInitRequestApplyResult\",\n      \"location\": \"imgui_internal:3138\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igNavInitRequestApplyResult\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igNavInitWindow\": [\n    {\n      \"args\": \"(ImGuiWindow* window,bool force_reinit)\",\n      \"argsT\": [\n        {\n          \"name\": \"window\",\n          \"type\": \"ImGuiWindow*\"\n        },\n        {\n          \"name\": \"force_reinit\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiWindow* window,bool force_reinit)\",\n      \"call_args\": \"(window,force_reinit)\",\n      \"cimguiname\": \"igNavInitWindow\",\n      \"defaults\": {},\n      \"funcname\": \"NavInitWindow\",\n      \"location\": \"imgui_internal:3137\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igNavInitWindow\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiWindow*,bool)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igNavMoveRequestApplyResult\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igNavMoveRequestApplyResult\",\n      \"defaults\": {},\n      \"funcname\": \"NavMoveRequestApplyResult\",\n      \"location\": \"imgui_internal:3145\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igNavMoveRequestApplyResult\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igNavMoveRequestButNoResultYet\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igNavMoveRequestButNoResultYet\",\n      \"defaults\": {},\n      \"funcname\": \"NavMoveRequestButNoResultYet\",\n      \"location\": \"imgui_internal:3139\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igNavMoveRequestButNoResultYet\",\n      \"ret\": \"bool\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igNavMoveRequestCancel\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igNavMoveRequestCancel\",\n      \"defaults\": {},\n      \"funcname\": \"NavMoveRequestCancel\",\n      \"location\": \"imgui_internal:3144\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igNavMoveRequestCancel\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igNavMoveRequestForward\": [\n    {\n      \"args\": \"(ImGuiDir move_dir,ImGuiDir clip_dir,ImGuiNavMoveFlags move_flags,ImGuiScrollFlags scroll_flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"move_dir\",\n          \"type\": \"ImGuiDir\"\n        },\n        {\n          \"name\": \"clip_dir\",\n          \"type\": \"ImGuiDir\"\n        },\n        {\n          \"name\": \"move_flags\",\n          \"type\": \"ImGuiNavMoveFlags\"\n        },\n        {\n          \"name\": \"scroll_flags\",\n          \"type\": \"ImGuiScrollFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiDir move_dir,ImGuiDir clip_dir,ImGuiNavMoveFlags move_flags,ImGuiScrollFlags scroll_flags)\",\n      \"call_args\": \"(move_dir,clip_dir,move_flags,scroll_flags)\",\n      \"cimguiname\": \"igNavMoveRequestForward\",\n      \"defaults\": {},\n      \"funcname\": \"NavMoveRequestForward\",\n      \"location\": \"imgui_internal:3141\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igNavMoveRequestForward\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiDir,ImGuiDir,ImGuiNavMoveFlags,ImGuiScrollFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igNavMoveRequestResolveWithLastItem\": [\n    {\n      \"args\": \"(ImGuiNavItemData* result)\",\n      \"argsT\": [\n        {\n          \"name\": \"result\",\n          \"type\": \"ImGuiNavItemData*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiNavItemData* result)\",\n      \"call_args\": \"(result)\",\n      \"cimguiname\": \"igNavMoveRequestResolveWithLastItem\",\n      \"defaults\": {},\n      \"funcname\": \"NavMoveRequestResolveWithLastItem\",\n      \"location\": \"imgui_internal:3142\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igNavMoveRequestResolveWithLastItem\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiNavItemData*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igNavMoveRequestResolveWithPastTreeNode\": [\n    {\n      \"args\": \"(ImGuiNavItemData* result,ImGuiTreeNodeStackData* tree_node_data)\",\n      \"argsT\": [\n        {\n          \"name\": \"result\",\n          \"type\": \"ImGuiNavItemData*\"\n        },\n        {\n          \"name\": \"tree_node_data\",\n          \"type\": \"ImGuiTreeNodeStackData*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiNavItemData* result,ImGuiTreeNodeStackData* tree_node_data)\",\n      \"call_args\": \"(result,tree_node_data)\",\n      \"cimguiname\": \"igNavMoveRequestResolveWithPastTreeNode\",\n      \"defaults\": {},\n      \"funcname\": \"NavMoveRequestResolveWithPastTreeNode\",\n      \"location\": \"imgui_internal:3143\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igNavMoveRequestResolveWithPastTreeNode\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiNavItemData*,ImGuiTreeNodeStackData*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igNavMoveRequestSubmit\": [\n    {\n      \"args\": \"(ImGuiDir move_dir,ImGuiDir clip_dir,ImGuiNavMoveFlags move_flags,ImGuiScrollFlags scroll_flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"move_dir\",\n          \"type\": \"ImGuiDir\"\n        },\n        {\n          \"name\": \"clip_dir\",\n          \"type\": \"ImGuiDir\"\n        },\n        {\n          \"name\": \"move_flags\",\n          \"type\": \"ImGuiNavMoveFlags\"\n        },\n        {\n          \"name\": \"scroll_flags\",\n          \"type\": \"ImGuiScrollFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiDir move_dir,ImGuiDir clip_dir,ImGuiNavMoveFlags move_flags,ImGuiScrollFlags scroll_flags)\",\n      \"call_args\": \"(move_dir,clip_dir,move_flags,scroll_flags)\",\n      \"cimguiname\": \"igNavMoveRequestSubmit\",\n      \"defaults\": {},\n      \"funcname\": \"NavMoveRequestSubmit\",\n      \"location\": \"imgui_internal:3140\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igNavMoveRequestSubmit\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiDir,ImGuiDir,ImGuiNavMoveFlags,ImGuiScrollFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igNavMoveRequestTryWrapping\": [\n    {\n      \"args\": \"(ImGuiWindow* window,ImGuiNavMoveFlags move_flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"window\",\n          \"type\": \"ImGuiWindow*\"\n        },\n        {\n          \"name\": \"move_flags\",\n          \"type\": \"ImGuiNavMoveFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiWindow* window,ImGuiNavMoveFlags move_flags)\",\n      \"call_args\": \"(window,move_flags)\",\n      \"cimguiname\": \"igNavMoveRequestTryWrapping\",\n      \"defaults\": {},\n      \"funcname\": \"NavMoveRequestTryWrapping\",\n      \"location\": \"imgui_internal:3146\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igNavMoveRequestTryWrapping\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiWindow*,ImGuiNavMoveFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igNavUpdateCurrentWindowIsScrollPushableX\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igNavUpdateCurrentWindowIsScrollPushableX\",\n      \"defaults\": {},\n      \"funcname\": \"NavUpdateCurrentWindowIsScrollPushableX\",\n      \"location\": \"imgui_internal:3150\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igNavUpdateCurrentWindowIsScrollPushableX\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igNewFrame\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igNewFrame\",\n      \"defaults\": {},\n      \"funcname\": \"NewFrame\",\n      \"location\": \"imgui:336\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igNewFrame\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igNewLine\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igNewLine\",\n      \"defaults\": {},\n      \"funcname\": \"NewLine\",\n      \"location\": \"imgui:497\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igNewLine\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igNextColumn\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igNextColumn\",\n      \"defaults\": {},\n      \"funcname\": \"NextColumn\",\n      \"location\": \"imgui:853\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igNextColumn\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igOpenPopup\": [\n    {\n      \"args\": \"(const char* str_id,ImGuiPopupFlags popup_flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"str_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"popup_flags\",\n          \"type\": \"ImGuiPopupFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* str_id,ImGuiPopupFlags popup_flags=0)\",\n      \"call_args\": \"(str_id,popup_flags)\",\n      \"cimguiname\": \"igOpenPopup\",\n      \"defaults\": {\n        \"popup_flags\": \"0\"\n      },\n      \"funcname\": \"OpenPopup\",\n      \"location\": \"imgui:773\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igOpenPopup_Str\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,ImGuiPopupFlags)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(ImGuiID id,ImGuiPopupFlags popup_flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"id\",\n          \"type\": \"ImGuiID\"\n        },\n        {\n          \"name\": \"popup_flags\",\n          \"type\": \"ImGuiPopupFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiID id,ImGuiPopupFlags popup_flags=0)\",\n      \"call_args\": \"(id,popup_flags)\",\n      \"cimguiname\": \"igOpenPopup\",\n      \"defaults\": {\n        \"popup_flags\": \"0\"\n      },\n      \"funcname\": \"OpenPopup\",\n      \"location\": \"imgui:774\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igOpenPopup_ID\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiID,ImGuiPopupFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igOpenPopupEx\": [\n    {\n      \"args\": \"(ImGuiID id,ImGuiPopupFlags popup_flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"id\",\n          \"type\": \"ImGuiID\"\n        },\n        {\n          \"name\": \"popup_flags\",\n          \"type\": \"ImGuiPopupFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiID id,ImGuiPopupFlags popup_flags=ImGuiPopupFlags_None)\",\n      \"call_args\": \"(id,popup_flags)\",\n      \"cimguiname\": \"igOpenPopupEx\",\n      \"defaults\": {\n        \"popup_flags\": \"ImGuiPopupFlags_None\"\n      },\n      \"funcname\": \"OpenPopupEx\",\n      \"location\": \"imgui_internal:3110\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igOpenPopupEx\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiID,ImGuiPopupFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igOpenPopupOnItemClick\": [\n    {\n      \"args\": \"(const char* str_id,ImGuiPopupFlags popup_flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"str_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"popup_flags\",\n          \"type\": \"ImGuiPopupFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* str_id=((void*)0),ImGuiPopupFlags popup_flags=1)\",\n      \"call_args\": \"(str_id,popup_flags)\",\n      \"cimguiname\": \"igOpenPopupOnItemClick\",\n      \"defaults\": {\n        \"popup_flags\": \"1\",\n        \"str_id\": \"NULL\"\n      },\n      \"funcname\": \"OpenPopupOnItemClick\",\n      \"location\": \"imgui:775\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igOpenPopupOnItemClick\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,ImGuiPopupFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igPlotEx\": [\n    {\n      \"args\": \"(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,const ImVec2 size_arg)\",\n      \"argsT\": [\n        {\n          \"name\": \"plot_type\",\n          \"type\": \"ImGuiPlotType\"\n        },\n        {\n          \"name\": \"label\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"values_getter\",\n          \"ret\": \"float\",\n          \"signature\": \"(void* data,int idx)\",\n          \"type\": \"float(*)(void* data,int idx)\"\n        },\n        {\n          \"name\": \"data\",\n          \"type\": \"void*\"\n        },\n        {\n          \"name\": \"values_count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"values_offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"overlay_text\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"scale_min\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"scale_max\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"size_arg\",\n          \"type\": \"const ImVec2\"\n        }\n      ],\n      \"argsoriginal\": \"(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,const ImVec2& size_arg)\",\n      \"call_args\": \"(plot_type,label,values_getter,data,values_count,values_offset,overlay_text,scale_min,scale_max,size_arg)\",\n      \"cimguiname\": \"igPlotEx\",\n      \"defaults\": {},\n      \"funcname\": \"PlotEx\",\n      \"location\": \"imgui_internal:3467\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igPlotEx\",\n      \"ret\": \"int\",\n      \"signature\": \"(ImGuiPlotType,const char*,float(*)(void*,int),void*,int,int,const char*,float,float,const ImVec2)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igPlotHistogram\": [\n    {\n      \"args\": \"(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)\",\n      \"argsT\": [\n        {\n          \"name\": \"label\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"values\",\n          \"type\": \"const float*\"\n        },\n        {\n          \"name\": \"values_count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"values_offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"overlay_text\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"scale_min\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"scale_max\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"graph_size\",\n          \"type\": \"ImVec2\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label,const float* values,int values_count,int values_offset=0,const char* overlay_text=((void*)0),float scale_min=3.40282346638528859811704183484516925e+38F,float scale_max=3.40282346638528859811704183484516925e+38F,ImVec2 graph_size=ImVec2(0,0),int stride=sizeof(float))\",\n      \"call_args\": \"(label,values,values_count,values_offset,overlay_text,scale_min,scale_max,graph_size,stride)\",\n      \"cimguiname\": \"igPlotHistogram\",\n      \"defaults\": {\n        \"graph_size\": \"ImVec2(0,0)\",\n        \"overlay_text\": \"NULL\",\n        \"scale_max\": \"FLT_MAX\",\n        \"scale_min\": \"FLT_MAX\",\n        \"stride\": \"sizeof(float)\",\n        \"values_offset\": \"0\"\n      },\n      \"funcname\": \"PlotHistogram\",\n      \"location\": \"imgui:710\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igPlotHistogram_FloatPtr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const float*,int,int,const char*,float,float,ImVec2,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(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)\",\n      \"argsT\": [\n        {\n          \"name\": \"label\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"values_getter\",\n          \"ret\": \"float\",\n          \"signature\": \"(void* data,int idx)\",\n          \"type\": \"float(*)(void* data,int idx)\"\n        },\n        {\n          \"name\": \"data\",\n          \"type\": \"void*\"\n        },\n        {\n          \"name\": \"values_count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"values_offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"overlay_text\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"scale_min\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"scale_max\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"graph_size\",\n          \"type\": \"ImVec2\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label,float(*values_getter)(void* data,int idx),void* data,int values_count,int values_offset=0,const char* overlay_text=((void*)0),float scale_min=3.40282346638528859811704183484516925e+38F,float scale_max=3.40282346638528859811704183484516925e+38F,ImVec2 graph_size=ImVec2(0,0))\",\n      \"call_args\": \"(label,values_getter,data,values_count,values_offset,overlay_text,scale_min,scale_max,graph_size)\",\n      \"cimguiname\": \"igPlotHistogram\",\n      \"defaults\": {\n        \"graph_size\": \"ImVec2(0,0)\",\n        \"overlay_text\": \"NULL\",\n        \"scale_max\": \"FLT_MAX\",\n        \"scale_min\": \"FLT_MAX\",\n        \"values_offset\": \"0\"\n      },\n      \"funcname\": \"PlotHistogram\",\n      \"location\": \"imgui:711\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igPlotHistogram_FnFloatPtr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,float(*)(void*,int),void*,int,int,const char*,float,float,ImVec2)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igPlotLines\": [\n    {\n      \"args\": \"(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)\",\n      \"argsT\": [\n        {\n          \"name\": \"label\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"values\",\n          \"type\": \"const float*\"\n        },\n        {\n          \"name\": \"values_count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"values_offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"overlay_text\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"scale_min\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"scale_max\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"graph_size\",\n          \"type\": \"ImVec2\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label,const float* values,int values_count,int values_offset=0,const char* overlay_text=((void*)0),float scale_min=3.40282346638528859811704183484516925e+38F,float scale_max=3.40282346638528859811704183484516925e+38F,ImVec2 graph_size=ImVec2(0,0),int stride=sizeof(float))\",\n      \"call_args\": \"(label,values,values_count,values_offset,overlay_text,scale_min,scale_max,graph_size,stride)\",\n      \"cimguiname\": \"igPlotLines\",\n      \"defaults\": {\n        \"graph_size\": \"ImVec2(0,0)\",\n        \"overlay_text\": \"NULL\",\n        \"scale_max\": \"FLT_MAX\",\n        \"scale_min\": \"FLT_MAX\",\n        \"stride\": \"sizeof(float)\",\n        \"values_offset\": \"0\"\n      },\n      \"funcname\": \"PlotLines\",\n      \"location\": \"imgui:708\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igPlotLines_FloatPtr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const float*,int,int,const char*,float,float,ImVec2,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(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)\",\n      \"argsT\": [\n        {\n          \"name\": \"label\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"values_getter\",\n          \"ret\": \"float\",\n          \"signature\": \"(void* data,int idx)\",\n          \"type\": \"float(*)(void* data,int idx)\"\n        },\n        {\n          \"name\": \"data\",\n          \"type\": \"void*\"\n        },\n        {\n          \"name\": \"values_count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"values_offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"overlay_text\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"scale_min\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"scale_max\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"graph_size\",\n          \"type\": \"ImVec2\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label,float(*values_getter)(void* data,int idx),void* data,int values_count,int values_offset=0,const char* overlay_text=((void*)0),float scale_min=3.40282346638528859811704183484516925e+38F,float scale_max=3.40282346638528859811704183484516925e+38F,ImVec2 graph_size=ImVec2(0,0))\",\n      \"call_args\": \"(label,values_getter,data,values_count,values_offset,overlay_text,scale_min,scale_max,graph_size)\",\n      \"cimguiname\": \"igPlotLines\",\n      \"defaults\": {\n        \"graph_size\": \"ImVec2(0,0)\",\n        \"overlay_text\": \"NULL\",\n        \"scale_max\": \"FLT_MAX\",\n        \"scale_min\": \"FLT_MAX\",\n        \"values_offset\": \"0\"\n      },\n      \"funcname\": \"PlotLines\",\n      \"location\": \"imgui:709\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igPlotLines_FnFloatPtr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,float(*)(void*,int),void*,int,int,const char*,float,float,ImVec2)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igPopClipRect\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igPopClipRect\",\n      \"defaults\": {},\n      \"funcname\": \"PopClipRect\",\n      \"location\": \"imgui:904\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igPopClipRect\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igPopColumnsBackground\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igPopColumnsBackground\",\n      \"defaults\": {},\n      \"funcname\": \"PopColumnsBackground\",\n      \"location\": \"imgui_internal:3291\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igPopColumnsBackground\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igPopFocusScope\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igPopFocusScope\",\n      \"defaults\": {},\n      \"funcname\": \"PopFocusScope\",\n      \"location\": \"imgui_internal:3255\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igPopFocusScope\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igPopFont\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igPopFont\",\n      \"defaults\": {},\n      \"funcname\": \"PopFont\",\n      \"location\": \"imgui:443\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igPopFont\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igPopID\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igPopID\",\n      \"defaults\": {},\n      \"funcname\": \"PopID\",\n      \"location\": \"imgui:525\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igPopID\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igPopItemFlag\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igPopItemFlag\",\n      \"defaults\": {},\n      \"funcname\": \"PopItemFlag\",\n      \"location\": \"imgui:453\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igPopItemFlag\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igPopItemWidth\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igPopItemWidth\",\n      \"defaults\": {},\n      \"funcname\": \"PopItemWidth\",\n      \"location\": \"imgui:457\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igPopItemWidth\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igPopStyleColor\": [\n    {\n      \"args\": \"(int count)\",\n      \"argsT\": [\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(int count=1)\",\n      \"call_args\": \"(count)\",\n      \"cimguiname\": \"igPopStyleColor\",\n      \"defaults\": {\n        \"count\": \"1\"\n      },\n      \"funcname\": \"PopStyleColor\",\n      \"location\": \"imgui:446\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igPopStyleColor\",\n      \"ret\": \"void\",\n      \"signature\": \"(int)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igPopStyleVar\": [\n    {\n      \"args\": \"(int count)\",\n      \"argsT\": [\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(int count=1)\",\n      \"call_args\": \"(count)\",\n      \"cimguiname\": \"igPopStyleVar\",\n      \"defaults\": {\n        \"count\": \"1\"\n      },\n      \"funcname\": \"PopStyleVar\",\n      \"location\": \"imgui:451\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igPopStyleVar\",\n      \"ret\": \"void\",\n      \"signature\": \"(int)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igPopTextWrapPos\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igPopTextWrapPos\",\n      \"defaults\": {},\n      \"funcname\": \"PopTextWrapPos\",\n      \"location\": \"imgui:461\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igPopTextWrapPos\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igProgressBar\": [\n    {\n      \"args\": \"(float fraction,const ImVec2 size_arg,const char* overlay)\",\n      \"argsT\": [\n        {\n          \"name\": \"fraction\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"size_arg\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"overlay\",\n          \"type\": \"const char*\"\n        }\n      ],\n      \"argsoriginal\": \"(float fraction,const ImVec2& size_arg=ImVec2(-1.17549435082228750796873653722224568e-38F,0),const char* overlay=((void*)0))\",\n      \"call_args\": \"(fraction,size_arg,overlay)\",\n      \"cimguiname\": \"igProgressBar\",\n      \"defaults\": {\n        \"overlay\": \"NULL\",\n        \"size_arg\": \"ImVec2(-FLT_MIN,0)\"\n      },\n      \"funcname\": \"ProgressBar\",\n      \"location\": \"imgui:559\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igProgressBar\",\n      \"ret\": \"void\",\n      \"signature\": \"(float,const ImVec2,const char*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igPushClipRect\": [\n    {\n      \"args\": \"(const ImVec2 clip_rect_min,const ImVec2 clip_rect_max,bool intersect_with_current_clip_rect)\",\n      \"argsT\": [\n        {\n          \"name\": \"clip_rect_min\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"clip_rect_max\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"intersect_with_current_clip_rect\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImVec2& clip_rect_min,const ImVec2& clip_rect_max,bool intersect_with_current_clip_rect)\",\n      \"call_args\": \"(clip_rect_min,clip_rect_max,intersect_with_current_clip_rect)\",\n      \"cimguiname\": \"igPushClipRect\",\n      \"defaults\": {},\n      \"funcname\": \"PushClipRect\",\n      \"location\": \"imgui:903\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igPushClipRect\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImVec2,const ImVec2,bool)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igPushColumnClipRect\": [\n    {\n      \"args\": \"(int column_index)\",\n      \"argsT\": [\n        {\n          \"name\": \"column_index\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(int column_index)\",\n      \"call_args\": \"(column_index)\",\n      \"cimguiname\": \"igPushColumnClipRect\",\n      \"defaults\": {},\n      \"funcname\": \"PushColumnClipRect\",\n      \"location\": \"imgui_internal:3289\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igPushColumnClipRect\",\n      \"ret\": \"void\",\n      \"signature\": \"(int)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igPushColumnsBackground\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igPushColumnsBackground\",\n      \"defaults\": {},\n      \"funcname\": \"PushColumnsBackground\",\n      \"location\": \"imgui_internal:3290\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igPushColumnsBackground\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igPushFocusScope\": [\n    {\n      \"args\": \"(ImGuiID id)\",\n      \"argsT\": [\n        {\n          \"name\": \"id\",\n          \"type\": \"ImGuiID\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiID id)\",\n      \"call_args\": \"(id)\",\n      \"cimguiname\": \"igPushFocusScope\",\n      \"defaults\": {},\n      \"funcname\": \"PushFocusScope\",\n      \"location\": \"imgui_internal:3254\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igPushFocusScope\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiID)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igPushFont\": [\n    {\n      \"args\": \"(ImFont* font)\",\n      \"argsT\": [\n        {\n          \"name\": \"font\",\n          \"type\": \"ImFont*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImFont* font)\",\n      \"call_args\": \"(font)\",\n      \"cimguiname\": \"igPushFont\",\n      \"defaults\": {},\n      \"funcname\": \"PushFont\",\n      \"location\": \"imgui:442\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igPushFont\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImFont*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igPushID\": [\n    {\n      \"args\": \"(const char* str_id)\",\n      \"argsT\": [\n        {\n          \"name\": \"str_id\",\n          \"type\": \"const char*\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* str_id)\",\n      \"call_args\": \"(str_id)\",\n      \"cimguiname\": \"igPushID\",\n      \"defaults\": {},\n      \"funcname\": \"PushID\",\n      \"location\": \"imgui:521\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igPushID_Str\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* str_id_begin,const char* str_id_end)\",\n      \"argsT\": [\n        {\n          \"name\": \"str_id_begin\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"str_id_end\",\n          \"type\": \"const char*\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* str_id_begin,const char* str_id_end)\",\n      \"call_args\": \"(str_id_begin,str_id_end)\",\n      \"cimguiname\": \"igPushID\",\n      \"defaults\": {},\n      \"funcname\": \"PushID\",\n      \"location\": \"imgui:522\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igPushID_StrStr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const char*)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const void* ptr_id)\",\n      \"argsT\": [\n        {\n          \"name\": \"ptr_id\",\n          \"type\": \"const void*\"\n        }\n      ],\n      \"argsoriginal\": \"(const void* ptr_id)\",\n      \"call_args\": \"(ptr_id)\",\n      \"cimguiname\": \"igPushID\",\n      \"defaults\": {},\n      \"funcname\": \"PushID\",\n      \"location\": \"imgui:523\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igPushID_Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const void*)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(int int_id)\",\n      \"argsT\": [\n        {\n          \"name\": \"int_id\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(int int_id)\",\n      \"call_args\": \"(int_id)\",\n      \"cimguiname\": \"igPushID\",\n      \"defaults\": {},\n      \"funcname\": \"PushID\",\n      \"location\": \"imgui:524\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igPushID_Int\",\n      \"ret\": \"void\",\n      \"signature\": \"(int)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igPushItemFlag\": [\n    {\n      \"args\": \"(ImGuiItemFlags option,bool enabled)\",\n      \"argsT\": [\n        {\n          \"name\": \"option\",\n          \"type\": \"ImGuiItemFlags\"\n        },\n        {\n          \"name\": \"enabled\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiItemFlags option,bool enabled)\",\n      \"call_args\": \"(option,enabled)\",\n      \"cimguiname\": \"igPushItemFlag\",\n      \"defaults\": {},\n      \"funcname\": \"PushItemFlag\",\n      \"location\": \"imgui:452\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igPushItemFlag\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiItemFlags,bool)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igPushItemWidth\": [\n    {\n      \"args\": \"(float item_width)\",\n      \"argsT\": [\n        {\n          \"name\": \"item_width\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(float item_width)\",\n      \"call_args\": \"(item_width)\",\n      \"cimguiname\": \"igPushItemWidth\",\n      \"defaults\": {},\n      \"funcname\": \"PushItemWidth\",\n      \"location\": \"imgui:456\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igPushItemWidth\",\n      \"ret\": \"void\",\n      \"signature\": \"(float)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igPushMultiItemsWidths\": [\n    {\n      \"args\": \"(int components,float width_full)\",\n      \"argsT\": [\n        {\n          \"name\": \"components\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"width_full\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(int components,float width_full)\",\n      \"call_args\": \"(components,width_full)\",\n      \"cimguiname\": \"igPushMultiItemsWidths\",\n      \"defaults\": {},\n      \"funcname\": \"PushMultiItemsWidths\",\n      \"location\": \"imgui_internal:3091\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igPushMultiItemsWidths\",\n      \"ret\": \"void\",\n      \"signature\": \"(int,float)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igPushOverrideID\": [\n    {\n      \"args\": \"(ImGuiID id)\",\n      \"argsT\": [\n        {\n          \"name\": \"id\",\n          \"type\": \"ImGuiID\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiID id)\",\n      \"call_args\": \"(id)\",\n      \"cimguiname\": \"igPushOverrideID\",\n      \"defaults\": {},\n      \"funcname\": \"PushOverrideID\",\n      \"location\": \"imgui_internal:3077\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igPushOverrideID\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiID)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igPushStyleColor\": [\n    {\n      \"args\": \"(ImGuiCol idx,ImU32 col)\",\n      \"argsT\": [\n        {\n          \"name\": \"idx\",\n          \"type\": \"ImGuiCol\"\n        },\n        {\n          \"name\": \"col\",\n          \"type\": \"ImU32\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiCol idx,ImU32 col)\",\n      \"call_args\": \"(idx,col)\",\n      \"cimguiname\": \"igPushStyleColor\",\n      \"defaults\": {},\n      \"funcname\": \"PushStyleColor\",\n      \"location\": \"imgui:444\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igPushStyleColor_U32\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiCol,ImU32)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(ImGuiCol idx,const ImVec4 col)\",\n      \"argsT\": [\n        {\n          \"name\": \"idx\",\n          \"type\": \"ImGuiCol\"\n        },\n        {\n          \"name\": \"col\",\n          \"type\": \"const ImVec4\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiCol idx,const ImVec4& col)\",\n      \"call_args\": \"(idx,col)\",\n      \"cimguiname\": \"igPushStyleColor\",\n      \"defaults\": {},\n      \"funcname\": \"PushStyleColor\",\n      \"location\": \"imgui:445\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igPushStyleColor_Vec4\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiCol,const ImVec4)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igPushStyleVar\": [\n    {\n      \"args\": \"(ImGuiStyleVar idx,float val)\",\n      \"argsT\": [\n        {\n          \"name\": \"idx\",\n          \"type\": \"ImGuiStyleVar\"\n        },\n        {\n          \"name\": \"val\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiStyleVar idx,float val)\",\n      \"call_args\": \"(idx,val)\",\n      \"cimguiname\": \"igPushStyleVar\",\n      \"defaults\": {},\n      \"funcname\": \"PushStyleVar\",\n      \"location\": \"imgui:447\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igPushStyleVar_Float\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiStyleVar,float)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(ImGuiStyleVar idx,const ImVec2 val)\",\n      \"argsT\": [\n        {\n          \"name\": \"idx\",\n          \"type\": \"ImGuiStyleVar\"\n        },\n        {\n          \"name\": \"val\",\n          \"type\": \"const ImVec2\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiStyleVar idx,const ImVec2& val)\",\n      \"call_args\": \"(idx,val)\",\n      \"cimguiname\": \"igPushStyleVar\",\n      \"defaults\": {},\n      \"funcname\": \"PushStyleVar\",\n      \"location\": \"imgui:448\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igPushStyleVar_Vec2\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiStyleVar,const ImVec2)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igPushStyleVarX\": [\n    {\n      \"args\": \"(ImGuiStyleVar idx,float val_x)\",\n      \"argsT\": [\n        {\n          \"name\": \"idx\",\n          \"type\": \"ImGuiStyleVar\"\n        },\n        {\n          \"name\": \"val_x\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiStyleVar idx,float val_x)\",\n      \"call_args\": \"(idx,val_x)\",\n      \"cimguiname\": \"igPushStyleVarX\",\n      \"defaults\": {},\n      \"funcname\": \"PushStyleVarX\",\n      \"location\": \"imgui:449\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igPushStyleVarX\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiStyleVar,float)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igPushStyleVarY\": [\n    {\n      \"args\": \"(ImGuiStyleVar idx,float val_y)\",\n      \"argsT\": [\n        {\n          \"name\": \"idx\",\n          \"type\": \"ImGuiStyleVar\"\n        },\n        {\n          \"name\": \"val_y\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiStyleVar idx,float val_y)\",\n      \"call_args\": \"(idx,val_y)\",\n      \"cimguiname\": \"igPushStyleVarY\",\n      \"defaults\": {},\n      \"funcname\": \"PushStyleVarY\",\n      \"location\": \"imgui:450\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igPushStyleVarY\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiStyleVar,float)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igPushTextWrapPos\": [\n    {\n      \"args\": \"(float wrap_local_pos_x)\",\n      \"argsT\": [\n        {\n          \"name\": \"wrap_local_pos_x\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(float wrap_local_pos_x=0.0f)\",\n      \"call_args\": \"(wrap_local_pos_x)\",\n      \"cimguiname\": \"igPushTextWrapPos\",\n      \"defaults\": {\n        \"wrap_local_pos_x\": \"0.0f\"\n      },\n      \"funcname\": \"PushTextWrapPos\",\n      \"location\": \"imgui:460\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igPushTextWrapPos\",\n      \"ret\": \"void\",\n      \"signature\": \"(float)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igRadioButton\": [\n    {\n      \"args\": \"(const char* label,bool active)\",\n      \"argsT\": [\n        {\n          \"name\": \"label\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"active\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label,bool active)\",\n      \"call_args\": \"(label,active)\",\n      \"cimguiname\": \"igRadioButton\",\n      \"defaults\": {},\n      \"funcname\": \"RadioButton\",\n      \"location\": \"imgui:557\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igRadioButton_Bool\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*,bool)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label,int* v,int v_button)\",\n      \"argsT\": [\n        {\n          \"name\": \"label\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"v\",\n          \"type\": \"int*\"\n        },\n        {\n          \"name\": \"v_button\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label,int* v,int v_button)\",\n      \"call_args\": \"(label,v,v_button)\",\n      \"cimguiname\": \"igRadioButton\",\n      \"defaults\": {},\n      \"funcname\": \"RadioButton\",\n      \"location\": \"imgui:558\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igRadioButton_IntPtr\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*,int*,int)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igRemoveContextHook\": [\n    {\n      \"args\": \"(ImGuiContext* context,ImGuiID hook_to_remove)\",\n      \"argsT\": [\n        {\n          \"name\": \"context\",\n          \"type\": \"ImGuiContext*\"\n        },\n        {\n          \"name\": \"hook_to_remove\",\n          \"type\": \"ImGuiID\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiContext* context,ImGuiID hook_to_remove)\",\n      \"call_args\": \"(context,hook_to_remove)\",\n      \"cimguiname\": \"igRemoveContextHook\",\n      \"defaults\": {},\n      \"funcname\": \"RemoveContextHook\",\n      \"location\": \"imgui_internal:3026\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igRemoveContextHook\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiContext*,ImGuiID)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igRemoveSettingsHandler\": [\n    {\n      \"args\": \"(const char* type_name)\",\n      \"argsT\": [\n        {\n          \"name\": \"type_name\",\n          \"type\": \"const char*\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* type_name)\",\n      \"call_args\": \"(type_name)\",\n      \"cimguiname\": \"igRemoveSettingsHandler\",\n      \"defaults\": {},\n      \"funcname\": \"RemoveSettingsHandler\",\n      \"location\": \"imgui_internal:3038\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igRemoveSettingsHandler\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igRender\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igRender\",\n      \"defaults\": {},\n      \"funcname\": \"Render\",\n      \"location\": \"imgui:338\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igRender\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igRenderArrow\": [\n    {\n      \"args\": \"(ImDrawList* draw_list,ImVec2 pos,ImU32 col,ImGuiDir dir,float scale)\",\n      \"argsT\": [\n        {\n          \"name\": \"draw_list\",\n          \"type\": \"ImDrawList*\"\n        },\n        {\n          \"name\": \"pos\",\n          \"type\": \"ImVec2\"\n        },\n        {\n          \"name\": \"col\",\n          \"type\": \"ImU32\"\n        },\n        {\n          \"name\": \"dir\",\n          \"type\": \"ImGuiDir\"\n        },\n        {\n          \"name\": \"scale\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(ImDrawList* draw_list,ImVec2 pos,ImU32 col,ImGuiDir dir,float scale=1.0f)\",\n      \"call_args\": \"(draw_list,pos,col,dir,scale)\",\n      \"cimguiname\": \"igRenderArrow\",\n      \"defaults\": {\n        \"scale\": \"1.0f\"\n      },\n      \"funcname\": \"RenderArrow\",\n      \"location\": \"imgui_internal:3393\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igRenderArrow\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImDrawList*,ImVec2,ImU32,ImGuiDir,float)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igRenderArrowPointingAt\": [\n    {\n      \"args\": \"(ImDrawList* draw_list,ImVec2 pos,ImVec2 half_sz,ImGuiDir direction,ImU32 col)\",\n      \"argsT\": [\n        {\n          \"name\": \"draw_list\",\n          \"type\": \"ImDrawList*\"\n        },\n        {\n          \"name\": \"pos\",\n          \"type\": \"ImVec2\"\n        },\n        {\n          \"name\": \"half_sz\",\n          \"type\": \"ImVec2\"\n        },\n        {\n          \"name\": \"direction\",\n          \"type\": \"ImGuiDir\"\n        },\n        {\n          \"name\": \"col\",\n          \"type\": \"ImU32\"\n        }\n      ],\n      \"argsoriginal\": \"(ImDrawList* draw_list,ImVec2 pos,ImVec2 half_sz,ImGuiDir direction,ImU32 col)\",\n      \"call_args\": \"(draw_list,pos,half_sz,direction,col)\",\n      \"cimguiname\": \"igRenderArrowPointingAt\",\n      \"defaults\": {},\n      \"funcname\": \"RenderArrowPointingAt\",\n      \"location\": \"imgui_internal:3396\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igRenderArrowPointingAt\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImDrawList*,ImVec2,ImVec2,ImGuiDir,ImU32)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igRenderBullet\": [\n    {\n      \"args\": \"(ImDrawList* draw_list,ImVec2 pos,ImU32 col)\",\n      \"argsT\": [\n        {\n          \"name\": \"draw_list\",\n          \"type\": \"ImDrawList*\"\n        },\n        {\n          \"name\": \"pos\",\n          \"type\": \"ImVec2\"\n        },\n        {\n          \"name\": \"col\",\n          \"type\": \"ImU32\"\n        }\n      ],\n      \"argsoriginal\": \"(ImDrawList* draw_list,ImVec2 pos,ImU32 col)\",\n      \"call_args\": \"(draw_list,pos,col)\",\n      \"cimguiname\": \"igRenderBullet\",\n      \"defaults\": {},\n      \"funcname\": \"RenderBullet\",\n      \"location\": \"imgui_internal:3394\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igRenderBullet\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImDrawList*,ImVec2,ImU32)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igRenderCheckMark\": [\n    {\n      \"args\": \"(ImDrawList* draw_list,ImVec2 pos,ImU32 col,float sz)\",\n      \"argsT\": [\n        {\n          \"name\": \"draw_list\",\n          \"type\": \"ImDrawList*\"\n        },\n        {\n          \"name\": \"pos\",\n          \"type\": \"ImVec2\"\n        },\n        {\n          \"name\": \"col\",\n          \"type\": \"ImU32\"\n        },\n        {\n          \"name\": \"sz\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(ImDrawList* draw_list,ImVec2 pos,ImU32 col,float sz)\",\n      \"call_args\": \"(draw_list,pos,col,sz)\",\n      \"cimguiname\": \"igRenderCheckMark\",\n      \"defaults\": {},\n      \"funcname\": \"RenderCheckMark\",\n      \"location\": \"imgui_internal:3395\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igRenderCheckMark\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImDrawList*,ImVec2,ImU32,float)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igRenderColorRectWithAlphaCheckerboard\": [\n    {\n      \"args\": \"(ImDrawList* draw_list,ImVec2 p_min,ImVec2 p_max,ImU32 fill_col,float grid_step,ImVec2 grid_off,float rounding,ImDrawFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"draw_list\",\n          \"type\": \"ImDrawList*\"\n        },\n        {\n          \"name\": \"p_min\",\n          \"type\": \"ImVec2\"\n        },\n        {\n          \"name\": \"p_max\",\n          \"type\": \"ImVec2\"\n        },\n        {\n          \"name\": \"fill_col\",\n          \"type\": \"ImU32\"\n        },\n        {\n          \"name\": \"grid_step\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"grid_off\",\n          \"type\": \"ImVec2\"\n        },\n        {\n          \"name\": \"rounding\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImDrawFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(ImDrawList* draw_list,ImVec2 p_min,ImVec2 p_max,ImU32 fill_col,float grid_step,ImVec2 grid_off,float rounding=0.0f,ImDrawFlags flags=0)\",\n      \"call_args\": \"(draw_list,p_min,p_max,fill_col,grid_step,grid_off,rounding,flags)\",\n      \"cimguiname\": \"igRenderColorRectWithAlphaCheckerboard\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"rounding\": \"0.0f\"\n      },\n      \"funcname\": \"RenderColorRectWithAlphaCheckerboard\",\n      \"location\": \"imgui_internal:3384\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igRenderColorRectWithAlphaCheckerboard\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImDrawList*,ImVec2,ImVec2,ImU32,float,ImVec2,float,ImDrawFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igRenderDragDropTargetRect\": [\n    {\n      \"args\": \"(const ImRect bb,const ImRect item_clip_rect)\",\n      \"argsT\": [\n        {\n          \"name\": \"bb\",\n          \"type\": \"const ImRect\"\n        },\n        {\n          \"name\": \"item_clip_rect\",\n          \"type\": \"const ImRect\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImRect& bb,const ImRect& item_clip_rect)\",\n      \"call_args\": \"(bb,item_clip_rect)\",\n      \"cimguiname\": \"igRenderDragDropTargetRect\",\n      \"defaults\": {},\n      \"funcname\": \"RenderDragDropTargetRect\",\n      \"location\": \"imgui_internal:3263\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igRenderDragDropTargetRect\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImRect,const ImRect)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igRenderFrame\": [\n    {\n      \"args\": \"(ImVec2 p_min,ImVec2 p_max,ImU32 fill_col,bool borders,float rounding)\",\n      \"argsT\": [\n        {\n          \"name\": \"p_min\",\n          \"type\": \"ImVec2\"\n        },\n        {\n          \"name\": \"p_max\",\n          \"type\": \"ImVec2\"\n        },\n        {\n          \"name\": \"fill_col\",\n          \"type\": \"ImU32\"\n        },\n        {\n          \"name\": \"borders\",\n          \"type\": \"bool\"\n        },\n        {\n          \"name\": \"rounding\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(ImVec2 p_min,ImVec2 p_max,ImU32 fill_col,bool borders=true,float rounding=0.0f)\",\n      \"call_args\": \"(p_min,p_max,fill_col,borders,rounding)\",\n      \"cimguiname\": \"igRenderFrame\",\n      \"defaults\": {\n        \"borders\": \"true\",\n        \"rounding\": \"0.0f\"\n      },\n      \"funcname\": \"RenderFrame\",\n      \"location\": \"imgui_internal:3382\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igRenderFrame\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImVec2,ImVec2,ImU32,bool,float)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igRenderFrameBorder\": [\n    {\n      \"args\": \"(ImVec2 p_min,ImVec2 p_max,float rounding)\",\n      \"argsT\": [\n        {\n          \"name\": \"p_min\",\n          \"type\": \"ImVec2\"\n        },\n        {\n          \"name\": \"p_max\",\n          \"type\": \"ImVec2\"\n        },\n        {\n          \"name\": \"rounding\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(ImVec2 p_min,ImVec2 p_max,float rounding=0.0f)\",\n      \"call_args\": \"(p_min,p_max,rounding)\",\n      \"cimguiname\": \"igRenderFrameBorder\",\n      \"defaults\": {\n        \"rounding\": \"0.0f\"\n      },\n      \"funcname\": \"RenderFrameBorder\",\n      \"location\": \"imgui_internal:3383\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igRenderFrameBorder\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImVec2,ImVec2,float)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igRenderMouseCursor\": [\n    {\n      \"args\": \"(ImVec2 pos,float scale,ImGuiMouseCursor mouse_cursor,ImU32 col_fill,ImU32 col_border,ImU32 col_shadow)\",\n      \"argsT\": [\n        {\n          \"name\": \"pos\",\n          \"type\": \"ImVec2\"\n        },\n        {\n          \"name\": \"scale\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"mouse_cursor\",\n          \"type\": \"ImGuiMouseCursor\"\n        },\n        {\n          \"name\": \"col_fill\",\n          \"type\": \"ImU32\"\n        },\n        {\n          \"name\": \"col_border\",\n          \"type\": \"ImU32\"\n        },\n        {\n          \"name\": \"col_shadow\",\n          \"type\": \"ImU32\"\n        }\n      ],\n      \"argsoriginal\": \"(ImVec2 pos,float scale,ImGuiMouseCursor mouse_cursor,ImU32 col_fill,ImU32 col_border,ImU32 col_shadow)\",\n      \"call_args\": \"(pos,scale,mouse_cursor,col_fill,col_border,col_shadow)\",\n      \"cimguiname\": \"igRenderMouseCursor\",\n      \"defaults\": {},\n      \"funcname\": \"RenderMouseCursor\",\n      \"location\": \"imgui_internal:3390\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igRenderMouseCursor\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImVec2,float,ImGuiMouseCursor,ImU32,ImU32,ImU32)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igRenderNavCursor\": [\n    {\n      \"args\": \"(const ImRect bb,ImGuiID id,ImGuiNavRenderCursorFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"bb\",\n          \"type\": \"const ImRect\"\n        },\n        {\n          \"name\": \"id\",\n          \"type\": \"ImGuiID\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiNavRenderCursorFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImRect& bb,ImGuiID id,ImGuiNavRenderCursorFlags flags=ImGuiNavRenderCursorFlags_None)\",\n      \"call_args\": \"(bb,id,flags)\",\n      \"cimguiname\": \"igRenderNavCursor\",\n      \"defaults\": {\n        \"flags\": \"ImGuiNavRenderCursorFlags_None\"\n      },\n      \"funcname\": \"RenderNavCursor\",\n      \"location\": \"imgui_internal:3385\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igRenderNavCursor\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImRect,ImGuiID,ImGuiNavRenderCursorFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igRenderRectFilledRangeH\": [\n    {\n      \"args\": \"(ImDrawList* draw_list,const ImRect rect,ImU32 col,float x_start_norm,float x_end_norm,float rounding)\",\n      \"argsT\": [\n        {\n          \"name\": \"draw_list\",\n          \"type\": \"ImDrawList*\"\n        },\n        {\n          \"name\": \"rect\",\n          \"type\": \"const ImRect\"\n        },\n        {\n          \"name\": \"col\",\n          \"type\": \"ImU32\"\n        },\n        {\n          \"name\": \"x_start_norm\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"x_end_norm\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"rounding\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(ImDrawList* draw_list,const ImRect& rect,ImU32 col,float x_start_norm,float x_end_norm,float rounding)\",\n      \"call_args\": \"(draw_list,rect,col,x_start_norm,x_end_norm,rounding)\",\n      \"cimguiname\": \"igRenderRectFilledRangeH\",\n      \"defaults\": {},\n      \"funcname\": \"RenderRectFilledRangeH\",\n      \"location\": \"imgui_internal:3397\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igRenderRectFilledRangeH\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImDrawList*,const ImRect,ImU32,float,float,float)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igRenderRectFilledWithHole\": [\n    {\n      \"args\": \"(ImDrawList* draw_list,const ImRect outer,const ImRect inner,ImU32 col,float rounding)\",\n      \"argsT\": [\n        {\n          \"name\": \"draw_list\",\n          \"type\": \"ImDrawList*\"\n        },\n        {\n          \"name\": \"outer\",\n          \"type\": \"const ImRect\"\n        },\n        {\n          \"name\": \"inner\",\n          \"type\": \"const ImRect\"\n        },\n        {\n          \"name\": \"col\",\n          \"type\": \"ImU32\"\n        },\n        {\n          \"name\": \"rounding\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(ImDrawList* draw_list,const ImRect& outer,const ImRect& inner,ImU32 col,float rounding)\",\n      \"call_args\": \"(draw_list,outer,inner,col,rounding)\",\n      \"cimguiname\": \"igRenderRectFilledWithHole\",\n      \"defaults\": {},\n      \"funcname\": \"RenderRectFilledWithHole\",\n      \"location\": \"imgui_internal:3398\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igRenderRectFilledWithHole\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImDrawList*,const ImRect,const ImRect,ImU32,float)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igRenderText\": [\n    {\n      \"args\": \"(ImVec2 pos,const char* text,const char* text_end,bool hide_text_after_hash)\",\n      \"argsT\": [\n        {\n          \"name\": \"pos\",\n          \"type\": \"ImVec2\"\n        },\n        {\n          \"name\": \"text\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"text_end\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"hide_text_after_hash\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"argsoriginal\": \"(ImVec2 pos,const char* text,const char* text_end=((void*)0),bool hide_text_after_hash=true)\",\n      \"call_args\": \"(pos,text,text_end,hide_text_after_hash)\",\n      \"cimguiname\": \"igRenderText\",\n      \"defaults\": {\n        \"hide_text_after_hash\": \"true\",\n        \"text_end\": \"NULL\"\n      },\n      \"funcname\": \"RenderText\",\n      \"location\": \"imgui_internal:3377\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igRenderText\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImVec2,const char*,const char*,bool)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igRenderTextClipped\": [\n    {\n      \"args\": \"(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)\",\n      \"argsT\": [\n        {\n          \"name\": \"pos_min\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"pos_max\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"text\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"text_end\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"text_size_if_known\",\n          \"type\": \"const ImVec2*\"\n        },\n        {\n          \"name\": \"align\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"clip_rect\",\n          \"type\": \"const ImRect*\"\n        }\n      ],\n      \"argsoriginal\": \"(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=((void*)0))\",\n      \"call_args\": \"(pos_min,pos_max,text,text_end,text_size_if_known,align,clip_rect)\",\n      \"cimguiname\": \"igRenderTextClipped\",\n      \"defaults\": {\n        \"align\": \"ImVec2(0,0)\",\n        \"clip_rect\": \"NULL\"\n      },\n      \"funcname\": \"RenderTextClipped\",\n      \"location\": \"imgui_internal:3379\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igRenderTextClipped\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImVec2,const ImVec2,const char*,const char*,const ImVec2*,const ImVec2,const ImRect*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igRenderTextClippedEx\": [\n    {\n      \"args\": \"(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,const ImRect* clip_rect)\",\n      \"argsT\": [\n        {\n          \"name\": \"draw_list\",\n          \"type\": \"ImDrawList*\"\n        },\n        {\n          \"name\": \"pos_min\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"pos_max\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"text\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"text_end\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"text_size_if_known\",\n          \"type\": \"const ImVec2*\"\n        },\n        {\n          \"name\": \"align\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"clip_rect\",\n          \"type\": \"const ImRect*\"\n        }\n      ],\n      \"argsoriginal\": \"(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=((void*)0))\",\n      \"call_args\": \"(draw_list,pos_min,pos_max,text,text_end,text_size_if_known,align,clip_rect)\",\n      \"cimguiname\": \"igRenderTextClippedEx\",\n      \"defaults\": {\n        \"align\": \"ImVec2(0,0)\",\n        \"clip_rect\": \"NULL\"\n      },\n      \"funcname\": \"RenderTextClippedEx\",\n      \"location\": \"imgui_internal:3380\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igRenderTextClippedEx\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImDrawList*,const ImVec2,const ImVec2,const char*,const char*,const ImVec2*,const ImVec2,const ImRect*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igRenderTextEllipsis\": [\n    {\n      \"args\": \"(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)\",\n      \"argsT\": [\n        {\n          \"name\": \"draw_list\",\n          \"type\": \"ImDrawList*\"\n        },\n        {\n          \"name\": \"pos_min\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"pos_max\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"clip_max_x\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"ellipsis_max_x\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"text\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"text_end\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"text_size_if_known\",\n          \"type\": \"const ImVec2*\"\n        }\n      ],\n      \"argsoriginal\": \"(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)\",\n      \"call_args\": \"(draw_list,pos_min,pos_max,clip_max_x,ellipsis_max_x,text,text_end,text_size_if_known)\",\n      \"cimguiname\": \"igRenderTextEllipsis\",\n      \"defaults\": {},\n      \"funcname\": \"RenderTextEllipsis\",\n      \"location\": \"imgui_internal:3381\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igRenderTextEllipsis\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImDrawList*,const ImVec2,const ImVec2,float,float,const char*,const char*,const ImVec2*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igRenderTextWrapped\": [\n    {\n      \"args\": \"(ImVec2 pos,const char* text,const char* text_end,float wrap_width)\",\n      \"argsT\": [\n        {\n          \"name\": \"pos\",\n          \"type\": \"ImVec2\"\n        },\n        {\n          \"name\": \"text\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"text_end\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"wrap_width\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(ImVec2 pos,const char* text,const char* text_end,float wrap_width)\",\n      \"call_args\": \"(pos,text,text_end,wrap_width)\",\n      \"cimguiname\": \"igRenderTextWrapped\",\n      \"defaults\": {},\n      \"funcname\": \"RenderTextWrapped\",\n      \"location\": \"imgui_internal:3378\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igRenderTextWrapped\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImVec2,const char*,const char*,float)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igResetMouseDragDelta\": [\n    {\n      \"args\": \"(ImGuiMouseButton button)\",\n      \"argsT\": [\n        {\n          \"name\": \"button\",\n          \"type\": \"ImGuiMouseButton\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiMouseButton button=0)\",\n      \"call_args\": \"(button)\",\n      \"cimguiname\": \"igResetMouseDragDelta\",\n      \"defaults\": {\n        \"button\": \"0\"\n      },\n      \"funcname\": \"ResetMouseDragDelta\",\n      \"location\": \"imgui:1020\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igResetMouseDragDelta\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiMouseButton)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igSameLine\": [\n    {\n      \"args\": \"(float offset_from_start_x,float spacing)\",\n      \"argsT\": [\n        {\n          \"name\": \"offset_from_start_x\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"spacing\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(float offset_from_start_x=0.0f,float spacing=-1.0f)\",\n      \"call_args\": \"(offset_from_start_x,spacing)\",\n      \"cimguiname\": \"igSameLine\",\n      \"defaults\": {\n        \"offset_from_start_x\": \"0.0f\",\n        \"spacing\": \"-1.0f\"\n      },\n      \"funcname\": \"SameLine\",\n      \"location\": \"imgui:496\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igSameLine\",\n      \"ret\": \"void\",\n      \"signature\": \"(float,float)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igSaveIniSettingsToDisk\": [\n    {\n      \"args\": \"(const char* ini_filename)\",\n      \"argsT\": [\n        {\n          \"name\": \"ini_filename\",\n          \"type\": \"const char*\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* ini_filename)\",\n      \"call_args\": \"(ini_filename)\",\n      \"cimguiname\": \"igSaveIniSettingsToDisk\",\n      \"defaults\": {},\n      \"funcname\": \"SaveIniSettingsToDisk\",\n      \"location\": \"imgui:1036\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igSaveIniSettingsToDisk\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igSaveIniSettingsToMemory\": [\n    {\n      \"args\": \"(size_t* out_ini_size)\",\n      \"argsT\": [\n        {\n          \"name\": \"out_ini_size\",\n          \"type\": \"size_t*\"\n        }\n      ],\n      \"argsoriginal\": \"(size_t* out_ini_size=((void*)0))\",\n      \"call_args\": \"(out_ini_size)\",\n      \"cimguiname\": \"igSaveIniSettingsToMemory\",\n      \"defaults\": {\n        \"out_ini_size\": \"NULL\"\n      },\n      \"funcname\": \"SaveIniSettingsToMemory\",\n      \"location\": \"imgui:1037\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igSaveIniSettingsToMemory\",\n      \"ret\": \"const char*\",\n      \"signature\": \"(size_t*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igScaleWindowsInViewport\": [\n    {\n      \"args\": \"(ImGuiViewportP* viewport,float scale)\",\n      \"argsT\": [\n        {\n          \"name\": \"viewport\",\n          \"type\": \"ImGuiViewportP*\"\n        },\n        {\n          \"name\": \"scale\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiViewportP* viewport,float scale)\",\n      \"call_args\": \"(viewport,scale)\",\n      \"cimguiname\": \"igScaleWindowsInViewport\",\n      \"defaults\": {},\n      \"funcname\": \"ScaleWindowsInViewport\",\n      \"location\": \"imgui_internal:3030\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igScaleWindowsInViewport\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiViewportP*,float)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igScrollToBringRectIntoView\": [\n    {\n      \"args\": \"(ImGuiWindow* window,const ImRect rect)\",\n      \"argsT\": [\n        {\n          \"name\": \"window\",\n          \"type\": \"ImGuiWindow*\"\n        },\n        {\n          \"name\": \"rect\",\n          \"type\": \"const ImRect\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiWindow* window,const ImRect& rect)\",\n      \"call_args\": \"(window,rect)\",\n      \"cimguiname\": \"igScrollToBringRectIntoView\",\n      \"defaults\": {},\n      \"funcname\": \"ScrollToBringRectIntoView\",\n      \"location\": \"imgui_internal:3062\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igScrollToBringRectIntoView\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiWindow*,const ImRect)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igScrollToItem\": [\n    {\n      \"args\": \"(ImGuiScrollFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiScrollFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiScrollFlags flags=0)\",\n      \"call_args\": \"(flags)\",\n      \"cimguiname\": \"igScrollToItem\",\n      \"defaults\": {\n        \"flags\": \"0\"\n      },\n      \"funcname\": \"ScrollToItem\",\n      \"location\": \"imgui_internal:3058\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igScrollToItem\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiScrollFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igScrollToRect\": [\n    {\n      \"args\": \"(ImGuiWindow* window,const ImRect rect,ImGuiScrollFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"window\",\n          \"type\": \"ImGuiWindow*\"\n        },\n        {\n          \"name\": \"rect\",\n          \"type\": \"const ImRect\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiScrollFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiWindow* window,const ImRect& rect,ImGuiScrollFlags flags=0)\",\n      \"call_args\": \"(window,rect,flags)\",\n      \"cimguiname\": \"igScrollToRect\",\n      \"defaults\": {\n        \"flags\": \"0\"\n      },\n      \"funcname\": \"ScrollToRect\",\n      \"location\": \"imgui_internal:3059\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igScrollToRect\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiWindow*,const ImRect,ImGuiScrollFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igScrollToRectEx\": [\n    {\n      \"args\": \"(ImVec2 *pOut,ImGuiWindow* window,const ImRect rect,ImGuiScrollFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"pOut\",\n          \"type\": \"ImVec2*\"\n        },\n        {\n          \"name\": \"window\",\n          \"type\": \"ImGuiWindow*\"\n        },\n        {\n          \"name\": \"rect\",\n          \"type\": \"const ImRect\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiScrollFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiWindow* window,const ImRect& rect,ImGuiScrollFlags flags=0)\",\n      \"call_args\": \"(window,rect,flags)\",\n      \"cimguiname\": \"igScrollToRectEx\",\n      \"defaults\": {\n        \"flags\": \"0\"\n      },\n      \"funcname\": \"ScrollToRectEx\",\n      \"location\": \"imgui_internal:3060\",\n      \"namespace\": \"ImGui\",\n      \"nonUDT\": 1,\n      \"ov_cimguiname\": \"igScrollToRectEx\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiWindow*,const ImRect,ImGuiScrollFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igScrollbar\": [\n    {\n      \"args\": \"(ImGuiAxis axis)\",\n      \"argsT\": [\n        {\n          \"name\": \"axis\",\n          \"type\": \"ImGuiAxis\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiAxis axis)\",\n      \"call_args\": \"(axis)\",\n      \"cimguiname\": \"igScrollbar\",\n      \"defaults\": {},\n      \"funcname\": \"Scrollbar\",\n      \"location\": \"imgui_internal:3413\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igScrollbar\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiAxis)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igScrollbarEx\": [\n    {\n      \"args\": \"(const ImRect bb,ImGuiID id,ImGuiAxis axis,ImS64* p_scroll_v,ImS64 avail_v,ImS64 contents_v,ImDrawFlags draw_rounding_flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"bb\",\n          \"type\": \"const ImRect\"\n        },\n        {\n          \"name\": \"id\",\n          \"type\": \"ImGuiID\"\n        },\n        {\n          \"name\": \"axis\",\n          \"type\": \"ImGuiAxis\"\n        },\n        {\n          \"name\": \"p_scroll_v\",\n          \"type\": \"ImS64*\"\n        },\n        {\n          \"name\": \"avail_v\",\n          \"type\": \"ImS64\"\n        },\n        {\n          \"name\": \"contents_v\",\n          \"type\": \"ImS64\"\n        },\n        {\n          \"name\": \"draw_rounding_flags\",\n          \"type\": \"ImDrawFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImRect& bb,ImGuiID id,ImGuiAxis axis,ImS64* p_scroll_v,ImS64 avail_v,ImS64 contents_v,ImDrawFlags draw_rounding_flags=0)\",\n      \"call_args\": \"(bb,id,axis,p_scroll_v,avail_v,contents_v,draw_rounding_flags)\",\n      \"cimguiname\": \"igScrollbarEx\",\n      \"defaults\": {\n        \"draw_rounding_flags\": \"0\"\n      },\n      \"funcname\": \"ScrollbarEx\",\n      \"location\": \"imgui_internal:3414\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igScrollbarEx\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const ImRect,ImGuiID,ImGuiAxis,ImS64*,ImS64,ImS64,ImDrawFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igSelectable\": [\n    {\n      \"args\": \"(const char* label,bool selected,ImGuiSelectableFlags flags,const ImVec2 size)\",\n      \"argsT\": [\n        {\n          \"name\": \"label\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"selected\",\n          \"type\": \"bool\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiSelectableFlags\"\n        },\n        {\n          \"name\": \"size\",\n          \"type\": \"const ImVec2\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label,bool selected=false,ImGuiSelectableFlags flags=0,const ImVec2& size=ImVec2(0,0))\",\n      \"call_args\": \"(label,selected,flags,size)\",\n      \"cimguiname\": \"igSelectable\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"selected\": \"false\",\n        \"size\": \"ImVec2(0,0)\"\n      },\n      \"funcname\": \"Selectable\",\n      \"location\": \"imgui:679\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igSelectable_Bool\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*,bool,ImGuiSelectableFlags,const ImVec2)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label,bool* p_selected,ImGuiSelectableFlags flags,const ImVec2 size)\",\n      \"argsT\": [\n        {\n          \"name\": \"label\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"p_selected\",\n          \"type\": \"bool*\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiSelectableFlags\"\n        },\n        {\n          \"name\": \"size\",\n          \"type\": \"const ImVec2\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label,bool* p_selected,ImGuiSelectableFlags flags=0,const ImVec2& size=ImVec2(0,0))\",\n      \"call_args\": \"(label,p_selected,flags,size)\",\n      \"cimguiname\": \"igSelectable\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"size\": \"ImVec2(0,0)\"\n      },\n      \"funcname\": \"Selectable\",\n      \"location\": \"imgui:680\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igSelectable_BoolPtr\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*,bool*,ImGuiSelectableFlags,const ImVec2)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igSeparator\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igSeparator\",\n      \"defaults\": {},\n      \"funcname\": \"Separator\",\n      \"location\": \"imgui:495\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igSeparator\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igSeparatorEx\": [\n    {\n      \"args\": \"(ImGuiSeparatorFlags flags,float thickness)\",\n      \"argsT\": [\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiSeparatorFlags\"\n        },\n        {\n          \"name\": \"thickness\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiSeparatorFlags flags,float thickness=1.0f)\",\n      \"call_args\": \"(flags,thickness)\",\n      \"cimguiname\": \"igSeparatorEx\",\n      \"defaults\": {\n        \"thickness\": \"1.0f\"\n      },\n      \"funcname\": \"SeparatorEx\",\n      \"location\": \"imgui_internal:3405\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igSeparatorEx\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiSeparatorFlags,float)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igSeparatorText\": [\n    {\n      \"args\": \"(const char* label)\",\n      \"argsT\": [\n        {\n          \"name\": \"label\",\n          \"type\": \"const char*\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label)\",\n      \"call_args\": \"(label)\",\n      \"cimguiname\": \"igSeparatorText\",\n      \"defaults\": {},\n      \"funcname\": \"SeparatorText\",\n      \"location\": \"imgui:545\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igSeparatorText\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igSeparatorTextEx\": [\n    {\n      \"args\": \"(ImGuiID id,const char* label,const char* label_end,float extra_width)\",\n      \"argsT\": [\n        {\n          \"name\": \"id\",\n          \"type\": \"ImGuiID\"\n        },\n        {\n          \"name\": \"label\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"label_end\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"extra_width\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiID id,const char* label,const char* label_end,float extra_width)\",\n      \"call_args\": \"(id,label,label_end,extra_width)\",\n      \"cimguiname\": \"igSeparatorTextEx\",\n      \"defaults\": {},\n      \"funcname\": \"SeparatorTextEx\",\n      \"location\": \"imgui_internal:3406\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igSeparatorTextEx\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiID,const char*,const char*,float)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igSetActiveID\": [\n    {\n      \"args\": \"(ImGuiID id,ImGuiWindow* window)\",\n      \"argsT\": [\n        {\n          \"name\": \"id\",\n          \"type\": \"ImGuiID\"\n        },\n        {\n          \"name\": \"window\",\n          \"type\": \"ImGuiWindow*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiID id,ImGuiWindow* window)\",\n      \"call_args\": \"(id,window)\",\n      \"cimguiname\": \"igSetActiveID\",\n      \"defaults\": {},\n      \"funcname\": \"SetActiveID\",\n      \"location\": \"imgui_internal:3070\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igSetActiveID\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiID,ImGuiWindow*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igSetActiveIdUsingAllKeyboardKeys\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igSetActiveIdUsingAllKeyboardKeys\",\n      \"defaults\": {},\n      \"funcname\": \"SetActiveIdUsingAllKeyboardKeys\",\n      \"location\": \"imgui_internal:3191\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igSetActiveIdUsingAllKeyboardKeys\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igSetAllocatorFunctions\": [\n    {\n      \"args\": \"(ImGuiMemAllocFunc alloc_func,ImGuiMemFreeFunc free_func,void* user_data)\",\n      \"argsT\": [\n        {\n          \"name\": \"alloc_func\",\n          \"type\": \"ImGuiMemAllocFunc\"\n        },\n        {\n          \"name\": \"free_func\",\n          \"type\": \"ImGuiMemFreeFunc\"\n        },\n        {\n          \"name\": \"user_data\",\n          \"type\": \"void*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiMemAllocFunc alloc_func,ImGuiMemFreeFunc free_func,void* user_data=((void*)0))\",\n      \"call_args\": \"(alloc_func,free_func,user_data)\",\n      \"cimguiname\": \"igSetAllocatorFunctions\",\n      \"defaults\": {\n        \"user_data\": \"NULL\"\n      },\n      \"funcname\": \"SetAllocatorFunctions\",\n      \"location\": \"imgui:1054\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igSetAllocatorFunctions\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiMemAllocFunc,ImGuiMemFreeFunc,void*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igSetClipboardText\": [\n    {\n      \"args\": \"(const char* text)\",\n      \"argsT\": [\n        {\n          \"name\": \"text\",\n          \"type\": \"const char*\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* text)\",\n      \"call_args\": \"(text)\",\n      \"cimguiname\": \"igSetClipboardText\",\n      \"defaults\": {},\n      \"funcname\": \"SetClipboardText\",\n      \"location\": \"imgui:1028\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igSetClipboardText\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igSetColorEditOptions\": [\n    {\n      \"args\": \"(ImGuiColorEditFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiColorEditFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiColorEditFlags flags)\",\n      \"call_args\": \"(flags)\",\n      \"cimguiname\": \"igSetColorEditOptions\",\n      \"defaults\": {},\n      \"funcname\": \"SetColorEditOptions\",\n      \"location\": \"imgui:653\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igSetColorEditOptions\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiColorEditFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igSetColumnOffset\": [\n    {\n      \"args\": \"(int column_index,float offset_x)\",\n      \"argsT\": [\n        {\n          \"name\": \"column_index\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"offset_x\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(int column_index,float offset_x)\",\n      \"call_args\": \"(column_index,offset_x)\",\n      \"cimguiname\": \"igSetColumnOffset\",\n      \"defaults\": {},\n      \"funcname\": \"SetColumnOffset\",\n      \"location\": \"imgui:858\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igSetColumnOffset\",\n      \"ret\": \"void\",\n      \"signature\": \"(int,float)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igSetColumnWidth\": [\n    {\n      \"args\": \"(int column_index,float width)\",\n      \"argsT\": [\n        {\n          \"name\": \"column_index\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"width\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(int column_index,float width)\",\n      \"call_args\": \"(column_index,width)\",\n      \"cimguiname\": \"igSetColumnWidth\",\n      \"defaults\": {},\n      \"funcname\": \"SetColumnWidth\",\n      \"location\": \"imgui:856\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igSetColumnWidth\",\n      \"ret\": \"void\",\n      \"signature\": \"(int,float)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igSetCurrentContext\": [\n    {\n      \"args\": \"(ImGuiContext* ctx)\",\n      \"argsT\": [\n        {\n          \"name\": \"ctx\",\n          \"type\": \"ImGuiContext*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiContext* ctx)\",\n      \"call_args\": \"(ctx)\",\n      \"cimguiname\": \"igSetCurrentContext\",\n      \"defaults\": {},\n      \"funcname\": \"SetCurrentContext\",\n      \"location\": \"imgui:330\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igSetCurrentContext\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiContext*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igSetCurrentFont\": [\n    {\n      \"args\": \"(ImFont* font)\",\n      \"argsT\": [\n        {\n          \"name\": \"font\",\n          \"type\": \"ImFont*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImFont* font)\",\n      \"call_args\": \"(font)\",\n      \"cimguiname\": \"igSetCurrentFont\",\n      \"defaults\": {},\n      \"funcname\": \"SetCurrentFont\",\n      \"location\": \"imgui_internal:3005\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igSetCurrentFont\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImFont*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igSetCursorPos\": [\n    {\n      \"args\": \"(const ImVec2 local_pos)\",\n      \"argsT\": [\n        {\n          \"name\": \"local_pos\",\n          \"type\": \"const ImVec2\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImVec2& local_pos)\",\n      \"call_args\": \"(local_pos)\",\n      \"cimguiname\": \"igSetCursorPos\",\n      \"defaults\": {},\n      \"funcname\": \"SetCursorPos\",\n      \"location\": \"imgui:489\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igSetCursorPos\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImVec2)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igSetCursorPosX\": [\n    {\n      \"args\": \"(float local_x)\",\n      \"argsT\": [\n        {\n          \"name\": \"local_x\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(float local_x)\",\n      \"call_args\": \"(local_x)\",\n      \"cimguiname\": \"igSetCursorPosX\",\n      \"defaults\": {},\n      \"funcname\": \"SetCursorPosX\",\n      \"location\": \"imgui:490\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igSetCursorPosX\",\n      \"ret\": \"void\",\n      \"signature\": \"(float)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igSetCursorPosY\": [\n    {\n      \"args\": \"(float local_y)\",\n      \"argsT\": [\n        {\n          \"name\": \"local_y\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(float local_y)\",\n      \"call_args\": \"(local_y)\",\n      \"cimguiname\": \"igSetCursorPosY\",\n      \"defaults\": {},\n      \"funcname\": \"SetCursorPosY\",\n      \"location\": \"imgui:491\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igSetCursorPosY\",\n      \"ret\": \"void\",\n      \"signature\": \"(float)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igSetCursorScreenPos\": [\n    {\n      \"args\": \"(const ImVec2 pos)\",\n      \"argsT\": [\n        {\n          \"name\": \"pos\",\n          \"type\": \"const ImVec2\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImVec2& pos)\",\n      \"call_args\": \"(pos)\",\n      \"cimguiname\": \"igSetCursorScreenPos\",\n      \"defaults\": {},\n      \"funcname\": \"SetCursorScreenPos\",\n      \"location\": \"imgui:484\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igSetCursorScreenPos\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImVec2)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igSetDragDropPayload\": [\n    {\n      \"args\": \"(const char* type,const void* data,size_t sz,ImGuiCond cond)\",\n      \"argsT\": [\n        {\n          \"name\": \"type\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"data\",\n          \"type\": \"const void*\"\n        },\n        {\n          \"name\": \"sz\",\n          \"type\": \"size_t\"\n        },\n        {\n          \"name\": \"cond\",\n          \"type\": \"ImGuiCond\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* type,const void* data,size_t sz,ImGuiCond cond=0)\",\n      \"call_args\": \"(type,data,sz,cond)\",\n      \"cimguiname\": \"igSetDragDropPayload\",\n      \"defaults\": {\n        \"cond\": \"0\"\n      },\n      \"funcname\": \"SetDragDropPayload\",\n      \"location\": \"imgui:886\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igSetDragDropPayload\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*,const void*,size_t,ImGuiCond)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igSetFocusID\": [\n    {\n      \"args\": \"(ImGuiID id,ImGuiWindow* window)\",\n      \"argsT\": [\n        {\n          \"name\": \"id\",\n          \"type\": \"ImGuiID\"\n        },\n        {\n          \"name\": \"window\",\n          \"type\": \"ImGuiWindow*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiID id,ImGuiWindow* window)\",\n      \"call_args\": \"(id,window)\",\n      \"cimguiname\": \"igSetFocusID\",\n      \"defaults\": {},\n      \"funcname\": \"SetFocusID\",\n      \"location\": \"imgui_internal:3071\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igSetFocusID\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiID,ImGuiWindow*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igSetHoveredID\": [\n    {\n      \"args\": \"(ImGuiID id)\",\n      \"argsT\": [\n        {\n          \"name\": \"id\",\n          \"type\": \"ImGuiID\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiID id)\",\n      \"call_args\": \"(id)\",\n      \"cimguiname\": \"igSetHoveredID\",\n      \"defaults\": {},\n      \"funcname\": \"SetHoveredID\",\n      \"location\": \"imgui_internal:3074\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igSetHoveredID\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiID)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igSetItemDefaultFocus\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igSetItemDefaultFocus\",\n      \"defaults\": {},\n      \"funcname\": \"SetItemDefaultFocus\",\n      \"location\": \"imgui:907\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igSetItemDefaultFocus\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igSetItemKeyOwner\": [\n    {\n      \"args\": \"(ImGuiKey key)\",\n      \"argsT\": [\n        {\n          \"name\": \"key\",\n          \"type\": \"ImGuiKey\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiKey key)\",\n      \"call_args\": \"(key)\",\n      \"cimguiname\": \"igSetItemKeyOwner\",\n      \"defaults\": {},\n      \"funcname\": \"SetItemKeyOwner\",\n      \"location\": \"imgui:1002\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igSetItemKeyOwner_Nil\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiKey)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(ImGuiKey key,ImGuiInputFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"key\",\n          \"type\": \"ImGuiKey\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiInputFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiKey key,ImGuiInputFlags flags)\",\n      \"call_args\": \"(key,flags)\",\n      \"cimguiname\": \"igSetItemKeyOwner\",\n      \"defaults\": {},\n      \"funcname\": \"SetItemKeyOwner\",\n      \"location\": \"imgui_internal:3208\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igSetItemKeyOwner_InputFlags\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiKey,ImGuiInputFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igSetItemTooltip\": [\n    {\n      \"args\": \"(const char* fmt,...)\",\n      \"argsT\": [\n        {\n          \"name\": \"fmt\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"...\",\n          \"type\": \"...\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* fmt,...)\",\n      \"call_args\": \"(fmt,...)\",\n      \"cimguiname\": \"igSetItemTooltip\",\n      \"defaults\": {},\n      \"funcname\": \"SetItemTooltip\",\n      \"isvararg\": \"...)\",\n      \"location\": \"imgui:748\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igSetItemTooltip\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,...)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igSetItemTooltipV\": [\n    {\n      \"args\": \"(const char* fmt,va_list args)\",\n      \"argsT\": [\n        {\n          \"name\": \"fmt\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"args\",\n          \"type\": \"va_list\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* fmt,va_list args)\",\n      \"call_args\": \"(fmt,args)\",\n      \"cimguiname\": \"igSetItemTooltipV\",\n      \"defaults\": {},\n      \"funcname\": \"SetItemTooltipV\",\n      \"location\": \"imgui:749\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igSetItemTooltipV\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,va_list)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igSetKeyOwner\": [\n    {\n      \"args\": \"(ImGuiKey key,ImGuiID owner_id,ImGuiInputFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"key\",\n          \"type\": \"ImGuiKey\"\n        },\n        {\n          \"name\": \"owner_id\",\n          \"type\": \"ImGuiID\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiInputFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiKey key,ImGuiID owner_id,ImGuiInputFlags flags=0)\",\n      \"call_args\": \"(key,owner_id,flags)\",\n      \"cimguiname\": \"igSetKeyOwner\",\n      \"defaults\": {\n        \"flags\": \"0\"\n      },\n      \"funcname\": \"SetKeyOwner\",\n      \"location\": \"imgui_internal:3206\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igSetKeyOwner\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiKey,ImGuiID,ImGuiInputFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igSetKeyOwnersForKeyChord\": [\n    {\n      \"args\": \"(ImGuiKeyChord key,ImGuiID owner_id,ImGuiInputFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"key\",\n          \"type\": \"ImGuiKeyChord\"\n        },\n        {\n          \"name\": \"owner_id\",\n          \"type\": \"ImGuiID\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiInputFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiKeyChord key,ImGuiID owner_id,ImGuiInputFlags flags=0)\",\n      \"call_args\": \"(key,owner_id,flags)\",\n      \"cimguiname\": \"igSetKeyOwnersForKeyChord\",\n      \"defaults\": {\n        \"flags\": \"0\"\n      },\n      \"funcname\": \"SetKeyOwnersForKeyChord\",\n      \"location\": \"imgui_internal:3207\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igSetKeyOwnersForKeyChord\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiKeyChord,ImGuiID,ImGuiInputFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igSetKeyboardFocusHere\": [\n    {\n      \"args\": \"(int offset)\",\n      \"argsT\": [\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(int offset=0)\",\n      \"call_args\": \"(offset)\",\n      \"cimguiname\": \"igSetKeyboardFocusHere\",\n      \"defaults\": {\n        \"offset\": \"0\"\n      },\n      \"funcname\": \"SetKeyboardFocusHere\",\n      \"location\": \"imgui:908\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igSetKeyboardFocusHere\",\n      \"ret\": \"void\",\n      \"signature\": \"(int)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igSetLastItemData\": [\n    {\n      \"args\": \"(ImGuiID item_id,ImGuiItemFlags in_flags,ImGuiItemStatusFlags status_flags,const ImRect item_rect)\",\n      \"argsT\": [\n        {\n          \"name\": \"item_id\",\n          \"type\": \"ImGuiID\"\n        },\n        {\n          \"name\": \"in_flags\",\n          \"type\": \"ImGuiItemFlags\"\n        },\n        {\n          \"name\": \"status_flags\",\n          \"type\": \"ImGuiItemStatusFlags\"\n        },\n        {\n          \"name\": \"item_rect\",\n          \"type\": \"const ImRect\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiID item_id,ImGuiItemFlags in_flags,ImGuiItemStatusFlags status_flags,const ImRect& item_rect)\",\n      \"call_args\": \"(item_id,in_flags,status_flags,item_rect)\",\n      \"cimguiname\": \"igSetLastItemData\",\n      \"defaults\": {},\n      \"funcname\": \"SetLastItemData\",\n      \"location\": \"imgui_internal:3088\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igSetLastItemData\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiID,ImGuiItemFlags,ImGuiItemStatusFlags,const ImRect)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igSetMouseCursor\": [\n    {\n      \"args\": \"(ImGuiMouseCursor cursor_type)\",\n      \"argsT\": [\n        {\n          \"name\": \"cursor_type\",\n          \"type\": \"ImGuiMouseCursor\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiMouseCursor cursor_type)\",\n      \"call_args\": \"(cursor_type)\",\n      \"cimguiname\": \"igSetMouseCursor\",\n      \"defaults\": {},\n      \"funcname\": \"SetMouseCursor\",\n      \"location\": \"imgui:1022\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igSetMouseCursor\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiMouseCursor)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igSetNavCursorVisible\": [\n    {\n      \"args\": \"(bool visible)\",\n      \"argsT\": [\n        {\n          \"name\": \"visible\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"argsoriginal\": \"(bool visible)\",\n      \"call_args\": \"(visible)\",\n      \"cimguiname\": \"igSetNavCursorVisible\",\n      \"defaults\": {},\n      \"funcname\": \"SetNavCursorVisible\",\n      \"location\": \"imgui:911\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igSetNavCursorVisible\",\n      \"ret\": \"void\",\n      \"signature\": \"(bool)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igSetNavCursorVisibleAfterMove\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igSetNavCursorVisibleAfterMove\",\n      \"defaults\": {},\n      \"funcname\": \"SetNavCursorVisibleAfterMove\",\n      \"location\": \"imgui_internal:3149\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igSetNavCursorVisibleAfterMove\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igSetNavFocusScope\": [\n    {\n      \"args\": \"(ImGuiID focus_scope_id)\",\n      \"argsT\": [\n        {\n          \"name\": \"focus_scope_id\",\n          \"type\": \"ImGuiID\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiID focus_scope_id)\",\n      \"call_args\": \"(focus_scope_id)\",\n      \"cimguiname\": \"igSetNavFocusScope\",\n      \"defaults\": {},\n      \"funcname\": \"SetNavFocusScope\",\n      \"location\": \"imgui_internal:3153\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igSetNavFocusScope\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiID)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igSetNavID\": [\n    {\n      \"args\": \"(ImGuiID id,ImGuiNavLayer nav_layer,ImGuiID focus_scope_id,const ImRect rect_rel)\",\n      \"argsT\": [\n        {\n          \"name\": \"id\",\n          \"type\": \"ImGuiID\"\n        },\n        {\n          \"name\": \"nav_layer\",\n          \"type\": \"ImGuiNavLayer\"\n        },\n        {\n          \"name\": \"focus_scope_id\",\n          \"type\": \"ImGuiID\"\n        },\n        {\n          \"name\": \"rect_rel\",\n          \"type\": \"const ImRect\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiID id,ImGuiNavLayer nav_layer,ImGuiID focus_scope_id,const ImRect& rect_rel)\",\n      \"call_args\": \"(id,nav_layer,focus_scope_id,rect_rel)\",\n      \"cimguiname\": \"igSetNavID\",\n      \"defaults\": {},\n      \"funcname\": \"SetNavID\",\n      \"location\": \"imgui_internal:3152\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igSetNavID\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiID,ImGuiNavLayer,ImGuiID,const ImRect)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igSetNavWindow\": [\n    {\n      \"args\": \"(ImGuiWindow* window)\",\n      \"argsT\": [\n        {\n          \"name\": \"window\",\n          \"type\": \"ImGuiWindow*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiWindow* window)\",\n      \"call_args\": \"(window)\",\n      \"cimguiname\": \"igSetNavWindow\",\n      \"defaults\": {},\n      \"funcname\": \"SetNavWindow\",\n      \"location\": \"imgui_internal:3151\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igSetNavWindow\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiWindow*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igSetNextFrameWantCaptureKeyboard\": [\n    {\n      \"args\": \"(bool want_capture_keyboard)\",\n      \"argsT\": [\n        {\n          \"name\": \"want_capture_keyboard\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"argsoriginal\": \"(bool want_capture_keyboard)\",\n      \"call_args\": \"(want_capture_keyboard)\",\n      \"cimguiname\": \"igSetNextFrameWantCaptureKeyboard\",\n      \"defaults\": {},\n      \"funcname\": \"SetNextFrameWantCaptureKeyboard\",\n      \"location\": \"imgui:976\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igSetNextFrameWantCaptureKeyboard\",\n      \"ret\": \"void\",\n      \"signature\": \"(bool)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igSetNextFrameWantCaptureMouse\": [\n    {\n      \"args\": \"(bool want_capture_mouse)\",\n      \"argsT\": [\n        {\n          \"name\": \"want_capture_mouse\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"argsoriginal\": \"(bool want_capture_mouse)\",\n      \"call_args\": \"(want_capture_mouse)\",\n      \"cimguiname\": \"igSetNextFrameWantCaptureMouse\",\n      \"defaults\": {},\n      \"funcname\": \"SetNextFrameWantCaptureMouse\",\n      \"location\": \"imgui:1023\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igSetNextFrameWantCaptureMouse\",\n      \"ret\": \"void\",\n      \"signature\": \"(bool)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igSetNextItemAllowOverlap\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igSetNextItemAllowOverlap\",\n      \"defaults\": {},\n      \"funcname\": \"SetNextItemAllowOverlap\",\n      \"location\": \"imgui:914\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igSetNextItemAllowOverlap\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igSetNextItemOpen\": [\n    {\n      \"args\": \"(bool is_open,ImGuiCond cond)\",\n      \"argsT\": [\n        {\n          \"name\": \"is_open\",\n          \"type\": \"bool\"\n        },\n        {\n          \"name\": \"cond\",\n          \"type\": \"ImGuiCond\"\n        }\n      ],\n      \"argsoriginal\": \"(bool is_open,ImGuiCond cond=0)\",\n      \"call_args\": \"(is_open,cond)\",\n      \"cimguiname\": \"igSetNextItemOpen\",\n      \"defaults\": {\n        \"cond\": \"0\"\n      },\n      \"funcname\": \"SetNextItemOpen\",\n      \"location\": \"imgui:673\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igSetNextItemOpen\",\n      \"ret\": \"void\",\n      \"signature\": \"(bool,ImGuiCond)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igSetNextItemRefVal\": [\n    {\n      \"args\": \"(ImGuiDataType data_type,void* p_data)\",\n      \"argsT\": [\n        {\n          \"name\": \"data_type\",\n          \"type\": \"ImGuiDataType\"\n        },\n        {\n          \"name\": \"p_data\",\n          \"type\": \"void*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiDataType data_type,void* p_data)\",\n      \"call_args\": \"(data_type,p_data)\",\n      \"cimguiname\": \"igSetNextItemRefVal\",\n      \"defaults\": {},\n      \"funcname\": \"SetNextItemRefVal\",\n      \"location\": \"imgui_internal:3459\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igSetNextItemRefVal\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiDataType,void*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igSetNextItemSelectionUserData\": [\n    {\n      \"args\": \"(ImGuiSelectionUserData selection_user_data)\",\n      \"argsT\": [\n        {\n          \"name\": \"selection_user_data\",\n          \"type\": \"ImGuiSelectionUserData\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiSelectionUserData selection_user_data)\",\n      \"call_args\": \"(selection_user_data)\",\n      \"cimguiname\": \"igSetNextItemSelectionUserData\",\n      \"defaults\": {},\n      \"funcname\": \"SetNextItemSelectionUserData\",\n      \"location\": \"imgui:691\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igSetNextItemSelectionUserData\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiSelectionUserData)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igSetNextItemShortcut\": [\n    {\n      \"args\": \"(ImGuiKeyChord key_chord,ImGuiInputFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"key_chord\",\n          \"type\": \"ImGuiKeyChord\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiInputFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiKeyChord key_chord,ImGuiInputFlags flags=0)\",\n      \"call_args\": \"(key_chord,flags)\",\n      \"cimguiname\": \"igSetNextItemShortcut\",\n      \"defaults\": {\n        \"flags\": \"0\"\n      },\n      \"funcname\": \"SetNextItemShortcut\",\n      \"location\": \"imgui:994\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igSetNextItemShortcut\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiKeyChord,ImGuiInputFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igSetNextItemStorageID\": [\n    {\n      \"args\": \"(ImGuiID storage_id)\",\n      \"argsT\": [\n        {\n          \"name\": \"storage_id\",\n          \"type\": \"ImGuiID\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiID storage_id)\",\n      \"call_args\": \"(storage_id)\",\n      \"cimguiname\": \"igSetNextItemStorageID\",\n      \"defaults\": {},\n      \"funcname\": \"SetNextItemStorageID\",\n      \"location\": \"imgui:674\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igSetNextItemStorageID\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiID)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igSetNextItemWidth\": [\n    {\n      \"args\": \"(float item_width)\",\n      \"argsT\": [\n        {\n          \"name\": \"item_width\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(float item_width)\",\n      \"call_args\": \"(item_width)\",\n      \"cimguiname\": \"igSetNextItemWidth\",\n      \"defaults\": {},\n      \"funcname\": \"SetNextItemWidth\",\n      \"location\": \"imgui:458\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igSetNextItemWidth\",\n      \"ret\": \"void\",\n      \"signature\": \"(float)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igSetNextWindowBgAlpha\": [\n    {\n      \"args\": \"(float alpha)\",\n      \"argsT\": [\n        {\n          \"name\": \"alpha\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(float alpha)\",\n      \"call_args\": \"(alpha)\",\n      \"cimguiname\": \"igSetNextWindowBgAlpha\",\n      \"defaults\": {},\n      \"funcname\": \"SetNextWindowBgAlpha\",\n      \"location\": \"imgui:416\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igSetNextWindowBgAlpha\",\n      \"ret\": \"void\",\n      \"signature\": \"(float)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igSetNextWindowCollapsed\": [\n    {\n      \"args\": \"(bool collapsed,ImGuiCond cond)\",\n      \"argsT\": [\n        {\n          \"name\": \"collapsed\",\n          \"type\": \"bool\"\n        },\n        {\n          \"name\": \"cond\",\n          \"type\": \"ImGuiCond\"\n        }\n      ],\n      \"argsoriginal\": \"(bool collapsed,ImGuiCond cond=0)\",\n      \"call_args\": \"(collapsed,cond)\",\n      \"cimguiname\": \"igSetNextWindowCollapsed\",\n      \"defaults\": {\n        \"cond\": \"0\"\n      },\n      \"funcname\": \"SetNextWindowCollapsed\",\n      \"location\": \"imgui:413\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igSetNextWindowCollapsed\",\n      \"ret\": \"void\",\n      \"signature\": \"(bool,ImGuiCond)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igSetNextWindowContentSize\": [\n    {\n      \"args\": \"(const ImVec2 size)\",\n      \"argsT\": [\n        {\n          \"name\": \"size\",\n          \"type\": \"const ImVec2\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImVec2& size)\",\n      \"call_args\": \"(size)\",\n      \"cimguiname\": \"igSetNextWindowContentSize\",\n      \"defaults\": {},\n      \"funcname\": \"SetNextWindowContentSize\",\n      \"location\": \"imgui:412\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igSetNextWindowContentSize\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImVec2)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igSetNextWindowFocus\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igSetNextWindowFocus\",\n      \"defaults\": {},\n      \"funcname\": \"SetNextWindowFocus\",\n      \"location\": \"imgui:414\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igSetNextWindowFocus\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igSetNextWindowPos\": [\n    {\n      \"args\": \"(const ImVec2 pos,ImGuiCond cond,const ImVec2 pivot)\",\n      \"argsT\": [\n        {\n          \"name\": \"pos\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"cond\",\n          \"type\": \"ImGuiCond\"\n        },\n        {\n          \"name\": \"pivot\",\n          \"type\": \"const ImVec2\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImVec2& pos,ImGuiCond cond=0,const ImVec2& pivot=ImVec2(0,0))\",\n      \"call_args\": \"(pos,cond,pivot)\",\n      \"cimguiname\": \"igSetNextWindowPos\",\n      \"defaults\": {\n        \"cond\": \"0\",\n        \"pivot\": \"ImVec2(0,0)\"\n      },\n      \"funcname\": \"SetNextWindowPos\",\n      \"location\": \"imgui:409\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igSetNextWindowPos\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImVec2,ImGuiCond,const ImVec2)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igSetNextWindowRefreshPolicy\": [\n    {\n      \"args\": \"(ImGuiWindowRefreshFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiWindowRefreshFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiWindowRefreshFlags flags)\",\n      \"call_args\": \"(flags)\",\n      \"cimguiname\": \"igSetNextWindowRefreshPolicy\",\n      \"defaults\": {},\n      \"funcname\": \"SetNextWindowRefreshPolicy\",\n      \"location\": \"imgui_internal:3002\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igSetNextWindowRefreshPolicy\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiWindowRefreshFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igSetNextWindowScroll\": [\n    {\n      \"args\": \"(const ImVec2 scroll)\",\n      \"argsT\": [\n        {\n          \"name\": \"scroll\",\n          \"type\": \"const ImVec2\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImVec2& scroll)\",\n      \"call_args\": \"(scroll)\",\n      \"cimguiname\": \"igSetNextWindowScroll\",\n      \"defaults\": {},\n      \"funcname\": \"SetNextWindowScroll\",\n      \"location\": \"imgui:415\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igSetNextWindowScroll\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImVec2)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igSetNextWindowSize\": [\n    {\n      \"args\": \"(const ImVec2 size,ImGuiCond cond)\",\n      \"argsT\": [\n        {\n          \"name\": \"size\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"cond\",\n          \"type\": \"ImGuiCond\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImVec2& size,ImGuiCond cond=0)\",\n      \"call_args\": \"(size,cond)\",\n      \"cimguiname\": \"igSetNextWindowSize\",\n      \"defaults\": {\n        \"cond\": \"0\"\n      },\n      \"funcname\": \"SetNextWindowSize\",\n      \"location\": \"imgui:410\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igSetNextWindowSize\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImVec2,ImGuiCond)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igSetNextWindowSizeConstraints\": [\n    {\n      \"args\": \"(const ImVec2 size_min,const ImVec2 size_max,ImGuiSizeCallback custom_callback,void* custom_callback_data)\",\n      \"argsT\": [\n        {\n          \"name\": \"size_min\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"size_max\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"custom_callback\",\n          \"type\": \"ImGuiSizeCallback\"\n        },\n        {\n          \"name\": \"custom_callback_data\",\n          \"type\": \"void*\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImVec2& size_min,const ImVec2& size_max,ImGuiSizeCallback custom_callback=((void*)0),void* custom_callback_data=((void*)0))\",\n      \"call_args\": \"(size_min,size_max,custom_callback,custom_callback_data)\",\n      \"cimguiname\": \"igSetNextWindowSizeConstraints\",\n      \"defaults\": {\n        \"custom_callback\": \"NULL\",\n        \"custom_callback_data\": \"NULL\"\n      },\n      \"funcname\": \"SetNextWindowSizeConstraints\",\n      \"location\": \"imgui:411\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igSetNextWindowSizeConstraints\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImVec2,const ImVec2,ImGuiSizeCallback,void*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igSetScrollFromPosX\": [\n    {\n      \"args\": \"(float local_x,float center_x_ratio)\",\n      \"argsT\": [\n        {\n          \"name\": \"local_x\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"center_x_ratio\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(float local_x,float center_x_ratio=0.5f)\",\n      \"call_args\": \"(local_x,center_x_ratio)\",\n      \"cimguiname\": \"igSetScrollFromPosX\",\n      \"defaults\": {\n        \"center_x_ratio\": \"0.5f\"\n      },\n      \"funcname\": \"SetScrollFromPosX\",\n      \"location\": \"imgui:438\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igSetScrollFromPosX_Float\",\n      \"ret\": \"void\",\n      \"signature\": \"(float,float)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(ImGuiWindow* window,float local_x,float center_x_ratio)\",\n      \"argsT\": [\n        {\n          \"name\": \"window\",\n          \"type\": \"ImGuiWindow*\"\n        },\n        {\n          \"name\": \"local_x\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"center_x_ratio\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiWindow* window,float local_x,float center_x_ratio)\",\n      \"call_args\": \"(window,local_x,center_x_ratio)\",\n      \"cimguiname\": \"igSetScrollFromPosX\",\n      \"defaults\": {},\n      \"funcname\": \"SetScrollFromPosX\",\n      \"location\": \"imgui_internal:3054\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igSetScrollFromPosX_WindowPtr\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiWindow*,float,float)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igSetScrollFromPosY\": [\n    {\n      \"args\": \"(float local_y,float center_y_ratio)\",\n      \"argsT\": [\n        {\n          \"name\": \"local_y\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"center_y_ratio\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(float local_y,float center_y_ratio=0.5f)\",\n      \"call_args\": \"(local_y,center_y_ratio)\",\n      \"cimguiname\": \"igSetScrollFromPosY\",\n      \"defaults\": {\n        \"center_y_ratio\": \"0.5f\"\n      },\n      \"funcname\": \"SetScrollFromPosY\",\n      \"location\": \"imgui:439\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igSetScrollFromPosY_Float\",\n      \"ret\": \"void\",\n      \"signature\": \"(float,float)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(ImGuiWindow* window,float local_y,float center_y_ratio)\",\n      \"argsT\": [\n        {\n          \"name\": \"window\",\n          \"type\": \"ImGuiWindow*\"\n        },\n        {\n          \"name\": \"local_y\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"center_y_ratio\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiWindow* window,float local_y,float center_y_ratio)\",\n      \"call_args\": \"(window,local_y,center_y_ratio)\",\n      \"cimguiname\": \"igSetScrollFromPosY\",\n      \"defaults\": {},\n      \"funcname\": \"SetScrollFromPosY\",\n      \"location\": \"imgui_internal:3055\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igSetScrollFromPosY_WindowPtr\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiWindow*,float,float)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igSetScrollHereX\": [\n    {\n      \"args\": \"(float center_x_ratio)\",\n      \"argsT\": [\n        {\n          \"name\": \"center_x_ratio\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(float center_x_ratio=0.5f)\",\n      \"call_args\": \"(center_x_ratio)\",\n      \"cimguiname\": \"igSetScrollHereX\",\n      \"defaults\": {\n        \"center_x_ratio\": \"0.5f\"\n      },\n      \"funcname\": \"SetScrollHereX\",\n      \"location\": \"imgui:436\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igSetScrollHereX\",\n      \"ret\": \"void\",\n      \"signature\": \"(float)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igSetScrollHereY\": [\n    {\n      \"args\": \"(float center_y_ratio)\",\n      \"argsT\": [\n        {\n          \"name\": \"center_y_ratio\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(float center_y_ratio=0.5f)\",\n      \"call_args\": \"(center_y_ratio)\",\n      \"cimguiname\": \"igSetScrollHereY\",\n      \"defaults\": {\n        \"center_y_ratio\": \"0.5f\"\n      },\n      \"funcname\": \"SetScrollHereY\",\n      \"location\": \"imgui:437\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igSetScrollHereY\",\n      \"ret\": \"void\",\n      \"signature\": \"(float)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igSetScrollX\": [\n    {\n      \"args\": \"(float scroll_x)\",\n      \"argsT\": [\n        {\n          \"name\": \"scroll_x\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(float scroll_x)\",\n      \"call_args\": \"(scroll_x)\",\n      \"cimguiname\": \"igSetScrollX\",\n      \"defaults\": {},\n      \"funcname\": \"SetScrollX\",\n      \"location\": \"imgui:432\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igSetScrollX_Float\",\n      \"ret\": \"void\",\n      \"signature\": \"(float)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(ImGuiWindow* window,float scroll_x)\",\n      \"argsT\": [\n        {\n          \"name\": \"window\",\n          \"type\": \"ImGuiWindow*\"\n        },\n        {\n          \"name\": \"scroll_x\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiWindow* window,float scroll_x)\",\n      \"call_args\": \"(window,scroll_x)\",\n      \"cimguiname\": \"igSetScrollX\",\n      \"defaults\": {},\n      \"funcname\": \"SetScrollX\",\n      \"location\": \"imgui_internal:3052\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igSetScrollX_WindowPtr\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiWindow*,float)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igSetScrollY\": [\n    {\n      \"args\": \"(float scroll_y)\",\n      \"argsT\": [\n        {\n          \"name\": \"scroll_y\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(float scroll_y)\",\n      \"call_args\": \"(scroll_y)\",\n      \"cimguiname\": \"igSetScrollY\",\n      \"defaults\": {},\n      \"funcname\": \"SetScrollY\",\n      \"location\": \"imgui:433\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igSetScrollY_Float\",\n      \"ret\": \"void\",\n      \"signature\": \"(float)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(ImGuiWindow* window,float scroll_y)\",\n      \"argsT\": [\n        {\n          \"name\": \"window\",\n          \"type\": \"ImGuiWindow*\"\n        },\n        {\n          \"name\": \"scroll_y\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiWindow* window,float scroll_y)\",\n      \"call_args\": \"(window,scroll_y)\",\n      \"cimguiname\": \"igSetScrollY\",\n      \"defaults\": {},\n      \"funcname\": \"SetScrollY\",\n      \"location\": \"imgui_internal:3053\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igSetScrollY_WindowPtr\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiWindow*,float)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igSetShortcutRouting\": [\n    {\n      \"args\": \"(ImGuiKeyChord key_chord,ImGuiInputFlags flags,ImGuiID owner_id)\",\n      \"argsT\": [\n        {\n          \"name\": \"key_chord\",\n          \"type\": \"ImGuiKeyChord\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiInputFlags\"\n        },\n        {\n          \"name\": \"owner_id\",\n          \"type\": \"ImGuiID\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiKeyChord key_chord,ImGuiInputFlags flags,ImGuiID owner_id)\",\n      \"call_args\": \"(key_chord,flags,owner_id)\",\n      \"cimguiname\": \"igSetShortcutRouting\",\n      \"defaults\": {},\n      \"funcname\": \"SetShortcutRouting\",\n      \"location\": \"imgui_internal:3242\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igSetShortcutRouting\",\n      \"ret\": \"bool\",\n      \"signature\": \"(ImGuiKeyChord,ImGuiInputFlags,ImGuiID)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igSetStateStorage\": [\n    {\n      \"args\": \"(ImGuiStorage* storage)\",\n      \"argsT\": [\n        {\n          \"name\": \"storage\",\n          \"type\": \"ImGuiStorage*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiStorage* storage)\",\n      \"call_args\": \"(storage)\",\n      \"cimguiname\": \"igSetStateStorage\",\n      \"defaults\": {},\n      \"funcname\": \"SetStateStorage\",\n      \"location\": \"imgui:954\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igSetStateStorage\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiStorage*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igSetTabItemClosed\": [\n    {\n      \"args\": \"(const char* tab_or_docked_window_label)\",\n      \"argsT\": [\n        {\n          \"name\": \"tab_or_docked_window_label\",\n          \"type\": \"const char*\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* tab_or_docked_window_label)\",\n      \"call_args\": \"(tab_or_docked_window_label)\",\n      \"cimguiname\": \"igSetTabItemClosed\",\n      \"defaults\": {},\n      \"funcname\": \"SetTabItemClosed\",\n      \"location\": \"imgui:868\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igSetTabItemClosed\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igSetTooltip\": [\n    {\n      \"args\": \"(const char* fmt,...)\",\n      \"argsT\": [\n        {\n          \"name\": \"fmt\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"...\",\n          \"type\": \"...\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* fmt,...)\",\n      \"call_args\": \"(fmt,...)\",\n      \"cimguiname\": \"igSetTooltip\",\n      \"defaults\": {},\n      \"funcname\": \"SetTooltip\",\n      \"isvararg\": \"...)\",\n      \"location\": \"imgui:740\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igSetTooltip\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,...)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igSetTooltipV\": [\n    {\n      \"args\": \"(const char* fmt,va_list args)\",\n      \"argsT\": [\n        {\n          \"name\": \"fmt\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"args\",\n          \"type\": \"va_list\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* fmt,va_list args)\",\n      \"call_args\": \"(fmt,args)\",\n      \"cimguiname\": \"igSetTooltipV\",\n      \"defaults\": {},\n      \"funcname\": \"SetTooltipV\",\n      \"location\": \"imgui:741\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igSetTooltipV\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,va_list)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igSetWindowClipRectBeforeSetChannel\": [\n    {\n      \"args\": \"(ImGuiWindow* window,const ImRect clip_rect)\",\n      \"argsT\": [\n        {\n          \"name\": \"window\",\n          \"type\": \"ImGuiWindow*\"\n        },\n        {\n          \"name\": \"clip_rect\",\n          \"type\": \"const ImRect\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiWindow* window,const ImRect& clip_rect)\",\n      \"call_args\": \"(window,clip_rect)\",\n      \"cimguiname\": \"igSetWindowClipRectBeforeSetChannel\",\n      \"defaults\": {},\n      \"funcname\": \"SetWindowClipRectBeforeSetChannel\",\n      \"location\": \"imgui_internal:3286\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igSetWindowClipRectBeforeSetChannel\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiWindow*,const ImRect)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igSetWindowCollapsed\": [\n    {\n      \"args\": \"(bool collapsed,ImGuiCond cond)\",\n      \"argsT\": [\n        {\n          \"name\": \"collapsed\",\n          \"type\": \"bool\"\n        },\n        {\n          \"name\": \"cond\",\n          \"type\": \"ImGuiCond\"\n        }\n      ],\n      \"argsoriginal\": \"(bool collapsed,ImGuiCond cond=0)\",\n      \"call_args\": \"(collapsed,cond)\",\n      \"cimguiname\": \"igSetWindowCollapsed\",\n      \"defaults\": {\n        \"cond\": \"0\"\n      },\n      \"funcname\": \"SetWindowCollapsed\",\n      \"location\": \"imgui:419\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igSetWindowCollapsed_Bool\",\n      \"ret\": \"void\",\n      \"signature\": \"(bool,ImGuiCond)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* name,bool collapsed,ImGuiCond cond)\",\n      \"argsT\": [\n        {\n          \"name\": \"name\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"collapsed\",\n          \"type\": \"bool\"\n        },\n        {\n          \"name\": \"cond\",\n          \"type\": \"ImGuiCond\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* name,bool collapsed,ImGuiCond cond=0)\",\n      \"call_args\": \"(name,collapsed,cond)\",\n      \"cimguiname\": \"igSetWindowCollapsed\",\n      \"defaults\": {\n        \"cond\": \"0\"\n      },\n      \"funcname\": \"SetWindowCollapsed\",\n      \"location\": \"imgui:424\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igSetWindowCollapsed_Str\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,bool,ImGuiCond)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(ImGuiWindow* window,bool collapsed,ImGuiCond cond)\",\n      \"argsT\": [\n        {\n          \"name\": \"window\",\n          \"type\": \"ImGuiWindow*\"\n        },\n        {\n          \"name\": \"collapsed\",\n          \"type\": \"bool\"\n        },\n        {\n          \"name\": \"cond\",\n          \"type\": \"ImGuiCond\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiWindow* window,bool collapsed,ImGuiCond cond=0)\",\n      \"call_args\": \"(window,collapsed,cond)\",\n      \"cimguiname\": \"igSetWindowCollapsed\",\n      \"defaults\": {\n        \"cond\": \"0\"\n      },\n      \"funcname\": \"SetWindowCollapsed\",\n      \"location\": \"imgui_internal:2982\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igSetWindowCollapsed_WindowPtr\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiWindow*,bool,ImGuiCond)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igSetWindowFocus\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igSetWindowFocus\",\n      \"defaults\": {},\n      \"funcname\": \"SetWindowFocus\",\n      \"location\": \"imgui:420\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igSetWindowFocus_Nil\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* name)\",\n      \"argsT\": [\n        {\n          \"name\": \"name\",\n          \"type\": \"const char*\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* name)\",\n      \"call_args\": \"(name)\",\n      \"cimguiname\": \"igSetWindowFocus\",\n      \"defaults\": {},\n      \"funcname\": \"SetWindowFocus\",\n      \"location\": \"imgui:425\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igSetWindowFocus_Str\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igSetWindowFontScale\": [\n    {\n      \"args\": \"(float scale)\",\n      \"argsT\": [\n        {\n          \"name\": \"scale\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(float scale)\",\n      \"call_args\": \"(scale)\",\n      \"cimguiname\": \"igSetWindowFontScale\",\n      \"defaults\": {},\n      \"funcname\": \"SetWindowFontScale\",\n      \"location\": \"imgui:421\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igSetWindowFontScale\",\n      \"ret\": \"void\",\n      \"signature\": \"(float)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igSetWindowHiddenAndSkipItemsForCurrentFrame\": [\n    {\n      \"args\": \"(ImGuiWindow* window)\",\n      \"argsT\": [\n        {\n          \"name\": \"window\",\n          \"type\": \"ImGuiWindow*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiWindow* window)\",\n      \"call_args\": \"(window)\",\n      \"cimguiname\": \"igSetWindowHiddenAndSkipItemsForCurrentFrame\",\n      \"defaults\": {},\n      \"funcname\": \"SetWindowHiddenAndSkipItemsForCurrentFrame\",\n      \"location\": \"imgui_internal:2984\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igSetWindowHiddenAndSkipItemsForCurrentFrame\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiWindow*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igSetWindowHitTestHole\": [\n    {\n      \"args\": \"(ImGuiWindow* window,const ImVec2 pos,const ImVec2 size)\",\n      \"argsT\": [\n        {\n          \"name\": \"window\",\n          \"type\": \"ImGuiWindow*\"\n        },\n        {\n          \"name\": \"pos\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"size\",\n          \"type\": \"const ImVec2\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiWindow* window,const ImVec2& pos,const ImVec2& size)\",\n      \"call_args\": \"(window,pos,size)\",\n      \"cimguiname\": \"igSetWindowHitTestHole\",\n      \"defaults\": {},\n      \"funcname\": \"SetWindowHitTestHole\",\n      \"location\": \"imgui_internal:2983\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igSetWindowHitTestHole\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiWindow*,const ImVec2,const ImVec2)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igSetWindowParentWindowForFocusRoute\": [\n    {\n      \"args\": \"(ImGuiWindow* window,ImGuiWindow* parent_window)\",\n      \"argsT\": [\n        {\n          \"name\": \"window\",\n          \"type\": \"ImGuiWindow*\"\n        },\n        {\n          \"name\": \"parent_window\",\n          \"type\": \"ImGuiWindow*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiWindow* window,ImGuiWindow* parent_window)\",\n      \"call_args\": \"(window,parent_window)\",\n      \"cimguiname\": \"igSetWindowParentWindowForFocusRoute\",\n      \"defaults\": {},\n      \"funcname\": \"SetWindowParentWindowForFocusRoute\",\n      \"location\": \"imgui_internal:2985\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igSetWindowParentWindowForFocusRoute\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiWindow*,ImGuiWindow*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igSetWindowPos\": [\n    {\n      \"args\": \"(const ImVec2 pos,ImGuiCond cond)\",\n      \"argsT\": [\n        {\n          \"name\": \"pos\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"cond\",\n          \"type\": \"ImGuiCond\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImVec2& pos,ImGuiCond cond=0)\",\n      \"call_args\": \"(pos,cond)\",\n      \"cimguiname\": \"igSetWindowPos\",\n      \"defaults\": {\n        \"cond\": \"0\"\n      },\n      \"funcname\": \"SetWindowPos\",\n      \"location\": \"imgui:417\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igSetWindowPos_Vec2\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImVec2,ImGuiCond)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* name,const ImVec2 pos,ImGuiCond cond)\",\n      \"argsT\": [\n        {\n          \"name\": \"name\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"pos\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"cond\",\n          \"type\": \"ImGuiCond\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* name,const ImVec2& pos,ImGuiCond cond=0)\",\n      \"call_args\": \"(name,pos,cond)\",\n      \"cimguiname\": \"igSetWindowPos\",\n      \"defaults\": {\n        \"cond\": \"0\"\n      },\n      \"funcname\": \"SetWindowPos\",\n      \"location\": \"imgui:422\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igSetWindowPos_Str\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImVec2,ImGuiCond)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(ImGuiWindow* window,const ImVec2 pos,ImGuiCond cond)\",\n      \"argsT\": [\n        {\n          \"name\": \"window\",\n          \"type\": \"ImGuiWindow*\"\n        },\n        {\n          \"name\": \"pos\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"cond\",\n          \"type\": \"ImGuiCond\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiWindow* window,const ImVec2& pos,ImGuiCond cond=0)\",\n      \"call_args\": \"(window,pos,cond)\",\n      \"cimguiname\": \"igSetWindowPos\",\n      \"defaults\": {\n        \"cond\": \"0\"\n      },\n      \"funcname\": \"SetWindowPos\",\n      \"location\": \"imgui_internal:2980\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igSetWindowPos_WindowPtr\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiWindow*,const ImVec2,ImGuiCond)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igSetWindowSize\": [\n    {\n      \"args\": \"(const ImVec2 size,ImGuiCond cond)\",\n      \"argsT\": [\n        {\n          \"name\": \"size\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"cond\",\n          \"type\": \"ImGuiCond\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImVec2& size,ImGuiCond cond=0)\",\n      \"call_args\": \"(size,cond)\",\n      \"cimguiname\": \"igSetWindowSize\",\n      \"defaults\": {\n        \"cond\": \"0\"\n      },\n      \"funcname\": \"SetWindowSize\",\n      \"location\": \"imgui:418\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igSetWindowSize_Vec2\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImVec2,ImGuiCond)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* name,const ImVec2 size,ImGuiCond cond)\",\n      \"argsT\": [\n        {\n          \"name\": \"name\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"size\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"cond\",\n          \"type\": \"ImGuiCond\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* name,const ImVec2& size,ImGuiCond cond=0)\",\n      \"call_args\": \"(name,size,cond)\",\n      \"cimguiname\": \"igSetWindowSize\",\n      \"defaults\": {\n        \"cond\": \"0\"\n      },\n      \"funcname\": \"SetWindowSize\",\n      \"location\": \"imgui:423\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igSetWindowSize_Str\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImVec2,ImGuiCond)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(ImGuiWindow* window,const ImVec2 size,ImGuiCond cond)\",\n      \"argsT\": [\n        {\n          \"name\": \"window\",\n          \"type\": \"ImGuiWindow*\"\n        },\n        {\n          \"name\": \"size\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"cond\",\n          \"type\": \"ImGuiCond\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiWindow* window,const ImVec2& size,ImGuiCond cond=0)\",\n      \"call_args\": \"(window,size,cond)\",\n      \"cimguiname\": \"igSetWindowSize\",\n      \"defaults\": {\n        \"cond\": \"0\"\n      },\n      \"funcname\": \"SetWindowSize\",\n      \"location\": \"imgui_internal:2981\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igSetWindowSize_WindowPtr\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiWindow*,const ImVec2,ImGuiCond)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igSetWindowViewport\": [\n    {\n      \"args\": \"(ImGuiWindow* window,ImGuiViewportP* viewport)\",\n      \"argsT\": [\n        {\n          \"name\": \"window\",\n          \"type\": \"ImGuiWindow*\"\n        },\n        {\n          \"name\": \"viewport\",\n          \"type\": \"ImGuiViewportP*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiWindow* window,ImGuiViewportP* viewport)\",\n      \"call_args\": \"(window,viewport)\",\n      \"cimguiname\": \"igSetWindowViewport\",\n      \"defaults\": {},\n      \"funcname\": \"SetWindowViewport\",\n      \"location\": \"imgui_internal:3031\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igSetWindowViewport\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiWindow*,ImGuiViewportP*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igShadeVertsLinearColorGradientKeepAlpha\": [\n    {\n      \"args\": \"(ImDrawList* draw_list,int vert_start_idx,int vert_end_idx,ImVec2 gradient_p0,ImVec2 gradient_p1,ImU32 col0,ImU32 col1)\",\n      \"argsT\": [\n        {\n          \"name\": \"draw_list\",\n          \"type\": \"ImDrawList*\"\n        },\n        {\n          \"name\": \"vert_start_idx\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"vert_end_idx\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"gradient_p0\",\n          \"type\": \"ImVec2\"\n        },\n        {\n          \"name\": \"gradient_p1\",\n          \"type\": \"ImVec2\"\n        },\n        {\n          \"name\": \"col0\",\n          \"type\": \"ImU32\"\n        },\n        {\n          \"name\": \"col1\",\n          \"type\": \"ImU32\"\n        }\n      ],\n      \"argsoriginal\": \"(ImDrawList* draw_list,int vert_start_idx,int vert_end_idx,ImVec2 gradient_p0,ImVec2 gradient_p1,ImU32 col0,ImU32 col1)\",\n      \"call_args\": \"(draw_list,vert_start_idx,vert_end_idx,gradient_p0,gradient_p1,col0,col1)\",\n      \"cimguiname\": \"igShadeVertsLinearColorGradientKeepAlpha\",\n      \"defaults\": {},\n      \"funcname\": \"ShadeVertsLinearColorGradientKeepAlpha\",\n      \"location\": \"imgui_internal:3470\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igShadeVertsLinearColorGradientKeepAlpha\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImDrawList*,int,int,ImVec2,ImVec2,ImU32,ImU32)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igShadeVertsLinearUV\": [\n    {\n      \"args\": \"(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)\",\n      \"argsT\": [\n        {\n          \"name\": \"draw_list\",\n          \"type\": \"ImDrawList*\"\n        },\n        {\n          \"name\": \"vert_start_idx\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"vert_end_idx\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"a\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"b\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"uv_a\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"uv_b\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"clamp\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"argsoriginal\": \"(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)\",\n      \"call_args\": \"(draw_list,vert_start_idx,vert_end_idx,a,b,uv_a,uv_b,clamp)\",\n      \"cimguiname\": \"igShadeVertsLinearUV\",\n      \"defaults\": {},\n      \"funcname\": \"ShadeVertsLinearUV\",\n      \"location\": \"imgui_internal:3471\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igShadeVertsLinearUV\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImDrawList*,int,int,const ImVec2,const ImVec2,const ImVec2,const ImVec2,bool)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igShadeVertsTransformPos\": [\n    {\n      \"args\": \"(ImDrawList* draw_list,int vert_start_idx,int vert_end_idx,const ImVec2 pivot_in,float cos_a,float sin_a,const ImVec2 pivot_out)\",\n      \"argsT\": [\n        {\n          \"name\": \"draw_list\",\n          \"type\": \"ImDrawList*\"\n        },\n        {\n          \"name\": \"vert_start_idx\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"vert_end_idx\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"pivot_in\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"cos_a\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"sin_a\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"pivot_out\",\n          \"type\": \"const ImVec2\"\n        }\n      ],\n      \"argsoriginal\": \"(ImDrawList* draw_list,int vert_start_idx,int vert_end_idx,const ImVec2& pivot_in,float cos_a,float sin_a,const ImVec2& pivot_out)\",\n      \"call_args\": \"(draw_list,vert_start_idx,vert_end_idx,pivot_in,cos_a,sin_a,pivot_out)\",\n      \"cimguiname\": \"igShadeVertsTransformPos\",\n      \"defaults\": {},\n      \"funcname\": \"ShadeVertsTransformPos\",\n      \"location\": \"imgui_internal:3472\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igShadeVertsTransformPos\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImDrawList*,int,int,const ImVec2,float,float,const ImVec2)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igShortcut\": [\n    {\n      \"args\": \"(ImGuiKeyChord key_chord,ImGuiInputFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"key_chord\",\n          \"type\": \"ImGuiKeyChord\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiInputFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiKeyChord key_chord,ImGuiInputFlags flags=0)\",\n      \"call_args\": \"(key_chord,flags)\",\n      \"cimguiname\": \"igShortcut\",\n      \"defaults\": {\n        \"flags\": \"0\"\n      },\n      \"funcname\": \"Shortcut\",\n      \"location\": \"imgui:993\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igShortcut_Nil\",\n      \"ret\": \"bool\",\n      \"signature\": \"(ImGuiKeyChord,ImGuiInputFlags)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(ImGuiKeyChord key_chord,ImGuiInputFlags flags,ImGuiID owner_id)\",\n      \"argsT\": [\n        {\n          \"name\": \"key_chord\",\n          \"type\": \"ImGuiKeyChord\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiInputFlags\"\n        },\n        {\n          \"name\": \"owner_id\",\n          \"type\": \"ImGuiID\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiKeyChord key_chord,ImGuiInputFlags flags,ImGuiID owner_id)\",\n      \"call_args\": \"(key_chord,flags,owner_id)\",\n      \"cimguiname\": \"igShortcut\",\n      \"defaults\": {},\n      \"funcname\": \"Shortcut\",\n      \"location\": \"imgui_internal:3241\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igShortcut_ID\",\n      \"ret\": \"bool\",\n      \"signature\": \"(ImGuiKeyChord,ImGuiInputFlags,ImGuiID)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igShowAboutWindow\": [\n    {\n      \"args\": \"(bool* p_open)\",\n      \"argsT\": [\n        {\n          \"name\": \"p_open\",\n          \"type\": \"bool*\"\n        }\n      ],\n      \"argsoriginal\": \"(bool* p_open=((void*)0))\",\n      \"call_args\": \"(p_open)\",\n      \"cimguiname\": \"igShowAboutWindow\",\n      \"defaults\": {\n        \"p_open\": \"NULL\"\n      },\n      \"funcname\": \"ShowAboutWindow\",\n      \"location\": \"imgui:346\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igShowAboutWindow\",\n      \"ret\": \"void\",\n      \"signature\": \"(bool*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igShowDebugLogWindow\": [\n    {\n      \"args\": \"(bool* p_open)\",\n      \"argsT\": [\n        {\n          \"name\": \"p_open\",\n          \"type\": \"bool*\"\n        }\n      ],\n      \"argsoriginal\": \"(bool* p_open=((void*)0))\",\n      \"call_args\": \"(p_open)\",\n      \"cimguiname\": \"igShowDebugLogWindow\",\n      \"defaults\": {\n        \"p_open\": \"NULL\"\n      },\n      \"funcname\": \"ShowDebugLogWindow\",\n      \"location\": \"imgui:344\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igShowDebugLogWindow\",\n      \"ret\": \"void\",\n      \"signature\": \"(bool*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igShowDemoWindow\": [\n    {\n      \"args\": \"(bool* p_open)\",\n      \"argsT\": [\n        {\n          \"name\": \"p_open\",\n          \"type\": \"bool*\"\n        }\n      ],\n      \"argsoriginal\": \"(bool* p_open=((void*)0))\",\n      \"call_args\": \"(p_open)\",\n      \"cimguiname\": \"igShowDemoWindow\",\n      \"defaults\": {\n        \"p_open\": \"NULL\"\n      },\n      \"funcname\": \"ShowDemoWindow\",\n      \"location\": \"imgui:342\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igShowDemoWindow\",\n      \"ret\": \"void\",\n      \"signature\": \"(bool*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igShowFontAtlas\": [\n    {\n      \"args\": \"(ImFontAtlas* atlas)\",\n      \"argsT\": [\n        {\n          \"name\": \"atlas\",\n          \"type\": \"ImFontAtlas*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImFontAtlas* atlas)\",\n      \"call_args\": \"(atlas)\",\n      \"cimguiname\": \"igShowFontAtlas\",\n      \"defaults\": {},\n      \"funcname\": \"ShowFontAtlas\",\n      \"location\": \"imgui_internal:3501\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igShowFontAtlas\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImFontAtlas*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igShowFontSelector\": [\n    {\n      \"args\": \"(const char* label)\",\n      \"argsT\": [\n        {\n          \"name\": \"label\",\n          \"type\": \"const char*\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label)\",\n      \"call_args\": \"(label)\",\n      \"cimguiname\": \"igShowFontSelector\",\n      \"defaults\": {},\n      \"funcname\": \"ShowFontSelector\",\n      \"location\": \"imgui:349\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igShowFontSelector\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igShowIDStackToolWindow\": [\n    {\n      \"args\": \"(bool* p_open)\",\n      \"argsT\": [\n        {\n          \"name\": \"p_open\",\n          \"type\": \"bool*\"\n        }\n      ],\n      \"argsoriginal\": \"(bool* p_open=((void*)0))\",\n      \"call_args\": \"(p_open)\",\n      \"cimguiname\": \"igShowIDStackToolWindow\",\n      \"defaults\": {\n        \"p_open\": \"NULL\"\n      },\n      \"funcname\": \"ShowIDStackToolWindow\",\n      \"location\": \"imgui:345\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igShowIDStackToolWindow\",\n      \"ret\": \"void\",\n      \"signature\": \"(bool*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igShowMetricsWindow\": [\n    {\n      \"args\": \"(bool* p_open)\",\n      \"argsT\": [\n        {\n          \"name\": \"p_open\",\n          \"type\": \"bool*\"\n        }\n      ],\n      \"argsoriginal\": \"(bool* p_open=((void*)0))\",\n      \"call_args\": \"(p_open)\",\n      \"cimguiname\": \"igShowMetricsWindow\",\n      \"defaults\": {\n        \"p_open\": \"NULL\"\n      },\n      \"funcname\": \"ShowMetricsWindow\",\n      \"location\": \"imgui:343\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igShowMetricsWindow\",\n      \"ret\": \"void\",\n      \"signature\": \"(bool*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igShowStyleEditor\": [\n    {\n      \"args\": \"(ImGuiStyle* ref)\",\n      \"argsT\": [\n        {\n          \"name\": \"ref\",\n          \"type\": \"ImGuiStyle*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiStyle* ref=((void*)0))\",\n      \"call_args\": \"(ref)\",\n      \"cimguiname\": \"igShowStyleEditor\",\n      \"defaults\": {\n        \"ref\": \"NULL\"\n      },\n      \"funcname\": \"ShowStyleEditor\",\n      \"location\": \"imgui:347\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igShowStyleEditor\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiStyle*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igShowStyleSelector\": [\n    {\n      \"args\": \"(const char* label)\",\n      \"argsT\": [\n        {\n          \"name\": \"label\",\n          \"type\": \"const char*\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label)\",\n      \"call_args\": \"(label)\",\n      \"cimguiname\": \"igShowStyleSelector\",\n      \"defaults\": {},\n      \"funcname\": \"ShowStyleSelector\",\n      \"location\": \"imgui:348\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igShowStyleSelector\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igShowUserGuide\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igShowUserGuide\",\n      \"defaults\": {},\n      \"funcname\": \"ShowUserGuide\",\n      \"location\": \"imgui:350\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igShowUserGuide\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igShrinkWidths\": [\n    {\n      \"args\": \"(ImGuiShrinkWidthItem* items,int count,float width_excess)\",\n      \"argsT\": [\n        {\n          \"name\": \"items\",\n          \"type\": \"ImGuiShrinkWidthItem*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"width_excess\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiShrinkWidthItem* items,int count,float width_excess)\",\n      \"call_args\": \"(items,count,width_excess)\",\n      \"cimguiname\": \"igShrinkWidths\",\n      \"defaults\": {},\n      \"funcname\": \"ShrinkWidths\",\n      \"location\": \"imgui_internal:3092\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igShrinkWidths\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiShrinkWidthItem*,int,float)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igShutdown\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igShutdown\",\n      \"defaults\": {},\n      \"funcname\": \"Shutdown\",\n      \"location\": \"imgui_internal:3014\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igShutdown\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igSliderAngle\": [\n    {\n      \"args\": \"(const char* label,float* v_rad,float v_degrees_min,float v_degrees_max,const char* format,ImGuiSliderFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"label\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"v_rad\",\n          \"type\": \"float*\"\n        },\n        {\n          \"name\": \"v_degrees_min\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"v_degrees_max\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"format\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiSliderFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label,float* v_rad,float v_degrees_min=-360.0f,float v_degrees_max=+360.0f,const char* format=\\\"%.0f deg\\\",ImGuiSliderFlags flags=0)\",\n      \"call_args\": \"(label,v_rad,v_degrees_min,v_degrees_max,format,flags)\",\n      \"cimguiname\": \"igSliderAngle\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"format\": \"\\\"%.0f deg\\\"\",\n        \"v_degrees_max\": \"+360.0f\",\n        \"v_degrees_min\": \"-360.0f\"\n      },\n      \"funcname\": \"SliderAngle\",\n      \"location\": \"imgui:616\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igSliderAngle\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*,float*,float,float,const char*,ImGuiSliderFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igSliderBehavior\": [\n    {\n      \"args\": \"(const ImRect bb,ImGuiID id,ImGuiDataType data_type,void* p_v,const void* p_min,const void* p_max,const char* format,ImGuiSliderFlags flags,ImRect* out_grab_bb)\",\n      \"argsT\": [\n        {\n          \"name\": \"bb\",\n          \"type\": \"const ImRect\"\n        },\n        {\n          \"name\": \"id\",\n          \"type\": \"ImGuiID\"\n        },\n        {\n          \"name\": \"data_type\",\n          \"type\": \"ImGuiDataType\"\n        },\n        {\n          \"name\": \"p_v\",\n          \"type\": \"void*\"\n        },\n        {\n          \"name\": \"p_min\",\n          \"type\": \"const void*\"\n        },\n        {\n          \"name\": \"p_max\",\n          \"type\": \"const void*\"\n        },\n        {\n          \"name\": \"format\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiSliderFlags\"\n        },\n        {\n          \"name\": \"out_grab_bb\",\n          \"type\": \"ImRect*\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImRect& bb,ImGuiID id,ImGuiDataType data_type,void* p_v,const void* p_min,const void* p_max,const char* format,ImGuiSliderFlags flags,ImRect* out_grab_bb)\",\n      \"call_args\": \"(bb,id,data_type,p_v,p_min,p_max,format,flags,out_grab_bb)\",\n      \"cimguiname\": \"igSliderBehavior\",\n      \"defaults\": {},\n      \"funcname\": \"SliderBehavior\",\n      \"location\": \"imgui_internal:3423\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igSliderBehavior\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const ImRect,ImGuiID,ImGuiDataType,void*,const void*,const void*,const char*,ImGuiSliderFlags,ImRect*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igSliderFloat\": [\n    {\n      \"args\": \"(const char* label,float* v,float v_min,float v_max,const char* format,ImGuiSliderFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"label\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"v\",\n          \"type\": \"float*\"\n        },\n        {\n          \"name\": \"v_min\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"v_max\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"format\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiSliderFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label,float* v,float v_min,float v_max,const char* format=\\\"%.3f\\\",ImGuiSliderFlags flags=0)\",\n      \"call_args\": \"(label,v,v_min,v_max,format,flags)\",\n      \"cimguiname\": \"igSliderFloat\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"format\": \"\\\"%.3f\\\"\"\n      },\n      \"funcname\": \"SliderFloat\",\n      \"location\": \"imgui:612\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igSliderFloat\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*,float*,float,float,const char*,ImGuiSliderFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igSliderFloat2\": [\n    {\n      \"args\": \"(const char* label,float v[2],float v_min,float v_max,const char* format,ImGuiSliderFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"label\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"v\",\n          \"type\": \"float[2]\"\n        },\n        {\n          \"name\": \"v_min\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"v_max\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"format\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiSliderFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label,float v[2],float v_min,float v_max,const char* format=\\\"%.3f\\\",ImGuiSliderFlags flags=0)\",\n      \"call_args\": \"(label,v,v_min,v_max,format,flags)\",\n      \"cimguiname\": \"igSliderFloat2\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"format\": \"\\\"%.3f\\\"\"\n      },\n      \"funcname\": \"SliderFloat2\",\n      \"location\": \"imgui:613\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igSliderFloat2\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*,float[2],float,float,const char*,ImGuiSliderFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igSliderFloat3\": [\n    {\n      \"args\": \"(const char* label,float v[3],float v_min,float v_max,const char* format,ImGuiSliderFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"label\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"v\",\n          \"type\": \"float[3]\"\n        },\n        {\n          \"name\": \"v_min\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"v_max\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"format\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiSliderFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label,float v[3],float v_min,float v_max,const char* format=\\\"%.3f\\\",ImGuiSliderFlags flags=0)\",\n      \"call_args\": \"(label,v,v_min,v_max,format,flags)\",\n      \"cimguiname\": \"igSliderFloat3\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"format\": \"\\\"%.3f\\\"\"\n      },\n      \"funcname\": \"SliderFloat3\",\n      \"location\": \"imgui:614\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igSliderFloat3\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*,float[3],float,float,const char*,ImGuiSliderFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igSliderFloat4\": [\n    {\n      \"args\": \"(const char* label,float v[4],float v_min,float v_max,const char* format,ImGuiSliderFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"label\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"v\",\n          \"type\": \"float[4]\"\n        },\n        {\n          \"name\": \"v_min\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"v_max\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"format\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiSliderFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label,float v[4],float v_min,float v_max,const char* format=\\\"%.3f\\\",ImGuiSliderFlags flags=0)\",\n      \"call_args\": \"(label,v,v_min,v_max,format,flags)\",\n      \"cimguiname\": \"igSliderFloat4\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"format\": \"\\\"%.3f\\\"\"\n      },\n      \"funcname\": \"SliderFloat4\",\n      \"location\": \"imgui:615\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igSliderFloat4\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*,float[4],float,float,const char*,ImGuiSliderFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igSliderInt\": [\n    {\n      \"args\": \"(const char* label,int* v,int v_min,int v_max,const char* format,ImGuiSliderFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"label\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"v\",\n          \"type\": \"int*\"\n        },\n        {\n          \"name\": \"v_min\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"v_max\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"format\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiSliderFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label,int* v,int v_min,int v_max,const char* format=\\\"%d\\\",ImGuiSliderFlags flags=0)\",\n      \"call_args\": \"(label,v,v_min,v_max,format,flags)\",\n      \"cimguiname\": \"igSliderInt\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"format\": \"\\\"%d\\\"\"\n      },\n      \"funcname\": \"SliderInt\",\n      \"location\": \"imgui:617\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igSliderInt\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*,int*,int,int,const char*,ImGuiSliderFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igSliderInt2\": [\n    {\n      \"args\": \"(const char* label,int v[2],int v_min,int v_max,const char* format,ImGuiSliderFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"label\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"v\",\n          \"type\": \"int[2]\"\n        },\n        {\n          \"name\": \"v_min\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"v_max\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"format\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiSliderFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label,int v[2],int v_min,int v_max,const char* format=\\\"%d\\\",ImGuiSliderFlags flags=0)\",\n      \"call_args\": \"(label,v,v_min,v_max,format,flags)\",\n      \"cimguiname\": \"igSliderInt2\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"format\": \"\\\"%d\\\"\"\n      },\n      \"funcname\": \"SliderInt2\",\n      \"location\": \"imgui:618\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igSliderInt2\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*,int[2],int,int,const char*,ImGuiSliderFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igSliderInt3\": [\n    {\n      \"args\": \"(const char* label,int v[3],int v_min,int v_max,const char* format,ImGuiSliderFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"label\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"v\",\n          \"type\": \"int[3]\"\n        },\n        {\n          \"name\": \"v_min\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"v_max\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"format\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiSliderFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label,int v[3],int v_min,int v_max,const char* format=\\\"%d\\\",ImGuiSliderFlags flags=0)\",\n      \"call_args\": \"(label,v,v_min,v_max,format,flags)\",\n      \"cimguiname\": \"igSliderInt3\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"format\": \"\\\"%d\\\"\"\n      },\n      \"funcname\": \"SliderInt3\",\n      \"location\": \"imgui:619\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igSliderInt3\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*,int[3],int,int,const char*,ImGuiSliderFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igSliderInt4\": [\n    {\n      \"args\": \"(const char* label,int v[4],int v_min,int v_max,const char* format,ImGuiSliderFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"label\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"v\",\n          \"type\": \"int[4]\"\n        },\n        {\n          \"name\": \"v_min\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"v_max\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"format\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiSliderFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label,int v[4],int v_min,int v_max,const char* format=\\\"%d\\\",ImGuiSliderFlags flags=0)\",\n      \"call_args\": \"(label,v,v_min,v_max,format,flags)\",\n      \"cimguiname\": \"igSliderInt4\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"format\": \"\\\"%d\\\"\"\n      },\n      \"funcname\": \"SliderInt4\",\n      \"location\": \"imgui:620\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igSliderInt4\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*,int[4],int,int,const char*,ImGuiSliderFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igSliderScalar\": [\n    {\n      \"args\": \"(const char* label,ImGuiDataType data_type,void* p_data,const void* p_min,const void* p_max,const char* format,ImGuiSliderFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"label\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"data_type\",\n          \"type\": \"ImGuiDataType\"\n        },\n        {\n          \"name\": \"p_data\",\n          \"type\": \"void*\"\n        },\n        {\n          \"name\": \"p_min\",\n          \"type\": \"const void*\"\n        },\n        {\n          \"name\": \"p_max\",\n          \"type\": \"const void*\"\n        },\n        {\n          \"name\": \"format\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiSliderFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label,ImGuiDataType data_type,void* p_data,const void* p_min,const void* p_max,const char* format=((void*)0),ImGuiSliderFlags flags=0)\",\n      \"call_args\": \"(label,data_type,p_data,p_min,p_max,format,flags)\",\n      \"cimguiname\": \"igSliderScalar\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"format\": \"NULL\"\n      },\n      \"funcname\": \"SliderScalar\",\n      \"location\": \"imgui:621\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igSliderScalar\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*,ImGuiDataType,void*,const void*,const void*,const char*,ImGuiSliderFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igSliderScalarN\": [\n    {\n      \"args\": \"(const char* label,ImGuiDataType data_type,void* p_data,int components,const void* p_min,const void* p_max,const char* format,ImGuiSliderFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"label\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"data_type\",\n          \"type\": \"ImGuiDataType\"\n        },\n        {\n          \"name\": \"p_data\",\n          \"type\": \"void*\"\n        },\n        {\n          \"name\": \"components\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"p_min\",\n          \"type\": \"const void*\"\n        },\n        {\n          \"name\": \"p_max\",\n          \"type\": \"const void*\"\n        },\n        {\n          \"name\": \"format\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiSliderFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label,ImGuiDataType data_type,void* p_data,int components,const void* p_min,const void* p_max,const char* format=((void*)0),ImGuiSliderFlags flags=0)\",\n      \"call_args\": \"(label,data_type,p_data,components,p_min,p_max,format,flags)\",\n      \"cimguiname\": \"igSliderScalarN\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"format\": \"NULL\"\n      },\n      \"funcname\": \"SliderScalarN\",\n      \"location\": \"imgui:622\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igSliderScalarN\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*,ImGuiDataType,void*,int,const void*,const void*,const char*,ImGuiSliderFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igSmallButton\": [\n    {\n      \"args\": \"(const char* label)\",\n      \"argsT\": [\n        {\n          \"name\": \"label\",\n          \"type\": \"const char*\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label)\",\n      \"call_args\": \"(label)\",\n      \"cimguiname\": \"igSmallButton\",\n      \"defaults\": {},\n      \"funcname\": \"SmallButton\",\n      \"location\": \"imgui:551\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igSmallButton\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igSpacing\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igSpacing\",\n      \"defaults\": {},\n      \"funcname\": \"Spacing\",\n      \"location\": \"imgui:498\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igSpacing\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igSplitterBehavior\": [\n    {\n      \"args\": \"(const ImRect bb,ImGuiID id,ImGuiAxis axis,float* size1,float* size2,float min_size1,float min_size2,float hover_extend,float hover_visibility_delay,ImU32 bg_col)\",\n      \"argsT\": [\n        {\n          \"name\": \"bb\",\n          \"type\": \"const ImRect\"\n        },\n        {\n          \"name\": \"id\",\n          \"type\": \"ImGuiID\"\n        },\n        {\n          \"name\": \"axis\",\n          \"type\": \"ImGuiAxis\"\n        },\n        {\n          \"name\": \"size1\",\n          \"type\": \"float*\"\n        },\n        {\n          \"name\": \"size2\",\n          \"type\": \"float*\"\n        },\n        {\n          \"name\": \"min_size1\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"min_size2\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"hover_extend\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"hover_visibility_delay\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"bg_col\",\n          \"type\": \"ImU32\"\n        }\n      ],\n      \"argsoriginal\": \"(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,ImU32 bg_col=0)\",\n      \"call_args\": \"(bb,id,axis,size1,size2,min_size1,min_size2,hover_extend,hover_visibility_delay,bg_col)\",\n      \"cimguiname\": \"igSplitterBehavior\",\n      \"defaults\": {\n        \"bg_col\": \"0\",\n        \"hover_extend\": \"0.0f\",\n        \"hover_visibility_delay\": \"0.0f\"\n      },\n      \"funcname\": \"SplitterBehavior\",\n      \"location\": \"imgui_internal:3424\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igSplitterBehavior\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const ImRect,ImGuiID,ImGuiAxis,float*,float*,float,float,float,float,ImU32)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igStartMouseMovingWindow\": [\n    {\n      \"args\": \"(ImGuiWindow* window)\",\n      \"argsT\": [\n        {\n          \"name\": \"window\",\n          \"type\": \"ImGuiWindow*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiWindow* window)\",\n      \"call_args\": \"(window)\",\n      \"cimguiname\": \"igStartMouseMovingWindow\",\n      \"defaults\": {},\n      \"funcname\": \"StartMouseMovingWindow\",\n      \"location\": \"imgui_internal:3020\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igStartMouseMovingWindow\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiWindow*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igStyleColorsClassic\": [\n    {\n      \"args\": \"(ImGuiStyle* dst)\",\n      \"argsT\": [\n        {\n          \"name\": \"dst\",\n          \"type\": \"ImGuiStyle*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiStyle* dst=((void*)0))\",\n      \"call_args\": \"(dst)\",\n      \"cimguiname\": \"igStyleColorsClassic\",\n      \"defaults\": {\n        \"dst\": \"NULL\"\n      },\n      \"funcname\": \"StyleColorsClassic\",\n      \"location\": \"imgui:356\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igStyleColorsClassic\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiStyle*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igStyleColorsDark\": [\n    {\n      \"args\": \"(ImGuiStyle* dst)\",\n      \"argsT\": [\n        {\n          \"name\": \"dst\",\n          \"type\": \"ImGuiStyle*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiStyle* dst=((void*)0))\",\n      \"call_args\": \"(dst)\",\n      \"cimguiname\": \"igStyleColorsDark\",\n      \"defaults\": {\n        \"dst\": \"NULL\"\n      },\n      \"funcname\": \"StyleColorsDark\",\n      \"location\": \"imgui:354\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igStyleColorsDark\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiStyle*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igStyleColorsLight\": [\n    {\n      \"args\": \"(ImGuiStyle* dst)\",\n      \"argsT\": [\n        {\n          \"name\": \"dst\",\n          \"type\": \"ImGuiStyle*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiStyle* dst=((void*)0))\",\n      \"call_args\": \"(dst)\",\n      \"cimguiname\": \"igStyleColorsLight\",\n      \"defaults\": {\n        \"dst\": \"NULL\"\n      },\n      \"funcname\": \"StyleColorsLight\",\n      \"location\": \"imgui:355\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igStyleColorsLight\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiStyle*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igTabBarCloseTab\": [\n    {\n      \"args\": \"(ImGuiTabBar* tab_bar,ImGuiTabItem* tab)\",\n      \"argsT\": [\n        {\n          \"name\": \"tab_bar\",\n          \"type\": \"ImGuiTabBar*\"\n        },\n        {\n          \"name\": \"tab\",\n          \"type\": \"ImGuiTabItem*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiTabBar* tab_bar,ImGuiTabItem* tab)\",\n      \"call_args\": \"(tab_bar,tab)\",\n      \"cimguiname\": \"igTabBarCloseTab\",\n      \"defaults\": {},\n      \"funcname\": \"TabBarCloseTab\",\n      \"location\": \"imgui_internal:3362\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTabBarCloseTab\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiTabBar*,ImGuiTabItem*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igTabBarFindTabByID\": [\n    {\n      \"args\": \"(ImGuiTabBar* tab_bar,ImGuiID tab_id)\",\n      \"argsT\": [\n        {\n          \"name\": \"tab_bar\",\n          \"type\": \"ImGuiTabBar*\"\n        },\n        {\n          \"name\": \"tab_id\",\n          \"type\": \"ImGuiID\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiTabBar* tab_bar,ImGuiID tab_id)\",\n      \"call_args\": \"(tab_bar,tab_id)\",\n      \"cimguiname\": \"igTabBarFindTabByID\",\n      \"defaults\": {},\n      \"funcname\": \"TabBarFindTabByID\",\n      \"location\": \"imgui_internal:3356\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTabBarFindTabByID\",\n      \"ret\": \"ImGuiTabItem*\",\n      \"signature\": \"(ImGuiTabBar*,ImGuiID)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igTabBarFindTabByOrder\": [\n    {\n      \"args\": \"(ImGuiTabBar* tab_bar,int order)\",\n      \"argsT\": [\n        {\n          \"name\": \"tab_bar\",\n          \"type\": \"ImGuiTabBar*\"\n        },\n        {\n          \"name\": \"order\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiTabBar* tab_bar,int order)\",\n      \"call_args\": \"(tab_bar,order)\",\n      \"cimguiname\": \"igTabBarFindTabByOrder\",\n      \"defaults\": {},\n      \"funcname\": \"TabBarFindTabByOrder\",\n      \"location\": \"imgui_internal:3357\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTabBarFindTabByOrder\",\n      \"ret\": \"ImGuiTabItem*\",\n      \"signature\": \"(ImGuiTabBar*,int)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igTabBarGetCurrentTab\": [\n    {\n      \"args\": \"(ImGuiTabBar* tab_bar)\",\n      \"argsT\": [\n        {\n          \"name\": \"tab_bar\",\n          \"type\": \"ImGuiTabBar*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiTabBar* tab_bar)\",\n      \"call_args\": \"(tab_bar)\",\n      \"cimguiname\": \"igTabBarGetCurrentTab\",\n      \"defaults\": {},\n      \"funcname\": \"TabBarGetCurrentTab\",\n      \"location\": \"imgui_internal:3358\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTabBarGetCurrentTab\",\n      \"ret\": \"ImGuiTabItem*\",\n      \"signature\": \"(ImGuiTabBar*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igTabBarGetTabName\": [\n    {\n      \"args\": \"(ImGuiTabBar* tab_bar,ImGuiTabItem* tab)\",\n      \"argsT\": [\n        {\n          \"name\": \"tab_bar\",\n          \"type\": \"ImGuiTabBar*\"\n        },\n        {\n          \"name\": \"tab\",\n          \"type\": \"ImGuiTabItem*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiTabBar* tab_bar,ImGuiTabItem* tab)\",\n      \"call_args\": \"(tab_bar,tab)\",\n      \"cimguiname\": \"igTabBarGetTabName\",\n      \"defaults\": {},\n      \"funcname\": \"TabBarGetTabName\",\n      \"location\": \"imgui_internal:3360\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTabBarGetTabName\",\n      \"ret\": \"const char*\",\n      \"signature\": \"(ImGuiTabBar*,ImGuiTabItem*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igTabBarGetTabOrder\": [\n    {\n      \"args\": \"(ImGuiTabBar* tab_bar,ImGuiTabItem* tab)\",\n      \"argsT\": [\n        {\n          \"name\": \"tab_bar\",\n          \"type\": \"ImGuiTabBar*\"\n        },\n        {\n          \"name\": \"tab\",\n          \"type\": \"ImGuiTabItem*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiTabBar* tab_bar,ImGuiTabItem* tab)\",\n      \"call_args\": \"(tab_bar,tab)\",\n      \"cimguiname\": \"igTabBarGetTabOrder\",\n      \"defaults\": {},\n      \"funcname\": \"TabBarGetTabOrder\",\n      \"location\": \"imgui_internal:3359\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTabBarGetTabOrder\",\n      \"ret\": \"int\",\n      \"signature\": \"(ImGuiTabBar*,ImGuiTabItem*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igTabBarProcessReorder\": [\n    {\n      \"args\": \"(ImGuiTabBar* tab_bar)\",\n      \"argsT\": [\n        {\n          \"name\": \"tab_bar\",\n          \"type\": \"ImGuiTabBar*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiTabBar* tab_bar)\",\n      \"call_args\": \"(tab_bar)\",\n      \"cimguiname\": \"igTabBarProcessReorder\",\n      \"defaults\": {},\n      \"funcname\": \"TabBarProcessReorder\",\n      \"location\": \"imgui_internal:3367\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTabBarProcessReorder\",\n      \"ret\": \"bool\",\n      \"signature\": \"(ImGuiTabBar*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igTabBarQueueFocus\": [\n    {\n      \"args\": \"(ImGuiTabBar* tab_bar,ImGuiTabItem* tab)\",\n      \"argsT\": [\n        {\n          \"name\": \"tab_bar\",\n          \"type\": \"ImGuiTabBar*\"\n        },\n        {\n          \"name\": \"tab\",\n          \"type\": \"ImGuiTabItem*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiTabBar* tab_bar,ImGuiTabItem* tab)\",\n      \"call_args\": \"(tab_bar,tab)\",\n      \"cimguiname\": \"igTabBarQueueFocus\",\n      \"defaults\": {},\n      \"funcname\": \"TabBarQueueFocus\",\n      \"location\": \"imgui_internal:3363\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTabBarQueueFocus_TabItemPtr\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiTabBar*,ImGuiTabItem*)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(ImGuiTabBar* tab_bar,const char* tab_name)\",\n      \"argsT\": [\n        {\n          \"name\": \"tab_bar\",\n          \"type\": \"ImGuiTabBar*\"\n        },\n        {\n          \"name\": \"tab_name\",\n          \"type\": \"const char*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiTabBar* tab_bar,const char* tab_name)\",\n      \"call_args\": \"(tab_bar,tab_name)\",\n      \"cimguiname\": \"igTabBarQueueFocus\",\n      \"defaults\": {},\n      \"funcname\": \"TabBarQueueFocus\",\n      \"location\": \"imgui_internal:3364\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTabBarQueueFocus_Str\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiTabBar*,const char*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igTabBarQueueReorder\": [\n    {\n      \"args\": \"(ImGuiTabBar* tab_bar,ImGuiTabItem* tab,int offset)\",\n      \"argsT\": [\n        {\n          \"name\": \"tab_bar\",\n          \"type\": \"ImGuiTabBar*\"\n        },\n        {\n          \"name\": \"tab\",\n          \"type\": \"ImGuiTabItem*\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiTabBar* tab_bar,ImGuiTabItem* tab,int offset)\",\n      \"call_args\": \"(tab_bar,tab,offset)\",\n      \"cimguiname\": \"igTabBarQueueReorder\",\n      \"defaults\": {},\n      \"funcname\": \"TabBarQueueReorder\",\n      \"location\": \"imgui_internal:3365\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTabBarQueueReorder\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiTabBar*,ImGuiTabItem*,int)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igTabBarQueueReorderFromMousePos\": [\n    {\n      \"args\": \"(ImGuiTabBar* tab_bar,ImGuiTabItem* tab,ImVec2 mouse_pos)\",\n      \"argsT\": [\n        {\n          \"name\": \"tab_bar\",\n          \"type\": \"ImGuiTabBar*\"\n        },\n        {\n          \"name\": \"tab\",\n          \"type\": \"ImGuiTabItem*\"\n        },\n        {\n          \"name\": \"mouse_pos\",\n          \"type\": \"ImVec2\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiTabBar* tab_bar,ImGuiTabItem* tab,ImVec2 mouse_pos)\",\n      \"call_args\": \"(tab_bar,tab,mouse_pos)\",\n      \"cimguiname\": \"igTabBarQueueReorderFromMousePos\",\n      \"defaults\": {},\n      \"funcname\": \"TabBarQueueReorderFromMousePos\",\n      \"location\": \"imgui_internal:3366\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTabBarQueueReorderFromMousePos\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiTabBar*,ImGuiTabItem*,ImVec2)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igTabBarRemoveTab\": [\n    {\n      \"args\": \"(ImGuiTabBar* tab_bar,ImGuiID tab_id)\",\n      \"argsT\": [\n        {\n          \"name\": \"tab_bar\",\n          \"type\": \"ImGuiTabBar*\"\n        },\n        {\n          \"name\": \"tab_id\",\n          \"type\": \"ImGuiID\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiTabBar* tab_bar,ImGuiID tab_id)\",\n      \"call_args\": \"(tab_bar,tab_id)\",\n      \"cimguiname\": \"igTabBarRemoveTab\",\n      \"defaults\": {},\n      \"funcname\": \"TabBarRemoveTab\",\n      \"location\": \"imgui_internal:3361\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTabBarRemoveTab\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiTabBar*,ImGuiID)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igTabItemBackground\": [\n    {\n      \"args\": \"(ImDrawList* draw_list,const ImRect bb,ImGuiTabItemFlags flags,ImU32 col)\",\n      \"argsT\": [\n        {\n          \"name\": \"draw_list\",\n          \"type\": \"ImDrawList*\"\n        },\n        {\n          \"name\": \"bb\",\n          \"type\": \"const ImRect\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiTabItemFlags\"\n        },\n        {\n          \"name\": \"col\",\n          \"type\": \"ImU32\"\n        }\n      ],\n      \"argsoriginal\": \"(ImDrawList* draw_list,const ImRect& bb,ImGuiTabItemFlags flags,ImU32 col)\",\n      \"call_args\": \"(draw_list,bb,flags,col)\",\n      \"cimguiname\": \"igTabItemBackground\",\n      \"defaults\": {},\n      \"funcname\": \"TabItemBackground\",\n      \"location\": \"imgui_internal:3371\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTabItemBackground\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImDrawList*,const ImRect,ImGuiTabItemFlags,ImU32)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igTabItemButton\": [\n    {\n      \"args\": \"(const char* label,ImGuiTabItemFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"label\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiTabItemFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label,ImGuiTabItemFlags flags=0)\",\n      \"call_args\": \"(label,flags)\",\n      \"cimguiname\": \"igTabItemButton\",\n      \"defaults\": {\n        \"flags\": \"0\"\n      },\n      \"funcname\": \"TabItemButton\",\n      \"location\": \"imgui:867\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTabItemButton\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*,ImGuiTabItemFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igTabItemCalcSize\": [\n    {\n      \"args\": \"(ImVec2 *pOut,const char* label,bool has_close_button_or_unsaved_marker)\",\n      \"argsT\": [\n        {\n          \"name\": \"pOut\",\n          \"type\": \"ImVec2*\"\n        },\n        {\n          \"name\": \"label\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"has_close_button_or_unsaved_marker\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label,bool has_close_button_or_unsaved_marker)\",\n      \"call_args\": \"(label,has_close_button_or_unsaved_marker)\",\n      \"cimguiname\": \"igTabItemCalcSize\",\n      \"defaults\": {},\n      \"funcname\": \"TabItemCalcSize\",\n      \"location\": \"imgui_internal:3369\",\n      \"namespace\": \"ImGui\",\n      \"nonUDT\": 1,\n      \"ov_cimguiname\": \"igTabItemCalcSize_Str\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,bool)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(ImVec2 *pOut,ImGuiWindow* window)\",\n      \"argsT\": [\n        {\n          \"name\": \"pOut\",\n          \"type\": \"ImVec2*\"\n        },\n        {\n          \"name\": \"window\",\n          \"type\": \"ImGuiWindow*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiWindow* window)\",\n      \"call_args\": \"(window)\",\n      \"cimguiname\": \"igTabItemCalcSize\",\n      \"defaults\": {},\n      \"funcname\": \"TabItemCalcSize\",\n      \"location\": \"imgui_internal:3370\",\n      \"namespace\": \"ImGui\",\n      \"nonUDT\": 1,\n      \"ov_cimguiname\": \"igTabItemCalcSize_WindowPtr\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiWindow*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igTabItemEx\": [\n    {\n      \"args\": \"(ImGuiTabBar* tab_bar,const char* label,bool* p_open,ImGuiTabItemFlags flags,ImGuiWindow* docked_window)\",\n      \"argsT\": [\n        {\n          \"name\": \"tab_bar\",\n          \"type\": \"ImGuiTabBar*\"\n        },\n        {\n          \"name\": \"label\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"p_open\",\n          \"type\": \"bool*\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiTabItemFlags\"\n        },\n        {\n          \"name\": \"docked_window\",\n          \"type\": \"ImGuiWindow*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiTabBar* tab_bar,const char* label,bool* p_open,ImGuiTabItemFlags flags,ImGuiWindow* docked_window)\",\n      \"call_args\": \"(tab_bar,label,p_open,flags,docked_window)\",\n      \"cimguiname\": \"igTabItemEx\",\n      \"defaults\": {},\n      \"funcname\": \"TabItemEx\",\n      \"location\": \"imgui_internal:3368\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTabItemEx\",\n      \"ret\": \"bool\",\n      \"signature\": \"(ImGuiTabBar*,const char*,bool*,ImGuiTabItemFlags,ImGuiWindow*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igTabItemLabelAndCloseButton\": [\n    {\n      \"args\": \"(ImDrawList* draw_list,const ImRect bb,ImGuiTabItemFlags flags,ImVec2 frame_padding,const char* label,ImGuiID tab_id,ImGuiID close_button_id,bool is_contents_visible,bool* out_just_closed,bool* out_text_clipped)\",\n      \"argsT\": [\n        {\n          \"name\": \"draw_list\",\n          \"type\": \"ImDrawList*\"\n        },\n        {\n          \"name\": \"bb\",\n          \"type\": \"const ImRect\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiTabItemFlags\"\n        },\n        {\n          \"name\": \"frame_padding\",\n          \"type\": \"ImVec2\"\n        },\n        {\n          \"name\": \"label\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"tab_id\",\n          \"type\": \"ImGuiID\"\n        },\n        {\n          \"name\": \"close_button_id\",\n          \"type\": \"ImGuiID\"\n        },\n        {\n          \"name\": \"is_contents_visible\",\n          \"type\": \"bool\"\n        },\n        {\n          \"name\": \"out_just_closed\",\n          \"type\": \"bool*\"\n        },\n        {\n          \"name\": \"out_text_clipped\",\n          \"type\": \"bool*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImDrawList* draw_list,const ImRect& bb,ImGuiTabItemFlags flags,ImVec2 frame_padding,const char* label,ImGuiID tab_id,ImGuiID close_button_id,bool is_contents_visible,bool* out_just_closed,bool* out_text_clipped)\",\n      \"call_args\": \"(draw_list,bb,flags,frame_padding,label,tab_id,close_button_id,is_contents_visible,out_just_closed,out_text_clipped)\",\n      \"cimguiname\": \"igTabItemLabelAndCloseButton\",\n      \"defaults\": {},\n      \"funcname\": \"TabItemLabelAndCloseButton\",\n      \"location\": \"imgui_internal:3372\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTabItemLabelAndCloseButton\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImDrawList*,const ImRect,ImGuiTabItemFlags,ImVec2,const char*,ImGuiID,ImGuiID,bool,bool*,bool*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igTableAngledHeadersRow\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igTableAngledHeadersRow\",\n      \"defaults\": {},\n      \"funcname\": \"TableAngledHeadersRow\",\n      \"location\": \"imgui:832\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTableAngledHeadersRow\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igTableAngledHeadersRowEx\": [\n    {\n      \"args\": \"(ImGuiID row_id,float angle,float max_label_width,const ImGuiTableHeaderData* data,int data_count)\",\n      \"argsT\": [\n        {\n          \"name\": \"row_id\",\n          \"type\": \"ImGuiID\"\n        },\n        {\n          \"name\": \"angle\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"max_label_width\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"data\",\n          \"type\": \"const ImGuiTableHeaderData*\"\n        },\n        {\n          \"name\": \"data_count\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiID row_id,float angle,float max_label_width,const ImGuiTableHeaderData* data,int data_count)\",\n      \"call_args\": \"(row_id,angle,max_label_width,data,data_count)\",\n      \"cimguiname\": \"igTableAngledHeadersRowEx\",\n      \"defaults\": {},\n      \"funcname\": \"TableAngledHeadersRowEx\",\n      \"location\": \"imgui_internal:3306\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTableAngledHeadersRowEx\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiID,float,float,const ImGuiTableHeaderData*,int)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igTableBeginApplyRequests\": [\n    {\n      \"args\": \"(ImGuiTable* table)\",\n      \"argsT\": [\n        {\n          \"name\": \"table\",\n          \"type\": \"ImGuiTable*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiTable* table)\",\n      \"call_args\": \"(table)\",\n      \"cimguiname\": \"igTableBeginApplyRequests\",\n      \"defaults\": {},\n      \"funcname\": \"TableBeginApplyRequests\",\n      \"location\": \"imgui_internal:3313\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTableBeginApplyRequests\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiTable*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igTableBeginCell\": [\n    {\n      \"args\": \"(ImGuiTable* table,int column_n)\",\n      \"argsT\": [\n        {\n          \"name\": \"table\",\n          \"type\": \"ImGuiTable*\"\n        },\n        {\n          \"name\": \"column_n\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiTable* table,int column_n)\",\n      \"call_args\": \"(table,column_n)\",\n      \"cimguiname\": \"igTableBeginCell\",\n      \"defaults\": {},\n      \"funcname\": \"TableBeginCell\",\n      \"location\": \"imgui_internal:3331\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTableBeginCell\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiTable*,int)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igTableBeginContextMenuPopup\": [\n    {\n      \"args\": \"(ImGuiTable* table)\",\n      \"argsT\": [\n        {\n          \"name\": \"table\",\n          \"type\": \"ImGuiTable*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiTable* table)\",\n      \"call_args\": \"(table)\",\n      \"cimguiname\": \"igTableBeginContextMenuPopup\",\n      \"defaults\": {},\n      \"funcname\": \"TableBeginContextMenuPopup\",\n      \"location\": \"imgui_internal:3320\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTableBeginContextMenuPopup\",\n      \"ret\": \"bool\",\n      \"signature\": \"(ImGuiTable*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igTableBeginInitMemory\": [\n    {\n      \"args\": \"(ImGuiTable* table,int columns_count)\",\n      \"argsT\": [\n        {\n          \"name\": \"table\",\n          \"type\": \"ImGuiTable*\"\n        },\n        {\n          \"name\": \"columns_count\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiTable* table,int columns_count)\",\n      \"call_args\": \"(table,columns_count)\",\n      \"cimguiname\": \"igTableBeginInitMemory\",\n      \"defaults\": {},\n      \"funcname\": \"TableBeginInitMemory\",\n      \"location\": \"imgui_internal:3312\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTableBeginInitMemory\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiTable*,int)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igTableBeginRow\": [\n    {\n      \"args\": \"(ImGuiTable* table)\",\n      \"argsT\": [\n        {\n          \"name\": \"table\",\n          \"type\": \"ImGuiTable*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiTable* table)\",\n      \"call_args\": \"(table)\",\n      \"cimguiname\": \"igTableBeginRow\",\n      \"defaults\": {},\n      \"funcname\": \"TableBeginRow\",\n      \"location\": \"imgui_internal:3329\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTableBeginRow\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiTable*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igTableCalcMaxColumnWidth\": [\n    {\n      \"args\": \"(const ImGuiTable* table,int column_n)\",\n      \"argsT\": [\n        {\n          \"name\": \"table\",\n          \"type\": \"const ImGuiTable*\"\n        },\n        {\n          \"name\": \"column_n\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImGuiTable* table,int column_n)\",\n      \"call_args\": \"(table,column_n)\",\n      \"cimguiname\": \"igTableCalcMaxColumnWidth\",\n      \"defaults\": {},\n      \"funcname\": \"TableCalcMaxColumnWidth\",\n      \"location\": \"imgui_internal:3336\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTableCalcMaxColumnWidth\",\n      \"ret\": \"float\",\n      \"signature\": \"(const ImGuiTable*,int)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igTableDrawBorders\": [\n    {\n      \"args\": \"(ImGuiTable* table)\",\n      \"argsT\": [\n        {\n          \"name\": \"table\",\n          \"type\": \"ImGuiTable*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiTable* table)\",\n      \"call_args\": \"(table)\",\n      \"cimguiname\": \"igTableDrawBorders\",\n      \"defaults\": {},\n      \"funcname\": \"TableDrawBorders\",\n      \"location\": \"imgui_internal:3318\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTableDrawBorders\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiTable*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igTableDrawDefaultContextMenu\": [\n    {\n      \"args\": \"(ImGuiTable* table,ImGuiTableFlags flags_for_section_to_display)\",\n      \"argsT\": [\n        {\n          \"name\": \"table\",\n          \"type\": \"ImGuiTable*\"\n        },\n        {\n          \"name\": \"flags_for_section_to_display\",\n          \"type\": \"ImGuiTableFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiTable* table,ImGuiTableFlags flags_for_section_to_display)\",\n      \"call_args\": \"(table,flags_for_section_to_display)\",\n      \"cimguiname\": \"igTableDrawDefaultContextMenu\",\n      \"defaults\": {},\n      \"funcname\": \"TableDrawDefaultContextMenu\",\n      \"location\": \"imgui_internal:3319\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTableDrawDefaultContextMenu\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiTable*,ImGuiTableFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igTableEndCell\": [\n    {\n      \"args\": \"(ImGuiTable* table)\",\n      \"argsT\": [\n        {\n          \"name\": \"table\",\n          \"type\": \"ImGuiTable*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiTable* table)\",\n      \"call_args\": \"(table)\",\n      \"cimguiname\": \"igTableEndCell\",\n      \"defaults\": {},\n      \"funcname\": \"TableEndCell\",\n      \"location\": \"imgui_internal:3332\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTableEndCell\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiTable*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igTableEndRow\": [\n    {\n      \"args\": \"(ImGuiTable* table)\",\n      \"argsT\": [\n        {\n          \"name\": \"table\",\n          \"type\": \"ImGuiTable*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiTable* table)\",\n      \"call_args\": \"(table)\",\n      \"cimguiname\": \"igTableEndRow\",\n      \"defaults\": {},\n      \"funcname\": \"TableEndRow\",\n      \"location\": \"imgui_internal:3330\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTableEndRow\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiTable*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igTableFindByID\": [\n    {\n      \"args\": \"(ImGuiID id)\",\n      \"argsT\": [\n        {\n          \"name\": \"id\",\n          \"type\": \"ImGuiID\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiID id)\",\n      \"call_args\": \"(id)\",\n      \"cimguiname\": \"igTableFindByID\",\n      \"defaults\": {},\n      \"funcname\": \"TableFindByID\",\n      \"location\": \"imgui_internal:3310\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTableFindByID\",\n      \"ret\": \"ImGuiTable*\",\n      \"signature\": \"(ImGuiID)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igTableFixColumnSortDirection\": [\n    {\n      \"args\": \"(ImGuiTable* table,ImGuiTableColumn* column)\",\n      \"argsT\": [\n        {\n          \"name\": \"table\",\n          \"type\": \"ImGuiTable*\"\n        },\n        {\n          \"name\": \"column\",\n          \"type\": \"ImGuiTableColumn*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiTable* table,ImGuiTableColumn* column)\",\n      \"call_args\": \"(table,column)\",\n      \"cimguiname\": \"igTableFixColumnSortDirection\",\n      \"defaults\": {},\n      \"funcname\": \"TableFixColumnSortDirection\",\n      \"location\": \"imgui_internal:3327\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTableFixColumnSortDirection\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiTable*,ImGuiTableColumn*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igTableGcCompactSettings\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igTableGcCompactSettings\",\n      \"defaults\": {},\n      \"funcname\": \"TableGcCompactSettings\",\n      \"location\": \"imgui_internal:3342\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTableGcCompactSettings\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igTableGcCompactTransientBuffers\": [\n    {\n      \"args\": \"(ImGuiTable* table)\",\n      \"argsT\": [\n        {\n          \"name\": \"table\",\n          \"type\": \"ImGuiTable*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiTable* table)\",\n      \"call_args\": \"(table)\",\n      \"cimguiname\": \"igTableGcCompactTransientBuffers\",\n      \"defaults\": {},\n      \"funcname\": \"TableGcCompactTransientBuffers\",\n      \"location\": \"imgui_internal:3340\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTableGcCompactTransientBuffers_TablePtr\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiTable*)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(ImGuiTableTempData* table)\",\n      \"argsT\": [\n        {\n          \"name\": \"table\",\n          \"type\": \"ImGuiTableTempData*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiTableTempData* table)\",\n      \"call_args\": \"(table)\",\n      \"cimguiname\": \"igTableGcCompactTransientBuffers\",\n      \"defaults\": {},\n      \"funcname\": \"TableGcCompactTransientBuffers\",\n      \"location\": \"imgui_internal:3341\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTableGcCompactTransientBuffers_TableTempDataPtr\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiTableTempData*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igTableGetBoundSettings\": [\n    {\n      \"args\": \"(ImGuiTable* table)\",\n      \"argsT\": [\n        {\n          \"name\": \"table\",\n          \"type\": \"ImGuiTable*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiTable* table)\",\n      \"call_args\": \"(table)\",\n      \"cimguiname\": \"igTableGetBoundSettings\",\n      \"defaults\": {},\n      \"funcname\": \"TableGetBoundSettings\",\n      \"location\": \"imgui_internal:3348\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTableGetBoundSettings\",\n      \"ret\": \"ImGuiTableSettings*\",\n      \"signature\": \"(ImGuiTable*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igTableGetCellBgRect\": [\n    {\n      \"args\": \"(ImRect *pOut,const ImGuiTable* table,int column_n)\",\n      \"argsT\": [\n        {\n          \"name\": \"pOut\",\n          \"type\": \"ImRect*\"\n        },\n        {\n          \"name\": \"table\",\n          \"type\": \"const ImGuiTable*\"\n        },\n        {\n          \"name\": \"column_n\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImGuiTable* table,int column_n)\",\n      \"call_args\": \"(table,column_n)\",\n      \"cimguiname\": \"igTableGetCellBgRect\",\n      \"defaults\": {},\n      \"funcname\": \"TableGetCellBgRect\",\n      \"location\": \"imgui_internal:3333\",\n      \"namespace\": \"ImGui\",\n      \"nonUDT\": 1,\n      \"ov_cimguiname\": \"igTableGetCellBgRect\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImGuiTable*,int)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igTableGetColumnCount\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igTableGetColumnCount\",\n      \"defaults\": {},\n      \"funcname\": \"TableGetColumnCount\",\n      \"location\": \"imgui:841\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTableGetColumnCount\",\n      \"ret\": \"int\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igTableGetColumnFlags\": [\n    {\n      \"args\": \"(int column_n)\",\n      \"argsT\": [\n        {\n          \"name\": \"column_n\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(int column_n=-1)\",\n      \"call_args\": \"(column_n)\",\n      \"cimguiname\": \"igTableGetColumnFlags\",\n      \"defaults\": {\n        \"column_n\": \"-1\"\n      },\n      \"funcname\": \"TableGetColumnFlags\",\n      \"location\": \"imgui:845\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTableGetColumnFlags\",\n      \"ret\": \"ImGuiTableColumnFlags\",\n      \"signature\": \"(int)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igTableGetColumnIndex\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igTableGetColumnIndex\",\n      \"defaults\": {},\n      \"funcname\": \"TableGetColumnIndex\",\n      \"location\": \"imgui:842\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTableGetColumnIndex\",\n      \"ret\": \"int\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igTableGetColumnName\": [\n    {\n      \"args\": \"(int column_n)\",\n      \"argsT\": [\n        {\n          \"name\": \"column_n\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(int column_n=-1)\",\n      \"call_args\": \"(column_n)\",\n      \"cimguiname\": \"igTableGetColumnName\",\n      \"defaults\": {\n        \"column_n\": \"-1\"\n      },\n      \"funcname\": \"TableGetColumnName\",\n      \"location\": \"imgui:844\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTableGetColumnName_Int\",\n      \"ret\": \"const char*\",\n      \"signature\": \"(int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const ImGuiTable* table,int column_n)\",\n      \"argsT\": [\n        {\n          \"name\": \"table\",\n          \"type\": \"const ImGuiTable*\"\n        },\n        {\n          \"name\": \"column_n\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImGuiTable* table,int column_n)\",\n      \"call_args\": \"(table,column_n)\",\n      \"cimguiname\": \"igTableGetColumnName\",\n      \"defaults\": {},\n      \"funcname\": \"TableGetColumnName\",\n      \"location\": \"imgui_internal:3334\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTableGetColumnName_TablePtr\",\n      \"ret\": \"const char*\",\n      \"signature\": \"(const ImGuiTable*,int)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igTableGetColumnNextSortDirection\": [\n    {\n      \"args\": \"(ImGuiTableColumn* column)\",\n      \"argsT\": [\n        {\n          \"name\": \"column\",\n          \"type\": \"ImGuiTableColumn*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiTableColumn* column)\",\n      \"call_args\": \"(column)\",\n      \"cimguiname\": \"igTableGetColumnNextSortDirection\",\n      \"defaults\": {},\n      \"funcname\": \"TableGetColumnNextSortDirection\",\n      \"location\": \"imgui_internal:3326\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTableGetColumnNextSortDirection\",\n      \"ret\": \"ImGuiSortDirection\",\n      \"signature\": \"(ImGuiTableColumn*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igTableGetColumnResizeID\": [\n    {\n      \"args\": \"(ImGuiTable* table,int column_n,int instance_no)\",\n      \"argsT\": [\n        {\n          \"name\": \"table\",\n          \"type\": \"ImGuiTable*\"\n        },\n        {\n          \"name\": \"column_n\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"instance_no\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiTable* table,int column_n,int instance_no=0)\",\n      \"call_args\": \"(table,column_n,instance_no)\",\n      \"cimguiname\": \"igTableGetColumnResizeID\",\n      \"defaults\": {\n        \"instance_no\": \"0\"\n      },\n      \"funcname\": \"TableGetColumnResizeID\",\n      \"location\": \"imgui_internal:3335\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTableGetColumnResizeID\",\n      \"ret\": \"ImGuiID\",\n      \"signature\": \"(ImGuiTable*,int,int)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igTableGetColumnWidthAuto\": [\n    {\n      \"args\": \"(ImGuiTable* table,ImGuiTableColumn* column)\",\n      \"argsT\": [\n        {\n          \"name\": \"table\",\n          \"type\": \"ImGuiTable*\"\n        },\n        {\n          \"name\": \"column\",\n          \"type\": \"ImGuiTableColumn*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiTable* table,ImGuiTableColumn* column)\",\n      \"call_args\": \"(table,column)\",\n      \"cimguiname\": \"igTableGetColumnWidthAuto\",\n      \"defaults\": {},\n      \"funcname\": \"TableGetColumnWidthAuto\",\n      \"location\": \"imgui_internal:3328\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTableGetColumnWidthAuto\",\n      \"ret\": \"float\",\n      \"signature\": \"(ImGuiTable*,ImGuiTableColumn*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igTableGetHeaderAngledMaxLabelWidth\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igTableGetHeaderAngledMaxLabelWidth\",\n      \"defaults\": {},\n      \"funcname\": \"TableGetHeaderAngledMaxLabelWidth\",\n      \"location\": \"imgui_internal:3303\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTableGetHeaderAngledMaxLabelWidth\",\n      \"ret\": \"float\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igTableGetHeaderRowHeight\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igTableGetHeaderRowHeight\",\n      \"defaults\": {},\n      \"funcname\": \"TableGetHeaderRowHeight\",\n      \"location\": \"imgui_internal:3302\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTableGetHeaderRowHeight\",\n      \"ret\": \"float\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igTableGetHoveredColumn\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igTableGetHoveredColumn\",\n      \"defaults\": {},\n      \"funcname\": \"TableGetHoveredColumn\",\n      \"location\": \"imgui:847\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTableGetHoveredColumn\",\n      \"ret\": \"int\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igTableGetHoveredRow\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igTableGetHoveredRow\",\n      \"defaults\": {},\n      \"funcname\": \"TableGetHoveredRow\",\n      \"location\": \"imgui_internal:3301\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTableGetHoveredRow\",\n      \"ret\": \"int\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igTableGetInstanceData\": [\n    {\n      \"args\": \"(ImGuiTable* table,int instance_no)\",\n      \"argsT\": [\n        {\n          \"name\": \"table\",\n          \"type\": \"ImGuiTable*\"\n        },\n        {\n          \"name\": \"instance_no\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiTable* table,int instance_no)\",\n      \"call_args\": \"(table,instance_no)\",\n      \"cimguiname\": \"igTableGetInstanceData\",\n      \"defaults\": {},\n      \"funcname\": \"TableGetInstanceData\",\n      \"location\": \"imgui_internal:3322\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTableGetInstanceData\",\n      \"ret\": \"ImGuiTableInstanceData*\",\n      \"signature\": \"(ImGuiTable*,int)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igTableGetInstanceID\": [\n    {\n      \"args\": \"(ImGuiTable* table,int instance_no)\",\n      \"argsT\": [\n        {\n          \"name\": \"table\",\n          \"type\": \"ImGuiTable*\"\n        },\n        {\n          \"name\": \"instance_no\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiTable* table,int instance_no)\",\n      \"call_args\": \"(table,instance_no)\",\n      \"cimguiname\": \"igTableGetInstanceID\",\n      \"defaults\": {},\n      \"funcname\": \"TableGetInstanceID\",\n      \"location\": \"imgui_internal:3323\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTableGetInstanceID\",\n      \"ret\": \"ImGuiID\",\n      \"signature\": \"(ImGuiTable*,int)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igTableGetRowIndex\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igTableGetRowIndex\",\n      \"defaults\": {},\n      \"funcname\": \"TableGetRowIndex\",\n      \"location\": \"imgui:843\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTableGetRowIndex\",\n      \"ret\": \"int\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igTableGetSortSpecs\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igTableGetSortSpecs\",\n      \"defaults\": {},\n      \"funcname\": \"TableGetSortSpecs\",\n      \"location\": \"imgui:840\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTableGetSortSpecs\",\n      \"ret\": \"ImGuiTableSortSpecs*\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igTableHeader\": [\n    {\n      \"args\": \"(const char* label)\",\n      \"argsT\": [\n        {\n          \"name\": \"label\",\n          \"type\": \"const char*\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label)\",\n      \"call_args\": \"(label)\",\n      \"cimguiname\": \"igTableHeader\",\n      \"defaults\": {},\n      \"funcname\": \"TableHeader\",\n      \"location\": \"imgui:830\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTableHeader\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igTableHeadersRow\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igTableHeadersRow\",\n      \"defaults\": {},\n      \"funcname\": \"TableHeadersRow\",\n      \"location\": \"imgui:831\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTableHeadersRow\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igTableLoadSettings\": [\n    {\n      \"args\": \"(ImGuiTable* table)\",\n      \"argsT\": [\n        {\n          \"name\": \"table\",\n          \"type\": \"ImGuiTable*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiTable* table)\",\n      \"call_args\": \"(table)\",\n      \"cimguiname\": \"igTableLoadSettings\",\n      \"defaults\": {},\n      \"funcname\": \"TableLoadSettings\",\n      \"location\": \"imgui_internal:3345\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTableLoadSettings\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiTable*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igTableMergeDrawChannels\": [\n    {\n      \"args\": \"(ImGuiTable* table)\",\n      \"argsT\": [\n        {\n          \"name\": \"table\",\n          \"type\": \"ImGuiTable*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiTable* table)\",\n      \"call_args\": \"(table)\",\n      \"cimguiname\": \"igTableMergeDrawChannels\",\n      \"defaults\": {},\n      \"funcname\": \"TableMergeDrawChannels\",\n      \"location\": \"imgui_internal:3321\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTableMergeDrawChannels\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiTable*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igTableNextColumn\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igTableNextColumn\",\n      \"defaults\": {},\n      \"funcname\": \"TableNextColumn\",\n      \"location\": \"imgui:817\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTableNextColumn\",\n      \"ret\": \"bool\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igTableNextRow\": [\n    {\n      \"args\": \"(ImGuiTableRowFlags row_flags,float min_row_height)\",\n      \"argsT\": [\n        {\n          \"name\": \"row_flags\",\n          \"type\": \"ImGuiTableRowFlags\"\n        },\n        {\n          \"name\": \"min_row_height\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiTableRowFlags row_flags=0,float min_row_height=0.0f)\",\n      \"call_args\": \"(row_flags,min_row_height)\",\n      \"cimguiname\": \"igTableNextRow\",\n      \"defaults\": {\n        \"min_row_height\": \"0.0f\",\n        \"row_flags\": \"0\"\n      },\n      \"funcname\": \"TableNextRow\",\n      \"location\": \"imgui:816\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTableNextRow\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiTableRowFlags,float)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igTableOpenContextMenu\": [\n    {\n      \"args\": \"(int column_n)\",\n      \"argsT\": [\n        {\n          \"name\": \"column_n\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(int column_n=-1)\",\n      \"call_args\": \"(column_n)\",\n      \"cimguiname\": \"igTableOpenContextMenu\",\n      \"defaults\": {\n        \"column_n\": \"-1\"\n      },\n      \"funcname\": \"TableOpenContextMenu\",\n      \"location\": \"imgui_internal:3298\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTableOpenContextMenu\",\n      \"ret\": \"void\",\n      \"signature\": \"(int)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igTablePopBackgroundChannel\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igTablePopBackgroundChannel\",\n      \"defaults\": {},\n      \"funcname\": \"TablePopBackgroundChannel\",\n      \"location\": \"imgui_internal:3305\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTablePopBackgroundChannel\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igTablePushBackgroundChannel\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igTablePushBackgroundChannel\",\n      \"defaults\": {},\n      \"funcname\": \"TablePushBackgroundChannel\",\n      \"location\": \"imgui_internal:3304\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTablePushBackgroundChannel\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igTableRemove\": [\n    {\n      \"args\": \"(ImGuiTable* table)\",\n      \"argsT\": [\n        {\n          \"name\": \"table\",\n          \"type\": \"ImGuiTable*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiTable* table)\",\n      \"call_args\": \"(table)\",\n      \"cimguiname\": \"igTableRemove\",\n      \"defaults\": {},\n      \"funcname\": \"TableRemove\",\n      \"location\": \"imgui_internal:3339\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTableRemove\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiTable*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igTableResetSettings\": [\n    {\n      \"args\": \"(ImGuiTable* table)\",\n      \"argsT\": [\n        {\n          \"name\": \"table\",\n          \"type\": \"ImGuiTable*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiTable* table)\",\n      \"call_args\": \"(table)\",\n      \"cimguiname\": \"igTableResetSettings\",\n      \"defaults\": {},\n      \"funcname\": \"TableResetSettings\",\n      \"location\": \"imgui_internal:3347\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTableResetSettings\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiTable*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igTableSaveSettings\": [\n    {\n      \"args\": \"(ImGuiTable* table)\",\n      \"argsT\": [\n        {\n          \"name\": \"table\",\n          \"type\": \"ImGuiTable*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiTable* table)\",\n      \"call_args\": \"(table)\",\n      \"cimguiname\": \"igTableSaveSettings\",\n      \"defaults\": {},\n      \"funcname\": \"TableSaveSettings\",\n      \"location\": \"imgui_internal:3346\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTableSaveSettings\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiTable*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igTableSetBgColor\": [\n    {\n      \"args\": \"(ImGuiTableBgTarget target,ImU32 color,int column_n)\",\n      \"argsT\": [\n        {\n          \"name\": \"target\",\n          \"type\": \"ImGuiTableBgTarget\"\n        },\n        {\n          \"name\": \"color\",\n          \"type\": \"ImU32\"\n        },\n        {\n          \"name\": \"column_n\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiTableBgTarget target,ImU32 color,int column_n=-1)\",\n      \"call_args\": \"(target,color,column_n)\",\n      \"cimguiname\": \"igTableSetBgColor\",\n      \"defaults\": {\n        \"column_n\": \"-1\"\n      },\n      \"funcname\": \"TableSetBgColor\",\n      \"location\": \"imgui:848\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTableSetBgColor\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiTableBgTarget,ImU32,int)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igTableSetColumnEnabled\": [\n    {\n      \"args\": \"(int column_n,bool v)\",\n      \"argsT\": [\n        {\n          \"name\": \"column_n\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"v\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"argsoriginal\": \"(int column_n,bool v)\",\n      \"call_args\": \"(column_n,v)\",\n      \"cimguiname\": \"igTableSetColumnEnabled\",\n      \"defaults\": {},\n      \"funcname\": \"TableSetColumnEnabled\",\n      \"location\": \"imgui:846\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTableSetColumnEnabled\",\n      \"ret\": \"void\",\n      \"signature\": \"(int,bool)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igTableSetColumnIndex\": [\n    {\n      \"args\": \"(int column_n)\",\n      \"argsT\": [\n        {\n          \"name\": \"column_n\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(int column_n)\",\n      \"call_args\": \"(column_n)\",\n      \"cimguiname\": \"igTableSetColumnIndex\",\n      \"defaults\": {},\n      \"funcname\": \"TableSetColumnIndex\",\n      \"location\": \"imgui:818\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTableSetColumnIndex\",\n      \"ret\": \"bool\",\n      \"signature\": \"(int)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igTableSetColumnSortDirection\": [\n    {\n      \"args\": \"(int column_n,ImGuiSortDirection sort_direction,bool append_to_sort_specs)\",\n      \"argsT\": [\n        {\n          \"name\": \"column_n\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"sort_direction\",\n          \"type\": \"ImGuiSortDirection\"\n        },\n        {\n          \"name\": \"append_to_sort_specs\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"argsoriginal\": \"(int column_n,ImGuiSortDirection sort_direction,bool append_to_sort_specs)\",\n      \"call_args\": \"(column_n,sort_direction,append_to_sort_specs)\",\n      \"cimguiname\": \"igTableSetColumnSortDirection\",\n      \"defaults\": {},\n      \"funcname\": \"TableSetColumnSortDirection\",\n      \"location\": \"imgui_internal:3300\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTableSetColumnSortDirection\",\n      \"ret\": \"void\",\n      \"signature\": \"(int,ImGuiSortDirection,bool)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igTableSetColumnWidth\": [\n    {\n      \"args\": \"(int column_n,float width)\",\n      \"argsT\": [\n        {\n          \"name\": \"column_n\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"width\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(int column_n,float width)\",\n      \"call_args\": \"(column_n,width)\",\n      \"cimguiname\": \"igTableSetColumnWidth\",\n      \"defaults\": {},\n      \"funcname\": \"TableSetColumnWidth\",\n      \"location\": \"imgui_internal:3299\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTableSetColumnWidth\",\n      \"ret\": \"void\",\n      \"signature\": \"(int,float)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igTableSetColumnWidthAutoAll\": [\n    {\n      \"args\": \"(ImGuiTable* table)\",\n      \"argsT\": [\n        {\n          \"name\": \"table\",\n          \"type\": \"ImGuiTable*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiTable* table)\",\n      \"call_args\": \"(table)\",\n      \"cimguiname\": \"igTableSetColumnWidthAutoAll\",\n      \"defaults\": {},\n      \"funcname\": \"TableSetColumnWidthAutoAll\",\n      \"location\": \"imgui_internal:3338\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTableSetColumnWidthAutoAll\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiTable*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igTableSetColumnWidthAutoSingle\": [\n    {\n      \"args\": \"(ImGuiTable* table,int column_n)\",\n      \"argsT\": [\n        {\n          \"name\": \"table\",\n          \"type\": \"ImGuiTable*\"\n        },\n        {\n          \"name\": \"column_n\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiTable* table,int column_n)\",\n      \"call_args\": \"(table,column_n)\",\n      \"cimguiname\": \"igTableSetColumnWidthAutoSingle\",\n      \"defaults\": {},\n      \"funcname\": \"TableSetColumnWidthAutoSingle\",\n      \"location\": \"imgui_internal:3337\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTableSetColumnWidthAutoSingle\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiTable*,int)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igTableSettingsAddSettingsHandler\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igTableSettingsAddSettingsHandler\",\n      \"defaults\": {},\n      \"funcname\": \"TableSettingsAddSettingsHandler\",\n      \"location\": \"imgui_internal:3349\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTableSettingsAddSettingsHandler\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igTableSettingsCreate\": [\n    {\n      \"args\": \"(ImGuiID id,int columns_count)\",\n      \"argsT\": [\n        {\n          \"name\": \"id\",\n          \"type\": \"ImGuiID\"\n        },\n        {\n          \"name\": \"columns_count\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiID id,int columns_count)\",\n      \"call_args\": \"(id,columns_count)\",\n      \"cimguiname\": \"igTableSettingsCreate\",\n      \"defaults\": {},\n      \"funcname\": \"TableSettingsCreate\",\n      \"location\": \"imgui_internal:3350\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTableSettingsCreate\",\n      \"ret\": \"ImGuiTableSettings*\",\n      \"signature\": \"(ImGuiID,int)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igTableSettingsFindByID\": [\n    {\n      \"args\": \"(ImGuiID id)\",\n      \"argsT\": [\n        {\n          \"name\": \"id\",\n          \"type\": \"ImGuiID\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiID id)\",\n      \"call_args\": \"(id)\",\n      \"cimguiname\": \"igTableSettingsFindByID\",\n      \"defaults\": {},\n      \"funcname\": \"TableSettingsFindByID\",\n      \"location\": \"imgui_internal:3351\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTableSettingsFindByID\",\n      \"ret\": \"ImGuiTableSettings*\",\n      \"signature\": \"(ImGuiID)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igTableSetupColumn\": [\n    {\n      \"args\": \"(const char* label,ImGuiTableColumnFlags flags,float init_width_or_weight,ImGuiID user_id)\",\n      \"argsT\": [\n        {\n          \"name\": \"label\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiTableColumnFlags\"\n        },\n        {\n          \"name\": \"init_width_or_weight\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"user_id\",\n          \"type\": \"ImGuiID\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label,ImGuiTableColumnFlags flags=0,float init_width_or_weight=0.0f,ImGuiID user_id=0)\",\n      \"call_args\": \"(label,flags,init_width_or_weight,user_id)\",\n      \"cimguiname\": \"igTableSetupColumn\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"init_width_or_weight\": \"0.0f\",\n        \"user_id\": \"0\"\n      },\n      \"funcname\": \"TableSetupColumn\",\n      \"location\": \"imgui:828\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTableSetupColumn\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,ImGuiTableColumnFlags,float,ImGuiID)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igTableSetupDrawChannels\": [\n    {\n      \"args\": \"(ImGuiTable* table)\",\n      \"argsT\": [\n        {\n          \"name\": \"table\",\n          \"type\": \"ImGuiTable*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiTable* table)\",\n      \"call_args\": \"(table)\",\n      \"cimguiname\": \"igTableSetupDrawChannels\",\n      \"defaults\": {},\n      \"funcname\": \"TableSetupDrawChannels\",\n      \"location\": \"imgui_internal:3314\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTableSetupDrawChannels\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiTable*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igTableSetupScrollFreeze\": [\n    {\n      \"args\": \"(int cols,int rows)\",\n      \"argsT\": [\n        {\n          \"name\": \"cols\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"rows\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(int cols,int rows)\",\n      \"call_args\": \"(cols,rows)\",\n      \"cimguiname\": \"igTableSetupScrollFreeze\",\n      \"defaults\": {},\n      \"funcname\": \"TableSetupScrollFreeze\",\n      \"location\": \"imgui:829\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTableSetupScrollFreeze\",\n      \"ret\": \"void\",\n      \"signature\": \"(int,int)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igTableSortSpecsBuild\": [\n    {\n      \"args\": \"(ImGuiTable* table)\",\n      \"argsT\": [\n        {\n          \"name\": \"table\",\n          \"type\": \"ImGuiTable*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiTable* table)\",\n      \"call_args\": \"(table)\",\n      \"cimguiname\": \"igTableSortSpecsBuild\",\n      \"defaults\": {},\n      \"funcname\": \"TableSortSpecsBuild\",\n      \"location\": \"imgui_internal:3325\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTableSortSpecsBuild\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiTable*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igTableSortSpecsSanitize\": [\n    {\n      \"args\": \"(ImGuiTable* table)\",\n      \"argsT\": [\n        {\n          \"name\": \"table\",\n          \"type\": \"ImGuiTable*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiTable* table)\",\n      \"call_args\": \"(table)\",\n      \"cimguiname\": \"igTableSortSpecsSanitize\",\n      \"defaults\": {},\n      \"funcname\": \"TableSortSpecsSanitize\",\n      \"location\": \"imgui_internal:3324\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTableSortSpecsSanitize\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiTable*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igTableUpdateBorders\": [\n    {\n      \"args\": \"(ImGuiTable* table)\",\n      \"argsT\": [\n        {\n          \"name\": \"table\",\n          \"type\": \"ImGuiTable*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiTable* table)\",\n      \"call_args\": \"(table)\",\n      \"cimguiname\": \"igTableUpdateBorders\",\n      \"defaults\": {},\n      \"funcname\": \"TableUpdateBorders\",\n      \"location\": \"imgui_internal:3316\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTableUpdateBorders\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiTable*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igTableUpdateColumnsWeightFromWidth\": [\n    {\n      \"args\": \"(ImGuiTable* table)\",\n      \"argsT\": [\n        {\n          \"name\": \"table\",\n          \"type\": \"ImGuiTable*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiTable* table)\",\n      \"call_args\": \"(table)\",\n      \"cimguiname\": \"igTableUpdateColumnsWeightFromWidth\",\n      \"defaults\": {},\n      \"funcname\": \"TableUpdateColumnsWeightFromWidth\",\n      \"location\": \"imgui_internal:3317\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTableUpdateColumnsWeightFromWidth\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiTable*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igTableUpdateLayout\": [\n    {\n      \"args\": \"(ImGuiTable* table)\",\n      \"argsT\": [\n        {\n          \"name\": \"table\",\n          \"type\": \"ImGuiTable*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiTable* table)\",\n      \"call_args\": \"(table)\",\n      \"cimguiname\": \"igTableUpdateLayout\",\n      \"defaults\": {},\n      \"funcname\": \"TableUpdateLayout\",\n      \"location\": \"imgui_internal:3315\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTableUpdateLayout\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiTable*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igTeleportMousePos\": [\n    {\n      \"args\": \"(const ImVec2 pos)\",\n      \"argsT\": [\n        {\n          \"name\": \"pos\",\n          \"type\": \"const ImVec2\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImVec2& pos)\",\n      \"call_args\": \"(pos)\",\n      \"cimguiname\": \"igTeleportMousePos\",\n      \"defaults\": {},\n      \"funcname\": \"TeleportMousePos\",\n      \"location\": \"imgui_internal:3190\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTeleportMousePos\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImVec2)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igTempInputIsActive\": [\n    {\n      \"args\": \"(ImGuiID id)\",\n      \"argsT\": [\n        {\n          \"name\": \"id\",\n          \"type\": \"ImGuiID\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiID id)\",\n      \"call_args\": \"(id)\",\n      \"cimguiname\": \"igTempInputIsActive\",\n      \"defaults\": {},\n      \"funcname\": \"TempInputIsActive\",\n      \"location\": \"imgui_internal:3457\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTempInputIsActive\",\n      \"ret\": \"bool\",\n      \"signature\": \"(ImGuiID)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igTempInputScalar\": [\n    {\n      \"args\": \"(const ImRect bb,ImGuiID id,const char* label,ImGuiDataType data_type,void* p_data,const char* format,const void* p_clamp_min,const void* p_clamp_max)\",\n      \"argsT\": [\n        {\n          \"name\": \"bb\",\n          \"type\": \"const ImRect\"\n        },\n        {\n          \"name\": \"id\",\n          \"type\": \"ImGuiID\"\n        },\n        {\n          \"name\": \"label\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"data_type\",\n          \"type\": \"ImGuiDataType\"\n        },\n        {\n          \"name\": \"p_data\",\n          \"type\": \"void*\"\n        },\n        {\n          \"name\": \"format\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"p_clamp_min\",\n          \"type\": \"const void*\"\n        },\n        {\n          \"name\": \"p_clamp_max\",\n          \"type\": \"const void*\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImRect& bb,ImGuiID id,const char* label,ImGuiDataType data_type,void* p_data,const char* format,const void* p_clamp_min=((void*)0),const void* p_clamp_max=((void*)0))\",\n      \"call_args\": \"(bb,id,label,data_type,p_data,format,p_clamp_min,p_clamp_max)\",\n      \"cimguiname\": \"igTempInputScalar\",\n      \"defaults\": {\n        \"p_clamp_max\": \"NULL\",\n        \"p_clamp_min\": \"NULL\"\n      },\n      \"funcname\": \"TempInputScalar\",\n      \"location\": \"imgui_internal:3456\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTempInputScalar\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const ImRect,ImGuiID,const char*,ImGuiDataType,void*,const char*,const void*,const void*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igTempInputText\": [\n    {\n      \"args\": \"(const ImRect bb,ImGuiID id,const char* label,char* buf,int buf_size,ImGuiInputTextFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"bb\",\n          \"type\": \"const ImRect\"\n        },\n        {\n          \"name\": \"id\",\n          \"type\": \"ImGuiID\"\n        },\n        {\n          \"name\": \"label\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"buf\",\n          \"type\": \"char*\"\n        },\n        {\n          \"name\": \"buf_size\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiInputTextFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImRect& bb,ImGuiID id,const char* label,char* buf,int buf_size,ImGuiInputTextFlags flags)\",\n      \"call_args\": \"(bb,id,label,buf,buf_size,flags)\",\n      \"cimguiname\": \"igTempInputText\",\n      \"defaults\": {},\n      \"funcname\": \"TempInputText\",\n      \"location\": \"imgui_internal:3455\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTempInputText\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const ImRect,ImGuiID,const char*,char*,int,ImGuiInputTextFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igTestKeyOwner\": [\n    {\n      \"args\": \"(ImGuiKey key,ImGuiID owner_id)\",\n      \"argsT\": [\n        {\n          \"name\": \"key\",\n          \"type\": \"ImGuiKey\"\n        },\n        {\n          \"name\": \"owner_id\",\n          \"type\": \"ImGuiID\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiKey key,ImGuiID owner_id)\",\n      \"call_args\": \"(key,owner_id)\",\n      \"cimguiname\": \"igTestKeyOwner\",\n      \"defaults\": {},\n      \"funcname\": \"TestKeyOwner\",\n      \"location\": \"imgui_internal:3209\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTestKeyOwner\",\n      \"ret\": \"bool\",\n      \"signature\": \"(ImGuiKey,ImGuiID)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igTestShortcutRouting\": [\n    {\n      \"args\": \"(ImGuiKeyChord key_chord,ImGuiID owner_id)\",\n      \"argsT\": [\n        {\n          \"name\": \"key_chord\",\n          \"type\": \"ImGuiKeyChord\"\n        },\n        {\n          \"name\": \"owner_id\",\n          \"type\": \"ImGuiID\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiKeyChord key_chord,ImGuiID owner_id)\",\n      \"call_args\": \"(key_chord,owner_id)\",\n      \"cimguiname\": \"igTestShortcutRouting\",\n      \"defaults\": {},\n      \"funcname\": \"TestShortcutRouting\",\n      \"location\": \"imgui_internal:3243\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTestShortcutRouting\",\n      \"ret\": \"bool\",\n      \"signature\": \"(ImGuiKeyChord,ImGuiID)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igText\": [\n    {\n      \"args\": \"(const char* fmt,...)\",\n      \"argsT\": [\n        {\n          \"name\": \"fmt\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"...\",\n          \"type\": \"...\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* fmt,...)\",\n      \"call_args\": \"(fmt,...)\",\n      \"cimguiname\": \"igText\",\n      \"defaults\": {},\n      \"funcname\": \"Text\",\n      \"isvararg\": \"...)\",\n      \"location\": \"imgui:533\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igText\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,...)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igTextColored\": [\n    {\n      \"args\": \"(const ImVec4 col,const char* fmt,...)\",\n      \"argsT\": [\n        {\n          \"name\": \"col\",\n          \"type\": \"const ImVec4\"\n        },\n        {\n          \"name\": \"fmt\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"...\",\n          \"type\": \"...\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImVec4& col,const char* fmt,...)\",\n      \"call_args\": \"(col,fmt,...)\",\n      \"cimguiname\": \"igTextColored\",\n      \"defaults\": {},\n      \"funcname\": \"TextColored\",\n      \"isvararg\": \"...)\",\n      \"location\": \"imgui:535\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTextColored\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImVec4,const char*,...)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igTextColoredV\": [\n    {\n      \"args\": \"(const ImVec4 col,const char* fmt,va_list args)\",\n      \"argsT\": [\n        {\n          \"name\": \"col\",\n          \"type\": \"const ImVec4\"\n        },\n        {\n          \"name\": \"fmt\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"args\",\n          \"type\": \"va_list\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImVec4& col,const char* fmt,va_list args)\",\n      \"call_args\": \"(col,fmt,args)\",\n      \"cimguiname\": \"igTextColoredV\",\n      \"defaults\": {},\n      \"funcname\": \"TextColoredV\",\n      \"location\": \"imgui:536\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTextColoredV\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImVec4,const char*,va_list)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igTextDisabled\": [\n    {\n      \"args\": \"(const char* fmt,...)\",\n      \"argsT\": [\n        {\n          \"name\": \"fmt\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"...\",\n          \"type\": \"...\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* fmt,...)\",\n      \"call_args\": \"(fmt,...)\",\n      \"cimguiname\": \"igTextDisabled\",\n      \"defaults\": {},\n      \"funcname\": \"TextDisabled\",\n      \"isvararg\": \"...)\",\n      \"location\": \"imgui:537\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTextDisabled\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,...)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igTextDisabledV\": [\n    {\n      \"args\": \"(const char* fmt,va_list args)\",\n      \"argsT\": [\n        {\n          \"name\": \"fmt\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"args\",\n          \"type\": \"va_list\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* fmt,va_list args)\",\n      \"call_args\": \"(fmt,args)\",\n      \"cimguiname\": \"igTextDisabledV\",\n      \"defaults\": {},\n      \"funcname\": \"TextDisabledV\",\n      \"location\": \"imgui:538\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTextDisabledV\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,va_list)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igTextEx\": [\n    {\n      \"args\": \"(const char* text,const char* text_end,ImGuiTextFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"text\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"text_end\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiTextFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* text,const char* text_end=((void*)0),ImGuiTextFlags flags=0)\",\n      \"call_args\": \"(text,text_end,flags)\",\n      \"cimguiname\": \"igTextEx\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"text_end\": \"NULL\"\n      },\n      \"funcname\": \"TextEx\",\n      \"location\": \"imgui_internal:3401\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTextEx\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const char*,ImGuiTextFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igTextLink\": [\n    {\n      \"args\": \"(const char* label)\",\n      \"argsT\": [\n        {\n          \"name\": \"label\",\n          \"type\": \"const char*\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label)\",\n      \"call_args\": \"(label)\",\n      \"cimguiname\": \"igTextLink\",\n      \"defaults\": {},\n      \"funcname\": \"TextLink\",\n      \"location\": \"imgui:561\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTextLink\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igTextLinkOpenURL\": [\n    {\n      \"args\": \"(const char* label,const char* url)\",\n      \"argsT\": [\n        {\n          \"name\": \"label\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"url\",\n          \"type\": \"const char*\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label,const char* url=((void*)0))\",\n      \"call_args\": \"(label,url)\",\n      \"cimguiname\": \"igTextLinkOpenURL\",\n      \"defaults\": {\n        \"url\": \"NULL\"\n      },\n      \"funcname\": \"TextLinkOpenURL\",\n      \"location\": \"imgui:562\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTextLinkOpenURL\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const char*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igTextUnformatted\": [\n    {\n      \"args\": \"(const char* text,const char* text_end)\",\n      \"argsT\": [\n        {\n          \"name\": \"text\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"text_end\",\n          \"type\": \"const char*\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* text,const char* text_end=((void*)0))\",\n      \"call_args\": \"(text,text_end)\",\n      \"cimguiname\": \"igTextUnformatted\",\n      \"defaults\": {\n        \"text_end\": \"NULL\"\n      },\n      \"funcname\": \"TextUnformatted\",\n      \"location\": \"imgui:532\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTextUnformatted\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const char*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igTextV\": [\n    {\n      \"args\": \"(const char* fmt,va_list args)\",\n      \"argsT\": [\n        {\n          \"name\": \"fmt\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"args\",\n          \"type\": \"va_list\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* fmt,va_list args)\",\n      \"call_args\": \"(fmt,args)\",\n      \"cimguiname\": \"igTextV\",\n      \"defaults\": {},\n      \"funcname\": \"TextV\",\n      \"location\": \"imgui:534\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTextV\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,va_list)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igTextWrapped\": [\n    {\n      \"args\": \"(const char* fmt,...)\",\n      \"argsT\": [\n        {\n          \"name\": \"fmt\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"...\",\n          \"type\": \"...\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* fmt,...)\",\n      \"call_args\": \"(fmt,...)\",\n      \"cimguiname\": \"igTextWrapped\",\n      \"defaults\": {},\n      \"funcname\": \"TextWrapped\",\n      \"isvararg\": \"...)\",\n      \"location\": \"imgui:539\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTextWrapped\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,...)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igTextWrappedV\": [\n    {\n      \"args\": \"(const char* fmt,va_list args)\",\n      \"argsT\": [\n        {\n          \"name\": \"fmt\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"args\",\n          \"type\": \"va_list\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* fmt,va_list args)\",\n      \"call_args\": \"(fmt,args)\",\n      \"cimguiname\": \"igTextWrappedV\",\n      \"defaults\": {},\n      \"funcname\": \"TextWrappedV\",\n      \"location\": \"imgui:540\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTextWrappedV\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,va_list)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igTreeNode\": [\n    {\n      \"args\": \"(const char* label)\",\n      \"argsT\": [\n        {\n          \"name\": \"label\",\n          \"type\": \"const char*\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label)\",\n      \"call_args\": \"(label)\",\n      \"cimguiname\": \"igTreeNode\",\n      \"defaults\": {},\n      \"funcname\": \"TreeNode\",\n      \"location\": \"imgui:657\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTreeNode_Str\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* str_id,const char* fmt,...)\",\n      \"argsT\": [\n        {\n          \"name\": \"str_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"fmt\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"...\",\n          \"type\": \"...\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* str_id,const char* fmt,...)\",\n      \"call_args\": \"(str_id,fmt,...)\",\n      \"cimguiname\": \"igTreeNode\",\n      \"defaults\": {},\n      \"funcname\": \"TreeNode\",\n      \"isvararg\": \"...)\",\n      \"location\": \"imgui:658\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTreeNode_StrStr\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*,const char*,...)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const void* ptr_id,const char* fmt,...)\",\n      \"argsT\": [\n        {\n          \"name\": \"ptr_id\",\n          \"type\": \"const void*\"\n        },\n        {\n          \"name\": \"fmt\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"...\",\n          \"type\": \"...\"\n        }\n      ],\n      \"argsoriginal\": \"(const void* ptr_id,const char* fmt,...)\",\n      \"call_args\": \"(ptr_id,fmt,...)\",\n      \"cimguiname\": \"igTreeNode\",\n      \"defaults\": {},\n      \"funcname\": \"TreeNode\",\n      \"isvararg\": \"...)\",\n      \"location\": \"imgui:659\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTreeNode_Ptr\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const void*,const char*,...)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igTreeNodeBehavior\": [\n    {\n      \"args\": \"(ImGuiID id,ImGuiTreeNodeFlags flags,const char* label,const char* label_end)\",\n      \"argsT\": [\n        {\n          \"name\": \"id\",\n          \"type\": \"ImGuiID\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiTreeNodeFlags\"\n        },\n        {\n          \"name\": \"label\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"label_end\",\n          \"type\": \"const char*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiID id,ImGuiTreeNodeFlags flags,const char* label,const char* label_end=((void*)0))\",\n      \"call_args\": \"(id,flags,label,label_end)\",\n      \"cimguiname\": \"igTreeNodeBehavior\",\n      \"defaults\": {\n        \"label_end\": \"NULL\"\n      },\n      \"funcname\": \"TreeNodeBehavior\",\n      \"location\": \"imgui_internal:3427\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTreeNodeBehavior\",\n      \"ret\": \"bool\",\n      \"signature\": \"(ImGuiID,ImGuiTreeNodeFlags,const char*,const char*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igTreeNodeEx\": [\n    {\n      \"args\": \"(const char* label,ImGuiTreeNodeFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"label\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiTreeNodeFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label,ImGuiTreeNodeFlags flags=0)\",\n      \"call_args\": \"(label,flags)\",\n      \"cimguiname\": \"igTreeNodeEx\",\n      \"defaults\": {\n        \"flags\": \"0\"\n      },\n      \"funcname\": \"TreeNodeEx\",\n      \"location\": \"imgui:662\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTreeNodeEx_Str\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*,ImGuiTreeNodeFlags)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* str_id,ImGuiTreeNodeFlags flags,const char* fmt,...)\",\n      \"argsT\": [\n        {\n          \"name\": \"str_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiTreeNodeFlags\"\n        },\n        {\n          \"name\": \"fmt\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"...\",\n          \"type\": \"...\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* str_id,ImGuiTreeNodeFlags flags,const char* fmt,...)\",\n      \"call_args\": \"(str_id,flags,fmt,...)\",\n      \"cimguiname\": \"igTreeNodeEx\",\n      \"defaults\": {},\n      \"funcname\": \"TreeNodeEx\",\n      \"isvararg\": \"...)\",\n      \"location\": \"imgui:663\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTreeNodeEx_StrStr\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*,ImGuiTreeNodeFlags,const char*,...)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const void* ptr_id,ImGuiTreeNodeFlags flags,const char* fmt,...)\",\n      \"argsT\": [\n        {\n          \"name\": \"ptr_id\",\n          \"type\": \"const void*\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiTreeNodeFlags\"\n        },\n        {\n          \"name\": \"fmt\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"...\",\n          \"type\": \"...\"\n        }\n      ],\n      \"argsoriginal\": \"(const void* ptr_id,ImGuiTreeNodeFlags flags,const char* fmt,...)\",\n      \"call_args\": \"(ptr_id,flags,fmt,...)\",\n      \"cimguiname\": \"igTreeNodeEx\",\n      \"defaults\": {},\n      \"funcname\": \"TreeNodeEx\",\n      \"isvararg\": \"...)\",\n      \"location\": \"imgui:664\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTreeNodeEx_Ptr\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const void*,ImGuiTreeNodeFlags,const char*,...)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igTreeNodeExV\": [\n    {\n      \"args\": \"(const char* str_id,ImGuiTreeNodeFlags flags,const char* fmt,va_list args)\",\n      \"argsT\": [\n        {\n          \"name\": \"str_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiTreeNodeFlags\"\n        },\n        {\n          \"name\": \"fmt\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"args\",\n          \"type\": \"va_list\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* str_id,ImGuiTreeNodeFlags flags,const char* fmt,va_list args)\",\n      \"call_args\": \"(str_id,flags,fmt,args)\",\n      \"cimguiname\": \"igTreeNodeExV\",\n      \"defaults\": {},\n      \"funcname\": \"TreeNodeExV\",\n      \"location\": \"imgui:665\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTreeNodeExV_Str\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*,ImGuiTreeNodeFlags,const char*,va_list)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const void* ptr_id,ImGuiTreeNodeFlags flags,const char* fmt,va_list args)\",\n      \"argsT\": [\n        {\n          \"name\": \"ptr_id\",\n          \"type\": \"const void*\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiTreeNodeFlags\"\n        },\n        {\n          \"name\": \"fmt\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"args\",\n          \"type\": \"va_list\"\n        }\n      ],\n      \"argsoriginal\": \"(const void* ptr_id,ImGuiTreeNodeFlags flags,const char* fmt,va_list args)\",\n      \"call_args\": \"(ptr_id,flags,fmt,args)\",\n      \"cimguiname\": \"igTreeNodeExV\",\n      \"defaults\": {},\n      \"funcname\": \"TreeNodeExV\",\n      \"location\": \"imgui:666\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTreeNodeExV_Ptr\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const void*,ImGuiTreeNodeFlags,const char*,va_list)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igTreeNodeGetOpen\": [\n    {\n      \"args\": \"(ImGuiID storage_id)\",\n      \"argsT\": [\n        {\n          \"name\": \"storage_id\",\n          \"type\": \"ImGuiID\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiID storage_id)\",\n      \"call_args\": \"(storage_id)\",\n      \"cimguiname\": \"igTreeNodeGetOpen\",\n      \"defaults\": {},\n      \"funcname\": \"TreeNodeGetOpen\",\n      \"location\": \"imgui_internal:3429\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTreeNodeGetOpen\",\n      \"ret\": \"bool\",\n      \"signature\": \"(ImGuiID)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igTreeNodeSetOpen\": [\n    {\n      \"args\": \"(ImGuiID storage_id,bool open)\",\n      \"argsT\": [\n        {\n          \"name\": \"storage_id\",\n          \"type\": \"ImGuiID\"\n        },\n        {\n          \"name\": \"open\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiID storage_id,bool open)\",\n      \"call_args\": \"(storage_id,open)\",\n      \"cimguiname\": \"igTreeNodeSetOpen\",\n      \"defaults\": {},\n      \"funcname\": \"TreeNodeSetOpen\",\n      \"location\": \"imgui_internal:3430\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTreeNodeSetOpen\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiID,bool)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igTreeNodeUpdateNextOpen\": [\n    {\n      \"args\": \"(ImGuiID storage_id,ImGuiTreeNodeFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"storage_id\",\n          \"type\": \"ImGuiID\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiTreeNodeFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiID storage_id,ImGuiTreeNodeFlags flags)\",\n      \"call_args\": \"(storage_id,flags)\",\n      \"cimguiname\": \"igTreeNodeUpdateNextOpen\",\n      \"defaults\": {},\n      \"funcname\": \"TreeNodeUpdateNextOpen\",\n      \"location\": \"imgui_internal:3431\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTreeNodeUpdateNextOpen\",\n      \"ret\": \"bool\",\n      \"signature\": \"(ImGuiID,ImGuiTreeNodeFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igTreeNodeV\": [\n    {\n      \"args\": \"(const char* str_id,const char* fmt,va_list args)\",\n      \"argsT\": [\n        {\n          \"name\": \"str_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"fmt\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"args\",\n          \"type\": \"va_list\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* str_id,const char* fmt,va_list args)\",\n      \"call_args\": \"(str_id,fmt,args)\",\n      \"cimguiname\": \"igTreeNodeV\",\n      \"defaults\": {},\n      \"funcname\": \"TreeNodeV\",\n      \"location\": \"imgui:660\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTreeNodeV_Str\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*,const char*,va_list)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const void* ptr_id,const char* fmt,va_list args)\",\n      \"argsT\": [\n        {\n          \"name\": \"ptr_id\",\n          \"type\": \"const void*\"\n        },\n        {\n          \"name\": \"fmt\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"args\",\n          \"type\": \"va_list\"\n        }\n      ],\n      \"argsoriginal\": \"(const void* ptr_id,const char* fmt,va_list args)\",\n      \"call_args\": \"(ptr_id,fmt,args)\",\n      \"cimguiname\": \"igTreeNodeV\",\n      \"defaults\": {},\n      \"funcname\": \"TreeNodeV\",\n      \"location\": \"imgui:661\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTreeNodeV_Ptr\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const void*,const char*,va_list)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igTreePop\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igTreePop\",\n      \"defaults\": {},\n      \"funcname\": \"TreePop\",\n      \"location\": \"imgui:669\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTreePop\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igTreePush\": [\n    {\n      \"args\": \"(const char* str_id)\",\n      \"argsT\": [\n        {\n          \"name\": \"str_id\",\n          \"type\": \"const char*\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* str_id)\",\n      \"call_args\": \"(str_id)\",\n      \"cimguiname\": \"igTreePush\",\n      \"defaults\": {},\n      \"funcname\": \"TreePush\",\n      \"location\": \"imgui:667\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTreePush_Str\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const void* ptr_id)\",\n      \"argsT\": [\n        {\n          \"name\": \"ptr_id\",\n          \"type\": \"const void*\"\n        }\n      ],\n      \"argsoriginal\": \"(const void* ptr_id)\",\n      \"call_args\": \"(ptr_id)\",\n      \"cimguiname\": \"igTreePush\",\n      \"defaults\": {},\n      \"funcname\": \"TreePush\",\n      \"location\": \"imgui:668\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTreePush_Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const void*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igTreePushOverrideID\": [\n    {\n      \"args\": \"(ImGuiID id)\",\n      \"argsT\": [\n        {\n          \"name\": \"id\",\n          \"type\": \"ImGuiID\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiID id)\",\n      \"call_args\": \"(id)\",\n      \"cimguiname\": \"igTreePushOverrideID\",\n      \"defaults\": {},\n      \"funcname\": \"TreePushOverrideID\",\n      \"location\": \"imgui_internal:3428\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTreePushOverrideID\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiID)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igTypingSelectFindBestLeadingMatch\": [\n    {\n      \"args\": \"(ImGuiTypingSelectRequest* req,int items_count,const char*(*get_item_name_func)(void*,int),void* user_data)\",\n      \"argsT\": [\n        {\n          \"name\": \"req\",\n          \"type\": \"ImGuiTypingSelectRequest*\"\n        },\n        {\n          \"name\": \"items_count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"get_item_name_func\",\n          \"ret\": \"const char*\",\n          \"signature\": \"(void*,int)\",\n          \"type\": \"const char*(*)(void*,int)\"\n        },\n        {\n          \"name\": \"user_data\",\n          \"type\": \"void*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiTypingSelectRequest* req,int items_count,const char*(*get_item_name_func)(void*,int),void* user_data)\",\n      \"call_args\": \"(req,items_count,get_item_name_func,user_data)\",\n      \"cimguiname\": \"igTypingSelectFindBestLeadingMatch\",\n      \"defaults\": {},\n      \"funcname\": \"TypingSelectFindBestLeadingMatch\",\n      \"location\": \"imgui_internal:3271\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTypingSelectFindBestLeadingMatch\",\n      \"ret\": \"int\",\n      \"signature\": \"(ImGuiTypingSelectRequest*,int,const char*(*)(void*,int),void*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igTypingSelectFindMatch\": [\n    {\n      \"args\": \"(ImGuiTypingSelectRequest* req,int items_count,const char*(*get_item_name_func)(void*,int),void* user_data,int nav_item_idx)\",\n      \"argsT\": [\n        {\n          \"name\": \"req\",\n          \"type\": \"ImGuiTypingSelectRequest*\"\n        },\n        {\n          \"name\": \"items_count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"get_item_name_func\",\n          \"ret\": \"const char*\",\n          \"signature\": \"(void*,int)\",\n          \"type\": \"const char*(*)(void*,int)\"\n        },\n        {\n          \"name\": \"user_data\",\n          \"type\": \"void*\"\n        },\n        {\n          \"name\": \"nav_item_idx\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiTypingSelectRequest* req,int items_count,const char*(*get_item_name_func)(void*,int),void* user_data,int nav_item_idx)\",\n      \"call_args\": \"(req,items_count,get_item_name_func,user_data,nav_item_idx)\",\n      \"cimguiname\": \"igTypingSelectFindMatch\",\n      \"defaults\": {},\n      \"funcname\": \"TypingSelectFindMatch\",\n      \"location\": \"imgui_internal:3269\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTypingSelectFindMatch\",\n      \"ret\": \"int\",\n      \"signature\": \"(ImGuiTypingSelectRequest*,int,const char*(*)(void*,int),void*,int)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igTypingSelectFindNextSingleCharMatch\": [\n    {\n      \"args\": \"(ImGuiTypingSelectRequest* req,int items_count,const char*(*get_item_name_func)(void*,int),void* user_data,int nav_item_idx)\",\n      \"argsT\": [\n        {\n          \"name\": \"req\",\n          \"type\": \"ImGuiTypingSelectRequest*\"\n        },\n        {\n          \"name\": \"items_count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"get_item_name_func\",\n          \"ret\": \"const char*\",\n          \"signature\": \"(void*,int)\",\n          \"type\": \"const char*(*)(void*,int)\"\n        },\n        {\n          \"name\": \"user_data\",\n          \"type\": \"void*\"\n        },\n        {\n          \"name\": \"nav_item_idx\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiTypingSelectRequest* req,int items_count,const char*(*get_item_name_func)(void*,int),void* user_data,int nav_item_idx)\",\n      \"call_args\": \"(req,items_count,get_item_name_func,user_data,nav_item_idx)\",\n      \"cimguiname\": \"igTypingSelectFindNextSingleCharMatch\",\n      \"defaults\": {},\n      \"funcname\": \"TypingSelectFindNextSingleCharMatch\",\n      \"location\": \"imgui_internal:3270\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igTypingSelectFindNextSingleCharMatch\",\n      \"ret\": \"int\",\n      \"signature\": \"(ImGuiTypingSelectRequest*,int,const char*(*)(void*,int),void*,int)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igUnindent\": [\n    {\n      \"args\": \"(float indent_w)\",\n      \"argsT\": [\n        {\n          \"name\": \"indent_w\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(float indent_w=0.0f)\",\n      \"call_args\": \"(indent_w)\",\n      \"cimguiname\": \"igUnindent\",\n      \"defaults\": {\n        \"indent_w\": \"0.0f\"\n      },\n      \"funcname\": \"Unindent\",\n      \"location\": \"imgui:501\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igUnindent\",\n      \"ret\": \"void\",\n      \"signature\": \"(float)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igUpdateHoveredWindowAndCaptureFlags\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igUpdateHoveredWindowAndCaptureFlags\",\n      \"defaults\": {},\n      \"funcname\": \"UpdateHoveredWindowAndCaptureFlags\",\n      \"location\": \"imgui_internal:3018\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igUpdateHoveredWindowAndCaptureFlags\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igUpdateInputEvents\": [\n    {\n      \"args\": \"(bool trickle_fast_inputs)\",\n      \"argsT\": [\n        {\n          \"name\": \"trickle_fast_inputs\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"argsoriginal\": \"(bool trickle_fast_inputs)\",\n      \"call_args\": \"(trickle_fast_inputs)\",\n      \"cimguiname\": \"igUpdateInputEvents\",\n      \"defaults\": {},\n      \"funcname\": \"UpdateInputEvents\",\n      \"location\": \"imgui_internal:3017\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igUpdateInputEvents\",\n      \"ret\": \"void\",\n      \"signature\": \"(bool)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igUpdateMouseMovingWindowEndFrame\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igUpdateMouseMovingWindowEndFrame\",\n      \"defaults\": {},\n      \"funcname\": \"UpdateMouseMovingWindowEndFrame\",\n      \"location\": \"imgui_internal:3022\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igUpdateMouseMovingWindowEndFrame\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igUpdateMouseMovingWindowNewFrame\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"igUpdateMouseMovingWindowNewFrame\",\n      \"defaults\": {},\n      \"funcname\": \"UpdateMouseMovingWindowNewFrame\",\n      \"location\": \"imgui_internal:3021\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igUpdateMouseMovingWindowNewFrame\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igUpdateWindowParentAndRootLinks\": [\n    {\n      \"args\": \"(ImGuiWindow* window,ImGuiWindowFlags flags,ImGuiWindow* parent_window)\",\n      \"argsT\": [\n        {\n          \"name\": \"window\",\n          \"type\": \"ImGuiWindow*\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiWindowFlags\"\n        },\n        {\n          \"name\": \"parent_window\",\n          \"type\": \"ImGuiWindow*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiWindow* window,ImGuiWindowFlags flags,ImGuiWindow* parent_window)\",\n      \"call_args\": \"(window,flags,parent_window)\",\n      \"cimguiname\": \"igUpdateWindowParentAndRootLinks\",\n      \"defaults\": {},\n      \"funcname\": \"UpdateWindowParentAndRootLinks\",\n      \"location\": \"imgui_internal:2973\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igUpdateWindowParentAndRootLinks\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiWindow*,ImGuiWindowFlags,ImGuiWindow*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igUpdateWindowSkipRefresh\": [\n    {\n      \"args\": \"(ImGuiWindow* window)\",\n      \"argsT\": [\n        {\n          \"name\": \"window\",\n          \"type\": \"ImGuiWindow*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiWindow* window)\",\n      \"call_args\": \"(window)\",\n      \"cimguiname\": \"igUpdateWindowSkipRefresh\",\n      \"defaults\": {},\n      \"funcname\": \"UpdateWindowSkipRefresh\",\n      \"location\": \"imgui_internal:2974\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igUpdateWindowSkipRefresh\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiWindow*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igVSliderFloat\": [\n    {\n      \"args\": \"(const char* label,const ImVec2 size,float* v,float v_min,float v_max,const char* format,ImGuiSliderFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"label\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"size\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"v\",\n          \"type\": \"float*\"\n        },\n        {\n          \"name\": \"v_min\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"v_max\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"format\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiSliderFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label,const ImVec2& size,float* v,float v_min,float v_max,const char* format=\\\"%.3f\\\",ImGuiSliderFlags flags=0)\",\n      \"call_args\": \"(label,size,v,v_min,v_max,format,flags)\",\n      \"cimguiname\": \"igVSliderFloat\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"format\": \"\\\"%.3f\\\"\"\n      },\n      \"funcname\": \"VSliderFloat\",\n      \"location\": \"imgui:623\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igVSliderFloat\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*,const ImVec2,float*,float,float,const char*,ImGuiSliderFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igVSliderInt\": [\n    {\n      \"args\": \"(const char* label,const ImVec2 size,int* v,int v_min,int v_max,const char* format,ImGuiSliderFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"label\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"size\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"v\",\n          \"type\": \"int*\"\n        },\n        {\n          \"name\": \"v_min\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"v_max\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"format\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiSliderFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label,const ImVec2& size,int* v,int v_min,int v_max,const char* format=\\\"%d\\\",ImGuiSliderFlags flags=0)\",\n      \"call_args\": \"(label,size,v,v_min,v_max,format,flags)\",\n      \"cimguiname\": \"igVSliderInt\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"format\": \"\\\"%d\\\"\"\n      },\n      \"funcname\": \"VSliderInt\",\n      \"location\": \"imgui:624\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igVSliderInt\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*,const ImVec2,int*,int,int,const char*,ImGuiSliderFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igVSliderScalar\": [\n    {\n      \"args\": \"(const char* label,const ImVec2 size,ImGuiDataType data_type,void* p_data,const void* p_min,const void* p_max,const char* format,ImGuiSliderFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"label\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"size\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"data_type\",\n          \"type\": \"ImGuiDataType\"\n        },\n        {\n          \"name\": \"p_data\",\n          \"type\": \"void*\"\n        },\n        {\n          \"name\": \"p_min\",\n          \"type\": \"const void*\"\n        },\n        {\n          \"name\": \"p_max\",\n          \"type\": \"const void*\"\n        },\n        {\n          \"name\": \"format\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiSliderFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label,const ImVec2& size,ImGuiDataType data_type,void* p_data,const void* p_min,const void* p_max,const char* format=((void*)0),ImGuiSliderFlags flags=0)\",\n      \"call_args\": \"(label,size,data_type,p_data,p_min,p_max,format,flags)\",\n      \"cimguiname\": \"igVSliderScalar\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"format\": \"NULL\"\n      },\n      \"funcname\": \"VSliderScalar\",\n      \"location\": \"imgui:625\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igVSliderScalar\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*,const ImVec2,ImGuiDataType,void*,const void*,const void*,const char*,ImGuiSliderFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igValue\": [\n    {\n      \"args\": \"(const char* prefix,bool b)\",\n      \"argsT\": [\n        {\n          \"name\": \"prefix\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"b\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* prefix,bool b)\",\n      \"call_args\": \"(prefix,b)\",\n      \"cimguiname\": \"igValue\",\n      \"defaults\": {},\n      \"funcname\": \"Value\",\n      \"location\": \"imgui:715\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igValue_Bool\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,bool)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* prefix,int v)\",\n      \"argsT\": [\n        {\n          \"name\": \"prefix\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"v\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* prefix,int v)\",\n      \"call_args\": \"(prefix,v)\",\n      \"cimguiname\": \"igValue\",\n      \"defaults\": {},\n      \"funcname\": \"Value\",\n      \"location\": \"imgui:716\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igValue_Int\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* prefix,unsigned int v)\",\n      \"argsT\": [\n        {\n          \"name\": \"prefix\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"v\",\n          \"type\": \"unsigned int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* prefix,unsigned int v)\",\n      \"call_args\": \"(prefix,v)\",\n      \"cimguiname\": \"igValue\",\n      \"defaults\": {},\n      \"funcname\": \"Value\",\n      \"location\": \"imgui:717\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igValue_Uint\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,unsigned int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* prefix,float v,const char* float_format)\",\n      \"argsT\": [\n        {\n          \"name\": \"prefix\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"v\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"float_format\",\n          \"type\": \"const char*\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* prefix,float v,const char* float_format=((void*)0))\",\n      \"call_args\": \"(prefix,v,float_format)\",\n      \"cimguiname\": \"igValue\",\n      \"defaults\": {\n        \"float_format\": \"NULL\"\n      },\n      \"funcname\": \"Value\",\n      \"location\": \"imgui:718\",\n      \"namespace\": \"ImGui\",\n      \"ov_cimguiname\": \"igValue_Float\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,float,const char*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igWindowPosAbsToRel\": [\n    {\n      \"args\": \"(ImVec2 *pOut,ImGuiWindow* window,const ImVec2 p)\",\n      \"argsT\": [\n        {\n          \"name\": \"pOut\",\n          \"type\": \"ImVec2*\"\n        },\n        {\n          \"name\": \"window\",\n          \"type\": \"ImGuiWindow*\"\n        },\n        {\n          \"name\": \"p\",\n          \"type\": \"const ImVec2\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiWindow* window,const ImVec2& p)\",\n      \"call_args\": \"(window,p)\",\n      \"cimguiname\": \"igWindowPosAbsToRel\",\n      \"defaults\": {},\n      \"funcname\": \"WindowPosAbsToRel\",\n      \"location\": \"imgui_internal:2988\",\n      \"namespace\": \"ImGui\",\n      \"nonUDT\": 1,\n      \"ov_cimguiname\": \"igWindowPosAbsToRel\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiWindow*,const ImVec2)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igWindowPosRelToAbs\": [\n    {\n      \"args\": \"(ImVec2 *pOut,ImGuiWindow* window,const ImVec2 p)\",\n      \"argsT\": [\n        {\n          \"name\": \"pOut\",\n          \"type\": \"ImVec2*\"\n        },\n        {\n          \"name\": \"window\",\n          \"type\": \"ImGuiWindow*\"\n        },\n        {\n          \"name\": \"p\",\n          \"type\": \"const ImVec2\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiWindow* window,const ImVec2& p)\",\n      \"call_args\": \"(window,p)\",\n      \"cimguiname\": \"igWindowPosRelToAbs\",\n      \"defaults\": {},\n      \"funcname\": \"WindowPosRelToAbs\",\n      \"location\": \"imgui_internal:2989\",\n      \"namespace\": \"ImGui\",\n      \"nonUDT\": 1,\n      \"ov_cimguiname\": \"igWindowPosRelToAbs\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiWindow*,const ImVec2)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igWindowRectAbsToRel\": [\n    {\n      \"args\": \"(ImRect *pOut,ImGuiWindow* window,const ImRect r)\",\n      \"argsT\": [\n        {\n          \"name\": \"pOut\",\n          \"type\": \"ImRect*\"\n        },\n        {\n          \"name\": \"window\",\n          \"type\": \"ImGuiWindow*\"\n        },\n        {\n          \"name\": \"r\",\n          \"type\": \"const ImRect\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiWindow* window,const ImRect& r)\",\n      \"call_args\": \"(window,r)\",\n      \"cimguiname\": \"igWindowRectAbsToRel\",\n      \"defaults\": {},\n      \"funcname\": \"WindowRectAbsToRel\",\n      \"location\": \"imgui_internal:2986\",\n      \"namespace\": \"ImGui\",\n      \"nonUDT\": 1,\n      \"ov_cimguiname\": \"igWindowRectAbsToRel\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiWindow*,const ImRect)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"igWindowRectRelToAbs\": [\n    {\n      \"args\": \"(ImRect *pOut,ImGuiWindow* window,const ImRect r)\",\n      \"argsT\": [\n        {\n          \"name\": \"pOut\",\n          \"type\": \"ImRect*\"\n        },\n        {\n          \"name\": \"window\",\n          \"type\": \"ImGuiWindow*\"\n        },\n        {\n          \"name\": \"r\",\n          \"type\": \"const ImRect\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiWindow* window,const ImRect& r)\",\n      \"call_args\": \"(window,r)\",\n      \"cimguiname\": \"igWindowRectRelToAbs\",\n      \"defaults\": {},\n      \"funcname\": \"WindowRectRelToAbs\",\n      \"location\": \"imgui_internal:2987\",\n      \"namespace\": \"ImGui\",\n      \"nonUDT\": 1,\n      \"ov_cimguiname\": \"igWindowRectRelToAbs\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiWindow*,const ImRect)\",\n      \"stname\": \"\"\n    }\n  ]\n}"
  },
  {
    "path": "tools/ImGui.NET/CodeGenerator/definitions/cimgui/structs_and_enums.json",
    "content": "{\n  \"enums\": {\n    \"ImDrawFlags_\": [\n      {\n        \"calc_value\": 0,\n        \"name\": \"ImDrawFlags_None\",\n        \"value\": \"0\"\n      },\n      {\n        \"calc_value\": 1,\n        \"name\": \"ImDrawFlags_Closed\",\n        \"value\": \"1 << 0\"\n      },\n      {\n        \"calc_value\": 16,\n        \"name\": \"ImDrawFlags_RoundCornersTopLeft\",\n        \"value\": \"1 << 4\"\n      },\n      {\n        \"calc_value\": 32,\n        \"name\": \"ImDrawFlags_RoundCornersTopRight\",\n        \"value\": \"1 << 5\"\n      },\n      {\n        \"calc_value\": 64,\n        \"name\": \"ImDrawFlags_RoundCornersBottomLeft\",\n        \"value\": \"1 << 6\"\n      },\n      {\n        \"calc_value\": 128,\n        \"name\": \"ImDrawFlags_RoundCornersBottomRight\",\n        \"value\": \"1 << 7\"\n      },\n      {\n        \"calc_value\": 256,\n        \"name\": \"ImDrawFlags_RoundCornersNone\",\n        \"value\": \"1 << 8\"\n      },\n      {\n        \"calc_value\": 48,\n        \"name\": \"ImDrawFlags_RoundCornersTop\",\n        \"value\": \"ImDrawFlags_RoundCornersTopLeft | ImDrawFlags_RoundCornersTopRight\"\n      },\n      {\n        \"calc_value\": 192,\n        \"name\": \"ImDrawFlags_RoundCornersBottom\",\n        \"value\": \"ImDrawFlags_RoundCornersBottomLeft | ImDrawFlags_RoundCornersBottomRight\"\n      },\n      {\n        \"calc_value\": 80,\n        \"name\": \"ImDrawFlags_RoundCornersLeft\",\n        \"value\": \"ImDrawFlags_RoundCornersBottomLeft | ImDrawFlags_RoundCornersTopLeft\"\n      },\n      {\n        \"calc_value\": 160,\n        \"name\": \"ImDrawFlags_RoundCornersRight\",\n        \"value\": \"ImDrawFlags_RoundCornersBottomRight | ImDrawFlags_RoundCornersTopRight\"\n      },\n      {\n        \"calc_value\": 240,\n        \"name\": \"ImDrawFlags_RoundCornersAll\",\n        \"value\": \"ImDrawFlags_RoundCornersTopLeft | ImDrawFlags_RoundCornersTopRight | ImDrawFlags_RoundCornersBottomLeft | ImDrawFlags_RoundCornersBottomRight\"\n      },\n      {\n        \"calc_value\": 240,\n        \"name\": \"ImDrawFlags_RoundCornersDefault_\",\n        \"value\": \"ImDrawFlags_RoundCornersAll\"\n      },\n      {\n        \"calc_value\": 496,\n        \"name\": \"ImDrawFlags_RoundCornersMask_\",\n        \"value\": \"ImDrawFlags_RoundCornersAll | ImDrawFlags_RoundCornersNone\"\n      }\n    ],\n    \"ImDrawListFlags_\": [\n      {\n        \"calc_value\": 0,\n        \"name\": \"ImDrawListFlags_None\",\n        \"value\": \"0\"\n      },\n      {\n        \"calc_value\": 1,\n        \"name\": \"ImDrawListFlags_AntiAliasedLines\",\n        \"value\": \"1 << 0\"\n      },\n      {\n        \"calc_value\": 2,\n        \"name\": \"ImDrawListFlags_AntiAliasedLinesUseTex\",\n        \"value\": \"1 << 1\"\n      },\n      {\n        \"calc_value\": 4,\n        \"name\": \"ImDrawListFlags_AntiAliasedFill\",\n        \"value\": \"1 << 2\"\n      },\n      {\n        \"calc_value\": 8,\n        \"name\": \"ImDrawListFlags_AllowVtxOffset\",\n        \"value\": \"1 << 3\"\n      }\n    ],\n    \"ImFontAtlasFlags_\": [\n      {\n        \"calc_value\": 0,\n        \"name\": \"ImFontAtlasFlags_None\",\n        \"value\": \"0\"\n      },\n      {\n        \"calc_value\": 1,\n        \"name\": \"ImFontAtlasFlags_NoPowerOfTwoHeight\",\n        \"value\": \"1 << 0\"\n      },\n      {\n        \"calc_value\": 2,\n        \"name\": \"ImFontAtlasFlags_NoMouseCursors\",\n        \"value\": \"1 << 1\"\n      },\n      {\n        \"calc_value\": 4,\n        \"name\": \"ImFontAtlasFlags_NoBakedLines\",\n        \"value\": \"1 << 2\"\n      }\n    ],\n    \"ImGuiActivateFlags_\": [\n      {\n        \"calc_value\": 0,\n        \"name\": \"ImGuiActivateFlags_None\",\n        \"value\": \"0\"\n      },\n      {\n        \"calc_value\": 1,\n        \"name\": \"ImGuiActivateFlags_PreferInput\",\n        \"value\": \"1 << 0\"\n      },\n      {\n        \"calc_value\": 2,\n        \"name\": \"ImGuiActivateFlags_PreferTweak\",\n        \"value\": \"1 << 1\"\n      },\n      {\n        \"calc_value\": 4,\n        \"name\": \"ImGuiActivateFlags_TryToPreserveState\",\n        \"value\": \"1 << 2\"\n      },\n      {\n        \"calc_value\": 8,\n        \"name\": \"ImGuiActivateFlags_FromTabbing\",\n        \"value\": \"1 << 3\"\n      },\n      {\n        \"calc_value\": 16,\n        \"name\": \"ImGuiActivateFlags_FromShortcut\",\n        \"value\": \"1 << 4\"\n      }\n    ],\n    \"ImGuiAxis\": [\n      {\n        \"calc_value\": -1,\n        \"name\": \"ImGuiAxis_None\",\n        \"value\": \"-1\"\n      },\n      {\n        \"calc_value\": 0,\n        \"name\": \"ImGuiAxis_X\",\n        \"value\": \"0\"\n      },\n      {\n        \"calc_value\": 1,\n        \"name\": \"ImGuiAxis_Y\",\n        \"value\": \"1\"\n      }\n    ],\n    \"ImGuiBackendFlags_\": [\n      {\n        \"calc_value\": 0,\n        \"name\": \"ImGuiBackendFlags_None\",\n        \"value\": \"0\"\n      },\n      {\n        \"calc_value\": 1,\n        \"name\": \"ImGuiBackendFlags_HasGamepad\",\n        \"value\": \"1 << 0\"\n      },\n      {\n        \"calc_value\": 2,\n        \"name\": \"ImGuiBackendFlags_HasMouseCursors\",\n        \"value\": \"1 << 1\"\n      },\n      {\n        \"calc_value\": 4,\n        \"name\": \"ImGuiBackendFlags_HasSetMousePos\",\n        \"value\": \"1 << 2\"\n      },\n      {\n        \"calc_value\": 8,\n        \"name\": \"ImGuiBackendFlags_RendererHasVtxOffset\",\n        \"value\": \"1 << 3\"\n      }\n    ],\n    \"ImGuiButtonFlagsPrivate_\": [\n      {\n        \"calc_value\": 16,\n        \"name\": \"ImGuiButtonFlags_PressedOnClick\",\n        \"value\": \"1 << 4\"\n      },\n      {\n        \"calc_value\": 32,\n        \"name\": \"ImGuiButtonFlags_PressedOnClickRelease\",\n        \"value\": \"1 << 5\"\n      },\n      {\n        \"calc_value\": 64,\n        \"name\": \"ImGuiButtonFlags_PressedOnClickReleaseAnywhere\",\n        \"value\": \"1 << 6\"\n      },\n      {\n        \"calc_value\": 128,\n        \"name\": \"ImGuiButtonFlags_PressedOnRelease\",\n        \"value\": \"1 << 7\"\n      },\n      {\n        \"calc_value\": 256,\n        \"name\": \"ImGuiButtonFlags_PressedOnDoubleClick\",\n        \"value\": \"1 << 8\"\n      },\n      {\n        \"calc_value\": 512,\n        \"name\": \"ImGuiButtonFlags_PressedOnDragDropHold\",\n        \"value\": \"1 << 9\"\n      },\n      {\n        \"calc_value\": 2048,\n        \"name\": \"ImGuiButtonFlags_FlattenChildren\",\n        \"value\": \"1 << 11\"\n      },\n      {\n        \"calc_value\": 4096,\n        \"name\": \"ImGuiButtonFlags_AllowOverlap\",\n        \"value\": \"1 << 12\"\n      },\n      {\n        \"calc_value\": 32768,\n        \"name\": \"ImGuiButtonFlags_AlignTextBaseLine\",\n        \"value\": \"1 << 15\"\n      },\n      {\n        \"calc_value\": 65536,\n        \"name\": \"ImGuiButtonFlags_NoKeyModsAllowed\",\n        \"value\": \"1 << 16\"\n      },\n      {\n        \"calc_value\": 131072,\n        \"name\": \"ImGuiButtonFlags_NoHoldingActiveId\",\n        \"value\": \"1 << 17\"\n      },\n      {\n        \"calc_value\": 262144,\n        \"name\": \"ImGuiButtonFlags_NoNavFocus\",\n        \"value\": \"1 << 18\"\n      },\n      {\n        \"calc_value\": 524288,\n        \"name\": \"ImGuiButtonFlags_NoHoveredOnFocus\",\n        \"value\": \"1 << 19\"\n      },\n      {\n        \"calc_value\": 1048576,\n        \"name\": \"ImGuiButtonFlags_NoSetKeyOwner\",\n        \"value\": \"1 << 20\"\n      },\n      {\n        \"calc_value\": 2097152,\n        \"name\": \"ImGuiButtonFlags_NoTestKeyOwner\",\n        \"value\": \"1 << 21\"\n      },\n      {\n        \"calc_value\": 1008,\n        \"name\": \"ImGuiButtonFlags_PressedOnMask_\",\n        \"value\": \"ImGuiButtonFlags_PressedOnClick | ImGuiButtonFlags_PressedOnClickRelease | ImGuiButtonFlags_PressedOnClickReleaseAnywhere | ImGuiButtonFlags_PressedOnRelease | ImGuiButtonFlags_PressedOnDoubleClick | ImGuiButtonFlags_PressedOnDragDropHold\"\n      },\n      {\n        \"calc_value\": 32,\n        \"name\": \"ImGuiButtonFlags_PressedOnDefault_\",\n        \"value\": \"ImGuiButtonFlags_PressedOnClickRelease\"\n      }\n    ],\n    \"ImGuiButtonFlags_\": [\n      {\n        \"calc_value\": 0,\n        \"name\": \"ImGuiButtonFlags_None\",\n        \"value\": \"0\"\n      },\n      {\n        \"calc_value\": 1,\n        \"name\": \"ImGuiButtonFlags_MouseButtonLeft\",\n        \"value\": \"1 << 0\"\n      },\n      {\n        \"calc_value\": 2,\n        \"name\": \"ImGuiButtonFlags_MouseButtonRight\",\n        \"value\": \"1 << 1\"\n      },\n      {\n        \"calc_value\": 4,\n        \"name\": \"ImGuiButtonFlags_MouseButtonMiddle\",\n        \"value\": \"1 << 2\"\n      },\n      {\n        \"calc_value\": 7,\n        \"name\": \"ImGuiButtonFlags_MouseButtonMask_\",\n        \"value\": \"ImGuiButtonFlags_MouseButtonLeft | ImGuiButtonFlags_MouseButtonRight | ImGuiButtonFlags_MouseButtonMiddle\"\n      },\n      {\n        \"calc_value\": 8,\n        \"name\": \"ImGuiButtonFlags_EnableNav\",\n        \"value\": \"1 << 3\"\n      }\n    ],\n    \"ImGuiChildFlags_\": [\n      {\n        \"calc_value\": 0,\n        \"name\": \"ImGuiChildFlags_None\",\n        \"value\": \"0\"\n      },\n      {\n        \"calc_value\": 1,\n        \"name\": \"ImGuiChildFlags_Borders\",\n        \"value\": \"1 << 0\"\n      },\n      {\n        \"calc_value\": 2,\n        \"name\": \"ImGuiChildFlags_AlwaysUseWindowPadding\",\n        \"value\": \"1 << 1\"\n      },\n      {\n        \"calc_value\": 4,\n        \"name\": \"ImGuiChildFlags_ResizeX\",\n        \"value\": \"1 << 2\"\n      },\n      {\n        \"calc_value\": 8,\n        \"name\": \"ImGuiChildFlags_ResizeY\",\n        \"value\": \"1 << 3\"\n      },\n      {\n        \"calc_value\": 16,\n        \"name\": \"ImGuiChildFlags_AutoResizeX\",\n        \"value\": \"1 << 4\"\n      },\n      {\n        \"calc_value\": 32,\n        \"name\": \"ImGuiChildFlags_AutoResizeY\",\n        \"value\": \"1 << 5\"\n      },\n      {\n        \"calc_value\": 64,\n        \"name\": \"ImGuiChildFlags_AlwaysAutoResize\",\n        \"value\": \"1 << 6\"\n      },\n      {\n        \"calc_value\": 128,\n        \"name\": \"ImGuiChildFlags_FrameStyle\",\n        \"value\": \"1 << 7\"\n      },\n      {\n        \"calc_value\": 256,\n        \"name\": \"ImGuiChildFlags_NavFlattened\",\n        \"value\": \"1 << 8\"\n      }\n    ],\n    \"ImGuiCol_\": [\n      {\n        \"calc_value\": 0,\n        \"name\": \"ImGuiCol_Text\",\n        \"value\": \"0\"\n      },\n      {\n        \"calc_value\": 1,\n        \"name\": \"ImGuiCol_TextDisabled\",\n        \"value\": \"1\"\n      },\n      {\n        \"calc_value\": 2,\n        \"name\": \"ImGuiCol_WindowBg\",\n        \"value\": \"2\"\n      },\n      {\n        \"calc_value\": 3,\n        \"name\": \"ImGuiCol_ChildBg\",\n        \"value\": \"3\"\n      },\n      {\n        \"calc_value\": 4,\n        \"name\": \"ImGuiCol_PopupBg\",\n        \"value\": \"4\"\n      },\n      {\n        \"calc_value\": 5,\n        \"name\": \"ImGuiCol_Border\",\n        \"value\": \"5\"\n      },\n      {\n        \"calc_value\": 6,\n        \"name\": \"ImGuiCol_BorderShadow\",\n        \"value\": \"6\"\n      },\n      {\n        \"calc_value\": 7,\n        \"name\": \"ImGuiCol_FrameBg\",\n        \"value\": \"7\"\n      },\n      {\n        \"calc_value\": 8,\n        \"name\": \"ImGuiCol_FrameBgHovered\",\n        \"value\": \"8\"\n      },\n      {\n        \"calc_value\": 9,\n        \"name\": \"ImGuiCol_FrameBgActive\",\n        \"value\": \"9\"\n      },\n      {\n        \"calc_value\": 10,\n        \"name\": \"ImGuiCol_TitleBg\",\n        \"value\": \"10\"\n      },\n      {\n        \"calc_value\": 11,\n        \"name\": \"ImGuiCol_TitleBgActive\",\n        \"value\": \"11\"\n      },\n      {\n        \"calc_value\": 12,\n        \"name\": \"ImGuiCol_TitleBgCollapsed\",\n        \"value\": \"12\"\n      },\n      {\n        \"calc_value\": 13,\n        \"name\": \"ImGuiCol_MenuBarBg\",\n        \"value\": \"13\"\n      },\n      {\n        \"calc_value\": 14,\n        \"name\": \"ImGuiCol_ScrollbarBg\",\n        \"value\": \"14\"\n      },\n      {\n        \"calc_value\": 15,\n        \"name\": \"ImGuiCol_ScrollbarGrab\",\n        \"value\": \"15\"\n      },\n      {\n        \"calc_value\": 16,\n        \"name\": \"ImGuiCol_ScrollbarGrabHovered\",\n        \"value\": \"16\"\n      },\n      {\n        \"calc_value\": 17,\n        \"name\": \"ImGuiCol_ScrollbarGrabActive\",\n        \"value\": \"17\"\n      },\n      {\n        \"calc_value\": 18,\n        \"name\": \"ImGuiCol_CheckMark\",\n        \"value\": \"18\"\n      },\n      {\n        \"calc_value\": 19,\n        \"name\": \"ImGuiCol_SliderGrab\",\n        \"value\": \"19\"\n      },\n      {\n        \"calc_value\": 20,\n        \"name\": \"ImGuiCol_SliderGrabActive\",\n        \"value\": \"20\"\n      },\n      {\n        \"calc_value\": 21,\n        \"name\": \"ImGuiCol_Button\",\n        \"value\": \"21\"\n      },\n      {\n        \"calc_value\": 22,\n        \"name\": \"ImGuiCol_ButtonHovered\",\n        \"value\": \"22\"\n      },\n      {\n        \"calc_value\": 23,\n        \"name\": \"ImGuiCol_ButtonActive\",\n        \"value\": \"23\"\n      },\n      {\n        \"calc_value\": 24,\n        \"name\": \"ImGuiCol_Header\",\n        \"value\": \"24\"\n      },\n      {\n        \"calc_value\": 25,\n        \"name\": \"ImGuiCol_HeaderHovered\",\n        \"value\": \"25\"\n      },\n      {\n        \"calc_value\": 26,\n        \"name\": \"ImGuiCol_HeaderActive\",\n        \"value\": \"26\"\n      },\n      {\n        \"calc_value\": 27,\n        \"name\": \"ImGuiCol_Separator\",\n        \"value\": \"27\"\n      },\n      {\n        \"calc_value\": 28,\n        \"name\": \"ImGuiCol_SeparatorHovered\",\n        \"value\": \"28\"\n      },\n      {\n        \"calc_value\": 29,\n        \"name\": \"ImGuiCol_SeparatorActive\",\n        \"value\": \"29\"\n      },\n      {\n        \"calc_value\": 30,\n        \"name\": \"ImGuiCol_ResizeGrip\",\n        \"value\": \"30\"\n      },\n      {\n        \"calc_value\": 31,\n        \"name\": \"ImGuiCol_ResizeGripHovered\",\n        \"value\": \"31\"\n      },\n      {\n        \"calc_value\": 32,\n        \"name\": \"ImGuiCol_ResizeGripActive\",\n        \"value\": \"32\"\n      },\n      {\n        \"calc_value\": 33,\n        \"name\": \"ImGuiCol_TabHovered\",\n        \"value\": \"33\"\n      },\n      {\n        \"calc_value\": 34,\n        \"name\": \"ImGuiCol_Tab\",\n        \"value\": \"34\"\n      },\n      {\n        \"calc_value\": 35,\n        \"name\": \"ImGuiCol_TabSelected\",\n        \"value\": \"35\"\n      },\n      {\n        \"calc_value\": 36,\n        \"name\": \"ImGuiCol_TabSelectedOverline\",\n        \"value\": \"36\"\n      },\n      {\n        \"calc_value\": 37,\n        \"name\": \"ImGuiCol_TabDimmed\",\n        \"value\": \"37\"\n      },\n      {\n        \"calc_value\": 38,\n        \"name\": \"ImGuiCol_TabDimmedSelected\",\n        \"value\": \"38\"\n      },\n      {\n        \"calc_value\": 39,\n        \"name\": \"ImGuiCol_TabDimmedSelectedOverline\",\n        \"value\": \"39\"\n      },\n      {\n        \"calc_value\": 40,\n        \"name\": \"ImGuiCol_PlotLines\",\n        \"value\": \"40\"\n      },\n      {\n        \"calc_value\": 41,\n        \"name\": \"ImGuiCol_PlotLinesHovered\",\n        \"value\": \"41\"\n      },\n      {\n        \"calc_value\": 42,\n        \"name\": \"ImGuiCol_PlotHistogram\",\n        \"value\": \"42\"\n      },\n      {\n        \"calc_value\": 43,\n        \"name\": \"ImGuiCol_PlotHistogramHovered\",\n        \"value\": \"43\"\n      },\n      {\n        \"calc_value\": 44,\n        \"name\": \"ImGuiCol_TableHeaderBg\",\n        \"value\": \"44\"\n      },\n      {\n        \"calc_value\": 45,\n        \"name\": \"ImGuiCol_TableBorderStrong\",\n        \"value\": \"45\"\n      },\n      {\n        \"calc_value\": 46,\n        \"name\": \"ImGuiCol_TableBorderLight\",\n        \"value\": \"46\"\n      },\n      {\n        \"calc_value\": 47,\n        \"name\": \"ImGuiCol_TableRowBg\",\n        \"value\": \"47\"\n      },\n      {\n        \"calc_value\": 48,\n        \"name\": \"ImGuiCol_TableRowBgAlt\",\n        \"value\": \"48\"\n      },\n      {\n        \"calc_value\": 49,\n        \"name\": \"ImGuiCol_TextLink\",\n        \"value\": \"49\"\n      },\n      {\n        \"calc_value\": 50,\n        \"name\": \"ImGuiCol_TextSelectedBg\",\n        \"value\": \"50\"\n      },\n      {\n        \"calc_value\": 51,\n        \"name\": \"ImGuiCol_DragDropTarget\",\n        \"value\": \"51\"\n      },\n      {\n        \"calc_value\": 52,\n        \"name\": \"ImGuiCol_NavCursor\",\n        \"value\": \"52\"\n      },\n      {\n        \"calc_value\": 53,\n        \"name\": \"ImGuiCol_NavWindowingHighlight\",\n        \"value\": \"53\"\n      },\n      {\n        \"calc_value\": 54,\n        \"name\": \"ImGuiCol_NavWindowingDimBg\",\n        \"value\": \"54\"\n      },\n      {\n        \"calc_value\": 55,\n        \"name\": \"ImGuiCol_ModalWindowDimBg\",\n        \"value\": \"55\"\n      },\n      {\n        \"calc_value\": 56,\n        \"name\": \"ImGuiCol_COUNT\",\n        \"value\": \"56\"\n      }\n    ],\n    \"ImGuiColorEditFlags_\": [\n      {\n        \"calc_value\": 0,\n        \"name\": \"ImGuiColorEditFlags_None\",\n        \"value\": \"0\"\n      },\n      {\n        \"calc_value\": 2,\n        \"name\": \"ImGuiColorEditFlags_NoAlpha\",\n        \"value\": \"1 << 1\"\n      },\n      {\n        \"calc_value\": 4,\n        \"name\": \"ImGuiColorEditFlags_NoPicker\",\n        \"value\": \"1 << 2\"\n      },\n      {\n        \"calc_value\": 8,\n        \"name\": \"ImGuiColorEditFlags_NoOptions\",\n        \"value\": \"1 << 3\"\n      },\n      {\n        \"calc_value\": 16,\n        \"name\": \"ImGuiColorEditFlags_NoSmallPreview\",\n        \"value\": \"1 << 4\"\n      },\n      {\n        \"calc_value\": 32,\n        \"name\": \"ImGuiColorEditFlags_NoInputs\",\n        \"value\": \"1 << 5\"\n      },\n      {\n        \"calc_value\": 64,\n        \"name\": \"ImGuiColorEditFlags_NoTooltip\",\n        \"value\": \"1 << 6\"\n      },\n      {\n        \"calc_value\": 128,\n        \"name\": \"ImGuiColorEditFlags_NoLabel\",\n        \"value\": \"1 << 7\"\n      },\n      {\n        \"calc_value\": 256,\n        \"name\": \"ImGuiColorEditFlags_NoSidePreview\",\n        \"value\": \"1 << 8\"\n      },\n      {\n        \"calc_value\": 512,\n        \"name\": \"ImGuiColorEditFlags_NoDragDrop\",\n        \"value\": \"1 << 9\"\n      },\n      {\n        \"calc_value\": 1024,\n        \"name\": \"ImGuiColorEditFlags_NoBorder\",\n        \"value\": \"1 << 10\"\n      },\n      {\n        \"calc_value\": 65536,\n        \"name\": \"ImGuiColorEditFlags_AlphaBar\",\n        \"value\": \"1 << 16\"\n      },\n      {\n        \"calc_value\": 131072,\n        \"name\": \"ImGuiColorEditFlags_AlphaPreview\",\n        \"value\": \"1 << 17\"\n      },\n      {\n        \"calc_value\": 262144,\n        \"name\": \"ImGuiColorEditFlags_AlphaPreviewHalf\",\n        \"value\": \"1 << 18\"\n      },\n      {\n        \"calc_value\": 524288,\n        \"name\": \"ImGuiColorEditFlags_HDR\",\n        \"value\": \"1 << 19\"\n      },\n      {\n        \"calc_value\": 1048576,\n        \"name\": \"ImGuiColorEditFlags_DisplayRGB\",\n        \"value\": \"1 << 20\"\n      },\n      {\n        \"calc_value\": 2097152,\n        \"name\": \"ImGuiColorEditFlags_DisplayHSV\",\n        \"value\": \"1 << 21\"\n      },\n      {\n        \"calc_value\": 4194304,\n        \"name\": \"ImGuiColorEditFlags_DisplayHex\",\n        \"value\": \"1 << 22\"\n      },\n      {\n        \"calc_value\": 8388608,\n        \"name\": \"ImGuiColorEditFlags_Uint8\",\n        \"value\": \"1 << 23\"\n      },\n      {\n        \"calc_value\": 16777216,\n        \"name\": \"ImGuiColorEditFlags_Float\",\n        \"value\": \"1 << 24\"\n      },\n      {\n        \"calc_value\": 33554432,\n        \"name\": \"ImGuiColorEditFlags_PickerHueBar\",\n        \"value\": \"1 << 25\"\n      },\n      {\n        \"calc_value\": 67108864,\n        \"name\": \"ImGuiColorEditFlags_PickerHueWheel\",\n        \"value\": \"1 << 26\"\n      },\n      {\n        \"calc_value\": 134217728,\n        \"name\": \"ImGuiColorEditFlags_InputRGB\",\n        \"value\": \"1 << 27\"\n      },\n      {\n        \"calc_value\": 268435456,\n        \"name\": \"ImGuiColorEditFlags_InputHSV\",\n        \"value\": \"1 << 28\"\n      },\n      {\n        \"calc_value\": 177209344,\n        \"name\": \"ImGuiColorEditFlags_DefaultOptions_\",\n        \"value\": \"ImGuiColorEditFlags_Uint8 | ImGuiColorEditFlags_DisplayRGB | ImGuiColorEditFlags_InputRGB | ImGuiColorEditFlags_PickerHueBar\"\n      },\n      {\n        \"calc_value\": 7340032,\n        \"name\": \"ImGuiColorEditFlags_DisplayMask_\",\n        \"value\": \"ImGuiColorEditFlags_DisplayRGB | ImGuiColorEditFlags_DisplayHSV | ImGuiColorEditFlags_DisplayHex\"\n      },\n      {\n        \"calc_value\": 25165824,\n        \"name\": \"ImGuiColorEditFlags_DataTypeMask_\",\n        \"value\": \"ImGuiColorEditFlags_Uint8 | ImGuiColorEditFlags_Float\"\n      },\n      {\n        \"calc_value\": 100663296,\n        \"name\": \"ImGuiColorEditFlags_PickerMask_\",\n        \"value\": \"ImGuiColorEditFlags_PickerHueWheel | ImGuiColorEditFlags_PickerHueBar\"\n      },\n      {\n        \"calc_value\": 402653184,\n        \"name\": \"ImGuiColorEditFlags_InputMask_\",\n        \"value\": \"ImGuiColorEditFlags_InputRGB | ImGuiColorEditFlags_InputHSV\"\n      }\n    ],\n    \"ImGuiComboFlagsPrivate_\": [\n      {\n        \"calc_value\": 1048576,\n        \"name\": \"ImGuiComboFlags_CustomPreview\",\n        \"value\": \"1 << 20\"\n      }\n    ],\n    \"ImGuiComboFlags_\": [\n      {\n        \"calc_value\": 0,\n        \"name\": \"ImGuiComboFlags_None\",\n        \"value\": \"0\"\n      },\n      {\n        \"calc_value\": 1,\n        \"name\": \"ImGuiComboFlags_PopupAlignLeft\",\n        \"value\": \"1 << 0\"\n      },\n      {\n        \"calc_value\": 2,\n        \"name\": \"ImGuiComboFlags_HeightSmall\",\n        \"value\": \"1 << 1\"\n      },\n      {\n        \"calc_value\": 4,\n        \"name\": \"ImGuiComboFlags_HeightRegular\",\n        \"value\": \"1 << 2\"\n      },\n      {\n        \"calc_value\": 8,\n        \"name\": \"ImGuiComboFlags_HeightLarge\",\n        \"value\": \"1 << 3\"\n      },\n      {\n        \"calc_value\": 16,\n        \"name\": \"ImGuiComboFlags_HeightLargest\",\n        \"value\": \"1 << 4\"\n      },\n      {\n        \"calc_value\": 32,\n        \"name\": \"ImGuiComboFlags_NoArrowButton\",\n        \"value\": \"1 << 5\"\n      },\n      {\n        \"calc_value\": 64,\n        \"name\": \"ImGuiComboFlags_NoPreview\",\n        \"value\": \"1 << 6\"\n      },\n      {\n        \"calc_value\": 128,\n        \"name\": \"ImGuiComboFlags_WidthFitPreview\",\n        \"value\": \"1 << 7\"\n      },\n      {\n        \"calc_value\": 30,\n        \"name\": \"ImGuiComboFlags_HeightMask_\",\n        \"value\": \"ImGuiComboFlags_HeightSmall | ImGuiComboFlags_HeightRegular | ImGuiComboFlags_HeightLarge | ImGuiComboFlags_HeightLargest\"\n      }\n    ],\n    \"ImGuiCond_\": [\n      {\n        \"calc_value\": 0,\n        \"name\": \"ImGuiCond_None\",\n        \"value\": \"0\"\n      },\n      {\n        \"calc_value\": 1,\n        \"name\": \"ImGuiCond_Always\",\n        \"value\": \"1 << 0\"\n      },\n      {\n        \"calc_value\": 2,\n        \"name\": \"ImGuiCond_Once\",\n        \"value\": \"1 << 1\"\n      },\n      {\n        \"calc_value\": 4,\n        \"name\": \"ImGuiCond_FirstUseEver\",\n        \"value\": \"1 << 2\"\n      },\n      {\n        \"calc_value\": 8,\n        \"name\": \"ImGuiCond_Appearing\",\n        \"value\": \"1 << 3\"\n      }\n    ],\n    \"ImGuiConfigFlags_\": [\n      {\n        \"calc_value\": 0,\n        \"name\": \"ImGuiConfigFlags_None\",\n        \"value\": \"0\"\n      },\n      {\n        \"calc_value\": 1,\n        \"name\": \"ImGuiConfigFlags_NavEnableKeyboard\",\n        \"value\": \"1 << 0\"\n      },\n      {\n        \"calc_value\": 2,\n        \"name\": \"ImGuiConfigFlags_NavEnableGamepad\",\n        \"value\": \"1 << 1\"\n      },\n      {\n        \"calc_value\": 16,\n        \"name\": \"ImGuiConfigFlags_NoMouse\",\n        \"value\": \"1 << 4\"\n      },\n      {\n        \"calc_value\": 32,\n        \"name\": \"ImGuiConfigFlags_NoMouseCursorChange\",\n        \"value\": \"1 << 5\"\n      },\n      {\n        \"calc_value\": 64,\n        \"name\": \"ImGuiConfigFlags_NoKeyboard\",\n        \"value\": \"1 << 6\"\n      },\n      {\n        \"calc_value\": 1048576,\n        \"name\": \"ImGuiConfigFlags_IsSRGB\",\n        \"value\": \"1 << 20\"\n      },\n      {\n        \"calc_value\": 2097152,\n        \"name\": \"ImGuiConfigFlags_IsTouchScreen\",\n        \"value\": \"1 << 21\"\n      }\n    ],\n    \"ImGuiContextHookType\": [\n      {\n        \"calc_value\": 0,\n        \"name\": \"ImGuiContextHookType_NewFramePre\",\n        \"value\": \"0\"\n      },\n      {\n        \"calc_value\": 1,\n        \"name\": \"ImGuiContextHookType_NewFramePost\",\n        \"value\": \"1\"\n      },\n      {\n        \"calc_value\": 2,\n        \"name\": \"ImGuiContextHookType_EndFramePre\",\n        \"value\": \"2\"\n      },\n      {\n        \"calc_value\": 3,\n        \"name\": \"ImGuiContextHookType_EndFramePost\",\n        \"value\": \"3\"\n      },\n      {\n        \"calc_value\": 4,\n        \"name\": \"ImGuiContextHookType_RenderPre\",\n        \"value\": \"4\"\n      },\n      {\n        \"calc_value\": 5,\n        \"name\": \"ImGuiContextHookType_RenderPost\",\n        \"value\": \"5\"\n      },\n      {\n        \"calc_value\": 6,\n        \"name\": \"ImGuiContextHookType_Shutdown\",\n        \"value\": \"6\"\n      },\n      {\n        \"calc_value\": 7,\n        \"name\": \"ImGuiContextHookType_PendingRemoval_\",\n        \"value\": \"7\"\n      }\n    ],\n    \"ImGuiDataTypePrivate_\": [\n      {\n        \"calc_value\": 13,\n        \"name\": \"ImGuiDataType_Pointer\",\n        \"value\": \"ImGuiDataType_COUNT + 1\"\n      },\n      {\n        \"calc_value\": 14,\n        \"name\": \"ImGuiDataType_ID\",\n        \"value\": \"ImGuiDataType_COUNT + 1+1\"\n      }\n    ],\n    \"ImGuiDataType_\": [\n      {\n        \"calc_value\": 0,\n        \"name\": \"ImGuiDataType_S8\",\n        \"value\": \"0\"\n      },\n      {\n        \"calc_value\": 1,\n        \"name\": \"ImGuiDataType_U8\",\n        \"value\": \"1\"\n      },\n      {\n        \"calc_value\": 2,\n        \"name\": \"ImGuiDataType_S16\",\n        \"value\": \"2\"\n      },\n      {\n        \"calc_value\": 3,\n        \"name\": \"ImGuiDataType_U16\",\n        \"value\": \"3\"\n      },\n      {\n        \"calc_value\": 4,\n        \"name\": \"ImGuiDataType_S32\",\n        \"value\": \"4\"\n      },\n      {\n        \"calc_value\": 5,\n        \"name\": \"ImGuiDataType_U32\",\n        \"value\": \"5\"\n      },\n      {\n        \"calc_value\": 6,\n        \"name\": \"ImGuiDataType_S64\",\n        \"value\": \"6\"\n      },\n      {\n        \"calc_value\": 7,\n        \"name\": \"ImGuiDataType_U64\",\n        \"value\": \"7\"\n      },\n      {\n        \"calc_value\": 8,\n        \"name\": \"ImGuiDataType_Float\",\n        \"value\": \"8\"\n      },\n      {\n        \"calc_value\": 9,\n        \"name\": \"ImGuiDataType_Double\",\n        \"value\": \"9\"\n      },\n      {\n        \"calc_value\": 10,\n        \"name\": \"ImGuiDataType_Bool\",\n        \"value\": \"10\"\n      },\n      {\n        \"calc_value\": 11,\n        \"name\": \"ImGuiDataType_String\",\n        \"value\": \"11\"\n      },\n      {\n        \"calc_value\": 12,\n        \"name\": \"ImGuiDataType_COUNT\",\n        \"value\": \"12\"\n      }\n    ],\n    \"ImGuiDebugLogFlags_\": [\n      {\n        \"calc_value\": 0,\n        \"name\": \"ImGuiDebugLogFlags_None\",\n        \"value\": \"0\"\n      },\n      {\n        \"calc_value\": 1,\n        \"name\": \"ImGuiDebugLogFlags_EventError\",\n        \"value\": \"1 << 0\"\n      },\n      {\n        \"calc_value\": 2,\n        \"name\": \"ImGuiDebugLogFlags_EventActiveId\",\n        \"value\": \"1 << 1\"\n      },\n      {\n        \"calc_value\": 4,\n        \"name\": \"ImGuiDebugLogFlags_EventFocus\",\n        \"value\": \"1 << 2\"\n      },\n      {\n        \"calc_value\": 8,\n        \"name\": \"ImGuiDebugLogFlags_EventPopup\",\n        \"value\": \"1 << 3\"\n      },\n      {\n        \"calc_value\": 16,\n        \"name\": \"ImGuiDebugLogFlags_EventNav\",\n        \"value\": \"1 << 4\"\n      },\n      {\n        \"calc_value\": 32,\n        \"name\": \"ImGuiDebugLogFlags_EventClipper\",\n        \"value\": \"1 << 5\"\n      },\n      {\n        \"calc_value\": 64,\n        \"name\": \"ImGuiDebugLogFlags_EventSelection\",\n        \"value\": \"1 << 6\"\n      },\n      {\n        \"calc_value\": 128,\n        \"name\": \"ImGuiDebugLogFlags_EventIO\",\n        \"value\": \"1 << 7\"\n      },\n      {\n        \"calc_value\": 256,\n        \"name\": \"ImGuiDebugLogFlags_EventFont\",\n        \"value\": \"1 << 8\"\n      },\n      {\n        \"calc_value\": 512,\n        \"name\": \"ImGuiDebugLogFlags_EventInputRouting\",\n        \"value\": \"1 << 9\"\n      },\n      {\n        \"calc_value\": 1024,\n        \"name\": \"ImGuiDebugLogFlags_EventDocking\",\n        \"value\": \"1 << 10\"\n      },\n      {\n        \"calc_value\": 2048,\n        \"name\": \"ImGuiDebugLogFlags_EventViewport\",\n        \"value\": \"1 << 11\"\n      },\n      {\n        \"calc_value\": 4095,\n        \"name\": \"ImGuiDebugLogFlags_EventMask_\",\n        \"value\": \"ImGuiDebugLogFlags_EventError | ImGuiDebugLogFlags_EventActiveId | ImGuiDebugLogFlags_EventFocus | ImGuiDebugLogFlags_EventPopup | ImGuiDebugLogFlags_EventNav | ImGuiDebugLogFlags_EventClipper | ImGuiDebugLogFlags_EventSelection | ImGuiDebugLogFlags_EventIO | ImGuiDebugLogFlags_EventFont | ImGuiDebugLogFlags_EventInputRouting | ImGuiDebugLogFlags_EventDocking | ImGuiDebugLogFlags_EventViewport\"\n      },\n      {\n        \"calc_value\": 1048576,\n        \"name\": \"ImGuiDebugLogFlags_OutputToTTY\",\n        \"value\": \"1 << 20\"\n      },\n      {\n        \"calc_value\": 2097152,\n        \"name\": \"ImGuiDebugLogFlags_OutputToTestEngine\",\n        \"value\": \"1 << 21\"\n      }\n    ],\n    \"ImGuiDir\": [\n      {\n        \"calc_value\": -1,\n        \"name\": \"ImGuiDir_None\",\n        \"value\": \"-1\"\n      },\n      {\n        \"calc_value\": 0,\n        \"name\": \"ImGuiDir_Left\",\n        \"value\": \"0\"\n      },\n      {\n        \"calc_value\": 1,\n        \"name\": \"ImGuiDir_Right\",\n        \"value\": \"1\"\n      },\n      {\n        \"calc_value\": 2,\n        \"name\": \"ImGuiDir_Up\",\n        \"value\": \"2\"\n      },\n      {\n        \"calc_value\": 3,\n        \"name\": \"ImGuiDir_Down\",\n        \"value\": \"3\"\n      },\n      {\n        \"calc_value\": 4,\n        \"name\": \"ImGuiDir_COUNT\",\n        \"value\": \"4\"\n      }\n    ],\n    \"ImGuiDragDropFlags_\": [\n      {\n        \"calc_value\": 0,\n        \"name\": \"ImGuiDragDropFlags_None\",\n        \"value\": \"0\"\n      },\n      {\n        \"calc_value\": 1,\n        \"name\": \"ImGuiDragDropFlags_SourceNoPreviewTooltip\",\n        \"value\": \"1 << 0\"\n      },\n      {\n        \"calc_value\": 2,\n        \"name\": \"ImGuiDragDropFlags_SourceNoDisableHover\",\n        \"value\": \"1 << 1\"\n      },\n      {\n        \"calc_value\": 4,\n        \"name\": \"ImGuiDragDropFlags_SourceNoHoldToOpenOthers\",\n        \"value\": \"1 << 2\"\n      },\n      {\n        \"calc_value\": 8,\n        \"name\": \"ImGuiDragDropFlags_SourceAllowNullID\",\n        \"value\": \"1 << 3\"\n      },\n      {\n        \"calc_value\": 16,\n        \"name\": \"ImGuiDragDropFlags_SourceExtern\",\n        \"value\": \"1 << 4\"\n      },\n      {\n        \"calc_value\": 32,\n        \"name\": \"ImGuiDragDropFlags_PayloadAutoExpire\",\n        \"value\": \"1 << 5\"\n      },\n      {\n        \"calc_value\": 64,\n        \"name\": \"ImGuiDragDropFlags_PayloadNoCrossContext\",\n        \"value\": \"1 << 6\"\n      },\n      {\n        \"calc_value\": 128,\n        \"name\": \"ImGuiDragDropFlags_PayloadNoCrossProcess\",\n        \"value\": \"1 << 7\"\n      },\n      {\n        \"calc_value\": 1024,\n        \"name\": \"ImGuiDragDropFlags_AcceptBeforeDelivery\",\n        \"value\": \"1 << 10\"\n      },\n      {\n        \"calc_value\": 2048,\n        \"name\": \"ImGuiDragDropFlags_AcceptNoDrawDefaultRect\",\n        \"value\": \"1 << 11\"\n      },\n      {\n        \"calc_value\": 4096,\n        \"name\": \"ImGuiDragDropFlags_AcceptNoPreviewTooltip\",\n        \"value\": \"1 << 12\"\n      },\n      {\n        \"calc_value\": 3072,\n        \"name\": \"ImGuiDragDropFlags_AcceptPeekOnly\",\n        \"value\": \"ImGuiDragDropFlags_AcceptBeforeDelivery | ImGuiDragDropFlags_AcceptNoDrawDefaultRect\"\n      }\n    ],\n    \"ImGuiFocusRequestFlags_\": [\n      {\n        \"calc_value\": 0,\n        \"name\": \"ImGuiFocusRequestFlags_None\",\n        \"value\": \"0\"\n      },\n      {\n        \"calc_value\": 1,\n        \"name\": \"ImGuiFocusRequestFlags_RestoreFocusedChild\",\n        \"value\": \"1 << 0\"\n      },\n      {\n        \"calc_value\": 2,\n        \"name\": \"ImGuiFocusRequestFlags_UnlessBelowModal\",\n        \"value\": \"1 << 1\"\n      }\n    ],\n    \"ImGuiFocusedFlags_\": [\n      {\n        \"calc_value\": 0,\n        \"name\": \"ImGuiFocusedFlags_None\",\n        \"value\": \"0\"\n      },\n      {\n        \"calc_value\": 1,\n        \"name\": \"ImGuiFocusedFlags_ChildWindows\",\n        \"value\": \"1 << 0\"\n      },\n      {\n        \"calc_value\": 2,\n        \"name\": \"ImGuiFocusedFlags_RootWindow\",\n        \"value\": \"1 << 1\"\n      },\n      {\n        \"calc_value\": 4,\n        \"name\": \"ImGuiFocusedFlags_AnyWindow\",\n        \"value\": \"1 << 2\"\n      },\n      {\n        \"calc_value\": 8,\n        \"name\": \"ImGuiFocusedFlags_NoPopupHierarchy\",\n        \"value\": \"1 << 3\"\n      },\n      {\n        \"calc_value\": 3,\n        \"name\": \"ImGuiFocusedFlags_RootAndChildWindows\",\n        \"value\": \"ImGuiFocusedFlags_RootWindow | ImGuiFocusedFlags_ChildWindows\"\n      }\n    ],\n    \"ImGuiFreeTypeBuilderFlags\": [\n      {\n        \"calc_value\": 1,\n        \"name\": \"ImGuiFreeTypeBuilderFlags_NoHinting\",\n        \"value\": \"1 << 0\"\n      },\n      {\n        \"calc_value\": 2,\n        \"name\": \"ImGuiFreeTypeBuilderFlags_NoAutoHint\",\n        \"value\": \"1 << 1\"\n      },\n      {\n        \"calc_value\": 4,\n        \"name\": \"ImGuiFreeTypeBuilderFlags_ForceAutoHint\",\n        \"value\": \"1 << 2\"\n      },\n      {\n        \"calc_value\": 8,\n        \"name\": \"ImGuiFreeTypeBuilderFlags_LightHinting\",\n        \"value\": \"1 << 3\"\n      },\n      {\n        \"calc_value\": 16,\n        \"name\": \"ImGuiFreeTypeBuilderFlags_MonoHinting\",\n        \"value\": \"1 << 4\"\n      },\n      {\n        \"calc_value\": 32,\n        \"name\": \"ImGuiFreeTypeBuilderFlags_Bold\",\n        \"value\": \"1 << 5\"\n      },\n      {\n        \"calc_value\": 64,\n        \"name\": \"ImGuiFreeTypeBuilderFlags_Oblique\",\n        \"value\": \"1 << 6\"\n      },\n      {\n        \"calc_value\": 128,\n        \"name\": \"ImGuiFreeTypeBuilderFlags_Monochrome\",\n        \"value\": \"1 << 7\"\n      },\n      {\n        \"calc_value\": 256,\n        \"name\": \"ImGuiFreeTypeBuilderFlags_LoadColor\",\n        \"value\": \"1 << 8\"\n      },\n      {\n        \"calc_value\": 512,\n        \"name\": \"ImGuiFreeTypeBuilderFlags_Bitmap\",\n        \"value\": \"1 << 9\"\n      }\n    ],\n    \"ImGuiHoveredFlagsPrivate_\": [\n      {\n        \"calc_value\": 245760,\n        \"name\": \"ImGuiHoveredFlags_DelayMask_\",\n        \"value\": \"ImGuiHoveredFlags_DelayNone | ImGuiHoveredFlags_DelayShort | ImGuiHoveredFlags_DelayNormal | ImGuiHoveredFlags_NoSharedDelay\"\n      },\n      {\n        \"calc_value\": 12463,\n        \"name\": \"ImGuiHoveredFlags_AllowedMaskForIsWindowHovered\",\n        \"value\": \"ImGuiHoveredFlags_ChildWindows | ImGuiHoveredFlags_RootWindow | ImGuiHoveredFlags_AnyWindow | ImGuiHoveredFlags_NoPopupHierarchy | ImGuiHoveredFlags_AllowWhenBlockedByPopup | ImGuiHoveredFlags_AllowWhenBlockedByActiveItem | ImGuiHoveredFlags_ForTooltip | ImGuiHoveredFlags_Stationary\"\n      },\n      {\n        \"calc_value\": 262048,\n        \"name\": \"ImGuiHoveredFlags_AllowedMaskForIsItemHovered\",\n        \"value\": \"ImGuiHoveredFlags_AllowWhenBlockedByPopup | ImGuiHoveredFlags_AllowWhenBlockedByActiveItem | ImGuiHoveredFlags_AllowWhenOverlapped | ImGuiHoveredFlags_AllowWhenDisabled | ImGuiHoveredFlags_NoNavOverride | ImGuiHoveredFlags_ForTooltip | ImGuiHoveredFlags_Stationary | ImGuiHoveredFlags_DelayMask_\"\n      }\n    ],\n    \"ImGuiHoveredFlags_\": [\n      {\n        \"calc_value\": 0,\n        \"name\": \"ImGuiHoveredFlags_None\",\n        \"value\": \"0\"\n      },\n      {\n        \"calc_value\": 1,\n        \"name\": \"ImGuiHoveredFlags_ChildWindows\",\n        \"value\": \"1 << 0\"\n      },\n      {\n        \"calc_value\": 2,\n        \"name\": \"ImGuiHoveredFlags_RootWindow\",\n        \"value\": \"1 << 1\"\n      },\n      {\n        \"calc_value\": 4,\n        \"name\": \"ImGuiHoveredFlags_AnyWindow\",\n        \"value\": \"1 << 2\"\n      },\n      {\n        \"calc_value\": 8,\n        \"name\": \"ImGuiHoveredFlags_NoPopupHierarchy\",\n        \"value\": \"1 << 3\"\n      },\n      {\n        \"calc_value\": 32,\n        \"name\": \"ImGuiHoveredFlags_AllowWhenBlockedByPopup\",\n        \"value\": \"1 << 5\"\n      },\n      {\n        \"calc_value\": 128,\n        \"name\": \"ImGuiHoveredFlags_AllowWhenBlockedByActiveItem\",\n        \"value\": \"1 << 7\"\n      },\n      {\n        \"calc_value\": 256,\n        \"name\": \"ImGuiHoveredFlags_AllowWhenOverlappedByItem\",\n        \"value\": \"1 << 8\"\n      },\n      {\n        \"calc_value\": 512,\n        \"name\": \"ImGuiHoveredFlags_AllowWhenOverlappedByWindow\",\n        \"value\": \"1 << 9\"\n      },\n      {\n        \"calc_value\": 1024,\n        \"name\": \"ImGuiHoveredFlags_AllowWhenDisabled\",\n        \"value\": \"1 << 10\"\n      },\n      {\n        \"calc_value\": 2048,\n        \"name\": \"ImGuiHoveredFlags_NoNavOverride\",\n        \"value\": \"1 << 11\"\n      },\n      {\n        \"calc_value\": 768,\n        \"name\": \"ImGuiHoveredFlags_AllowWhenOverlapped\",\n        \"value\": \"ImGuiHoveredFlags_AllowWhenOverlappedByItem | ImGuiHoveredFlags_AllowWhenOverlappedByWindow\"\n      },\n      {\n        \"calc_value\": 928,\n        \"name\": \"ImGuiHoveredFlags_RectOnly\",\n        \"value\": \"ImGuiHoveredFlags_AllowWhenBlockedByPopup | ImGuiHoveredFlags_AllowWhenBlockedByActiveItem | ImGuiHoveredFlags_AllowWhenOverlapped\"\n      },\n      {\n        \"calc_value\": 3,\n        \"name\": \"ImGuiHoveredFlags_RootAndChildWindows\",\n        \"value\": \"ImGuiHoveredFlags_RootWindow | ImGuiHoveredFlags_ChildWindows\"\n      },\n      {\n        \"calc_value\": 4096,\n        \"name\": \"ImGuiHoveredFlags_ForTooltip\",\n        \"value\": \"1 << 12\"\n      },\n      {\n        \"calc_value\": 8192,\n        \"name\": \"ImGuiHoveredFlags_Stationary\",\n        \"value\": \"1 << 13\"\n      },\n      {\n        \"calc_value\": 16384,\n        \"name\": \"ImGuiHoveredFlags_DelayNone\",\n        \"value\": \"1 << 14\"\n      },\n      {\n        \"calc_value\": 32768,\n        \"name\": \"ImGuiHoveredFlags_DelayShort\",\n        \"value\": \"1 << 15\"\n      },\n      {\n        \"calc_value\": 65536,\n        \"name\": \"ImGuiHoveredFlags_DelayNormal\",\n        \"value\": \"1 << 16\"\n      },\n      {\n        \"calc_value\": 131072,\n        \"name\": \"ImGuiHoveredFlags_NoSharedDelay\",\n        \"value\": \"1 << 17\"\n      }\n    ],\n    \"ImGuiInputEventType\": [\n      {\n        \"calc_value\": 0,\n        \"name\": \"ImGuiInputEventType_None\",\n        \"value\": \"0\"\n      },\n      {\n        \"calc_value\": 1,\n        \"name\": \"ImGuiInputEventType_MousePos\",\n        \"value\": \"1\"\n      },\n      {\n        \"calc_value\": 2,\n        \"name\": \"ImGuiInputEventType_MouseWheel\",\n        \"value\": \"2\"\n      },\n      {\n        \"calc_value\": 3,\n        \"name\": \"ImGuiInputEventType_MouseButton\",\n        \"value\": \"3\"\n      },\n      {\n        \"calc_value\": 4,\n        \"name\": \"ImGuiInputEventType_Key\",\n        \"value\": \"4\"\n      },\n      {\n        \"calc_value\": 5,\n        \"name\": \"ImGuiInputEventType_Text\",\n        \"value\": \"5\"\n      },\n      {\n        \"calc_value\": 6,\n        \"name\": \"ImGuiInputEventType_Focus\",\n        \"value\": \"6\"\n      },\n      {\n        \"calc_value\": 7,\n        \"name\": \"ImGuiInputEventType_COUNT\",\n        \"value\": \"7\"\n      }\n    ],\n    \"ImGuiInputFlagsPrivate_\": [\n      {\n        \"calc_value\": 2,\n        \"name\": \"ImGuiInputFlags_RepeatRateDefault\",\n        \"value\": \"1 << 1\"\n      },\n      {\n        \"calc_value\": 4,\n        \"name\": \"ImGuiInputFlags_RepeatRateNavMove\",\n        \"value\": \"1 << 2\"\n      },\n      {\n        \"calc_value\": 8,\n        \"name\": \"ImGuiInputFlags_RepeatRateNavTweak\",\n        \"value\": \"1 << 3\"\n      },\n      {\n        \"calc_value\": 16,\n        \"name\": \"ImGuiInputFlags_RepeatUntilRelease\",\n        \"value\": \"1 << 4\"\n      },\n      {\n        \"calc_value\": 32,\n        \"name\": \"ImGuiInputFlags_RepeatUntilKeyModsChange\",\n        \"value\": \"1 << 5\"\n      },\n      {\n        \"calc_value\": 64,\n        \"name\": \"ImGuiInputFlags_RepeatUntilKeyModsChangeFromNone\",\n        \"value\": \"1 << 6\"\n      },\n      {\n        \"calc_value\": 128,\n        \"name\": \"ImGuiInputFlags_RepeatUntilOtherKeyPress\",\n        \"value\": \"1 << 7\"\n      },\n      {\n        \"calc_value\": 1048576,\n        \"name\": \"ImGuiInputFlags_LockThisFrame\",\n        \"value\": \"1 << 20\"\n      },\n      {\n        \"calc_value\": 2097152,\n        \"name\": \"ImGuiInputFlags_LockUntilRelease\",\n        \"value\": \"1 << 21\"\n      },\n      {\n        \"calc_value\": 4194304,\n        \"name\": \"ImGuiInputFlags_CondHovered\",\n        \"value\": \"1 << 22\"\n      },\n      {\n        \"calc_value\": 8388608,\n        \"name\": \"ImGuiInputFlags_CondActive\",\n        \"value\": \"1 << 23\"\n      },\n      {\n        \"calc_value\": 12582912,\n        \"name\": \"ImGuiInputFlags_CondDefault_\",\n        \"value\": \"ImGuiInputFlags_CondHovered | ImGuiInputFlags_CondActive\"\n      },\n      {\n        \"calc_value\": 14,\n        \"name\": \"ImGuiInputFlags_RepeatRateMask_\",\n        \"value\": \"ImGuiInputFlags_RepeatRateDefault | ImGuiInputFlags_RepeatRateNavMove | ImGuiInputFlags_RepeatRateNavTweak\"\n      },\n      {\n        \"calc_value\": 240,\n        \"name\": \"ImGuiInputFlags_RepeatUntilMask_\",\n        \"value\": \"ImGuiInputFlags_RepeatUntilRelease | ImGuiInputFlags_RepeatUntilKeyModsChange | ImGuiInputFlags_RepeatUntilKeyModsChangeFromNone | ImGuiInputFlags_RepeatUntilOtherKeyPress\"\n      },\n      {\n        \"calc_value\": 255,\n        \"name\": \"ImGuiInputFlags_RepeatMask_\",\n        \"value\": \"ImGuiInputFlags_Repeat | ImGuiInputFlags_RepeatRateMask_ | ImGuiInputFlags_RepeatUntilMask_\"\n      },\n      {\n        \"calc_value\": 12582912,\n        \"name\": \"ImGuiInputFlags_CondMask_\",\n        \"value\": \"ImGuiInputFlags_CondHovered | ImGuiInputFlags_CondActive\"\n      },\n      {\n        \"calc_value\": 15360,\n        \"name\": \"ImGuiInputFlags_RouteTypeMask_\",\n        \"value\": \"ImGuiInputFlags_RouteActive | ImGuiInputFlags_RouteFocused | ImGuiInputFlags_RouteGlobal | ImGuiInputFlags_RouteAlways\"\n      },\n      {\n        \"calc_value\": 245760,\n        \"name\": \"ImGuiInputFlags_RouteOptionsMask_\",\n        \"value\": \"ImGuiInputFlags_RouteOverFocused | ImGuiInputFlags_RouteOverActive | ImGuiInputFlags_RouteUnlessBgFocused | ImGuiInputFlags_RouteFromRootWindow\"\n      },\n      {\n        \"calc_value\": 255,\n        \"name\": \"ImGuiInputFlags_SupportedByIsKeyPressed\",\n        \"value\": \"ImGuiInputFlags_RepeatMask_\"\n      },\n      {\n        \"calc_value\": 1,\n        \"name\": \"ImGuiInputFlags_SupportedByIsMouseClicked\",\n        \"value\": \"ImGuiInputFlags_Repeat\"\n      },\n      {\n        \"calc_value\": 261375,\n        \"name\": \"ImGuiInputFlags_SupportedByShortcut\",\n        \"value\": \"ImGuiInputFlags_RepeatMask_ | ImGuiInputFlags_RouteTypeMask_ | ImGuiInputFlags_RouteOptionsMask_\"\n      },\n      {\n        \"calc_value\": 523519,\n        \"name\": \"ImGuiInputFlags_SupportedBySetNextItemShortcut\",\n        \"value\": \"ImGuiInputFlags_RepeatMask_ | ImGuiInputFlags_RouteTypeMask_ | ImGuiInputFlags_RouteOptionsMask_ | ImGuiInputFlags_Tooltip\"\n      },\n      {\n        \"calc_value\": 3145728,\n        \"name\": \"ImGuiInputFlags_SupportedBySetKeyOwner\",\n        \"value\": \"ImGuiInputFlags_LockThisFrame | ImGuiInputFlags_LockUntilRelease\"\n      },\n      {\n        \"calc_value\": 15728640,\n        \"name\": \"ImGuiInputFlags_SupportedBySetItemKeyOwner\",\n        \"value\": \"ImGuiInputFlags_SupportedBySetKeyOwner | ImGuiInputFlags_CondMask_\"\n      }\n    ],\n    \"ImGuiInputFlags_\": [\n      {\n        \"calc_value\": 0,\n        \"name\": \"ImGuiInputFlags_None\",\n        \"value\": \"0\"\n      },\n      {\n        \"calc_value\": 1,\n        \"name\": \"ImGuiInputFlags_Repeat\",\n        \"value\": \"1 << 0\"\n      },\n      {\n        \"calc_value\": 1024,\n        \"name\": \"ImGuiInputFlags_RouteActive\",\n        \"value\": \"1 << 10\"\n      },\n      {\n        \"calc_value\": 2048,\n        \"name\": \"ImGuiInputFlags_RouteFocused\",\n        \"value\": \"1 << 11\"\n      },\n      {\n        \"calc_value\": 4096,\n        \"name\": \"ImGuiInputFlags_RouteGlobal\",\n        \"value\": \"1 << 12\"\n      },\n      {\n        \"calc_value\": 8192,\n        \"name\": \"ImGuiInputFlags_RouteAlways\",\n        \"value\": \"1 << 13\"\n      },\n      {\n        \"calc_value\": 16384,\n        \"name\": \"ImGuiInputFlags_RouteOverFocused\",\n        \"value\": \"1 << 14\"\n      },\n      {\n        \"calc_value\": 32768,\n        \"name\": \"ImGuiInputFlags_RouteOverActive\",\n        \"value\": \"1 << 15\"\n      },\n      {\n        \"calc_value\": 65536,\n        \"name\": \"ImGuiInputFlags_RouteUnlessBgFocused\",\n        \"value\": \"1 << 16\"\n      },\n      {\n        \"calc_value\": 131072,\n        \"name\": \"ImGuiInputFlags_RouteFromRootWindow\",\n        \"value\": \"1 << 17\"\n      },\n      {\n        \"calc_value\": 262144,\n        \"name\": \"ImGuiInputFlags_Tooltip\",\n        \"value\": \"1 << 18\"\n      }\n    ],\n    \"ImGuiInputSource\": [\n      {\n        \"calc_value\": 0,\n        \"name\": \"ImGuiInputSource_None\",\n        \"value\": \"0\"\n      },\n      {\n        \"calc_value\": 1,\n        \"name\": \"ImGuiInputSource_Mouse\",\n        \"value\": \"1\"\n      },\n      {\n        \"calc_value\": 2,\n        \"name\": \"ImGuiInputSource_Keyboard\",\n        \"value\": \"2\"\n      },\n      {\n        \"calc_value\": 3,\n        \"name\": \"ImGuiInputSource_Gamepad\",\n        \"value\": \"3\"\n      },\n      {\n        \"calc_value\": 4,\n        \"name\": \"ImGuiInputSource_COUNT\",\n        \"value\": \"4\"\n      }\n    ],\n    \"ImGuiInputTextFlagsPrivate_\": [\n      {\n        \"calc_value\": 67108864,\n        \"name\": \"ImGuiInputTextFlags_Multiline\",\n        \"value\": \"1 << 26\"\n      },\n      {\n        \"calc_value\": 134217728,\n        \"name\": \"ImGuiInputTextFlags_MergedItem\",\n        \"value\": \"1 << 27\"\n      },\n      {\n        \"calc_value\": 268435456,\n        \"name\": \"ImGuiInputTextFlags_LocalizeDecimalPoint\",\n        \"value\": \"1 << 28\"\n      }\n    ],\n    \"ImGuiInputTextFlags_\": [\n      {\n        \"calc_value\": 0,\n        \"name\": \"ImGuiInputTextFlags_None\",\n        \"value\": \"0\"\n      },\n      {\n        \"calc_value\": 1,\n        \"name\": \"ImGuiInputTextFlags_CharsDecimal\",\n        \"value\": \"1 << 0\"\n      },\n      {\n        \"calc_value\": 2,\n        \"name\": \"ImGuiInputTextFlags_CharsHexadecimal\",\n        \"value\": \"1 << 1\"\n      },\n      {\n        \"calc_value\": 4,\n        \"name\": \"ImGuiInputTextFlags_CharsScientific\",\n        \"value\": \"1 << 2\"\n      },\n      {\n        \"calc_value\": 8,\n        \"name\": \"ImGuiInputTextFlags_CharsUppercase\",\n        \"value\": \"1 << 3\"\n      },\n      {\n        \"calc_value\": 16,\n        \"name\": \"ImGuiInputTextFlags_CharsNoBlank\",\n        \"value\": \"1 << 4\"\n      },\n      {\n        \"calc_value\": 32,\n        \"name\": \"ImGuiInputTextFlags_AllowTabInput\",\n        \"value\": \"1 << 5\"\n      },\n      {\n        \"calc_value\": 64,\n        \"name\": \"ImGuiInputTextFlags_EnterReturnsTrue\",\n        \"value\": \"1 << 6\"\n      },\n      {\n        \"calc_value\": 128,\n        \"name\": \"ImGuiInputTextFlags_EscapeClearsAll\",\n        \"value\": \"1 << 7\"\n      },\n      {\n        \"calc_value\": 256,\n        \"name\": \"ImGuiInputTextFlags_CtrlEnterForNewLine\",\n        \"value\": \"1 << 8\"\n      },\n      {\n        \"calc_value\": 512,\n        \"name\": \"ImGuiInputTextFlags_ReadOnly\",\n        \"value\": \"1 << 9\"\n      },\n      {\n        \"calc_value\": 1024,\n        \"name\": \"ImGuiInputTextFlags_Password\",\n        \"value\": \"1 << 10\"\n      },\n      {\n        \"calc_value\": 2048,\n        \"name\": \"ImGuiInputTextFlags_AlwaysOverwrite\",\n        \"value\": \"1 << 11\"\n      },\n      {\n        \"calc_value\": 4096,\n        \"name\": \"ImGuiInputTextFlags_AutoSelectAll\",\n        \"value\": \"1 << 12\"\n      },\n      {\n        \"calc_value\": 8192,\n        \"name\": \"ImGuiInputTextFlags_ParseEmptyRefVal\",\n        \"value\": \"1 << 13\"\n      },\n      {\n        \"calc_value\": 16384,\n        \"name\": \"ImGuiInputTextFlags_DisplayEmptyRefVal\",\n        \"value\": \"1 << 14\"\n      },\n      {\n        \"calc_value\": 32768,\n        \"name\": \"ImGuiInputTextFlags_NoHorizontalScroll\",\n        \"value\": \"1 << 15\"\n      },\n      {\n        \"calc_value\": 65536,\n        \"name\": \"ImGuiInputTextFlags_NoUndoRedo\",\n        \"value\": \"1 << 16\"\n      },\n      {\n        \"calc_value\": 131072,\n        \"name\": \"ImGuiInputTextFlags_ElideLeft\",\n        \"value\": \"1 << 17\"\n      },\n      {\n        \"calc_value\": 262144,\n        \"name\": \"ImGuiInputTextFlags_CallbackCompletion\",\n        \"value\": \"1 << 18\"\n      },\n      {\n        \"calc_value\": 524288,\n        \"name\": \"ImGuiInputTextFlags_CallbackHistory\",\n        \"value\": \"1 << 19\"\n      },\n      {\n        \"calc_value\": 1048576,\n        \"name\": \"ImGuiInputTextFlags_CallbackAlways\",\n        \"value\": \"1 << 20\"\n      },\n      {\n        \"calc_value\": 2097152,\n        \"name\": \"ImGuiInputTextFlags_CallbackCharFilter\",\n        \"value\": \"1 << 21\"\n      },\n      {\n        \"calc_value\": 4194304,\n        \"name\": \"ImGuiInputTextFlags_CallbackResize\",\n        \"value\": \"1 << 22\"\n      },\n      {\n        \"calc_value\": 8388608,\n        \"name\": \"ImGuiInputTextFlags_CallbackEdit\",\n        \"value\": \"1 << 23\"\n      }\n    ],\n    \"ImGuiItemFlagsPrivate_\": [\n      {\n        \"calc_value\": 1024,\n        \"name\": \"ImGuiItemFlags_Disabled\",\n        \"value\": \"1 << 10\"\n      },\n      {\n        \"calc_value\": 2048,\n        \"name\": \"ImGuiItemFlags_ReadOnly\",\n        \"value\": \"1 << 11\"\n      },\n      {\n        \"calc_value\": 4096,\n        \"name\": \"ImGuiItemFlags_MixedValue\",\n        \"value\": \"1 << 12\"\n      },\n      {\n        \"calc_value\": 8192,\n        \"name\": \"ImGuiItemFlags_NoWindowHoverableCheck\",\n        \"value\": \"1 << 13\"\n      },\n      {\n        \"calc_value\": 16384,\n        \"name\": \"ImGuiItemFlags_AllowOverlap\",\n        \"value\": \"1 << 14\"\n      },\n      {\n        \"calc_value\": 32768,\n        \"name\": \"ImGuiItemFlags_NoNavDisableMouseHover\",\n        \"value\": \"1 << 15\"\n      },\n      {\n        \"calc_value\": 65536,\n        \"name\": \"ImGuiItemFlags_NoMarkEdited\",\n        \"value\": \"1 << 16\"\n      },\n      {\n        \"calc_value\": 1048576,\n        \"name\": \"ImGuiItemFlags_Inputable\",\n        \"value\": \"1 << 20\"\n      },\n      {\n        \"calc_value\": 2097152,\n        \"name\": \"ImGuiItemFlags_HasSelectionUserData\",\n        \"value\": \"1 << 21\"\n      },\n      {\n        \"calc_value\": 4194304,\n        \"name\": \"ImGuiItemFlags_IsMultiSelect\",\n        \"value\": \"1 << 22\"\n      },\n      {\n        \"calc_value\": 16,\n        \"name\": \"ImGuiItemFlags_Default_\",\n        \"value\": \"ImGuiItemFlags_AutoClosePopups\"\n      }\n    ],\n    \"ImGuiItemFlags_\": [\n      {\n        \"calc_value\": 0,\n        \"name\": \"ImGuiItemFlags_None\",\n        \"value\": \"0\"\n      },\n      {\n        \"calc_value\": 1,\n        \"name\": \"ImGuiItemFlags_NoTabStop\",\n        \"value\": \"1 << 0\"\n      },\n      {\n        \"calc_value\": 2,\n        \"name\": \"ImGuiItemFlags_NoNav\",\n        \"value\": \"1 << 1\"\n      },\n      {\n        \"calc_value\": 4,\n        \"name\": \"ImGuiItemFlags_NoNavDefaultFocus\",\n        \"value\": \"1 << 2\"\n      },\n      {\n        \"calc_value\": 8,\n        \"name\": \"ImGuiItemFlags_ButtonRepeat\",\n        \"value\": \"1 << 3\"\n      },\n      {\n        \"calc_value\": 16,\n        \"name\": \"ImGuiItemFlags_AutoClosePopups\",\n        \"value\": \"1 << 4\"\n      },\n      {\n        \"calc_value\": 32,\n        \"name\": \"ImGuiItemFlags_AllowDuplicateId\",\n        \"value\": \"1 << 5\"\n      }\n    ],\n    \"ImGuiItemStatusFlags_\": [\n      {\n        \"calc_value\": 0,\n        \"name\": \"ImGuiItemStatusFlags_None\",\n        \"value\": \"0\"\n      },\n      {\n        \"calc_value\": 1,\n        \"name\": \"ImGuiItemStatusFlags_HoveredRect\",\n        \"value\": \"1 << 0\"\n      },\n      {\n        \"calc_value\": 2,\n        \"name\": \"ImGuiItemStatusFlags_HasDisplayRect\",\n        \"value\": \"1 << 1\"\n      },\n      {\n        \"calc_value\": 4,\n        \"name\": \"ImGuiItemStatusFlags_Edited\",\n        \"value\": \"1 << 2\"\n      },\n      {\n        \"calc_value\": 8,\n        \"name\": \"ImGuiItemStatusFlags_ToggledSelection\",\n        \"value\": \"1 << 3\"\n      },\n      {\n        \"calc_value\": 16,\n        \"name\": \"ImGuiItemStatusFlags_ToggledOpen\",\n        \"value\": \"1 << 4\"\n      },\n      {\n        \"calc_value\": 32,\n        \"name\": \"ImGuiItemStatusFlags_HasDeactivated\",\n        \"value\": \"1 << 5\"\n      },\n      {\n        \"calc_value\": 64,\n        \"name\": \"ImGuiItemStatusFlags_Deactivated\",\n        \"value\": \"1 << 6\"\n      },\n      {\n        \"calc_value\": 128,\n        \"name\": \"ImGuiItemStatusFlags_HoveredWindow\",\n        \"value\": \"1 << 7\"\n      },\n      {\n        \"calc_value\": 256,\n        \"name\": \"ImGuiItemStatusFlags_Visible\",\n        \"value\": \"1 << 8\"\n      },\n      {\n        \"calc_value\": 512,\n        \"name\": \"ImGuiItemStatusFlags_HasClipRect\",\n        \"value\": \"1 << 9\"\n      },\n      {\n        \"calc_value\": 1024,\n        \"name\": \"ImGuiItemStatusFlags_HasShortcut\",\n        \"value\": \"1 << 10\"\n      }\n    ],\n    \"ImGuiKey\": [\n      {\n        \"calc_value\": 0,\n        \"name\": \"ImGuiKey_None\",\n        \"value\": \"0\"\n      },\n      {\n        \"calc_value\": 512,\n        \"name\": \"ImGuiKey_NamedKey_BEGIN\",\n        \"value\": \"512\"\n      },\n      {\n        \"calc_value\": 512,\n        \"name\": \"ImGuiKey_Tab\",\n        \"value\": \"512\"\n      },\n      {\n        \"calc_value\": 513,\n        \"name\": \"ImGuiKey_LeftArrow\",\n        \"value\": \"513\"\n      },\n      {\n        \"calc_value\": 514,\n        \"name\": \"ImGuiKey_RightArrow\",\n        \"value\": \"514\"\n      },\n      {\n        \"calc_value\": 515,\n        \"name\": \"ImGuiKey_UpArrow\",\n        \"value\": \"515\"\n      },\n      {\n        \"calc_value\": 516,\n        \"name\": \"ImGuiKey_DownArrow\",\n        \"value\": \"516\"\n      },\n      {\n        \"calc_value\": 517,\n        \"name\": \"ImGuiKey_PageUp\",\n        \"value\": \"517\"\n      },\n      {\n        \"calc_value\": 518,\n        \"name\": \"ImGuiKey_PageDown\",\n        \"value\": \"518\"\n      },\n      {\n        \"calc_value\": 519,\n        \"name\": \"ImGuiKey_Home\",\n        \"value\": \"519\"\n      },\n      {\n        \"calc_value\": 520,\n        \"name\": \"ImGuiKey_End\",\n        \"value\": \"520\"\n      },\n      {\n        \"calc_value\": 521,\n        \"name\": \"ImGuiKey_Insert\",\n        \"value\": \"521\"\n      },\n      {\n        \"calc_value\": 522,\n        \"name\": \"ImGuiKey_Delete\",\n        \"value\": \"522\"\n      },\n      {\n        \"calc_value\": 523,\n        \"name\": \"ImGuiKey_Backspace\",\n        \"value\": \"523\"\n      },\n      {\n        \"calc_value\": 524,\n        \"name\": \"ImGuiKey_Space\",\n        \"value\": \"524\"\n      },\n      {\n        \"calc_value\": 525,\n        \"name\": \"ImGuiKey_Enter\",\n        \"value\": \"525\"\n      },\n      {\n        \"calc_value\": 526,\n        \"name\": \"ImGuiKey_Escape\",\n        \"value\": \"526\"\n      },\n      {\n        \"calc_value\": 527,\n        \"name\": \"ImGuiKey_LeftCtrl\",\n        \"value\": \"527\"\n      },\n      {\n        \"calc_value\": 528,\n        \"name\": \"ImGuiKey_LeftShift\",\n        \"value\": \"528\"\n      },\n      {\n        \"calc_value\": 529,\n        \"name\": \"ImGuiKey_LeftAlt\",\n        \"value\": \"529\"\n      },\n      {\n        \"calc_value\": 530,\n        \"name\": \"ImGuiKey_LeftSuper\",\n        \"value\": \"530\"\n      },\n      {\n        \"calc_value\": 531,\n        \"name\": \"ImGuiKey_RightCtrl\",\n        \"value\": \"531\"\n      },\n      {\n        \"calc_value\": 532,\n        \"name\": \"ImGuiKey_RightShift\",\n        \"value\": \"532\"\n      },\n      {\n        \"calc_value\": 533,\n        \"name\": \"ImGuiKey_RightAlt\",\n        \"value\": \"533\"\n      },\n      {\n        \"calc_value\": 534,\n        \"name\": \"ImGuiKey_RightSuper\",\n        \"value\": \"534\"\n      },\n      {\n        \"calc_value\": 535,\n        \"name\": \"ImGuiKey_Menu\",\n        \"value\": \"535\"\n      },\n      {\n        \"calc_value\": 536,\n        \"name\": \"ImGuiKey_0\",\n        \"value\": \"536\"\n      },\n      {\n        \"calc_value\": 537,\n        \"name\": \"ImGuiKey_1\",\n        \"value\": \"537\"\n      },\n      {\n        \"calc_value\": 538,\n        \"name\": \"ImGuiKey_2\",\n        \"value\": \"538\"\n      },\n      {\n        \"calc_value\": 539,\n        \"name\": \"ImGuiKey_3\",\n        \"value\": \"539\"\n      },\n      {\n        \"calc_value\": 540,\n        \"name\": \"ImGuiKey_4\",\n        \"value\": \"540\"\n      },\n      {\n        \"calc_value\": 541,\n        \"name\": \"ImGuiKey_5\",\n        \"value\": \"541\"\n      },\n      {\n        \"calc_value\": 542,\n        \"name\": \"ImGuiKey_6\",\n        \"value\": \"542\"\n      },\n      {\n        \"calc_value\": 543,\n        \"name\": \"ImGuiKey_7\",\n        \"value\": \"543\"\n      },\n      {\n        \"calc_value\": 544,\n        \"name\": \"ImGuiKey_8\",\n        \"value\": \"544\"\n      },\n      {\n        \"calc_value\": 545,\n        \"name\": \"ImGuiKey_9\",\n        \"value\": \"545\"\n      },\n      {\n        \"calc_value\": 546,\n        \"name\": \"ImGuiKey_A\",\n        \"value\": \"546\"\n      },\n      {\n        \"calc_value\": 547,\n        \"name\": \"ImGuiKey_B\",\n        \"value\": \"547\"\n      },\n      {\n        \"calc_value\": 548,\n        \"name\": \"ImGuiKey_C\",\n        \"value\": \"548\"\n      },\n      {\n        \"calc_value\": 549,\n        \"name\": \"ImGuiKey_D\",\n        \"value\": \"549\"\n      },\n      {\n        \"calc_value\": 550,\n        \"name\": \"ImGuiKey_E\",\n        \"value\": \"550\"\n      },\n      {\n        \"calc_value\": 551,\n        \"name\": \"ImGuiKey_F\",\n        \"value\": \"551\"\n      },\n      {\n        \"calc_value\": 552,\n        \"name\": \"ImGuiKey_G\",\n        \"value\": \"552\"\n      },\n      {\n        \"calc_value\": 553,\n        \"name\": \"ImGuiKey_H\",\n        \"value\": \"553\"\n      },\n      {\n        \"calc_value\": 554,\n        \"name\": \"ImGuiKey_I\",\n        \"value\": \"554\"\n      },\n      {\n        \"calc_value\": 555,\n        \"name\": \"ImGuiKey_J\",\n        \"value\": \"555\"\n      },\n      {\n        \"calc_value\": 556,\n        \"name\": \"ImGuiKey_K\",\n        \"value\": \"556\"\n      },\n      {\n        \"calc_value\": 557,\n        \"name\": \"ImGuiKey_L\",\n        \"value\": \"557\"\n      },\n      {\n        \"calc_value\": 558,\n        \"name\": \"ImGuiKey_M\",\n        \"value\": \"558\"\n      },\n      {\n        \"calc_value\": 559,\n        \"name\": \"ImGuiKey_N\",\n        \"value\": \"559\"\n      },\n      {\n        \"calc_value\": 560,\n        \"name\": \"ImGuiKey_O\",\n        \"value\": \"560\"\n      },\n      {\n        \"calc_value\": 561,\n        \"name\": \"ImGuiKey_P\",\n        \"value\": \"561\"\n      },\n      {\n        \"calc_value\": 562,\n        \"name\": \"ImGuiKey_Q\",\n        \"value\": \"562\"\n      },\n      {\n        \"calc_value\": 563,\n        \"name\": \"ImGuiKey_R\",\n        \"value\": \"563\"\n      },\n      {\n        \"calc_value\": 564,\n        \"name\": \"ImGuiKey_S\",\n        \"value\": \"564\"\n      },\n      {\n        \"calc_value\": 565,\n        \"name\": \"ImGuiKey_T\",\n        \"value\": \"565\"\n      },\n      {\n        \"calc_value\": 566,\n        \"name\": \"ImGuiKey_U\",\n        \"value\": \"566\"\n      },\n      {\n        \"calc_value\": 567,\n        \"name\": \"ImGuiKey_V\",\n        \"value\": \"567\"\n      },\n      {\n        \"calc_value\": 568,\n        \"name\": \"ImGuiKey_W\",\n        \"value\": \"568\"\n      },\n      {\n        \"calc_value\": 569,\n        \"name\": \"ImGuiKey_X\",\n        \"value\": \"569\"\n      },\n      {\n        \"calc_value\": 570,\n        \"name\": \"ImGuiKey_Y\",\n        \"value\": \"570\"\n      },\n      {\n        \"calc_value\": 571,\n        \"name\": \"ImGuiKey_Z\",\n        \"value\": \"571\"\n      },\n      {\n        \"calc_value\": 572,\n        \"name\": \"ImGuiKey_F1\",\n        \"value\": \"572\"\n      },\n      {\n        \"calc_value\": 573,\n        \"name\": \"ImGuiKey_F2\",\n        \"value\": \"573\"\n      },\n      {\n        \"calc_value\": 574,\n        \"name\": \"ImGuiKey_F3\",\n        \"value\": \"574\"\n      },\n      {\n        \"calc_value\": 575,\n        \"name\": \"ImGuiKey_F4\",\n        \"value\": \"575\"\n      },\n      {\n        \"calc_value\": 576,\n        \"name\": \"ImGuiKey_F5\",\n        \"value\": \"576\"\n      },\n      {\n        \"calc_value\": 577,\n        \"name\": \"ImGuiKey_F6\",\n        \"value\": \"577\"\n      },\n      {\n        \"calc_value\": 578,\n        \"name\": \"ImGuiKey_F7\",\n        \"value\": \"578\"\n      },\n      {\n        \"calc_value\": 579,\n        \"name\": \"ImGuiKey_F8\",\n        \"value\": \"579\"\n      },\n      {\n        \"calc_value\": 580,\n        \"name\": \"ImGuiKey_F9\",\n        \"value\": \"580\"\n      },\n      {\n        \"calc_value\": 581,\n        \"name\": \"ImGuiKey_F10\",\n        \"value\": \"581\"\n      },\n      {\n        \"calc_value\": 582,\n        \"name\": \"ImGuiKey_F11\",\n        \"value\": \"582\"\n      },\n      {\n        \"calc_value\": 583,\n        \"name\": \"ImGuiKey_F12\",\n        \"value\": \"583\"\n      },\n      {\n        \"calc_value\": 584,\n        \"name\": \"ImGuiKey_F13\",\n        \"value\": \"584\"\n      },\n      {\n        \"calc_value\": 585,\n        \"name\": \"ImGuiKey_F14\",\n        \"value\": \"585\"\n      },\n      {\n        \"calc_value\": 586,\n        \"name\": \"ImGuiKey_F15\",\n        \"value\": \"586\"\n      },\n      {\n        \"calc_value\": 587,\n        \"name\": \"ImGuiKey_F16\",\n        \"value\": \"587\"\n      },\n      {\n        \"calc_value\": 588,\n        \"name\": \"ImGuiKey_F17\",\n        \"value\": \"588\"\n      },\n      {\n        \"calc_value\": 589,\n        \"name\": \"ImGuiKey_F18\",\n        \"value\": \"589\"\n      },\n      {\n        \"calc_value\": 590,\n        \"name\": \"ImGuiKey_F19\",\n        \"value\": \"590\"\n      },\n      {\n        \"calc_value\": 591,\n        \"name\": \"ImGuiKey_F20\",\n        \"value\": \"591\"\n      },\n      {\n        \"calc_value\": 592,\n        \"name\": \"ImGuiKey_F21\",\n        \"value\": \"592\"\n      },\n      {\n        \"calc_value\": 593,\n        \"name\": \"ImGuiKey_F22\",\n        \"value\": \"593\"\n      },\n      {\n        \"calc_value\": 594,\n        \"name\": \"ImGuiKey_F23\",\n        \"value\": \"594\"\n      },\n      {\n        \"calc_value\": 595,\n        \"name\": \"ImGuiKey_F24\",\n        \"value\": \"595\"\n      },\n      {\n        \"calc_value\": 596,\n        \"name\": \"ImGuiKey_Apostrophe\",\n        \"value\": \"596\"\n      },\n      {\n        \"calc_value\": 597,\n        \"name\": \"ImGuiKey_Comma\",\n        \"value\": \"597\"\n      },\n      {\n        \"calc_value\": 598,\n        \"name\": \"ImGuiKey_Minus\",\n        \"value\": \"598\"\n      },\n      {\n        \"calc_value\": 599,\n        \"name\": \"ImGuiKey_Period\",\n        \"value\": \"599\"\n      },\n      {\n        \"calc_value\": 600,\n        \"name\": \"ImGuiKey_Slash\",\n        \"value\": \"600\"\n      },\n      {\n        \"calc_value\": 601,\n        \"name\": \"ImGuiKey_Semicolon\",\n        \"value\": \"601\"\n      },\n      {\n        \"calc_value\": 602,\n        \"name\": \"ImGuiKey_Equal\",\n        \"value\": \"602\"\n      },\n      {\n        \"calc_value\": 603,\n        \"name\": \"ImGuiKey_LeftBracket\",\n        \"value\": \"603\"\n      },\n      {\n        \"calc_value\": 604,\n        \"name\": \"ImGuiKey_Backslash\",\n        \"value\": \"604\"\n      },\n      {\n        \"calc_value\": 605,\n        \"name\": \"ImGuiKey_RightBracket\",\n        \"value\": \"605\"\n      },\n      {\n        \"calc_value\": 606,\n        \"name\": \"ImGuiKey_GraveAccent\",\n        \"value\": \"606\"\n      },\n      {\n        \"calc_value\": 607,\n        \"name\": \"ImGuiKey_CapsLock\",\n        \"value\": \"607\"\n      },\n      {\n        \"calc_value\": 608,\n        \"name\": \"ImGuiKey_ScrollLock\",\n        \"value\": \"608\"\n      },\n      {\n        \"calc_value\": 609,\n        \"name\": \"ImGuiKey_NumLock\",\n        \"value\": \"609\"\n      },\n      {\n        \"calc_value\": 610,\n        \"name\": \"ImGuiKey_PrintScreen\",\n        \"value\": \"610\"\n      },\n      {\n        \"calc_value\": 611,\n        \"name\": \"ImGuiKey_Pause\",\n        \"value\": \"611\"\n      },\n      {\n        \"calc_value\": 612,\n        \"name\": \"ImGuiKey_Keypad0\",\n        \"value\": \"612\"\n      },\n      {\n        \"calc_value\": 613,\n        \"name\": \"ImGuiKey_Keypad1\",\n        \"value\": \"613\"\n      },\n      {\n        \"calc_value\": 614,\n        \"name\": \"ImGuiKey_Keypad2\",\n        \"value\": \"614\"\n      },\n      {\n        \"calc_value\": 615,\n        \"name\": \"ImGuiKey_Keypad3\",\n        \"value\": \"615\"\n      },\n      {\n        \"calc_value\": 616,\n        \"name\": \"ImGuiKey_Keypad4\",\n        \"value\": \"616\"\n      },\n      {\n        \"calc_value\": 617,\n        \"name\": \"ImGuiKey_Keypad5\",\n        \"value\": \"617\"\n      },\n      {\n        \"calc_value\": 618,\n        \"name\": \"ImGuiKey_Keypad6\",\n        \"value\": \"618\"\n      },\n      {\n        \"calc_value\": 619,\n        \"name\": \"ImGuiKey_Keypad7\",\n        \"value\": \"619\"\n      },\n      {\n        \"calc_value\": 620,\n        \"name\": \"ImGuiKey_Keypad8\",\n        \"value\": \"620\"\n      },\n      {\n        \"calc_value\": 621,\n        \"name\": \"ImGuiKey_Keypad9\",\n        \"value\": \"621\"\n      },\n      {\n        \"calc_value\": 622,\n        \"name\": \"ImGuiKey_KeypadDecimal\",\n        \"value\": \"622\"\n      },\n      {\n        \"calc_value\": 623,\n        \"name\": \"ImGuiKey_KeypadDivide\",\n        \"value\": \"623\"\n      },\n      {\n        \"calc_value\": 624,\n        \"name\": \"ImGuiKey_KeypadMultiply\",\n        \"value\": \"624\"\n      },\n      {\n        \"calc_value\": 625,\n        \"name\": \"ImGuiKey_KeypadSubtract\",\n        \"value\": \"625\"\n      },\n      {\n        \"calc_value\": 626,\n        \"name\": \"ImGuiKey_KeypadAdd\",\n        \"value\": \"626\"\n      },\n      {\n        \"calc_value\": 627,\n        \"name\": \"ImGuiKey_KeypadEnter\",\n        \"value\": \"627\"\n      },\n      {\n        \"calc_value\": 628,\n        \"name\": \"ImGuiKey_KeypadEqual\",\n        \"value\": \"628\"\n      },\n      {\n        \"calc_value\": 629,\n        \"name\": \"ImGuiKey_AppBack\",\n        \"value\": \"629\"\n      },\n      {\n        \"calc_value\": 630,\n        \"name\": \"ImGuiKey_AppForward\",\n        \"value\": \"630\"\n      },\n      {\n        \"calc_value\": 631,\n        \"name\": \"ImGuiKey_GamepadStart\",\n        \"value\": \"631\"\n      },\n      {\n        \"calc_value\": 632,\n        \"name\": \"ImGuiKey_GamepadBack\",\n        \"value\": \"632\"\n      },\n      {\n        \"calc_value\": 633,\n        \"name\": \"ImGuiKey_GamepadFaceLeft\",\n        \"value\": \"633\"\n      },\n      {\n        \"calc_value\": 634,\n        \"name\": \"ImGuiKey_GamepadFaceRight\",\n        \"value\": \"634\"\n      },\n      {\n        \"calc_value\": 635,\n        \"name\": \"ImGuiKey_GamepadFaceUp\",\n        \"value\": \"635\"\n      },\n      {\n        \"calc_value\": 636,\n        \"name\": \"ImGuiKey_GamepadFaceDown\",\n        \"value\": \"636\"\n      },\n      {\n        \"calc_value\": 637,\n        \"name\": \"ImGuiKey_GamepadDpadLeft\",\n        \"value\": \"637\"\n      },\n      {\n        \"calc_value\": 638,\n        \"name\": \"ImGuiKey_GamepadDpadRight\",\n        \"value\": \"638\"\n      },\n      {\n        \"calc_value\": 639,\n        \"name\": \"ImGuiKey_GamepadDpadUp\",\n        \"value\": \"639\"\n      },\n      {\n        \"calc_value\": 640,\n        \"name\": \"ImGuiKey_GamepadDpadDown\",\n        \"value\": \"640\"\n      },\n      {\n        \"calc_value\": 641,\n        \"name\": \"ImGuiKey_GamepadL1\",\n        \"value\": \"641\"\n      },\n      {\n        \"calc_value\": 642,\n        \"name\": \"ImGuiKey_GamepadR1\",\n        \"value\": \"642\"\n      },\n      {\n        \"calc_value\": 643,\n        \"name\": \"ImGuiKey_GamepadL2\",\n        \"value\": \"643\"\n      },\n      {\n        \"calc_value\": 644,\n        \"name\": \"ImGuiKey_GamepadR2\",\n        \"value\": \"644\"\n      },\n      {\n        \"calc_value\": 645,\n        \"name\": \"ImGuiKey_GamepadL3\",\n        \"value\": \"645\"\n      },\n      {\n        \"calc_value\": 646,\n        \"name\": \"ImGuiKey_GamepadR3\",\n        \"value\": \"646\"\n      },\n      {\n        \"calc_value\": 647,\n        \"name\": \"ImGuiKey_GamepadLStickLeft\",\n        \"value\": \"647\"\n      },\n      {\n        \"calc_value\": 648,\n        \"name\": \"ImGuiKey_GamepadLStickRight\",\n        \"value\": \"648\"\n      },\n      {\n        \"calc_value\": 649,\n        \"name\": \"ImGuiKey_GamepadLStickUp\",\n        \"value\": \"649\"\n      },\n      {\n        \"calc_value\": 650,\n        \"name\": \"ImGuiKey_GamepadLStickDown\",\n        \"value\": \"650\"\n      },\n      {\n        \"calc_value\": 651,\n        \"name\": \"ImGuiKey_GamepadRStickLeft\",\n        \"value\": \"651\"\n      },\n      {\n        \"calc_value\": 652,\n        \"name\": \"ImGuiKey_GamepadRStickRight\",\n        \"value\": \"652\"\n      },\n      {\n        \"calc_value\": 653,\n        \"name\": \"ImGuiKey_GamepadRStickUp\",\n        \"value\": \"653\"\n      },\n      {\n        \"calc_value\": 654,\n        \"name\": \"ImGuiKey_GamepadRStickDown\",\n        \"value\": \"654\"\n      },\n      {\n        \"calc_value\": 655,\n        \"name\": \"ImGuiKey_MouseLeft\",\n        \"value\": \"655\"\n      },\n      {\n        \"calc_value\": 656,\n        \"name\": \"ImGuiKey_MouseRight\",\n        \"value\": \"656\"\n      },\n      {\n        \"calc_value\": 657,\n        \"name\": \"ImGuiKey_MouseMiddle\",\n        \"value\": \"657\"\n      },\n      {\n        \"calc_value\": 658,\n        \"name\": \"ImGuiKey_MouseX1\",\n        \"value\": \"658\"\n      },\n      {\n        \"calc_value\": 659,\n        \"name\": \"ImGuiKey_MouseX2\",\n        \"value\": \"659\"\n      },\n      {\n        \"calc_value\": 660,\n        \"name\": \"ImGuiKey_MouseWheelX\",\n        \"value\": \"660\"\n      },\n      {\n        \"calc_value\": 661,\n        \"name\": \"ImGuiKey_MouseWheelY\",\n        \"value\": \"661\"\n      },\n      {\n        \"calc_value\": 662,\n        \"name\": \"ImGuiKey_ReservedForModCtrl\",\n        \"value\": \"662\"\n      },\n      {\n        \"calc_value\": 663,\n        \"name\": \"ImGuiKey_ReservedForModShift\",\n        \"value\": \"663\"\n      },\n      {\n        \"calc_value\": 664,\n        \"name\": \"ImGuiKey_ReservedForModAlt\",\n        \"value\": \"664\"\n      },\n      {\n        \"calc_value\": 665,\n        \"name\": \"ImGuiKey_ReservedForModSuper\",\n        \"value\": \"665\"\n      },\n      {\n        \"calc_value\": 666,\n        \"name\": \"ImGuiKey_NamedKey_END\",\n        \"value\": \"666\"\n      },\n      {\n        \"calc_value\": 0,\n        \"name\": \"ImGuiMod_None\",\n        \"value\": \"0\"\n      },\n      {\n        \"calc_value\": 4096,\n        \"name\": \"ImGuiMod_Ctrl\",\n        \"value\": \"1 << 12\"\n      },\n      {\n        \"calc_value\": 8192,\n        \"name\": \"ImGuiMod_Shift\",\n        \"value\": \"1 << 13\"\n      },\n      {\n        \"calc_value\": 16384,\n        \"name\": \"ImGuiMod_Alt\",\n        \"value\": \"1 << 14\"\n      },\n      {\n        \"calc_value\": 32768,\n        \"name\": \"ImGuiMod_Super\",\n        \"value\": \"1 << 15\"\n      },\n      {\n        \"calc_value\": 61440,\n        \"name\": \"ImGuiMod_Mask_\",\n        \"value\": \"0xF000\"\n      },\n      {\n        \"calc_value\": 154,\n        \"name\": \"ImGuiKey_NamedKey_COUNT\",\n        \"value\": \"ImGuiKey_NamedKey_END - ImGuiKey_NamedKey_BEGIN\"\n      }\n    ],\n    \"ImGuiLayoutType_\": [\n      {\n        \"calc_value\": 0,\n        \"name\": \"ImGuiLayoutType_Horizontal\",\n        \"value\": \"0\"\n      },\n      {\n        \"calc_value\": 1,\n        \"name\": \"ImGuiLayoutType_Vertical\",\n        \"value\": \"1\"\n      }\n    ],\n    \"ImGuiLocKey\": [\n      {\n        \"calc_value\": 0,\n        \"name\": \"ImGuiLocKey_VersionStr\",\n        \"value\": \"0\"\n      },\n      {\n        \"calc_value\": 1,\n        \"name\": \"ImGuiLocKey_TableSizeOne\",\n        \"value\": \"1\"\n      },\n      {\n        \"calc_value\": 2,\n        \"name\": \"ImGuiLocKey_TableSizeAllFit\",\n        \"value\": \"2\"\n      },\n      {\n        \"calc_value\": 3,\n        \"name\": \"ImGuiLocKey_TableSizeAllDefault\",\n        \"value\": \"3\"\n      },\n      {\n        \"calc_value\": 4,\n        \"name\": \"ImGuiLocKey_TableResetOrder\",\n        \"value\": \"4\"\n      },\n      {\n        \"calc_value\": 5,\n        \"name\": \"ImGuiLocKey_WindowingMainMenuBar\",\n        \"value\": \"5\"\n      },\n      {\n        \"calc_value\": 6,\n        \"name\": \"ImGuiLocKey_WindowingPopup\",\n        \"value\": \"6\"\n      },\n      {\n        \"calc_value\": 7,\n        \"name\": \"ImGuiLocKey_WindowingUntitled\",\n        \"value\": \"7\"\n      },\n      {\n        \"calc_value\": 8,\n        \"name\": \"ImGuiLocKey_OpenLink_s\",\n        \"value\": \"8\"\n      },\n      {\n        \"calc_value\": 9,\n        \"name\": \"ImGuiLocKey_CopyLink\",\n        \"value\": \"9\"\n      },\n      {\n        \"calc_value\": 10,\n        \"name\": \"ImGuiLocKey_COUNT\",\n        \"value\": \"10\"\n      }\n    ],\n    \"ImGuiLogFlags_\": [\n      {\n        \"calc_value\": 0,\n        \"name\": \"ImGuiLogFlags_None\",\n        \"value\": \"0\"\n      },\n      {\n        \"calc_value\": 1,\n        \"name\": \"ImGuiLogFlags_OutputTTY\",\n        \"value\": \"1 << 0\"\n      },\n      {\n        \"calc_value\": 2,\n        \"name\": \"ImGuiLogFlags_OutputFile\",\n        \"value\": \"1 << 1\"\n      },\n      {\n        \"calc_value\": 4,\n        \"name\": \"ImGuiLogFlags_OutputBuffer\",\n        \"value\": \"1 << 2\"\n      },\n      {\n        \"calc_value\": 8,\n        \"name\": \"ImGuiLogFlags_OutputClipboard\",\n        \"value\": \"1 << 3\"\n      },\n      {\n        \"calc_value\": 15,\n        \"name\": \"ImGuiLogFlags_OutputMask_\",\n        \"value\": \"ImGuiLogFlags_OutputTTY | ImGuiLogFlags_OutputFile | ImGuiLogFlags_OutputBuffer | ImGuiLogFlags_OutputClipboard\"\n      }\n    ],\n    \"ImGuiMouseButton_\": [\n      {\n        \"calc_value\": 0,\n        \"name\": \"ImGuiMouseButton_Left\",\n        \"value\": \"0\"\n      },\n      {\n        \"calc_value\": 1,\n        \"name\": \"ImGuiMouseButton_Right\",\n        \"value\": \"1\"\n      },\n      {\n        \"calc_value\": 2,\n        \"name\": \"ImGuiMouseButton_Middle\",\n        \"value\": \"2\"\n      },\n      {\n        \"calc_value\": 5,\n        \"name\": \"ImGuiMouseButton_COUNT\",\n        \"value\": \"5\"\n      }\n    ],\n    \"ImGuiMouseCursor_\": [\n      {\n        \"calc_value\": -1,\n        \"name\": \"ImGuiMouseCursor_None\",\n        \"value\": \"-1\"\n      },\n      {\n        \"calc_value\": 0,\n        \"name\": \"ImGuiMouseCursor_Arrow\",\n        \"value\": \"0\"\n      },\n      {\n        \"calc_value\": 1,\n        \"name\": \"ImGuiMouseCursor_TextInput\",\n        \"value\": \"1\"\n      },\n      {\n        \"calc_value\": 2,\n        \"name\": \"ImGuiMouseCursor_ResizeAll\",\n        \"value\": \"2\"\n      },\n      {\n        \"calc_value\": 3,\n        \"name\": \"ImGuiMouseCursor_ResizeNS\",\n        \"value\": \"3\"\n      },\n      {\n        \"calc_value\": 4,\n        \"name\": \"ImGuiMouseCursor_ResizeEW\",\n        \"value\": \"4\"\n      },\n      {\n        \"calc_value\": 5,\n        \"name\": \"ImGuiMouseCursor_ResizeNESW\",\n        \"value\": \"5\"\n      },\n      {\n        \"calc_value\": 6,\n        \"name\": \"ImGuiMouseCursor_ResizeNWSE\",\n        \"value\": \"6\"\n      },\n      {\n        \"calc_value\": 7,\n        \"name\": \"ImGuiMouseCursor_Hand\",\n        \"value\": \"7\"\n      },\n      {\n        \"calc_value\": 8,\n        \"name\": \"ImGuiMouseCursor_NotAllowed\",\n        \"value\": \"8\"\n      },\n      {\n        \"calc_value\": 9,\n        \"name\": \"ImGuiMouseCursor_COUNT\",\n        \"value\": \"9\"\n      }\n    ],\n    \"ImGuiMouseSource\": [\n      {\n        \"calc_value\": 0,\n        \"name\": \"ImGuiMouseSource_Mouse\",\n        \"value\": \"0\"\n      },\n      {\n        \"calc_value\": 1,\n        \"name\": \"ImGuiMouseSource_TouchScreen\",\n        \"value\": \"1\"\n      },\n      {\n        \"calc_value\": 2,\n        \"name\": \"ImGuiMouseSource_Pen\",\n        \"value\": \"2\"\n      },\n      {\n        \"calc_value\": 3,\n        \"name\": \"ImGuiMouseSource_COUNT\",\n        \"value\": \"3\"\n      }\n    ],\n    \"ImGuiMultiSelectFlags_\": [\n      {\n        \"calc_value\": 0,\n        \"name\": \"ImGuiMultiSelectFlags_None\",\n        \"value\": \"0\"\n      },\n      {\n        \"calc_value\": 1,\n        \"name\": \"ImGuiMultiSelectFlags_SingleSelect\",\n        \"value\": \"1 << 0\"\n      },\n      {\n        \"calc_value\": 2,\n        \"name\": \"ImGuiMultiSelectFlags_NoSelectAll\",\n        \"value\": \"1 << 1\"\n      },\n      {\n        \"calc_value\": 4,\n        \"name\": \"ImGuiMultiSelectFlags_NoRangeSelect\",\n        \"value\": \"1 << 2\"\n      },\n      {\n        \"calc_value\": 8,\n        \"name\": \"ImGuiMultiSelectFlags_NoAutoSelect\",\n        \"value\": \"1 << 3\"\n      },\n      {\n        \"calc_value\": 16,\n        \"name\": \"ImGuiMultiSelectFlags_NoAutoClear\",\n        \"value\": \"1 << 4\"\n      },\n      {\n        \"calc_value\": 32,\n        \"name\": \"ImGuiMultiSelectFlags_NoAutoClearOnReselect\",\n        \"value\": \"1 << 5\"\n      },\n      {\n        \"calc_value\": 64,\n        \"name\": \"ImGuiMultiSelectFlags_BoxSelect1d\",\n        \"value\": \"1 << 6\"\n      },\n      {\n        \"calc_value\": 128,\n        \"name\": \"ImGuiMultiSelectFlags_BoxSelect2d\",\n        \"value\": \"1 << 7\"\n      },\n      {\n        \"calc_value\": 256,\n        \"name\": \"ImGuiMultiSelectFlags_BoxSelectNoScroll\",\n        \"value\": \"1 << 8\"\n      },\n      {\n        \"calc_value\": 512,\n        \"name\": \"ImGuiMultiSelectFlags_ClearOnEscape\",\n        \"value\": \"1 << 9\"\n      },\n      {\n        \"calc_value\": 1024,\n        \"name\": \"ImGuiMultiSelectFlags_ClearOnClickVoid\",\n        \"value\": \"1 << 10\"\n      },\n      {\n        \"calc_value\": 2048,\n        \"name\": \"ImGuiMultiSelectFlags_ScopeWindow\",\n        \"value\": \"1 << 11\"\n      },\n      {\n        \"calc_value\": 4096,\n        \"name\": \"ImGuiMultiSelectFlags_ScopeRect\",\n        \"value\": \"1 << 12\"\n      },\n      {\n        \"calc_value\": 8192,\n        \"name\": \"ImGuiMultiSelectFlags_SelectOnClick\",\n        \"value\": \"1 << 13\"\n      },\n      {\n        \"calc_value\": 16384,\n        \"name\": \"ImGuiMultiSelectFlags_SelectOnClickRelease\",\n        \"value\": \"1 << 14\"\n      },\n      {\n        \"calc_value\": 65536,\n        \"name\": \"ImGuiMultiSelectFlags_NavWrapX\",\n        \"value\": \"1 << 16\"\n      }\n    ],\n    \"ImGuiNavLayer\": [\n      {\n        \"calc_value\": 0,\n        \"name\": \"ImGuiNavLayer_Main\",\n        \"value\": \"0\"\n      },\n      {\n        \"calc_value\": 1,\n        \"name\": \"ImGuiNavLayer_Menu\",\n        \"value\": \"1\"\n      },\n      {\n        \"calc_value\": 2,\n        \"name\": \"ImGuiNavLayer_COUNT\",\n        \"value\": \"2\"\n      }\n    ],\n    \"ImGuiNavMoveFlags_\": [\n      {\n        \"calc_value\": 0,\n        \"name\": \"ImGuiNavMoveFlags_None\",\n        \"value\": \"0\"\n      },\n      {\n        \"calc_value\": 1,\n        \"name\": \"ImGuiNavMoveFlags_LoopX\",\n        \"value\": \"1 << 0\"\n      },\n      {\n        \"calc_value\": 2,\n        \"name\": \"ImGuiNavMoveFlags_LoopY\",\n        \"value\": \"1 << 1\"\n      },\n      {\n        \"calc_value\": 4,\n        \"name\": \"ImGuiNavMoveFlags_WrapX\",\n        \"value\": \"1 << 2\"\n      },\n      {\n        \"calc_value\": 8,\n        \"name\": \"ImGuiNavMoveFlags_WrapY\",\n        \"value\": \"1 << 3\"\n      },\n      {\n        \"calc_value\": 15,\n        \"name\": \"ImGuiNavMoveFlags_WrapMask_\",\n        \"value\": \"ImGuiNavMoveFlags_LoopX | ImGuiNavMoveFlags_LoopY | ImGuiNavMoveFlags_WrapX | ImGuiNavMoveFlags_WrapY\"\n      },\n      {\n        \"calc_value\": 16,\n        \"name\": \"ImGuiNavMoveFlags_AllowCurrentNavId\",\n        \"value\": \"1 << 4\"\n      },\n      {\n        \"calc_value\": 32,\n        \"name\": \"ImGuiNavMoveFlags_AlsoScoreVisibleSet\",\n        \"value\": \"1 << 5\"\n      },\n      {\n        \"calc_value\": 64,\n        \"name\": \"ImGuiNavMoveFlags_ScrollToEdgeY\",\n        \"value\": \"1 << 6\"\n      },\n      {\n        \"calc_value\": 128,\n        \"name\": \"ImGuiNavMoveFlags_Forwarded\",\n        \"value\": \"1 << 7\"\n      },\n      {\n        \"calc_value\": 256,\n        \"name\": \"ImGuiNavMoveFlags_DebugNoResult\",\n        \"value\": \"1 << 8\"\n      },\n      {\n        \"calc_value\": 512,\n        \"name\": \"ImGuiNavMoveFlags_FocusApi\",\n        \"value\": \"1 << 9\"\n      },\n      {\n        \"calc_value\": 1024,\n        \"name\": \"ImGuiNavMoveFlags_IsTabbing\",\n        \"value\": \"1 << 10\"\n      },\n      {\n        \"calc_value\": 2048,\n        \"name\": \"ImGuiNavMoveFlags_IsPageMove\",\n        \"value\": \"1 << 11\"\n      },\n      {\n        \"calc_value\": 4096,\n        \"name\": \"ImGuiNavMoveFlags_Activate\",\n        \"value\": \"1 << 12\"\n      },\n      {\n        \"calc_value\": 8192,\n        \"name\": \"ImGuiNavMoveFlags_NoSelect\",\n        \"value\": \"1 << 13\"\n      },\n      {\n        \"calc_value\": 16384,\n        \"name\": \"ImGuiNavMoveFlags_NoSetNavCursorVisible\",\n        \"value\": \"1 << 14\"\n      },\n      {\n        \"calc_value\": 32768,\n        \"name\": \"ImGuiNavMoveFlags_NoClearActiveId\",\n        \"value\": \"1 << 15\"\n      }\n    ],\n    \"ImGuiNavRenderCursorFlags_\": [\n      {\n        \"calc_value\": 0,\n        \"name\": \"ImGuiNavRenderCursorFlags_None\",\n        \"value\": \"0\"\n      },\n      {\n        \"calc_value\": 2,\n        \"name\": \"ImGuiNavRenderCursorFlags_Compact\",\n        \"value\": \"1 << 1\"\n      },\n      {\n        \"calc_value\": 4,\n        \"name\": \"ImGuiNavRenderCursorFlags_AlwaysDraw\",\n        \"value\": \"1 << 2\"\n      },\n      {\n        \"calc_value\": 8,\n        \"name\": \"ImGuiNavRenderCursorFlags_NoRounding\",\n        \"value\": \"1 << 3\"\n      }\n    ],\n    \"ImGuiNextItemDataFlags_\": [\n      {\n        \"calc_value\": 0,\n        \"name\": \"ImGuiNextItemDataFlags_None\",\n        \"value\": \"0\"\n      },\n      {\n        \"calc_value\": 1,\n        \"name\": \"ImGuiNextItemDataFlags_HasWidth\",\n        \"value\": \"1 << 0\"\n      },\n      {\n        \"calc_value\": 2,\n        \"name\": \"ImGuiNextItemDataFlags_HasOpen\",\n        \"value\": \"1 << 1\"\n      },\n      {\n        \"calc_value\": 4,\n        \"name\": \"ImGuiNextItemDataFlags_HasShortcut\",\n        \"value\": \"1 << 2\"\n      },\n      {\n        \"calc_value\": 8,\n        \"name\": \"ImGuiNextItemDataFlags_HasRefVal\",\n        \"value\": \"1 << 3\"\n      },\n      {\n        \"calc_value\": 16,\n        \"name\": \"ImGuiNextItemDataFlags_HasStorageID\",\n        \"value\": \"1 << 4\"\n      }\n    ],\n    \"ImGuiNextWindowDataFlags_\": [\n      {\n        \"calc_value\": 0,\n        \"name\": \"ImGuiNextWindowDataFlags_None\",\n        \"value\": \"0\"\n      },\n      {\n        \"calc_value\": 1,\n        \"name\": \"ImGuiNextWindowDataFlags_HasPos\",\n        \"value\": \"1 << 0\"\n      },\n      {\n        \"calc_value\": 2,\n        \"name\": \"ImGuiNextWindowDataFlags_HasSize\",\n        \"value\": \"1 << 1\"\n      },\n      {\n        \"calc_value\": 4,\n        \"name\": \"ImGuiNextWindowDataFlags_HasContentSize\",\n        \"value\": \"1 << 2\"\n      },\n      {\n        \"calc_value\": 8,\n        \"name\": \"ImGuiNextWindowDataFlags_HasCollapsed\",\n        \"value\": \"1 << 3\"\n      },\n      {\n        \"calc_value\": 16,\n        \"name\": \"ImGuiNextWindowDataFlags_HasSizeConstraint\",\n        \"value\": \"1 << 4\"\n      },\n      {\n        \"calc_value\": 32,\n        \"name\": \"ImGuiNextWindowDataFlags_HasFocus\",\n        \"value\": \"1 << 5\"\n      },\n      {\n        \"calc_value\": 64,\n        \"name\": \"ImGuiNextWindowDataFlags_HasBgAlpha\",\n        \"value\": \"1 << 6\"\n      },\n      {\n        \"calc_value\": 128,\n        \"name\": \"ImGuiNextWindowDataFlags_HasScroll\",\n        \"value\": \"1 << 7\"\n      },\n      {\n        \"calc_value\": 256,\n        \"name\": \"ImGuiNextWindowDataFlags_HasChildFlags\",\n        \"value\": \"1 << 8\"\n      },\n      {\n        \"calc_value\": 512,\n        \"name\": \"ImGuiNextWindowDataFlags_HasRefreshPolicy\",\n        \"value\": \"1 << 9\"\n      }\n    ],\n    \"ImGuiOldColumnFlags_\": [\n      {\n        \"calc_value\": 0,\n        \"name\": \"ImGuiOldColumnFlags_None\",\n        \"value\": \"0\"\n      },\n      {\n        \"calc_value\": 1,\n        \"name\": \"ImGuiOldColumnFlags_NoBorder\",\n        \"value\": \"1 << 0\"\n      },\n      {\n        \"calc_value\": 2,\n        \"name\": \"ImGuiOldColumnFlags_NoResize\",\n        \"value\": \"1 << 1\"\n      },\n      {\n        \"calc_value\": 4,\n        \"name\": \"ImGuiOldColumnFlags_NoPreserveWidths\",\n        \"value\": \"1 << 2\"\n      },\n      {\n        \"calc_value\": 8,\n        \"name\": \"ImGuiOldColumnFlags_NoForceWithinWindow\",\n        \"value\": \"1 << 3\"\n      },\n      {\n        \"calc_value\": 16,\n        \"name\": \"ImGuiOldColumnFlags_GrowParentContentsSize\",\n        \"value\": \"1 << 4\"\n      }\n    ],\n    \"ImGuiPlotType\": [\n      {\n        \"calc_value\": 0,\n        \"name\": \"ImGuiPlotType_Lines\",\n        \"value\": \"0\"\n      },\n      {\n        \"calc_value\": 1,\n        \"name\": \"ImGuiPlotType_Histogram\",\n        \"value\": \"1\"\n      }\n    ],\n    \"ImGuiPopupFlags_\": [\n      {\n        \"calc_value\": 0,\n        \"name\": \"ImGuiPopupFlags_None\",\n        \"value\": \"0\"\n      },\n      {\n        \"calc_value\": 0,\n        \"name\": \"ImGuiPopupFlags_MouseButtonLeft\",\n        \"value\": \"0\"\n      },\n      {\n        \"calc_value\": 1,\n        \"name\": \"ImGuiPopupFlags_MouseButtonRight\",\n        \"value\": \"1\"\n      },\n      {\n        \"calc_value\": 2,\n        \"name\": \"ImGuiPopupFlags_MouseButtonMiddle\",\n        \"value\": \"2\"\n      },\n      {\n        \"calc_value\": 31,\n        \"name\": \"ImGuiPopupFlags_MouseButtonMask_\",\n        \"value\": \"0x1F\"\n      },\n      {\n        \"calc_value\": 1,\n        \"name\": \"ImGuiPopupFlags_MouseButtonDefault_\",\n        \"value\": \"1\"\n      },\n      {\n        \"calc_value\": 32,\n        \"name\": \"ImGuiPopupFlags_NoReopen\",\n        \"value\": \"1 << 5\"\n      },\n      {\n        \"calc_value\": 128,\n        \"name\": \"ImGuiPopupFlags_NoOpenOverExistingPopup\",\n        \"value\": \"1 << 7\"\n      },\n      {\n        \"calc_value\": 256,\n        \"name\": \"ImGuiPopupFlags_NoOpenOverItems\",\n        \"value\": \"1 << 8\"\n      },\n      {\n        \"calc_value\": 1024,\n        \"name\": \"ImGuiPopupFlags_AnyPopupId\",\n        \"value\": \"1 << 10\"\n      },\n      {\n        \"calc_value\": 2048,\n        \"name\": \"ImGuiPopupFlags_AnyPopupLevel\",\n        \"value\": \"1 << 11\"\n      },\n      {\n        \"calc_value\": 3072,\n        \"name\": \"ImGuiPopupFlags_AnyPopup\",\n        \"value\": \"ImGuiPopupFlags_AnyPopupId | ImGuiPopupFlags_AnyPopupLevel\"\n      }\n    ],\n    \"ImGuiPopupPositionPolicy\": [\n      {\n        \"calc_value\": 0,\n        \"name\": \"ImGuiPopupPositionPolicy_Default\",\n        \"value\": \"0\"\n      },\n      {\n        \"calc_value\": 1,\n        \"name\": \"ImGuiPopupPositionPolicy_ComboBox\",\n        \"value\": \"1\"\n      },\n      {\n        \"calc_value\": 2,\n        \"name\": \"ImGuiPopupPositionPolicy_Tooltip\",\n        \"value\": \"2\"\n      }\n    ],\n    \"ImGuiScrollFlags_\": [\n      {\n        \"calc_value\": 0,\n        \"name\": \"ImGuiScrollFlags_None\",\n        \"value\": \"0\"\n      },\n      {\n        \"calc_value\": 1,\n        \"name\": \"ImGuiScrollFlags_KeepVisibleEdgeX\",\n        \"value\": \"1 << 0\"\n      },\n      {\n        \"calc_value\": 2,\n        \"name\": \"ImGuiScrollFlags_KeepVisibleEdgeY\",\n        \"value\": \"1 << 1\"\n      },\n      {\n        \"calc_value\": 4,\n        \"name\": \"ImGuiScrollFlags_KeepVisibleCenterX\",\n        \"value\": \"1 << 2\"\n      },\n      {\n        \"calc_value\": 8,\n        \"name\": \"ImGuiScrollFlags_KeepVisibleCenterY\",\n        \"value\": \"1 << 3\"\n      },\n      {\n        \"calc_value\": 16,\n        \"name\": \"ImGuiScrollFlags_AlwaysCenterX\",\n        \"value\": \"1 << 4\"\n      },\n      {\n        \"calc_value\": 32,\n        \"name\": \"ImGuiScrollFlags_AlwaysCenterY\",\n        \"value\": \"1 << 5\"\n      },\n      {\n        \"calc_value\": 64,\n        \"name\": \"ImGuiScrollFlags_NoScrollParent\",\n        \"value\": \"1 << 6\"\n      },\n      {\n        \"calc_value\": 21,\n        \"name\": \"ImGuiScrollFlags_MaskX_\",\n        \"value\": \"ImGuiScrollFlags_KeepVisibleEdgeX | ImGuiScrollFlags_KeepVisibleCenterX | ImGuiScrollFlags_AlwaysCenterX\"\n      },\n      {\n        \"calc_value\": 42,\n        \"name\": \"ImGuiScrollFlags_MaskY_\",\n        \"value\": \"ImGuiScrollFlags_KeepVisibleEdgeY | ImGuiScrollFlags_KeepVisibleCenterY | ImGuiScrollFlags_AlwaysCenterY\"\n      }\n    ],\n    \"ImGuiSelectableFlagsPrivate_\": [\n      {\n        \"calc_value\": 1048576,\n        \"name\": \"ImGuiSelectableFlags_NoHoldingActiveID\",\n        \"value\": \"1 << 20\"\n      },\n      {\n        \"calc_value\": 2097152,\n        \"name\": \"ImGuiSelectableFlags_SelectOnNav\",\n        \"value\": \"1 << 21\"\n      },\n      {\n        \"calc_value\": 4194304,\n        \"name\": \"ImGuiSelectableFlags_SelectOnClick\",\n        \"value\": \"1 << 22\"\n      },\n      {\n        \"calc_value\": 8388608,\n        \"name\": \"ImGuiSelectableFlags_SelectOnRelease\",\n        \"value\": \"1 << 23\"\n      },\n      {\n        \"calc_value\": 16777216,\n        \"name\": \"ImGuiSelectableFlags_SpanAvailWidth\",\n        \"value\": \"1 << 24\"\n      },\n      {\n        \"calc_value\": 33554432,\n        \"name\": \"ImGuiSelectableFlags_SetNavIdOnHover\",\n        \"value\": \"1 << 25\"\n      },\n      {\n        \"calc_value\": 67108864,\n        \"name\": \"ImGuiSelectableFlags_NoPadWithHalfSpacing\",\n        \"value\": \"1 << 26\"\n      },\n      {\n        \"calc_value\": 134217728,\n        \"name\": \"ImGuiSelectableFlags_NoSetKeyOwner\",\n        \"value\": \"1 << 27\"\n      }\n    ],\n    \"ImGuiSelectableFlags_\": [\n      {\n        \"calc_value\": 0,\n        \"name\": \"ImGuiSelectableFlags_None\",\n        \"value\": \"0\"\n      },\n      {\n        \"calc_value\": 1,\n        \"name\": \"ImGuiSelectableFlags_NoAutoClosePopups\",\n        \"value\": \"1 << 0\"\n      },\n      {\n        \"calc_value\": 2,\n        \"name\": \"ImGuiSelectableFlags_SpanAllColumns\",\n        \"value\": \"1 << 1\"\n      },\n      {\n        \"calc_value\": 4,\n        \"name\": \"ImGuiSelectableFlags_AllowDoubleClick\",\n        \"value\": \"1 << 2\"\n      },\n      {\n        \"calc_value\": 8,\n        \"name\": \"ImGuiSelectableFlags_Disabled\",\n        \"value\": \"1 << 3\"\n      },\n      {\n        \"calc_value\": 16,\n        \"name\": \"ImGuiSelectableFlags_AllowOverlap\",\n        \"value\": \"1 << 4\"\n      },\n      {\n        \"calc_value\": 32,\n        \"name\": \"ImGuiSelectableFlags_Highlight\",\n        \"value\": \"1 << 5\"\n      }\n    ],\n    \"ImGuiSelectionRequestType\": [\n      {\n        \"calc_value\": 0,\n        \"name\": \"ImGuiSelectionRequestType_None\",\n        \"value\": \"0\"\n      },\n      {\n        \"calc_value\": 1,\n        \"name\": \"ImGuiSelectionRequestType_SetAll\",\n        \"value\": \"1\"\n      },\n      {\n        \"calc_value\": 2,\n        \"name\": \"ImGuiSelectionRequestType_SetRange\",\n        \"value\": \"2\"\n      }\n    ],\n    \"ImGuiSeparatorFlags_\": [\n      {\n        \"calc_value\": 0,\n        \"name\": \"ImGuiSeparatorFlags_None\",\n        \"value\": \"0\"\n      },\n      {\n        \"calc_value\": 1,\n        \"name\": \"ImGuiSeparatorFlags_Horizontal\",\n        \"value\": \"1 << 0\"\n      },\n      {\n        \"calc_value\": 2,\n        \"name\": \"ImGuiSeparatorFlags_Vertical\",\n        \"value\": \"1 << 1\"\n      },\n      {\n        \"calc_value\": 4,\n        \"name\": \"ImGuiSeparatorFlags_SpanAllColumns\",\n        \"value\": \"1 << 2\"\n      }\n    ],\n    \"ImGuiSliderFlagsPrivate_\": [\n      {\n        \"calc_value\": 1048576,\n        \"name\": \"ImGuiSliderFlags_Vertical\",\n        \"value\": \"1 << 20\"\n      },\n      {\n        \"calc_value\": 2097152,\n        \"name\": \"ImGuiSliderFlags_ReadOnly\",\n        \"value\": \"1 << 21\"\n      }\n    ],\n    \"ImGuiSliderFlags_\": [\n      {\n        \"calc_value\": 0,\n        \"name\": \"ImGuiSliderFlags_None\",\n        \"value\": \"0\"\n      },\n      {\n        \"calc_value\": 32,\n        \"name\": \"ImGuiSliderFlags_Logarithmic\",\n        \"value\": \"1 << 5\"\n      },\n      {\n        \"calc_value\": 64,\n        \"name\": \"ImGuiSliderFlags_NoRoundToFormat\",\n        \"value\": \"1 << 6\"\n      },\n      {\n        \"calc_value\": 128,\n        \"name\": \"ImGuiSliderFlags_NoInput\",\n        \"value\": \"1 << 7\"\n      },\n      {\n        \"calc_value\": 256,\n        \"name\": \"ImGuiSliderFlags_WrapAround\",\n        \"value\": \"1 << 8\"\n      },\n      {\n        \"calc_value\": 512,\n        \"name\": \"ImGuiSliderFlags_ClampOnInput\",\n        \"value\": \"1 << 9\"\n      },\n      {\n        \"calc_value\": 1024,\n        \"name\": \"ImGuiSliderFlags_ClampZeroRange\",\n        \"value\": \"1 << 10\"\n      },\n      {\n        \"calc_value\": 2048,\n        \"name\": \"ImGuiSliderFlags_NoSpeedTweaks\",\n        \"value\": \"1 << 11\"\n      },\n      {\n        \"calc_value\": 1536,\n        \"name\": \"ImGuiSliderFlags_AlwaysClamp\",\n        \"value\": \"ImGuiSliderFlags_ClampOnInput | ImGuiSliderFlags_ClampZeroRange\"\n      },\n      {\n        \"calc_value\": 1879048207,\n        \"name\": \"ImGuiSliderFlags_InvalidMask_\",\n        \"value\": \"0x7000000F\"\n      }\n    ],\n    \"ImGuiSortDirection\": [\n      {\n        \"calc_value\": 0,\n        \"name\": \"ImGuiSortDirection_None\",\n        \"value\": \"0\"\n      },\n      {\n        \"calc_value\": 1,\n        \"name\": \"ImGuiSortDirection_Ascending\",\n        \"value\": \"1\"\n      },\n      {\n        \"calc_value\": 2,\n        \"name\": \"ImGuiSortDirection_Descending\",\n        \"value\": \"2\"\n      }\n    ],\n    \"ImGuiStyleVar_\": [\n      {\n        \"calc_value\": 0,\n        \"name\": \"ImGuiStyleVar_Alpha\",\n        \"value\": \"0\"\n      },\n      {\n        \"calc_value\": 1,\n        \"name\": \"ImGuiStyleVar_DisabledAlpha\",\n        \"value\": \"1\"\n      },\n      {\n        \"calc_value\": 2,\n        \"name\": \"ImGuiStyleVar_WindowPadding\",\n        \"value\": \"2\"\n      },\n      {\n        \"calc_value\": 3,\n        \"name\": \"ImGuiStyleVar_WindowRounding\",\n        \"value\": \"3\"\n      },\n      {\n        \"calc_value\": 4,\n        \"name\": \"ImGuiStyleVar_WindowBorderSize\",\n        \"value\": \"4\"\n      },\n      {\n        \"calc_value\": 5,\n        \"name\": \"ImGuiStyleVar_WindowMinSize\",\n        \"value\": \"5\"\n      },\n      {\n        \"calc_value\": 6,\n        \"name\": \"ImGuiStyleVar_WindowTitleAlign\",\n        \"value\": \"6\"\n      },\n      {\n        \"calc_value\": 7,\n        \"name\": \"ImGuiStyleVar_ChildRounding\",\n        \"value\": \"7\"\n      },\n      {\n        \"calc_value\": 8,\n        \"name\": \"ImGuiStyleVar_ChildBorderSize\",\n        \"value\": \"8\"\n      },\n      {\n        \"calc_value\": 9,\n        \"name\": \"ImGuiStyleVar_PopupRounding\",\n        \"value\": \"9\"\n      },\n      {\n        \"calc_value\": 10,\n        \"name\": \"ImGuiStyleVar_PopupBorderSize\",\n        \"value\": \"10\"\n      },\n      {\n        \"calc_value\": 11,\n        \"name\": \"ImGuiStyleVar_FramePadding\",\n        \"value\": \"11\"\n      },\n      {\n        \"calc_value\": 12,\n        \"name\": \"ImGuiStyleVar_FrameRounding\",\n        \"value\": \"12\"\n      },\n      {\n        \"calc_value\": 13,\n        \"name\": \"ImGuiStyleVar_FrameBorderSize\",\n        \"value\": \"13\"\n      },\n      {\n        \"calc_value\": 14,\n        \"name\": \"ImGuiStyleVar_ItemSpacing\",\n        \"value\": \"14\"\n      },\n      {\n        \"calc_value\": 15,\n        \"name\": \"ImGuiStyleVar_ItemInnerSpacing\",\n        \"value\": \"15\"\n      },\n      {\n        \"calc_value\": 16,\n        \"name\": \"ImGuiStyleVar_IndentSpacing\",\n        \"value\": \"16\"\n      },\n      {\n        \"calc_value\": 17,\n        \"name\": \"ImGuiStyleVar_CellPadding\",\n        \"value\": \"17\"\n      },\n      {\n        \"calc_value\": 18,\n        \"name\": \"ImGuiStyleVar_ScrollbarSize\",\n        \"value\": \"18\"\n      },\n      {\n        \"calc_value\": 19,\n        \"name\": \"ImGuiStyleVar_ScrollbarRounding\",\n        \"value\": \"19\"\n      },\n      {\n        \"calc_value\": 20,\n        \"name\": \"ImGuiStyleVar_GrabMinSize\",\n        \"value\": \"20\"\n      },\n      {\n        \"calc_value\": 21,\n        \"name\": \"ImGuiStyleVar_GrabRounding\",\n        \"value\": \"21\"\n      },\n      {\n        \"calc_value\": 22,\n        \"name\": \"ImGuiStyleVar_TabRounding\",\n        \"value\": \"22\"\n      },\n      {\n        \"calc_value\": 23,\n        \"name\": \"ImGuiStyleVar_TabBorderSize\",\n        \"value\": \"23\"\n      },\n      {\n        \"calc_value\": 24,\n        \"name\": \"ImGuiStyleVar_TabBarBorderSize\",\n        \"value\": \"24\"\n      },\n      {\n        \"calc_value\": 25,\n        \"name\": \"ImGuiStyleVar_TabBarOverlineSize\",\n        \"value\": \"25\"\n      },\n      {\n        \"calc_value\": 26,\n        \"name\": \"ImGuiStyleVar_TableAngledHeadersAngle\",\n        \"value\": \"26\"\n      },\n      {\n        \"calc_value\": 27,\n        \"name\": \"ImGuiStyleVar_TableAngledHeadersTextAlign\",\n        \"value\": \"27\"\n      },\n      {\n        \"calc_value\": 28,\n        \"name\": \"ImGuiStyleVar_ButtonTextAlign\",\n        \"value\": \"28\"\n      },\n      {\n        \"calc_value\": 29,\n        \"name\": \"ImGuiStyleVar_SelectableTextAlign\",\n        \"value\": \"29\"\n      },\n      {\n        \"calc_value\": 30,\n        \"name\": \"ImGuiStyleVar_SeparatorTextBorderSize\",\n        \"value\": \"30\"\n      },\n      {\n        \"calc_value\": 31,\n        \"name\": \"ImGuiStyleVar_SeparatorTextAlign\",\n        \"value\": \"31\"\n      },\n      {\n        \"calc_value\": 32,\n        \"name\": \"ImGuiStyleVar_SeparatorTextPadding\",\n        \"value\": \"32\"\n      },\n      {\n        \"calc_value\": 33,\n        \"name\": \"ImGuiStyleVar_COUNT\",\n        \"value\": \"33\"\n      }\n    ],\n    \"ImGuiTabBarFlagsPrivate_\": [\n      {\n        \"calc_value\": 1048576,\n        \"name\": \"ImGuiTabBarFlags_DockNode\",\n        \"value\": \"1 << 20\"\n      },\n      {\n        \"calc_value\": 2097152,\n        \"name\": \"ImGuiTabBarFlags_IsFocused\",\n        \"value\": \"1 << 21\"\n      },\n      {\n        \"calc_value\": 4194304,\n        \"name\": \"ImGuiTabBarFlags_SaveSettings\",\n        \"value\": \"1 << 22\"\n      }\n    ],\n    \"ImGuiTabBarFlags_\": [\n      {\n        \"calc_value\": 0,\n        \"name\": \"ImGuiTabBarFlags_None\",\n        \"value\": \"0\"\n      },\n      {\n        \"calc_value\": 1,\n        \"name\": \"ImGuiTabBarFlags_Reorderable\",\n        \"value\": \"1 << 0\"\n      },\n      {\n        \"calc_value\": 2,\n        \"name\": \"ImGuiTabBarFlags_AutoSelectNewTabs\",\n        \"value\": \"1 << 1\"\n      },\n      {\n        \"calc_value\": 4,\n        \"name\": \"ImGuiTabBarFlags_TabListPopupButton\",\n        \"value\": \"1 << 2\"\n      },\n      {\n        \"calc_value\": 8,\n        \"name\": \"ImGuiTabBarFlags_NoCloseWithMiddleMouseButton\",\n        \"value\": \"1 << 3\"\n      },\n      {\n        \"calc_value\": 16,\n        \"name\": \"ImGuiTabBarFlags_NoTabListScrollingButtons\",\n        \"value\": \"1 << 4\"\n      },\n      {\n        \"calc_value\": 32,\n        \"name\": \"ImGuiTabBarFlags_NoTooltip\",\n        \"value\": \"1 << 5\"\n      },\n      {\n        \"calc_value\": 64,\n        \"name\": \"ImGuiTabBarFlags_DrawSelectedOverline\",\n        \"value\": \"1 << 6\"\n      },\n      {\n        \"calc_value\": 128,\n        \"name\": \"ImGuiTabBarFlags_FittingPolicyResizeDown\",\n        \"value\": \"1 << 7\"\n      },\n      {\n        \"calc_value\": 256,\n        \"name\": \"ImGuiTabBarFlags_FittingPolicyScroll\",\n        \"value\": \"1 << 8\"\n      },\n      {\n        \"calc_value\": 384,\n        \"name\": \"ImGuiTabBarFlags_FittingPolicyMask_\",\n        \"value\": \"ImGuiTabBarFlags_FittingPolicyResizeDown | ImGuiTabBarFlags_FittingPolicyScroll\"\n      },\n      {\n        \"calc_value\": 128,\n        \"name\": \"ImGuiTabBarFlags_FittingPolicyDefault_\",\n        \"value\": \"ImGuiTabBarFlags_FittingPolicyResizeDown\"\n      }\n    ],\n    \"ImGuiTabItemFlagsPrivate_\": [\n      {\n        \"calc_value\": 192,\n        \"name\": \"ImGuiTabItemFlags_SectionMask_\",\n        \"value\": \"ImGuiTabItemFlags_Leading | ImGuiTabItemFlags_Trailing\"\n      },\n      {\n        \"calc_value\": 1048576,\n        \"name\": \"ImGuiTabItemFlags_NoCloseButton\",\n        \"value\": \"1 << 20\"\n      },\n      {\n        \"calc_value\": 2097152,\n        \"name\": \"ImGuiTabItemFlags_Button\",\n        \"value\": \"1 << 21\"\n      }\n    ],\n    \"ImGuiTabItemFlags_\": [\n      {\n        \"calc_value\": 0,\n        \"name\": \"ImGuiTabItemFlags_None\",\n        \"value\": \"0\"\n      },\n      {\n        \"calc_value\": 1,\n        \"name\": \"ImGuiTabItemFlags_UnsavedDocument\",\n        \"value\": \"1 << 0\"\n      },\n      {\n        \"calc_value\": 2,\n        \"name\": \"ImGuiTabItemFlags_SetSelected\",\n        \"value\": \"1 << 1\"\n      },\n      {\n        \"calc_value\": 4,\n        \"name\": \"ImGuiTabItemFlags_NoCloseWithMiddleMouseButton\",\n        \"value\": \"1 << 2\"\n      },\n      {\n        \"calc_value\": 8,\n        \"name\": \"ImGuiTabItemFlags_NoPushId\",\n        \"value\": \"1 << 3\"\n      },\n      {\n        \"calc_value\": 16,\n        \"name\": \"ImGuiTabItemFlags_NoTooltip\",\n        \"value\": \"1 << 4\"\n      },\n      {\n        \"calc_value\": 32,\n        \"name\": \"ImGuiTabItemFlags_NoReorder\",\n        \"value\": \"1 << 5\"\n      },\n      {\n        \"calc_value\": 64,\n        \"name\": \"ImGuiTabItemFlags_Leading\",\n        \"value\": \"1 << 6\"\n      },\n      {\n        \"calc_value\": 128,\n        \"name\": \"ImGuiTabItemFlags_Trailing\",\n        \"value\": \"1 << 7\"\n      },\n      {\n        \"calc_value\": 256,\n        \"name\": \"ImGuiTabItemFlags_NoAssumedClosure\",\n        \"value\": \"1 << 8\"\n      }\n    ],\n    \"ImGuiTableBgTarget_\": [\n      {\n        \"calc_value\": 0,\n        \"name\": \"ImGuiTableBgTarget_None\",\n        \"value\": \"0\"\n      },\n      {\n        \"calc_value\": 1,\n        \"name\": \"ImGuiTableBgTarget_RowBg0\",\n        \"value\": \"1\"\n      },\n      {\n        \"calc_value\": 2,\n        \"name\": \"ImGuiTableBgTarget_RowBg1\",\n        \"value\": \"2\"\n      },\n      {\n        \"calc_value\": 3,\n        \"name\": \"ImGuiTableBgTarget_CellBg\",\n        \"value\": \"3\"\n      }\n    ],\n    \"ImGuiTableColumnFlags_\": [\n      {\n        \"calc_value\": 0,\n        \"name\": \"ImGuiTableColumnFlags_None\",\n        \"value\": \"0\"\n      },\n      {\n        \"calc_value\": 1,\n        \"name\": \"ImGuiTableColumnFlags_Disabled\",\n        \"value\": \"1 << 0\"\n      },\n      {\n        \"calc_value\": 2,\n        \"name\": \"ImGuiTableColumnFlags_DefaultHide\",\n        \"value\": \"1 << 1\"\n      },\n      {\n        \"calc_value\": 4,\n        \"name\": \"ImGuiTableColumnFlags_DefaultSort\",\n        \"value\": \"1 << 2\"\n      },\n      {\n        \"calc_value\": 8,\n        \"name\": \"ImGuiTableColumnFlags_WidthStretch\",\n        \"value\": \"1 << 3\"\n      },\n      {\n        \"calc_value\": 16,\n        \"name\": \"ImGuiTableColumnFlags_WidthFixed\",\n        \"value\": \"1 << 4\"\n      },\n      {\n        \"calc_value\": 32,\n        \"name\": \"ImGuiTableColumnFlags_NoResize\",\n        \"value\": \"1 << 5\"\n      },\n      {\n        \"calc_value\": 64,\n        \"name\": \"ImGuiTableColumnFlags_NoReorder\",\n        \"value\": \"1 << 6\"\n      },\n      {\n        \"calc_value\": 128,\n        \"name\": \"ImGuiTableColumnFlags_NoHide\",\n        \"value\": \"1 << 7\"\n      },\n      {\n        \"calc_value\": 256,\n        \"name\": \"ImGuiTableColumnFlags_NoClip\",\n        \"value\": \"1 << 8\"\n      },\n      {\n        \"calc_value\": 512,\n        \"name\": \"ImGuiTableColumnFlags_NoSort\",\n        \"value\": \"1 << 9\"\n      },\n      {\n        \"calc_value\": 1024,\n        \"name\": \"ImGuiTableColumnFlags_NoSortAscending\",\n        \"value\": \"1 << 10\"\n      },\n      {\n        \"calc_value\": 2048,\n        \"name\": \"ImGuiTableColumnFlags_NoSortDescending\",\n        \"value\": \"1 << 11\"\n      },\n      {\n        \"calc_value\": 4096,\n        \"name\": \"ImGuiTableColumnFlags_NoHeaderLabel\",\n        \"value\": \"1 << 12\"\n      },\n      {\n        \"calc_value\": 8192,\n        \"name\": \"ImGuiTableColumnFlags_NoHeaderWidth\",\n        \"value\": \"1 << 13\"\n      },\n      {\n        \"calc_value\": 16384,\n        \"name\": \"ImGuiTableColumnFlags_PreferSortAscending\",\n        \"value\": \"1 << 14\"\n      },\n      {\n        \"calc_value\": 32768,\n        \"name\": \"ImGuiTableColumnFlags_PreferSortDescending\",\n        \"value\": \"1 << 15\"\n      },\n      {\n        \"calc_value\": 65536,\n        \"name\": \"ImGuiTableColumnFlags_IndentEnable\",\n        \"value\": \"1 << 16\"\n      },\n      {\n        \"calc_value\": 131072,\n        \"name\": \"ImGuiTableColumnFlags_IndentDisable\",\n        \"value\": \"1 << 17\"\n      },\n      {\n        \"calc_value\": 262144,\n        \"name\": \"ImGuiTableColumnFlags_AngledHeader\",\n        \"value\": \"1 << 18\"\n      },\n      {\n        \"calc_value\": 16777216,\n        \"name\": \"ImGuiTableColumnFlags_IsEnabled\",\n        \"value\": \"1 << 24\"\n      },\n      {\n        \"calc_value\": 33554432,\n        \"name\": \"ImGuiTableColumnFlags_IsVisible\",\n        \"value\": \"1 << 25\"\n      },\n      {\n        \"calc_value\": 67108864,\n        \"name\": \"ImGuiTableColumnFlags_IsSorted\",\n        \"value\": \"1 << 26\"\n      },\n      {\n        \"calc_value\": 134217728,\n        \"name\": \"ImGuiTableColumnFlags_IsHovered\",\n        \"value\": \"1 << 27\"\n      },\n      {\n        \"calc_value\": 24,\n        \"name\": \"ImGuiTableColumnFlags_WidthMask_\",\n        \"value\": \"ImGuiTableColumnFlags_WidthStretch | ImGuiTableColumnFlags_WidthFixed\"\n      },\n      {\n        \"calc_value\": 196608,\n        \"name\": \"ImGuiTableColumnFlags_IndentMask_\",\n        \"value\": \"ImGuiTableColumnFlags_IndentEnable | ImGuiTableColumnFlags_IndentDisable\"\n      },\n      {\n        \"calc_value\": 251658240,\n        \"name\": \"ImGuiTableColumnFlags_StatusMask_\",\n        \"value\": \"ImGuiTableColumnFlags_IsEnabled | ImGuiTableColumnFlags_IsVisible | ImGuiTableColumnFlags_IsSorted | ImGuiTableColumnFlags_IsHovered\"\n      },\n      {\n        \"calc_value\": 1073741824,\n        \"name\": \"ImGuiTableColumnFlags_NoDirectResize_\",\n        \"value\": \"1 << 30\"\n      }\n    ],\n    \"ImGuiTableFlags_\": [\n      {\n        \"calc_value\": 0,\n        \"name\": \"ImGuiTableFlags_None\",\n        \"value\": \"0\"\n      },\n      {\n        \"calc_value\": 1,\n        \"name\": \"ImGuiTableFlags_Resizable\",\n        \"value\": \"1 << 0\"\n      },\n      {\n        \"calc_value\": 2,\n        \"name\": \"ImGuiTableFlags_Reorderable\",\n        \"value\": \"1 << 1\"\n      },\n      {\n        \"calc_value\": 4,\n        \"name\": \"ImGuiTableFlags_Hideable\",\n        \"value\": \"1 << 2\"\n      },\n      {\n        \"calc_value\": 8,\n        \"name\": \"ImGuiTableFlags_Sortable\",\n        \"value\": \"1 << 3\"\n      },\n      {\n        \"calc_value\": 16,\n        \"name\": \"ImGuiTableFlags_NoSavedSettings\",\n        \"value\": \"1 << 4\"\n      },\n      {\n        \"calc_value\": 32,\n        \"name\": \"ImGuiTableFlags_ContextMenuInBody\",\n        \"value\": \"1 << 5\"\n      },\n      {\n        \"calc_value\": 64,\n        \"name\": \"ImGuiTableFlags_RowBg\",\n        \"value\": \"1 << 6\"\n      },\n      {\n        \"calc_value\": 128,\n        \"name\": \"ImGuiTableFlags_BordersInnerH\",\n        \"value\": \"1 << 7\"\n      },\n      {\n        \"calc_value\": 256,\n        \"name\": \"ImGuiTableFlags_BordersOuterH\",\n        \"value\": \"1 << 8\"\n      },\n      {\n        \"calc_value\": 512,\n        \"name\": \"ImGuiTableFlags_BordersInnerV\",\n        \"value\": \"1 << 9\"\n      },\n      {\n        \"calc_value\": 1024,\n        \"name\": \"ImGuiTableFlags_BordersOuterV\",\n        \"value\": \"1 << 10\"\n      },\n      {\n        \"calc_value\": 384,\n        \"name\": \"ImGuiTableFlags_BordersH\",\n        \"value\": \"ImGuiTableFlags_BordersInnerH | ImGuiTableFlags_BordersOuterH\"\n      },\n      {\n        \"calc_value\": 1536,\n        \"name\": \"ImGuiTableFlags_BordersV\",\n        \"value\": \"ImGuiTableFlags_BordersInnerV | ImGuiTableFlags_BordersOuterV\"\n      },\n      {\n        \"calc_value\": 640,\n        \"name\": \"ImGuiTableFlags_BordersInner\",\n        \"value\": \"ImGuiTableFlags_BordersInnerV | ImGuiTableFlags_BordersInnerH\"\n      },\n      {\n        \"calc_value\": 1280,\n        \"name\": \"ImGuiTableFlags_BordersOuter\",\n        \"value\": \"ImGuiTableFlags_BordersOuterV | ImGuiTableFlags_BordersOuterH\"\n      },\n      {\n        \"calc_value\": 1920,\n        \"name\": \"ImGuiTableFlags_Borders\",\n        \"value\": \"ImGuiTableFlags_BordersInner | ImGuiTableFlags_BordersOuter\"\n      },\n      {\n        \"calc_value\": 2048,\n        \"name\": \"ImGuiTableFlags_NoBordersInBody\",\n        \"value\": \"1 << 11\"\n      },\n      {\n        \"calc_value\": 4096,\n        \"name\": \"ImGuiTableFlags_NoBordersInBodyUntilResize\",\n        \"value\": \"1 << 12\"\n      },\n      {\n        \"calc_value\": 8192,\n        \"name\": \"ImGuiTableFlags_SizingFixedFit\",\n        \"value\": \"1 << 13\"\n      },\n      {\n        \"calc_value\": 16384,\n        \"name\": \"ImGuiTableFlags_SizingFixedSame\",\n        \"value\": \"2 << 13\"\n      },\n      {\n        \"calc_value\": 24576,\n        \"name\": \"ImGuiTableFlags_SizingStretchProp\",\n        \"value\": \"3 << 13\"\n      },\n      {\n        \"calc_value\": 32768,\n        \"name\": \"ImGuiTableFlags_SizingStretchSame\",\n        \"value\": \"4 << 13\"\n      },\n      {\n        \"calc_value\": 65536,\n        \"name\": \"ImGuiTableFlags_NoHostExtendX\",\n        \"value\": \"1 << 16\"\n      },\n      {\n        \"calc_value\": 131072,\n        \"name\": \"ImGuiTableFlags_NoHostExtendY\",\n        \"value\": \"1 << 17\"\n      },\n      {\n        \"calc_value\": 262144,\n        \"name\": \"ImGuiTableFlags_NoKeepColumnsVisible\",\n        \"value\": \"1 << 18\"\n      },\n      {\n        \"calc_value\": 524288,\n        \"name\": \"ImGuiTableFlags_PreciseWidths\",\n        \"value\": \"1 << 19\"\n      },\n      {\n        \"calc_value\": 1048576,\n        \"name\": \"ImGuiTableFlags_NoClip\",\n        \"value\": \"1 << 20\"\n      },\n      {\n        \"calc_value\": 2097152,\n        \"name\": \"ImGuiTableFlags_PadOuterX\",\n        \"value\": \"1 << 21\"\n      },\n      {\n        \"calc_value\": 4194304,\n        \"name\": \"ImGuiTableFlags_NoPadOuterX\",\n        \"value\": \"1 << 22\"\n      },\n      {\n        \"calc_value\": 8388608,\n        \"name\": \"ImGuiTableFlags_NoPadInnerX\",\n        \"value\": \"1 << 23\"\n      },\n      {\n        \"calc_value\": 16777216,\n        \"name\": \"ImGuiTableFlags_ScrollX\",\n        \"value\": \"1 << 24\"\n      },\n      {\n        \"calc_value\": 33554432,\n        \"name\": \"ImGuiTableFlags_ScrollY\",\n        \"value\": \"1 << 25\"\n      },\n      {\n        \"calc_value\": 67108864,\n        \"name\": \"ImGuiTableFlags_SortMulti\",\n        \"value\": \"1 << 26\"\n      },\n      {\n        \"calc_value\": 134217728,\n        \"name\": \"ImGuiTableFlags_SortTristate\",\n        \"value\": \"1 << 27\"\n      },\n      {\n        \"calc_value\": 268435456,\n        \"name\": \"ImGuiTableFlags_HighlightHoveredColumn\",\n        \"value\": \"1 << 28\"\n      },\n      {\n        \"calc_value\": 57344,\n        \"name\": \"ImGuiTableFlags_SizingMask_\",\n        \"value\": \"ImGuiTableFlags_SizingFixedFit | ImGuiTableFlags_SizingFixedSame | ImGuiTableFlags_SizingStretchProp | ImGuiTableFlags_SizingStretchSame\"\n      }\n    ],\n    \"ImGuiTableRowFlags_\": [\n      {\n        \"calc_value\": 0,\n        \"name\": \"ImGuiTableRowFlags_None\",\n        \"value\": \"0\"\n      },\n      {\n        \"calc_value\": 1,\n        \"name\": \"ImGuiTableRowFlags_Headers\",\n        \"value\": \"1 << 0\"\n      }\n    ],\n    \"ImGuiTextFlags_\": [\n      {\n        \"calc_value\": 0,\n        \"name\": \"ImGuiTextFlags_None\",\n        \"value\": \"0\"\n      },\n      {\n        \"calc_value\": 1,\n        \"name\": \"ImGuiTextFlags_NoWidthForLargeClippedText\",\n        \"value\": \"1 << 0\"\n      }\n    ],\n    \"ImGuiTooltipFlags_\": [\n      {\n        \"calc_value\": 0,\n        \"name\": \"ImGuiTooltipFlags_None\",\n        \"value\": \"0\"\n      },\n      {\n        \"calc_value\": 2,\n        \"name\": \"ImGuiTooltipFlags_OverridePrevious\",\n        \"value\": \"1 << 1\"\n      }\n    ],\n    \"ImGuiTreeNodeFlagsPrivate_\": [\n      {\n        \"calc_value\": 268435456,\n        \"name\": \"ImGuiTreeNodeFlags_ClipLabelForTrailingButton\",\n        \"value\": \"1 << 28\"\n      },\n      {\n        \"calc_value\": 536870912,\n        \"name\": \"ImGuiTreeNodeFlags_UpsideDownArrow\",\n        \"value\": \"1 << 29\"\n      },\n      {\n        \"calc_value\": 192,\n        \"name\": \"ImGuiTreeNodeFlags_OpenOnMask_\",\n        \"value\": \"ImGuiTreeNodeFlags_OpenOnDoubleClick | ImGuiTreeNodeFlags_OpenOnArrow\"\n      }\n    ],\n    \"ImGuiTreeNodeFlags_\": [\n      {\n        \"calc_value\": 0,\n        \"name\": \"ImGuiTreeNodeFlags_None\",\n        \"value\": \"0\"\n      },\n      {\n        \"calc_value\": 1,\n        \"name\": \"ImGuiTreeNodeFlags_Selected\",\n        \"value\": \"1 << 0\"\n      },\n      {\n        \"calc_value\": 2,\n        \"name\": \"ImGuiTreeNodeFlags_Framed\",\n        \"value\": \"1 << 1\"\n      },\n      {\n        \"calc_value\": 4,\n        \"name\": \"ImGuiTreeNodeFlags_AllowOverlap\",\n        \"value\": \"1 << 2\"\n      },\n      {\n        \"calc_value\": 8,\n        \"name\": \"ImGuiTreeNodeFlags_NoTreePushOnOpen\",\n        \"value\": \"1 << 3\"\n      },\n      {\n        \"calc_value\": 16,\n        \"name\": \"ImGuiTreeNodeFlags_NoAutoOpenOnLog\",\n        \"value\": \"1 << 4\"\n      },\n      {\n        \"calc_value\": 32,\n        \"name\": \"ImGuiTreeNodeFlags_DefaultOpen\",\n        \"value\": \"1 << 5\"\n      },\n      {\n        \"calc_value\": 64,\n        \"name\": \"ImGuiTreeNodeFlags_OpenOnDoubleClick\",\n        \"value\": \"1 << 6\"\n      },\n      {\n        \"calc_value\": 128,\n        \"name\": \"ImGuiTreeNodeFlags_OpenOnArrow\",\n        \"value\": \"1 << 7\"\n      },\n      {\n        \"calc_value\": 256,\n        \"name\": \"ImGuiTreeNodeFlags_Leaf\",\n        \"value\": \"1 << 8\"\n      },\n      {\n        \"calc_value\": 512,\n        \"name\": \"ImGuiTreeNodeFlags_Bullet\",\n        \"value\": \"1 << 9\"\n      },\n      {\n        \"calc_value\": 1024,\n        \"name\": \"ImGuiTreeNodeFlags_FramePadding\",\n        \"value\": \"1 << 10\"\n      },\n      {\n        \"calc_value\": 2048,\n        \"name\": \"ImGuiTreeNodeFlags_SpanAvailWidth\",\n        \"value\": \"1 << 11\"\n      },\n      {\n        \"calc_value\": 4096,\n        \"name\": \"ImGuiTreeNodeFlags_SpanFullWidth\",\n        \"value\": \"1 << 12\"\n      },\n      {\n        \"calc_value\": 8192,\n        \"name\": \"ImGuiTreeNodeFlags_SpanLabelWidth\",\n        \"value\": \"1 << 13\"\n      },\n      {\n        \"calc_value\": 16384,\n        \"name\": \"ImGuiTreeNodeFlags_SpanAllColumns\",\n        \"value\": \"1 << 14\"\n      },\n      {\n        \"calc_value\": 32768,\n        \"name\": \"ImGuiTreeNodeFlags_LabelSpanAllColumns\",\n        \"value\": \"1 << 15\"\n      },\n      {\n        \"calc_value\": 131072,\n        \"name\": \"ImGuiTreeNodeFlags_NavLeftJumpsBackHere\",\n        \"value\": \"1 << 17\"\n      },\n      {\n        \"calc_value\": 26,\n        \"name\": \"ImGuiTreeNodeFlags_CollapsingHeader\",\n        \"value\": \"ImGuiTreeNodeFlags_Framed | ImGuiTreeNodeFlags_NoTreePushOnOpen | ImGuiTreeNodeFlags_NoAutoOpenOnLog\"\n      }\n    ],\n    \"ImGuiTypingSelectFlags_\": [\n      {\n        \"calc_value\": 0,\n        \"name\": \"ImGuiTypingSelectFlags_None\",\n        \"value\": \"0\"\n      },\n      {\n        \"calc_value\": 1,\n        \"name\": \"ImGuiTypingSelectFlags_AllowBackspace\",\n        \"value\": \"1 << 0\"\n      },\n      {\n        \"calc_value\": 2,\n        \"name\": \"ImGuiTypingSelectFlags_AllowSingleCharMode\",\n        \"value\": \"1 << 1\"\n      }\n    ],\n    \"ImGuiViewportFlags_\": [\n      {\n        \"calc_value\": 0,\n        \"name\": \"ImGuiViewportFlags_None\",\n        \"value\": \"0\"\n      },\n      {\n        \"calc_value\": 1,\n        \"name\": \"ImGuiViewportFlags_IsPlatformWindow\",\n        \"value\": \"1 << 0\"\n      },\n      {\n        \"calc_value\": 2,\n        \"name\": \"ImGuiViewportFlags_IsPlatformMonitor\",\n        \"value\": \"1 << 1\"\n      },\n      {\n        \"calc_value\": 4,\n        \"name\": \"ImGuiViewportFlags_OwnedByApp\",\n        \"value\": \"1 << 2\"\n      }\n    ],\n    \"ImGuiWindowFlags_\": [\n      {\n        \"calc_value\": 0,\n        \"name\": \"ImGuiWindowFlags_None\",\n        \"value\": \"0\"\n      },\n      {\n        \"calc_value\": 1,\n        \"name\": \"ImGuiWindowFlags_NoTitleBar\",\n        \"value\": \"1 << 0\"\n      },\n      {\n        \"calc_value\": 2,\n        \"name\": \"ImGuiWindowFlags_NoResize\",\n        \"value\": \"1 << 1\"\n      },\n      {\n        \"calc_value\": 4,\n        \"name\": \"ImGuiWindowFlags_NoMove\",\n        \"value\": \"1 << 2\"\n      },\n      {\n        \"calc_value\": 8,\n        \"name\": \"ImGuiWindowFlags_NoScrollbar\",\n        \"value\": \"1 << 3\"\n      },\n      {\n        \"calc_value\": 16,\n        \"name\": \"ImGuiWindowFlags_NoScrollWithMouse\",\n        \"value\": \"1 << 4\"\n      },\n      {\n        \"calc_value\": 32,\n        \"name\": \"ImGuiWindowFlags_NoCollapse\",\n        \"value\": \"1 << 5\"\n      },\n      {\n        \"calc_value\": 64,\n        \"name\": \"ImGuiWindowFlags_AlwaysAutoResize\",\n        \"value\": \"1 << 6\"\n      },\n      {\n        \"calc_value\": 128,\n        \"name\": \"ImGuiWindowFlags_NoBackground\",\n        \"value\": \"1 << 7\"\n      },\n      {\n        \"calc_value\": 256,\n        \"name\": \"ImGuiWindowFlags_NoSavedSettings\",\n        \"value\": \"1 << 8\"\n      },\n      {\n        \"calc_value\": 512,\n        \"name\": \"ImGuiWindowFlags_NoMouseInputs\",\n        \"value\": \"1 << 9\"\n      },\n      {\n        \"calc_value\": 1024,\n        \"name\": \"ImGuiWindowFlags_MenuBar\",\n        \"value\": \"1 << 10\"\n      },\n      {\n        \"calc_value\": 2048,\n        \"name\": \"ImGuiWindowFlags_HorizontalScrollbar\",\n        \"value\": \"1 << 11\"\n      },\n      {\n        \"calc_value\": 4096,\n        \"name\": \"ImGuiWindowFlags_NoFocusOnAppearing\",\n        \"value\": \"1 << 12\"\n      },\n      {\n        \"calc_value\": 8192,\n        \"name\": \"ImGuiWindowFlags_NoBringToFrontOnFocus\",\n        \"value\": \"1 << 13\"\n      },\n      {\n        \"calc_value\": 16384,\n        \"name\": \"ImGuiWindowFlags_AlwaysVerticalScrollbar\",\n        \"value\": \"1 << 14\"\n      },\n      {\n        \"calc_value\": 32768,\n        \"name\": \"ImGuiWindowFlags_AlwaysHorizontalScrollbar\",\n        \"value\": \"1<< 15\"\n      },\n      {\n        \"calc_value\": 65536,\n        \"name\": \"ImGuiWindowFlags_NoNavInputs\",\n        \"value\": \"1 << 16\"\n      },\n      {\n        \"calc_value\": 131072,\n        \"name\": \"ImGuiWindowFlags_NoNavFocus\",\n        \"value\": \"1 << 17\"\n      },\n      {\n        \"calc_value\": 262144,\n        \"name\": \"ImGuiWindowFlags_UnsavedDocument\",\n        \"value\": \"1 << 18\"\n      },\n      {\n        \"calc_value\": 196608,\n        \"name\": \"ImGuiWindowFlags_NoNav\",\n        \"value\": \"ImGuiWindowFlags_NoNavInputs | ImGuiWindowFlags_NoNavFocus\"\n      },\n      {\n        \"calc_value\": 43,\n        \"name\": \"ImGuiWindowFlags_NoDecoration\",\n        \"value\": \"ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_NoCollapse\"\n      },\n      {\n        \"calc_value\": 197120,\n        \"name\": \"ImGuiWindowFlags_NoInputs\",\n        \"value\": \"ImGuiWindowFlags_NoMouseInputs | ImGuiWindowFlags_NoNavInputs | ImGuiWindowFlags_NoNavFocus\"\n      },\n      {\n        \"calc_value\": 16777216,\n        \"name\": \"ImGuiWindowFlags_ChildWindow\",\n        \"value\": \"1 << 24\"\n      },\n      {\n        \"calc_value\": 33554432,\n        \"name\": \"ImGuiWindowFlags_Tooltip\",\n        \"value\": \"1 << 25\"\n      },\n      {\n        \"calc_value\": 67108864,\n        \"name\": \"ImGuiWindowFlags_Popup\",\n        \"value\": \"1 << 26\"\n      },\n      {\n        \"calc_value\": 134217728,\n        \"name\": \"ImGuiWindowFlags_Modal\",\n        \"value\": \"1 << 27\"\n      },\n      {\n        \"calc_value\": 268435456,\n        \"name\": \"ImGuiWindowFlags_ChildMenu\",\n        \"value\": \"1 << 28\"\n      }\n    ],\n    \"ImGuiWindowRefreshFlags_\": [\n      {\n        \"calc_value\": 0,\n        \"name\": \"ImGuiWindowRefreshFlags_None\",\n        \"value\": \"0\"\n      },\n      {\n        \"calc_value\": 1,\n        \"name\": \"ImGuiWindowRefreshFlags_TryToAvoidRefresh\",\n        \"value\": \"1 << 0\"\n      },\n      {\n        \"calc_value\": 2,\n        \"name\": \"ImGuiWindowRefreshFlags_RefreshOnHover\",\n        \"value\": \"1 << 1\"\n      },\n      {\n        \"calc_value\": 4,\n        \"name\": \"ImGuiWindowRefreshFlags_RefreshOnFocus\",\n        \"value\": \"1 << 2\"\n      }\n    ]\n  },\n  \"enumtypes\": {\n    \"ImGuiDir\": \"int\",\n    \"ImGuiKey\": \"int\",\n    \"ImGuiLocKey\": \"int\",\n    \"ImGuiMouseSource\": \"int\",\n    \"ImGuiSortDirection\": \"ImU8\"\n  },\n  \"locations\": {\n    \"ImBitVector\": \"imgui_internal:605\",\n    \"ImColor\": \"imgui:2754\",\n    \"ImDrawChannel\": \"imgui:2994\",\n    \"ImDrawCmd\": \"imgui:2951\",\n    \"ImDrawCmdHeader\": \"imgui:2986\",\n    \"ImDrawData\": \"imgui:3211\",\n    \"ImDrawDataBuilder\": \"imgui_internal:794\",\n    \"ImDrawFlags_\": \"imgui:3020\",\n    \"ImDrawList\": \"imgui:3058\",\n    \"ImDrawListFlags_\": \"imgui:3040\",\n    \"ImDrawListSharedData\": \"imgui_internal:772\",\n    \"ImDrawListSplitter\": \"imgui:3003\",\n    \"ImDrawVert\": \"imgui:2971\",\n    \"ImFont\": \"imgui:3437\",\n    \"ImFontAtlas\": \"imgui:3333\",\n    \"ImFontAtlasCustomRect\": \"imgui:3292\",\n    \"ImFontAtlasFlags_\": \"imgui:3308\",\n    \"ImFontBuilderIO\": \"imgui_internal:3546\",\n    \"ImFontConfig\": \"imgui:3235\",\n    \"ImFontGlyph\": \"imgui:3265\",\n    \"ImFontGlyphRangesBuilder\": \"imgui:3277\",\n    \"ImGuiActivateFlags_\": \"imgui_internal:1551\",\n    \"ImGuiAxis\": \"imgui_internal:1019\",\n    \"ImGuiBackendFlags_\": \"imgui:1603\",\n    \"ImGuiBoxSelectState\": \"imgui_internal:1740\",\n    \"ImGuiButtonFlagsPrivate_\": \"imgui_internal:909\",\n    \"ImGuiButtonFlags_\": \"imgui:1729\",\n    \"ImGuiChildFlags_\": \"imgui:1116\",\n    \"ImGuiCol_\": \"imgui:1613\",\n    \"ImGuiColorEditFlags_\": \"imgui:1740\",\n    \"ImGuiColorMod\": \"imgui_internal:1033\",\n    \"ImGuiComboFlagsPrivate_\": \"imgui_internal:934\",\n    \"ImGuiComboFlags_\": \"imgui:1264\",\n    \"ImGuiComboPreviewData\": \"imgui_internal:1050\",\n    \"ImGuiCond_\": \"imgui:1842\",\n    \"ImGuiConfigFlags_\": \"imgui:1583\",\n    \"ImGuiContext\": \"imgui_internal:2040\",\n    \"ImGuiContextHook\": \"imgui_internal:2025\",\n    \"ImGuiContextHookType\": \"imgui_internal:2023\",\n    \"ImGuiDataTypeInfo\": \"imgui_internal:820\",\n    \"ImGuiDataTypePrivate_\": \"imgui_internal:829\",\n    \"ImGuiDataTypeStorage\": \"imgui_internal:814\",\n    \"ImGuiDataType_\": \"imgui:1391\",\n    \"ImGuiDataVarInfo\": \"imgui_internal:806\",\n    \"ImGuiDeactivatedItemData\": \"imgui_internal:1319\",\n    \"ImGuiDebugAllocEntry\": \"imgui_internal:1960\",\n    \"ImGuiDebugAllocInfo\": \"imgui_internal:1967\",\n    \"ImGuiDebugLogFlags_\": \"imgui_internal:1938\",\n    \"ImGuiDir\": \"imgui:1409\",\n    \"ImGuiDragDropFlags_\": \"imgui:1363\",\n    \"ImGuiErrorRecoveryState\": \"imgui_internal:1276\",\n    \"ImGuiFocusRequestFlags_\": \"imgui_internal:979\",\n    \"ImGuiFocusScopeData\": \"imgui_internal:1637\",\n    \"ImGuiFocusedFlags_\": \"imgui:1311\",\n    \"ImGuiFreeTypeBuilderFlags\": \"imgui_freetype:26\",\n    \"ImGuiGroupData\": \"imgui_internal:1063\",\n    \"ImGuiHoveredFlagsPrivate_\": \"imgui_internal:892\",\n    \"ImGuiHoveredFlags_\": \"imgui:1325\",\n    \"ImGuiIDStackTool\": \"imgui_internal:2006\",\n    \"ImGuiIO\": \"imgui:2214\",\n    \"ImGuiInputEvent\": \"imgui_internal:1412\",\n    \"ImGuiInputEventAppFocused\": \"imgui_internal:1410\",\n    \"ImGuiInputEventKey\": \"imgui_internal:1408\",\n    \"ImGuiInputEventMouseButton\": \"imgui_internal:1407\",\n    \"ImGuiInputEventMousePos\": \"imgui_internal:1405\",\n    \"ImGuiInputEventMouseWheel\": \"imgui_internal:1406\",\n    \"ImGuiInputEventText\": \"imgui_internal:1409\",\n    \"ImGuiInputEventType\": \"imgui_internal:1382\",\n    \"ImGuiInputFlagsPrivate_\": \"imgui_internal:1478\",\n    \"ImGuiInputFlags_\": \"imgui:1560\",\n    \"ImGuiInputSource\": \"imgui_internal:1394\",\n    \"ImGuiInputTextCallbackData\": \"imgui:2453\",\n    \"ImGuiInputTextDeactivatedState\": \"imgui_internal:1099\",\n    \"ImGuiInputTextFlagsPrivate_\": \"imgui_internal:900\",\n    \"ImGuiInputTextFlags_\": \"imgui:1150\",\n    \"ImGuiInputTextState\": \"imgui_internal:1121\",\n    \"ImGuiItemFlagsPrivate_\": \"imgui_internal:842\",\n    \"ImGuiItemFlags_\": \"imgui:1137\",\n    \"ImGuiItemStatusFlags_\": \"imgui_internal:866\",\n    \"ImGuiKey\": \"imgui:1433\",\n    \"ImGuiKeyData\": \"imgui:2206\",\n    \"ImGuiKeyOwnerData\": \"imgui_internal:1465\",\n    \"ImGuiKeyRoutingData\": \"imgui_internal:1439\",\n    \"ImGuiKeyRoutingTable\": \"imgui_internal:1453\",\n    \"ImGuiLastItemData\": \"imgui_internal:1248\",\n    \"ImGuiLayoutType_\": \"imgui_internal:1000\",\n    \"ImGuiListClipper\": \"imgui:2660\",\n    \"ImGuiListClipperData\": \"imgui_internal:1535\",\n    \"ImGuiListClipperRange\": \"imgui_internal:1522\",\n    \"ImGuiLocEntry\": \"imgui_internal:1911\",\n    \"ImGuiLocKey\": \"imgui_internal:1896\",\n    \"ImGuiLogFlags_\": \"imgui_internal:1007\",\n    \"ImGuiMenuColumns\": \"imgui_internal:1081\",\n    \"ImGuiMetricsConfig\": \"imgui_internal:1977\",\n    \"ImGuiMouseButton_\": \"imgui:1802\",\n    \"ImGuiMouseCursor_\": \"imgui:1812\",\n    \"ImGuiMouseSource\": \"imgui:1831\",\n    \"ImGuiMultiSelectFlags_\": \"imgui:2812\",\n    \"ImGuiMultiSelectIO\": \"imgui:2839\",\n    \"ImGuiMultiSelectState\": \"imgui_internal:1797\",\n    \"ImGuiMultiSelectTempData\": \"imgui_internal:1772\",\n    \"ImGuiNavItemData\": \"imgui_internal:1620\",\n    \"ImGuiNavLayer\": \"imgui_internal:1612\",\n    \"ImGuiNavMoveFlags_\": \"imgui_internal:1590\",\n    \"ImGuiNavRenderCursorFlags_\": \"imgui_internal:1576\",\n    \"ImGuiNextItemData\": \"imgui_internal:1228\",\n    \"ImGuiNextItemDataFlags_\": \"imgui_internal:1218\",\n    \"ImGuiNextWindowData\": \"imgui_internal:1194\",\n    \"ImGuiNextWindowDataFlags_\": \"imgui_internal:1178\",\n    \"ImGuiOldColumnData\": \"imgui_internal:1705\",\n    \"ImGuiOldColumnFlags_\": \"imgui_internal:1685\",\n    \"ImGuiOldColumns\": \"imgui_internal:1715\",\n    \"ImGuiOnceUponAFrame\": \"imgui:2531\",\n    \"ImGuiPayload\": \"imgui:2496\",\n    \"ImGuiPlatformIO\": \"imgui:3536\",\n    \"ImGuiPlatformImeData\": \"imgui:3574\",\n    \"ImGuiPlotType\": \"imgui_internal:1026\",\n    \"ImGuiPopupData\": \"imgui_internal:1339\",\n    \"ImGuiPopupFlags_\": \"imgui:1229\",\n    \"ImGuiPopupPositionPolicy\": \"imgui_internal:1331\",\n    \"ImGuiPtrOrIndex\": \"imgui_internal:1309\",\n    \"ImGuiScrollFlags_\": \"imgui_internal:1562\",\n    \"ImGuiSelectableFlagsPrivate_\": \"imgui_internal:947\",\n    \"ImGuiSelectableFlags_\": \"imgui:1247\",\n    \"ImGuiSelectionBasicStorage\": \"imgui:2885\",\n    \"ImGuiSelectionExternalStorage\": \"imgui:2908\",\n    \"ImGuiSelectionRequest\": \"imgui:2859\",\n    \"ImGuiSelectionRequestType\": \"imgui:2851\",\n    \"ImGuiSeparatorFlags_\": \"imgui_internal:968\",\n    \"ImGuiSettingsHandler\": \"imgui_internal:1876\",\n    \"ImGuiShrinkWidthItem\": \"imgui_internal:1302\",\n    \"ImGuiSizeCallbackData\": \"imgui:2487\",\n    \"ImGuiSliderFlagsPrivate_\": \"imgui_internal:940\",\n    \"ImGuiSliderFlags_\": \"imgui:1786\",\n    \"ImGuiSortDirection\": \"imgui:1420\",\n    \"ImGuiStackLevelInfo\": \"imgui_internal:1994\",\n    \"ImGuiStorage\": \"imgui:2603\",\n    \"ImGuiStoragePair\": \"imgui:2586\",\n    \"ImGuiStyle\": \"imgui:2129\",\n    \"ImGuiStyleMod\": \"imgui_internal:1040\",\n    \"ImGuiStyleVar_\": \"imgui:1689\",\n    \"ImGuiTabBar\": \"imgui_internal:2625\",\n    \"ImGuiTabBarFlagsPrivate_\": \"imgui_internal:2590\",\n    \"ImGuiTabBarFlags_\": \"imgui:1279\",\n    \"ImGuiTabItem\": \"imgui_internal:2606\",\n    \"ImGuiTabItemFlagsPrivate_\": \"imgui_internal:2598\",\n    \"ImGuiTabItemFlags_\": \"imgui:1296\",\n    \"ImGuiTable\": \"imgui_internal:2772\",\n    \"ImGuiTableBgTarget_\": \"imgui:1983\",\n    \"ImGuiTableCellData\": \"imgui_internal:2740\",\n    \"ImGuiTableColumn\": \"imgui_internal:2680\",\n    \"ImGuiTableColumnFlags_\": \"imgui:1930\",\n    \"ImGuiTableColumnSettings\": \"imgui_internal:2919\",\n    \"ImGuiTableColumnSortSpecs\": \"imgui:2005\",\n    \"ImGuiTableFlags_\": \"imgui:1877\",\n    \"ImGuiTableHeaderData\": \"imgui_internal:2749\",\n    \"ImGuiTableInstanceData\": \"imgui_internal:2759\",\n    \"ImGuiTableRowFlags_\": \"imgui:1968\",\n    \"ImGuiTableSettings\": \"imgui_internal:2943\",\n    \"ImGuiTableSortSpecs\": \"imgui:1995\",\n    \"ImGuiTableTempData\": \"imgui_internal:2896\",\n    \"ImGuiTextBuffer\": \"imgui:2566\",\n    \"ImGuiTextFilter\": \"imgui:2539\",\n    \"ImGuiTextFlags_\": \"imgui_internal:986\",\n    \"ImGuiTextIndex\": \"imgui_internal:725\",\n    \"ImGuiTextRange\": \"imgui:2549\",\n    \"ImGuiTooltipFlags_\": \"imgui_internal:992\",\n    \"ImGuiTreeNodeFlagsPrivate_\": \"imgui_internal:961\",\n    \"ImGuiTreeNodeFlags_\": \"imgui:1192\",\n    \"ImGuiTreeNodeStackData\": \"imgui_internal:1267\",\n    \"ImGuiTypingSelectFlags_\": \"imgui_internal:1648\",\n    \"ImGuiTypingSelectRequest\": \"imgui_internal:1656\",\n    \"ImGuiTypingSelectState\": \"imgui_internal:1667\",\n    \"ImGuiViewport\": \"imgui:3511\",\n    \"ImGuiViewportFlags_\": \"imgui:3496\",\n    \"ImGuiViewportP\": \"imgui_internal:1825\",\n    \"ImGuiWindow\": \"imgui_internal:2461\",\n    \"ImGuiWindowFlags_\": \"imgui:1067\",\n    \"ImGuiWindowRefreshFlags_\": \"imgui_internal:1169\",\n    \"ImGuiWindowSettings\": \"imgui_internal:1862\",\n    \"ImGuiWindowStackData\": \"imgui_internal:1294\",\n    \"ImGuiWindowTempData\": \"imgui_internal:2411\",\n    \"ImRect\": \"imgui_internal:527\",\n    \"ImVec1\": \"imgui_internal:509\",\n    \"ImVec2\": \"imgui:292\",\n    \"ImVec2ih\": \"imgui_internal:517\",\n    \"ImVec4\": \"imgui:305\"\n  },\n  \"nonPOD\": {\n    \"ImBitArray\": true,\n    \"ImColor\": true,\n    \"ImDrawCmd\": true,\n    \"ImDrawData\": true,\n    \"ImDrawDataBuilder\": true,\n    \"ImDrawList\": true,\n    \"ImDrawListSharedData\": true,\n    \"ImDrawListSplitter\": true,\n    \"ImFont\": true,\n    \"ImFontAtlas\": true,\n    \"ImFontAtlasCustomRect\": true,\n    \"ImFontConfig\": true,\n    \"ImFontGlyphRangesBuilder\": true,\n    \"ImGuiBoxSelectState\": true,\n    \"ImGuiComboPreviewData\": true,\n    \"ImGuiContext\": true,\n    \"ImGuiContextHook\": true,\n    \"ImGuiDebugAllocInfo\": true,\n    \"ImGuiErrorRecoveryState\": true,\n    \"ImGuiIDStackTool\": true,\n    \"ImGuiIO\": true,\n    \"ImGuiInputEvent\": true,\n    \"ImGuiInputTextCallbackData\": true,\n    \"ImGuiInputTextDeactivatedState\": true,\n    \"ImGuiInputTextState\": true,\n    \"ImGuiKeyOwnerData\": true,\n    \"ImGuiKeyRoutingData\": true,\n    \"ImGuiKeyRoutingTable\": true,\n    \"ImGuiLastItemData\": true,\n    \"ImGuiListClipper\": true,\n    \"ImGuiListClipperData\": true,\n    \"ImGuiMenuColumns\": true,\n    \"ImGuiMultiSelectState\": true,\n    \"ImGuiMultiSelectTempData\": true,\n    \"ImGuiNavItemData\": true,\n    \"ImGuiNextItemData\": true,\n    \"ImGuiNextWindowData\": true,\n    \"ImGuiOldColumnData\": true,\n    \"ImGuiOldColumns\": true,\n    \"ImGuiOnceUponAFrame\": true,\n    \"ImGuiPayload\": true,\n    \"ImGuiPlatformIO\": true,\n    \"ImGuiPlatformImeData\": true,\n    \"ImGuiPopupData\": true,\n    \"ImGuiPtrOrIndex\": true,\n    \"ImGuiSelectionBasicStorage\": true,\n    \"ImGuiSelectionExternalStorage\": true,\n    \"ImGuiSettingsHandler\": true,\n    \"ImGuiStackLevelInfo\": true,\n    \"ImGuiStoragePair\": true,\n    \"ImGuiStyle\": true,\n    \"ImGuiStyleMod\": true,\n    \"ImGuiTabBar\": true,\n    \"ImGuiTabItem\": true,\n    \"ImGuiTable\": true,\n    \"ImGuiTableColumn\": true,\n    \"ImGuiTableColumnSettings\": true,\n    \"ImGuiTableColumnSortSpecs\": true,\n    \"ImGuiTableInstanceData\": true,\n    \"ImGuiTableSettings\": true,\n    \"ImGuiTableSortSpecs\": true,\n    \"ImGuiTableTempData\": true,\n    \"ImGuiTextBuffer\": true,\n    \"ImGuiTextFilter\": true,\n    \"ImGuiTextRange\": true,\n    \"ImGuiTypingSelectState\": true,\n    \"ImGuiViewport\": true,\n    \"ImGuiViewportP\": true,\n    \"ImGuiWindow\": true,\n    \"ImGuiWindowSettings\": true,\n    \"ImPool\": true,\n    \"ImRect\": true,\n    \"ImSpan\": true,\n    \"ImSpanAllocator\": true,\n    \"ImVec1\": true,\n    \"ImVec2\": true,\n    \"ImVec2ih\": true,\n    \"ImVec4\": true,\n    \"ImVector\": true\n  },\n  \"structs\": {\n    \"ImBitVector\": [\n      {\n        \"name\": \"Storage\",\n        \"template_type\": \"ImU32\",\n        \"type\": \"ImVector_ImU32\"\n      }\n    ],\n    \"ImColor\": [\n      {\n        \"name\": \"Value\",\n        \"type\": \"ImVec4\"\n      }\n    ],\n    \"ImDrawChannel\": [\n      {\n        \"name\": \"_CmdBuffer\",\n        \"template_type\": \"ImDrawCmd\",\n        \"type\": \"ImVector_ImDrawCmd\"\n      },\n      {\n        \"name\": \"_IdxBuffer\",\n        \"template_type\": \"ImDrawIdx\",\n        \"type\": \"ImVector_ImDrawIdx\"\n      }\n    ],\n    \"ImDrawCmd\": [\n      {\n        \"name\": \"ClipRect\",\n        \"type\": \"ImVec4\"\n      },\n      {\n        \"name\": \"TextureId\",\n        \"type\": \"ImTextureID\"\n      },\n      {\n        \"name\": \"VtxOffset\",\n        \"type\": \"unsigned int\"\n      },\n      {\n        \"name\": \"IdxOffset\",\n        \"type\": \"unsigned int\"\n      },\n      {\n        \"name\": \"ElemCount\",\n        \"type\": \"unsigned int\"\n      },\n      {\n        \"name\": \"UserCallback\",\n        \"type\": \"ImDrawCallback\"\n      },\n      {\n        \"name\": \"UserCallbackData\",\n        \"type\": \"void*\"\n      },\n      {\n        \"name\": \"UserCallbackDataSize\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"UserCallbackDataOffset\",\n        \"type\": \"int\"\n      }\n    ],\n    \"ImDrawCmdHeader\": [\n      {\n        \"name\": \"ClipRect\",\n        \"type\": \"ImVec4\"\n      },\n      {\n        \"name\": \"TextureId\",\n        \"type\": \"ImTextureID\"\n      },\n      {\n        \"name\": \"VtxOffset\",\n        \"type\": \"unsigned int\"\n      }\n    ],\n    \"ImDrawData\": [\n      {\n        \"name\": \"Valid\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"CmdListsCount\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"TotalIdxCount\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"TotalVtxCount\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"CmdLists\",\n        \"template_type\": \"ImDrawList*\",\n        \"type\": \"ImVector_ImDrawListPtr\"\n      },\n      {\n        \"name\": \"DisplayPos\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"DisplaySize\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"FramebufferScale\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"OwnerViewport\",\n        \"type\": \"ImGuiViewport*\"\n      }\n    ],\n    \"ImDrawDataBuilder\": [\n      {\n        \"name\": \"Layers[2]\",\n        \"size\": 2,\n        \"template_type\": \"ImDrawList*\",\n        \"type\": \"ImVector_ImDrawListPtr*\"\n      },\n      {\n        \"name\": \"LayerData1\",\n        \"template_type\": \"ImDrawList*\",\n        \"type\": \"ImVector_ImDrawListPtr\"\n      }\n    ],\n    \"ImDrawList\": [\n      {\n        \"name\": \"CmdBuffer\",\n        \"template_type\": \"ImDrawCmd\",\n        \"type\": \"ImVector_ImDrawCmd\"\n      },\n      {\n        \"name\": \"IdxBuffer\",\n        \"template_type\": \"ImDrawIdx\",\n        \"type\": \"ImVector_ImDrawIdx\"\n      },\n      {\n        \"name\": \"VtxBuffer\",\n        \"template_type\": \"ImDrawVert\",\n        \"type\": \"ImVector_ImDrawVert\"\n      },\n      {\n        \"name\": \"Flags\",\n        \"type\": \"ImDrawListFlags\"\n      },\n      {\n        \"name\": \"_VtxCurrentIdx\",\n        \"type\": \"unsigned int\"\n      },\n      {\n        \"name\": \"_Data\",\n        \"type\": \"ImDrawListSharedData*\"\n      },\n      {\n        \"name\": \"_VtxWritePtr\",\n        \"type\": \"ImDrawVert*\"\n      },\n      {\n        \"name\": \"_IdxWritePtr\",\n        \"type\": \"ImDrawIdx*\"\n      },\n      {\n        \"name\": \"_Path\",\n        \"template_type\": \"ImVec2\",\n        \"type\": \"ImVector_ImVec2\"\n      },\n      {\n        \"name\": \"_CmdHeader\",\n        \"type\": \"ImDrawCmdHeader\"\n      },\n      {\n        \"name\": \"_Splitter\",\n        \"type\": \"ImDrawListSplitter\"\n      },\n      {\n        \"name\": \"_ClipRectStack\",\n        \"template_type\": \"ImVec4\",\n        \"type\": \"ImVector_ImVec4\"\n      },\n      {\n        \"name\": \"_TextureIdStack\",\n        \"template_type\": \"ImTextureID\",\n        \"type\": \"ImVector_ImTextureID\"\n      },\n      {\n        \"name\": \"_CallbacksDataBuf\",\n        \"template_type\": \"ImU8\",\n        \"type\": \"ImVector_ImU8\"\n      },\n      {\n        \"name\": \"_FringeScale\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"_OwnerName\",\n        \"type\": \"const char*\"\n      }\n    ],\n    \"ImDrawListSharedData\": [\n      {\n        \"name\": \"TexUvWhitePixel\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"TexUvLines\",\n        \"type\": \"const ImVec4*\"\n      },\n      {\n        \"name\": \"Font\",\n        \"type\": \"ImFont*\"\n      },\n      {\n        \"name\": \"FontSize\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"FontScale\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"CurveTessellationTol\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"CircleSegmentMaxError\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"ClipRectFullscreen\",\n        \"type\": \"ImVec4\"\n      },\n      {\n        \"name\": \"InitialFlags\",\n        \"type\": \"ImDrawListFlags\"\n      },\n      {\n        \"name\": \"TempBuffer\",\n        \"template_type\": \"ImVec2\",\n        \"type\": \"ImVector_ImVec2\"\n      },\n      {\n        \"name\": \"ArcFastVtx[48]\",\n        \"size\": 48,\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"ArcFastRadiusCutoff\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"CircleSegmentCounts[64]\",\n        \"size\": 64,\n        \"type\": \"ImU8\"\n      }\n    ],\n    \"ImDrawListSplitter\": [\n      {\n        \"name\": \"_Current\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"_Count\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"_Channels\",\n        \"template_type\": \"ImDrawChannel\",\n        \"type\": \"ImVector_ImDrawChannel\"\n      }\n    ],\n    \"ImDrawVert\": [\n      {\n        \"name\": \"pos\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"uv\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"col\",\n        \"type\": \"ImU32\"\n      }\n    ],\n    \"ImFont\": [\n      {\n        \"name\": \"IndexAdvanceX\",\n        \"template_type\": \"float\",\n        \"type\": \"ImVector_float\"\n      },\n      {\n        \"name\": \"FallbackAdvanceX\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"FontSize\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"IndexLookup\",\n        \"template_type\": \"ImWchar\",\n        \"type\": \"ImVector_ImWchar\"\n      },\n      {\n        \"name\": \"Glyphs\",\n        \"template_type\": \"ImFontGlyph\",\n        \"type\": \"ImVector_ImFontGlyph\"\n      },\n      {\n        \"name\": \"FallbackGlyph\",\n        \"type\": \"const ImFontGlyph*\"\n      },\n      {\n        \"name\": \"ContainerAtlas\",\n        \"type\": \"ImFontAtlas*\"\n      },\n      {\n        \"name\": \"ConfigData\",\n        \"type\": \"const ImFontConfig*\"\n      },\n      {\n        \"name\": \"ConfigDataCount\",\n        \"type\": \"short\"\n      },\n      {\n        \"name\": \"EllipsisCharCount\",\n        \"type\": \"short\"\n      },\n      {\n        \"name\": \"EllipsisChar\",\n        \"type\": \"ImWchar\"\n      },\n      {\n        \"name\": \"FallbackChar\",\n        \"type\": \"ImWchar\"\n      },\n      {\n        \"name\": \"EllipsisWidth\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"EllipsisCharStep\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"DirtyLookupTables\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"Scale\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"Ascent\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"Descent\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"MetricsTotalSurface\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"Used4kPagesMap[(0xFFFF+1)/4096/8]\",\n        \"size\": 2,\n        \"type\": \"ImU8\"\n      }\n    ],\n    \"ImFontAtlas\": [\n      {\n        \"name\": \"Flags\",\n        \"type\": \"ImFontAtlasFlags\"\n      },\n      {\n        \"name\": \"TexID\",\n        \"type\": \"ImTextureID\"\n      },\n      {\n        \"name\": \"TexDesiredWidth\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"TexGlyphPadding\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"Locked\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"UserData\",\n        \"type\": \"void*\"\n      },\n      {\n        \"name\": \"TexReady\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"TexPixelsUseColors\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"TexPixelsAlpha8\",\n        \"type\": \"unsigned char*\"\n      },\n      {\n        \"name\": \"TexPixelsRGBA32\",\n        \"type\": \"unsigned int*\"\n      },\n      {\n        \"name\": \"TexWidth\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"TexHeight\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"TexUvScale\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"TexUvWhitePixel\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"Fonts\",\n        \"template_type\": \"ImFont*\",\n        \"type\": \"ImVector_ImFontPtr\"\n      },\n      {\n        \"name\": \"CustomRects\",\n        \"template_type\": \"ImFontAtlasCustomRect\",\n        \"type\": \"ImVector_ImFontAtlasCustomRect\"\n      },\n      {\n        \"name\": \"ConfigData\",\n        \"template_type\": \"ImFontConfig\",\n        \"type\": \"ImVector_ImFontConfig\"\n      },\n      {\n        \"name\": \"TexUvLines[(63)+1]\",\n        \"size\": 64,\n        \"type\": \"ImVec4\"\n      },\n      {\n        \"name\": \"FontBuilderIO\",\n        \"type\": \"const ImFontBuilderIO*\"\n      },\n      {\n        \"name\": \"FontBuilderFlags\",\n        \"type\": \"unsigned int\"\n      },\n      {\n        \"name\": \"PackIdMouseCursors\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"PackIdLines\",\n        \"type\": \"int\"\n      }\n    ],\n    \"ImFontAtlasCustomRect\": [\n      {\n        \"name\": \"X\",\n        \"type\": \"unsigned short\"\n      },\n      {\n        \"name\": \"Y\",\n        \"type\": \"unsigned short\"\n      },\n      {\n        \"name\": \"Width\",\n        \"type\": \"unsigned short\"\n      },\n      {\n        \"name\": \"Height\",\n        \"type\": \"unsigned short\"\n      },\n      {\n        \"bitfield\": \"31\",\n        \"name\": \"GlyphID\",\n        \"type\": \"unsigned int\"\n      },\n      {\n        \"bitfield\": \"1\",\n        \"name\": \"GlyphColored\",\n        \"type\": \"unsigned int\"\n      },\n      {\n        \"name\": \"GlyphAdvanceX\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"GlyphOffset\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"Font\",\n        \"type\": \"ImFont*\"\n      }\n    ],\n    \"ImFontBuilderIO\": [\n      {\n        \"name\": \"FontBuilder_Build\",\n        \"type\": \"bool(*)(ImFontAtlas* atlas)\"\n      }\n    ],\n    \"ImFontConfig\": [\n      {\n        \"name\": \"FontData\",\n        \"type\": \"void*\"\n      },\n      {\n        \"name\": \"FontDataSize\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"FontDataOwnedByAtlas\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"FontNo\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"SizePixels\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"OversampleH\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"OversampleV\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"PixelSnapH\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"GlyphExtraSpacing\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"GlyphOffset\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"GlyphRanges\",\n        \"type\": \"const ImWchar*\"\n      },\n      {\n        \"name\": \"GlyphMinAdvanceX\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"GlyphMaxAdvanceX\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"MergeMode\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"FontBuilderFlags\",\n        \"type\": \"unsigned int\"\n      },\n      {\n        \"name\": \"RasterizerMultiply\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"RasterizerDensity\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"EllipsisChar\",\n        \"type\": \"ImWchar\"\n      },\n      {\n        \"name\": \"Name[40]\",\n        \"size\": 40,\n        \"type\": \"char\"\n      },\n      {\n        \"name\": \"DstFont\",\n        \"type\": \"ImFont*\"\n      }\n    ],\n    \"ImFontGlyph\": [\n      {\n        \"bitfield\": \"1\",\n        \"name\": \"Colored\",\n        \"type\": \"unsigned int\"\n      },\n      {\n        \"bitfield\": \"1\",\n        \"name\": \"Visible\",\n        \"type\": \"unsigned int\"\n      },\n      {\n        \"bitfield\": \"30\",\n        \"name\": \"Codepoint\",\n        \"type\": \"unsigned int\"\n      },\n      {\n        \"name\": \"AdvanceX\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"X0\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"Y0\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"X1\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"Y1\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"U0\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"V0\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"U1\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"V1\",\n        \"type\": \"float\"\n      }\n    ],\n    \"ImFontGlyphRangesBuilder\": [\n      {\n        \"name\": \"UsedChars\",\n        \"template_type\": \"ImU32\",\n        \"type\": \"ImVector_ImU32\"\n      }\n    ],\n    \"ImGuiBoxSelectState\": [\n      {\n        \"name\": \"ID\",\n        \"type\": \"ImGuiID\"\n      },\n      {\n        \"name\": \"IsActive\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"IsStarting\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"IsStartedFromVoid\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"IsStartedSetNavIdOnce\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"RequestClear\",\n        \"type\": \"bool\"\n      },\n      {\n        \"bitfield\": \"16\",\n        \"name\": \"KeyMods\",\n        \"type\": \"ImGuiKeyChord\"\n      },\n      {\n        \"name\": \"StartPosRel\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"EndPosRel\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"ScrollAccum\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"Window\",\n        \"type\": \"ImGuiWindow*\"\n      },\n      {\n        \"name\": \"UnclipMode\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"UnclipRect\",\n        \"type\": \"ImRect\"\n      },\n      {\n        \"name\": \"BoxSelectRectPrev\",\n        \"type\": \"ImRect\"\n      },\n      {\n        \"name\": \"BoxSelectRectCurr\",\n        \"type\": \"ImRect\"\n      }\n    ],\n    \"ImGuiColorMod\": [\n      {\n        \"name\": \"Col\",\n        \"type\": \"ImGuiCol\"\n      },\n      {\n        \"name\": \"BackupValue\",\n        \"type\": \"ImVec4\"\n      }\n    ],\n    \"ImGuiComboPreviewData\": [\n      {\n        \"name\": \"PreviewRect\",\n        \"type\": \"ImRect\"\n      },\n      {\n        \"name\": \"BackupCursorPos\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"BackupCursorMaxPos\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"BackupCursorPosPrevLine\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"BackupPrevLineTextBaseOffset\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"BackupLayout\",\n        \"type\": \"ImGuiLayoutType\"\n      }\n    ],\n    \"ImGuiContext\": [\n      {\n        \"name\": \"Initialized\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"FontAtlasOwnedByContext\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"IO\",\n        \"type\": \"ImGuiIO\"\n      },\n      {\n        \"name\": \"PlatformIO\",\n        \"type\": \"ImGuiPlatformIO\"\n      },\n      {\n        \"name\": \"Style\",\n        \"type\": \"ImGuiStyle\"\n      },\n      {\n        \"name\": \"Font\",\n        \"type\": \"ImFont*\"\n      },\n      {\n        \"name\": \"FontSize\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"FontBaseSize\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"FontScale\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"CurrentDpiScale\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"DrawListSharedData\",\n        \"type\": \"ImDrawListSharedData\"\n      },\n      {\n        \"name\": \"Time\",\n        \"type\": \"double\"\n      },\n      {\n        \"name\": \"FrameCount\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"FrameCountEnded\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"FrameCountRendered\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"WithinEndChildID\",\n        \"type\": \"ImGuiID\"\n      },\n      {\n        \"name\": \"WithinFrameScope\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"WithinFrameScopeWithImplicitWindow\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"GcCompactAll\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"TestEngineHookItems\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"TestEngine\",\n        \"type\": \"void*\"\n      },\n      {\n        \"name\": \"ContextName[16]\",\n        \"size\": 16,\n        \"type\": \"char\"\n      },\n      {\n        \"name\": \"InputEventsQueue\",\n        \"template_type\": \"ImGuiInputEvent\",\n        \"type\": \"ImVector_ImGuiInputEvent\"\n      },\n      {\n        \"name\": \"InputEventsTrail\",\n        \"template_type\": \"ImGuiInputEvent\",\n        \"type\": \"ImVector_ImGuiInputEvent\"\n      },\n      {\n        \"name\": \"InputEventsNextMouseSource\",\n        \"type\": \"ImGuiMouseSource\"\n      },\n      {\n        \"name\": \"InputEventsNextEventId\",\n        \"type\": \"ImU32\"\n      },\n      {\n        \"name\": \"Windows\",\n        \"template_type\": \"ImGuiWindow*\",\n        \"type\": \"ImVector_ImGuiWindowPtr\"\n      },\n      {\n        \"name\": \"WindowsFocusOrder\",\n        \"template_type\": \"ImGuiWindow*\",\n        \"type\": \"ImVector_ImGuiWindowPtr\"\n      },\n      {\n        \"name\": \"WindowsTempSortBuffer\",\n        \"template_type\": \"ImGuiWindow*\",\n        \"type\": \"ImVector_ImGuiWindowPtr\"\n      },\n      {\n        \"name\": \"CurrentWindowStack\",\n        \"template_type\": \"ImGuiWindowStackData\",\n        \"type\": \"ImVector_ImGuiWindowStackData\"\n      },\n      {\n        \"name\": \"WindowsById\",\n        \"type\": \"ImGuiStorage\"\n      },\n      {\n        \"name\": \"WindowsActiveCount\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"WindowsHoverPadding\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"DebugBreakInWindow\",\n        \"type\": \"ImGuiID\"\n      },\n      {\n        \"name\": \"CurrentWindow\",\n        \"type\": \"ImGuiWindow*\"\n      },\n      {\n        \"name\": \"HoveredWindow\",\n        \"type\": \"ImGuiWindow*\"\n      },\n      {\n        \"name\": \"HoveredWindowUnderMovingWindow\",\n        \"type\": \"ImGuiWindow*\"\n      },\n      {\n        \"name\": \"HoveredWindowBeforeClear\",\n        \"type\": \"ImGuiWindow*\"\n      },\n      {\n        \"name\": \"MovingWindow\",\n        \"type\": \"ImGuiWindow*\"\n      },\n      {\n        \"name\": \"WheelingWindow\",\n        \"type\": \"ImGuiWindow*\"\n      },\n      {\n        \"name\": \"WheelingWindowRefMousePos\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"WheelingWindowStartFrame\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"WheelingWindowScrolledFrame\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"WheelingWindowReleaseTimer\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"WheelingWindowWheelRemainder\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"WheelingAxisAvg\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"DebugDrawIdConflicts\",\n        \"type\": \"ImGuiID\"\n      },\n      {\n        \"name\": \"DebugHookIdInfo\",\n        \"type\": \"ImGuiID\"\n      },\n      {\n        \"name\": \"HoveredId\",\n        \"type\": \"ImGuiID\"\n      },\n      {\n        \"name\": \"HoveredIdPreviousFrame\",\n        \"type\": \"ImGuiID\"\n      },\n      {\n        \"name\": \"HoveredIdPreviousFrameItemCount\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"HoveredIdTimer\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"HoveredIdNotActiveTimer\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"HoveredIdAllowOverlap\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"HoveredIdIsDisabled\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"ItemUnclipByLog\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"ActiveId\",\n        \"type\": \"ImGuiID\"\n      },\n      {\n        \"name\": \"ActiveIdIsAlive\",\n        \"type\": \"ImGuiID\"\n      },\n      {\n        \"name\": \"ActiveIdTimer\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"ActiveIdIsJustActivated\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"ActiveIdAllowOverlap\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"ActiveIdNoClearOnFocusLoss\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"ActiveIdHasBeenPressedBefore\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"ActiveIdHasBeenEditedBefore\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"ActiveIdHasBeenEditedThisFrame\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"ActiveIdFromShortcut\",\n        \"type\": \"bool\"\n      },\n      {\n        \"bitfield\": \"8\",\n        \"name\": \"ActiveIdMouseButton\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"ActiveIdClickOffset\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"ActiveIdWindow\",\n        \"type\": \"ImGuiWindow*\"\n      },\n      {\n        \"name\": \"ActiveIdSource\",\n        \"type\": \"ImGuiInputSource\"\n      },\n      {\n        \"name\": \"ActiveIdPreviousFrame\",\n        \"type\": \"ImGuiID\"\n      },\n      {\n        \"name\": \"DeactivatedItemData\",\n        \"type\": \"ImGuiDeactivatedItemData\"\n      },\n      {\n        \"name\": \"ActiveIdValueOnActivation\",\n        \"type\": \"ImGuiDataTypeStorage\"\n      },\n      {\n        \"name\": \"LastActiveId\",\n        \"type\": \"ImGuiID\"\n      },\n      {\n        \"name\": \"LastActiveIdTimer\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"LastKeyModsChangeTime\",\n        \"type\": \"double\"\n      },\n      {\n        \"name\": \"LastKeyModsChangeFromNoneTime\",\n        \"type\": \"double\"\n      },\n      {\n        \"name\": \"LastKeyboardKeyPressTime\",\n        \"type\": \"double\"\n      },\n      {\n        \"name\": \"KeysMayBeCharInput\",\n        \"type\": \"ImBitArrayForNamedKeys\"\n      },\n      {\n        \"name\": \"KeysOwnerData[ImGuiKey_NamedKey_COUNT]\",\n        \"size\": 154,\n        \"type\": \"ImGuiKeyOwnerData\"\n      },\n      {\n        \"name\": \"KeysRoutingTable\",\n        \"type\": \"ImGuiKeyRoutingTable\"\n      },\n      {\n        \"name\": \"ActiveIdUsingNavDirMask\",\n        \"type\": \"ImU32\"\n      },\n      {\n        \"name\": \"ActiveIdUsingAllKeyboardKeys\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"DebugBreakInShortcutRouting\",\n        \"type\": \"ImGuiKeyChord\"\n      },\n      {\n        \"name\": \"CurrentFocusScopeId\",\n        \"type\": \"ImGuiID\"\n      },\n      {\n        \"name\": \"CurrentItemFlags\",\n        \"type\": \"ImGuiItemFlags\"\n      },\n      {\n        \"name\": \"DebugLocateId\",\n        \"type\": \"ImGuiID\"\n      },\n      {\n        \"name\": \"NextItemData\",\n        \"type\": \"ImGuiNextItemData\"\n      },\n      {\n        \"name\": \"LastItemData\",\n        \"type\": \"ImGuiLastItemData\"\n      },\n      {\n        \"name\": \"NextWindowData\",\n        \"type\": \"ImGuiNextWindowData\"\n      },\n      {\n        \"name\": \"DebugShowGroupRects\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"DebugFlashStyleColorIdx\",\n        \"type\": \"ImGuiCol\"\n      },\n      {\n        \"name\": \"ColorStack\",\n        \"template_type\": \"ImGuiColorMod\",\n        \"type\": \"ImVector_ImGuiColorMod\"\n      },\n      {\n        \"name\": \"StyleVarStack\",\n        \"template_type\": \"ImGuiStyleMod\",\n        \"type\": \"ImVector_ImGuiStyleMod\"\n      },\n      {\n        \"name\": \"FontStack\",\n        \"template_type\": \"ImFont*\",\n        \"type\": \"ImVector_ImFontPtr\"\n      },\n      {\n        \"name\": \"FocusScopeStack\",\n        \"template_type\": \"ImGuiFocusScopeData\",\n        \"type\": \"ImVector_ImGuiFocusScopeData\"\n      },\n      {\n        \"name\": \"ItemFlagsStack\",\n        \"template_type\": \"ImGuiItemFlags\",\n        \"type\": \"ImVector_ImGuiItemFlags\"\n      },\n      {\n        \"name\": \"GroupStack\",\n        \"template_type\": \"ImGuiGroupData\",\n        \"type\": \"ImVector_ImGuiGroupData\"\n      },\n      {\n        \"name\": \"OpenPopupStack\",\n        \"template_type\": \"ImGuiPopupData\",\n        \"type\": \"ImVector_ImGuiPopupData\"\n      },\n      {\n        \"name\": \"BeginPopupStack\",\n        \"template_type\": \"ImGuiPopupData\",\n        \"type\": \"ImVector_ImGuiPopupData\"\n      },\n      {\n        \"name\": \"TreeNodeStack\",\n        \"template_type\": \"ImGuiTreeNodeStackData\",\n        \"type\": \"ImVector_ImGuiTreeNodeStackData\"\n      },\n      {\n        \"name\": \"Viewports\",\n        \"template_type\": \"ImGuiViewportP*\",\n        \"type\": \"ImVector_ImGuiViewportPPtr\"\n      },\n      {\n        \"name\": \"NavCursorVisible\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"NavHighlightItemUnderNav\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"NavMousePosDirty\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"NavIdIsAlive\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"NavId\",\n        \"type\": \"ImGuiID\"\n      },\n      {\n        \"name\": \"NavWindow\",\n        \"type\": \"ImGuiWindow*\"\n      },\n      {\n        \"name\": \"NavFocusScopeId\",\n        \"type\": \"ImGuiID\"\n      },\n      {\n        \"name\": \"NavLayer\",\n        \"type\": \"ImGuiNavLayer\"\n      },\n      {\n        \"name\": \"NavActivateId\",\n        \"type\": \"ImGuiID\"\n      },\n      {\n        \"name\": \"NavActivateDownId\",\n        \"type\": \"ImGuiID\"\n      },\n      {\n        \"name\": \"NavActivatePressedId\",\n        \"type\": \"ImGuiID\"\n      },\n      {\n        \"name\": \"NavActivateFlags\",\n        \"type\": \"ImGuiActivateFlags\"\n      },\n      {\n        \"name\": \"NavFocusRoute\",\n        \"template_type\": \"ImGuiFocusScopeData\",\n        \"type\": \"ImVector_ImGuiFocusScopeData\"\n      },\n      {\n        \"name\": \"NavHighlightActivatedId\",\n        \"type\": \"ImGuiID\"\n      },\n      {\n        \"name\": \"NavHighlightActivatedTimer\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"NavNextActivateId\",\n        \"type\": \"ImGuiID\"\n      },\n      {\n        \"name\": \"NavNextActivateFlags\",\n        \"type\": \"ImGuiActivateFlags\"\n      },\n      {\n        \"name\": \"NavInputSource\",\n        \"type\": \"ImGuiInputSource\"\n      },\n      {\n        \"name\": \"NavLastValidSelectionUserData\",\n        \"type\": \"ImGuiSelectionUserData\"\n      },\n      {\n        \"name\": \"NavCursorHideFrames\",\n        \"type\": \"ImS8\"\n      },\n      {\n        \"name\": \"NavAnyRequest\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"NavInitRequest\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"NavInitRequestFromMove\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"NavInitResult\",\n        \"type\": \"ImGuiNavItemData\"\n      },\n      {\n        \"name\": \"NavMoveSubmitted\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"NavMoveScoringItems\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"NavMoveForwardToNextFrame\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"NavMoveFlags\",\n        \"type\": \"ImGuiNavMoveFlags\"\n      },\n      {\n        \"name\": \"NavMoveScrollFlags\",\n        \"type\": \"ImGuiScrollFlags\"\n      },\n      {\n        \"name\": \"NavMoveKeyMods\",\n        \"type\": \"ImGuiKeyChord\"\n      },\n      {\n        \"name\": \"NavMoveDir\",\n        \"type\": \"ImGuiDir\"\n      },\n      {\n        \"name\": \"NavMoveDirForDebug\",\n        \"type\": \"ImGuiDir\"\n      },\n      {\n        \"name\": \"NavMoveClipDir\",\n        \"type\": \"ImGuiDir\"\n      },\n      {\n        \"name\": \"NavScoringRect\",\n        \"type\": \"ImRect\"\n      },\n      {\n        \"name\": \"NavScoringNoClipRect\",\n        \"type\": \"ImRect\"\n      },\n      {\n        \"name\": \"NavScoringDebugCount\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"NavTabbingDir\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"NavTabbingCounter\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"NavMoveResultLocal\",\n        \"type\": \"ImGuiNavItemData\"\n      },\n      {\n        \"name\": \"NavMoveResultLocalVisible\",\n        \"type\": \"ImGuiNavItemData\"\n      },\n      {\n        \"name\": \"NavMoveResultOther\",\n        \"type\": \"ImGuiNavItemData\"\n      },\n      {\n        \"name\": \"NavTabbingResultFirst\",\n        \"type\": \"ImGuiNavItemData\"\n      },\n      {\n        \"name\": \"NavJustMovedFromFocusScopeId\",\n        \"type\": \"ImGuiID\"\n      },\n      {\n        \"name\": \"NavJustMovedToId\",\n        \"type\": \"ImGuiID\"\n      },\n      {\n        \"name\": \"NavJustMovedToFocusScopeId\",\n        \"type\": \"ImGuiID\"\n      },\n      {\n        \"name\": \"NavJustMovedToKeyMods\",\n        \"type\": \"ImGuiKeyChord\"\n      },\n      {\n        \"name\": \"NavJustMovedToIsTabbing\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"NavJustMovedToHasSelectionData\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"ConfigNavWindowingKeyNext\",\n        \"type\": \"ImGuiKeyChord\"\n      },\n      {\n        \"name\": \"ConfigNavWindowingKeyPrev\",\n        \"type\": \"ImGuiKeyChord\"\n      },\n      {\n        \"name\": \"NavWindowingTarget\",\n        \"type\": \"ImGuiWindow*\"\n      },\n      {\n        \"name\": \"NavWindowingTargetAnim\",\n        \"type\": \"ImGuiWindow*\"\n      },\n      {\n        \"name\": \"NavWindowingListWindow\",\n        \"type\": \"ImGuiWindow*\"\n      },\n      {\n        \"name\": \"NavWindowingTimer\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"NavWindowingHighlightAlpha\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"NavWindowingToggleLayer\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"NavWindowingToggleKey\",\n        \"type\": \"ImGuiKey\"\n      },\n      {\n        \"name\": \"NavWindowingAccumDeltaPos\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"NavWindowingAccumDeltaSize\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"DimBgRatio\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"DragDropActive\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"DragDropWithinSource\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"DragDropWithinTarget\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"DragDropSourceFlags\",\n        \"type\": \"ImGuiDragDropFlags\"\n      },\n      {\n        \"name\": \"DragDropSourceFrameCount\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"DragDropMouseButton\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"DragDropPayload\",\n        \"type\": \"ImGuiPayload\"\n      },\n      {\n        \"name\": \"DragDropTargetRect\",\n        \"type\": \"ImRect\"\n      },\n      {\n        \"name\": \"DragDropTargetClipRect\",\n        \"type\": \"ImRect\"\n      },\n      {\n        \"name\": \"DragDropTargetId\",\n        \"type\": \"ImGuiID\"\n      },\n      {\n        \"name\": \"DragDropAcceptFlags\",\n        \"type\": \"ImGuiDragDropFlags\"\n      },\n      {\n        \"name\": \"DragDropAcceptIdCurrRectSurface\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"DragDropAcceptIdCurr\",\n        \"type\": \"ImGuiID\"\n      },\n      {\n        \"name\": \"DragDropAcceptIdPrev\",\n        \"type\": \"ImGuiID\"\n      },\n      {\n        \"name\": \"DragDropAcceptFrameCount\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"DragDropHoldJustPressedId\",\n        \"type\": \"ImGuiID\"\n      },\n      {\n        \"name\": \"DragDropPayloadBufHeap\",\n        \"template_type\": \"unsigned char\",\n        \"type\": \"ImVector_unsigned_char\"\n      },\n      {\n        \"name\": \"DragDropPayloadBufLocal[16]\",\n        \"size\": 16,\n        \"type\": \"unsigned char\"\n      },\n      {\n        \"name\": \"ClipperTempDataStacked\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"ClipperTempData\",\n        \"template_type\": \"ImGuiListClipperData\",\n        \"type\": \"ImVector_ImGuiListClipperData\"\n      },\n      {\n        \"name\": \"CurrentTable\",\n        \"type\": \"ImGuiTable*\"\n      },\n      {\n        \"name\": \"DebugBreakInTable\",\n        \"type\": \"ImGuiID\"\n      },\n      {\n        \"name\": \"TablesTempDataStacked\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"TablesTempData\",\n        \"template_type\": \"ImGuiTableTempData\",\n        \"type\": \"ImVector_ImGuiTableTempData\"\n      },\n      {\n        \"name\": \"Tables\",\n        \"template_type\": \"ImGuiTable\",\n        \"type\": \"ImPool_ImGuiTable\"\n      },\n      {\n        \"name\": \"TablesLastTimeActive\",\n        \"template_type\": \"float\",\n        \"type\": \"ImVector_float\"\n      },\n      {\n        \"name\": \"DrawChannelsTempMergeBuffer\",\n        \"template_type\": \"ImDrawChannel\",\n        \"type\": \"ImVector_ImDrawChannel\"\n      },\n      {\n        \"name\": \"CurrentTabBar\",\n        \"type\": \"ImGuiTabBar*\"\n      },\n      {\n        \"name\": \"TabBars\",\n        \"template_type\": \"ImGuiTabBar\",\n        \"type\": \"ImPool_ImGuiTabBar\"\n      },\n      {\n        \"name\": \"CurrentTabBarStack\",\n        \"template_type\": \"ImGuiPtrOrIndex\",\n        \"type\": \"ImVector_ImGuiPtrOrIndex\"\n      },\n      {\n        \"name\": \"ShrinkWidthBuffer\",\n        \"template_type\": \"ImGuiShrinkWidthItem\",\n        \"type\": \"ImVector_ImGuiShrinkWidthItem\"\n      },\n      {\n        \"name\": \"BoxSelectState\",\n        \"type\": \"ImGuiBoxSelectState\"\n      },\n      {\n        \"name\": \"CurrentMultiSelect\",\n        \"type\": \"ImGuiMultiSelectTempData*\"\n      },\n      {\n        \"name\": \"MultiSelectTempDataStacked\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"MultiSelectTempData\",\n        \"template_type\": \"ImGuiMultiSelectTempData\",\n        \"type\": \"ImVector_ImGuiMultiSelectTempData\"\n      },\n      {\n        \"name\": \"MultiSelectStorage\",\n        \"template_type\": \"ImGuiMultiSelectState\",\n        \"type\": \"ImPool_ImGuiMultiSelectState\"\n      },\n      {\n        \"name\": \"HoverItemDelayId\",\n        \"type\": \"ImGuiID\"\n      },\n      {\n        \"name\": \"HoverItemDelayIdPreviousFrame\",\n        \"type\": \"ImGuiID\"\n      },\n      {\n        \"name\": \"HoverItemDelayTimer\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"HoverItemDelayClearTimer\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"HoverItemUnlockedStationaryId\",\n        \"type\": \"ImGuiID\"\n      },\n      {\n        \"name\": \"HoverWindowUnlockedStationaryId\",\n        \"type\": \"ImGuiID\"\n      },\n      {\n        \"name\": \"MouseCursor\",\n        \"type\": \"ImGuiMouseCursor\"\n      },\n      {\n        \"name\": \"MouseStationaryTimer\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"MouseLastValidPos\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"InputTextState\",\n        \"type\": \"ImGuiInputTextState\"\n      },\n      {\n        \"name\": \"InputTextDeactivatedState\",\n        \"type\": \"ImGuiInputTextDeactivatedState\"\n      },\n      {\n        \"name\": \"InputTextPasswordFont\",\n        \"type\": \"ImFont\"\n      },\n      {\n        \"name\": \"TempInputId\",\n        \"type\": \"ImGuiID\"\n      },\n      {\n        \"name\": \"DataTypeZeroValue\",\n        \"type\": \"ImGuiDataTypeStorage\"\n      },\n      {\n        \"name\": \"BeginMenuDepth\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"BeginComboDepth\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"ColorEditOptions\",\n        \"type\": \"ImGuiColorEditFlags\"\n      },\n      {\n        \"name\": \"ColorEditCurrentID\",\n        \"type\": \"ImGuiID\"\n      },\n      {\n        \"name\": \"ColorEditSavedID\",\n        \"type\": \"ImGuiID\"\n      },\n      {\n        \"name\": \"ColorEditSavedHue\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"ColorEditSavedSat\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"ColorEditSavedColor\",\n        \"type\": \"ImU32\"\n      },\n      {\n        \"name\": \"ColorPickerRef\",\n        \"type\": \"ImVec4\"\n      },\n      {\n        \"name\": \"ComboPreviewData\",\n        \"type\": \"ImGuiComboPreviewData\"\n      },\n      {\n        \"name\": \"WindowResizeBorderExpectedRect\",\n        \"type\": \"ImRect\"\n      },\n      {\n        \"name\": \"WindowResizeRelativeMode\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"ScrollbarSeekMode\",\n        \"type\": \"short\"\n      },\n      {\n        \"name\": \"ScrollbarClickDeltaToGrabCenter\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"SliderGrabClickOffset\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"SliderCurrentAccum\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"SliderCurrentAccumDirty\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"DragCurrentAccumDirty\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"DragCurrentAccum\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"DragSpeedDefaultRatio\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"DisabledAlphaBackup\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"DisabledStackSize\",\n        \"type\": \"short\"\n      },\n      {\n        \"name\": \"TooltipOverrideCount\",\n        \"type\": \"short\"\n      },\n      {\n        \"name\": \"TooltipPreviousWindow\",\n        \"type\": \"ImGuiWindow*\"\n      },\n      {\n        \"name\": \"ClipboardHandlerData\",\n        \"template_type\": \"char\",\n        \"type\": \"ImVector_char\"\n      },\n      {\n        \"name\": \"MenusIdSubmittedThisFrame\",\n        \"template_type\": \"ImGuiID\",\n        \"type\": \"ImVector_ImGuiID\"\n      },\n      {\n        \"name\": \"TypingSelectState\",\n        \"type\": \"ImGuiTypingSelectState\"\n      },\n      {\n        \"name\": \"PlatformImeData\",\n        \"type\": \"ImGuiPlatformImeData\"\n      },\n      {\n        \"name\": \"PlatformImeDataPrev\",\n        \"type\": \"ImGuiPlatformImeData\"\n      },\n      {\n        \"name\": \"SettingsLoaded\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"SettingsDirtyTimer\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"SettingsIniData\",\n        \"type\": \"ImGuiTextBuffer\"\n      },\n      {\n        \"name\": \"SettingsHandlers\",\n        \"template_type\": \"ImGuiSettingsHandler\",\n        \"type\": \"ImVector_ImGuiSettingsHandler\"\n      },\n      {\n        \"name\": \"SettingsWindows\",\n        \"template_type\": \"ImGuiWindowSettings\",\n        \"type\": \"ImChunkStream_ImGuiWindowSettings\"\n      },\n      {\n        \"name\": \"SettingsTables\",\n        \"template_type\": \"ImGuiTableSettings\",\n        \"type\": \"ImChunkStream_ImGuiTableSettings\"\n      },\n      {\n        \"name\": \"Hooks\",\n        \"template_type\": \"ImGuiContextHook\",\n        \"type\": \"ImVector_ImGuiContextHook\"\n      },\n      {\n        \"name\": \"HookIdNext\",\n        \"type\": \"ImGuiID\"\n      },\n      {\n        \"name\": \"LocalizationTable[ImGuiLocKey_COUNT]\",\n        \"size\": 10,\n        \"type\": \"const char*\"\n      },\n      {\n        \"name\": \"LogEnabled\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"LogFlags\",\n        \"type\": \"ImGuiLogFlags\"\n      },\n      {\n        \"name\": \"LogWindow\",\n        \"type\": \"ImGuiWindow*\"\n      },\n      {\n        \"name\": \"LogFile\",\n        \"type\": \"ImFileHandle\"\n      },\n      {\n        \"name\": \"LogBuffer\",\n        \"type\": \"ImGuiTextBuffer\"\n      },\n      {\n        \"name\": \"LogNextPrefix\",\n        \"type\": \"const char*\"\n      },\n      {\n        \"name\": \"LogNextSuffix\",\n        \"type\": \"const char*\"\n      },\n      {\n        \"name\": \"LogLinePosY\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"LogLineFirstItem\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"LogDepthRef\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"LogDepthToExpand\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"LogDepthToExpandDefault\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"ErrorCallback\",\n        \"type\": \"ImGuiErrorCallback\"\n      },\n      {\n        \"name\": \"ErrorCallbackUserData\",\n        \"type\": \"void*\"\n      },\n      {\n        \"name\": \"ErrorTooltipLockedPos\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"ErrorFirst\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"ErrorCountCurrentFrame\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"StackSizesInNewFrame\",\n        \"type\": \"ImGuiErrorRecoveryState\"\n      },\n      {\n        \"name\": \"StackSizesInBeginForCurrentWindow\",\n        \"type\": \"ImGuiErrorRecoveryState*\"\n      },\n      {\n        \"name\": \"DebugDrawIdConflictsCount\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"DebugLogFlags\",\n        \"type\": \"ImGuiDebugLogFlags\"\n      },\n      {\n        \"name\": \"DebugLogBuf\",\n        \"type\": \"ImGuiTextBuffer\"\n      },\n      {\n        \"name\": \"DebugLogIndex\",\n        \"type\": \"ImGuiTextIndex\"\n      },\n      {\n        \"name\": \"DebugLogSkippedErrors\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"DebugLogAutoDisableFlags\",\n        \"type\": \"ImGuiDebugLogFlags\"\n      },\n      {\n        \"name\": \"DebugLogAutoDisableFrames\",\n        \"type\": \"ImU8\"\n      },\n      {\n        \"name\": \"DebugLocateFrames\",\n        \"type\": \"ImU8\"\n      },\n      {\n        \"name\": \"DebugBreakInLocateId\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"DebugBreakKeyChord\",\n        \"type\": \"ImGuiKeyChord\"\n      },\n      {\n        \"name\": \"DebugBeginReturnValueCullDepth\",\n        \"type\": \"ImS8\"\n      },\n      {\n        \"name\": \"DebugItemPickerActive\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"DebugItemPickerMouseButton\",\n        \"type\": \"ImU8\"\n      },\n      {\n        \"name\": \"DebugItemPickerBreakId\",\n        \"type\": \"ImGuiID\"\n      },\n      {\n        \"name\": \"DebugFlashStyleColorTime\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"DebugFlashStyleColorBackup\",\n        \"type\": \"ImVec4\"\n      },\n      {\n        \"name\": \"DebugMetricsConfig\",\n        \"type\": \"ImGuiMetricsConfig\"\n      },\n      {\n        \"name\": \"DebugIDStackTool\",\n        \"type\": \"ImGuiIDStackTool\"\n      },\n      {\n        \"name\": \"DebugAllocInfo\",\n        \"type\": \"ImGuiDebugAllocInfo\"\n      },\n      {\n        \"name\": \"FramerateSecPerFrame[60]\",\n        \"size\": 60,\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"FramerateSecPerFrameIdx\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"FramerateSecPerFrameCount\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"FramerateSecPerFrameAccum\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"WantCaptureMouseNextFrame\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"WantCaptureKeyboardNextFrame\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"WantTextInputNextFrame\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"TempBuffer\",\n        \"template_type\": \"char\",\n        \"type\": \"ImVector_char\"\n      },\n      {\n        \"name\": \"TempKeychordName[64]\",\n        \"size\": 64,\n        \"type\": \"char\"\n      }\n    ],\n    \"ImGuiContextHook\": [\n      {\n        \"name\": \"HookId\",\n        \"type\": \"ImGuiID\"\n      },\n      {\n        \"name\": \"Type\",\n        \"type\": \"ImGuiContextHookType\"\n      },\n      {\n        \"name\": \"Owner\",\n        \"type\": \"ImGuiID\"\n      },\n      {\n        \"name\": \"Callback\",\n        \"type\": \"ImGuiContextHookCallback\"\n      },\n      {\n        \"name\": \"UserData\",\n        \"type\": \"void*\"\n      }\n    ],\n    \"ImGuiDataTypeInfo\": [\n      {\n        \"name\": \"Size\",\n        \"type\": \"size_t\"\n      },\n      {\n        \"name\": \"Name\",\n        \"type\": \"const char*\"\n      },\n      {\n        \"name\": \"PrintFmt\",\n        \"type\": \"const char*\"\n      },\n      {\n        \"name\": \"ScanFmt\",\n        \"type\": \"const char*\"\n      }\n    ],\n    \"ImGuiDataTypeStorage\": [\n      {\n        \"name\": \"Data[8]\",\n        \"size\": 8,\n        \"type\": \"ImU8\"\n      }\n    ],\n    \"ImGuiDataVarInfo\": [\n      {\n        \"name\": \"Type\",\n        \"type\": \"ImGuiDataType\"\n      },\n      {\n        \"name\": \"Count\",\n        \"type\": \"ImU32\"\n      },\n      {\n        \"name\": \"Offset\",\n        \"type\": \"ImU32\"\n      }\n    ],\n    \"ImGuiDeactivatedItemData\": [\n      {\n        \"name\": \"ID\",\n        \"type\": \"ImGuiID\"\n      },\n      {\n        \"name\": \"ElapseFrame\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"HasBeenEditedBefore\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"IsAlive\",\n        \"type\": \"bool\"\n      }\n    ],\n    \"ImGuiDebugAllocEntry\": [\n      {\n        \"name\": \"FrameCount\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"AllocCount\",\n        \"type\": \"ImS16\"\n      },\n      {\n        \"name\": \"FreeCount\",\n        \"type\": \"ImS16\"\n      }\n    ],\n    \"ImGuiDebugAllocInfo\": [\n      {\n        \"name\": \"TotalAllocCount\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"TotalFreeCount\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"LastEntriesIdx\",\n        \"type\": \"ImS16\"\n      },\n      {\n        \"name\": \"LastEntriesBuf[6]\",\n        \"size\": 6,\n        \"type\": \"ImGuiDebugAllocEntry\"\n      }\n    ],\n    \"ImGuiErrorRecoveryState\": [\n      {\n        \"name\": \"SizeOfWindowStack\",\n        \"type\": \"short\"\n      },\n      {\n        \"name\": \"SizeOfIDStack\",\n        \"type\": \"short\"\n      },\n      {\n        \"name\": \"SizeOfTreeStack\",\n        \"type\": \"short\"\n      },\n      {\n        \"name\": \"SizeOfColorStack\",\n        \"type\": \"short\"\n      },\n      {\n        \"name\": \"SizeOfStyleVarStack\",\n        \"type\": \"short\"\n      },\n      {\n        \"name\": \"SizeOfFontStack\",\n        \"type\": \"short\"\n      },\n      {\n        \"name\": \"SizeOfFocusScopeStack\",\n        \"type\": \"short\"\n      },\n      {\n        \"name\": \"SizeOfGroupStack\",\n        \"type\": \"short\"\n      },\n      {\n        \"name\": \"SizeOfItemFlagsStack\",\n        \"type\": \"short\"\n      },\n      {\n        \"name\": \"SizeOfBeginPopupStack\",\n        \"type\": \"short\"\n      },\n      {\n        \"name\": \"SizeOfDisabledStack\",\n        \"type\": \"short\"\n      }\n    ],\n    \"ImGuiFocusScopeData\": [\n      {\n        \"name\": \"ID\",\n        \"type\": \"ImGuiID\"\n      },\n      {\n        \"name\": \"WindowID\",\n        \"type\": \"ImGuiID\"\n      }\n    ],\n    \"ImGuiGroupData\": [\n      {\n        \"name\": \"WindowID\",\n        \"type\": \"ImGuiID\"\n      },\n      {\n        \"name\": \"BackupCursorPos\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"BackupCursorMaxPos\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"BackupCursorPosPrevLine\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"BackupIndent\",\n        \"type\": \"ImVec1\"\n      },\n      {\n        \"name\": \"BackupGroupOffset\",\n        \"type\": \"ImVec1\"\n      },\n      {\n        \"name\": \"BackupCurrLineSize\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"BackupCurrLineTextBaseOffset\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"BackupActiveIdIsAlive\",\n        \"type\": \"ImGuiID\"\n      },\n      {\n        \"name\": \"BackupDeactivatedIdIsAlive\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"BackupHoveredIdIsAlive\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"BackupIsSameLine\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"EmitItem\",\n        \"type\": \"bool\"\n      }\n    ],\n    \"ImGuiIDStackTool\": [\n      {\n        \"name\": \"LastActiveFrame\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"StackLevel\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"QueryId\",\n        \"type\": \"ImGuiID\"\n      },\n      {\n        \"name\": \"Results\",\n        \"template_type\": \"ImGuiStackLevelInfo\",\n        \"type\": \"ImVector_ImGuiStackLevelInfo\"\n      },\n      {\n        \"name\": \"CopyToClipboardOnCtrlC\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"CopyToClipboardLastTime\",\n        \"type\": \"float\"\n      }\n    ],\n    \"ImGuiIO\": [\n      {\n        \"name\": \"ConfigFlags\",\n        \"type\": \"ImGuiConfigFlags\"\n      },\n      {\n        \"name\": \"BackendFlags\",\n        \"type\": \"ImGuiBackendFlags\"\n      },\n      {\n        \"name\": \"DisplaySize\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"DeltaTime\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"IniSavingRate\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"IniFilename\",\n        \"type\": \"const char*\"\n      },\n      {\n        \"name\": \"LogFilename\",\n        \"type\": \"const char*\"\n      },\n      {\n        \"name\": \"UserData\",\n        \"type\": \"void*\"\n      },\n      {\n        \"name\": \"Fonts\",\n        \"type\": \"ImFontAtlas*\"\n      },\n      {\n        \"name\": \"FontGlobalScale\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"FontAllowUserScaling\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"FontDefault\",\n        \"type\": \"ImFont*\"\n      },\n      {\n        \"name\": \"DisplayFramebufferScale\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"ConfigNavSwapGamepadButtons\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"ConfigNavMoveSetMousePos\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"ConfigNavCaptureKeyboard\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"ConfigNavEscapeClearFocusItem\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"ConfigNavEscapeClearFocusWindow\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"ConfigNavCursorVisibleAuto\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"ConfigNavCursorVisibleAlways\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"MouseDrawCursor\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"ConfigMacOSXBehaviors\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"ConfigInputTrickleEventQueue\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"ConfigInputTextCursorBlink\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"ConfigInputTextEnterKeepActive\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"ConfigDragClickToInputText\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"ConfigWindowsResizeFromEdges\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"ConfigWindowsMoveFromTitleBarOnly\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"ConfigWindowsCopyContentsWithCtrlC\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"ConfigScrollbarScrollByPage\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"ConfigMemoryCompactTimer\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"MouseDoubleClickTime\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"MouseDoubleClickMaxDist\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"MouseDragThreshold\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"KeyRepeatDelay\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"KeyRepeatRate\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"ConfigErrorRecovery\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"ConfigErrorRecoveryEnableAssert\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"ConfigErrorRecoveryEnableDebugLog\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"ConfigErrorRecoveryEnableTooltip\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"ConfigDebugIsDebuggerPresent\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"ConfigDebugHighlightIdConflicts\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"ConfigDebugBeginReturnValueOnce\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"ConfigDebugBeginReturnValueLoop\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"ConfigDebugIgnoreFocusLoss\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"ConfigDebugIniSettings\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"BackendPlatformName\",\n        \"type\": \"const char*\"\n      },\n      {\n        \"name\": \"BackendRendererName\",\n        \"type\": \"const char*\"\n      },\n      {\n        \"name\": \"BackendPlatformUserData\",\n        \"type\": \"void*\"\n      },\n      {\n        \"name\": \"BackendRendererUserData\",\n        \"type\": \"void*\"\n      },\n      {\n        \"name\": \"BackendLanguageUserData\",\n        \"type\": \"void*\"\n      },\n      {\n        \"name\": \"WantCaptureMouse\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"WantCaptureKeyboard\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"WantTextInput\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"WantSetMousePos\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"WantSaveIniSettings\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"NavActive\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"NavVisible\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"Framerate\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"MetricsRenderVertices\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"MetricsRenderIndices\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"MetricsRenderWindows\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"MetricsActiveWindows\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"MouseDelta\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"Ctx\",\n        \"type\": \"ImGuiContext*\"\n      },\n      {\n        \"name\": \"MousePos\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"MouseDown[5]\",\n        \"size\": 5,\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"MouseWheel\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"MouseWheelH\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"MouseSource\",\n        \"type\": \"ImGuiMouseSource\"\n      },\n      {\n        \"name\": \"KeyCtrl\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"KeyShift\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"KeyAlt\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"KeySuper\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"KeyMods\",\n        \"type\": \"ImGuiKeyChord\"\n      },\n      {\n        \"name\": \"KeysData[ImGuiKey_NamedKey_COUNT]\",\n        \"size\": 154,\n        \"type\": \"ImGuiKeyData\"\n      },\n      {\n        \"name\": \"WantCaptureMouseUnlessPopupClose\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"MousePosPrev\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"MouseClickedPos[5]\",\n        \"size\": 5,\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"MouseClickedTime[5]\",\n        \"size\": 5,\n        \"type\": \"double\"\n      },\n      {\n        \"name\": \"MouseClicked[5]\",\n        \"size\": 5,\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"MouseDoubleClicked[5]\",\n        \"size\": 5,\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"MouseClickedCount[5]\",\n        \"size\": 5,\n        \"type\": \"ImU16\"\n      },\n      {\n        \"name\": \"MouseClickedLastCount[5]\",\n        \"size\": 5,\n        \"type\": \"ImU16\"\n      },\n      {\n        \"name\": \"MouseReleased[5]\",\n        \"size\": 5,\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"MouseDownOwned[5]\",\n        \"size\": 5,\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"MouseDownOwnedUnlessPopupClose[5]\",\n        \"size\": 5,\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"MouseWheelRequestAxisSwap\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"MouseCtrlLeftAsRightClick\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"MouseDownDuration[5]\",\n        \"size\": 5,\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"MouseDownDurationPrev[5]\",\n        \"size\": 5,\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"MouseDragMaxDistanceSqr[5]\",\n        \"size\": 5,\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"PenPressure\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"AppFocusLost\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"AppAcceptingEvents\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"InputQueueSurrogate\",\n        \"type\": \"ImWchar16\"\n      },\n      {\n        \"name\": \"InputQueueCharacters\",\n        \"template_type\": \"ImWchar\",\n        \"type\": \"ImVector_ImWchar\"\n      }\n    ],\n    \"ImGuiInputEvent\": [\n      {\n        \"name\": \"Type\",\n        \"type\": \"ImGuiInputEventType\"\n      },\n      {\n        \"name\": \"Source\",\n        \"type\": \"ImGuiInputSource\"\n      },\n      {\n        \"name\": \"EventId\",\n        \"type\": \"ImU32\"\n      },\n      {\n        \"name\": \"\",\n        \"type\": \"union { ImGuiInputEventMousePos MousePos; ImGuiInputEventMouseWheel MouseWheel; ImGuiInputEventMouseButton MouseButton; ImGuiInputEventKey Key; ImGuiInputEventText Text; ImGuiInputEventAppFocused AppFocused;}\"\n      },\n      {\n        \"name\": \"AddedByTestEngine\",\n        \"type\": \"bool\"\n      }\n    ],\n    \"ImGuiInputEventAppFocused\": [\n      {\n        \"name\": \"Focused\",\n        \"type\": \"bool\"\n      }\n    ],\n    \"ImGuiInputEventKey\": [\n      {\n        \"name\": \"Key\",\n        \"type\": \"ImGuiKey\"\n      },\n      {\n        \"name\": \"Down\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"AnalogValue\",\n        \"type\": \"float\"\n      }\n    ],\n    \"ImGuiInputEventMouseButton\": [\n      {\n        \"name\": \"Button\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"Down\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"MouseSource\",\n        \"type\": \"ImGuiMouseSource\"\n      }\n    ],\n    \"ImGuiInputEventMousePos\": [\n      {\n        \"name\": \"PosX\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"PosY\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"MouseSource\",\n        \"type\": \"ImGuiMouseSource\"\n      }\n    ],\n    \"ImGuiInputEventMouseWheel\": [\n      {\n        \"name\": \"WheelX\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"WheelY\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"MouseSource\",\n        \"type\": \"ImGuiMouseSource\"\n      }\n    ],\n    \"ImGuiInputEventText\": [\n      {\n        \"name\": \"Char\",\n        \"type\": \"unsigned int\"\n      }\n    ],\n    \"ImGuiInputTextCallbackData\": [\n      {\n        \"name\": \"Ctx\",\n        \"type\": \"ImGuiContext*\"\n      },\n      {\n        \"name\": \"EventFlag\",\n        \"type\": \"ImGuiInputTextFlags\"\n      },\n      {\n        \"name\": \"Flags\",\n        \"type\": \"ImGuiInputTextFlags\"\n      },\n      {\n        \"name\": \"UserData\",\n        \"type\": \"void*\"\n      },\n      {\n        \"name\": \"EventChar\",\n        \"type\": \"ImWchar\"\n      },\n      {\n        \"name\": \"EventKey\",\n        \"type\": \"ImGuiKey\"\n      },\n      {\n        \"name\": \"Buf\",\n        \"type\": \"char*\"\n      },\n      {\n        \"name\": \"BufTextLen\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"BufSize\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"BufDirty\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"CursorPos\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"SelectionStart\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"SelectionEnd\",\n        \"type\": \"int\"\n      }\n    ],\n    \"ImGuiInputTextDeactivatedState\": [\n      {\n        \"name\": \"ID\",\n        \"type\": \"ImGuiID\"\n      },\n      {\n        \"name\": \"TextA\",\n        \"template_type\": \"char\",\n        \"type\": \"ImVector_char\"\n      }\n    ],\n    \"ImGuiInputTextState\": [\n      {\n        \"name\": \"Ctx\",\n        \"type\": \"ImGuiContext*\"\n      },\n      {\n        \"name\": \"Stb\",\n        \"type\": \"ImStbTexteditState*\"\n      },\n      {\n        \"name\": \"Flags\",\n        \"type\": \"ImGuiInputTextFlags\"\n      },\n      {\n        \"name\": \"ID\",\n        \"type\": \"ImGuiID\"\n      },\n      {\n        \"name\": \"TextLen\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"TextSrc\",\n        \"type\": \"const char*\"\n      },\n      {\n        \"name\": \"TextA\",\n        \"template_type\": \"char\",\n        \"type\": \"ImVector_char\"\n      },\n      {\n        \"name\": \"TextToRevertTo\",\n        \"template_type\": \"char\",\n        \"type\": \"ImVector_char\"\n      },\n      {\n        \"name\": \"CallbackTextBackup\",\n        \"template_type\": \"char\",\n        \"type\": \"ImVector_char\"\n      },\n      {\n        \"name\": \"BufCapacity\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"Scroll\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"CursorAnim\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"CursorFollow\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"SelectedAllMouseLock\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"Edited\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"WantReloadUserBuf\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"ReloadSelectionStart\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"ReloadSelectionEnd\",\n        \"type\": \"int\"\n      }\n    ],\n    \"ImGuiKeyData\": [\n      {\n        \"name\": \"Down\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"DownDuration\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"DownDurationPrev\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"AnalogValue\",\n        \"type\": \"float\"\n      }\n    ],\n    \"ImGuiKeyOwnerData\": [\n      {\n        \"name\": \"OwnerCurr\",\n        \"type\": \"ImGuiID\"\n      },\n      {\n        \"name\": \"OwnerNext\",\n        \"type\": \"ImGuiID\"\n      },\n      {\n        \"name\": \"LockThisFrame\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"LockUntilRelease\",\n        \"type\": \"bool\"\n      }\n    ],\n    \"ImGuiKeyRoutingData\": [\n      {\n        \"name\": \"NextEntryIndex\",\n        \"type\": \"ImGuiKeyRoutingIndex\"\n      },\n      {\n        \"name\": \"Mods\",\n        \"type\": \"ImU16\"\n      },\n      {\n        \"name\": \"RoutingCurrScore\",\n        \"type\": \"ImU8\"\n      },\n      {\n        \"name\": \"RoutingNextScore\",\n        \"type\": \"ImU8\"\n      },\n      {\n        \"name\": \"RoutingCurr\",\n        \"type\": \"ImGuiID\"\n      },\n      {\n        \"name\": \"RoutingNext\",\n        \"type\": \"ImGuiID\"\n      }\n    ],\n    \"ImGuiKeyRoutingTable\": [\n      {\n        \"name\": \"Index[ImGuiKey_NamedKey_COUNT]\",\n        \"size\": 154,\n        \"type\": \"ImGuiKeyRoutingIndex\"\n      },\n      {\n        \"name\": \"Entries\",\n        \"template_type\": \"ImGuiKeyRoutingData\",\n        \"type\": \"ImVector_ImGuiKeyRoutingData\"\n      },\n      {\n        \"name\": \"EntriesNext\",\n        \"template_type\": \"ImGuiKeyRoutingData\",\n        \"type\": \"ImVector_ImGuiKeyRoutingData\"\n      }\n    ],\n    \"ImGuiLastItemData\": [\n      {\n        \"name\": \"ID\",\n        \"type\": \"ImGuiID\"\n      },\n      {\n        \"name\": \"ItemFlags\",\n        \"type\": \"ImGuiItemFlags\"\n      },\n      {\n        \"name\": \"StatusFlags\",\n        \"type\": \"ImGuiItemStatusFlags\"\n      },\n      {\n        \"name\": \"Rect\",\n        \"type\": \"ImRect\"\n      },\n      {\n        \"name\": \"NavRect\",\n        \"type\": \"ImRect\"\n      },\n      {\n        \"name\": \"DisplayRect\",\n        \"type\": \"ImRect\"\n      },\n      {\n        \"name\": \"ClipRect\",\n        \"type\": \"ImRect\"\n      },\n      {\n        \"name\": \"Shortcut\",\n        \"type\": \"ImGuiKeyChord\"\n      }\n    ],\n    \"ImGuiListClipper\": [\n      {\n        \"name\": \"Ctx\",\n        \"type\": \"ImGuiContext*\"\n      },\n      {\n        \"name\": \"DisplayStart\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"DisplayEnd\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"ItemsCount\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"ItemsHeight\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"StartPosY\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"StartSeekOffsetY\",\n        \"type\": \"double\"\n      },\n      {\n        \"name\": \"TempData\",\n        \"type\": \"void*\"\n      }\n    ],\n    \"ImGuiListClipperData\": [\n      {\n        \"name\": \"ListClipper\",\n        \"type\": \"ImGuiListClipper*\"\n      },\n      {\n        \"name\": \"LossynessOffset\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"StepNo\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"ItemsFrozen\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"Ranges\",\n        \"template_type\": \"ImGuiListClipperRange\",\n        \"type\": \"ImVector_ImGuiListClipperRange\"\n      }\n    ],\n    \"ImGuiListClipperRange\": [\n      {\n        \"name\": \"Min\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"Max\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"PosToIndexConvert\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"PosToIndexOffsetMin\",\n        \"type\": \"ImS8\"\n      },\n      {\n        \"name\": \"PosToIndexOffsetMax\",\n        \"type\": \"ImS8\"\n      }\n    ],\n    \"ImGuiLocEntry\": [\n      {\n        \"name\": \"Key\",\n        \"type\": \"ImGuiLocKey\"\n      },\n      {\n        \"name\": \"Text\",\n        \"type\": \"const char*\"\n      }\n    ],\n    \"ImGuiMenuColumns\": [\n      {\n        \"name\": \"TotalWidth\",\n        \"type\": \"ImU32\"\n      },\n      {\n        \"name\": \"NextTotalWidth\",\n        \"type\": \"ImU32\"\n      },\n      {\n        \"name\": \"Spacing\",\n        \"type\": \"ImU16\"\n      },\n      {\n        \"name\": \"OffsetIcon\",\n        \"type\": \"ImU16\"\n      },\n      {\n        \"name\": \"OffsetLabel\",\n        \"type\": \"ImU16\"\n      },\n      {\n        \"name\": \"OffsetShortcut\",\n        \"type\": \"ImU16\"\n      },\n      {\n        \"name\": \"OffsetMark\",\n        \"type\": \"ImU16\"\n      },\n      {\n        \"name\": \"Widths[4]\",\n        \"size\": 4,\n        \"type\": \"ImU16\"\n      }\n    ],\n    \"ImGuiMetricsConfig\": [\n      {\n        \"name\": \"ShowDebugLog\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"ShowIDStackTool\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"ShowWindowsRects\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"ShowWindowsBeginOrder\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"ShowTablesRects\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"ShowDrawCmdMesh\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"ShowDrawCmdBoundingBoxes\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"ShowTextEncodingViewer\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"ShowAtlasTintedWithTextColor\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"ShowWindowsRectsType\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"ShowTablesRectsType\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"HighlightMonitorIdx\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"HighlightViewportID\",\n        \"type\": \"ImGuiID\"\n      }\n    ],\n    \"ImGuiMultiSelectIO\": [\n      {\n        \"name\": \"Requests\",\n        \"template_type\": \"ImGuiSelectionRequest\",\n        \"type\": \"ImVector_ImGuiSelectionRequest\"\n      },\n      {\n        \"name\": \"RangeSrcItem\",\n        \"type\": \"ImGuiSelectionUserData\"\n      },\n      {\n        \"name\": \"NavIdItem\",\n        \"type\": \"ImGuiSelectionUserData\"\n      },\n      {\n        \"name\": \"NavIdSelected\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"RangeSrcReset\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"ItemsCount\",\n        \"type\": \"int\"\n      }\n    ],\n    \"ImGuiMultiSelectState\": [\n      {\n        \"name\": \"Window\",\n        \"type\": \"ImGuiWindow*\"\n      },\n      {\n        \"name\": \"ID\",\n        \"type\": \"ImGuiID\"\n      },\n      {\n        \"name\": \"LastFrameActive\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"LastSelectionSize\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"RangeSelected\",\n        \"type\": \"ImS8\"\n      },\n      {\n        \"name\": \"NavIdSelected\",\n        \"type\": \"ImS8\"\n      },\n      {\n        \"name\": \"RangeSrcItem\",\n        \"type\": \"ImGuiSelectionUserData\"\n      },\n      {\n        \"name\": \"NavIdItem\",\n        \"type\": \"ImGuiSelectionUserData\"\n      }\n    ],\n    \"ImGuiMultiSelectTempData\": [\n      {\n        \"name\": \"IO\",\n        \"type\": \"ImGuiMultiSelectIO\"\n      },\n      {\n        \"name\": \"Storage\",\n        \"type\": \"ImGuiMultiSelectState*\"\n      },\n      {\n        \"name\": \"FocusScopeId\",\n        \"type\": \"ImGuiID\"\n      },\n      {\n        \"name\": \"Flags\",\n        \"type\": \"ImGuiMultiSelectFlags\"\n      },\n      {\n        \"name\": \"ScopeRectMin\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"BackupCursorMaxPos\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"LastSubmittedItem\",\n        \"type\": \"ImGuiSelectionUserData\"\n      },\n      {\n        \"name\": \"BoxSelectId\",\n        \"type\": \"ImGuiID\"\n      },\n      {\n        \"name\": \"KeyMods\",\n        \"type\": \"ImGuiKeyChord\"\n      },\n      {\n        \"name\": \"LoopRequestSetAll\",\n        \"type\": \"ImS8\"\n      },\n      {\n        \"name\": \"IsEndIO\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"IsFocused\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"IsKeyboardSetRange\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"NavIdPassedBy\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"RangeSrcPassedBy\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"RangeDstPassedBy\",\n        \"type\": \"bool\"\n      }\n    ],\n    \"ImGuiNavItemData\": [\n      {\n        \"name\": \"Window\",\n        \"type\": \"ImGuiWindow*\"\n      },\n      {\n        \"name\": \"ID\",\n        \"type\": \"ImGuiID\"\n      },\n      {\n        \"name\": \"FocusScopeId\",\n        \"type\": \"ImGuiID\"\n      },\n      {\n        \"name\": \"RectRel\",\n        \"type\": \"ImRect\"\n      },\n      {\n        \"name\": \"ItemFlags\",\n        \"type\": \"ImGuiItemFlags\"\n      },\n      {\n        \"name\": \"DistBox\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"DistCenter\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"DistAxial\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"SelectionUserData\",\n        \"type\": \"ImGuiSelectionUserData\"\n      }\n    ],\n    \"ImGuiNextItemData\": [\n      {\n        \"name\": \"HasFlags\",\n        \"type\": \"ImGuiNextItemDataFlags\"\n      },\n      {\n        \"name\": \"ItemFlags\",\n        \"type\": \"ImGuiItemFlags\"\n      },\n      {\n        \"name\": \"FocusScopeId\",\n        \"type\": \"ImGuiID\"\n      },\n      {\n        \"name\": \"SelectionUserData\",\n        \"type\": \"ImGuiSelectionUserData\"\n      },\n      {\n        \"name\": \"Width\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"Shortcut\",\n        \"type\": \"ImGuiKeyChord\"\n      },\n      {\n        \"name\": \"ShortcutFlags\",\n        \"type\": \"ImGuiInputFlags\"\n      },\n      {\n        \"name\": \"OpenVal\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"OpenCond\",\n        \"type\": \"ImU8\"\n      },\n      {\n        \"name\": \"RefVal\",\n        \"type\": \"ImGuiDataTypeStorage\"\n      },\n      {\n        \"name\": \"StorageId\",\n        \"type\": \"ImGuiID\"\n      }\n    ],\n    \"ImGuiNextWindowData\": [\n      {\n        \"name\": \"Flags\",\n        \"type\": \"ImGuiNextWindowDataFlags\"\n      },\n      {\n        \"name\": \"PosCond\",\n        \"type\": \"ImGuiCond\"\n      },\n      {\n        \"name\": \"SizeCond\",\n        \"type\": \"ImGuiCond\"\n      },\n      {\n        \"name\": \"CollapsedCond\",\n        \"type\": \"ImGuiCond\"\n      },\n      {\n        \"name\": \"PosVal\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"PosPivotVal\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"SizeVal\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"ContentSizeVal\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"ScrollVal\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"ChildFlags\",\n        \"type\": \"ImGuiChildFlags\"\n      },\n      {\n        \"name\": \"CollapsedVal\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"SizeConstraintRect\",\n        \"type\": \"ImRect\"\n      },\n      {\n        \"name\": \"SizeCallback\",\n        \"type\": \"ImGuiSizeCallback\"\n      },\n      {\n        \"name\": \"SizeCallbackUserData\",\n        \"type\": \"void*\"\n      },\n      {\n        \"name\": \"BgAlphaVal\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"MenuBarOffsetMinVal\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"RefreshFlagsVal\",\n        \"type\": \"ImGuiWindowRefreshFlags\"\n      }\n    ],\n    \"ImGuiOldColumnData\": [\n      {\n        \"name\": \"OffsetNorm\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"OffsetNormBeforeResize\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"Flags\",\n        \"type\": \"ImGuiOldColumnFlags\"\n      },\n      {\n        \"name\": \"ClipRect\",\n        \"type\": \"ImRect\"\n      }\n    ],\n    \"ImGuiOldColumns\": [\n      {\n        \"name\": \"ID\",\n        \"type\": \"ImGuiID\"\n      },\n      {\n        \"name\": \"Flags\",\n        \"type\": \"ImGuiOldColumnFlags\"\n      },\n      {\n        \"name\": \"IsFirstFrame\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"IsBeingResized\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"Current\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"Count\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"OffMinX\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"OffMaxX\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"LineMinY\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"LineMaxY\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"HostCursorPosY\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"HostCursorMaxPosX\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"HostInitialClipRect\",\n        \"type\": \"ImRect\"\n      },\n      {\n        \"name\": \"HostBackupClipRect\",\n        \"type\": \"ImRect\"\n      },\n      {\n        \"name\": \"HostBackupParentWorkRect\",\n        \"type\": \"ImRect\"\n      },\n      {\n        \"name\": \"Columns\",\n        \"template_type\": \"ImGuiOldColumnData\",\n        \"type\": \"ImVector_ImGuiOldColumnData\"\n      },\n      {\n        \"name\": \"Splitter\",\n        \"type\": \"ImDrawListSplitter\"\n      }\n    ],\n    \"ImGuiOnceUponAFrame\": [\n      {\n        \"name\": \"RefFrame\",\n        \"type\": \"int\"\n      }\n    ],\n    \"ImGuiPayload\": [\n      {\n        \"name\": \"Data\",\n        \"type\": \"void*\"\n      },\n      {\n        \"name\": \"DataSize\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"SourceId\",\n        \"type\": \"ImGuiID\"\n      },\n      {\n        \"name\": \"SourceParentId\",\n        \"type\": \"ImGuiID\"\n      },\n      {\n        \"name\": \"DataFrameCount\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"DataType[32+1]\",\n        \"size\": 33,\n        \"type\": \"char\"\n      },\n      {\n        \"name\": \"Preview\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"Delivery\",\n        \"type\": \"bool\"\n      }\n    ],\n    \"ImGuiPlatformIO\": [\n      {\n        \"name\": \"Platform_GetClipboardTextFn\",\n        \"type\": \"const char*(*)(ImGuiContext* ctx)\"\n      },\n      {\n        \"name\": \"Platform_SetClipboardTextFn\",\n        \"type\": \"void(*)(ImGuiContext* ctx,const char* text)\"\n      },\n      {\n        \"name\": \"Platform_ClipboardUserData\",\n        \"type\": \"void*\"\n      },\n      {\n        \"name\": \"Platform_OpenInShellFn\",\n        \"type\": \"bool(*)(ImGuiContext* ctx,const char* path)\"\n      },\n      {\n        \"name\": \"Platform_OpenInShellUserData\",\n        \"type\": \"void*\"\n      },\n      {\n        \"name\": \"Platform_SetImeDataFn\",\n        \"type\": \"void(*)(ImGuiContext* ctx,ImGuiViewport* viewport,ImGuiPlatformImeData* data)\"\n      },\n      {\n        \"name\": \"Platform_ImeUserData\",\n        \"type\": \"void*\"\n      },\n      {\n        \"name\": \"Platform_LocaleDecimalPoint\",\n        \"type\": \"ImWchar\"\n      },\n      {\n        \"name\": \"Renderer_RenderState\",\n        \"type\": \"void*\"\n      }\n    ],\n    \"ImGuiPlatformImeData\": [\n      {\n        \"name\": \"WantVisible\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"InputPos\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"InputLineHeight\",\n        \"type\": \"float\"\n      }\n    ],\n    \"ImGuiPopupData\": [\n      {\n        \"name\": \"PopupId\",\n        \"type\": \"ImGuiID\"\n      },\n      {\n        \"name\": \"Window\",\n        \"type\": \"ImGuiWindow*\"\n      },\n      {\n        \"name\": \"RestoreNavWindow\",\n        \"type\": \"ImGuiWindow*\"\n      },\n      {\n        \"name\": \"ParentNavLayer\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"OpenFrameCount\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"OpenParentId\",\n        \"type\": \"ImGuiID\"\n      },\n      {\n        \"name\": \"OpenPopupPos\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"OpenMousePos\",\n        \"type\": \"ImVec2\"\n      }\n    ],\n    \"ImGuiPtrOrIndex\": [\n      {\n        \"name\": \"Ptr\",\n        \"type\": \"void*\"\n      },\n      {\n        \"name\": \"Index\",\n        \"type\": \"int\"\n      }\n    ],\n    \"ImGuiSelectionBasicStorage\": [\n      {\n        \"name\": \"Size\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"PreserveOrder\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"UserData\",\n        \"type\": \"void*\"\n      },\n      {\n        \"name\": \"AdapterIndexToStorageId\",\n        \"type\": \"ImGuiID(*)(ImGuiSelectionBasicStorage* self,int idx)\"\n      },\n      {\n        \"name\": \"_SelectionOrder\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"_Storage\",\n        \"type\": \"ImGuiStorage\"\n      }\n    ],\n    \"ImGuiSelectionExternalStorage\": [\n      {\n        \"name\": \"UserData\",\n        \"type\": \"void*\"\n      },\n      {\n        \"name\": \"AdapterSetItemSelected\",\n        \"type\": \"void(*)(ImGuiSelectionExternalStorage* self,int idx,bool selected)\"\n      }\n    ],\n    \"ImGuiSelectionRequest\": [\n      {\n        \"name\": \"Type\",\n        \"type\": \"ImGuiSelectionRequestType\"\n      },\n      {\n        \"name\": \"Selected\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"RangeDirection\",\n        \"type\": \"ImS8\"\n      },\n      {\n        \"name\": \"RangeFirstItem\",\n        \"type\": \"ImGuiSelectionUserData\"\n      },\n      {\n        \"name\": \"RangeLastItem\",\n        \"type\": \"ImGuiSelectionUserData\"\n      }\n    ],\n    \"ImGuiSettingsHandler\": [\n      {\n        \"name\": \"TypeName\",\n        \"type\": \"const char*\"\n      },\n      {\n        \"name\": \"TypeHash\",\n        \"type\": \"ImGuiID\"\n      },\n      {\n        \"name\": \"ClearAllFn\",\n        \"type\": \"void(*)(ImGuiContext* ctx,ImGuiSettingsHandler* handler)\"\n      },\n      {\n        \"name\": \"ReadInitFn\",\n        \"type\": \"void(*)(ImGuiContext* ctx,ImGuiSettingsHandler* handler)\"\n      },\n      {\n        \"name\": \"ReadOpenFn\",\n        \"type\": \"void*(*)(ImGuiContext* ctx,ImGuiSettingsHandler* handler,const char* name)\"\n      },\n      {\n        \"name\": \"ReadLineFn\",\n        \"type\": \"void(*)(ImGuiContext* ctx,ImGuiSettingsHandler* handler,void* entry,const char* line)\"\n      },\n      {\n        \"name\": \"ApplyAllFn\",\n        \"type\": \"void(*)(ImGuiContext* ctx,ImGuiSettingsHandler* handler)\"\n      },\n      {\n        \"name\": \"WriteAllFn\",\n        \"type\": \"void(*)(ImGuiContext* ctx,ImGuiSettingsHandler* handler,ImGuiTextBuffer* out_buf)\"\n      },\n      {\n        \"name\": \"UserData\",\n        \"type\": \"void*\"\n      }\n    ],\n    \"ImGuiShrinkWidthItem\": [\n      {\n        \"name\": \"Index\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"Width\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"InitialWidth\",\n        \"type\": \"float\"\n      }\n    ],\n    \"ImGuiSizeCallbackData\": [\n      {\n        \"name\": \"UserData\",\n        \"type\": \"void*\"\n      },\n      {\n        \"name\": \"Pos\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"CurrentSize\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"DesiredSize\",\n        \"type\": \"ImVec2\"\n      }\n    ],\n    \"ImGuiStackLevelInfo\": [\n      {\n        \"name\": \"ID\",\n        \"type\": \"ImGuiID\"\n      },\n      {\n        \"name\": \"QueryFrameCount\",\n        \"type\": \"ImS8\"\n      },\n      {\n        \"name\": \"QuerySuccess\",\n        \"type\": \"bool\"\n      },\n      {\n        \"bitfield\": \"8\",\n        \"name\": \"DataType\",\n        \"type\": \"ImGuiDataType\"\n      },\n      {\n        \"name\": \"Desc[57]\",\n        \"size\": 57,\n        \"type\": \"char\"\n      }\n    ],\n    \"ImGuiStorage\": [\n      {\n        \"name\": \"Data\",\n        \"template_type\": \"ImGuiStoragePair\",\n        \"type\": \"ImVector_ImGuiStoragePair\"\n      }\n    ],\n    \"ImGuiStoragePair\": [\n      {\n        \"name\": \"key\",\n        \"type\": \"ImGuiID\"\n      },\n      {\n        \"name\": \"\",\n        \"type\": \"union { int val_i; float val_f; void* val_p;}\"\n      }\n    ],\n    \"ImGuiStyle\": [\n      {\n        \"name\": \"Alpha\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"DisabledAlpha\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"WindowPadding\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"WindowRounding\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"WindowBorderSize\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"WindowMinSize\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"WindowTitleAlign\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"WindowMenuButtonPosition\",\n        \"type\": \"ImGuiDir\"\n      },\n      {\n        \"name\": \"ChildRounding\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"ChildBorderSize\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"PopupRounding\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"PopupBorderSize\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"FramePadding\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"FrameRounding\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"FrameBorderSize\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"ItemSpacing\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"ItemInnerSpacing\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"CellPadding\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"TouchExtraPadding\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"IndentSpacing\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"ColumnsMinSpacing\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"ScrollbarSize\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"ScrollbarRounding\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"GrabMinSize\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"GrabRounding\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"LogSliderDeadzone\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"TabRounding\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"TabBorderSize\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"TabMinWidthForCloseButton\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"TabBarBorderSize\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"TabBarOverlineSize\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"TableAngledHeadersAngle\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"TableAngledHeadersTextAlign\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"ColorButtonPosition\",\n        \"type\": \"ImGuiDir\"\n      },\n      {\n        \"name\": \"ButtonTextAlign\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"SelectableTextAlign\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"SeparatorTextBorderSize\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"SeparatorTextAlign\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"SeparatorTextPadding\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"DisplayWindowPadding\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"DisplaySafeAreaPadding\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"MouseCursorScale\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"AntiAliasedLines\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"AntiAliasedLinesUseTex\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"AntiAliasedFill\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"CurveTessellationTol\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"CircleTessellationMaxError\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"Colors[ImGuiCol_COUNT]\",\n        \"size\": 56,\n        \"type\": \"ImVec4\"\n      },\n      {\n        \"name\": \"HoverStationaryDelay\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"HoverDelayShort\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"HoverDelayNormal\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"HoverFlagsForTooltipMouse\",\n        \"type\": \"ImGuiHoveredFlags\"\n      },\n      {\n        \"name\": \"HoverFlagsForTooltipNav\",\n        \"type\": \"ImGuiHoveredFlags\"\n      }\n    ],\n    \"ImGuiStyleMod\": [\n      {\n        \"name\": \"VarIdx\",\n        \"type\": \"ImGuiStyleVar\"\n      },\n      {\n        \"name\": \"\",\n        \"type\": \"union { int BackupInt[2]; float BackupFloat[2];}\"\n      }\n    ],\n    \"ImGuiTabBar\": [\n      {\n        \"name\": \"Window\",\n        \"type\": \"ImGuiWindow*\"\n      },\n      {\n        \"name\": \"Tabs\",\n        \"template_type\": \"ImGuiTabItem\",\n        \"type\": \"ImVector_ImGuiTabItem\"\n      },\n      {\n        \"name\": \"Flags\",\n        \"type\": \"ImGuiTabBarFlags\"\n      },\n      {\n        \"name\": \"ID\",\n        \"type\": \"ImGuiID\"\n      },\n      {\n        \"name\": \"SelectedTabId\",\n        \"type\": \"ImGuiID\"\n      },\n      {\n        \"name\": \"NextSelectedTabId\",\n        \"type\": \"ImGuiID\"\n      },\n      {\n        \"name\": \"VisibleTabId\",\n        \"type\": \"ImGuiID\"\n      },\n      {\n        \"name\": \"CurrFrameVisible\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"PrevFrameVisible\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"BarRect\",\n        \"type\": \"ImRect\"\n      },\n      {\n        \"name\": \"CurrTabsContentsHeight\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"PrevTabsContentsHeight\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"WidthAllTabs\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"WidthAllTabsIdeal\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"ScrollingAnim\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"ScrollingTarget\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"ScrollingTargetDistToVisibility\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"ScrollingSpeed\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"ScrollingRectMinX\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"ScrollingRectMaxX\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"SeparatorMinX\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"SeparatorMaxX\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"ReorderRequestTabId\",\n        \"type\": \"ImGuiID\"\n      },\n      {\n        \"name\": \"ReorderRequestOffset\",\n        \"type\": \"ImS16\"\n      },\n      {\n        \"name\": \"BeginCount\",\n        \"type\": \"ImS8\"\n      },\n      {\n        \"name\": \"WantLayout\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"VisibleTabWasSubmitted\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"TabsAddedNew\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"TabsActiveCount\",\n        \"type\": \"ImS16\"\n      },\n      {\n        \"name\": \"LastTabItemIdx\",\n        \"type\": \"ImS16\"\n      },\n      {\n        \"name\": \"ItemSpacingY\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"FramePadding\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"BackupCursorPos\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"TabsNames\",\n        \"type\": \"ImGuiTextBuffer\"\n      }\n    ],\n    \"ImGuiTabItem\": [\n      {\n        \"name\": \"ID\",\n        \"type\": \"ImGuiID\"\n      },\n      {\n        \"name\": \"Flags\",\n        \"type\": \"ImGuiTabItemFlags\"\n      },\n      {\n        \"name\": \"LastFrameVisible\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"LastFrameSelected\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"Offset\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"Width\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"ContentWidth\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"RequestedWidth\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"NameOffset\",\n        \"type\": \"ImS32\"\n      },\n      {\n        \"name\": \"BeginOrder\",\n        \"type\": \"ImS16\"\n      },\n      {\n        \"name\": \"IndexDuringLayout\",\n        \"type\": \"ImS16\"\n      },\n      {\n        \"name\": \"WantClose\",\n        \"type\": \"bool\"\n      }\n    ],\n    \"ImGuiTable\": [\n      {\n        \"name\": \"ID\",\n        \"type\": \"ImGuiID\"\n      },\n      {\n        \"name\": \"Flags\",\n        \"type\": \"ImGuiTableFlags\"\n      },\n      {\n        \"name\": \"RawData\",\n        \"type\": \"void*\"\n      },\n      {\n        \"name\": \"TempData\",\n        \"type\": \"ImGuiTableTempData*\"\n      },\n      {\n        \"name\": \"Columns\",\n        \"template_type\": \"ImGuiTableColumn\",\n        \"type\": \"ImSpan_ImGuiTableColumn\"\n      },\n      {\n        \"name\": \"DisplayOrderToIndex\",\n        \"template_type\": \"ImGuiTableColumnIdx\",\n        \"type\": \"ImSpan_ImGuiTableColumnIdx\"\n      },\n      {\n        \"name\": \"RowCellData\",\n        \"template_type\": \"ImGuiTableCellData\",\n        \"type\": \"ImSpan_ImGuiTableCellData\"\n      },\n      {\n        \"name\": \"EnabledMaskByDisplayOrder\",\n        \"type\": \"ImBitArrayPtr\"\n      },\n      {\n        \"name\": \"EnabledMaskByIndex\",\n        \"type\": \"ImBitArrayPtr\"\n      },\n      {\n        \"name\": \"VisibleMaskByIndex\",\n        \"type\": \"ImBitArrayPtr\"\n      },\n      {\n        \"name\": \"SettingsLoadedFlags\",\n        \"type\": \"ImGuiTableFlags\"\n      },\n      {\n        \"name\": \"SettingsOffset\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"LastFrameActive\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"ColumnsCount\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"CurrentRow\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"CurrentColumn\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"InstanceCurrent\",\n        \"type\": \"ImS16\"\n      },\n      {\n        \"name\": \"InstanceInteracted\",\n        \"type\": \"ImS16\"\n      },\n      {\n        \"name\": \"RowPosY1\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"RowPosY2\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"RowMinHeight\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"RowCellPaddingY\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"RowTextBaseline\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"RowIndentOffsetX\",\n        \"type\": \"float\"\n      },\n      {\n        \"bitfield\": \"16\",\n        \"name\": \"RowFlags\",\n        \"type\": \"ImGuiTableRowFlags\"\n      },\n      {\n        \"bitfield\": \"16\",\n        \"name\": \"LastRowFlags\",\n        \"type\": \"ImGuiTableRowFlags\"\n      },\n      {\n        \"name\": \"RowBgColorCounter\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"RowBgColor[2]\",\n        \"size\": 2,\n        \"type\": \"ImU32\"\n      },\n      {\n        \"name\": \"BorderColorStrong\",\n        \"type\": \"ImU32\"\n      },\n      {\n        \"name\": \"BorderColorLight\",\n        \"type\": \"ImU32\"\n      },\n      {\n        \"name\": \"BorderX1\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"BorderX2\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"HostIndentX\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"MinColumnWidth\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"OuterPaddingX\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"CellPaddingX\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"CellSpacingX1\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"CellSpacingX2\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"InnerWidth\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"ColumnsGivenWidth\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"ColumnsAutoFitWidth\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"ColumnsStretchSumWeights\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"ResizedColumnNextWidth\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"ResizeLockMinContentsX2\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"RefScale\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"AngledHeadersHeight\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"AngledHeadersSlope\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"OuterRect\",\n        \"type\": \"ImRect\"\n      },\n      {\n        \"name\": \"InnerRect\",\n        \"type\": \"ImRect\"\n      },\n      {\n        \"name\": \"WorkRect\",\n        \"type\": \"ImRect\"\n      },\n      {\n        \"name\": \"InnerClipRect\",\n        \"type\": \"ImRect\"\n      },\n      {\n        \"name\": \"BgClipRect\",\n        \"type\": \"ImRect\"\n      },\n      {\n        \"name\": \"Bg0ClipRectForDrawCmd\",\n        \"type\": \"ImRect\"\n      },\n      {\n        \"name\": \"Bg2ClipRectForDrawCmd\",\n        \"type\": \"ImRect\"\n      },\n      {\n        \"name\": \"HostClipRect\",\n        \"type\": \"ImRect\"\n      },\n      {\n        \"name\": \"HostBackupInnerClipRect\",\n        \"type\": \"ImRect\"\n      },\n      {\n        \"name\": \"OuterWindow\",\n        \"type\": \"ImGuiWindow*\"\n      },\n      {\n        \"name\": \"InnerWindow\",\n        \"type\": \"ImGuiWindow*\"\n      },\n      {\n        \"name\": \"ColumnsNames\",\n        \"type\": \"ImGuiTextBuffer\"\n      },\n      {\n        \"name\": \"DrawSplitter\",\n        \"type\": \"ImDrawListSplitter*\"\n      },\n      {\n        \"name\": \"InstanceDataFirst\",\n        \"type\": \"ImGuiTableInstanceData\"\n      },\n      {\n        \"name\": \"InstanceDataExtra\",\n        \"template_type\": \"ImGuiTableInstanceData\",\n        \"type\": \"ImVector_ImGuiTableInstanceData\"\n      },\n      {\n        \"name\": \"SortSpecsSingle\",\n        \"type\": \"ImGuiTableColumnSortSpecs\"\n      },\n      {\n        \"name\": \"SortSpecsMulti\",\n        \"template_type\": \"ImGuiTableColumnSortSpecs\",\n        \"type\": \"ImVector_ImGuiTableColumnSortSpecs\"\n      },\n      {\n        \"name\": \"SortSpecs\",\n        \"type\": \"ImGuiTableSortSpecs\"\n      },\n      {\n        \"name\": \"SortSpecsCount\",\n        \"type\": \"ImGuiTableColumnIdx\"\n      },\n      {\n        \"name\": \"ColumnsEnabledCount\",\n        \"type\": \"ImGuiTableColumnIdx\"\n      },\n      {\n        \"name\": \"ColumnsEnabledFixedCount\",\n        \"type\": \"ImGuiTableColumnIdx\"\n      },\n      {\n        \"name\": \"DeclColumnsCount\",\n        \"type\": \"ImGuiTableColumnIdx\"\n      },\n      {\n        \"name\": \"AngledHeadersCount\",\n        \"type\": \"ImGuiTableColumnIdx\"\n      },\n      {\n        \"name\": \"HoveredColumnBody\",\n        \"type\": \"ImGuiTableColumnIdx\"\n      },\n      {\n        \"name\": \"HoveredColumnBorder\",\n        \"type\": \"ImGuiTableColumnIdx\"\n      },\n      {\n        \"name\": \"HighlightColumnHeader\",\n        \"type\": \"ImGuiTableColumnIdx\"\n      },\n      {\n        \"name\": \"AutoFitSingleColumn\",\n        \"type\": \"ImGuiTableColumnIdx\"\n      },\n      {\n        \"name\": \"ResizedColumn\",\n        \"type\": \"ImGuiTableColumnIdx\"\n      },\n      {\n        \"name\": \"LastResizedColumn\",\n        \"type\": \"ImGuiTableColumnIdx\"\n      },\n      {\n        \"name\": \"HeldHeaderColumn\",\n        \"type\": \"ImGuiTableColumnIdx\"\n      },\n      {\n        \"name\": \"ReorderColumn\",\n        \"type\": \"ImGuiTableColumnIdx\"\n      },\n      {\n        \"name\": \"ReorderColumnDir\",\n        \"type\": \"ImGuiTableColumnIdx\"\n      },\n      {\n        \"name\": \"LeftMostEnabledColumn\",\n        \"type\": \"ImGuiTableColumnIdx\"\n      },\n      {\n        \"name\": \"RightMostEnabledColumn\",\n        \"type\": \"ImGuiTableColumnIdx\"\n      },\n      {\n        \"name\": \"LeftMostStretchedColumn\",\n        \"type\": \"ImGuiTableColumnIdx\"\n      },\n      {\n        \"name\": \"RightMostStretchedColumn\",\n        \"type\": \"ImGuiTableColumnIdx\"\n      },\n      {\n        \"name\": \"ContextPopupColumn\",\n        \"type\": \"ImGuiTableColumnIdx\"\n      },\n      {\n        \"name\": \"FreezeRowsRequest\",\n        \"type\": \"ImGuiTableColumnIdx\"\n      },\n      {\n        \"name\": \"FreezeRowsCount\",\n        \"type\": \"ImGuiTableColumnIdx\"\n      },\n      {\n        \"name\": \"FreezeColumnsRequest\",\n        \"type\": \"ImGuiTableColumnIdx\"\n      },\n      {\n        \"name\": \"FreezeColumnsCount\",\n        \"type\": \"ImGuiTableColumnIdx\"\n      },\n      {\n        \"name\": \"RowCellDataCurrent\",\n        \"type\": \"ImGuiTableColumnIdx\"\n      },\n      {\n        \"name\": \"DummyDrawChannel\",\n        \"type\": \"ImGuiTableDrawChannelIdx\"\n      },\n      {\n        \"name\": \"Bg2DrawChannelCurrent\",\n        \"type\": \"ImGuiTableDrawChannelIdx\"\n      },\n      {\n        \"name\": \"Bg2DrawChannelUnfrozen\",\n        \"type\": \"ImGuiTableDrawChannelIdx\"\n      },\n      {\n        \"name\": \"IsLayoutLocked\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"IsInsideRow\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"IsInitializing\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"IsSortSpecsDirty\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"IsUsingHeaders\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"IsContextPopupOpen\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"DisableDefaultContextMenu\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"IsSettingsRequestLoad\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"IsSettingsDirty\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"IsDefaultDisplayOrder\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"IsResetAllRequest\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"IsResetDisplayOrderRequest\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"IsUnfrozenRows\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"IsDefaultSizingPolicy\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"IsActiveIdAliveBeforeTable\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"IsActiveIdInTable\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"HasScrollbarYCurr\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"HasScrollbarYPrev\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"MemoryCompacted\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"HostSkipItems\",\n        \"type\": \"bool\"\n      }\n    ],\n    \"ImGuiTableCellData\": [\n      {\n        \"name\": \"BgColor\",\n        \"type\": \"ImU32\"\n      },\n      {\n        \"name\": \"Column\",\n        \"type\": \"ImGuiTableColumnIdx\"\n      }\n    ],\n    \"ImGuiTableColumn\": [\n      {\n        \"name\": \"Flags\",\n        \"type\": \"ImGuiTableColumnFlags\"\n      },\n      {\n        \"name\": \"WidthGiven\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"MinX\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"MaxX\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"WidthRequest\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"WidthAuto\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"WidthMax\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"StretchWeight\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"InitStretchWeightOrWidth\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"ClipRect\",\n        \"type\": \"ImRect\"\n      },\n      {\n        \"name\": \"UserID\",\n        \"type\": \"ImGuiID\"\n      },\n      {\n        \"name\": \"WorkMinX\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"WorkMaxX\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"ItemWidth\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"ContentMaxXFrozen\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"ContentMaxXUnfrozen\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"ContentMaxXHeadersUsed\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"ContentMaxXHeadersIdeal\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"NameOffset\",\n        \"type\": \"ImS16\"\n      },\n      {\n        \"name\": \"DisplayOrder\",\n        \"type\": \"ImGuiTableColumnIdx\"\n      },\n      {\n        \"name\": \"IndexWithinEnabledSet\",\n        \"type\": \"ImGuiTableColumnIdx\"\n      },\n      {\n        \"name\": \"PrevEnabledColumn\",\n        \"type\": \"ImGuiTableColumnIdx\"\n      },\n      {\n        \"name\": \"NextEnabledColumn\",\n        \"type\": \"ImGuiTableColumnIdx\"\n      },\n      {\n        \"name\": \"SortOrder\",\n        \"type\": \"ImGuiTableColumnIdx\"\n      },\n      {\n        \"name\": \"DrawChannelCurrent\",\n        \"type\": \"ImGuiTableDrawChannelIdx\"\n      },\n      {\n        \"name\": \"DrawChannelFrozen\",\n        \"type\": \"ImGuiTableDrawChannelIdx\"\n      },\n      {\n        \"name\": \"DrawChannelUnfrozen\",\n        \"type\": \"ImGuiTableDrawChannelIdx\"\n      },\n      {\n        \"name\": \"IsEnabled\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"IsUserEnabled\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"IsUserEnabledNextFrame\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"IsVisibleX\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"IsVisibleY\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"IsRequestOutput\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"IsSkipItems\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"IsPreserveWidthAuto\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"NavLayerCurrent\",\n        \"type\": \"ImS8\"\n      },\n      {\n        \"name\": \"AutoFitQueue\",\n        \"type\": \"ImU8\"\n      },\n      {\n        \"name\": \"CannotSkipItemsQueue\",\n        \"type\": \"ImU8\"\n      },\n      {\n        \"bitfield\": \"2\",\n        \"name\": \"SortDirection\",\n        \"type\": \"ImU8\"\n      },\n      {\n        \"bitfield\": \"2\",\n        \"name\": \"SortDirectionsAvailCount\",\n        \"type\": \"ImU8\"\n      },\n      {\n        \"bitfield\": \"4\",\n        \"name\": \"SortDirectionsAvailMask\",\n        \"type\": \"ImU8\"\n      },\n      {\n        \"name\": \"SortDirectionsAvailList\",\n        \"type\": \"ImU8\"\n      }\n    ],\n    \"ImGuiTableColumnSettings\": [\n      {\n        \"name\": \"WidthOrWeight\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"UserID\",\n        \"type\": \"ImGuiID\"\n      },\n      {\n        \"name\": \"Index\",\n        \"type\": \"ImGuiTableColumnIdx\"\n      },\n      {\n        \"name\": \"DisplayOrder\",\n        \"type\": \"ImGuiTableColumnIdx\"\n      },\n      {\n        \"name\": \"SortOrder\",\n        \"type\": \"ImGuiTableColumnIdx\"\n      },\n      {\n        \"bitfield\": \"2\",\n        \"name\": \"SortDirection\",\n        \"type\": \"ImU8\"\n      },\n      {\n        \"bitfield\": \"1\",\n        \"name\": \"IsEnabled\",\n        \"type\": \"ImU8\"\n      },\n      {\n        \"bitfield\": \"1\",\n        \"name\": \"IsStretch\",\n        \"type\": \"ImU8\"\n      }\n    ],\n    \"ImGuiTableColumnSortSpecs\": [\n      {\n        \"name\": \"ColumnUserID\",\n        \"type\": \"ImGuiID\"\n      },\n      {\n        \"name\": \"ColumnIndex\",\n        \"type\": \"ImS16\"\n      },\n      {\n        \"name\": \"SortOrder\",\n        \"type\": \"ImS16\"\n      },\n      {\n        \"name\": \"SortDirection\",\n        \"type\": \"ImGuiSortDirection\"\n      }\n    ],\n    \"ImGuiTableHeaderData\": [\n      {\n        \"name\": \"Index\",\n        \"type\": \"ImGuiTableColumnIdx\"\n      },\n      {\n        \"name\": \"TextColor\",\n        \"type\": \"ImU32\"\n      },\n      {\n        \"name\": \"BgColor0\",\n        \"type\": \"ImU32\"\n      },\n      {\n        \"name\": \"BgColor1\",\n        \"type\": \"ImU32\"\n      }\n    ],\n    \"ImGuiTableInstanceData\": [\n      {\n        \"name\": \"TableInstanceID\",\n        \"type\": \"ImGuiID\"\n      },\n      {\n        \"name\": \"LastOuterHeight\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"LastTopHeadersRowHeight\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"LastFrozenHeight\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"HoveredRowLast\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"HoveredRowNext\",\n        \"type\": \"int\"\n      }\n    ],\n    \"ImGuiTableSettings\": [\n      {\n        \"name\": \"ID\",\n        \"type\": \"ImGuiID\"\n      },\n      {\n        \"name\": \"SaveFlags\",\n        \"type\": \"ImGuiTableFlags\"\n      },\n      {\n        \"name\": \"RefScale\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"ColumnsCount\",\n        \"type\": \"ImGuiTableColumnIdx\"\n      },\n      {\n        \"name\": \"ColumnsCountMax\",\n        \"type\": \"ImGuiTableColumnIdx\"\n      },\n      {\n        \"name\": \"WantApply\",\n        \"type\": \"bool\"\n      }\n    ],\n    \"ImGuiTableSortSpecs\": [\n      {\n        \"name\": \"Specs\",\n        \"type\": \"const ImGuiTableColumnSortSpecs*\"\n      },\n      {\n        \"name\": \"SpecsCount\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"SpecsDirty\",\n        \"type\": \"bool\"\n      }\n    ],\n    \"ImGuiTableTempData\": [\n      {\n        \"name\": \"TableIndex\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"LastTimeActive\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"AngledHeadersExtraWidth\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"AngledHeadersRequests\",\n        \"template_type\": \"ImGuiTableHeaderData\",\n        \"type\": \"ImVector_ImGuiTableHeaderData\"\n      },\n      {\n        \"name\": \"UserOuterSize\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"DrawSplitter\",\n        \"type\": \"ImDrawListSplitter\"\n      },\n      {\n        \"name\": \"HostBackupWorkRect\",\n        \"type\": \"ImRect\"\n      },\n      {\n        \"name\": \"HostBackupParentWorkRect\",\n        \"type\": \"ImRect\"\n      },\n      {\n        \"name\": \"HostBackupPrevLineSize\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"HostBackupCurrLineSize\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"HostBackupCursorMaxPos\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"HostBackupColumnsOffset\",\n        \"type\": \"ImVec1\"\n      },\n      {\n        \"name\": \"HostBackupItemWidth\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"HostBackupItemWidthStackSize\",\n        \"type\": \"int\"\n      }\n    ],\n    \"ImGuiTextBuffer\": [\n      {\n        \"name\": \"Buf\",\n        \"template_type\": \"char\",\n        \"type\": \"ImVector_char\"\n      }\n    ],\n    \"ImGuiTextFilter\": [\n      {\n        \"name\": \"InputBuf[256]\",\n        \"size\": 256,\n        \"type\": \"char\"\n      },\n      {\n        \"name\": \"Filters\",\n        \"template_type\": \"ImGuiTextRange\",\n        \"type\": \"ImVector_ImGuiTextRange\"\n      },\n      {\n        \"name\": \"CountGrep\",\n        \"type\": \"int\"\n      }\n    ],\n    \"ImGuiTextIndex\": [\n      {\n        \"name\": \"LineOffsets\",\n        \"template_type\": \"int\",\n        \"type\": \"ImVector_int\"\n      },\n      {\n        \"name\": \"EndOffset\",\n        \"type\": \"int\"\n      }\n    ],\n    \"ImGuiTextRange\": [\n      {\n        \"name\": \"b\",\n        \"type\": \"const char*\"\n      },\n      {\n        \"name\": \"e\",\n        \"type\": \"const char*\"\n      }\n    ],\n    \"ImGuiTreeNodeStackData\": [\n      {\n        \"name\": \"ID\",\n        \"type\": \"ImGuiID\"\n      },\n      {\n        \"name\": \"TreeFlags\",\n        \"type\": \"ImGuiTreeNodeFlags\"\n      },\n      {\n        \"name\": \"ItemFlags\",\n        \"type\": \"ImGuiItemFlags\"\n      },\n      {\n        \"name\": \"NavRect\",\n        \"type\": \"ImRect\"\n      }\n    ],\n    \"ImGuiTypingSelectRequest\": [\n      {\n        \"name\": \"Flags\",\n        \"type\": \"ImGuiTypingSelectFlags\"\n      },\n      {\n        \"name\": \"SearchBufferLen\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"SearchBuffer\",\n        \"type\": \"const char*\"\n      },\n      {\n        \"name\": \"SelectRequest\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"SingleCharMode\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"SingleCharSize\",\n        \"type\": \"ImS8\"\n      }\n    ],\n    \"ImGuiTypingSelectState\": [\n      {\n        \"name\": \"Request\",\n        \"type\": \"ImGuiTypingSelectRequest\"\n      },\n      {\n        \"name\": \"SearchBuffer[64]\",\n        \"size\": 64,\n        \"type\": \"char\"\n      },\n      {\n        \"name\": \"FocusScope\",\n        \"type\": \"ImGuiID\"\n      },\n      {\n        \"name\": \"LastRequestFrame\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"LastRequestTime\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"SingleCharModeLock\",\n        \"type\": \"bool\"\n      }\n    ],\n    \"ImGuiViewport\": [\n      {\n        \"name\": \"ID\",\n        \"type\": \"ImGuiID\"\n      },\n      {\n        \"name\": \"Flags\",\n        \"type\": \"ImGuiViewportFlags\"\n      },\n      {\n        \"name\": \"Pos\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"Size\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"WorkPos\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"WorkSize\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"PlatformHandle\",\n        \"type\": \"void*\"\n      },\n      {\n        \"name\": \"PlatformHandleRaw\",\n        \"type\": \"void*\"\n      }\n    ],\n    \"ImGuiViewportP\": [\n      {\n        \"name\": \"_ImGuiViewport\",\n        \"type\": \"ImGuiViewport\"\n      },\n      {\n        \"name\": \"BgFgDrawListsLastFrame[2]\",\n        \"size\": 2,\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"BgFgDrawLists[2]\",\n        \"size\": 2,\n        \"type\": \"ImDrawList*\"\n      },\n      {\n        \"name\": \"DrawDataP\",\n        \"type\": \"ImDrawData\"\n      },\n      {\n        \"name\": \"DrawDataBuilder\",\n        \"type\": \"ImDrawDataBuilder\"\n      },\n      {\n        \"name\": \"WorkInsetMin\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"WorkInsetMax\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"BuildWorkInsetMin\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"BuildWorkInsetMax\",\n        \"type\": \"ImVec2\"\n      }\n    ],\n    \"ImGuiWindow\": [\n      {\n        \"name\": \"Ctx\",\n        \"type\": \"ImGuiContext*\"\n      },\n      {\n        \"name\": \"Name\",\n        \"type\": \"char*\"\n      },\n      {\n        \"name\": \"ID\",\n        \"type\": \"ImGuiID\"\n      },\n      {\n        \"name\": \"Flags\",\n        \"type\": \"ImGuiWindowFlags\"\n      },\n      {\n        \"name\": \"ChildFlags\",\n        \"type\": \"ImGuiChildFlags\"\n      },\n      {\n        \"name\": \"Viewport\",\n        \"type\": \"ImGuiViewportP*\"\n      },\n      {\n        \"name\": \"Pos\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"Size\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"SizeFull\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"ContentSize\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"ContentSizeIdeal\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"ContentSizeExplicit\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"WindowPadding\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"WindowRounding\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"WindowBorderSize\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"TitleBarHeight\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"MenuBarHeight\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"DecoOuterSizeX1\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"DecoOuterSizeY1\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"DecoOuterSizeX2\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"DecoOuterSizeY2\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"DecoInnerSizeX1\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"DecoInnerSizeY1\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"NameBufLen\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"MoveId\",\n        \"type\": \"ImGuiID\"\n      },\n      {\n        \"name\": \"ChildId\",\n        \"type\": \"ImGuiID\"\n      },\n      {\n        \"name\": \"PopupId\",\n        \"type\": \"ImGuiID\"\n      },\n      {\n        \"name\": \"Scroll\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"ScrollMax\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"ScrollTarget\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"ScrollTargetCenterRatio\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"ScrollTargetEdgeSnapDist\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"ScrollbarSizes\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"ScrollbarX\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"ScrollbarY\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"Active\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"WasActive\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"WriteAccessed\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"Collapsed\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"WantCollapseToggle\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"SkipItems\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"SkipRefresh\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"Appearing\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"Hidden\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"IsFallbackWindow\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"IsExplicitChild\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"HasCloseButton\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"ResizeBorderHovered\",\n        \"type\": \"signed char\"\n      },\n      {\n        \"name\": \"ResizeBorderHeld\",\n        \"type\": \"signed char\"\n      },\n      {\n        \"name\": \"BeginCount\",\n        \"type\": \"short\"\n      },\n      {\n        \"name\": \"BeginCountPreviousFrame\",\n        \"type\": \"short\"\n      },\n      {\n        \"name\": \"BeginOrderWithinParent\",\n        \"type\": \"short\"\n      },\n      {\n        \"name\": \"BeginOrderWithinContext\",\n        \"type\": \"short\"\n      },\n      {\n        \"name\": \"FocusOrder\",\n        \"type\": \"short\"\n      },\n      {\n        \"name\": \"AutoFitFramesX\",\n        \"type\": \"ImS8\"\n      },\n      {\n        \"name\": \"AutoFitFramesY\",\n        \"type\": \"ImS8\"\n      },\n      {\n        \"name\": \"AutoFitOnlyGrows\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"AutoPosLastDirection\",\n        \"type\": \"ImGuiDir\"\n      },\n      {\n        \"name\": \"HiddenFramesCanSkipItems\",\n        \"type\": \"ImS8\"\n      },\n      {\n        \"name\": \"HiddenFramesCannotSkipItems\",\n        \"type\": \"ImS8\"\n      },\n      {\n        \"name\": \"HiddenFramesForRenderOnly\",\n        \"type\": \"ImS8\"\n      },\n      {\n        \"name\": \"DisableInputsFrames\",\n        \"type\": \"ImS8\"\n      },\n      {\n        \"bitfield\": \"8\",\n        \"name\": \"SetWindowPosAllowFlags\",\n        \"type\": \"ImGuiCond\"\n      },\n      {\n        \"bitfield\": \"8\",\n        \"name\": \"SetWindowSizeAllowFlags\",\n        \"type\": \"ImGuiCond\"\n      },\n      {\n        \"bitfield\": \"8\",\n        \"name\": \"SetWindowCollapsedAllowFlags\",\n        \"type\": \"ImGuiCond\"\n      },\n      {\n        \"name\": \"SetWindowPosVal\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"SetWindowPosPivot\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"IDStack\",\n        \"template_type\": \"ImGuiID\",\n        \"type\": \"ImVector_ImGuiID\"\n      },\n      {\n        \"name\": \"DC\",\n        \"type\": \"ImGuiWindowTempData\"\n      },\n      {\n        \"name\": \"OuterRectClipped\",\n        \"type\": \"ImRect\"\n      },\n      {\n        \"name\": \"InnerRect\",\n        \"type\": \"ImRect\"\n      },\n      {\n        \"name\": \"InnerClipRect\",\n        \"type\": \"ImRect\"\n      },\n      {\n        \"name\": \"WorkRect\",\n        \"type\": \"ImRect\"\n      },\n      {\n        \"name\": \"ParentWorkRect\",\n        \"type\": \"ImRect\"\n      },\n      {\n        \"name\": \"ClipRect\",\n        \"type\": \"ImRect\"\n      },\n      {\n        \"name\": \"ContentRegionRect\",\n        \"type\": \"ImRect\"\n      },\n      {\n        \"name\": \"HitTestHoleSize\",\n        \"type\": \"ImVec2ih\"\n      },\n      {\n        \"name\": \"HitTestHoleOffset\",\n        \"type\": \"ImVec2ih\"\n      },\n      {\n        \"name\": \"LastFrameActive\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"LastTimeActive\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"ItemWidthDefault\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"StateStorage\",\n        \"type\": \"ImGuiStorage\"\n      },\n      {\n        \"name\": \"ColumnsStorage\",\n        \"template_type\": \"ImGuiOldColumns\",\n        \"type\": \"ImVector_ImGuiOldColumns\"\n      },\n      {\n        \"name\": \"FontWindowScale\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"SettingsOffset\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"DrawList\",\n        \"type\": \"ImDrawList*\"\n      },\n      {\n        \"name\": \"DrawListInst\",\n        \"type\": \"ImDrawList\"\n      },\n      {\n        \"name\": \"ParentWindow\",\n        \"type\": \"ImGuiWindow*\"\n      },\n      {\n        \"name\": \"ParentWindowInBeginStack\",\n        \"type\": \"ImGuiWindow*\"\n      },\n      {\n        \"name\": \"RootWindow\",\n        \"type\": \"ImGuiWindow*\"\n      },\n      {\n        \"name\": \"RootWindowPopupTree\",\n        \"type\": \"ImGuiWindow*\"\n      },\n      {\n        \"name\": \"RootWindowForTitleBarHighlight\",\n        \"type\": \"ImGuiWindow*\"\n      },\n      {\n        \"name\": \"RootWindowForNav\",\n        \"type\": \"ImGuiWindow*\"\n      },\n      {\n        \"name\": \"ParentWindowForFocusRoute\",\n        \"type\": \"ImGuiWindow*\"\n      },\n      {\n        \"name\": \"NavLastChildNavWindow\",\n        \"type\": \"ImGuiWindow*\"\n      },\n      {\n        \"name\": \"NavLastIds[ImGuiNavLayer_COUNT]\",\n        \"size\": 2,\n        \"type\": \"ImGuiID\"\n      },\n      {\n        \"name\": \"NavRectRel[ImGuiNavLayer_COUNT]\",\n        \"size\": 2,\n        \"type\": \"ImRect\"\n      },\n      {\n        \"name\": \"NavPreferredScoringPosRel[ImGuiNavLayer_COUNT]\",\n        \"size\": 2,\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"NavRootFocusScopeId\",\n        \"type\": \"ImGuiID\"\n      },\n      {\n        \"name\": \"MemoryDrawListIdxCapacity\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"MemoryDrawListVtxCapacity\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"MemoryCompacted\",\n        \"type\": \"bool\"\n      }\n    ],\n    \"ImGuiWindowSettings\": [\n      {\n        \"name\": \"ID\",\n        \"type\": \"ImGuiID\"\n      },\n      {\n        \"name\": \"Pos\",\n        \"type\": \"ImVec2ih\"\n      },\n      {\n        \"name\": \"Size\",\n        \"type\": \"ImVec2ih\"\n      },\n      {\n        \"name\": \"Collapsed\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"IsChild\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"WantApply\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"WantDelete\",\n        \"type\": \"bool\"\n      }\n    ],\n    \"ImGuiWindowStackData\": [\n      {\n        \"name\": \"Window\",\n        \"type\": \"ImGuiWindow*\"\n      },\n      {\n        \"name\": \"ParentLastItemDataBackup\",\n        \"type\": \"ImGuiLastItemData\"\n      },\n      {\n        \"name\": \"StackSizesInBegin\",\n        \"type\": \"ImGuiErrorRecoveryState\"\n      },\n      {\n        \"name\": \"DisabledOverrideReenable\",\n        \"type\": \"bool\"\n      }\n    ],\n    \"ImGuiWindowTempData\": [\n      {\n        \"name\": \"CursorPos\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"CursorPosPrevLine\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"CursorStartPos\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"CursorMaxPos\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"IdealMaxPos\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"CurrLineSize\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"PrevLineSize\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"CurrLineTextBaseOffset\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"PrevLineTextBaseOffset\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"IsSameLine\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"IsSetPos\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"Indent\",\n        \"type\": \"ImVec1\"\n      },\n      {\n        \"name\": \"ColumnsOffset\",\n        \"type\": \"ImVec1\"\n      },\n      {\n        \"name\": \"GroupOffset\",\n        \"type\": \"ImVec1\"\n      },\n      {\n        \"name\": \"CursorStartPosLossyness\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"NavLayerCurrent\",\n        \"type\": \"ImGuiNavLayer\"\n      },\n      {\n        \"name\": \"NavLayersActiveMask\",\n        \"type\": \"short\"\n      },\n      {\n        \"name\": \"NavLayersActiveMaskNext\",\n        \"type\": \"short\"\n      },\n      {\n        \"name\": \"NavIsScrollPushableX\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"NavHideHighlightOneFrame\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"NavWindowHasScrollY\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"MenuBarAppending\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"MenuBarOffset\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"MenuColumns\",\n        \"type\": \"ImGuiMenuColumns\"\n      },\n      {\n        \"name\": \"TreeDepth\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"TreeHasStackDataDepthMask\",\n        \"type\": \"ImU32\"\n      },\n      {\n        \"name\": \"ChildWindows\",\n        \"template_type\": \"ImGuiWindow*\",\n        \"type\": \"ImVector_ImGuiWindowPtr\"\n      },\n      {\n        \"name\": \"StateStorage\",\n        \"type\": \"ImGuiStorage*\"\n      },\n      {\n        \"name\": \"CurrentColumns\",\n        \"type\": \"ImGuiOldColumns*\"\n      },\n      {\n        \"name\": \"CurrentTableIdx\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"LayoutType\",\n        \"type\": \"ImGuiLayoutType\"\n      },\n      {\n        \"name\": \"ParentLayoutType\",\n        \"type\": \"ImGuiLayoutType\"\n      },\n      {\n        \"name\": \"ModalDimBgColor\",\n        \"type\": \"ImU32\"\n      },\n      {\n        \"name\": \"ItemWidth\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"TextWrapPos\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"ItemWidthStack\",\n        \"template_type\": \"float\",\n        \"type\": \"ImVector_float\"\n      },\n      {\n        \"name\": \"TextWrapPosStack\",\n        \"template_type\": \"float\",\n        \"type\": \"ImVector_float\"\n      }\n    ],\n    \"ImRect\": [\n      {\n        \"name\": \"Min\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"Max\",\n        \"type\": \"ImVec2\"\n      }\n    ],\n    \"ImVec1\": [\n      {\n        \"name\": \"x\",\n        \"type\": \"float\"\n      }\n    ],\n    \"ImVec2\": [\n      {\n        \"name\": \"x\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"y\",\n        \"type\": \"float\"\n      }\n    ],\n    \"ImVec2ih\": [\n      {\n        \"name\": \"x\",\n        \"type\": \"short\"\n      },\n      {\n        \"name\": \"y\",\n        \"type\": \"short\"\n      }\n    ],\n    \"ImVec4\": [\n      {\n        \"name\": \"x\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"y\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"z\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"w\",\n        \"type\": \"float\"\n      }\n    ]\n  },\n  \"templated_structs\": {\n    \"ImBitArray\": [\n      {\n        \"name\": \"Storage[(BITCOUNT+31)>>5]\",\n        \"type\": \"ImU32\"\n      }\n    ],\n    \"ImChunkStream\": [\n      {\n        \"name\": \"Buf\",\n        \"template_type\": \"char\",\n        \"type\": \"ImVector_char\"\n      }\n    ],\n    \"ImPool\": [\n      {\n        \"name\": \"Buf\",\n        \"type\": \"ImVector<T>\"\n      },\n      {\n        \"name\": \"Map\",\n        \"type\": \"ImGuiStorage\"\n      },\n      {\n        \"name\": \"FreeIdx\",\n        \"type\": \"ImPoolIdx\"\n      },\n      {\n        \"name\": \"AliveCount\",\n        \"type\": \"ImPoolIdx\"\n      }\n    ],\n    \"ImSpan\": [\n      {\n        \"name\": \"Data\",\n        \"type\": \"T*\"\n      },\n      {\n        \"name\": \"DataEnd\",\n        \"type\": \"T*\"\n      }\n    ],\n    \"ImSpanAllocator\": [\n      {\n        \"name\": \"BasePtr\",\n        \"type\": \"char*\"\n      },\n      {\n        \"name\": \"CurrOff\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"CurrIdx\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"Offsets[CHUNKS]\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"Sizes[CHUNKS]\",\n        \"type\": \"int\"\n      }\n    ],\n    \"ImVector\": [\n      {\n        \"name\": \"Size\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"Capacity\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"Data\",\n        \"type\": \"T*\"\n      }\n    ]\n  },\n  \"templates_done\": {\n    \"ImBitArray\": {\n      \"ImGuiKey_NamedKey_COUNT, -ImGuiKey_NamedKey_BEGIN\": true\n    },\n    \"ImChunkStream\": {\n      \"ImGuiTableSettings\": true,\n      \"ImGuiWindowSettings\": true\n    },\n    \"ImPool\": {\n      \"ImGuiMultiSelectState\": true,\n      \"ImGuiTabBar\": true,\n      \"ImGuiTable\": true\n    },\n    \"ImSpan\": {\n      \"ImGuiTableCellData\": true,\n      \"ImGuiTableColumn\": true,\n      \"ImGuiTableColumnIdx\": true\n    },\n    \"ImVector\": {\n      \"ImDrawChannel\": true,\n      \"ImDrawCmd\": true,\n      \"ImDrawIdx\": true,\n      \"ImDrawList*\": true,\n      \"ImDrawVert\": true,\n      \"ImFont*\": true,\n      \"ImFontAtlasCustomRect\": true,\n      \"ImFontConfig\": true,\n      \"ImFontGlyph\": true,\n      \"ImGuiColorMod\": true,\n      \"ImGuiContextHook\": true,\n      \"ImGuiFocusScopeData\": true,\n      \"ImGuiGroupData\": true,\n      \"ImGuiID\": true,\n      \"ImGuiInputEvent\": true,\n      \"ImGuiItemFlags\": true,\n      \"ImGuiKeyRoutingData\": true,\n      \"ImGuiListClipperData\": true,\n      \"ImGuiListClipperRange\": true,\n      \"ImGuiMultiSelectState\": true,\n      \"ImGuiMultiSelectTempData\": true,\n      \"ImGuiOldColumnData\": true,\n      \"ImGuiOldColumns\": true,\n      \"ImGuiPopupData\": true,\n      \"ImGuiPtrOrIndex\": true,\n      \"ImGuiSelectionRequest\": true,\n      \"ImGuiSettingsHandler\": true,\n      \"ImGuiShrinkWidthItem\": true,\n      \"ImGuiStackLevelInfo\": true,\n      \"ImGuiStoragePair\": true,\n      \"ImGuiStyleMod\": true,\n      \"ImGuiTabBar\": true,\n      \"ImGuiTabItem\": true,\n      \"ImGuiTable\": true,\n      \"ImGuiTableColumnSortSpecs\": true,\n      \"ImGuiTableHeaderData\": true,\n      \"ImGuiTableInstanceData\": true,\n      \"ImGuiTableTempData\": true,\n      \"ImGuiTextRange\": true,\n      \"ImGuiTreeNodeStackData\": true,\n      \"ImGuiViewportP*\": true,\n      \"ImGuiWindow*\": true,\n      \"ImGuiWindowStackData\": true,\n      \"ImTextureID\": true,\n      \"ImU32\": true,\n      \"ImU8\": true,\n      \"ImVec2\": true,\n      \"ImVec4\": true,\n      \"ImWchar\": true,\n      \"char\": true,\n      \"float\": true,\n      \"int\": true,\n      \"unsigned char\": true\n    }\n  },\n  \"typenames\": {\n    \"ImBitArray\": \"int BITCOUNT, int OFFSET = 0\",\n    \"ImChunkStream\": \"T\",\n    \"ImPool\": \"T\",\n    \"ImSpan\": \"T\",\n    \"ImSpanAllocator\": \"int CHUNKS\",\n    \"ImVector\": \"T\"\n  }\n}"
  },
  {
    "path": "tools/ImGui.NET/CodeGenerator/definitions/cimgui/variants.json",
    "content": "{\n    \"ImFontAtlas_GetTexDataAsAlpha8\": [\n        {\n            \"name\": \"out_pixels\",\n            \"type\": \"unsigned char**\",\n            \"variants\": [ \"IntPtr*\" ]\n        }\n    ],\n    \"ImFontAtlas_GetTexDataAsRGBA32\": [\n        {\n            \"name\": \"out_pixels\",\n            \"type\": \"unsigned char**\",\n            \"variants\": [ \"IntPtr*\" ]\n        }\n    ]\n}"
  },
  {
    "path": "tools/ImGui.NET/CodeGenerator/definitions/cimguizmo/definitions.json",
    "content": "{\n  \"ImGuizmo_AllowAxisFlip\": [\n    {\n      \"args\": \"(bool value)\",\n      \"argsT\": [\n        {\n          \"name\": \"value\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"argsoriginal\": \"(bool value)\",\n      \"call_args\": \"(value)\",\n      \"cimguiname\": \"ImGuizmo_AllowAxisFlip\",\n      \"defaults\": {},\n      \"funcname\": \"AllowAxisFlip\",\n      \"location\": \"ImGuizmo:212\",\n      \"namespace\": \"ImGuizmo\",\n      \"ov_cimguiname\": \"ImGuizmo_AllowAxisFlip\",\n      \"ret\": \"void\",\n      \"signature\": \"(bool)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImGuizmo_BeginFrame\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImGuizmo_BeginFrame\",\n      \"defaults\": {},\n      \"funcname\": \"BeginFrame\",\n      \"location\": \"ImGuizmo:121\",\n      \"namespace\": \"ImGuizmo\",\n      \"ov_cimguiname\": \"ImGuizmo_BeginFrame\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImGuizmo_DecomposeMatrixToComponents\": [\n    {\n      \"args\": \"(const float* matrix,float* translation,float* rotation,float* scale)\",\n      \"argsT\": [\n        {\n          \"name\": \"matrix\",\n          \"type\": \"const float*\"\n        },\n        {\n          \"name\": \"translation\",\n          \"type\": \"float*\"\n        },\n        {\n          \"name\": \"rotation\",\n          \"type\": \"float*\"\n        },\n        {\n          \"name\": \"scale\",\n          \"type\": \"float*\"\n        }\n      ],\n      \"argsoriginal\": \"(const float* matrix,float* translation,float* rotation,float* scale)\",\n      \"call_args\": \"(matrix,translation,rotation,scale)\",\n      \"cimguiname\": \"ImGuizmo_DecomposeMatrixToComponents\",\n      \"defaults\": {},\n      \"funcname\": \"DecomposeMatrixToComponents\",\n      \"location\": \"ImGuizmo:151\",\n      \"namespace\": \"ImGuizmo\",\n      \"ov_cimguiname\": \"ImGuizmo_DecomposeMatrixToComponents\",\n      \"ret\": \"void\",\n      \"signature\": \"(const float*,float*,float*,float*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImGuizmo_DrawCubes\": [\n    {\n      \"args\": \"(const float* view,const float* projection,const float* matrices,int matrixCount)\",\n      \"argsT\": [\n        {\n          \"name\": \"view\",\n          \"type\": \"const float*\"\n        },\n        {\n          \"name\": \"projection\",\n          \"type\": \"const float*\"\n        },\n        {\n          \"name\": \"matrices\",\n          \"type\": \"const float*\"\n        },\n        {\n          \"name\": \"matrixCount\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const float* view,const float* projection,const float* matrices,int matrixCount)\",\n      \"call_args\": \"(view,projection,matrices,matrixCount)\",\n      \"cimguiname\": \"ImGuizmo_DrawCubes\",\n      \"defaults\": {},\n      \"funcname\": \"DrawCubes\",\n      \"location\": \"ImGuizmo:159\",\n      \"namespace\": \"ImGuizmo\",\n      \"ov_cimguiname\": \"ImGuizmo_DrawCubes\",\n      \"ret\": \"void\",\n      \"signature\": \"(const float*,const float*,const float*,int)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImGuizmo_DrawGrid\": [\n    {\n      \"args\": \"(const float* view,const float* projection,const float* matrix,const float gridSize)\",\n      \"argsT\": [\n        {\n          \"name\": \"view\",\n          \"type\": \"const float*\"\n        },\n        {\n          \"name\": \"projection\",\n          \"type\": \"const float*\"\n        },\n        {\n          \"name\": \"matrix\",\n          \"type\": \"const float*\"\n        },\n        {\n          \"name\": \"gridSize\",\n          \"type\": \"const float\"\n        }\n      ],\n      \"argsoriginal\": \"(const float* view,const float* projection,const float* matrix,const float gridSize)\",\n      \"call_args\": \"(view,projection,matrix,gridSize)\",\n      \"cimguiname\": \"ImGuizmo_DrawGrid\",\n      \"defaults\": {},\n      \"funcname\": \"DrawGrid\",\n      \"location\": \"ImGuizmo:160\",\n      \"namespace\": \"ImGuizmo\",\n      \"ov_cimguiname\": \"ImGuizmo_DrawGrid\",\n      \"ret\": \"void\",\n      \"signature\": \"(const float*,const float*,const float*,const float)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImGuizmo_Enable\": [\n    {\n      \"args\": \"(bool enable)\",\n      \"argsT\": [\n        {\n          \"name\": \"enable\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"argsoriginal\": \"(bool enable)\",\n      \"call_args\": \"(enable)\",\n      \"cimguiname\": \"ImGuizmo_Enable\",\n      \"defaults\": {},\n      \"funcname\": \"Enable\",\n      \"location\": \"ImGuizmo:137\",\n      \"namespace\": \"ImGuizmo\",\n      \"ov_cimguiname\": \"ImGuizmo_Enable\",\n      \"ret\": \"void\",\n      \"signature\": \"(bool)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImGuizmo_IsOver\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImGuizmo_IsOver\",\n      \"defaults\": {},\n      \"funcname\": \"IsOver\",\n      \"location\": \"ImGuizmo:130\",\n      \"namespace\": \"ImGuizmo\",\n      \"ov_cimguiname\": \"ImGuizmo_IsOverNil\",\n      \"ret\": \"bool\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(OPERATION op)\",\n      \"argsT\": [\n        {\n          \"name\": \"op\",\n          \"type\": \"OPERATION\"\n        }\n      ],\n      \"argsoriginal\": \"(OPERATION op)\",\n      \"call_args\": \"(op)\",\n      \"cimguiname\": \"ImGuizmo_IsOver\",\n      \"defaults\": {},\n      \"funcname\": \"IsOver\",\n      \"location\": \"ImGuizmo:206\",\n      \"namespace\": \"ImGuizmo\",\n      \"ov_cimguiname\": \"ImGuizmo_IsOverOPERATION\",\n      \"ret\": \"bool\",\n      \"signature\": \"(OPERATION)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImGuizmo_IsUsing\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImGuizmo_IsUsing\",\n      \"defaults\": {},\n      \"funcname\": \"IsUsing\",\n      \"location\": \"ImGuizmo:133\",\n      \"namespace\": \"ImGuizmo\",\n      \"ov_cimguiname\": \"ImGuizmo_IsUsing\",\n      \"ret\": \"bool\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImGuizmo_Manipulate\": [\n    {\n      \"args\": \"(const float* view,const float* projection,OPERATION operation,MODE mode,float* matrix,float* deltaMatrix,const float* snap,const float* localBounds,const float* boundsSnap)\",\n      \"argsT\": [\n        {\n          \"name\": \"view\",\n          \"type\": \"const float*\"\n        },\n        {\n          \"name\": \"projection\",\n          \"type\": \"const float*\"\n        },\n        {\n          \"name\": \"operation\",\n          \"type\": \"OPERATION\"\n        },\n        {\n          \"name\": \"mode\",\n          \"type\": \"MODE\"\n        },\n        {\n          \"name\": \"matrix\",\n          \"type\": \"float*\"\n        },\n        {\n          \"name\": \"deltaMatrix\",\n          \"type\": \"float*\"\n        },\n        {\n          \"name\": \"snap\",\n          \"type\": \"const float*\"\n        },\n        {\n          \"name\": \"localBounds\",\n          \"type\": \"const float*\"\n        },\n        {\n          \"name\": \"boundsSnap\",\n          \"type\": \"const float*\"\n        }\n      ],\n      \"argsoriginal\": \"(const float* view,const float* projection,OPERATION operation,MODE mode,float* matrix,float* deltaMatrix=NULL,const float* snap=NULL,const float* localBounds=NULL,const float* boundsSnap=NULL)\",\n      \"call_args\": \"(view,projection,operation,mode,matrix,deltaMatrix,snap,localBounds,boundsSnap)\",\n      \"cimguiname\": \"ImGuizmo_Manipulate\",\n      \"defaults\": {\n        \"boundsSnap\": \"NULL\",\n        \"deltaMatrix\": \"NULL\",\n        \"localBounds\": \"NULL\",\n        \"snap\": \"NULL\"\n      },\n      \"funcname\": \"Manipulate\",\n      \"location\": \"ImGuizmo:195\",\n      \"namespace\": \"ImGuizmo\",\n      \"ov_cimguiname\": \"ImGuizmo_Manipulate\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const float*,const float*,OPERATION,MODE,float*,float*,const float*,const float*,const float*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImGuizmo_RecomposeMatrixFromComponents\": [\n    {\n      \"args\": \"(const float* translation,const float* rotation,const float* scale,float* matrix)\",\n      \"argsT\": [\n        {\n          \"name\": \"translation\",\n          \"type\": \"const float*\"\n        },\n        {\n          \"name\": \"rotation\",\n          \"type\": \"const float*\"\n        },\n        {\n          \"name\": \"scale\",\n          \"type\": \"const float*\"\n        },\n        {\n          \"name\": \"matrix\",\n          \"type\": \"float*\"\n        }\n      ],\n      \"argsoriginal\": \"(const float* translation,const float* rotation,const float* scale,float* matrix)\",\n      \"call_args\": \"(translation,rotation,scale,matrix)\",\n      \"cimguiname\": \"ImGuizmo_RecomposeMatrixFromComponents\",\n      \"defaults\": {},\n      \"funcname\": \"RecomposeMatrixFromComponents\",\n      \"location\": \"ImGuizmo:152\",\n      \"namespace\": \"ImGuizmo\",\n      \"ov_cimguiname\": \"ImGuizmo_RecomposeMatrixFromComponents\",\n      \"ret\": \"void\",\n      \"signature\": \"(const float*,const float*,const float*,float*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImGuizmo_SetDrawlist\": [\n    {\n      \"args\": \"(ImDrawList* drawlist)\",\n      \"argsT\": [\n        {\n          \"name\": \"drawlist\",\n          \"type\": \"ImDrawList*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImDrawList* drawlist=nullptr)\",\n      \"call_args\": \"(drawlist)\",\n      \"cimguiname\": \"ImGuizmo_SetDrawlist\",\n      \"defaults\": {\n        \"drawlist\": \"nullptr\"\n      },\n      \"funcname\": \"SetDrawlist\",\n      \"location\": \"ImGuizmo:118\",\n      \"namespace\": \"ImGuizmo\",\n      \"ov_cimguiname\": \"ImGuizmo_SetDrawlist\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImDrawList*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImGuizmo_SetGizmoSizeClipSpace\": [\n    {\n      \"args\": \"(float value)\",\n      \"argsT\": [\n        {\n          \"name\": \"value\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(float value)\",\n      \"call_args\": \"(value)\",\n      \"cimguiname\": \"ImGuizmo_SetGizmoSizeClipSpace\",\n      \"defaults\": {},\n      \"funcname\": \"SetGizmoSizeClipSpace\",\n      \"location\": \"ImGuizmo:207\",\n      \"namespace\": \"ImGuizmo\",\n      \"ov_cimguiname\": \"ImGuizmo_SetGizmoSizeClipSpace\",\n      \"ret\": \"void\",\n      \"signature\": \"(float)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImGuizmo_SetID\": [\n    {\n      \"args\": \"(int id)\",\n      \"argsT\": [\n        {\n          \"name\": \"id\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(int id)\",\n      \"call_args\": \"(id)\",\n      \"cimguiname\": \"ImGuizmo_SetID\",\n      \"defaults\": {},\n      \"funcname\": \"SetID\",\n      \"location\": \"ImGuizmo:203\",\n      \"namespace\": \"ImGuizmo\",\n      \"ov_cimguiname\": \"ImGuizmo_SetID\",\n      \"ret\": \"void\",\n      \"signature\": \"(int)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImGuizmo_SetImGuiContext\": [\n    {\n      \"args\": \"(ImGuiContext* ctx)\",\n      \"argsT\": [\n        {\n          \"name\": \"ctx\",\n          \"type\": \"ImGuiContext*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiContext* ctx)\",\n      \"call_args\": \"(ctx)\",\n      \"cimguiname\": \"ImGuizmo_SetImGuiContext\",\n      \"defaults\": {},\n      \"funcname\": \"SetImGuiContext\",\n      \"location\": \"ImGuizmo:127\",\n      \"namespace\": \"ImGuizmo\",\n      \"ov_cimguiname\": \"ImGuizmo_SetImGuiContext\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiContext*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImGuizmo_SetOrthographic\": [\n    {\n      \"args\": \"(bool isOrthographic)\",\n      \"argsT\": [\n        {\n          \"name\": \"isOrthographic\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"argsoriginal\": \"(bool isOrthographic)\",\n      \"call_args\": \"(isOrthographic)\",\n      \"cimguiname\": \"ImGuizmo_SetOrthographic\",\n      \"defaults\": {},\n      \"funcname\": \"SetOrthographic\",\n      \"location\": \"ImGuizmo:156\",\n      \"namespace\": \"ImGuizmo\",\n      \"ov_cimguiname\": \"ImGuizmo_SetOrthographic\",\n      \"ret\": \"void\",\n      \"signature\": \"(bool)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImGuizmo_SetRect\": [\n    {\n      \"args\": \"(float x,float y,float width,float height)\",\n      \"argsT\": [\n        {\n          \"name\": \"x\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"y\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"width\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"height\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(float x,float y,float width,float height)\",\n      \"call_args\": \"(x,y,width,height)\",\n      \"cimguiname\": \"ImGuizmo_SetRect\",\n      \"defaults\": {},\n      \"funcname\": \"SetRect\",\n      \"location\": \"ImGuizmo:154\",\n      \"namespace\": \"ImGuizmo\",\n      \"ov_cimguiname\": \"ImGuizmo_SetRect\",\n      \"ret\": \"void\",\n      \"signature\": \"(float,float,float,float)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImGuizmo_ViewManipulate\": [\n    {\n      \"args\": \"(float* view,float length,ImVec2 position,ImVec2 size,ImU32 backgroundColor)\",\n      \"argsT\": [\n        {\n          \"name\": \"view\",\n          \"type\": \"float*\"\n        },\n        {\n          \"name\": \"length\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"position\",\n          \"type\": \"ImVec2\"\n        },\n        {\n          \"name\": \"size\",\n          \"type\": \"ImVec2\"\n        },\n        {\n          \"name\": \"backgroundColor\",\n          \"type\": \"ImU32\"\n        }\n      ],\n      \"argsoriginal\": \"(float* view,float length,ImVec2 position,ImVec2 size,ImU32 backgroundColor)\",\n      \"call_args\": \"(view,length,position,size,backgroundColor)\",\n      \"cimguiname\": \"ImGuizmo_ViewManipulate\",\n      \"defaults\": {},\n      \"funcname\": \"ViewManipulate\",\n      \"location\": \"ImGuizmo:201\",\n      \"namespace\": \"ImGuizmo\",\n      \"ov_cimguiname\": \"ImGuizmo_ViewManipulate\",\n      \"ret\": \"void\",\n      \"signature\": \"(float*,float,ImVec2,ImVec2,ImU32)\",\n      \"stname\": \"\"\n    }\n  ]\n}"
  },
  {
    "path": "tools/ImGui.NET/CodeGenerator/definitions/cimguizmo/structs_and_enums.json",
    "content": "{\n  \"enums\": {\n    \"MODE\": [\n      {\n        \"calc_value\": 0,\n        \"name\": \"LOCAL\",\n        \"value\": \"0\"\n      },\n      {\n        \"calc_value\": 1,\n        \"name\": \"WORLD\",\n        \"value\": \"1\"\n      }\n    ],\n    \"OPERATION\": [\n      {\n        \"calc_value\": 1,\n        \"name\": \"TRANSLATE_X\",\n        \"value\": \"(1u << 0)\"\n      },\n      {\n        \"calc_value\": 2,\n        \"name\": \"TRANSLATE_Y\",\n        \"value\": \"(1u << 1)\"\n      },\n      {\n        \"calc_value\": 4,\n        \"name\": \"TRANSLATE_Z\",\n        \"value\": \"(1u << 2)\"\n      },\n      {\n        \"calc_value\": 8,\n        \"name\": \"ROTATE_X\",\n        \"value\": \"(1u << 3)\"\n      },\n      {\n        \"calc_value\": 16,\n        \"name\": \"ROTATE_Y\",\n        \"value\": \"(1u << 4)\"\n      },\n      {\n        \"calc_value\": 32,\n        \"name\": \"ROTATE_Z\",\n        \"value\": \"(1u << 5)\"\n      },\n      {\n        \"calc_value\": 64,\n        \"name\": \"ROTATE_SCREEN\",\n        \"value\": \"(1u << 6)\"\n      },\n      {\n        \"calc_value\": 128,\n        \"name\": \"SCALE_X\",\n        \"value\": \"(1u << 7)\"\n      },\n      {\n        \"calc_value\": 256,\n        \"name\": \"SCALE_Y\",\n        \"value\": \"(1u << 8)\"\n      },\n      {\n        \"calc_value\": 512,\n        \"name\": \"SCALE_Z\",\n        \"value\": \"(1u << 9)\"\n      },\n      {\n        \"calc_value\": 1024,\n        \"name\": \"BOUNDS\",\n        \"value\": \"(1u << 10)\"\n      },\n      {\n        \"calc_value\": 7,\n        \"name\": \"TRANSLATE\",\n        \"value\": \"TRANSLATE_X | TRANSLATE_Y | TRANSLATE_Z\"\n      },\n      {\n        \"calc_value\": 120,\n        \"name\": \"ROTATE\",\n        \"value\": \"ROTATE_X | ROTATE_Y | ROTATE_Z | ROTATE_SCREEN\"\n      },\n      {\n        \"calc_value\": 896,\n        \"name\": \"SCALE\",\n        \"value\": \"SCALE_X | SCALE_Y | SCALE_Z\"\n      }\n    ]\n  },\n  \"enumtypes\": [],\n  \"locations\": {\n    \"MODE\": \"ImGuizmo:189\",\n    \"OPERATION\": \"ImGuizmo:166\"\n  },\n  \"structs\": []\n}"
  },
  {
    "path": "tools/ImGui.NET/CodeGenerator/definitions/cimguizmo/variants.json",
    "content": "﻿{\n}"
  },
  {
    "path": "tools/ImGui.NET/CodeGenerator/definitions/cimnodes/definitions.json",
    "content": "{\n  \"EmulateThreeButtonMouse_EmulateThreeButtonMouse\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"EmulateThreeButtonMouse_EmulateThreeButtonMouse\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"EmulateThreeButtonMouse\",\n      \"location\": \"imnodes:87\",\n      \"ov_cimguiname\": \"EmulateThreeButtonMouse_EmulateThreeButtonMouse\",\n      \"signature\": \"()\",\n      \"stname\": \"EmulateThreeButtonMouse\"\n    }\n  ],\n  \"EmulateThreeButtonMouse_destroy\": [\n    {\n      \"args\": \"(EmulateThreeButtonMouse* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"EmulateThreeButtonMouse*\"\n        }\n      ],\n      \"call_args\": \"(self)\",\n      \"cimguiname\": \"EmulateThreeButtonMouse_destroy\",\n      \"defaults\": {},\n      \"destructor\": true,\n      \"ov_cimguiname\": \"EmulateThreeButtonMouse_destroy\",\n      \"ret\": \"void\",\n      \"signature\": \"(EmulateThreeButtonMouse*)\",\n      \"stname\": \"EmulateThreeButtonMouse\"\n    }\n  ],\n  \"IO_IO\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"IO_IO\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"IO\",\n      \"location\": \"imnodes:109\",\n      \"ov_cimguiname\": \"IO_IO\",\n      \"signature\": \"()\",\n      \"stname\": \"IO\"\n    }\n  ],\n  \"IO_destroy\": [\n    {\n      \"args\": \"(IO* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"IO*\"\n        }\n      ],\n      \"call_args\": \"(self)\",\n      \"cimguiname\": \"IO_destroy\",\n      \"defaults\": {},\n      \"destructor\": true,\n      \"ov_cimguiname\": \"IO_destroy\",\n      \"ret\": \"void\",\n      \"signature\": \"(IO*)\",\n      \"stname\": \"IO\"\n    }\n  ],\n  \"LinkDetachWithModifierClick_LinkDetachWithModifierClick\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"LinkDetachWithModifierClick_LinkDetachWithModifierClick\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"LinkDetachWithModifierClick\",\n      \"location\": \"imnodes:97\",\n      \"ov_cimguiname\": \"LinkDetachWithModifierClick_LinkDetachWithModifierClick\",\n      \"signature\": \"()\",\n      \"stname\": \"LinkDetachWithModifierClick\"\n    }\n  ],\n  \"LinkDetachWithModifierClick_destroy\": [\n    {\n      \"args\": \"(LinkDetachWithModifierClick* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"LinkDetachWithModifierClick*\"\n        }\n      ],\n      \"call_args\": \"(self)\",\n      \"cimguiname\": \"LinkDetachWithModifierClick_destroy\",\n      \"defaults\": {},\n      \"destructor\": true,\n      \"ov_cimguiname\": \"LinkDetachWithModifierClick_destroy\",\n      \"ret\": \"void\",\n      \"signature\": \"(LinkDetachWithModifierClick*)\",\n      \"stname\": \"LinkDetachWithModifierClick\"\n    }\n  ],\n  \"Style_Style\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"Style_Style\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"Style\",\n      \"location\": \"imnodes:149\",\n      \"ov_cimguiname\": \"Style_Style\",\n      \"signature\": \"()\",\n      \"stname\": \"Style\"\n    }\n  ],\n  \"Style_destroy\": [\n    {\n      \"args\": \"(Style* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"Style*\"\n        }\n      ],\n      \"call_args\": \"(self)\",\n      \"cimguiname\": \"Style_destroy\",\n      \"defaults\": {},\n      \"destructor\": true,\n      \"ov_cimguiname\": \"Style_destroy\",\n      \"ret\": \"void\",\n      \"signature\": \"(Style*)\",\n      \"stname\": \"Style\"\n    }\n  ],\n  \"imnodes_BeginInputAttribute\": [\n    {\n      \"args\": \"(int id,PinShape shape)\",\n      \"argsT\": [\n        {\n          \"name\": \"id\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"shape\",\n          \"type\": \"PinShape\"\n        }\n      ],\n      \"argsoriginal\": \"(int id,PinShape shape=PinShape_CircleFilled)\",\n      \"call_args\": \"(id,shape)\",\n      \"cimguiname\": \"imnodes_BeginInputAttribute\",\n      \"defaults\": {\n        \"shape\": \"PinShape_CircleFilled\"\n      },\n      \"funcname\": \"BeginInputAttribute\",\n      \"location\": \"imnodes:216\",\n      \"namespace\": \"imnodes\",\n      \"ov_cimguiname\": \"imnodes_BeginInputAttribute\",\n      \"ret\": \"void\",\n      \"signature\": \"(int,PinShape)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"imnodes_BeginNode\": [\n    {\n      \"args\": \"(int id)\",\n      \"argsT\": [\n        {\n          \"name\": \"id\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(int id)\",\n      \"call_args\": \"(id)\",\n      \"cimguiname\": \"imnodes_BeginNode\",\n      \"defaults\": {},\n      \"funcname\": \"BeginNode\",\n      \"location\": \"imnodes:195\",\n      \"namespace\": \"imnodes\",\n      \"ov_cimguiname\": \"imnodes_BeginNode\",\n      \"ret\": \"void\",\n      \"signature\": \"(int)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"imnodes_BeginNodeEditor\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"imnodes_BeginNodeEditor\",\n      \"defaults\": {},\n      \"funcname\": \"BeginNodeEditor\",\n      \"location\": \"imnodes:185\",\n      \"namespace\": \"imnodes\",\n      \"ov_cimguiname\": \"imnodes_BeginNodeEditor\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"imnodes_BeginNodeTitleBar\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"imnodes_BeginNodeTitleBar\",\n      \"defaults\": {},\n      \"funcname\": \"BeginNodeTitleBar\",\n      \"location\": \"imnodes:203\",\n      \"namespace\": \"imnodes\",\n      \"ov_cimguiname\": \"imnodes_BeginNodeTitleBar\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"imnodes_BeginOutputAttribute\": [\n    {\n      \"args\": \"(int id,PinShape shape)\",\n      \"argsT\": [\n        {\n          \"name\": \"id\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"shape\",\n          \"type\": \"PinShape\"\n        }\n      ],\n      \"argsoriginal\": \"(int id,PinShape shape=PinShape_CircleFilled)\",\n      \"call_args\": \"(id,shape)\",\n      \"cimguiname\": \"imnodes_BeginOutputAttribute\",\n      \"defaults\": {\n        \"shape\": \"PinShape_CircleFilled\"\n      },\n      \"funcname\": \"BeginOutputAttribute\",\n      \"location\": \"imnodes:219\",\n      \"namespace\": \"imnodes\",\n      \"ov_cimguiname\": \"imnodes_BeginOutputAttribute\",\n      \"ret\": \"void\",\n      \"signature\": \"(int,PinShape)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"imnodes_BeginStaticAttribute\": [\n    {\n      \"args\": \"(int id)\",\n      \"argsT\": [\n        {\n          \"name\": \"id\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(int id)\",\n      \"call_args\": \"(id)\",\n      \"cimguiname\": \"imnodes_BeginStaticAttribute\",\n      \"defaults\": {},\n      \"funcname\": \"BeginStaticAttribute\",\n      \"location\": \"imnodes:224\",\n      \"namespace\": \"imnodes\",\n      \"ov_cimguiname\": \"imnodes_BeginStaticAttribute\",\n      \"ret\": \"void\",\n      \"signature\": \"(int)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"imnodes_ClearLinkSelection\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"imnodes_ClearLinkSelection\",\n      \"defaults\": {},\n      \"funcname\": \"ClearLinkSelection\",\n      \"location\": \"imnodes:278\",\n      \"namespace\": \"imnodes\",\n      \"ov_cimguiname\": \"imnodes_ClearLinkSelection\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"imnodes_ClearNodeSelection\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"imnodes_ClearNodeSelection\",\n      \"defaults\": {},\n      \"funcname\": \"ClearNodeSelection\",\n      \"location\": \"imnodes:277\",\n      \"namespace\": \"imnodes\",\n      \"ov_cimguiname\": \"imnodes_ClearNodeSelection\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"imnodes_EditorContextCreate\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"imnodes_EditorContextCreate\",\n      \"defaults\": {},\n      \"funcname\": \"EditorContextCreate\",\n      \"location\": \"imnodes:159\",\n      \"namespace\": \"imnodes\",\n      \"ov_cimguiname\": \"imnodes_EditorContextCreate\",\n      \"ret\": \"EditorContext*\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"imnodes_EditorContextFree\": [\n    {\n      \"args\": \"(EditorContext* noname1)\",\n      \"argsT\": [\n        {\n          \"name\": \"noname1\",\n          \"type\": \"EditorContext*\"\n        }\n      ],\n      \"argsoriginal\": \"(EditorContext*)\",\n      \"call_args\": \"(noname1)\",\n      \"cimguiname\": \"imnodes_EditorContextFree\",\n      \"defaults\": {},\n      \"funcname\": \"EditorContextFree\",\n      \"location\": \"imnodes:160\",\n      \"namespace\": \"imnodes\",\n      \"ov_cimguiname\": \"imnodes_EditorContextFree\",\n      \"ret\": \"void\",\n      \"signature\": \"(EditorContext*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"imnodes_EditorContextGetPanning\": [\n    {\n      \"args\": \"(ImVec2 *pOut)\",\n      \"argsT\": [\n        {\n          \"name\": \"pOut\",\n          \"type\": \"ImVec2*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"imnodes_EditorContextGetPanning\",\n      \"defaults\": {},\n      \"funcname\": \"EditorContextGetPanning\",\n      \"location\": \"imnodes:162\",\n      \"namespace\": \"imnodes\",\n      \"nonUDT\": 1,\n      \"ov_cimguiname\": \"imnodes_EditorContextGetPanning\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"imnodes_EditorContextMoveToNode\": [\n    {\n      \"args\": \"(const int node_id)\",\n      \"argsT\": [\n        {\n          \"name\": \"node_id\",\n          \"type\": \"const int\"\n        }\n      ],\n      \"argsoriginal\": \"(const int node_id)\",\n      \"call_args\": \"(node_id)\",\n      \"cimguiname\": \"imnodes_EditorContextMoveToNode\",\n      \"defaults\": {},\n      \"funcname\": \"EditorContextMoveToNode\",\n      \"location\": \"imnodes:164\",\n      \"namespace\": \"imnodes\",\n      \"ov_cimguiname\": \"imnodes_EditorContextMoveToNode\",\n      \"ret\": \"void\",\n      \"signature\": \"(const int)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"imnodes_EditorContextResetPanning\": [\n    {\n      \"args\": \"(const ImVec2 pos)\",\n      \"argsT\": [\n        {\n          \"name\": \"pos\",\n          \"type\": \"const ImVec2\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImVec2& pos)\",\n      \"call_args\": \"(pos)\",\n      \"cimguiname\": \"imnodes_EditorContextResetPanning\",\n      \"defaults\": {},\n      \"funcname\": \"EditorContextResetPanning\",\n      \"location\": \"imnodes:163\",\n      \"namespace\": \"imnodes\",\n      \"ov_cimguiname\": \"imnodes_EditorContextResetPanning\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImVec2)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"imnodes_EditorContextSet\": [\n    {\n      \"args\": \"(EditorContext* noname1)\",\n      \"argsT\": [\n        {\n          \"name\": \"noname1\",\n          \"type\": \"EditorContext*\"\n        }\n      ],\n      \"argsoriginal\": \"(EditorContext*)\",\n      \"call_args\": \"(noname1)\",\n      \"cimguiname\": \"imnodes_EditorContextSet\",\n      \"defaults\": {},\n      \"funcname\": \"EditorContextSet\",\n      \"location\": \"imnodes:161\",\n      \"namespace\": \"imnodes\",\n      \"ov_cimguiname\": \"imnodes_EditorContextSet\",\n      \"ret\": \"void\",\n      \"signature\": \"(EditorContext*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"imnodes_EndInputAttribute\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"imnodes_EndInputAttribute\",\n      \"defaults\": {},\n      \"funcname\": \"EndInputAttribute\",\n      \"location\": \"imnodes:217\",\n      \"namespace\": \"imnodes\",\n      \"ov_cimguiname\": \"imnodes_EndInputAttribute\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"imnodes_EndNode\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"imnodes_EndNode\",\n      \"defaults\": {},\n      \"funcname\": \"EndNode\",\n      \"location\": \"imnodes:196\",\n      \"namespace\": \"imnodes\",\n      \"ov_cimguiname\": \"imnodes_EndNode\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"imnodes_EndNodeEditor\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"imnodes_EndNodeEditor\",\n      \"defaults\": {},\n      \"funcname\": \"EndNodeEditor\",\n      \"location\": \"imnodes:186\",\n      \"namespace\": \"imnodes\",\n      \"ov_cimguiname\": \"imnodes_EndNodeEditor\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"imnodes_EndNodeTitleBar\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"imnodes_EndNodeTitleBar\",\n      \"defaults\": {},\n      \"funcname\": \"EndNodeTitleBar\",\n      \"location\": \"imnodes:204\",\n      \"namespace\": \"imnodes\",\n      \"ov_cimguiname\": \"imnodes_EndNodeTitleBar\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"imnodes_EndOutputAttribute\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"imnodes_EndOutputAttribute\",\n      \"defaults\": {},\n      \"funcname\": \"EndOutputAttribute\",\n      \"location\": \"imnodes:220\",\n      \"namespace\": \"imnodes\",\n      \"ov_cimguiname\": \"imnodes_EndOutputAttribute\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"imnodes_EndStaticAttribute\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"imnodes_EndStaticAttribute\",\n      \"defaults\": {},\n      \"funcname\": \"EndStaticAttribute\",\n      \"location\": \"imnodes:225\",\n      \"namespace\": \"imnodes\",\n      \"ov_cimguiname\": \"imnodes_EndStaticAttribute\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"imnodes_GetIO\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"imnodes_GetIO\",\n      \"defaults\": {},\n      \"funcname\": \"GetIO\",\n      \"location\": \"imnodes:174\",\n      \"namespace\": \"imnodes\",\n      \"ov_cimguiname\": \"imnodes_GetIO\",\n      \"ret\": \"IO*\",\n      \"retref\": \"&\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"imnodes_GetNodeDimensions\": [\n    {\n      \"args\": \"(ImVec2 *pOut,int id)\",\n      \"argsT\": [\n        {\n          \"name\": \"pOut\",\n          \"type\": \"ImVec2*\"\n        },\n        {\n          \"name\": \"id\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(int id)\",\n      \"call_args\": \"(id)\",\n      \"cimguiname\": \"imnodes_GetNodeDimensions\",\n      \"defaults\": {},\n      \"funcname\": \"GetNodeDimensions\",\n      \"location\": \"imnodes:198\",\n      \"namespace\": \"imnodes\",\n      \"nonUDT\": 1,\n      \"ov_cimguiname\": \"imnodes_GetNodeDimensions\",\n      \"ret\": \"void\",\n      \"signature\": \"(int)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"imnodes_GetNodeEditorSpacePos\": [\n    {\n      \"args\": \"(ImVec2 *pOut,const int node_id)\",\n      \"argsT\": [\n        {\n          \"name\": \"pOut\",\n          \"type\": \"ImVec2*\"\n        },\n        {\n          \"name\": \"node_id\",\n          \"type\": \"const int\"\n        }\n      ],\n      \"argsoriginal\": \"(const int node_id)\",\n      \"call_args\": \"(node_id)\",\n      \"cimguiname\": \"imnodes_GetNodeEditorSpacePos\",\n      \"defaults\": {},\n      \"funcname\": \"GetNodeEditorSpacePos\",\n      \"location\": \"imnodes:253\",\n      \"namespace\": \"imnodes\",\n      \"nonUDT\": 1,\n      \"ov_cimguiname\": \"imnodes_GetNodeEditorSpacePos\",\n      \"ret\": \"void\",\n      \"signature\": \"(const int)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"imnodes_GetNodeGridSpacePos\": [\n    {\n      \"args\": \"(ImVec2 *pOut,const int node_id)\",\n      \"argsT\": [\n        {\n          \"name\": \"pOut\",\n          \"type\": \"ImVec2*\"\n        },\n        {\n          \"name\": \"node_id\",\n          \"type\": \"const int\"\n        }\n      ],\n      \"argsoriginal\": \"(const int node_id)\",\n      \"call_args\": \"(node_id)\",\n      \"cimguiname\": \"imnodes_GetNodeGridSpacePos\",\n      \"defaults\": {},\n      \"funcname\": \"GetNodeGridSpacePos\",\n      \"location\": \"imnodes:254\",\n      \"namespace\": \"imnodes\",\n      \"nonUDT\": 1,\n      \"ov_cimguiname\": \"imnodes_GetNodeGridSpacePos\",\n      \"ret\": \"void\",\n      \"signature\": \"(const int)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"imnodes_GetNodeScreenSpacePos\": [\n    {\n      \"args\": \"(ImVec2 *pOut,const int node_id)\",\n      \"argsT\": [\n        {\n          \"name\": \"pOut\",\n          \"type\": \"ImVec2*\"\n        },\n        {\n          \"name\": \"node_id\",\n          \"type\": \"const int\"\n        }\n      ],\n      \"argsoriginal\": \"(const int node_id)\",\n      \"call_args\": \"(node_id)\",\n      \"cimguiname\": \"imnodes_GetNodeScreenSpacePos\",\n      \"defaults\": {},\n      \"funcname\": \"GetNodeScreenSpacePos\",\n      \"location\": \"imnodes:252\",\n      \"namespace\": \"imnodes\",\n      \"nonUDT\": 1,\n      \"ov_cimguiname\": \"imnodes_GetNodeScreenSpacePos\",\n      \"ret\": \"void\",\n      \"signature\": \"(const int)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"imnodes_GetSelectedLinks\": [\n    {\n      \"args\": \"(int* link_ids)\",\n      \"argsT\": [\n        {\n          \"name\": \"link_ids\",\n          \"type\": \"int*\"\n        }\n      ],\n      \"argsoriginal\": \"(int* link_ids)\",\n      \"call_args\": \"(link_ids)\",\n      \"cimguiname\": \"imnodes_GetSelectedLinks\",\n      \"defaults\": {},\n      \"funcname\": \"GetSelectedLinks\",\n      \"location\": \"imnodes:274\",\n      \"namespace\": \"imnodes\",\n      \"ov_cimguiname\": \"imnodes_GetSelectedLinks\",\n      \"ret\": \"void\",\n      \"signature\": \"(int*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"imnodes_GetSelectedNodes\": [\n    {\n      \"args\": \"(int* node_ids)\",\n      \"argsT\": [\n        {\n          \"name\": \"node_ids\",\n          \"type\": \"int*\"\n        }\n      ],\n      \"argsoriginal\": \"(int* node_ids)\",\n      \"call_args\": \"(node_ids)\",\n      \"cimguiname\": \"imnodes_GetSelectedNodes\",\n      \"defaults\": {},\n      \"funcname\": \"GetSelectedNodes\",\n      \"location\": \"imnodes:273\",\n      \"namespace\": \"imnodes\",\n      \"ov_cimguiname\": \"imnodes_GetSelectedNodes\",\n      \"ret\": \"void\",\n      \"signature\": \"(int*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"imnodes_GetStyle\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"imnodes_GetStyle\",\n      \"defaults\": {},\n      \"funcname\": \"GetStyle\",\n      \"location\": \"imnodes:177\",\n      \"namespace\": \"imnodes\",\n      \"ov_cimguiname\": \"imnodes_GetStyle\",\n      \"ret\": \"Style*\",\n      \"retref\": \"&\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"imnodes_Initialize\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"imnodes_Initialize\",\n      \"defaults\": {},\n      \"funcname\": \"Initialize\",\n      \"location\": \"imnodes:167\",\n      \"namespace\": \"imnodes\",\n      \"ov_cimguiname\": \"imnodes_Initialize\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"imnodes_IsAnyAttributeActive\": [\n    {\n      \"args\": \"(int* attribute_id)\",\n      \"argsT\": [\n        {\n          \"name\": \"attribute_id\",\n          \"type\": \"int*\"\n        }\n      ],\n      \"argsoriginal\": \"(int* attribute_id=((void*)0))\",\n      \"call_args\": \"(attribute_id)\",\n      \"cimguiname\": \"imnodes_IsAnyAttributeActive\",\n      \"defaults\": {\n        \"attribute_id\": \"((void*)0)\"\n      },\n      \"funcname\": \"IsAnyAttributeActive\",\n      \"location\": \"imnodes:284\",\n      \"namespace\": \"imnodes\",\n      \"ov_cimguiname\": \"imnodes_IsAnyAttributeActive\",\n      \"ret\": \"bool\",\n      \"signature\": \"(int*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"imnodes_IsAttributeActive\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"imnodes_IsAttributeActive\",\n      \"defaults\": {},\n      \"funcname\": \"IsAttributeActive\",\n      \"location\": \"imnodes:282\",\n      \"namespace\": \"imnodes\",\n      \"ov_cimguiname\": \"imnodes_IsAttributeActive\",\n      \"ret\": \"bool\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"imnodes_IsEditorHovered\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"imnodes_IsEditorHovered\",\n      \"defaults\": {},\n      \"funcname\": \"IsEditorHovered\",\n      \"location\": \"imnodes:258\",\n      \"namespace\": \"imnodes\",\n      \"ov_cimguiname\": \"imnodes_IsEditorHovered\",\n      \"ret\": \"bool\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"imnodes_IsLinkCreated\": [\n    {\n      \"args\": \"(int* started_at_attribute_id,int* ended_at_attribute_id,bool* created_from_snap)\",\n      \"argsT\": [\n        {\n          \"name\": \"started_at_attribute_id\",\n          \"type\": \"int*\"\n        },\n        {\n          \"name\": \"ended_at_attribute_id\",\n          \"type\": \"int*\"\n        },\n        {\n          \"name\": \"created_from_snap\",\n          \"type\": \"bool*\"\n        }\n      ],\n      \"argsoriginal\": \"(int* started_at_attribute_id,int* ended_at_attribute_id,bool* created_from_snap=((void*)0))\",\n      \"call_args\": \"(started_at_attribute_id,ended_at_attribute_id,created_from_snap)\",\n      \"cimguiname\": \"imnodes_IsLinkCreated\",\n      \"defaults\": {\n        \"created_from_snap\": \"((void*)0)\"\n      },\n      \"funcname\": \"IsLinkCreated\",\n      \"location\": \"imnodes:299\",\n      \"namespace\": \"imnodes\",\n      \"ov_cimguiname\": \"imnodes_IsLinkCreatedBoolPtr\",\n      \"ret\": \"bool\",\n      \"signature\": \"(int*,int*,bool*)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(int* started_at_node_id,int* started_at_attribute_id,int* ended_at_node_id,int* ended_at_attribute_id,bool* created_from_snap)\",\n      \"argsT\": [\n        {\n          \"name\": \"started_at_node_id\",\n          \"type\": \"int*\"\n        },\n        {\n          \"name\": \"started_at_attribute_id\",\n          \"type\": \"int*\"\n        },\n        {\n          \"name\": \"ended_at_node_id\",\n          \"type\": \"int*\"\n        },\n        {\n          \"name\": \"ended_at_attribute_id\",\n          \"type\": \"int*\"\n        },\n        {\n          \"name\": \"created_from_snap\",\n          \"type\": \"bool*\"\n        }\n      ],\n      \"argsoriginal\": \"(int* started_at_node_id,int* started_at_attribute_id,int* ended_at_node_id,int* ended_at_attribute_id,bool* created_from_snap=((void*)0))\",\n      \"call_args\": \"(started_at_node_id,started_at_attribute_id,ended_at_node_id,ended_at_attribute_id,created_from_snap)\",\n      \"cimguiname\": \"imnodes_IsLinkCreated\",\n      \"defaults\": {\n        \"created_from_snap\": \"((void*)0)\"\n      },\n      \"funcname\": \"IsLinkCreated\",\n      \"location\": \"imnodes:303\",\n      \"namespace\": \"imnodes\",\n      \"ov_cimguiname\": \"imnodes_IsLinkCreatedIntPtr\",\n      \"ret\": \"bool\",\n      \"signature\": \"(int*,int*,int*,int*,bool*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"imnodes_IsLinkDestroyed\": [\n    {\n      \"args\": \"(int* link_id)\",\n      \"argsT\": [\n        {\n          \"name\": \"link_id\",\n          \"type\": \"int*\"\n        }\n      ],\n      \"argsoriginal\": \"(int* link_id)\",\n      \"call_args\": \"(link_id)\",\n      \"cimguiname\": \"imnodes_IsLinkDestroyed\",\n      \"defaults\": {},\n      \"funcname\": \"IsLinkDestroyed\",\n      \"location\": \"imnodes:312\",\n      \"namespace\": \"imnodes\",\n      \"ov_cimguiname\": \"imnodes_IsLinkDestroyed\",\n      \"ret\": \"bool\",\n      \"signature\": \"(int*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"imnodes_IsLinkDropped\": [\n    {\n      \"args\": \"(int* started_at_attribute_id,bool including_detached_links)\",\n      \"argsT\": [\n        {\n          \"name\": \"started_at_attribute_id\",\n          \"type\": \"int*\"\n        },\n        {\n          \"name\": \"including_detached_links\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"argsoriginal\": \"(int* started_at_attribute_id=((void*)0),bool including_detached_links=true)\",\n      \"call_args\": \"(started_at_attribute_id,including_detached_links)\",\n      \"cimguiname\": \"imnodes_IsLinkDropped\",\n      \"defaults\": {\n        \"including_detached_links\": \"true\",\n        \"started_at_attribute_id\": \"((void*)0)\"\n      },\n      \"funcname\": \"IsLinkDropped\",\n      \"location\": \"imnodes:297\",\n      \"namespace\": \"imnodes\",\n      \"ov_cimguiname\": \"imnodes_IsLinkDropped\",\n      \"ret\": \"bool\",\n      \"signature\": \"(int*,bool)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"imnodes_IsLinkHovered\": [\n    {\n      \"args\": \"(int* link_id)\",\n      \"argsT\": [\n        {\n          \"name\": \"link_id\",\n          \"type\": \"int*\"\n        }\n      ],\n      \"argsoriginal\": \"(int* link_id)\",\n      \"call_args\": \"(link_id)\",\n      \"cimguiname\": \"imnodes_IsLinkHovered\",\n      \"defaults\": {},\n      \"funcname\": \"IsLinkHovered\",\n      \"location\": \"imnodes:263\",\n      \"namespace\": \"imnodes\",\n      \"ov_cimguiname\": \"imnodes_IsLinkHovered\",\n      \"ret\": \"bool\",\n      \"signature\": \"(int*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"imnodes_IsLinkStarted\": [\n    {\n      \"args\": \"(int* started_at_attribute_id)\",\n      \"argsT\": [\n        {\n          \"name\": \"started_at_attribute_id\",\n          \"type\": \"int*\"\n        }\n      ],\n      \"argsoriginal\": \"(int* started_at_attribute_id)\",\n      \"call_args\": \"(started_at_attribute_id)\",\n      \"cimguiname\": \"imnodes_IsLinkStarted\",\n      \"defaults\": {},\n      \"funcname\": \"IsLinkStarted\",\n      \"location\": \"imnodes:290\",\n      \"namespace\": \"imnodes\",\n      \"ov_cimguiname\": \"imnodes_IsLinkStarted\",\n      \"ret\": \"bool\",\n      \"signature\": \"(int*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"imnodes_IsNodeHovered\": [\n    {\n      \"args\": \"(int* node_id)\",\n      \"argsT\": [\n        {\n          \"name\": \"node_id\",\n          \"type\": \"int*\"\n        }\n      ],\n      \"argsoriginal\": \"(int* node_id)\",\n      \"call_args\": \"(node_id)\",\n      \"cimguiname\": \"imnodes_IsNodeHovered\",\n      \"defaults\": {},\n      \"funcname\": \"IsNodeHovered\",\n      \"location\": \"imnodes:262\",\n      \"namespace\": \"imnodes\",\n      \"ov_cimguiname\": \"imnodes_IsNodeHovered\",\n      \"ret\": \"bool\",\n      \"signature\": \"(int*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"imnodes_IsPinHovered\": [\n    {\n      \"args\": \"(int* attribute_id)\",\n      \"argsT\": [\n        {\n          \"name\": \"attribute_id\",\n          \"type\": \"int*\"\n        }\n      ],\n      \"argsoriginal\": \"(int* attribute_id)\",\n      \"call_args\": \"(attribute_id)\",\n      \"cimguiname\": \"imnodes_IsPinHovered\",\n      \"defaults\": {},\n      \"funcname\": \"IsPinHovered\",\n      \"location\": \"imnodes:264\",\n      \"namespace\": \"imnodes\",\n      \"ov_cimguiname\": \"imnodes_IsPinHovered\",\n      \"ret\": \"bool\",\n      \"signature\": \"(int*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"imnodes_Link\": [\n    {\n      \"args\": \"(int id,int start_attribute_id,int end_attribute_id)\",\n      \"argsT\": [\n        {\n          \"name\": \"id\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"start_attribute_id\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"end_attribute_id\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(int id,int start_attribute_id,int end_attribute_id)\",\n      \"call_args\": \"(id,start_attribute_id,end_attribute_id)\",\n      \"cimguiname\": \"imnodes_Link\",\n      \"defaults\": {},\n      \"funcname\": \"Link\",\n      \"location\": \"imnodes:234\",\n      \"namespace\": \"imnodes\",\n      \"ov_cimguiname\": \"imnodes_Link\",\n      \"ret\": \"void\",\n      \"signature\": \"(int,int,int)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"imnodes_LoadCurrentEditorStateFromIniFile\": [\n    {\n      \"args\": \"(const char* file_name)\",\n      \"argsT\": [\n        {\n          \"name\": \"file_name\",\n          \"type\": \"const char*\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* file_name)\",\n      \"call_args\": \"(file_name)\",\n      \"cimguiname\": \"imnodes_LoadCurrentEditorStateFromIniFile\",\n      \"defaults\": {},\n      \"funcname\": \"LoadCurrentEditorStateFromIniFile\",\n      \"location\": \"imnodes:326\",\n      \"namespace\": \"imnodes\",\n      \"ov_cimguiname\": \"imnodes_LoadCurrentEditorStateFromIniFile\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"imnodes_LoadCurrentEditorStateFromIniString\": [\n    {\n      \"args\": \"(const char* data,size_t data_size)\",\n      \"argsT\": [\n        {\n          \"name\": \"data\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"data_size\",\n          \"type\": \"size_t\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* data,size_t data_size)\",\n      \"call_args\": \"(data,data_size)\",\n      \"cimguiname\": \"imnodes_LoadCurrentEditorStateFromIniString\",\n      \"defaults\": {},\n      \"funcname\": \"LoadCurrentEditorStateFromIniString\",\n      \"location\": \"imnodes:320\",\n      \"namespace\": \"imnodes\",\n      \"ov_cimguiname\": \"imnodes_LoadCurrentEditorStateFromIniString\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,size_t)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"imnodes_LoadEditorStateFromIniFile\": [\n    {\n      \"args\": \"(EditorContext* editor,const char* file_name)\",\n      \"argsT\": [\n        {\n          \"name\": \"editor\",\n          \"type\": \"EditorContext*\"\n        },\n        {\n          \"name\": \"file_name\",\n          \"type\": \"const char*\"\n        }\n      ],\n      \"argsoriginal\": \"(EditorContext* editor,const char* file_name)\",\n      \"call_args\": \"(editor,file_name)\",\n      \"cimguiname\": \"imnodes_LoadEditorStateFromIniFile\",\n      \"defaults\": {},\n      \"funcname\": \"LoadEditorStateFromIniFile\",\n      \"location\": \"imnodes:327\",\n      \"namespace\": \"imnodes\",\n      \"ov_cimguiname\": \"imnodes_LoadEditorStateFromIniFile\",\n      \"ret\": \"void\",\n      \"signature\": \"(EditorContext*,const char*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"imnodes_LoadEditorStateFromIniString\": [\n    {\n      \"args\": \"(EditorContext* editor,const char* data,size_t data_size)\",\n      \"argsT\": [\n        {\n          \"name\": \"editor\",\n          \"type\": \"EditorContext*\"\n        },\n        {\n          \"name\": \"data\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"data_size\",\n          \"type\": \"size_t\"\n        }\n      ],\n      \"argsoriginal\": \"(EditorContext* editor,const char* data,size_t data_size)\",\n      \"call_args\": \"(editor,data,data_size)\",\n      \"cimguiname\": \"imnodes_LoadEditorStateFromIniString\",\n      \"defaults\": {},\n      \"funcname\": \"LoadEditorStateFromIniString\",\n      \"location\": \"imnodes:321\",\n      \"namespace\": \"imnodes\",\n      \"ov_cimguiname\": \"imnodes_LoadEditorStateFromIniString\",\n      \"ret\": \"void\",\n      \"signature\": \"(EditorContext*,const char*,size_t)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"imnodes_NumSelectedLinks\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"imnodes_NumSelectedLinks\",\n      \"defaults\": {},\n      \"funcname\": \"NumSelectedLinks\",\n      \"location\": \"imnodes:269\",\n      \"namespace\": \"imnodes\",\n      \"ov_cimguiname\": \"imnodes_NumSelectedLinks\",\n      \"ret\": \"int\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"imnodes_NumSelectedNodes\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"imnodes_NumSelectedNodes\",\n      \"defaults\": {},\n      \"funcname\": \"NumSelectedNodes\",\n      \"location\": \"imnodes:268\",\n      \"namespace\": \"imnodes\",\n      \"ov_cimguiname\": \"imnodes_NumSelectedNodes\",\n      \"ret\": \"int\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"imnodes_PopAttributeFlag\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"imnodes_PopAttributeFlag\",\n      \"defaults\": {},\n      \"funcname\": \"PopAttributeFlag\",\n      \"location\": \"imnodes:229\",\n      \"namespace\": \"imnodes\",\n      \"ov_cimguiname\": \"imnodes_PopAttributeFlag\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"imnodes_PopColorStyle\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"imnodes_PopColorStyle\",\n      \"defaults\": {},\n      \"funcname\": \"PopColorStyle\",\n      \"location\": \"imnodes:190\",\n      \"namespace\": \"imnodes\",\n      \"ov_cimguiname\": \"imnodes_PopColorStyle\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"imnodes_PopStyleVar\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"imnodes_PopStyleVar\",\n      \"defaults\": {},\n      \"funcname\": \"PopStyleVar\",\n      \"location\": \"imnodes:192\",\n      \"namespace\": \"imnodes\",\n      \"ov_cimguiname\": \"imnodes_PopStyleVar\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"imnodes_PushAttributeFlag\": [\n    {\n      \"args\": \"(AttributeFlags flag)\",\n      \"argsT\": [\n        {\n          \"name\": \"flag\",\n          \"type\": \"AttributeFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(AttributeFlags flag)\",\n      \"call_args\": \"(flag)\",\n      \"cimguiname\": \"imnodes_PushAttributeFlag\",\n      \"defaults\": {},\n      \"funcname\": \"PushAttributeFlag\",\n      \"location\": \"imnodes:228\",\n      \"namespace\": \"imnodes\",\n      \"ov_cimguiname\": \"imnodes_PushAttributeFlag\",\n      \"ret\": \"void\",\n      \"signature\": \"(AttributeFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"imnodes_PushColorStyle\": [\n    {\n      \"args\": \"(ColorStyle item,unsigned int color)\",\n      \"argsT\": [\n        {\n          \"name\": \"item\",\n          \"type\": \"ColorStyle\"\n        },\n        {\n          \"name\": \"color\",\n          \"type\": \"unsigned int\"\n        }\n      ],\n      \"argsoriginal\": \"(ColorStyle item,unsigned int color)\",\n      \"call_args\": \"(item,color)\",\n      \"cimguiname\": \"imnodes_PushColorStyle\",\n      \"defaults\": {},\n      \"funcname\": \"PushColorStyle\",\n      \"location\": \"imnodes:189\",\n      \"namespace\": \"imnodes\",\n      \"ov_cimguiname\": \"imnodes_PushColorStyle\",\n      \"ret\": \"void\",\n      \"signature\": \"(ColorStyle,unsigned int)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"imnodes_PushStyleVar\": [\n    {\n      \"args\": \"(StyleVar style_item,float value)\",\n      \"argsT\": [\n        {\n          \"name\": \"style_item\",\n          \"type\": \"StyleVar\"\n        },\n        {\n          \"name\": \"value\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(StyleVar style_item,float value)\",\n      \"call_args\": \"(style_item,value)\",\n      \"cimguiname\": \"imnodes_PushStyleVar\",\n      \"defaults\": {},\n      \"funcname\": \"PushStyleVar\",\n      \"location\": \"imnodes:191\",\n      \"namespace\": \"imnodes\",\n      \"ov_cimguiname\": \"imnodes_PushStyleVar\",\n      \"ret\": \"void\",\n      \"signature\": \"(StyleVar,float)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"imnodes_SaveCurrentEditorStateToIniFile\": [\n    {\n      \"args\": \"(const char* file_name)\",\n      \"argsT\": [\n        {\n          \"name\": \"file_name\",\n          \"type\": \"const char*\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* file_name)\",\n      \"call_args\": \"(file_name)\",\n      \"cimguiname\": \"imnodes_SaveCurrentEditorStateToIniFile\",\n      \"defaults\": {},\n      \"funcname\": \"SaveCurrentEditorStateToIniFile\",\n      \"location\": \"imnodes:323\",\n      \"namespace\": \"imnodes\",\n      \"ov_cimguiname\": \"imnodes_SaveCurrentEditorStateToIniFile\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"imnodes_SaveCurrentEditorStateToIniString\": [\n    {\n      \"args\": \"(size_t* data_size)\",\n      \"argsT\": [\n        {\n          \"name\": \"data_size\",\n          \"type\": \"size_t*\"\n        }\n      ],\n      \"argsoriginal\": \"(size_t* data_size=((void*)0))\",\n      \"call_args\": \"(data_size)\",\n      \"cimguiname\": \"imnodes_SaveCurrentEditorStateToIniString\",\n      \"defaults\": {\n        \"data_size\": \"((void*)0)\"\n      },\n      \"funcname\": \"SaveCurrentEditorStateToIniString\",\n      \"location\": \"imnodes:317\",\n      \"namespace\": \"imnodes\",\n      \"ov_cimguiname\": \"imnodes_SaveCurrentEditorStateToIniString\",\n      \"ret\": \"const char*\",\n      \"signature\": \"(size_t*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"imnodes_SaveEditorStateToIniFile\": [\n    {\n      \"args\": \"(const EditorContext* editor,const char* file_name)\",\n      \"argsT\": [\n        {\n          \"name\": \"editor\",\n          \"type\": \"const EditorContext*\"\n        },\n        {\n          \"name\": \"file_name\",\n          \"type\": \"const char*\"\n        }\n      ],\n      \"argsoriginal\": \"(const EditorContext* editor,const char* file_name)\",\n      \"call_args\": \"(editor,file_name)\",\n      \"cimguiname\": \"imnodes_SaveEditorStateToIniFile\",\n      \"defaults\": {},\n      \"funcname\": \"SaveEditorStateToIniFile\",\n      \"location\": \"imnodes:324\",\n      \"namespace\": \"imnodes\",\n      \"ov_cimguiname\": \"imnodes_SaveEditorStateToIniFile\",\n      \"ret\": \"void\",\n      \"signature\": \"(const EditorContext*,const char*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"imnodes_SaveEditorStateToIniString\": [\n    {\n      \"args\": \"(const EditorContext* editor,size_t* data_size)\",\n      \"argsT\": [\n        {\n          \"name\": \"editor\",\n          \"type\": \"const EditorContext*\"\n        },\n        {\n          \"name\": \"data_size\",\n          \"type\": \"size_t*\"\n        }\n      ],\n      \"argsoriginal\": \"(const EditorContext* editor,size_t* data_size=((void*)0))\",\n      \"call_args\": \"(editor,data_size)\",\n      \"cimguiname\": \"imnodes_SaveEditorStateToIniString\",\n      \"defaults\": {\n        \"data_size\": \"((void*)0)\"\n      },\n      \"funcname\": \"SaveEditorStateToIniString\",\n      \"location\": \"imnodes:318\",\n      \"namespace\": \"imnodes\",\n      \"ov_cimguiname\": \"imnodes_SaveEditorStateToIniString\",\n      \"ret\": \"const char*\",\n      \"signature\": \"(const EditorContext*,size_t*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"imnodes_SetImGuiContext\": [\n    {\n      \"args\": \"(ImGuiContext* ctx)\",\n      \"argsT\": [\n        {\n          \"name\": \"ctx\",\n          \"type\": \"ImGuiContext*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiContext* ctx)\",\n      \"call_args\": \"(ctx)\",\n      \"cimguiname\": \"imnodes_SetImGuiContext\",\n      \"defaults\": {},\n      \"funcname\": \"SetImGuiContext\",\n      \"location\": \"imnodes:172\",\n      \"namespace\": \"imnodes\",\n      \"ov_cimguiname\": \"imnodes_SetImGuiContext\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiContext*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"imnodes_SetNodeDraggable\": [\n    {\n      \"args\": \"(int node_id,const bool draggable)\",\n      \"argsT\": [\n        {\n          \"name\": \"node_id\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"draggable\",\n          \"type\": \"const bool\"\n        }\n      ],\n      \"argsoriginal\": \"(int node_id,const bool draggable)\",\n      \"call_args\": \"(node_id,draggable)\",\n      \"cimguiname\": \"imnodes_SetNodeDraggable\",\n      \"defaults\": {},\n      \"funcname\": \"SetNodeDraggable\",\n      \"location\": \"imnodes:237\",\n      \"namespace\": \"imnodes\",\n      \"ov_cimguiname\": \"imnodes_SetNodeDraggable\",\n      \"ret\": \"void\",\n      \"signature\": \"(int,const bool)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"imnodes_SetNodeEditorSpacePos\": [\n    {\n      \"args\": \"(int node_id,const ImVec2 editor_space_pos)\",\n      \"argsT\": [\n        {\n          \"name\": \"node_id\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"editor_space_pos\",\n          \"type\": \"const ImVec2\"\n        }\n      ],\n      \"argsoriginal\": \"(int node_id,const ImVec2& editor_space_pos)\",\n      \"call_args\": \"(node_id,editor_space_pos)\",\n      \"cimguiname\": \"imnodes_SetNodeEditorSpacePos\",\n      \"defaults\": {},\n      \"funcname\": \"SetNodeEditorSpacePos\",\n      \"location\": \"imnodes:249\",\n      \"namespace\": \"imnodes\",\n      \"ov_cimguiname\": \"imnodes_SetNodeEditorSpacePos\",\n      \"ret\": \"void\",\n      \"signature\": \"(int,const ImVec2)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"imnodes_SetNodeGridSpacePos\": [\n    {\n      \"args\": \"(int node_id,const ImVec2 grid_pos)\",\n      \"argsT\": [\n        {\n          \"name\": \"node_id\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"grid_pos\",\n          \"type\": \"const ImVec2\"\n        }\n      ],\n      \"argsoriginal\": \"(int node_id,const ImVec2& grid_pos)\",\n      \"call_args\": \"(node_id,grid_pos)\",\n      \"cimguiname\": \"imnodes_SetNodeGridSpacePos\",\n      \"defaults\": {},\n      \"funcname\": \"SetNodeGridSpacePos\",\n      \"location\": \"imnodes:250\",\n      \"namespace\": \"imnodes\",\n      \"ov_cimguiname\": \"imnodes_SetNodeGridSpacePos\",\n      \"ret\": \"void\",\n      \"signature\": \"(int,const ImVec2)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"imnodes_SetNodeScreenSpacePos\": [\n    {\n      \"args\": \"(int node_id,const ImVec2 screen_space_pos)\",\n      \"argsT\": [\n        {\n          \"name\": \"node_id\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"screen_space_pos\",\n          \"type\": \"const ImVec2\"\n        }\n      ],\n      \"argsoriginal\": \"(int node_id,const ImVec2& screen_space_pos)\",\n      \"call_args\": \"(node_id,screen_space_pos)\",\n      \"cimguiname\": \"imnodes_SetNodeScreenSpacePos\",\n      \"defaults\": {},\n      \"funcname\": \"SetNodeScreenSpacePos\",\n      \"location\": \"imnodes:248\",\n      \"namespace\": \"imnodes\",\n      \"ov_cimguiname\": \"imnodes_SetNodeScreenSpacePos\",\n      \"ret\": \"void\",\n      \"signature\": \"(int,const ImVec2)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"imnodes_Shutdown\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"imnodes_Shutdown\",\n      \"defaults\": {},\n      \"funcname\": \"Shutdown\",\n      \"location\": \"imnodes:168\",\n      \"namespace\": \"imnodes\",\n      \"ov_cimguiname\": \"imnodes_Shutdown\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"imnodes_StyleColorsClassic\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"imnodes_StyleColorsClassic\",\n      \"defaults\": {},\n      \"funcname\": \"StyleColorsClassic\",\n      \"location\": \"imnodes:180\",\n      \"namespace\": \"imnodes\",\n      \"ov_cimguiname\": \"imnodes_StyleColorsClassic\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"imnodes_StyleColorsDark\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"imnodes_StyleColorsDark\",\n      \"defaults\": {},\n      \"funcname\": \"StyleColorsDark\",\n      \"location\": \"imnodes:179\",\n      \"namespace\": \"imnodes\",\n      \"ov_cimguiname\": \"imnodes_StyleColorsDark\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"imnodes_StyleColorsLight\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"imnodes_StyleColorsLight\",\n      \"defaults\": {},\n      \"funcname\": \"StyleColorsLight\",\n      \"location\": \"imnodes:181\",\n      \"namespace\": \"imnodes\",\n      \"ov_cimguiname\": \"imnodes_StyleColorsLight\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ]\n}"
  },
  {
    "path": "tools/ImGui.NET/CodeGenerator/definitions/cimnodes/structs_and_enums.json",
    "content": "{\n  \"enums\": {\n    \"AttributeFlags\": [\n      {\n        \"calc_value\": 0,\n        \"name\": \"AttributeFlags_None\",\n        \"value\": \"0\"\n      },\n      {\n        \"calc_value\": 1,\n        \"name\": \"AttributeFlags_EnableLinkDetachWithDragClick\",\n        \"value\": \"1 << 0\"\n      },\n      {\n        \"calc_value\": 2,\n        \"name\": \"AttributeFlags_EnableLinkCreationOnSnap\",\n        \"value\": \"1 << 1\"\n      }\n    ],\n    \"ColorStyle\": [\n      {\n        \"calc_value\": 0,\n        \"name\": \"ColorStyle_NodeBackground\",\n        \"value\": \"0\"\n      },\n      {\n        \"calc_value\": 1,\n        \"name\": \"ColorStyle_NodeBackgroundHovered\",\n        \"value\": \"1\"\n      },\n      {\n        \"calc_value\": 2,\n        \"name\": \"ColorStyle_NodeBackgroundSelected\",\n        \"value\": \"2\"\n      },\n      {\n        \"calc_value\": 3,\n        \"name\": \"ColorStyle_NodeOutline\",\n        \"value\": \"3\"\n      },\n      {\n        \"calc_value\": 4,\n        \"name\": \"ColorStyle_TitleBar\",\n        \"value\": \"4\"\n      },\n      {\n        \"calc_value\": 5,\n        \"name\": \"ColorStyle_TitleBarHovered\",\n        \"value\": \"5\"\n      },\n      {\n        \"calc_value\": 6,\n        \"name\": \"ColorStyle_TitleBarSelected\",\n        \"value\": \"6\"\n      },\n      {\n        \"calc_value\": 7,\n        \"name\": \"ColorStyle_Link\",\n        \"value\": \"7\"\n      },\n      {\n        \"calc_value\": 8,\n        \"name\": \"ColorStyle_LinkHovered\",\n        \"value\": \"8\"\n      },\n      {\n        \"calc_value\": 9,\n        \"name\": \"ColorStyle_LinkSelected\",\n        \"value\": \"9\"\n      },\n      {\n        \"calc_value\": 10,\n        \"name\": \"ColorStyle_Pin\",\n        \"value\": \"10\"\n      },\n      {\n        \"calc_value\": 11,\n        \"name\": \"ColorStyle_PinHovered\",\n        \"value\": \"11\"\n      },\n      {\n        \"calc_value\": 12,\n        \"name\": \"ColorStyle_BoxSelector\",\n        \"value\": \"12\"\n      },\n      {\n        \"calc_value\": 13,\n        \"name\": \"ColorStyle_BoxSelectorOutline\",\n        \"value\": \"13\"\n      },\n      {\n        \"calc_value\": 14,\n        \"name\": \"ColorStyle_GridBackground\",\n        \"value\": \"14\"\n      },\n      {\n        \"calc_value\": 15,\n        \"name\": \"ColorStyle_GridLine\",\n        \"value\": \"15\"\n      },\n      {\n        \"calc_value\": 16,\n        \"name\": \"ColorStyle_Count\",\n        \"value\": \"16\"\n      }\n    ],\n    \"PinShape\": [\n      {\n        \"calc_value\": 0,\n        \"name\": \"PinShape_Circle\",\n        \"value\": \"0\"\n      },\n      {\n        \"calc_value\": 1,\n        \"name\": \"PinShape_CircleFilled\",\n        \"value\": \"1\"\n      },\n      {\n        \"calc_value\": 2,\n        \"name\": \"PinShape_Triangle\",\n        \"value\": \"2\"\n      },\n      {\n        \"calc_value\": 3,\n        \"name\": \"PinShape_TriangleFilled\",\n        \"value\": \"3\"\n      },\n      {\n        \"calc_value\": 4,\n        \"name\": \"PinShape_Quad\",\n        \"value\": \"4\"\n      },\n      {\n        \"calc_value\": 5,\n        \"name\": \"PinShape_QuadFilled\",\n        \"value\": \"5\"\n      }\n    ],\n    \"StyleFlags\": [\n      {\n        \"calc_value\": 0,\n        \"name\": \"StyleFlags_None\",\n        \"value\": \"0\"\n      },\n      {\n        \"calc_value\": 1,\n        \"name\": \"StyleFlags_NodeOutline\",\n        \"value\": \"1 << 0\"\n      },\n      {\n        \"calc_value\": 4,\n        \"name\": \"StyleFlags_GridLines\",\n        \"value\": \"1 << 2\"\n      }\n    ],\n    \"StyleVar\": [\n      {\n        \"calc_value\": 0,\n        \"name\": \"StyleVar_GridSpacing\",\n        \"value\": \"0\"\n      },\n      {\n        \"calc_value\": 1,\n        \"name\": \"StyleVar_NodeCornerRounding\",\n        \"value\": \"1\"\n      },\n      {\n        \"calc_value\": 2,\n        \"name\": \"StyleVar_NodePaddingHorizontal\",\n        \"value\": \"2\"\n      },\n      {\n        \"calc_value\": 3,\n        \"name\": \"StyleVar_NodePaddingVertical\",\n        \"value\": \"3\"\n      },\n      {\n        \"calc_value\": 4,\n        \"name\": \"StyleVar_NodeBorderThickness\",\n        \"value\": \"4\"\n      },\n      {\n        \"calc_value\": 5,\n        \"name\": \"StyleVar_LinkThickness\",\n        \"value\": \"5\"\n      },\n      {\n        \"calc_value\": 6,\n        \"name\": \"StyleVar_LinkLineSegmentsPerLength\",\n        \"value\": \"6\"\n      },\n      {\n        \"calc_value\": 7,\n        \"name\": \"StyleVar_LinkHoverDistance\",\n        \"value\": \"7\"\n      },\n      {\n        \"calc_value\": 8,\n        \"name\": \"StyleVar_PinCircleRadius\",\n        \"value\": \"8\"\n      },\n      {\n        \"calc_value\": 9,\n        \"name\": \"StyleVar_PinQuadSideLength\",\n        \"value\": \"9\"\n      },\n      {\n        \"calc_value\": 10,\n        \"name\": \"StyleVar_PinTriangleSideLength\",\n        \"value\": \"10\"\n      },\n      {\n        \"calc_value\": 11,\n        \"name\": \"StyleVar_PinLineThickness\",\n        \"value\": \"11\"\n      },\n      {\n        \"calc_value\": 12,\n        \"name\": \"StyleVar_PinHoverRadius\",\n        \"value\": \"12\"\n      },\n      {\n        \"calc_value\": 13,\n        \"name\": \"StyleVar_PinOffset\",\n        \"value\": \"13\"\n      }\n    ]\n  },\n  \"enumtypes\": [],\n  \"locations\": {\n    \"AttributeFlags\": \"imnodes:68\",\n    \"ColorStyle\": \"imnodes:10\",\n    \"EmulateThreeButtonMouse\": \"imnodes:85\",\n    \"IO\": \"imnodes:83\",\n    \"LinkDetachWithModifierClick\": \"imnodes:95\",\n    \"PinShape\": \"imnodes:57\",\n    \"Style\": \"imnodes:112\",\n    \"StyleFlags\": \"imnodes:49\",\n    \"StyleVar\": \"imnodes:31\"\n  },\n  \"structs\": {\n    \"EmulateThreeButtonMouse\": [\n      {\n        \"name\": \"enabled\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"modifier\",\n        \"type\": \"const bool*\"\n      }\n    ],\n    \"IO\": [\n      {\n        \"name\": \"emulate_three_button_mouse\",\n        \"type\": \"EmulateThreeButtonMouse\"\n      },\n      {\n        \"name\": \"link_detach_with_modifier_click\",\n        \"type\": \"LinkDetachWithModifierClick\"\n      }\n    ],\n    \"LinkDetachWithModifierClick\": [\n      {\n        \"name\": \"modifier\",\n        \"type\": \"const bool*\"\n      }\n    ],\n    \"Style\": [\n      {\n        \"name\": \"grid_spacing\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"node_corner_rounding\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"node_padding_horizontal\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"node_padding_vertical\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"node_border_thickness\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"link_thickness\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"link_line_segments_per_length\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"link_hover_distance\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"pin_circle_radius\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"pin_quad_side_length\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"pin_triangle_side_length\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"pin_line_thickness\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"pin_hover_radius\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"pin_offset\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"flags\",\n        \"type\": \"StyleFlags\"\n      },\n      {\n        \"name\": \"colors[ColorStyle_Count]\",\n        \"size\": 16,\n        \"type\": \"unsigned int\"\n      }\n    ]\n  }\n}"
  },
  {
    "path": "tools/ImGui.NET/CodeGenerator/definitions/cimnodes/variants.json",
    "content": "﻿{\n}"
  },
  {
    "path": "tools/ImGui.NET/CodeGenerator/definitions/cimplot/definitions.json",
    "content": "{\n  \"ImPlotAlignmentData_Begin\": [\n    {\n      \"args\": \"(ImPlotAlignmentData* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotAlignmentData*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImPlotAlignmentData_Begin\",\n      \"defaults\": {},\n      \"funcname\": \"Begin\",\n      \"location\": \"implot_internal:930\",\n      \"ov_cimguiname\": \"ImPlotAlignmentData_Begin\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"ImPlotAlignmentData\"\n    }\n  ],\n  \"ImPlotAlignmentData_End\": [\n    {\n      \"args\": \"(ImPlotAlignmentData* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotAlignmentData*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImPlotAlignmentData_End\",\n      \"defaults\": {},\n      \"funcname\": \"End\",\n      \"location\": \"implot_internal:938\",\n      \"ov_cimguiname\": \"ImPlotAlignmentData_End\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"ImPlotAlignmentData\"\n    }\n  ],\n  \"ImPlotAlignmentData_ImPlotAlignmentData\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImPlotAlignmentData_ImPlotAlignmentData\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImPlotAlignmentData\",\n      \"location\": \"implot_internal:926\",\n      \"ov_cimguiname\": \"ImPlotAlignmentData_ImPlotAlignmentData\",\n      \"signature\": \"()\",\n      \"stname\": \"ImPlotAlignmentData\"\n    }\n  ],\n  \"ImPlotAlignmentData_Reset\": [\n    {\n      \"args\": \"(ImPlotAlignmentData* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotAlignmentData*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImPlotAlignmentData_Reset\",\n      \"defaults\": {},\n      \"funcname\": \"Reset\",\n      \"location\": \"implot_internal:939\",\n      \"ov_cimguiname\": \"ImPlotAlignmentData_Reset\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"ImPlotAlignmentData\"\n    }\n  ],\n  \"ImPlotAlignmentData_Update\": [\n    {\n      \"args\": \"(ImPlotAlignmentData* self,float* pad_a,float* pad_b,float* delta_a,float* delta_b)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotAlignmentData*\"\n        },\n        {\n          \"name\": \"pad_a\",\n          \"reftoptr\": true,\n          \"type\": \"float*\"\n        },\n        {\n          \"name\": \"pad_b\",\n          \"reftoptr\": true,\n          \"type\": \"float*\"\n        },\n        {\n          \"name\": \"delta_a\",\n          \"reftoptr\": true,\n          \"type\": \"float*\"\n        },\n        {\n          \"name\": \"delta_b\",\n          \"reftoptr\": true,\n          \"type\": \"float*\"\n        }\n      ],\n      \"argsoriginal\": \"(float& pad_a,float& pad_b,float& delta_a,float& delta_b)\",\n      \"call_args\": \"(*pad_a,*pad_b,*delta_a,*delta_b)\",\n      \"cimguiname\": \"ImPlotAlignmentData_Update\",\n      \"defaults\": {},\n      \"funcname\": \"Update\",\n      \"location\": \"implot_internal:931\",\n      \"ov_cimguiname\": \"ImPlotAlignmentData_Update\",\n      \"ret\": \"void\",\n      \"signature\": \"(float*,float*,float*,float*)\",\n      \"stname\": \"ImPlotAlignmentData\"\n    }\n  ],\n  \"ImPlotAlignmentData_destroy\": [\n    {\n      \"args\": \"(ImPlotAlignmentData* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotAlignmentData*\"\n        }\n      ],\n      \"call_args\": \"(self)\",\n      \"cimguiname\": \"ImPlotAlignmentData_destroy\",\n      \"defaults\": {},\n      \"destructor\": true,\n      \"ov_cimguiname\": \"ImPlotAlignmentData_destroy\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImPlotAlignmentData*)\",\n      \"stname\": \"ImPlotAlignmentData\"\n    }\n  ],\n  \"ImPlotAnnotationCollection_Append\": [\n    {\n      \"args\": \"(ImPlotAnnotationCollection* self,const ImVec2 pos,const ImVec2 off,ImU32 bg,ImU32 fg,bool clamp,const char* fmt,...)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotAnnotationCollection*\"\n        },\n        {\n          \"name\": \"pos\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"off\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"bg\",\n          \"type\": \"ImU32\"\n        },\n        {\n          \"name\": \"fg\",\n          \"type\": \"ImU32\"\n        },\n        {\n          \"name\": \"clamp\",\n          \"type\": \"bool\"\n        },\n        {\n          \"name\": \"fmt\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"...\",\n          \"type\": \"...\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImVec2& pos,const ImVec2& off,ImU32 bg,ImU32 fg,bool clamp,const char* fmt,...)\",\n      \"call_args\": \"(pos,off,bg,fg,clamp,fmt,...)\",\n      \"cimguiname\": \"ImPlotAnnotationCollection_Append\",\n      \"defaults\": {},\n      \"funcname\": \"Append\",\n      \"isvararg\": \"...)\",\n      \"location\": \"implot_internal:469\",\n      \"ov_cimguiname\": \"ImPlotAnnotationCollection_Append\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImVec2,const ImVec2,ImU32,ImU32,bool,const char*,...)\",\n      \"stname\": \"ImPlotAnnotationCollection\"\n    }\n  ],\n  \"ImPlotAnnotationCollection_AppendV\": [\n    {\n      \"args\": \"(ImPlotAnnotationCollection* self,const ImVec2 pos,const ImVec2 off,ImU32 bg,ImU32 fg,bool clamp,const char* fmt,va_list args)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotAnnotationCollection*\"\n        },\n        {\n          \"name\": \"pos\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"off\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"bg\",\n          \"type\": \"ImU32\"\n        },\n        {\n          \"name\": \"fg\",\n          \"type\": \"ImU32\"\n        },\n        {\n          \"name\": \"clamp\",\n          \"type\": \"bool\"\n        },\n        {\n          \"name\": \"fmt\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"args\",\n          \"type\": \"va_list\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImVec2& pos,const ImVec2& off,ImU32 bg,ImU32 fg,bool clamp,const char* fmt,va_list args)\",\n      \"call_args\": \"(pos,off,bg,fg,clamp,fmt,args)\",\n      \"cimguiname\": \"ImPlotAnnotationCollection_AppendV\",\n      \"defaults\": {},\n      \"funcname\": \"AppendV\",\n      \"location\": \"implot_internal:456\",\n      \"ov_cimguiname\": \"ImPlotAnnotationCollection_AppendV\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImVec2,const ImVec2,ImU32,ImU32,bool,const char*,va_list)\",\n      \"stname\": \"ImPlotAnnotationCollection\"\n    }\n  ],\n  \"ImPlotAnnotationCollection_GetText\": [\n    {\n      \"args\": \"(ImPlotAnnotationCollection* self,int idx)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotAnnotationCollection*\"\n        },\n        {\n          \"name\": \"idx\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(int idx)\",\n      \"call_args\": \"(idx)\",\n      \"cimguiname\": \"ImPlotAnnotationCollection_GetText\",\n      \"defaults\": {},\n      \"funcname\": \"GetText\",\n      \"location\": \"implot_internal:476\",\n      \"ov_cimguiname\": \"ImPlotAnnotationCollection_GetText\",\n      \"ret\": \"const char*\",\n      \"signature\": \"(int)\",\n      \"stname\": \"ImPlotAnnotationCollection\"\n    }\n  ],\n  \"ImPlotAnnotationCollection_ImPlotAnnotationCollection\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImPlotAnnotationCollection_ImPlotAnnotationCollection\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImPlotAnnotationCollection\",\n      \"location\": \"implot_internal:454\",\n      \"ov_cimguiname\": \"ImPlotAnnotationCollection_ImPlotAnnotationCollection\",\n      \"signature\": \"()\",\n      \"stname\": \"ImPlotAnnotationCollection\"\n    }\n  ],\n  \"ImPlotAnnotationCollection_Reset\": [\n    {\n      \"args\": \"(ImPlotAnnotationCollection* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotAnnotationCollection*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImPlotAnnotationCollection_Reset\",\n      \"defaults\": {},\n      \"funcname\": \"Reset\",\n      \"location\": \"implot_internal:480\",\n      \"ov_cimguiname\": \"ImPlotAnnotationCollection_Reset\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"ImPlotAnnotationCollection\"\n    }\n  ],\n  \"ImPlotAnnotationCollection_destroy\": [\n    {\n      \"args\": \"(ImPlotAnnotationCollection* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotAnnotationCollection*\"\n        }\n      ],\n      \"call_args\": \"(self)\",\n      \"cimguiname\": \"ImPlotAnnotationCollection_destroy\",\n      \"defaults\": {},\n      \"destructor\": true,\n      \"ov_cimguiname\": \"ImPlotAnnotationCollection_destroy\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImPlotAnnotationCollection*)\",\n      \"stname\": \"ImPlotAnnotationCollection\"\n    }\n  ],\n  \"ImPlotAnnotation_ImPlotAnnotation\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImPlotAnnotation_ImPlotAnnotation\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImPlotAnnotation\",\n      \"location\": \"implot_internal:440\",\n      \"ov_cimguiname\": \"ImPlotAnnotation_ImPlotAnnotation\",\n      \"signature\": \"()\",\n      \"stname\": \"ImPlotAnnotation\"\n    }\n  ],\n  \"ImPlotAnnotation_destroy\": [\n    {\n      \"args\": \"(ImPlotAnnotation* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotAnnotation*\"\n        }\n      ],\n      \"call_args\": \"(self)\",\n      \"cimguiname\": \"ImPlotAnnotation_destroy\",\n      \"defaults\": {},\n      \"destructor\": true,\n      \"ov_cimguiname\": \"ImPlotAnnotation_destroy\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImPlotAnnotation*)\",\n      \"stname\": \"ImPlotAnnotation\"\n    }\n  ],\n  \"ImPlotAxis_ApplyFit\": [\n    {\n      \"args\": \"(ImPlotAxis* self,float padding)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotAxis*\"\n        },\n        {\n          \"name\": \"padding\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(float padding)\",\n      \"call_args\": \"(padding)\",\n      \"cimguiname\": \"ImPlotAxis_ApplyFit\",\n      \"defaults\": {},\n      \"funcname\": \"ApplyFit\",\n      \"location\": \"implot_internal:859\",\n      \"ov_cimguiname\": \"ImPlotAxis_ApplyFit\",\n      \"ret\": \"void\",\n      \"signature\": \"(float)\",\n      \"stname\": \"ImPlotAxis\"\n    }\n  ],\n  \"ImPlotAxis_CanInitFit\": [\n    {\n      \"args\": \"(ImPlotAxis* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotAxis*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImPlotAxis_CanInitFit\",\n      \"defaults\": {},\n      \"funcname\": \"CanInitFit\",\n      \"location\": \"implot_internal:884\",\n      \"ov_cimguiname\": \"ImPlotAxis_CanInitFit\",\n      \"ret\": \"bool\",\n      \"signature\": \"()const\",\n      \"stname\": \"ImPlotAxis\"\n    }\n  ],\n  \"ImPlotAxis_Constrain\": [\n    {\n      \"args\": \"(ImPlotAxis* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotAxis*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImPlotAxis_Constrain\",\n      \"defaults\": {},\n      \"funcname\": \"Constrain\",\n      \"location\": \"implot_internal:789\",\n      \"ov_cimguiname\": \"ImPlotAxis_Constrain\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"ImPlotAxis\"\n    }\n  ],\n  \"ImPlotAxis_ExtendFit\": [\n    {\n      \"args\": \"(ImPlotAxis* self,double v)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotAxis*\"\n        },\n        {\n          \"name\": \"v\",\n          \"type\": \"double\"\n        }\n      ],\n      \"argsoriginal\": \"(double v)\",\n      \"call_args\": \"(v)\",\n      \"cimguiname\": \"ImPlotAxis_ExtendFit\",\n      \"defaults\": {},\n      \"funcname\": \"ExtendFit\",\n      \"location\": \"implot_internal:843\",\n      \"ov_cimguiname\": \"ImPlotAxis_ExtendFit\",\n      \"ret\": \"void\",\n      \"signature\": \"(double)\",\n      \"stname\": \"ImPlotAxis\"\n    }\n  ],\n  \"ImPlotAxis_ExtendFitWith\": [\n    {\n      \"args\": \"(ImPlotAxis* self,ImPlotAxis* alt,double v,double v_alt)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotAxis*\"\n        },\n        {\n          \"name\": \"alt\",\n          \"reftoptr\": true,\n          \"type\": \"ImPlotAxis*\"\n        },\n        {\n          \"name\": \"v\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"v_alt\",\n          \"type\": \"double\"\n        }\n      ],\n      \"argsoriginal\": \"(ImPlotAxis& alt,double v,double v_alt)\",\n      \"call_args\": \"(*alt,v,v_alt)\",\n      \"cimguiname\": \"ImPlotAxis_ExtendFitWith\",\n      \"defaults\": {},\n      \"funcname\": \"ExtendFitWith\",\n      \"location\": \"implot_internal:850\",\n      \"ov_cimguiname\": \"ImPlotAxis_ExtendFitWith\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImPlotAxis*,double,double)\",\n      \"stname\": \"ImPlotAxis\"\n    }\n  ],\n  \"ImPlotAxis_GetAspect\": [\n    {\n      \"args\": \"(ImPlotAxis* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotAxis*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImPlotAxis_GetAspect\",\n      \"defaults\": {},\n      \"funcname\": \"GetAspect\",\n      \"location\": \"implot_internal:787\",\n      \"ov_cimguiname\": \"ImPlotAxis_GetAspect\",\n      \"ret\": \"double\",\n      \"signature\": \"()const\",\n      \"stname\": \"ImPlotAxis\"\n    }\n  ],\n  \"ImPlotAxis_HasGridLines\": [\n    {\n      \"args\": \"(ImPlotAxis* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotAxis*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImPlotAxis_HasGridLines\",\n      \"defaults\": {},\n      \"funcname\": \"HasGridLines\",\n      \"location\": \"implot_internal:876\",\n      \"ov_cimguiname\": \"ImPlotAxis_HasGridLines\",\n      \"ret\": \"bool\",\n      \"signature\": \"()const\",\n      \"stname\": \"ImPlotAxis\"\n    }\n  ],\n  \"ImPlotAxis_HasLabel\": [\n    {\n      \"args\": \"(ImPlotAxis* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotAxis*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImPlotAxis_HasLabel\",\n      \"defaults\": {},\n      \"funcname\": \"HasLabel\",\n      \"location\": \"implot_internal:875\",\n      \"ov_cimguiname\": \"ImPlotAxis_HasLabel\",\n      \"ret\": \"bool\",\n      \"signature\": \"()const\",\n      \"stname\": \"ImPlotAxis\"\n    }\n  ],\n  \"ImPlotAxis_HasMenus\": [\n    {\n      \"args\": \"(ImPlotAxis* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotAxis*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImPlotAxis_HasMenus\",\n      \"defaults\": {},\n      \"funcname\": \"HasMenus\",\n      \"location\": \"implot_internal:892\",\n      \"ov_cimguiname\": \"ImPlotAxis_HasMenus\",\n      \"ret\": \"bool\",\n      \"signature\": \"()const\",\n      \"stname\": \"ImPlotAxis\"\n    }\n  ],\n  \"ImPlotAxis_HasTickLabels\": [\n    {\n      \"args\": \"(ImPlotAxis* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotAxis*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImPlotAxis_HasTickLabels\",\n      \"defaults\": {},\n      \"funcname\": \"HasTickLabels\",\n      \"location\": \"implot_internal:877\",\n      \"ov_cimguiname\": \"ImPlotAxis_HasTickLabels\",\n      \"ret\": \"bool\",\n      \"signature\": \"()const\",\n      \"stname\": \"ImPlotAxis\"\n    }\n  ],\n  \"ImPlotAxis_HasTickMarks\": [\n    {\n      \"args\": \"(ImPlotAxis* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotAxis*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImPlotAxis_HasTickMarks\",\n      \"defaults\": {},\n      \"funcname\": \"HasTickMarks\",\n      \"location\": \"implot_internal:878\",\n      \"ov_cimguiname\": \"ImPlotAxis_HasTickMarks\",\n      \"ret\": \"bool\",\n      \"signature\": \"()const\",\n      \"stname\": \"ImPlotAxis\"\n    }\n  ],\n  \"ImPlotAxis_ImPlotAxis\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImPlotAxis_ImPlotAxis\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImPlotAxis\",\n      \"location\": \"implot_internal:674\",\n      \"ov_cimguiname\": \"ImPlotAxis_ImPlotAxis\",\n      \"signature\": \"()\",\n      \"stname\": \"ImPlotAxis\"\n    }\n  ],\n  \"ImPlotAxis_IsAutoFitting\": [\n    {\n      \"args\": \"(ImPlotAxis* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotAxis*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImPlotAxis_IsAutoFitting\",\n      \"defaults\": {},\n      \"funcname\": \"IsAutoFitting\",\n      \"location\": \"implot_internal:883\",\n      \"ov_cimguiname\": \"ImPlotAxis_IsAutoFitting\",\n      \"ret\": \"bool\",\n      \"signature\": \"()const\",\n      \"stname\": \"ImPlotAxis\"\n    }\n  ],\n  \"ImPlotAxis_IsForeground\": [\n    {\n      \"args\": \"(ImPlotAxis* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotAxis*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImPlotAxis_IsForeground\",\n      \"defaults\": {},\n      \"funcname\": \"IsForeground\",\n      \"location\": \"implot_internal:882\",\n      \"ov_cimguiname\": \"ImPlotAxis_IsForeground\",\n      \"ret\": \"bool\",\n      \"signature\": \"()const\",\n      \"stname\": \"ImPlotAxis\"\n    }\n  ],\n  \"ImPlotAxis_IsInputLocked\": [\n    {\n      \"args\": \"(ImPlotAxis* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotAxis*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImPlotAxis_IsInputLocked\",\n      \"defaults\": {},\n      \"funcname\": \"IsInputLocked\",\n      \"location\": \"implot_internal:891\",\n      \"ov_cimguiname\": \"ImPlotAxis_IsInputLocked\",\n      \"ret\": \"bool\",\n      \"signature\": \"()const\",\n      \"stname\": \"ImPlotAxis\"\n    }\n  ],\n  \"ImPlotAxis_IsInputLockedMax\": [\n    {\n      \"args\": \"(ImPlotAxis* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotAxis*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImPlotAxis_IsInputLockedMax\",\n      \"defaults\": {},\n      \"funcname\": \"IsInputLockedMax\",\n      \"location\": \"implot_internal:890\",\n      \"ov_cimguiname\": \"ImPlotAxis_IsInputLockedMax\",\n      \"ret\": \"bool\",\n      \"signature\": \"()const\",\n      \"stname\": \"ImPlotAxis\"\n    }\n  ],\n  \"ImPlotAxis_IsInputLockedMin\": [\n    {\n      \"args\": \"(ImPlotAxis* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotAxis*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImPlotAxis_IsInputLockedMin\",\n      \"defaults\": {},\n      \"funcname\": \"IsInputLockedMin\",\n      \"location\": \"implot_internal:889\",\n      \"ov_cimguiname\": \"ImPlotAxis_IsInputLockedMin\",\n      \"ret\": \"bool\",\n      \"signature\": \"()const\",\n      \"stname\": \"ImPlotAxis\"\n    }\n  ],\n  \"ImPlotAxis_IsInverted\": [\n    {\n      \"args\": \"(ImPlotAxis* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotAxis*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImPlotAxis_IsInverted\",\n      \"defaults\": {},\n      \"funcname\": \"IsInverted\",\n      \"location\": \"implot_internal:881\",\n      \"ov_cimguiname\": \"ImPlotAxis_IsInverted\",\n      \"ret\": \"bool\",\n      \"signature\": \"()const\",\n      \"stname\": \"ImPlotAxis\"\n    }\n  ],\n  \"ImPlotAxis_IsLocked\": [\n    {\n      \"args\": \"(ImPlotAxis* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotAxis*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImPlotAxis_IsLocked\",\n      \"defaults\": {},\n      \"funcname\": \"IsLocked\",\n      \"location\": \"implot_internal:888\",\n      \"ov_cimguiname\": \"ImPlotAxis_IsLocked\",\n      \"ret\": \"bool\",\n      \"signature\": \"()const\",\n      \"stname\": \"ImPlotAxis\"\n    }\n  ],\n  \"ImPlotAxis_IsLockedMax\": [\n    {\n      \"args\": \"(ImPlotAxis* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotAxis*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImPlotAxis_IsLockedMax\",\n      \"defaults\": {},\n      \"funcname\": \"IsLockedMax\",\n      \"location\": \"implot_internal:887\",\n      \"ov_cimguiname\": \"ImPlotAxis_IsLockedMax\",\n      \"ret\": \"bool\",\n      \"signature\": \"()const\",\n      \"stname\": \"ImPlotAxis\"\n    }\n  ],\n  \"ImPlotAxis_IsLockedMin\": [\n    {\n      \"args\": \"(ImPlotAxis* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotAxis*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImPlotAxis_IsLockedMin\",\n      \"defaults\": {},\n      \"funcname\": \"IsLockedMin\",\n      \"location\": \"implot_internal:886\",\n      \"ov_cimguiname\": \"ImPlotAxis_IsLockedMin\",\n      \"ret\": \"bool\",\n      \"signature\": \"()const\",\n      \"stname\": \"ImPlotAxis\"\n    }\n  ],\n  \"ImPlotAxis_IsOpposite\": [\n    {\n      \"args\": \"(ImPlotAxis* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotAxis*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImPlotAxis_IsOpposite\",\n      \"defaults\": {},\n      \"funcname\": \"IsOpposite\",\n      \"location\": \"implot_internal:880\",\n      \"ov_cimguiname\": \"ImPlotAxis_IsOpposite\",\n      \"ret\": \"bool\",\n      \"signature\": \"()const\",\n      \"stname\": \"ImPlotAxis\"\n    }\n  ],\n  \"ImPlotAxis_IsPanLocked\": [\n    {\n      \"args\": \"(ImPlotAxis* self,bool increasing)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotAxis*\"\n        },\n        {\n          \"name\": \"increasing\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"argsoriginal\": \"(bool increasing)\",\n      \"call_args\": \"(increasing)\",\n      \"cimguiname\": \"ImPlotAxis_IsPanLocked\",\n      \"defaults\": {},\n      \"funcname\": \"IsPanLocked\",\n      \"location\": \"implot_internal:894\",\n      \"ov_cimguiname\": \"ImPlotAxis_IsPanLocked\",\n      \"ret\": \"bool\",\n      \"signature\": \"(bool)\",\n      \"stname\": \"ImPlotAxis\"\n    }\n  ],\n  \"ImPlotAxis_IsRangeLocked\": [\n    {\n      \"args\": \"(ImPlotAxis* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotAxis*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImPlotAxis_IsRangeLocked\",\n      \"defaults\": {},\n      \"funcname\": \"IsRangeLocked\",\n      \"location\": \"implot_internal:885\",\n      \"ov_cimguiname\": \"ImPlotAxis_IsRangeLocked\",\n      \"ret\": \"bool\",\n      \"signature\": \"()const\",\n      \"stname\": \"ImPlotAxis\"\n    }\n  ],\n  \"ImPlotAxis_PixelSize\": [\n    {\n      \"args\": \"(ImPlotAxis* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotAxis*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImPlotAxis_PixelSize\",\n      \"defaults\": {},\n      \"funcname\": \"PixelSize\",\n      \"location\": \"implot_internal:785\",\n      \"ov_cimguiname\": \"ImPlotAxis_PixelSize\",\n      \"ret\": \"float\",\n      \"signature\": \"()const\",\n      \"stname\": \"ImPlotAxis\"\n    }\n  ],\n  \"ImPlotAxis_PixelsToPlot\": [\n    {\n      \"args\": \"(ImPlotAxis* self,float pix)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotAxis*\"\n        },\n        {\n          \"name\": \"pix\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(float pix)\",\n      \"call_args\": \"(pix)\",\n      \"cimguiname\": \"ImPlotAxis_PixelsToPlot\",\n      \"defaults\": {},\n      \"funcname\": \"PixelsToPlot\",\n      \"location\": \"implot_internal:833\",\n      \"ov_cimguiname\": \"ImPlotAxis_PixelsToPlot\",\n      \"ret\": \"double\",\n      \"signature\": \"(float)const\",\n      \"stname\": \"ImPlotAxis\"\n    }\n  ],\n  \"ImPlotAxis_PlotToPixels\": [\n    {\n      \"args\": \"(ImPlotAxis* self,double plt)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotAxis*\"\n        },\n        {\n          \"name\": \"plt\",\n          \"type\": \"double\"\n        }\n      ],\n      \"argsoriginal\": \"(double plt)\",\n      \"call_args\": \"(plt)\",\n      \"cimguiname\": \"ImPlotAxis_PlotToPixels\",\n      \"defaults\": {},\n      \"funcname\": \"PlotToPixels\",\n      \"location\": \"implot_internal:823\",\n      \"ov_cimguiname\": \"ImPlotAxis_PlotToPixels\",\n      \"ret\": \"float\",\n      \"signature\": \"(double)const\",\n      \"stname\": \"ImPlotAxis\"\n    }\n  ],\n  \"ImPlotAxis_PullLinks\": [\n    {\n      \"args\": \"(ImPlotAxis* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotAxis*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImPlotAxis_PullLinks\",\n      \"defaults\": {},\n      \"funcname\": \"PullLinks\",\n      \"location\": \"implot_internal:913\",\n      \"ov_cimguiname\": \"ImPlotAxis_PullLinks\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"ImPlotAxis\"\n    }\n  ],\n  \"ImPlotAxis_PushLinks\": [\n    {\n      \"args\": \"(ImPlotAxis* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotAxis*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImPlotAxis_PushLinks\",\n      \"defaults\": {},\n      \"funcname\": \"PushLinks\",\n      \"location\": \"implot_internal:908\",\n      \"ov_cimguiname\": \"ImPlotAxis_PushLinks\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"ImPlotAxis\"\n    }\n  ],\n  \"ImPlotAxis_Reset\": [\n    {\n      \"args\": \"(ImPlotAxis* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotAxis*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImPlotAxis_Reset\",\n      \"defaults\": {},\n      \"funcname\": \"Reset\",\n      \"location\": \"implot_internal:701\",\n      \"ov_cimguiname\": \"ImPlotAxis_Reset\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"ImPlotAxis\"\n    }\n  ],\n  \"ImPlotAxis_SetAspect\": [\n    {\n      \"args\": \"(ImPlotAxis* self,double unit_per_pix)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotAxis*\"\n        },\n        {\n          \"name\": \"unit_per_pix\",\n          \"type\": \"double\"\n        }\n      ],\n      \"argsoriginal\": \"(double unit_per_pix)\",\n      \"call_args\": \"(unit_per_pix)\",\n      \"cimguiname\": \"ImPlotAxis_SetAspect\",\n      \"defaults\": {},\n      \"funcname\": \"SetAspect\",\n      \"location\": \"implot_internal:772\",\n      \"ov_cimguiname\": \"ImPlotAxis_SetAspect\",\n      \"ret\": \"void\",\n      \"signature\": \"(double)\",\n      \"stname\": \"ImPlotAxis\"\n    }\n  ],\n  \"ImPlotAxis_SetMax\": [\n    {\n      \"args\": \"(ImPlotAxis* self,double _max,bool force)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotAxis*\"\n        },\n        {\n          \"name\": \"_max\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"force\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"argsoriginal\": \"(double _max,bool force=false)\",\n      \"call_args\": \"(_max,force)\",\n      \"cimguiname\": \"ImPlotAxis_SetMax\",\n      \"defaults\": {\n        \"force\": \"false\"\n      },\n      \"funcname\": \"SetMax\",\n      \"location\": \"implot_internal:740\",\n      \"ov_cimguiname\": \"ImPlotAxis_SetMax\",\n      \"ret\": \"bool\",\n      \"signature\": \"(double,bool)\",\n      \"stname\": \"ImPlotAxis\"\n    }\n  ],\n  \"ImPlotAxis_SetMin\": [\n    {\n      \"args\": \"(ImPlotAxis* self,double _min,bool force)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotAxis*\"\n        },\n        {\n          \"name\": \"_min\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"force\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"argsoriginal\": \"(double _min,bool force=false)\",\n      \"call_args\": \"(_min,force)\",\n      \"cimguiname\": \"ImPlotAxis_SetMin\",\n      \"defaults\": {\n        \"force\": \"false\"\n      },\n      \"funcname\": \"SetMin\",\n      \"location\": \"implot_internal:721\",\n      \"ov_cimguiname\": \"ImPlotAxis_SetMin\",\n      \"ret\": \"bool\",\n      \"signature\": \"(double,bool)\",\n      \"stname\": \"ImPlotAxis\"\n    }\n  ],\n  \"ImPlotAxis_SetRange\": [\n    {\n      \"args\": \"(ImPlotAxis* self,double v1,double v2)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotAxis*\"\n        },\n        {\n          \"name\": \"v1\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"v2\",\n          \"type\": \"double\"\n        }\n      ],\n      \"argsoriginal\": \"(double v1,double v2)\",\n      \"call_args\": \"(v1,v2)\",\n      \"cimguiname\": \"ImPlotAxis_SetRange\",\n      \"defaults\": {},\n      \"funcname\": \"SetRange\",\n      \"location\": \"implot_internal:759\",\n      \"ov_cimguiname\": \"ImPlotAxis_SetRange_double\",\n      \"ret\": \"void\",\n      \"signature\": \"(double,double)\",\n      \"stname\": \"ImPlotAxis\"\n    },\n    {\n      \"args\": \"(ImPlotAxis* self,const ImPlotRange range)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotAxis*\"\n        },\n        {\n          \"name\": \"range\",\n          \"type\": \"const ImPlotRange\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImPlotRange& range)\",\n      \"call_args\": \"(range)\",\n      \"cimguiname\": \"ImPlotAxis_SetRange\",\n      \"defaults\": {},\n      \"funcname\": \"SetRange\",\n      \"location\": \"implot_internal:768\",\n      \"ov_cimguiname\": \"ImPlotAxis_SetRange_PlotRange\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImPlotRange)\",\n      \"stname\": \"ImPlotAxis\"\n    }\n  ],\n  \"ImPlotAxis_UpdateTransformCache\": [\n    {\n      \"args\": \"(ImPlotAxis* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotAxis*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImPlotAxis_UpdateTransformCache\",\n      \"defaults\": {},\n      \"funcname\": \"UpdateTransformCache\",\n      \"location\": \"implot_internal:811\",\n      \"ov_cimguiname\": \"ImPlotAxis_UpdateTransformCache\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"ImPlotAxis\"\n    }\n  ],\n  \"ImPlotAxis_WillRender\": [\n    {\n      \"args\": \"(ImPlotAxis* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotAxis*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImPlotAxis_WillRender\",\n      \"defaults\": {},\n      \"funcname\": \"WillRender\",\n      \"location\": \"implot_internal:879\",\n      \"ov_cimguiname\": \"ImPlotAxis_WillRender\",\n      \"ret\": \"bool\",\n      \"signature\": \"()const\",\n      \"stname\": \"ImPlotAxis\"\n    }\n  ],\n  \"ImPlotAxis_destroy\": [\n    {\n      \"args\": \"(ImPlotAxis* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotAxis*\"\n        }\n      ],\n      \"call_args\": \"(self)\",\n      \"cimguiname\": \"ImPlotAxis_destroy\",\n      \"defaults\": {},\n      \"destructor\": true,\n      \"ov_cimguiname\": \"ImPlotAxis_destroy\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImPlotAxis*)\",\n      \"stname\": \"ImPlotAxis\"\n    }\n  ],\n  \"ImPlotColormapData_Append\": [\n    {\n      \"args\": \"(ImPlotColormapData* self,const char* name,const ImU32* keys,int count,bool qual)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotColormapData*\"\n        },\n        {\n          \"name\": \"name\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"keys\",\n          \"type\": \"const ImU32*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"qual\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* name,const ImU32* keys,int count,bool qual)\",\n      \"call_args\": \"(name,keys,count,qual)\",\n      \"cimguiname\": \"ImPlotColormapData_Append\",\n      \"defaults\": {},\n      \"funcname\": \"Append\",\n      \"location\": \"implot_internal:338\",\n      \"ov_cimguiname\": \"ImPlotColormapData_Append\",\n      \"ret\": \"int\",\n      \"signature\": \"(const char*,const ImU32*,int,bool)\",\n      \"stname\": \"ImPlotColormapData\"\n    }\n  ],\n  \"ImPlotColormapData_GetIndex\": [\n    {\n      \"args\": \"(ImPlotColormapData* self,const char* name)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotColormapData*\"\n        },\n        {\n          \"name\": \"name\",\n          \"type\": \"const char*\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* name)\",\n      \"call_args\": \"(name)\",\n      \"cimguiname\": \"ImPlotColormapData_GetIndex\",\n      \"defaults\": {},\n      \"funcname\": \"GetIndex\",\n      \"location\": \"implot_internal:405\",\n      \"ov_cimguiname\": \"ImPlotColormapData_GetIndex\",\n      \"ret\": \"ImPlotColormap\",\n      \"signature\": \"(const char*)const\",\n      \"stname\": \"ImPlotColormapData\"\n    }\n  ],\n  \"ImPlotColormapData_GetKeyColor\": [\n    {\n      \"args\": \"(ImPlotColormapData* self,ImPlotColormap cmap,int idx)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotColormapData*\"\n        },\n        {\n          \"name\": \"cmap\",\n          \"type\": \"ImPlotColormap\"\n        },\n        {\n          \"name\": \"idx\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(ImPlotColormap cmap,int idx)\",\n      \"call_args\": \"(cmap,idx)\",\n      \"cimguiname\": \"ImPlotColormapData_GetKeyColor\",\n      \"defaults\": {},\n      \"funcname\": \"GetKeyColor\",\n      \"location\": \"implot_internal:409\",\n      \"ov_cimguiname\": \"ImPlotColormapData_GetKeyColor\",\n      \"ret\": \"ImU32\",\n      \"signature\": \"(ImPlotColormap,int)const\",\n      \"stname\": \"ImPlotColormapData\"\n    }\n  ],\n  \"ImPlotColormapData_GetKeyCount\": [\n    {\n      \"args\": \"(ImPlotColormapData* self,ImPlotColormap cmap)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotColormapData*\"\n        },\n        {\n          \"name\": \"cmap\",\n          \"type\": \"ImPlotColormap\"\n        }\n      ],\n      \"argsoriginal\": \"(ImPlotColormap cmap)\",\n      \"call_args\": \"(cmap)\",\n      \"cimguiname\": \"ImPlotColormapData_GetKeyCount\",\n      \"defaults\": {},\n      \"funcname\": \"GetKeyCount\",\n      \"location\": \"implot_internal:408\",\n      \"ov_cimguiname\": \"ImPlotColormapData_GetKeyCount\",\n      \"ret\": \"int\",\n      \"signature\": \"(ImPlotColormap)const\",\n      \"stname\": \"ImPlotColormapData\"\n    }\n  ],\n  \"ImPlotColormapData_GetKeys\": [\n    {\n      \"args\": \"(ImPlotColormapData* self,ImPlotColormap cmap)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotColormapData*\"\n        },\n        {\n          \"name\": \"cmap\",\n          \"type\": \"ImPlotColormap\"\n        }\n      ],\n      \"argsoriginal\": \"(ImPlotColormap cmap)\",\n      \"call_args\": \"(cmap)\",\n      \"cimguiname\": \"ImPlotColormapData_GetKeys\",\n      \"defaults\": {},\n      \"funcname\": \"GetKeys\",\n      \"location\": \"implot_internal:407\",\n      \"ov_cimguiname\": \"ImPlotColormapData_GetKeys\",\n      \"ret\": \"const ImU32*\",\n      \"signature\": \"(ImPlotColormap)const\",\n      \"stname\": \"ImPlotColormapData\"\n    }\n  ],\n  \"ImPlotColormapData_GetName\": [\n    {\n      \"args\": \"(ImPlotColormapData* self,ImPlotColormap cmap)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotColormapData*\"\n        },\n        {\n          \"name\": \"cmap\",\n          \"type\": \"ImPlotColormap\"\n        }\n      ],\n      \"argsoriginal\": \"(ImPlotColormap cmap)\",\n      \"call_args\": \"(cmap)\",\n      \"cimguiname\": \"ImPlotColormapData_GetName\",\n      \"defaults\": {},\n      \"funcname\": \"GetName\",\n      \"location\": \"implot_internal:404\",\n      \"ov_cimguiname\": \"ImPlotColormapData_GetName\",\n      \"ret\": \"const char*\",\n      \"signature\": \"(ImPlotColormap)const\",\n      \"stname\": \"ImPlotColormapData\"\n    }\n  ],\n  \"ImPlotColormapData_GetTable\": [\n    {\n      \"args\": \"(ImPlotColormapData* self,ImPlotColormap cmap)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotColormapData*\"\n        },\n        {\n          \"name\": \"cmap\",\n          \"type\": \"ImPlotColormap\"\n        }\n      ],\n      \"argsoriginal\": \"(ImPlotColormap cmap)\",\n      \"call_args\": \"(cmap)\",\n      \"cimguiname\": \"ImPlotColormapData_GetTable\",\n      \"defaults\": {},\n      \"funcname\": \"GetTable\",\n      \"location\": \"implot_internal:412\",\n      \"ov_cimguiname\": \"ImPlotColormapData_GetTable\",\n      \"ret\": \"const ImU32*\",\n      \"signature\": \"(ImPlotColormap)const\",\n      \"stname\": \"ImPlotColormapData\"\n    }\n  ],\n  \"ImPlotColormapData_GetTableColor\": [\n    {\n      \"args\": \"(ImPlotColormapData* self,ImPlotColormap cmap,int idx)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotColormapData*\"\n        },\n        {\n          \"name\": \"cmap\",\n          \"type\": \"ImPlotColormap\"\n        },\n        {\n          \"name\": \"idx\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(ImPlotColormap cmap,int idx)\",\n      \"call_args\": \"(cmap,idx)\",\n      \"cimguiname\": \"ImPlotColormapData_GetTableColor\",\n      \"defaults\": {},\n      \"funcname\": \"GetTableColor\",\n      \"location\": \"implot_internal:414\",\n      \"ov_cimguiname\": \"ImPlotColormapData_GetTableColor\",\n      \"ret\": \"ImU32\",\n      \"signature\": \"(ImPlotColormap,int)const\",\n      \"stname\": \"ImPlotColormapData\"\n    }\n  ],\n  \"ImPlotColormapData_GetTableSize\": [\n    {\n      \"args\": \"(ImPlotColormapData* self,ImPlotColormap cmap)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotColormapData*\"\n        },\n        {\n          \"name\": \"cmap\",\n          \"type\": \"ImPlotColormap\"\n        }\n      ],\n      \"argsoriginal\": \"(ImPlotColormap cmap)\",\n      \"call_args\": \"(cmap)\",\n      \"cimguiname\": \"ImPlotColormapData_GetTableSize\",\n      \"defaults\": {},\n      \"funcname\": \"GetTableSize\",\n      \"location\": \"implot_internal:413\",\n      \"ov_cimguiname\": \"ImPlotColormapData_GetTableSize\",\n      \"ret\": \"int\",\n      \"signature\": \"(ImPlotColormap)const\",\n      \"stname\": \"ImPlotColormapData\"\n    }\n  ],\n  \"ImPlotColormapData_ImPlotColormapData\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImPlotColormapData_ImPlotColormapData\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImPlotColormapData\",\n      \"location\": \"implot_internal:336\",\n      \"ov_cimguiname\": \"ImPlotColormapData_ImPlotColormapData\",\n      \"signature\": \"()\",\n      \"stname\": \"ImPlotColormapData\"\n    }\n  ],\n  \"ImPlotColormapData_IsQual\": [\n    {\n      \"args\": \"(ImPlotColormapData* self,ImPlotColormap cmap)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotColormapData*\"\n        },\n        {\n          \"name\": \"cmap\",\n          \"type\": \"ImPlotColormap\"\n        }\n      ],\n      \"argsoriginal\": \"(ImPlotColormap cmap)\",\n      \"call_args\": \"(cmap)\",\n      \"cimguiname\": \"ImPlotColormapData_IsQual\",\n      \"defaults\": {},\n      \"funcname\": \"IsQual\",\n      \"location\": \"implot_internal:403\",\n      \"ov_cimguiname\": \"ImPlotColormapData_IsQual\",\n      \"ret\": \"bool\",\n      \"signature\": \"(ImPlotColormap)const\",\n      \"stname\": \"ImPlotColormapData\"\n    }\n  ],\n  \"ImPlotColormapData_LerpTable\": [\n    {\n      \"args\": \"(ImPlotColormapData* self,ImPlotColormap cmap,float t)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotColormapData*\"\n        },\n        {\n          \"name\": \"cmap\",\n          \"type\": \"ImPlotColormap\"\n        },\n        {\n          \"name\": \"t\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(ImPlotColormap cmap,float t)\",\n      \"call_args\": \"(cmap,t)\",\n      \"cimguiname\": \"ImPlotColormapData_LerpTable\",\n      \"defaults\": {},\n      \"funcname\": \"LerpTable\",\n      \"location\": \"implot_internal:416\",\n      \"ov_cimguiname\": \"ImPlotColormapData_LerpTable\",\n      \"ret\": \"ImU32\",\n      \"signature\": \"(ImPlotColormap,float)const\",\n      \"stname\": \"ImPlotColormapData\"\n    }\n  ],\n  \"ImPlotColormapData_RebuildTables\": [\n    {\n      \"args\": \"(ImPlotColormapData* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotColormapData*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImPlotColormapData_RebuildTables\",\n      \"defaults\": {},\n      \"funcname\": \"RebuildTables\",\n      \"location\": \"implot_internal:395\",\n      \"ov_cimguiname\": \"ImPlotColormapData_RebuildTables\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"ImPlotColormapData\"\n    }\n  ],\n  \"ImPlotColormapData_SetKeyColor\": [\n    {\n      \"args\": \"(ImPlotColormapData* self,ImPlotColormap cmap,int idx,ImU32 value)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotColormapData*\"\n        },\n        {\n          \"name\": \"cmap\",\n          \"type\": \"ImPlotColormap\"\n        },\n        {\n          \"name\": \"idx\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"value\",\n          \"type\": \"ImU32\"\n        }\n      ],\n      \"argsoriginal\": \"(ImPlotColormap cmap,int idx,ImU32 value)\",\n      \"call_args\": \"(cmap,idx,value)\",\n      \"cimguiname\": \"ImPlotColormapData_SetKeyColor\",\n      \"defaults\": {},\n      \"funcname\": \"SetKeyColor\",\n      \"location\": \"implot_internal:410\",\n      \"ov_cimguiname\": \"ImPlotColormapData_SetKeyColor\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImPlotColormap,int,ImU32)\",\n      \"stname\": \"ImPlotColormapData\"\n    }\n  ],\n  \"ImPlotColormapData__AppendTable\": [\n    {\n      \"args\": \"(ImPlotColormapData* self,ImPlotColormap cmap)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotColormapData*\"\n        },\n        {\n          \"name\": \"cmap\",\n          \"type\": \"ImPlotColormap\"\n        }\n      ],\n      \"argsoriginal\": \"(ImPlotColormap cmap)\",\n      \"call_args\": \"(cmap)\",\n      \"cimguiname\": \"ImPlotColormapData__AppendTable\",\n      \"defaults\": {},\n      \"funcname\": \"_AppendTable\",\n      \"location\": \"implot_internal:356\",\n      \"ov_cimguiname\": \"ImPlotColormapData__AppendTable\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImPlotColormap)\",\n      \"stname\": \"ImPlotColormapData\"\n    }\n  ],\n  \"ImPlotColormapData_destroy\": [\n    {\n      \"args\": \"(ImPlotColormapData* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotColormapData*\"\n        }\n      ],\n      \"call_args\": \"(self)\",\n      \"cimguiname\": \"ImPlotColormapData_destroy\",\n      \"defaults\": {},\n      \"destructor\": true,\n      \"ov_cimguiname\": \"ImPlotColormapData_destroy\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImPlotColormapData*)\",\n      \"stname\": \"ImPlotColormapData\"\n    }\n  ],\n  \"ImPlotDateTimeSpec_ImPlotDateTimeSpec\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImPlotDateTimeSpec_ImPlotDateTimeSpec\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImPlotDateTimeSpec\",\n      \"location\": \"implot_internal:283\",\n      \"ov_cimguiname\": \"ImPlotDateTimeSpec_ImPlotDateTimeSpec_Nil\",\n      \"signature\": \"()\",\n      \"stname\": \"ImPlotDateTimeSpec\"\n    },\n    {\n      \"args\": \"(ImPlotDateFmt date_fmt,ImPlotTimeFmt time_fmt,bool use_24_hr_clk,bool use_iso_8601)\",\n      \"argsT\": [\n        {\n          \"name\": \"date_fmt\",\n          \"type\": \"ImPlotDateFmt\"\n        },\n        {\n          \"name\": \"time_fmt\",\n          \"type\": \"ImPlotTimeFmt\"\n        },\n        {\n          \"name\": \"use_24_hr_clk\",\n          \"type\": \"bool\"\n        },\n        {\n          \"name\": \"use_iso_8601\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"argsoriginal\": \"(ImPlotDateFmt date_fmt,ImPlotTimeFmt time_fmt,bool use_24_hr_clk=false,bool use_iso_8601=false)\",\n      \"call_args\": \"(date_fmt,time_fmt,use_24_hr_clk,use_iso_8601)\",\n      \"cimguiname\": \"ImPlotDateTimeSpec_ImPlotDateTimeSpec\",\n      \"constructor\": true,\n      \"defaults\": {\n        \"use_24_hr_clk\": \"false\",\n        \"use_iso_8601\": \"false\"\n      },\n      \"funcname\": \"ImPlotDateTimeSpec\",\n      \"location\": \"implot_internal:284\",\n      \"ov_cimguiname\": \"ImPlotDateTimeSpec_ImPlotDateTimeSpec_PlotDateFmt\",\n      \"signature\": \"(ImPlotDateFmt,ImPlotTimeFmt,bool,bool)\",\n      \"stname\": \"ImPlotDateTimeSpec\"\n    }\n  ],\n  \"ImPlotDateTimeSpec_destroy\": [\n    {\n      \"args\": \"(ImPlotDateTimeSpec* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotDateTimeSpec*\"\n        }\n      ],\n      \"call_args\": \"(self)\",\n      \"cimguiname\": \"ImPlotDateTimeSpec_destroy\",\n      \"defaults\": {},\n      \"destructor\": true,\n      \"ov_cimguiname\": \"ImPlotDateTimeSpec_destroy\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImPlotDateTimeSpec*)\",\n      \"stname\": \"ImPlotDateTimeSpec\"\n    }\n  ],\n  \"ImPlotInputMap_ImPlotInputMap\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImPlotInputMap_ImPlotInputMap\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImPlotInputMap\",\n      \"location\": \"implot:569\",\n      \"ov_cimguiname\": \"ImPlotInputMap_ImPlotInputMap\",\n      \"signature\": \"()\",\n      \"stname\": \"ImPlotInputMap\"\n    }\n  ],\n  \"ImPlotInputMap_destroy\": [\n    {\n      \"args\": \"(ImPlotInputMap* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotInputMap*\"\n        }\n      ],\n      \"call_args\": \"(self)\",\n      \"cimguiname\": \"ImPlotInputMap_destroy\",\n      \"defaults\": {},\n      \"destructor\": true,\n      \"ov_cimguiname\": \"ImPlotInputMap_destroy\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImPlotInputMap*)\",\n      \"stname\": \"ImPlotInputMap\"\n    }\n  ],\n  \"ImPlotItemGroup_GetItem\": [\n    {\n      \"args\": \"(ImPlotItemGroup* self,ImGuiID id)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotItemGroup*\"\n        },\n        {\n          \"name\": \"id\",\n          \"type\": \"ImGuiID\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiID id)\",\n      \"call_args\": \"(id)\",\n      \"cimguiname\": \"ImPlotItemGroup_GetItem\",\n      \"defaults\": {},\n      \"funcname\": \"GetItem\",\n      \"location\": \"implot_internal:1001\",\n      \"ov_cimguiname\": \"ImPlotItemGroup_GetItem_ID\",\n      \"ret\": \"ImPlotItem*\",\n      \"signature\": \"(ImGuiID)\",\n      \"stname\": \"ImPlotItemGroup\"\n    },\n    {\n      \"args\": \"(ImPlotItemGroup* self,const char* label_id)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotItemGroup*\"\n        },\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id)\",\n      \"call_args\": \"(label_id)\",\n      \"cimguiname\": \"ImPlotItemGroup_GetItem\",\n      \"defaults\": {},\n      \"funcname\": \"GetItem\",\n      \"location\": \"implot_internal:1002\",\n      \"ov_cimguiname\": \"ImPlotItemGroup_GetItem_Str\",\n      \"ret\": \"ImPlotItem*\",\n      \"signature\": \"(const char*)\",\n      \"stname\": \"ImPlotItemGroup\"\n    }\n  ],\n  \"ImPlotItemGroup_GetItemByIndex\": [\n    {\n      \"args\": \"(ImPlotItemGroup* self,int i)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotItemGroup*\"\n        },\n        {\n          \"name\": \"i\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(int i)\",\n      \"call_args\": \"(i)\",\n      \"cimguiname\": \"ImPlotItemGroup_GetItemByIndex\",\n      \"defaults\": {},\n      \"funcname\": \"GetItemByIndex\",\n      \"location\": \"implot_internal:1004\",\n      \"ov_cimguiname\": \"ImPlotItemGroup_GetItemByIndex\",\n      \"ret\": \"ImPlotItem*\",\n      \"signature\": \"(int)\",\n      \"stname\": \"ImPlotItemGroup\"\n    }\n  ],\n  \"ImPlotItemGroup_GetItemCount\": [\n    {\n      \"args\": \"(ImPlotItemGroup* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotItemGroup*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImPlotItemGroup_GetItemCount\",\n      \"defaults\": {},\n      \"funcname\": \"GetItemCount\",\n      \"location\": \"implot_internal:999\",\n      \"ov_cimguiname\": \"ImPlotItemGroup_GetItemCount\",\n      \"ret\": \"int\",\n      \"signature\": \"()const\",\n      \"stname\": \"ImPlotItemGroup\"\n    }\n  ],\n  \"ImPlotItemGroup_GetItemID\": [\n    {\n      \"args\": \"(ImPlotItemGroup* self,const char* label_id)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotItemGroup*\"\n        },\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id)\",\n      \"call_args\": \"(label_id)\",\n      \"cimguiname\": \"ImPlotItemGroup_GetItemID\",\n      \"defaults\": {},\n      \"funcname\": \"GetItemID\",\n      \"location\": \"implot_internal:1000\",\n      \"ov_cimguiname\": \"ImPlotItemGroup_GetItemID\",\n      \"ret\": \"ImGuiID\",\n      \"signature\": \"(const char*)\",\n      \"stname\": \"ImPlotItemGroup\"\n    }\n  ],\n  \"ImPlotItemGroup_GetItemIndex\": [\n    {\n      \"args\": \"(ImPlotItemGroup* self,ImPlotItem* item)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotItemGroup*\"\n        },\n        {\n          \"name\": \"item\",\n          \"type\": \"ImPlotItem*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImPlotItem* item)\",\n      \"call_args\": \"(item)\",\n      \"cimguiname\": \"ImPlotItemGroup_GetItemIndex\",\n      \"defaults\": {},\n      \"funcname\": \"GetItemIndex\",\n      \"location\": \"implot_internal:1005\",\n      \"ov_cimguiname\": \"ImPlotItemGroup_GetItemIndex\",\n      \"ret\": \"int\",\n      \"signature\": \"(ImPlotItem*)\",\n      \"stname\": \"ImPlotItemGroup\"\n    }\n  ],\n  \"ImPlotItemGroup_GetLegendCount\": [\n    {\n      \"args\": \"(ImPlotItemGroup* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotItemGroup*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImPlotItemGroup_GetLegendCount\",\n      \"defaults\": {},\n      \"funcname\": \"GetLegendCount\",\n      \"location\": \"implot_internal:1006\",\n      \"ov_cimguiname\": \"ImPlotItemGroup_GetLegendCount\",\n      \"ret\": \"int\",\n      \"signature\": \"()const\",\n      \"stname\": \"ImPlotItemGroup\"\n    }\n  ],\n  \"ImPlotItemGroup_GetLegendItem\": [\n    {\n      \"args\": \"(ImPlotItemGroup* self,int i)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotItemGroup*\"\n        },\n        {\n          \"name\": \"i\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(int i)\",\n      \"call_args\": \"(i)\",\n      \"cimguiname\": \"ImPlotItemGroup_GetLegendItem\",\n      \"defaults\": {},\n      \"funcname\": \"GetLegendItem\",\n      \"location\": \"implot_internal:1007\",\n      \"ov_cimguiname\": \"ImPlotItemGroup_GetLegendItem\",\n      \"ret\": \"ImPlotItem*\",\n      \"signature\": \"(int)\",\n      \"stname\": \"ImPlotItemGroup\"\n    }\n  ],\n  \"ImPlotItemGroup_GetLegendLabel\": [\n    {\n      \"args\": \"(ImPlotItemGroup* self,int i)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotItemGroup*\"\n        },\n        {\n          \"name\": \"i\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(int i)\",\n      \"call_args\": \"(i)\",\n      \"cimguiname\": \"ImPlotItemGroup_GetLegendLabel\",\n      \"defaults\": {},\n      \"funcname\": \"GetLegendLabel\",\n      \"location\": \"implot_internal:1008\",\n      \"ov_cimguiname\": \"ImPlotItemGroup_GetLegendLabel\",\n      \"ret\": \"const char*\",\n      \"signature\": \"(int)\",\n      \"stname\": \"ImPlotItemGroup\"\n    }\n  ],\n  \"ImPlotItemGroup_GetOrAddItem\": [\n    {\n      \"args\": \"(ImPlotItemGroup* self,ImGuiID id)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotItemGroup*\"\n        },\n        {\n          \"name\": \"id\",\n          \"type\": \"ImGuiID\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiID id)\",\n      \"call_args\": \"(id)\",\n      \"cimguiname\": \"ImPlotItemGroup_GetOrAddItem\",\n      \"defaults\": {},\n      \"funcname\": \"GetOrAddItem\",\n      \"location\": \"implot_internal:1003\",\n      \"ov_cimguiname\": \"ImPlotItemGroup_GetOrAddItem\",\n      \"ret\": \"ImPlotItem*\",\n      \"signature\": \"(ImGuiID)\",\n      \"stname\": \"ImPlotItemGroup\"\n    }\n  ],\n  \"ImPlotItemGroup_ImPlotItemGroup\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImPlotItemGroup_ImPlotItemGroup\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImPlotItemGroup\",\n      \"location\": \"implot_internal:997\",\n      \"ov_cimguiname\": \"ImPlotItemGroup_ImPlotItemGroup\",\n      \"signature\": \"()\",\n      \"stname\": \"ImPlotItemGroup\"\n    }\n  ],\n  \"ImPlotItemGroup_Reset\": [\n    {\n      \"args\": \"(ImPlotItemGroup* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotItemGroup*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImPlotItemGroup_Reset\",\n      \"defaults\": {},\n      \"funcname\": \"Reset\",\n      \"location\": \"implot_internal:1009\",\n      \"ov_cimguiname\": \"ImPlotItemGroup_Reset\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"ImPlotItemGroup\"\n    }\n  ],\n  \"ImPlotItemGroup_destroy\": [\n    {\n      \"args\": \"(ImPlotItemGroup* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotItemGroup*\"\n        }\n      ],\n      \"call_args\": \"(self)\",\n      \"cimguiname\": \"ImPlotItemGroup_destroy\",\n      \"defaults\": {},\n      \"destructor\": true,\n      \"ov_cimguiname\": \"ImPlotItemGroup_destroy\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImPlotItemGroup*)\",\n      \"stname\": \"ImPlotItemGroup\"\n    }\n  ],\n  \"ImPlotItem_ImPlotItem\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImPlotItem_ImPlotItem\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImPlotItem\",\n      \"location\": \"implot_internal:953\",\n      \"ov_cimguiname\": \"ImPlotItem_ImPlotItem\",\n      \"signature\": \"()\",\n      \"stname\": \"ImPlotItem\"\n    }\n  ],\n  \"ImPlotItem_destroy\": [\n    {\n      \"args\": \"(ImPlotItem* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotItem*\"\n        }\n      ],\n      \"call_args\": \"(self)\",\n      \"cimguiname\": \"ImPlotItem_destroy\",\n      \"defaults\": {},\n      \"destructor\": true,\n      \"location\": \"implot_internal:962\",\n      \"ov_cimguiname\": \"ImPlotItem_destroy\",\n      \"realdestructor\": true,\n      \"ret\": \"void\",\n      \"signature\": \"(ImPlotItem*)\",\n      \"stname\": \"ImPlotItem\"\n    }\n  ],\n  \"ImPlotLegend_ImPlotLegend\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImPlotLegend_ImPlotLegend\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImPlotLegend\",\n      \"location\": \"implot_internal:979\",\n      \"ov_cimguiname\": \"ImPlotLegend_ImPlotLegend\",\n      \"signature\": \"()\",\n      \"stname\": \"ImPlotLegend\"\n    }\n  ],\n  \"ImPlotLegend_Reset\": [\n    {\n      \"args\": \"(ImPlotLegend* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotLegend*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImPlotLegend_Reset\",\n      \"defaults\": {},\n      \"funcname\": \"Reset\",\n      \"location\": \"implot_internal:986\",\n      \"ov_cimguiname\": \"ImPlotLegend_Reset\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"ImPlotLegend\"\n    }\n  ],\n  \"ImPlotLegend_destroy\": [\n    {\n      \"args\": \"(ImPlotLegend* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotLegend*\"\n        }\n      ],\n      \"call_args\": \"(self)\",\n      \"cimguiname\": \"ImPlotLegend_destroy\",\n      \"defaults\": {},\n      \"destructor\": true,\n      \"ov_cimguiname\": \"ImPlotLegend_destroy\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImPlotLegend*)\",\n      \"stname\": \"ImPlotLegend\"\n    }\n  ],\n  \"ImPlotNextItemData_ImPlotNextItemData\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImPlotNextItemData_ImPlotNextItemData\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImPlotNextItemData\",\n      \"location\": \"implot_internal:1194\",\n      \"ov_cimguiname\": \"ImPlotNextItemData_ImPlotNextItemData\",\n      \"signature\": \"()\",\n      \"stname\": \"ImPlotNextItemData\"\n    }\n  ],\n  \"ImPlotNextItemData_Reset\": [\n    {\n      \"args\": \"(ImPlotNextItemData* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotNextItemData*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImPlotNextItemData_Reset\",\n      \"defaults\": {},\n      \"funcname\": \"Reset\",\n      \"location\": \"implot_internal:1195\",\n      \"ov_cimguiname\": \"ImPlotNextItemData_Reset\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"ImPlotNextItemData\"\n    }\n  ],\n  \"ImPlotNextItemData_destroy\": [\n    {\n      \"args\": \"(ImPlotNextItemData* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotNextItemData*\"\n        }\n      ],\n      \"call_args\": \"(self)\",\n      \"cimguiname\": \"ImPlotNextItemData_destroy\",\n      \"defaults\": {},\n      \"destructor\": true,\n      \"ov_cimguiname\": \"ImPlotNextItemData_destroy\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImPlotNextItemData*)\",\n      \"stname\": \"ImPlotNextItemData\"\n    }\n  ],\n  \"ImPlotNextPlotData_ImPlotNextPlotData\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImPlotNextPlotData_ImPlotNextPlotData\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImPlotNextPlotData\",\n      \"location\": \"implot_internal:1163\",\n      \"ov_cimguiname\": \"ImPlotNextPlotData_ImPlotNextPlotData\",\n      \"signature\": \"()\",\n      \"stname\": \"ImPlotNextPlotData\"\n    }\n  ],\n  \"ImPlotNextPlotData_Reset\": [\n    {\n      \"args\": \"(ImPlotNextPlotData* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotNextPlotData*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImPlotNextPlotData_Reset\",\n      \"defaults\": {},\n      \"funcname\": \"Reset\",\n      \"location\": \"implot_internal:1165\",\n      \"ov_cimguiname\": \"ImPlotNextPlotData_Reset\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"ImPlotNextPlotData\"\n    }\n  ],\n  \"ImPlotNextPlotData_destroy\": [\n    {\n      \"args\": \"(ImPlotNextPlotData* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotNextPlotData*\"\n        }\n      ],\n      \"call_args\": \"(self)\",\n      \"cimguiname\": \"ImPlotNextPlotData_destroy\",\n      \"defaults\": {},\n      \"destructor\": true,\n      \"ov_cimguiname\": \"ImPlotNextPlotData_destroy\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImPlotNextPlotData*)\",\n      \"stname\": \"ImPlotNextPlotData\"\n    }\n  ],\n  \"ImPlotPlot_ClearTextBuffer\": [\n    {\n      \"args\": \"(ImPlotPlot* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotPlot*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImPlotPlot_ClearTextBuffer\",\n      \"defaults\": {},\n      \"funcname\": \"ClearTextBuffer\",\n      \"location\": \"implot_internal:1071\",\n      \"ov_cimguiname\": \"ImPlotPlot_ClearTextBuffer\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"ImPlotPlot\"\n    }\n  ],\n  \"ImPlotPlot_EnabledAxesX\": [\n    {\n      \"args\": \"(ImPlotPlot* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotPlot*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImPlotPlot_EnabledAxesX\",\n      \"defaults\": {},\n      \"funcname\": \"EnabledAxesX\",\n      \"location\": \"implot_internal:1090\",\n      \"ov_cimguiname\": \"ImPlotPlot_EnabledAxesX\",\n      \"ret\": \"int\",\n      \"signature\": \"()\",\n      \"stname\": \"ImPlotPlot\"\n    }\n  ],\n  \"ImPlotPlot_EnabledAxesY\": [\n    {\n      \"args\": \"(ImPlotPlot* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotPlot*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImPlotPlot_EnabledAxesY\",\n      \"defaults\": {},\n      \"funcname\": \"EnabledAxesY\",\n      \"location\": \"implot_internal:1097\",\n      \"ov_cimguiname\": \"ImPlotPlot_EnabledAxesY\",\n      \"ret\": \"int\",\n      \"signature\": \"()\",\n      \"stname\": \"ImPlotPlot\"\n    }\n  ],\n  \"ImPlotPlot_GetAxisLabel\": [\n    {\n      \"args\": \"(ImPlotPlot* self,const ImPlotAxis axis)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotPlot*\"\n        },\n        {\n          \"name\": \"axis\",\n          \"type\": \"const ImPlotAxis\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImPlotAxis& axis)\",\n      \"call_args\": \"(axis)\",\n      \"cimguiname\": \"ImPlotPlot_GetAxisLabel\",\n      \"defaults\": {},\n      \"funcname\": \"GetAxisLabel\",\n      \"location\": \"implot_internal:1114\",\n      \"ov_cimguiname\": \"ImPlotPlot_GetAxisLabel\",\n      \"ret\": \"const char*\",\n      \"signature\": \"(const ImPlotAxis)const\",\n      \"stname\": \"ImPlotPlot\"\n    }\n  ],\n  \"ImPlotPlot_GetTitle\": [\n    {\n      \"args\": \"(ImPlotPlot* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotPlot*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImPlotPlot_GetTitle\",\n      \"defaults\": {},\n      \"funcname\": \"GetTitle\",\n      \"location\": \"implot_internal:1083\",\n      \"ov_cimguiname\": \"ImPlotPlot_GetTitle\",\n      \"ret\": \"const char*\",\n      \"signature\": \"()const\",\n      \"stname\": \"ImPlotPlot\"\n    }\n  ],\n  \"ImPlotPlot_HasTitle\": [\n    {\n      \"args\": \"(ImPlotPlot* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotPlot*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImPlotPlot_HasTitle\",\n      \"defaults\": {},\n      \"funcname\": \"HasTitle\",\n      \"location\": \"implot_internal:1082\",\n      \"ov_cimguiname\": \"ImPlotPlot_HasTitle\",\n      \"ret\": \"bool\",\n      \"signature\": \"()const\",\n      \"stname\": \"ImPlotPlot\"\n    }\n  ],\n  \"ImPlotPlot_ImPlotPlot\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImPlotPlot_ImPlotPlot\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImPlotPlot\",\n      \"location\": \"implot_internal:1042\",\n      \"ov_cimguiname\": \"ImPlotPlot_ImPlotPlot\",\n      \"signature\": \"()\",\n      \"stname\": \"ImPlotPlot\"\n    }\n  ],\n  \"ImPlotPlot_IsInputLocked\": [\n    {\n      \"args\": \"(ImPlotPlot* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotPlot*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImPlotPlot_IsInputLocked\",\n      \"defaults\": {},\n      \"funcname\": \"IsInputLocked\",\n      \"location\": \"implot_internal:1059\",\n      \"ov_cimguiname\": \"ImPlotPlot_IsInputLocked\",\n      \"ret\": \"bool\",\n      \"signature\": \"()const\",\n      \"stname\": \"ImPlotPlot\"\n    }\n  ],\n  \"ImPlotPlot_SetAxisLabel\": [\n    {\n      \"args\": \"(ImPlotPlot* self,ImPlotAxis* axis,const char* label)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotPlot*\"\n        },\n        {\n          \"name\": \"axis\",\n          \"reftoptr\": true,\n          \"type\": \"ImPlotAxis*\"\n        },\n        {\n          \"name\": \"label\",\n          \"type\": \"const char*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImPlotAxis& axis,const char* label)\",\n      \"call_args\": \"(*axis,label)\",\n      \"cimguiname\": \"ImPlotPlot_SetAxisLabel\",\n      \"defaults\": {},\n      \"funcname\": \"SetAxisLabel\",\n      \"location\": \"implot_internal:1104\",\n      \"ov_cimguiname\": \"ImPlotPlot_SetAxisLabel\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImPlotAxis*,const char*)\",\n      \"stname\": \"ImPlotPlot\"\n    }\n  ],\n  \"ImPlotPlot_SetTitle\": [\n    {\n      \"args\": \"(ImPlotPlot* self,const char* title)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotPlot*\"\n        },\n        {\n          \"name\": \"title\",\n          \"type\": \"const char*\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* title)\",\n      \"call_args\": \"(title)\",\n      \"cimguiname\": \"ImPlotPlot_SetTitle\",\n      \"defaults\": {},\n      \"funcname\": \"SetTitle\",\n      \"location\": \"implot_internal:1073\",\n      \"ov_cimguiname\": \"ImPlotPlot_SetTitle\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*)\",\n      \"stname\": \"ImPlotPlot\"\n    }\n  ],\n  \"ImPlotPlot_XAxis\": [\n    {\n      \"args\": \"(ImPlotPlot* self,int i)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotPlot*\"\n        },\n        {\n          \"name\": \"i\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(int i)\",\n      \"call_args\": \"(i)\",\n      \"cimguiname\": \"ImPlotPlot_XAxis\",\n      \"defaults\": {},\n      \"funcname\": \"XAxis\",\n      \"location\": \"implot_internal:1085\",\n      \"ov_cimguiname\": \"ImPlotPlot_XAxis_Nil\",\n      \"ret\": \"ImPlotAxis*\",\n      \"retref\": \"&\",\n      \"signature\": \"(int)\",\n      \"stname\": \"ImPlotPlot\"\n    },\n    {\n      \"args\": \"(ImPlotPlot* self,int i)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotPlot*\"\n        },\n        {\n          \"name\": \"i\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(int i)\",\n      \"call_args\": \"(i)\",\n      \"cimguiname\": \"ImPlotPlot_XAxis\",\n      \"defaults\": {},\n      \"funcname\": \"XAxis\",\n      \"location\": \"implot_internal:1086\",\n      \"ov_cimguiname\": \"ImPlotPlot_XAxis__const\",\n      \"ret\": \"const ImPlotAxis*\",\n      \"retref\": \"&\",\n      \"signature\": \"(int)const\",\n      \"stname\": \"ImPlotPlot\"\n    }\n  ],\n  \"ImPlotPlot_YAxis\": [\n    {\n      \"args\": \"(ImPlotPlot* self,int i)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotPlot*\"\n        },\n        {\n          \"name\": \"i\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(int i)\",\n      \"call_args\": \"(i)\",\n      \"cimguiname\": \"ImPlotPlot_YAxis\",\n      \"defaults\": {},\n      \"funcname\": \"YAxis\",\n      \"location\": \"implot_internal:1087\",\n      \"ov_cimguiname\": \"ImPlotPlot_YAxis_Nil\",\n      \"ret\": \"ImPlotAxis*\",\n      \"retref\": \"&\",\n      \"signature\": \"(int)\",\n      \"stname\": \"ImPlotPlot\"\n    },\n    {\n      \"args\": \"(ImPlotPlot* self,int i)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotPlot*\"\n        },\n        {\n          \"name\": \"i\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(int i)\",\n      \"call_args\": \"(i)\",\n      \"cimguiname\": \"ImPlotPlot_YAxis\",\n      \"defaults\": {},\n      \"funcname\": \"YAxis\",\n      \"location\": \"implot_internal:1088\",\n      \"ov_cimguiname\": \"ImPlotPlot_YAxis__const\",\n      \"ret\": \"const ImPlotAxis*\",\n      \"retref\": \"&\",\n      \"signature\": \"(int)const\",\n      \"stname\": \"ImPlotPlot\"\n    }\n  ],\n  \"ImPlotPlot_destroy\": [\n    {\n      \"args\": \"(ImPlotPlot* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotPlot*\"\n        }\n      ],\n      \"call_args\": \"(self)\",\n      \"cimguiname\": \"ImPlotPlot_destroy\",\n      \"defaults\": {},\n      \"destructor\": true,\n      \"ov_cimguiname\": \"ImPlotPlot_destroy\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImPlotPlot*)\",\n      \"stname\": \"ImPlotPlot\"\n    }\n  ],\n  \"ImPlotPointError_ImPlotPointError\": [\n    {\n      \"args\": \"(double x,double y,double neg,double pos)\",\n      \"argsT\": [\n        {\n          \"name\": \"x\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"y\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"neg\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"pos\",\n          \"type\": \"double\"\n        }\n      ],\n      \"argsoriginal\": \"(double x,double y,double neg,double pos)\",\n      \"call_args\": \"(x,y,neg,pos)\",\n      \"cimguiname\": \"ImPlotPointError_ImPlotPointError\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImPlotPointError\",\n      \"location\": \"implot_internal:427\",\n      \"ov_cimguiname\": \"ImPlotPointError_ImPlotPointError\",\n      \"signature\": \"(double,double,double,double)\",\n      \"stname\": \"ImPlotPointError\"\n    }\n  ],\n  \"ImPlotPointError_destroy\": [\n    {\n      \"args\": \"(ImPlotPointError* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotPointError*\"\n        }\n      ],\n      \"call_args\": \"(self)\",\n      \"cimguiname\": \"ImPlotPointError_destroy\",\n      \"defaults\": {},\n      \"destructor\": true,\n      \"ov_cimguiname\": \"ImPlotPointError_destroy\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImPlotPointError*)\",\n      \"stname\": \"ImPlotPointError\"\n    }\n  ],\n  \"ImPlotPoint_ImPlotPoint\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImPlotPoint_ImPlotPoint\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImPlotPoint\",\n      \"location\": \"implot:469\",\n      \"ov_cimguiname\": \"ImPlotPoint_ImPlotPoint_Nil\",\n      \"signature\": \"()\",\n      \"stname\": \"ImPlotPoint\"\n    },\n    {\n      \"args\": \"(double _x,double _y)\",\n      \"argsT\": [\n        {\n          \"name\": \"_x\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"_y\",\n          \"type\": \"double\"\n        }\n      ],\n      \"argsoriginal\": \"(double _x,double _y)\",\n      \"call_args\": \"(_x,_y)\",\n      \"cimguiname\": \"ImPlotPoint_ImPlotPoint\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImPlotPoint\",\n      \"location\": \"implot:470\",\n      \"ov_cimguiname\": \"ImPlotPoint_ImPlotPoint_double\",\n      \"signature\": \"(double,double)\",\n      \"stname\": \"ImPlotPoint\"\n    },\n    {\n      \"args\": \"(const ImVec2 p)\",\n      \"argsT\": [\n        {\n          \"name\": \"p\",\n          \"type\": \"const ImVec2\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImVec2& p)\",\n      \"call_args\": \"(p)\",\n      \"cimguiname\": \"ImPlotPoint_ImPlotPoint\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImPlotPoint\",\n      \"location\": \"implot:471\",\n      \"ov_cimguiname\": \"ImPlotPoint_ImPlotPoint_Vec2\",\n      \"signature\": \"(const ImVec2)\",\n      \"stname\": \"ImPlotPoint\"\n    }\n  ],\n  \"ImPlotPoint_destroy\": [\n    {\n      \"args\": \"(ImPlotPoint* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotPoint*\"\n        }\n      ],\n      \"call_args\": \"(self)\",\n      \"cimguiname\": \"ImPlotPoint_destroy\",\n      \"defaults\": {},\n      \"destructor\": true,\n      \"ov_cimguiname\": \"ImPlotPoint_destroy\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImPlotPoint*)\",\n      \"stname\": \"ImPlotPoint\"\n    }\n  ],\n  \"ImPlotRange_Clamp\": [\n    {\n      \"args\": \"(ImPlotRange* self,double value)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotRange*\"\n        },\n        {\n          \"name\": \"value\",\n          \"type\": \"double\"\n        }\n      ],\n      \"argsoriginal\": \"(double value)\",\n      \"call_args\": \"(value)\",\n      \"cimguiname\": \"ImPlotRange_Clamp\",\n      \"defaults\": {},\n      \"funcname\": \"Clamp\",\n      \"location\": \"implot:487\",\n      \"ov_cimguiname\": \"ImPlotRange_Clamp\",\n      \"ret\": \"double\",\n      \"signature\": \"(double)const\",\n      \"stname\": \"ImPlotRange\"\n    }\n  ],\n  \"ImPlotRange_Contains\": [\n    {\n      \"args\": \"(ImPlotRange* self,double value)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotRange*\"\n        },\n        {\n          \"name\": \"value\",\n          \"type\": \"double\"\n        }\n      ],\n      \"argsoriginal\": \"(double value)\",\n      \"call_args\": \"(value)\",\n      \"cimguiname\": \"ImPlotRange_Contains\",\n      \"defaults\": {},\n      \"funcname\": \"Contains\",\n      \"location\": \"implot:485\",\n      \"ov_cimguiname\": \"ImPlotRange_Contains\",\n      \"ret\": \"bool\",\n      \"signature\": \"(double)const\",\n      \"stname\": \"ImPlotRange\"\n    }\n  ],\n  \"ImPlotRange_ImPlotRange\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImPlotRange_ImPlotRange\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImPlotRange\",\n      \"location\": \"implot:483\",\n      \"ov_cimguiname\": \"ImPlotRange_ImPlotRange_Nil\",\n      \"signature\": \"()\",\n      \"stname\": \"ImPlotRange\"\n    },\n    {\n      \"args\": \"(double _min,double _max)\",\n      \"argsT\": [\n        {\n          \"name\": \"_min\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"_max\",\n          \"type\": \"double\"\n        }\n      ],\n      \"argsoriginal\": \"(double _min,double _max)\",\n      \"call_args\": \"(_min,_max)\",\n      \"cimguiname\": \"ImPlotRange_ImPlotRange\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImPlotRange\",\n      \"location\": \"implot:484\",\n      \"ov_cimguiname\": \"ImPlotRange_ImPlotRange_double\",\n      \"signature\": \"(double,double)\",\n      \"stname\": \"ImPlotRange\"\n    }\n  ],\n  \"ImPlotRange_Size\": [\n    {\n      \"args\": \"(ImPlotRange* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotRange*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImPlotRange_Size\",\n      \"defaults\": {},\n      \"funcname\": \"Size\",\n      \"location\": \"implot:486\",\n      \"ov_cimguiname\": \"ImPlotRange_Size\",\n      \"ret\": \"double\",\n      \"signature\": \"()const\",\n      \"stname\": \"ImPlotRange\"\n    }\n  ],\n  \"ImPlotRange_destroy\": [\n    {\n      \"args\": \"(ImPlotRange* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotRange*\"\n        }\n      ],\n      \"call_args\": \"(self)\",\n      \"cimguiname\": \"ImPlotRange_destroy\",\n      \"defaults\": {},\n      \"destructor\": true,\n      \"ov_cimguiname\": \"ImPlotRange_destroy\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImPlotRange*)\",\n      \"stname\": \"ImPlotRange\"\n    }\n  ],\n  \"ImPlotRect_Clamp\": [\n    {\n      \"args\": \"(ImPlotPoint *pOut,ImPlotRect* self,const ImPlotPoint p)\",\n      \"argsT\": [\n        {\n          \"name\": \"pOut\",\n          \"type\": \"ImPlotPoint*\"\n        },\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotRect*\"\n        },\n        {\n          \"name\": \"p\",\n          \"type\": \"const ImPlotPoint\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImPlotPoint& p)\",\n      \"call_args\": \"(p)\",\n      \"cimguiname\": \"ImPlotRect_Clamp\",\n      \"defaults\": {},\n      \"funcname\": \"Clamp\",\n      \"location\": \"implot:498\",\n      \"nonUDT\": 1,\n      \"ov_cimguiname\": \"ImPlotRect_Clamp_PlotPoInt\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImPlotPoint)\",\n      \"stname\": \"ImPlotRect\"\n    },\n    {\n      \"args\": \"(ImPlotPoint *pOut,ImPlotRect* self,double x,double y)\",\n      \"argsT\": [\n        {\n          \"name\": \"pOut\",\n          \"type\": \"ImPlotPoint*\"\n        },\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotRect*\"\n        },\n        {\n          \"name\": \"x\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"y\",\n          \"type\": \"double\"\n        }\n      ],\n      \"argsoriginal\": \"(double x,double y)\",\n      \"call_args\": \"(x,y)\",\n      \"cimguiname\": \"ImPlotRect_Clamp\",\n      \"defaults\": {},\n      \"funcname\": \"Clamp\",\n      \"location\": \"implot:499\",\n      \"nonUDT\": 1,\n      \"ov_cimguiname\": \"ImPlotRect_Clamp_double\",\n      \"ret\": \"void\",\n      \"signature\": \"(double,double)\",\n      \"stname\": \"ImPlotRect\"\n    }\n  ],\n  \"ImPlotRect_Contains\": [\n    {\n      \"args\": \"(ImPlotRect* self,const ImPlotPoint p)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotRect*\"\n        },\n        {\n          \"name\": \"p\",\n          \"type\": \"const ImPlotPoint\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImPlotPoint& p)\",\n      \"call_args\": \"(p)\",\n      \"cimguiname\": \"ImPlotRect_Contains\",\n      \"defaults\": {},\n      \"funcname\": \"Contains\",\n      \"location\": \"implot:495\",\n      \"ov_cimguiname\": \"ImPlotRect_Contains_PlotPoInt\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const ImPlotPoint)const\",\n      \"stname\": \"ImPlotRect\"\n    },\n    {\n      \"args\": \"(ImPlotRect* self,double x,double y)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotRect*\"\n        },\n        {\n          \"name\": \"x\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"y\",\n          \"type\": \"double\"\n        }\n      ],\n      \"argsoriginal\": \"(double x,double y)\",\n      \"call_args\": \"(x,y)\",\n      \"cimguiname\": \"ImPlotRect_Contains\",\n      \"defaults\": {},\n      \"funcname\": \"Contains\",\n      \"location\": \"implot:496\",\n      \"ov_cimguiname\": \"ImPlotRect_Contains_double\",\n      \"ret\": \"bool\",\n      \"signature\": \"(double,double)const\",\n      \"stname\": \"ImPlotRect\"\n    }\n  ],\n  \"ImPlotRect_ImPlotRect\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImPlotRect_ImPlotRect\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImPlotRect\",\n      \"location\": \"implot:493\",\n      \"ov_cimguiname\": \"ImPlotRect_ImPlotRect_Nil\",\n      \"signature\": \"()\",\n      \"stname\": \"ImPlotRect\"\n    },\n    {\n      \"args\": \"(double x_min,double x_max,double y_min,double y_max)\",\n      \"argsT\": [\n        {\n          \"name\": \"x_min\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"x_max\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"y_min\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"y_max\",\n          \"type\": \"double\"\n        }\n      ],\n      \"argsoriginal\": \"(double x_min,double x_max,double y_min,double y_max)\",\n      \"call_args\": \"(x_min,x_max,y_min,y_max)\",\n      \"cimguiname\": \"ImPlotRect_ImPlotRect\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImPlotRect\",\n      \"location\": \"implot:494\",\n      \"ov_cimguiname\": \"ImPlotRect_ImPlotRect_double\",\n      \"signature\": \"(double,double,double,double)\",\n      \"stname\": \"ImPlotRect\"\n    }\n  ],\n  \"ImPlotRect_Max\": [\n    {\n      \"args\": \"(ImPlotPoint *pOut,ImPlotRect* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"pOut\",\n          \"type\": \"ImPlotPoint*\"\n        },\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotRect*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImPlotRect_Max\",\n      \"defaults\": {},\n      \"funcname\": \"Max\",\n      \"location\": \"implot:501\",\n      \"nonUDT\": 1,\n      \"ov_cimguiname\": \"ImPlotRect_Max\",\n      \"ret\": \"void\",\n      \"signature\": \"()const\",\n      \"stname\": \"ImPlotRect\"\n    }\n  ],\n  \"ImPlotRect_Min\": [\n    {\n      \"args\": \"(ImPlotPoint *pOut,ImPlotRect* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"pOut\",\n          \"type\": \"ImPlotPoint*\"\n        },\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotRect*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImPlotRect_Min\",\n      \"defaults\": {},\n      \"funcname\": \"Min\",\n      \"location\": \"implot:500\",\n      \"nonUDT\": 1,\n      \"ov_cimguiname\": \"ImPlotRect_Min\",\n      \"ret\": \"void\",\n      \"signature\": \"()const\",\n      \"stname\": \"ImPlotRect\"\n    }\n  ],\n  \"ImPlotRect_Size\": [\n    {\n      \"args\": \"(ImPlotPoint *pOut,ImPlotRect* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"pOut\",\n          \"type\": \"ImPlotPoint*\"\n        },\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotRect*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImPlotRect_Size\",\n      \"defaults\": {},\n      \"funcname\": \"Size\",\n      \"location\": \"implot:497\",\n      \"nonUDT\": 1,\n      \"ov_cimguiname\": \"ImPlotRect_Size\",\n      \"ret\": \"void\",\n      \"signature\": \"()const\",\n      \"stname\": \"ImPlotRect\"\n    }\n  ],\n  \"ImPlotRect_destroy\": [\n    {\n      \"args\": \"(ImPlotRect* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotRect*\"\n        }\n      ],\n      \"call_args\": \"(self)\",\n      \"cimguiname\": \"ImPlotRect_destroy\",\n      \"defaults\": {},\n      \"destructor\": true,\n      \"ov_cimguiname\": \"ImPlotRect_destroy\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImPlotRect*)\",\n      \"stname\": \"ImPlotRect\"\n    }\n  ],\n  \"ImPlotStyle_ImPlotStyle\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImPlotStyle_ImPlotStyle\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImPlotStyle\",\n      \"location\": \"implot:543\",\n      \"ov_cimguiname\": \"ImPlotStyle_ImPlotStyle\",\n      \"signature\": \"()\",\n      \"stname\": \"ImPlotStyle\"\n    }\n  ],\n  \"ImPlotStyle_destroy\": [\n    {\n      \"args\": \"(ImPlotStyle* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotStyle*\"\n        }\n      ],\n      \"call_args\": \"(self)\",\n      \"cimguiname\": \"ImPlotStyle_destroy\",\n      \"defaults\": {},\n      \"destructor\": true,\n      \"ov_cimguiname\": \"ImPlotStyle_destroy\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImPlotStyle*)\",\n      \"stname\": \"ImPlotStyle\"\n    }\n  ],\n  \"ImPlotSubplot_ImPlotSubplot\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImPlotSubplot_ImPlotSubplot\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImPlotSubplot\",\n      \"location\": \"implot_internal:1139\",\n      \"ov_cimguiname\": \"ImPlotSubplot_ImPlotSubplot\",\n      \"signature\": \"()\",\n      \"stname\": \"ImPlotSubplot\"\n    }\n  ],\n  \"ImPlotSubplot_destroy\": [\n    {\n      \"args\": \"(ImPlotSubplot* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotSubplot*\"\n        }\n      ],\n      \"call_args\": \"(self)\",\n      \"cimguiname\": \"ImPlotSubplot_destroy\",\n      \"defaults\": {},\n      \"destructor\": true,\n      \"ov_cimguiname\": \"ImPlotSubplot_destroy\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImPlotSubplot*)\",\n      \"stname\": \"ImPlotSubplot\"\n    }\n  ],\n  \"ImPlotTagCollection_Append\": [\n    {\n      \"args\": \"(ImPlotTagCollection* self,ImAxis axis,double value,ImU32 bg,ImU32 fg,const char* fmt,...)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotTagCollection*\"\n        },\n        {\n          \"name\": \"axis\",\n          \"type\": \"ImAxis\"\n        },\n        {\n          \"name\": \"value\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"bg\",\n          \"type\": \"ImU32\"\n        },\n        {\n          \"name\": \"fg\",\n          \"type\": \"ImU32\"\n        },\n        {\n          \"name\": \"fmt\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"...\",\n          \"type\": \"...\"\n        }\n      ],\n      \"argsoriginal\": \"(ImAxis axis,double value,ImU32 bg,ImU32 fg,const char* fmt,...)\",\n      \"call_args\": \"(axis,value,bg,fg,fmt,...)\",\n      \"cimguiname\": \"ImPlotTagCollection_Append\",\n      \"defaults\": {},\n      \"funcname\": \"Append\",\n      \"isvararg\": \"...)\",\n      \"location\": \"implot_internal:517\",\n      \"ov_cimguiname\": \"ImPlotTagCollection_Append\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImAxis,double,ImU32,ImU32,const char*,...)\",\n      \"stname\": \"ImPlotTagCollection\"\n    }\n  ],\n  \"ImPlotTagCollection_AppendV\": [\n    {\n      \"args\": \"(ImPlotTagCollection* self,ImAxis axis,double value,ImU32 bg,ImU32 fg,const char* fmt,va_list args)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotTagCollection*\"\n        },\n        {\n          \"name\": \"axis\",\n          \"type\": \"ImAxis\"\n        },\n        {\n          \"name\": \"value\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"bg\",\n          \"type\": \"ImU32\"\n        },\n        {\n          \"name\": \"fg\",\n          \"type\": \"ImU32\"\n        },\n        {\n          \"name\": \"fmt\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"args\",\n          \"type\": \"va_list\"\n        }\n      ],\n      \"argsoriginal\": \"(ImAxis axis,double value,ImU32 bg,ImU32 fg,const char* fmt,va_list args)\",\n      \"call_args\": \"(axis,value,bg,fg,fmt,args)\",\n      \"cimguiname\": \"ImPlotTagCollection_AppendV\",\n      \"defaults\": {},\n      \"funcname\": \"AppendV\",\n      \"location\": \"implot_internal:503\",\n      \"ov_cimguiname\": \"ImPlotTagCollection_AppendV\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImAxis,double,ImU32,ImU32,const char*,va_list)\",\n      \"stname\": \"ImPlotTagCollection\"\n    }\n  ],\n  \"ImPlotTagCollection_GetText\": [\n    {\n      \"args\": \"(ImPlotTagCollection* self,int idx)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotTagCollection*\"\n        },\n        {\n          \"name\": \"idx\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(int idx)\",\n      \"call_args\": \"(idx)\",\n      \"cimguiname\": \"ImPlotTagCollection_GetText\",\n      \"defaults\": {},\n      \"funcname\": \"GetText\",\n      \"location\": \"implot_internal:524\",\n      \"ov_cimguiname\": \"ImPlotTagCollection_GetText\",\n      \"ret\": \"const char*\",\n      \"signature\": \"(int)\",\n      \"stname\": \"ImPlotTagCollection\"\n    }\n  ],\n  \"ImPlotTagCollection_ImPlotTagCollection\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImPlotTagCollection_ImPlotTagCollection\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImPlotTagCollection\",\n      \"location\": \"implot_internal:501\",\n      \"ov_cimguiname\": \"ImPlotTagCollection_ImPlotTagCollection\",\n      \"signature\": \"()\",\n      \"stname\": \"ImPlotTagCollection\"\n    }\n  ],\n  \"ImPlotTagCollection_Reset\": [\n    {\n      \"args\": \"(ImPlotTagCollection* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotTagCollection*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImPlotTagCollection_Reset\",\n      \"defaults\": {},\n      \"funcname\": \"Reset\",\n      \"location\": \"implot_internal:528\",\n      \"ov_cimguiname\": \"ImPlotTagCollection_Reset\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"ImPlotTagCollection\"\n    }\n  ],\n  \"ImPlotTagCollection_destroy\": [\n    {\n      \"args\": \"(ImPlotTagCollection* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotTagCollection*\"\n        }\n      ],\n      \"call_args\": \"(self)\",\n      \"cimguiname\": \"ImPlotTagCollection_destroy\",\n      \"defaults\": {},\n      \"destructor\": true,\n      \"ov_cimguiname\": \"ImPlotTagCollection_destroy\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImPlotTagCollection*)\",\n      \"stname\": \"ImPlotTagCollection\"\n    }\n  ],\n  \"ImPlotTick_ImPlotTick\": [\n    {\n      \"args\": \"(double value,bool major,int level,bool show_label)\",\n      \"argsT\": [\n        {\n          \"name\": \"value\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"major\",\n          \"type\": \"bool\"\n        },\n        {\n          \"name\": \"level\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"show_label\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"argsoriginal\": \"(double value,bool major,int level,bool show_label)\",\n      \"call_args\": \"(value,major,level,show_label)\",\n      \"cimguiname\": \"ImPlotTick_ImPlotTick\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImPlotTick\",\n      \"location\": \"implot_internal:547\",\n      \"ov_cimguiname\": \"ImPlotTick_ImPlotTick\",\n      \"signature\": \"(double,bool,int,bool)\",\n      \"stname\": \"ImPlotTick\"\n    }\n  ],\n  \"ImPlotTick_destroy\": [\n    {\n      \"args\": \"(ImPlotTick* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotTick*\"\n        }\n      ],\n      \"call_args\": \"(self)\",\n      \"cimguiname\": \"ImPlotTick_destroy\",\n      \"defaults\": {},\n      \"destructor\": true,\n      \"ov_cimguiname\": \"ImPlotTick_destroy\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImPlotTick*)\",\n      \"stname\": \"ImPlotTick\"\n    }\n  ],\n  \"ImPlotTicker_AddTick\": [\n    {\n      \"args\": \"(ImPlotTicker* self,double value,bool major,int level,bool show_label,const char* label)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotTicker*\"\n        },\n        {\n          \"name\": \"value\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"major\",\n          \"type\": \"bool\"\n        },\n        {\n          \"name\": \"level\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"show_label\",\n          \"type\": \"bool\"\n        },\n        {\n          \"name\": \"label\",\n          \"type\": \"const char*\"\n        }\n      ],\n      \"argsoriginal\": \"(double value,bool major,int level,bool show_label,const char* label)\",\n      \"call_args\": \"(value,major,level,show_label,label)\",\n      \"cimguiname\": \"ImPlotTicker_AddTick\",\n      \"defaults\": {},\n      \"funcname\": \"AddTick\",\n      \"location\": \"implot_internal:569\",\n      \"ov_cimguiname\": \"ImPlotTicker_AddTick_doubleStr\",\n      \"ret\": \"ImPlotTick*\",\n      \"retref\": \"&\",\n      \"signature\": \"(double,bool,int,bool,const char*)\",\n      \"stname\": \"ImPlotTicker\"\n    },\n    {\n      \"args\": \"(ImPlotTicker* self,double value,bool major,int level,bool show_label,ImPlotFormatter formatter,void* data)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotTicker*\"\n        },\n        {\n          \"name\": \"value\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"major\",\n          \"type\": \"bool\"\n        },\n        {\n          \"name\": \"level\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"show_label\",\n          \"type\": \"bool\"\n        },\n        {\n          \"name\": \"formatter\",\n          \"type\": \"ImPlotFormatter\"\n        },\n        {\n          \"name\": \"data\",\n          \"type\": \"void*\"\n        }\n      ],\n      \"argsoriginal\": \"(double value,bool major,int level,bool show_label,ImPlotFormatter formatter,void* data)\",\n      \"call_args\": \"(value,major,level,show_label,formatter,data)\",\n      \"cimguiname\": \"ImPlotTicker_AddTick\",\n      \"defaults\": {},\n      \"funcname\": \"AddTick\",\n      \"location\": \"implot_internal:579\",\n      \"ov_cimguiname\": \"ImPlotTicker_AddTick_doublePlotFormatter\",\n      \"ret\": \"ImPlotTick*\",\n      \"retref\": \"&\",\n      \"signature\": \"(double,bool,int,bool,ImPlotFormatter,void*)\",\n      \"stname\": \"ImPlotTicker\"\n    },\n    {\n      \"args\": \"(ImPlotTicker* self,ImPlotTick tick)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotTicker*\"\n        },\n        {\n          \"name\": \"tick\",\n          \"type\": \"ImPlotTick\"\n        }\n      ],\n      \"argsoriginal\": \"(ImPlotTick tick)\",\n      \"call_args\": \"(tick)\",\n      \"cimguiname\": \"ImPlotTicker_AddTick\",\n      \"defaults\": {},\n      \"funcname\": \"AddTick\",\n      \"location\": \"implot_internal:591\",\n      \"ov_cimguiname\": \"ImPlotTicker_AddTick_PlotTick\",\n      \"ret\": \"ImPlotTick*\",\n      \"retref\": \"&\",\n      \"signature\": \"(ImPlotTick)\",\n      \"stname\": \"ImPlotTicker\"\n    }\n  ],\n  \"ImPlotTicker_GetText\": [\n    {\n      \"args\": \"(ImPlotTicker* self,int idx)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotTicker*\"\n        },\n        {\n          \"name\": \"idx\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(int idx)\",\n      \"call_args\": \"(idx)\",\n      \"cimguiname\": \"ImPlotTicker_GetText\",\n      \"defaults\": {},\n      \"funcname\": \"GetText\",\n      \"location\": \"implot_internal:601\",\n      \"ov_cimguiname\": \"ImPlotTicker_GetText_Int\",\n      \"ret\": \"const char*\",\n      \"signature\": \"(int)const\",\n      \"stname\": \"ImPlotTicker\"\n    },\n    {\n      \"args\": \"(ImPlotTicker* self,const ImPlotTick tick)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotTicker*\"\n        },\n        {\n          \"name\": \"tick\",\n          \"type\": \"const ImPlotTick\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImPlotTick& tick)\",\n      \"call_args\": \"(tick)\",\n      \"cimguiname\": \"ImPlotTicker_GetText\",\n      \"defaults\": {},\n      \"funcname\": \"GetText\",\n      \"location\": \"implot_internal:605\",\n      \"ov_cimguiname\": \"ImPlotTicker_GetText_PlotTick\",\n      \"ret\": \"const char*\",\n      \"signature\": \"(const ImPlotTick)\",\n      \"stname\": \"ImPlotTicker\"\n    }\n  ],\n  \"ImPlotTicker_ImPlotTicker\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImPlotTicker_ImPlotTicker\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImPlotTicker\",\n      \"location\": \"implot_internal:565\",\n      \"ov_cimguiname\": \"ImPlotTicker_ImPlotTicker\",\n      \"signature\": \"()\",\n      \"stname\": \"ImPlotTicker\"\n    }\n  ],\n  \"ImPlotTicker_OverrideSizeLate\": [\n    {\n      \"args\": \"(ImPlotTicker* self,const ImVec2 size)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotTicker*\"\n        },\n        {\n          \"name\": \"size\",\n          \"type\": \"const ImVec2\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImVec2& size)\",\n      \"call_args\": \"(size)\",\n      \"cimguiname\": \"ImPlotTicker_OverrideSizeLate\",\n      \"defaults\": {},\n      \"funcname\": \"OverrideSizeLate\",\n      \"location\": \"implot_internal:609\",\n      \"ov_cimguiname\": \"ImPlotTicker_OverrideSizeLate\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImVec2)\",\n      \"stname\": \"ImPlotTicker\"\n    }\n  ],\n  \"ImPlotTicker_Reset\": [\n    {\n      \"args\": \"(ImPlotTicker* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotTicker*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImPlotTicker_Reset\",\n      \"defaults\": {},\n      \"funcname\": \"Reset\",\n      \"location\": \"implot_internal:614\",\n      \"ov_cimguiname\": \"ImPlotTicker_Reset\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"ImPlotTicker\"\n    }\n  ],\n  \"ImPlotTicker_TickCount\": [\n    {\n      \"args\": \"(ImPlotTicker* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotTicker*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImPlotTicker_TickCount\",\n      \"defaults\": {},\n      \"funcname\": \"TickCount\",\n      \"location\": \"implot_internal:622\",\n      \"ov_cimguiname\": \"ImPlotTicker_TickCount\",\n      \"ret\": \"int\",\n      \"signature\": \"()const\",\n      \"stname\": \"ImPlotTicker\"\n    }\n  ],\n  \"ImPlotTicker_destroy\": [\n    {\n      \"args\": \"(ImPlotTicker* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotTicker*\"\n        }\n      ],\n      \"call_args\": \"(self)\",\n      \"cimguiname\": \"ImPlotTicker_destroy\",\n      \"defaults\": {},\n      \"destructor\": true,\n      \"ov_cimguiname\": \"ImPlotTicker_destroy\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImPlotTicker*)\",\n      \"stname\": \"ImPlotTicker\"\n    }\n  ],\n  \"ImPlotTime_FromDouble\": [\n    {\n      \"args\": \"(ImPlotTime *pOut,double t)\",\n      \"argsT\": [\n        {\n          \"name\": \"pOut\",\n          \"type\": \"ImPlotTime*\"\n        },\n        {\n          \"name\": \"t\",\n          \"type\": \"double\"\n        }\n      ],\n      \"argsoriginal\": \"(double t)\",\n      \"call_args\": \"(t)\",\n      \"cimguiname\": \"ImPlotTime_FromDouble\",\n      \"defaults\": {},\n      \"funcname\": \"FromDouble\",\n      \"is_static_function\": true,\n      \"location\": \"implot_internal:304\",\n      \"nonUDT\": 1,\n      \"ov_cimguiname\": \"ImPlotTime_FromDouble\",\n      \"ret\": \"void\",\n      \"signature\": \"(double)\",\n      \"stname\": \"ImPlotTime\"\n    }\n  ],\n  \"ImPlotTime_ImPlotTime\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImPlotTime_ImPlotTime\",\n      \"constructor\": true,\n      \"defaults\": {},\n      \"funcname\": \"ImPlotTime\",\n      \"location\": \"implot_internal:300\",\n      \"ov_cimguiname\": \"ImPlotTime_ImPlotTime_Nil\",\n      \"signature\": \"()\",\n      \"stname\": \"ImPlotTime\"\n    },\n    {\n      \"args\": \"(time_t s,int us)\",\n      \"argsT\": [\n        {\n          \"name\": \"s\",\n          \"type\": \"time_t\"\n        },\n        {\n          \"name\": \"us\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(time_t s,int us=0)\",\n      \"call_args\": \"(s,us)\",\n      \"cimguiname\": \"ImPlotTime_ImPlotTime\",\n      \"constructor\": true,\n      \"defaults\": {\n        \"us\": \"0\"\n      },\n      \"funcname\": \"ImPlotTime\",\n      \"location\": \"implot_internal:301\",\n      \"ov_cimguiname\": \"ImPlotTime_ImPlotTime_time_t\",\n      \"signature\": \"(time_t,int)\",\n      \"stname\": \"ImPlotTime\"\n    }\n  ],\n  \"ImPlotTime_RollOver\": [\n    {\n      \"args\": \"(ImPlotTime* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotTime*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImPlotTime_RollOver\",\n      \"defaults\": {},\n      \"funcname\": \"RollOver\",\n      \"location\": \"implot_internal:302\",\n      \"ov_cimguiname\": \"ImPlotTime_RollOver\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"ImPlotTime\"\n    }\n  ],\n  \"ImPlotTime_ToDouble\": [\n    {\n      \"args\": \"(ImPlotTime* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotTime*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImPlotTime_ToDouble\",\n      \"defaults\": {},\n      \"funcname\": \"ToDouble\",\n      \"location\": \"implot_internal:303\",\n      \"ov_cimguiname\": \"ImPlotTime_ToDouble\",\n      \"ret\": \"double\",\n      \"signature\": \"()const\",\n      \"stname\": \"ImPlotTime\"\n    }\n  ],\n  \"ImPlotTime_destroy\": [\n    {\n      \"args\": \"(ImPlotTime* self)\",\n      \"argsT\": [\n        {\n          \"name\": \"self\",\n          \"type\": \"ImPlotTime*\"\n        }\n      ],\n      \"call_args\": \"(self)\",\n      \"cimguiname\": \"ImPlotTime_destroy\",\n      \"defaults\": {},\n      \"destructor\": true,\n      \"ov_cimguiname\": \"ImPlotTime_destroy\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImPlotTime*)\",\n      \"stname\": \"ImPlotTime\"\n    }\n  ],\n  \"ImPlot_AddColormap\": [\n    {\n      \"args\": \"(const char* name,const ImVec4* cols,int size,bool qual)\",\n      \"argsT\": [\n        {\n          \"name\": \"name\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"cols\",\n          \"type\": \"const ImVec4*\"\n        },\n        {\n          \"name\": \"size\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"qual\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* name,const ImVec4* cols,int size,bool qual=true)\",\n      \"call_args\": \"(name,cols,size,qual)\",\n      \"cimguiname\": \"ImPlot_AddColormap\",\n      \"defaults\": {\n        \"qual\": \"true\"\n      },\n      \"funcname\": \"AddColormap\",\n      \"location\": \"implot:1142\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_AddColormap_Vec4Ptr\",\n      \"ret\": \"ImPlotColormap\",\n      \"signature\": \"(const char*,const ImVec4*,int,bool)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* name,const ImU32* cols,int size,bool qual)\",\n      \"argsT\": [\n        {\n          \"name\": \"name\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"cols\",\n          \"type\": \"const ImU32*\"\n        },\n        {\n          \"name\": \"size\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"qual\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* name,const ImU32* cols,int size,bool qual=true)\",\n      \"call_args\": \"(name,cols,size,qual)\",\n      \"cimguiname\": \"ImPlot_AddColormap\",\n      \"defaults\": {\n        \"qual\": \"true\"\n      },\n      \"funcname\": \"AddColormap\",\n      \"location\": \"implot:1143\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_AddColormap_U32Ptr\",\n      \"ret\": \"ImPlotColormap\",\n      \"signature\": \"(const char*,const ImU32*,int,bool)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_AddTextCentered\": [\n    {\n      \"args\": \"(ImDrawList* DrawList,ImVec2 top_center,ImU32 col,const char* text_begin,const char* text_end)\",\n      \"argsT\": [\n        {\n          \"name\": \"DrawList\",\n          \"type\": \"ImDrawList*\"\n        },\n        {\n          \"name\": \"top_center\",\n          \"type\": \"ImVec2\"\n        },\n        {\n          \"name\": \"col\",\n          \"type\": \"ImU32\"\n        },\n        {\n          \"name\": \"text_begin\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"text_end\",\n          \"type\": \"const char*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImDrawList* DrawList,ImVec2 top_center,ImU32 col,const char* text_begin,const char* text_end=((void*)0))\",\n      \"call_args\": \"(DrawList,top_center,col,text_begin,text_end)\",\n      \"cimguiname\": \"ImPlot_AddTextCentered\",\n      \"defaults\": {\n        \"text_end\": \"NULL\"\n      },\n      \"funcname\": \"AddTextCentered\",\n      \"location\": \"implot_internal:1457\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_AddTextCentered\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImDrawList*,ImVec2,ImU32,const char*,const char*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_AddTextVertical\": [\n    {\n      \"args\": \"(ImDrawList* DrawList,ImVec2 pos,ImU32 col,const char* text_begin,const char* text_end)\",\n      \"argsT\": [\n        {\n          \"name\": \"DrawList\",\n          \"type\": \"ImDrawList*\"\n        },\n        {\n          \"name\": \"pos\",\n          \"type\": \"ImVec2\"\n        },\n        {\n          \"name\": \"col\",\n          \"type\": \"ImU32\"\n        },\n        {\n          \"name\": \"text_begin\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"text_end\",\n          \"type\": \"const char*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImDrawList* DrawList,ImVec2 pos,ImU32 col,const char* text_begin,const char* text_end=((void*)0))\",\n      \"call_args\": \"(DrawList,pos,col,text_begin,text_end)\",\n      \"cimguiname\": \"ImPlot_AddTextVertical\",\n      \"defaults\": {\n        \"text_end\": \"NULL\"\n      },\n      \"funcname\": \"AddTextVertical\",\n      \"location\": \"implot_internal:1455\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_AddTextVertical\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImDrawList*,ImVec2,ImU32,const char*,const char*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_AddTime\": [\n    {\n      \"args\": \"(ImPlotTime *pOut,const ImPlotTime t,ImPlotTimeUnit unit,int count)\",\n      \"argsT\": [\n        {\n          \"name\": \"pOut\",\n          \"type\": \"ImPlotTime*\"\n        },\n        {\n          \"name\": \"t\",\n          \"type\": \"const ImPlotTime\"\n        },\n        {\n          \"name\": \"unit\",\n          \"type\": \"ImPlotTimeUnit\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImPlotTime& t,ImPlotTimeUnit unit,int count)\",\n      \"call_args\": \"(t,unit,count)\",\n      \"cimguiname\": \"ImPlot_AddTime\",\n      \"defaults\": {},\n      \"funcname\": \"AddTime\",\n      \"location\": \"implot_internal:1575\",\n      \"namespace\": \"ImPlot\",\n      \"nonUDT\": 1,\n      \"ov_cimguiname\": \"ImPlot_AddTime\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImPlotTime,ImPlotTimeUnit,int)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_AllAxesInputLocked\": [\n    {\n      \"args\": \"(ImPlotAxis* axes,int count)\",\n      \"argsT\": [\n        {\n          \"name\": \"axes\",\n          \"type\": \"ImPlotAxis*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(ImPlotAxis* axes,int count)\",\n      \"call_args\": \"(axes,count)\",\n      \"cimguiname\": \"ImPlot_AllAxesInputLocked\",\n      \"defaults\": {},\n      \"funcname\": \"AllAxesInputLocked\",\n      \"location\": \"implot_internal:1355\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_AllAxesInputLocked\",\n      \"ret\": \"bool\",\n      \"signature\": \"(ImPlotAxis*,int)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_Annotation\": [\n    {\n      \"args\": \"(double x,double y,const ImVec4 col,const ImVec2 pix_offset,bool clamp,bool round)\",\n      \"argsT\": [\n        {\n          \"name\": \"x\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"y\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"col\",\n          \"type\": \"const ImVec4\"\n        },\n        {\n          \"name\": \"pix_offset\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"clamp\",\n          \"type\": \"bool\"\n        },\n        {\n          \"name\": \"round\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"argsoriginal\": \"(double x,double y,const ImVec4& col,const ImVec2& pix_offset,bool clamp,bool round=false)\",\n      \"call_args\": \"(x,y,col,pix_offset,clamp,round)\",\n      \"cimguiname\": \"ImPlot_Annotation\",\n      \"defaults\": {\n        \"round\": \"false\"\n      },\n      \"funcname\": \"Annotation\",\n      \"location\": \"implot:932\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_Annotation_Bool\",\n      \"ret\": \"void\",\n      \"signature\": \"(double,double,const ImVec4,const ImVec2,bool,bool)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(double x,double y,const ImVec4 col,const ImVec2 pix_offset,bool clamp,const char* fmt,...)\",\n      \"argsT\": [\n        {\n          \"name\": \"x\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"y\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"col\",\n          \"type\": \"const ImVec4\"\n        },\n        {\n          \"name\": \"pix_offset\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"clamp\",\n          \"type\": \"bool\"\n        },\n        {\n          \"name\": \"fmt\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"...\",\n          \"type\": \"...\"\n        }\n      ],\n      \"argsoriginal\": \"(double x,double y,const ImVec4& col,const ImVec2& pix_offset,bool clamp,const char* fmt,...)\",\n      \"call_args\": \"(x,y,col,pix_offset,clamp,fmt,...)\",\n      \"cimguiname\": \"ImPlot_Annotation\",\n      \"defaults\": {},\n      \"funcname\": \"Annotation\",\n      \"isvararg\": \"...)\",\n      \"location\": \"implot:933\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_Annotation_Str\",\n      \"ret\": \"void\",\n      \"signature\": \"(double,double,const ImVec4,const ImVec2,bool,const char*,...)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_AnnotationV\": [\n    {\n      \"args\": \"(double x,double y,const ImVec4 col,const ImVec2 pix_offset,bool clamp,const char* fmt,va_list args)\",\n      \"argsT\": [\n        {\n          \"name\": \"x\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"y\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"col\",\n          \"type\": \"const ImVec4\"\n        },\n        {\n          \"name\": \"pix_offset\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"clamp\",\n          \"type\": \"bool\"\n        },\n        {\n          \"name\": \"fmt\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"args\",\n          \"type\": \"va_list\"\n        }\n      ],\n      \"argsoriginal\": \"(double x,double y,const ImVec4& col,const ImVec2& pix_offset,bool clamp,const char* fmt,va_list args)\",\n      \"call_args\": \"(x,y,col,pix_offset,clamp,fmt,args)\",\n      \"cimguiname\": \"ImPlot_AnnotationV\",\n      \"defaults\": {},\n      \"funcname\": \"AnnotationV\",\n      \"location\": \"implot:934\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_AnnotationV\",\n      \"ret\": \"void\",\n      \"signature\": \"(double,double,const ImVec4,const ImVec2,bool,const char*,va_list)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_AnyAxesHeld\": [\n    {\n      \"args\": \"(ImPlotAxis* axes,int count)\",\n      \"argsT\": [\n        {\n          \"name\": \"axes\",\n          \"type\": \"ImPlotAxis*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(ImPlotAxis* axes,int count)\",\n      \"call_args\": \"(axes,count)\",\n      \"cimguiname\": \"ImPlot_AnyAxesHeld\",\n      \"defaults\": {},\n      \"funcname\": \"AnyAxesHeld\",\n      \"location\": \"implot_internal:1363\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_AnyAxesHeld\",\n      \"ret\": \"bool\",\n      \"signature\": \"(ImPlotAxis*,int)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_AnyAxesHovered\": [\n    {\n      \"args\": \"(ImPlotAxis* axes,int count)\",\n      \"argsT\": [\n        {\n          \"name\": \"axes\",\n          \"type\": \"ImPlotAxis*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(ImPlotAxis* axes,int count)\",\n      \"call_args\": \"(axes,count)\",\n      \"cimguiname\": \"ImPlot_AnyAxesHovered\",\n      \"defaults\": {},\n      \"funcname\": \"AnyAxesHovered\",\n      \"location\": \"implot_internal:1371\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_AnyAxesHovered\",\n      \"ret\": \"bool\",\n      \"signature\": \"(ImPlotAxis*,int)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_AnyAxesInputLocked\": [\n    {\n      \"args\": \"(ImPlotAxis* axes,int count)\",\n      \"argsT\": [\n        {\n          \"name\": \"axes\",\n          \"type\": \"ImPlotAxis*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(ImPlotAxis* axes,int count)\",\n      \"call_args\": \"(axes,count)\",\n      \"cimguiname\": \"ImPlot_AnyAxesInputLocked\",\n      \"defaults\": {},\n      \"funcname\": \"AnyAxesInputLocked\",\n      \"location\": \"implot_internal:1346\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_AnyAxesInputLocked\",\n      \"ret\": \"bool\",\n      \"signature\": \"(ImPlotAxis*,int)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_BeginAlignedPlots\": [\n    {\n      \"args\": \"(const char* group_id,bool vertical)\",\n      \"argsT\": [\n        {\n          \"name\": \"group_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"vertical\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* group_id,bool vertical=true)\",\n      \"call_args\": \"(group_id,vertical)\",\n      \"cimguiname\": \"ImPlot_BeginAlignedPlots\",\n      \"defaults\": {\n        \"vertical\": \"true\"\n      },\n      \"funcname\": \"BeginAlignedPlots\",\n      \"location\": \"implot:997\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_BeginAlignedPlots\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*,bool)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_BeginDragDropSourceAxis\": [\n    {\n      \"args\": \"(ImAxis axis,ImGuiDragDropFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"axis\",\n          \"type\": \"ImAxis\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiDragDropFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(ImAxis axis,ImGuiDragDropFlags flags=0)\",\n      \"call_args\": \"(axis,flags)\",\n      \"cimguiname\": \"ImPlot_BeginDragDropSourceAxis\",\n      \"defaults\": {\n        \"flags\": \"0\"\n      },\n      \"funcname\": \"BeginDragDropSourceAxis\",\n      \"location\": \"implot:1031\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_BeginDragDropSourceAxis\",\n      \"ret\": \"bool\",\n      \"signature\": \"(ImAxis,ImGuiDragDropFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_BeginDragDropSourceItem\": [\n    {\n      \"args\": \"(const char* label_id,ImGuiDragDropFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiDragDropFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,ImGuiDragDropFlags flags=0)\",\n      \"call_args\": \"(label_id,flags)\",\n      \"cimguiname\": \"ImPlot_BeginDragDropSourceItem\",\n      \"defaults\": {\n        \"flags\": \"0\"\n      },\n      \"funcname\": \"BeginDragDropSourceItem\",\n      \"location\": \"implot:1033\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_BeginDragDropSourceItem\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*,ImGuiDragDropFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_BeginDragDropSourcePlot\": [\n    {\n      \"args\": \"(ImGuiDragDropFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImGuiDragDropFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiDragDropFlags flags=0)\",\n      \"call_args\": \"(flags)\",\n      \"cimguiname\": \"ImPlot_BeginDragDropSourcePlot\",\n      \"defaults\": {\n        \"flags\": \"0\"\n      },\n      \"funcname\": \"BeginDragDropSourcePlot\",\n      \"location\": \"implot:1029\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_BeginDragDropSourcePlot\",\n      \"ret\": \"bool\",\n      \"signature\": \"(ImGuiDragDropFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_BeginDragDropTargetAxis\": [\n    {\n      \"args\": \"(ImAxis axis)\",\n      \"argsT\": [\n        {\n          \"name\": \"axis\",\n          \"type\": \"ImAxis\"\n        }\n      ],\n      \"argsoriginal\": \"(ImAxis axis)\",\n      \"call_args\": \"(axis)\",\n      \"cimguiname\": \"ImPlot_BeginDragDropTargetAxis\",\n      \"defaults\": {},\n      \"funcname\": \"BeginDragDropTargetAxis\",\n      \"location\": \"implot:1019\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_BeginDragDropTargetAxis\",\n      \"ret\": \"bool\",\n      \"signature\": \"(ImAxis)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_BeginDragDropTargetLegend\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImPlot_BeginDragDropTargetLegend\",\n      \"defaults\": {},\n      \"funcname\": \"BeginDragDropTargetLegend\",\n      \"location\": \"implot:1021\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_BeginDragDropTargetLegend\",\n      \"ret\": \"bool\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_BeginDragDropTargetPlot\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImPlot_BeginDragDropTargetPlot\",\n      \"defaults\": {},\n      \"funcname\": \"BeginDragDropTargetPlot\",\n      \"location\": \"implot:1017\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_BeginDragDropTargetPlot\",\n      \"ret\": \"bool\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_BeginItem\": [\n    {\n      \"args\": \"(const char* label_id,ImPlotItemFlags flags,ImPlotCol recolor_from)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotItemFlags\"\n        },\n        {\n          \"name\": \"recolor_from\",\n          \"type\": \"ImPlotCol\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,ImPlotItemFlags flags=0,ImPlotCol recolor_from=-1)\",\n      \"call_args\": \"(label_id,flags,recolor_from)\",\n      \"cimguiname\": \"ImPlot_BeginItem\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"recolor_from\": \"-1\"\n      },\n      \"funcname\": \"BeginItem\",\n      \"location\": \"implot_internal:1315\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_BeginItem\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*,ImPlotItemFlags,ImPlotCol)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_BeginLegendPopup\": [\n    {\n      \"args\": \"(const char* label_id,ImGuiMouseButton mouse_button)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"mouse_button\",\n          \"type\": \"ImGuiMouseButton\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,ImGuiMouseButton mouse_button=1)\",\n      \"call_args\": \"(label_id,mouse_button)\",\n      \"cimguiname\": \"ImPlot_BeginLegendPopup\",\n      \"defaults\": {\n        \"mouse_button\": \"1\"\n      },\n      \"funcname\": \"BeginLegendPopup\",\n      \"location\": \"implot:1006\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_BeginLegendPopup\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*,ImGuiMouseButton)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_BeginPlot\": [\n    {\n      \"args\": \"(const char* title_id,const ImVec2 size,ImPlotFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"title_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"size\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* title_id,const ImVec2& size=ImVec2(-1,0),ImPlotFlags flags=0)\",\n      \"call_args\": \"(title_id,size,flags)\",\n      \"cimguiname\": \"ImPlot_BeginPlot\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"size\": \"ImVec2(-1,0)\"\n      },\n      \"funcname\": \"BeginPlot\",\n      \"location\": \"implot:626\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_BeginPlot\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*,const ImVec2,ImPlotFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_BeginSubplots\": [\n    {\n      \"args\": \"(const char* title_id,int rows,int cols,const ImVec2 size,ImPlotSubplotFlags flags,float* row_ratios,float* col_ratios)\",\n      \"argsT\": [\n        {\n          \"name\": \"title_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"rows\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"cols\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"size\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotSubplotFlags\"\n        },\n        {\n          \"name\": \"row_ratios\",\n          \"type\": \"float*\"\n        },\n        {\n          \"name\": \"col_ratios\",\n          \"type\": \"float*\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* title_id,int rows,int cols,const ImVec2& size,ImPlotSubplotFlags flags=0,float* row_ratios=((void*)0),float* col_ratios=((void*)0))\",\n      \"call_args\": \"(title_id,rows,cols,size,flags,row_ratios,col_ratios)\",\n      \"cimguiname\": \"ImPlot_BeginSubplots\",\n      \"defaults\": {\n        \"col_ratios\": \"NULL\",\n        \"flags\": \"0\",\n        \"row_ratios\": \"NULL\"\n      },\n      \"funcname\": \"BeginSubplots\",\n      \"location\": \"implot:682\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_BeginSubplots\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*,int,int,const ImVec2,ImPlotSubplotFlags,float*,float*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_BustColorCache\": [\n    {\n      \"args\": \"(const char* plot_title_id)\",\n      \"argsT\": [\n        {\n          \"name\": \"plot_title_id\",\n          \"type\": \"const char*\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* plot_title_id=((void*)0))\",\n      \"call_args\": \"(plot_title_id)\",\n      \"cimguiname\": \"ImPlot_BustColorCache\",\n      \"defaults\": {\n        \"plot_title_id\": \"NULL\"\n      },\n      \"funcname\": \"BustColorCache\",\n      \"location\": \"implot:1187\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_BustColorCache\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_BustItemCache\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImPlot_BustItemCache\",\n      \"defaults\": {},\n      \"funcname\": \"BustItemCache\",\n      \"location\": \"implot_internal:1339\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_BustItemCache\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_BustPlotCache\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImPlot_BustPlotCache\",\n      \"defaults\": {},\n      \"funcname\": \"BustPlotCache\",\n      \"location\": \"implot_internal:1284\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_BustPlotCache\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_CalcHoverColor\": [\n    {\n      \"args\": \"(ImU32 col)\",\n      \"argsT\": [\n        {\n          \"name\": \"col\",\n          \"type\": \"ImU32\"\n        }\n      ],\n      \"argsoriginal\": \"(ImU32 col)\",\n      \"call_args\": \"(col)\",\n      \"cimguiname\": \"ImPlot_CalcHoverColor\",\n      \"defaults\": {},\n      \"funcname\": \"CalcHoverColor\",\n      \"location\": \"implot_internal:1467\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_CalcHoverColor\",\n      \"ret\": \"ImU32\",\n      \"signature\": \"(ImU32)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_CalcLegendSize\": [\n    {\n      \"args\": \"(ImVec2 *pOut,ImPlotItemGroup* items,const ImVec2 pad,const ImVec2 spacing,bool vertical)\",\n      \"argsT\": [\n        {\n          \"name\": \"pOut\",\n          \"type\": \"ImVec2*\"\n        },\n        {\n          \"name\": \"items\",\n          \"type\": \"ImPlotItemGroup*\"\n        },\n        {\n          \"name\": \"pad\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"spacing\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"vertical\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"argsoriginal\": \"(ImPlotItemGroup& items,const ImVec2& pad,const ImVec2& spacing,bool vertical)\",\n      \"call_args\": \"(*items,pad,spacing,vertical)\",\n      \"cimguiname\": \"ImPlot_CalcLegendSize\",\n      \"defaults\": {},\n      \"funcname\": \"CalcLegendSize\",\n      \"location\": \"implot_internal:1421\",\n      \"namespace\": \"ImPlot\",\n      \"nonUDT\": 1,\n      \"ov_cimguiname\": \"ImPlot_CalcLegendSize\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImPlotItemGroup*,const ImVec2,const ImVec2,bool)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_CalcTextColor\": [\n    {\n      \"args\": \"(const ImVec4 bg)\",\n      \"argsT\": [\n        {\n          \"name\": \"bg\",\n          \"type\": \"const ImVec4\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImVec4& bg)\",\n      \"call_args\": \"(bg)\",\n      \"cimguiname\": \"ImPlot_CalcTextColor\",\n      \"defaults\": {},\n      \"funcname\": \"CalcTextColor\",\n      \"location\": \"implot_internal:1464\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_CalcTextColor_Vec4\",\n      \"ret\": \"ImU32\",\n      \"signature\": \"(const ImVec4)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(ImU32 bg)\",\n      \"argsT\": [\n        {\n          \"name\": \"bg\",\n          \"type\": \"ImU32\"\n        }\n      ],\n      \"argsoriginal\": \"(ImU32 bg)\",\n      \"call_args\": \"(bg)\",\n      \"cimguiname\": \"ImPlot_CalcTextColor\",\n      \"defaults\": {},\n      \"funcname\": \"CalcTextColor\",\n      \"location\": \"implot_internal:1465\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_CalcTextColor_U32\",\n      \"ret\": \"ImU32\",\n      \"signature\": \"(ImU32)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_CalcTextSizeVertical\": [\n    {\n      \"args\": \"(ImVec2 *pOut,const char* text)\",\n      \"argsT\": [\n        {\n          \"name\": \"pOut\",\n          \"type\": \"ImVec2*\"\n        },\n        {\n          \"name\": \"text\",\n          \"type\": \"const char*\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* text)\",\n      \"call_args\": \"(text)\",\n      \"cimguiname\": \"ImPlot_CalcTextSizeVertical\",\n      \"defaults\": {},\n      \"funcname\": \"CalcTextSizeVertical\",\n      \"location\": \"implot_internal:1459\",\n      \"namespace\": \"ImPlot\",\n      \"nonUDT\": 1,\n      \"ov_cimguiname\": \"ImPlot_CalcTextSizeVertical\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_CalculateBins\": [\n    {\n      \"args\": \"(const float* values,int count,ImPlotBin meth,const ImPlotRange range,int* bins_out,double* width_out)\",\n      \"argsT\": [\n        {\n          \"name\": \"values\",\n          \"type\": \"const float*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"meth\",\n          \"type\": \"ImPlotBin\"\n        },\n        {\n          \"name\": \"range\",\n          \"type\": \"const ImPlotRange\"\n        },\n        {\n          \"name\": \"bins_out\",\n          \"reftoptr\": true,\n          \"type\": \"int*\"\n        },\n        {\n          \"name\": \"width_out\",\n          \"reftoptr\": true,\n          \"type\": \"double*\"\n        }\n      ],\n      \"argsoriginal\": \"(const float* values,int count,ImPlotBin meth,const ImPlotRange& range,int& bins_out,double& width_out)\",\n      \"call_args\": \"(values,count,meth,range,*bins_out,*width_out)\",\n      \"cimguiname\": \"ImPlot_CalculateBins\",\n      \"defaults\": {},\n      \"funcname\": \"CalculateBins\",\n      \"location\": \"implot_internal:1521\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_CalculateBins_FloatPtr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const float*,int,ImPlotBin,const ImPlotRange,int*,double*)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const double* values,int count,ImPlotBin meth,const ImPlotRange range,int* bins_out,double* width_out)\",\n      \"argsT\": [\n        {\n          \"name\": \"values\",\n          \"type\": \"const double*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"meth\",\n          \"type\": \"ImPlotBin\"\n        },\n        {\n          \"name\": \"range\",\n          \"type\": \"const ImPlotRange\"\n        },\n        {\n          \"name\": \"bins_out\",\n          \"reftoptr\": true,\n          \"type\": \"int*\"\n        },\n        {\n          \"name\": \"width_out\",\n          \"reftoptr\": true,\n          \"type\": \"double*\"\n        }\n      ],\n      \"argsoriginal\": \"(const double* values,int count,ImPlotBin meth,const ImPlotRange& range,int& bins_out,double& width_out)\",\n      \"call_args\": \"(values,count,meth,range,*bins_out,*width_out)\",\n      \"cimguiname\": \"ImPlot_CalculateBins\",\n      \"defaults\": {},\n      \"funcname\": \"CalculateBins\",\n      \"location\": \"implot_internal:1521\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_CalculateBins_doublePtr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const double*,int,ImPlotBin,const ImPlotRange,int*,double*)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const ImS8* values,int count,ImPlotBin meth,const ImPlotRange range,int* bins_out,double* width_out)\",\n      \"argsT\": [\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImS8*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"meth\",\n          \"type\": \"ImPlotBin\"\n        },\n        {\n          \"name\": \"range\",\n          \"type\": \"const ImPlotRange\"\n        },\n        {\n          \"name\": \"bins_out\",\n          \"reftoptr\": true,\n          \"type\": \"int*\"\n        },\n        {\n          \"name\": \"width_out\",\n          \"reftoptr\": true,\n          \"type\": \"double*\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImS8* values,int count,ImPlotBin meth,const ImPlotRange& range,int& bins_out,double& width_out)\",\n      \"call_args\": \"(values,count,meth,range,*bins_out,*width_out)\",\n      \"cimguiname\": \"ImPlot_CalculateBins\",\n      \"defaults\": {},\n      \"funcname\": \"CalculateBins\",\n      \"location\": \"implot_internal:1521\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_CalculateBins_S8Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImS8*,int,ImPlotBin,const ImPlotRange,int*,double*)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const ImU8* values,int count,ImPlotBin meth,const ImPlotRange range,int* bins_out,double* width_out)\",\n      \"argsT\": [\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImU8*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"meth\",\n          \"type\": \"ImPlotBin\"\n        },\n        {\n          \"name\": \"range\",\n          \"type\": \"const ImPlotRange\"\n        },\n        {\n          \"name\": \"bins_out\",\n          \"reftoptr\": true,\n          \"type\": \"int*\"\n        },\n        {\n          \"name\": \"width_out\",\n          \"reftoptr\": true,\n          \"type\": \"double*\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImU8* values,int count,ImPlotBin meth,const ImPlotRange& range,int& bins_out,double& width_out)\",\n      \"call_args\": \"(values,count,meth,range,*bins_out,*width_out)\",\n      \"cimguiname\": \"ImPlot_CalculateBins\",\n      \"defaults\": {},\n      \"funcname\": \"CalculateBins\",\n      \"location\": \"implot_internal:1521\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_CalculateBins_U8Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImU8*,int,ImPlotBin,const ImPlotRange,int*,double*)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const ImS16* values,int count,ImPlotBin meth,const ImPlotRange range,int* bins_out,double* width_out)\",\n      \"argsT\": [\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImS16*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"meth\",\n          \"type\": \"ImPlotBin\"\n        },\n        {\n          \"name\": \"range\",\n          \"type\": \"const ImPlotRange\"\n        },\n        {\n          \"name\": \"bins_out\",\n          \"reftoptr\": true,\n          \"type\": \"int*\"\n        },\n        {\n          \"name\": \"width_out\",\n          \"reftoptr\": true,\n          \"type\": \"double*\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImS16* values,int count,ImPlotBin meth,const ImPlotRange& range,int& bins_out,double& width_out)\",\n      \"call_args\": \"(values,count,meth,range,*bins_out,*width_out)\",\n      \"cimguiname\": \"ImPlot_CalculateBins\",\n      \"defaults\": {},\n      \"funcname\": \"CalculateBins\",\n      \"location\": \"implot_internal:1521\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_CalculateBins_S16Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImS16*,int,ImPlotBin,const ImPlotRange,int*,double*)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const ImU16* values,int count,ImPlotBin meth,const ImPlotRange range,int* bins_out,double* width_out)\",\n      \"argsT\": [\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImU16*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"meth\",\n          \"type\": \"ImPlotBin\"\n        },\n        {\n          \"name\": \"range\",\n          \"type\": \"const ImPlotRange\"\n        },\n        {\n          \"name\": \"bins_out\",\n          \"reftoptr\": true,\n          \"type\": \"int*\"\n        },\n        {\n          \"name\": \"width_out\",\n          \"reftoptr\": true,\n          \"type\": \"double*\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImU16* values,int count,ImPlotBin meth,const ImPlotRange& range,int& bins_out,double& width_out)\",\n      \"call_args\": \"(values,count,meth,range,*bins_out,*width_out)\",\n      \"cimguiname\": \"ImPlot_CalculateBins\",\n      \"defaults\": {},\n      \"funcname\": \"CalculateBins\",\n      \"location\": \"implot_internal:1521\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_CalculateBins_U16Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImU16*,int,ImPlotBin,const ImPlotRange,int*,double*)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const ImS32* values,int count,ImPlotBin meth,const ImPlotRange range,int* bins_out,double* width_out)\",\n      \"argsT\": [\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImS32*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"meth\",\n          \"type\": \"ImPlotBin\"\n        },\n        {\n          \"name\": \"range\",\n          \"type\": \"const ImPlotRange\"\n        },\n        {\n          \"name\": \"bins_out\",\n          \"reftoptr\": true,\n          \"type\": \"int*\"\n        },\n        {\n          \"name\": \"width_out\",\n          \"reftoptr\": true,\n          \"type\": \"double*\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImS32* values,int count,ImPlotBin meth,const ImPlotRange& range,int& bins_out,double& width_out)\",\n      \"call_args\": \"(values,count,meth,range,*bins_out,*width_out)\",\n      \"cimguiname\": \"ImPlot_CalculateBins\",\n      \"defaults\": {},\n      \"funcname\": \"CalculateBins\",\n      \"location\": \"implot_internal:1521\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_CalculateBins_S32Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImS32*,int,ImPlotBin,const ImPlotRange,int*,double*)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const ImU32* values,int count,ImPlotBin meth,const ImPlotRange range,int* bins_out,double* width_out)\",\n      \"argsT\": [\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImU32*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"meth\",\n          \"type\": \"ImPlotBin\"\n        },\n        {\n          \"name\": \"range\",\n          \"type\": \"const ImPlotRange\"\n        },\n        {\n          \"name\": \"bins_out\",\n          \"reftoptr\": true,\n          \"type\": \"int*\"\n        },\n        {\n          \"name\": \"width_out\",\n          \"reftoptr\": true,\n          \"type\": \"double*\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImU32* values,int count,ImPlotBin meth,const ImPlotRange& range,int& bins_out,double& width_out)\",\n      \"call_args\": \"(values,count,meth,range,*bins_out,*width_out)\",\n      \"cimguiname\": \"ImPlot_CalculateBins\",\n      \"defaults\": {},\n      \"funcname\": \"CalculateBins\",\n      \"location\": \"implot_internal:1521\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_CalculateBins_U32Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImU32*,int,ImPlotBin,const ImPlotRange,int*,double*)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const ImS64* values,int count,ImPlotBin meth,const ImPlotRange range,int* bins_out,double* width_out)\",\n      \"argsT\": [\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImS64*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"meth\",\n          \"type\": \"ImPlotBin\"\n        },\n        {\n          \"name\": \"range\",\n          \"type\": \"const ImPlotRange\"\n        },\n        {\n          \"name\": \"bins_out\",\n          \"reftoptr\": true,\n          \"type\": \"int*\"\n        },\n        {\n          \"name\": \"width_out\",\n          \"reftoptr\": true,\n          \"type\": \"double*\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImS64* values,int count,ImPlotBin meth,const ImPlotRange& range,int& bins_out,double& width_out)\",\n      \"call_args\": \"(values,count,meth,range,*bins_out,*width_out)\",\n      \"cimguiname\": \"ImPlot_CalculateBins\",\n      \"defaults\": {},\n      \"funcname\": \"CalculateBins\",\n      \"location\": \"implot_internal:1521\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_CalculateBins_S64Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImS64*,int,ImPlotBin,const ImPlotRange,int*,double*)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const ImU64* values,int count,ImPlotBin meth,const ImPlotRange range,int* bins_out,double* width_out)\",\n      \"argsT\": [\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImU64*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"meth\",\n          \"type\": \"ImPlotBin\"\n        },\n        {\n          \"name\": \"range\",\n          \"type\": \"const ImPlotRange\"\n        },\n        {\n          \"name\": \"bins_out\",\n          \"reftoptr\": true,\n          \"type\": \"int*\"\n        },\n        {\n          \"name\": \"width_out\",\n          \"reftoptr\": true,\n          \"type\": \"double*\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImU64* values,int count,ImPlotBin meth,const ImPlotRange& range,int& bins_out,double& width_out)\",\n      \"call_args\": \"(values,count,meth,range,*bins_out,*width_out)\",\n      \"cimguiname\": \"ImPlot_CalculateBins\",\n      \"defaults\": {},\n      \"funcname\": \"CalculateBins\",\n      \"location\": \"implot_internal:1521\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_CalculateBins_U64Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImU64*,int,ImPlotBin,const ImPlotRange,int*,double*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_CancelPlotSelection\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImPlot_CancelPlotSelection\",\n      \"defaults\": {},\n      \"funcname\": \"CancelPlotSelection\",\n      \"location\": \"implot:984\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_CancelPlotSelection\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_CeilTime\": [\n    {\n      \"args\": \"(ImPlotTime *pOut,const ImPlotTime t,ImPlotTimeUnit unit)\",\n      \"argsT\": [\n        {\n          \"name\": \"pOut\",\n          \"type\": \"ImPlotTime*\"\n        },\n        {\n          \"name\": \"t\",\n          \"type\": \"const ImPlotTime\"\n        },\n        {\n          \"name\": \"unit\",\n          \"type\": \"ImPlotTimeUnit\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImPlotTime& t,ImPlotTimeUnit unit)\",\n      \"call_args\": \"(t,unit)\",\n      \"cimguiname\": \"ImPlot_CeilTime\",\n      \"defaults\": {},\n      \"funcname\": \"CeilTime\",\n      \"location\": \"implot_internal:1579\",\n      \"namespace\": \"ImPlot\",\n      \"nonUDT\": 1,\n      \"ov_cimguiname\": \"ImPlot_CeilTime\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImPlotTime,ImPlotTimeUnit)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_ClampLabelPos\": [\n    {\n      \"args\": \"(ImVec2 *pOut,ImVec2 pos,const ImVec2 size,const ImVec2 Min,const ImVec2 Max)\",\n      \"argsT\": [\n        {\n          \"name\": \"pOut\",\n          \"type\": \"ImVec2*\"\n        },\n        {\n          \"name\": \"pos\",\n          \"type\": \"ImVec2\"\n        },\n        {\n          \"name\": \"size\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"Min\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"Max\",\n          \"type\": \"const ImVec2\"\n        }\n      ],\n      \"argsoriginal\": \"(ImVec2 pos,const ImVec2& size,const ImVec2& Min,const ImVec2& Max)\",\n      \"call_args\": \"(pos,size,Min,Max)\",\n      \"cimguiname\": \"ImPlot_ClampLabelPos\",\n      \"defaults\": {},\n      \"funcname\": \"ClampLabelPos\",\n      \"location\": \"implot_internal:1470\",\n      \"namespace\": \"ImPlot\",\n      \"nonUDT\": 1,\n      \"ov_cimguiname\": \"ImPlot_ClampLabelPos\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImVec2,const ImVec2,const ImVec2,const ImVec2)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_ColormapButton\": [\n    {\n      \"args\": \"(const char* label,const ImVec2 size,ImPlotColormap cmap)\",\n      \"argsT\": [\n        {\n          \"name\": \"label\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"size\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"cmap\",\n          \"type\": \"ImPlotColormap\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label,const ImVec2& size=ImVec2(0,0),ImPlotColormap cmap=-1)\",\n      \"call_args\": \"(label,size,cmap)\",\n      \"cimguiname\": \"ImPlot_ColormapButton\",\n      \"defaults\": {\n        \"cmap\": \"-1\",\n        \"size\": \"ImVec2(0,0)\"\n      },\n      \"funcname\": \"ColormapButton\",\n      \"location\": \"implot:1178\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_ColormapButton\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*,const ImVec2,ImPlotColormap)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_ColormapIcon\": [\n    {\n      \"args\": \"(ImPlotColormap cmap)\",\n      \"argsT\": [\n        {\n          \"name\": \"cmap\",\n          \"type\": \"ImPlotColormap\"\n        }\n      ],\n      \"argsoriginal\": \"(ImPlotColormap cmap)\",\n      \"call_args\": \"(cmap)\",\n      \"cimguiname\": \"ImPlot_ColormapIcon\",\n      \"defaults\": {},\n      \"funcname\": \"ColormapIcon\",\n      \"location\": \"implot:1208\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_ColormapIcon\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImPlotColormap)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_ColormapScale\": [\n    {\n      \"args\": \"(const char* label,double scale_min,double scale_max,const ImVec2 size,const char* format,ImPlotColormapScaleFlags flags,ImPlotColormap cmap)\",\n      \"argsT\": [\n        {\n          \"name\": \"label\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"scale_min\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"scale_max\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"size\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"format\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotColormapScaleFlags\"\n        },\n        {\n          \"name\": \"cmap\",\n          \"type\": \"ImPlotColormap\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label,double scale_min,double scale_max,const ImVec2& size=ImVec2(0,0),const char* format=\\\"%g\\\",ImPlotColormapScaleFlags flags=0,ImPlotColormap cmap=-1)\",\n      \"call_args\": \"(label,scale_min,scale_max,size,format,flags,cmap)\",\n      \"cimguiname\": \"ImPlot_ColormapScale\",\n      \"defaults\": {\n        \"cmap\": \"-1\",\n        \"flags\": \"0\",\n        \"format\": \"\\\"%g\\\"\",\n        \"size\": \"ImVec2(0,0)\"\n      },\n      \"funcname\": \"ColormapScale\",\n      \"location\": \"implot:1174\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_ColormapScale\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,double,double,const ImVec2,const char*,ImPlotColormapScaleFlags,ImPlotColormap)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_ColormapSlider\": [\n    {\n      \"args\": \"(const char* label,float* t,ImVec4* out,const char* format,ImPlotColormap cmap)\",\n      \"argsT\": [\n        {\n          \"name\": \"label\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"t\",\n          \"type\": \"float*\"\n        },\n        {\n          \"name\": \"out\",\n          \"type\": \"ImVec4*\"\n        },\n        {\n          \"name\": \"format\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"cmap\",\n          \"type\": \"ImPlotColormap\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label,float* t,ImVec4* out=((void*)0),const char* format=\\\"\\\",ImPlotColormap cmap=-1)\",\n      \"call_args\": \"(label,t,out,format,cmap)\",\n      \"cimguiname\": \"ImPlot_ColormapSlider\",\n      \"defaults\": {\n        \"cmap\": \"-1\",\n        \"format\": \"\\\"\\\"\",\n        \"out\": \"NULL\"\n      },\n      \"funcname\": \"ColormapSlider\",\n      \"location\": \"implot:1176\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_ColormapSlider\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*,float*,ImVec4*,const char*,ImPlotColormap)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_CombineDateTime\": [\n    {\n      \"args\": \"(ImPlotTime *pOut,const ImPlotTime date_part,const ImPlotTime time_part)\",\n      \"argsT\": [\n        {\n          \"name\": \"pOut\",\n          \"type\": \"ImPlotTime*\"\n        },\n        {\n          \"name\": \"date_part\",\n          \"type\": \"const ImPlotTime\"\n        },\n        {\n          \"name\": \"time_part\",\n          \"type\": \"const ImPlotTime\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImPlotTime& date_part,const ImPlotTime& time_part)\",\n      \"call_args\": \"(date_part,time_part)\",\n      \"cimguiname\": \"ImPlot_CombineDateTime\",\n      \"defaults\": {},\n      \"funcname\": \"CombineDateTime\",\n      \"location\": \"implot_internal:1583\",\n      \"namespace\": \"ImPlot\",\n      \"nonUDT\": 1,\n      \"ov_cimguiname\": \"ImPlot_CombineDateTime\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImPlotTime,const ImPlotTime)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_CreateContext\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImPlot_CreateContext\",\n      \"defaults\": {},\n      \"funcname\": \"CreateContext\",\n      \"location\": \"implot:592\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_CreateContext\",\n      \"ret\": \"ImPlotContext*\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_DestroyContext\": [\n    {\n      \"args\": \"(ImPlotContext* ctx)\",\n      \"argsT\": [\n        {\n          \"name\": \"ctx\",\n          \"type\": \"ImPlotContext*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImPlotContext* ctx=((void*)0))\",\n      \"call_args\": \"(ctx)\",\n      \"cimguiname\": \"ImPlot_DestroyContext\",\n      \"defaults\": {\n        \"ctx\": \"NULL\"\n      },\n      \"funcname\": \"DestroyContext\",\n      \"location\": \"implot:594\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_DestroyContext\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImPlotContext*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_DragLineX\": [\n    {\n      \"args\": \"(int id,double* x,const ImVec4 col,float thickness,ImPlotDragToolFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"id\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"x\",\n          \"type\": \"double*\"\n        },\n        {\n          \"name\": \"col\",\n          \"type\": \"const ImVec4\"\n        },\n        {\n          \"name\": \"thickness\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotDragToolFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(int id,double* x,const ImVec4& col,float thickness=1,ImPlotDragToolFlags flags=0)\",\n      \"call_args\": \"(id,x,col,thickness,flags)\",\n      \"cimguiname\": \"ImPlot_DragLineX\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"thickness\": \"1\"\n      },\n      \"funcname\": \"DragLineX\",\n      \"location\": \"implot:925\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_DragLineX\",\n      \"ret\": \"bool\",\n      \"signature\": \"(int,double*,const ImVec4,float,ImPlotDragToolFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_DragLineY\": [\n    {\n      \"args\": \"(int id,double* y,const ImVec4 col,float thickness,ImPlotDragToolFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"id\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"y\",\n          \"type\": \"double*\"\n        },\n        {\n          \"name\": \"col\",\n          \"type\": \"const ImVec4\"\n        },\n        {\n          \"name\": \"thickness\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotDragToolFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(int id,double* y,const ImVec4& col,float thickness=1,ImPlotDragToolFlags flags=0)\",\n      \"call_args\": \"(id,y,col,thickness,flags)\",\n      \"cimguiname\": \"ImPlot_DragLineY\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"thickness\": \"1\"\n      },\n      \"funcname\": \"DragLineY\",\n      \"location\": \"implot:927\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_DragLineY\",\n      \"ret\": \"bool\",\n      \"signature\": \"(int,double*,const ImVec4,float,ImPlotDragToolFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_DragPoint\": [\n    {\n      \"args\": \"(int id,double* x,double* y,const ImVec4 col,float size,ImPlotDragToolFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"id\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"x\",\n          \"type\": \"double*\"\n        },\n        {\n          \"name\": \"y\",\n          \"type\": \"double*\"\n        },\n        {\n          \"name\": \"col\",\n          \"type\": \"const ImVec4\"\n        },\n        {\n          \"name\": \"size\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotDragToolFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(int id,double* x,double* y,const ImVec4& col,float size=4,ImPlotDragToolFlags flags=0)\",\n      \"call_args\": \"(id,x,y,col,size,flags)\",\n      \"cimguiname\": \"ImPlot_DragPoint\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"size\": \"4\"\n      },\n      \"funcname\": \"DragPoint\",\n      \"location\": \"implot:923\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_DragPoint\",\n      \"ret\": \"bool\",\n      \"signature\": \"(int,double*,double*,const ImVec4,float,ImPlotDragToolFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_DragRect\": [\n    {\n      \"args\": \"(int id,double* x1,double* y1,double* x2,double* y2,const ImVec4 col,ImPlotDragToolFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"id\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"x1\",\n          \"type\": \"double*\"\n        },\n        {\n          \"name\": \"y1\",\n          \"type\": \"double*\"\n        },\n        {\n          \"name\": \"x2\",\n          \"type\": \"double*\"\n        },\n        {\n          \"name\": \"y2\",\n          \"type\": \"double*\"\n        },\n        {\n          \"name\": \"col\",\n          \"type\": \"const ImVec4\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotDragToolFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(int id,double* x1,double* y1,double* x2,double* y2,const ImVec4& col,ImPlotDragToolFlags flags=0)\",\n      \"call_args\": \"(id,x1,y1,x2,y2,col,flags)\",\n      \"cimguiname\": \"ImPlot_DragRect\",\n      \"defaults\": {\n        \"flags\": \"0\"\n      },\n      \"funcname\": \"DragRect\",\n      \"location\": \"implot:929\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_DragRect\",\n      \"ret\": \"bool\",\n      \"signature\": \"(int,double*,double*,double*,double*,const ImVec4,ImPlotDragToolFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_EndAlignedPlots\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImPlot_EndAlignedPlots\",\n      \"defaults\": {},\n      \"funcname\": \"EndAlignedPlots\",\n      \"location\": \"implot:999\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_EndAlignedPlots\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_EndDragDropSource\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImPlot_EndDragDropSource\",\n      \"defaults\": {},\n      \"funcname\": \"EndDragDropSource\",\n      \"location\": \"implot:1035\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_EndDragDropSource\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_EndDragDropTarget\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImPlot_EndDragDropTarget\",\n      \"defaults\": {},\n      \"funcname\": \"EndDragDropTarget\",\n      \"location\": \"implot:1023\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_EndDragDropTarget\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_EndItem\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImPlot_EndItem\",\n      \"defaults\": {},\n      \"funcname\": \"EndItem\",\n      \"location\": \"implot_internal:1330\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_EndItem\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_EndLegendPopup\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImPlot_EndLegendPopup\",\n      \"defaults\": {},\n      \"funcname\": \"EndLegendPopup\",\n      \"location\": \"implot:1008\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_EndLegendPopup\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_EndPlot\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImPlot_EndPlot\",\n      \"defaults\": {},\n      \"funcname\": \"EndPlot\",\n      \"location\": \"implot:630\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_EndPlot\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_EndSubplots\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImPlot_EndSubplots\",\n      \"defaults\": {},\n      \"funcname\": \"EndSubplots\",\n      \"location\": \"implot:692\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_EndSubplots\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_FillRange\": [\n    {\n      \"args\": \"(ImVector_float * buffer,int n,float vmin,float vmax)\",\n      \"argsT\": [\n        {\n          \"name\": \"buffer\",\n          \"reftoptr\": true,\n          \"type\": \"ImVector_float *\"\n        },\n        {\n          \"name\": \"n\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"vmin\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"vmax\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(ImVector<float>& buffer,int n,float vmin,float vmax)\",\n      \"call_args\": \"(*buffer,n,vmin,vmax)\",\n      \"cimguiname\": \"ImPlot_FillRange\",\n      \"defaults\": {},\n      \"funcname\": \"FillRange\",\n      \"location\": \"implot_internal:1511\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_FillRange_Vector_Float_Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImVector_float *,int,float,float)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(ImVector_double * buffer,int n,double vmin,double vmax)\",\n      \"argsT\": [\n        {\n          \"name\": \"buffer\",\n          \"reftoptr\": true,\n          \"type\": \"ImVector_double *\"\n        },\n        {\n          \"name\": \"n\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"vmin\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"vmax\",\n          \"type\": \"double\"\n        }\n      ],\n      \"argsoriginal\": \"(ImVector<double>& buffer,int n,double vmin,double vmax)\",\n      \"call_args\": \"(*buffer,n,vmin,vmax)\",\n      \"cimguiname\": \"ImPlot_FillRange\",\n      \"defaults\": {},\n      \"funcname\": \"FillRange\",\n      \"location\": \"implot_internal:1511\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_FillRange_Vector_double_Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImVector_double *,int,double,double)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(ImVector_ImS8 * buffer,int n,ImS8 vmin,ImS8 vmax)\",\n      \"argsT\": [\n        {\n          \"name\": \"buffer\",\n          \"reftoptr\": true,\n          \"type\": \"ImVector_ImS8 *\"\n        },\n        {\n          \"name\": \"n\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"vmin\",\n          \"type\": \"ImS8\"\n        },\n        {\n          \"name\": \"vmax\",\n          \"type\": \"ImS8\"\n        }\n      ],\n      \"argsoriginal\": \"(ImVector<ImS8>& buffer,int n,ImS8 vmin,ImS8 vmax)\",\n      \"call_args\": \"(*buffer,n,vmin,vmax)\",\n      \"cimguiname\": \"ImPlot_FillRange\",\n      \"defaults\": {},\n      \"funcname\": \"FillRange\",\n      \"location\": \"implot_internal:1511\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_FillRange_Vector_S8_Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImVector_ImS8 *,int,ImS8,ImS8)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(ImVector_ImU8 * buffer,int n,ImU8 vmin,ImU8 vmax)\",\n      \"argsT\": [\n        {\n          \"name\": \"buffer\",\n          \"reftoptr\": true,\n          \"type\": \"ImVector_ImU8 *\"\n        },\n        {\n          \"name\": \"n\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"vmin\",\n          \"type\": \"ImU8\"\n        },\n        {\n          \"name\": \"vmax\",\n          \"type\": \"ImU8\"\n        }\n      ],\n      \"argsoriginal\": \"(ImVector<ImU8>& buffer,int n,ImU8 vmin,ImU8 vmax)\",\n      \"call_args\": \"(*buffer,n,vmin,vmax)\",\n      \"cimguiname\": \"ImPlot_FillRange\",\n      \"defaults\": {},\n      \"funcname\": \"FillRange\",\n      \"location\": \"implot_internal:1511\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_FillRange_Vector_U8_Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImVector_ImU8 *,int,ImU8,ImU8)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(ImVector_ImS16 * buffer,int n,ImS16 vmin,ImS16 vmax)\",\n      \"argsT\": [\n        {\n          \"name\": \"buffer\",\n          \"reftoptr\": true,\n          \"type\": \"ImVector_ImS16 *\"\n        },\n        {\n          \"name\": \"n\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"vmin\",\n          \"type\": \"ImS16\"\n        },\n        {\n          \"name\": \"vmax\",\n          \"type\": \"ImS16\"\n        }\n      ],\n      \"argsoriginal\": \"(ImVector<ImS16>& buffer,int n,ImS16 vmin,ImS16 vmax)\",\n      \"call_args\": \"(*buffer,n,vmin,vmax)\",\n      \"cimguiname\": \"ImPlot_FillRange\",\n      \"defaults\": {},\n      \"funcname\": \"FillRange\",\n      \"location\": \"implot_internal:1511\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_FillRange_Vector_S16_Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImVector_ImS16 *,int,ImS16,ImS16)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(ImVector_ImU16 * buffer,int n,ImU16 vmin,ImU16 vmax)\",\n      \"argsT\": [\n        {\n          \"name\": \"buffer\",\n          \"reftoptr\": true,\n          \"type\": \"ImVector_ImU16 *\"\n        },\n        {\n          \"name\": \"n\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"vmin\",\n          \"type\": \"ImU16\"\n        },\n        {\n          \"name\": \"vmax\",\n          \"type\": \"ImU16\"\n        }\n      ],\n      \"argsoriginal\": \"(ImVector<ImU16>& buffer,int n,ImU16 vmin,ImU16 vmax)\",\n      \"call_args\": \"(*buffer,n,vmin,vmax)\",\n      \"cimguiname\": \"ImPlot_FillRange\",\n      \"defaults\": {},\n      \"funcname\": \"FillRange\",\n      \"location\": \"implot_internal:1511\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_FillRange_Vector_U16_Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImVector_ImU16 *,int,ImU16,ImU16)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(ImVector_ImS32 * buffer,int n,ImS32 vmin,ImS32 vmax)\",\n      \"argsT\": [\n        {\n          \"name\": \"buffer\",\n          \"reftoptr\": true,\n          \"type\": \"ImVector_ImS32 *\"\n        },\n        {\n          \"name\": \"n\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"vmin\",\n          \"type\": \"ImS32\"\n        },\n        {\n          \"name\": \"vmax\",\n          \"type\": \"ImS32\"\n        }\n      ],\n      \"argsoriginal\": \"(ImVector<ImS32>& buffer,int n,ImS32 vmin,ImS32 vmax)\",\n      \"call_args\": \"(*buffer,n,vmin,vmax)\",\n      \"cimguiname\": \"ImPlot_FillRange\",\n      \"defaults\": {},\n      \"funcname\": \"FillRange\",\n      \"location\": \"implot_internal:1511\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_FillRange_Vector_S32_Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImVector_ImS32 *,int,ImS32,ImS32)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(ImVector_ImU32 * buffer,int n,ImU32 vmin,ImU32 vmax)\",\n      \"argsT\": [\n        {\n          \"name\": \"buffer\",\n          \"reftoptr\": true,\n          \"type\": \"ImVector_ImU32 *\"\n        },\n        {\n          \"name\": \"n\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"vmin\",\n          \"type\": \"ImU32\"\n        },\n        {\n          \"name\": \"vmax\",\n          \"type\": \"ImU32\"\n        }\n      ],\n      \"argsoriginal\": \"(ImVector<ImU32>& buffer,int n,ImU32 vmin,ImU32 vmax)\",\n      \"call_args\": \"(*buffer,n,vmin,vmax)\",\n      \"cimguiname\": \"ImPlot_FillRange\",\n      \"defaults\": {},\n      \"funcname\": \"FillRange\",\n      \"location\": \"implot_internal:1511\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_FillRange_Vector_U32_Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImVector_ImU32 *,int,ImU32,ImU32)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(ImVector_ImS64 * buffer,int n,ImS64 vmin,ImS64 vmax)\",\n      \"argsT\": [\n        {\n          \"name\": \"buffer\",\n          \"reftoptr\": true,\n          \"type\": \"ImVector_ImS64 *\"\n        },\n        {\n          \"name\": \"n\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"vmin\",\n          \"type\": \"ImS64\"\n        },\n        {\n          \"name\": \"vmax\",\n          \"type\": \"ImS64\"\n        }\n      ],\n      \"argsoriginal\": \"(ImVector<ImS64>& buffer,int n,ImS64 vmin,ImS64 vmax)\",\n      \"call_args\": \"(*buffer,n,vmin,vmax)\",\n      \"cimguiname\": \"ImPlot_FillRange\",\n      \"defaults\": {},\n      \"funcname\": \"FillRange\",\n      \"location\": \"implot_internal:1511\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_FillRange_Vector_S64_Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImVector_ImS64 *,int,ImS64,ImS64)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(ImVector_ImU64 * buffer,int n,ImU64 vmin,ImU64 vmax)\",\n      \"argsT\": [\n        {\n          \"name\": \"buffer\",\n          \"reftoptr\": true,\n          \"type\": \"ImVector_ImU64 *\"\n        },\n        {\n          \"name\": \"n\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"vmin\",\n          \"type\": \"ImU64\"\n        },\n        {\n          \"name\": \"vmax\",\n          \"type\": \"ImU64\"\n        }\n      ],\n      \"argsoriginal\": \"(ImVector<ImU64>& buffer,int n,ImU64 vmin,ImU64 vmax)\",\n      \"call_args\": \"(*buffer,n,vmin,vmax)\",\n      \"cimguiname\": \"ImPlot_FillRange\",\n      \"defaults\": {},\n      \"funcname\": \"FillRange\",\n      \"location\": \"implot_internal:1511\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_FillRange_Vector_U64_Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImVector_ImU64 *,int,ImU64,ImU64)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_FitPoint\": [\n    {\n      \"args\": \"(const ImPlotPoint p)\",\n      \"argsT\": [\n        {\n          \"name\": \"p\",\n          \"type\": \"const ImPlotPoint\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImPlotPoint& p)\",\n      \"call_args\": \"(p)\",\n      \"cimguiname\": \"ImPlot_FitPoint\",\n      \"defaults\": {},\n      \"funcname\": \"FitPoint\",\n      \"location\": \"implot_internal:1399\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_FitPoint\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImPlotPoint)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_FitPointX\": [\n    {\n      \"args\": \"(double x)\",\n      \"argsT\": [\n        {\n          \"name\": \"x\",\n          \"type\": \"double\"\n        }\n      ],\n      \"argsoriginal\": \"(double x)\",\n      \"call_args\": \"(x)\",\n      \"cimguiname\": \"ImPlot_FitPointX\",\n      \"defaults\": {},\n      \"funcname\": \"FitPointX\",\n      \"location\": \"implot_internal:1385\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_FitPointX\",\n      \"ret\": \"void\",\n      \"signature\": \"(double)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_FitPointY\": [\n    {\n      \"args\": \"(double y)\",\n      \"argsT\": [\n        {\n          \"name\": \"y\",\n          \"type\": \"double\"\n        }\n      ],\n      \"argsoriginal\": \"(double y)\",\n      \"call_args\": \"(y)\",\n      \"cimguiname\": \"ImPlot_FitPointY\",\n      \"defaults\": {},\n      \"funcname\": \"FitPointY\",\n      \"location\": \"implot_internal:1392\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_FitPointY\",\n      \"ret\": \"void\",\n      \"signature\": \"(double)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_FitThisFrame\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImPlot_FitThisFrame\",\n      \"defaults\": {},\n      \"funcname\": \"FitThisFrame\",\n      \"location\": \"implot_internal:1380\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_FitThisFrame\",\n      \"ret\": \"bool\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_FloorTime\": [\n    {\n      \"args\": \"(ImPlotTime *pOut,const ImPlotTime t,ImPlotTimeUnit unit)\",\n      \"argsT\": [\n        {\n          \"name\": \"pOut\",\n          \"type\": \"ImPlotTime*\"\n        },\n        {\n          \"name\": \"t\",\n          \"type\": \"const ImPlotTime\"\n        },\n        {\n          \"name\": \"unit\",\n          \"type\": \"ImPlotTimeUnit\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImPlotTime& t,ImPlotTimeUnit unit)\",\n      \"call_args\": \"(t,unit)\",\n      \"cimguiname\": \"ImPlot_FloorTime\",\n      \"defaults\": {},\n      \"funcname\": \"FloorTime\",\n      \"location\": \"implot_internal:1577\",\n      \"namespace\": \"ImPlot\",\n      \"nonUDT\": 1,\n      \"ov_cimguiname\": \"ImPlot_FloorTime\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImPlotTime,ImPlotTimeUnit)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_FormatDate\": [\n    {\n      \"args\": \"(const ImPlotTime t,char* buffer,int size,ImPlotDateFmt fmt,bool use_iso_8601)\",\n      \"argsT\": [\n        {\n          \"name\": \"t\",\n          \"type\": \"const ImPlotTime\"\n        },\n        {\n          \"name\": \"buffer\",\n          \"type\": \"char*\"\n        },\n        {\n          \"name\": \"size\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"fmt\",\n          \"type\": \"ImPlotDateFmt\"\n        },\n        {\n          \"name\": \"use_iso_8601\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImPlotTime& t,char* buffer,int size,ImPlotDateFmt fmt,bool use_iso_8601)\",\n      \"call_args\": \"(t,buffer,size,fmt,use_iso_8601)\",\n      \"cimguiname\": \"ImPlot_FormatDate\",\n      \"defaults\": {},\n      \"funcname\": \"FormatDate\",\n      \"location\": \"implot_internal:1588\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_FormatDate\",\n      \"ret\": \"int\",\n      \"signature\": \"(const ImPlotTime,char*,int,ImPlotDateFmt,bool)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_FormatDateTime\": [\n    {\n      \"args\": \"(const ImPlotTime t,char* buffer,int size,ImPlotDateTimeSpec fmt)\",\n      \"argsT\": [\n        {\n          \"name\": \"t\",\n          \"type\": \"const ImPlotTime\"\n        },\n        {\n          \"name\": \"buffer\",\n          \"type\": \"char*\"\n        },\n        {\n          \"name\": \"size\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"fmt\",\n          \"type\": \"ImPlotDateTimeSpec\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImPlotTime& t,char* buffer,int size,ImPlotDateTimeSpec fmt)\",\n      \"call_args\": \"(t,buffer,size,fmt)\",\n      \"cimguiname\": \"ImPlot_FormatDateTime\",\n      \"defaults\": {},\n      \"funcname\": \"FormatDateTime\",\n      \"location\": \"implot_internal:1590\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_FormatDateTime\",\n      \"ret\": \"int\",\n      \"signature\": \"(const ImPlotTime,char*,int,ImPlotDateTimeSpec)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_FormatTime\": [\n    {\n      \"args\": \"(const ImPlotTime t,char* buffer,int size,ImPlotTimeFmt fmt,bool use_24_hr_clk)\",\n      \"argsT\": [\n        {\n          \"name\": \"t\",\n          \"type\": \"const ImPlotTime\"\n        },\n        {\n          \"name\": \"buffer\",\n          \"type\": \"char*\"\n        },\n        {\n          \"name\": \"size\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"fmt\",\n          \"type\": \"ImPlotTimeFmt\"\n        },\n        {\n          \"name\": \"use_24_hr_clk\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImPlotTime& t,char* buffer,int size,ImPlotTimeFmt fmt,bool use_24_hr_clk)\",\n      \"call_args\": \"(t,buffer,size,fmt,use_24_hr_clk)\",\n      \"cimguiname\": \"ImPlot_FormatTime\",\n      \"defaults\": {},\n      \"funcname\": \"FormatTime\",\n      \"location\": \"implot_internal:1586\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_FormatTime\",\n      \"ret\": \"int\",\n      \"signature\": \"(const ImPlotTime,char*,int,ImPlotTimeFmt,bool)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_Formatter_Default\": [\n    {\n      \"args\": \"(double value,char* buff,int size,void* data)\",\n      \"argsT\": [\n        {\n          \"name\": \"value\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"buff\",\n          \"type\": \"char*\"\n        },\n        {\n          \"name\": \"size\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"data\",\n          \"type\": \"void*\"\n        }\n      ],\n      \"argsoriginal\": \"(double value,char* buff,int size,void* data)\",\n      \"call_args\": \"(value,buff,size,data)\",\n      \"cimguiname\": \"ImPlot_Formatter_Default\",\n      \"defaults\": {},\n      \"funcname\": \"Formatter_Default\",\n      \"location\": \"implot_internal:1635\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_Formatter_Default\",\n      \"ret\": \"int\",\n      \"signature\": \"(double,char*,int,void*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_Formatter_Logit\": [\n    {\n      \"args\": \"(double value,char* buff,int size,void* noname1)\",\n      \"argsT\": [\n        {\n          \"name\": \"value\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"buff\",\n          \"type\": \"char*\"\n        },\n        {\n          \"name\": \"size\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"noname1\",\n          \"type\": \"void*\"\n        }\n      ],\n      \"argsoriginal\": \"(double value,char* buff,int size,void*)\",\n      \"call_args\": \"(value,buff,size,noname1)\",\n      \"cimguiname\": \"ImPlot_Formatter_Logit\",\n      \"defaults\": {},\n      \"funcname\": \"Formatter_Logit\",\n      \"location\": \"implot_internal:1640\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_Formatter_Logit\",\n      \"ret\": \"int\",\n      \"signature\": \"(double,char*,int,void*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_Formatter_Time\": [\n    {\n      \"args\": \"(double noname1,char* buff,int size,void* data)\",\n      \"argsT\": [\n        {\n          \"name\": \"noname1\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"buff\",\n          \"type\": \"char*\"\n        },\n        {\n          \"name\": \"size\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"data\",\n          \"type\": \"void*\"\n        }\n      ],\n      \"argsoriginal\": \"(double,char* buff,int size,void* data)\",\n      \"call_args\": \"(noname1,buff,size,data)\",\n      \"cimguiname\": \"ImPlot_Formatter_Time\",\n      \"defaults\": {},\n      \"funcname\": \"Formatter_Time\",\n      \"location\": \"implot_internal:1656\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_Formatter_Time\",\n      \"ret\": \"int\",\n      \"signature\": \"(double,char*,int,void*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_GetAutoColor\": [\n    {\n      \"args\": \"(ImVec4 *pOut,ImPlotCol idx)\",\n      \"argsT\": [\n        {\n          \"name\": \"pOut\",\n          \"type\": \"ImVec4*\"\n        },\n        {\n          \"name\": \"idx\",\n          \"type\": \"ImPlotCol\"\n        }\n      ],\n      \"argsoriginal\": \"(ImPlotCol idx)\",\n      \"call_args\": \"(idx)\",\n      \"cimguiname\": \"ImPlot_GetAutoColor\",\n      \"defaults\": {},\n      \"funcname\": \"GetAutoColor\",\n      \"location\": \"implot_internal:1448\",\n      \"namespace\": \"ImPlot\",\n      \"nonUDT\": 1,\n      \"ov_cimguiname\": \"ImPlot_GetAutoColor\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImPlotCol)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_GetColormapColor\": [\n    {\n      \"args\": \"(ImVec4 *pOut,int idx,ImPlotColormap cmap)\",\n      \"argsT\": [\n        {\n          \"name\": \"pOut\",\n          \"type\": \"ImVec4*\"\n        },\n        {\n          \"name\": \"idx\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"cmap\",\n          \"type\": \"ImPlotColormap\"\n        }\n      ],\n      \"argsoriginal\": \"(int idx,ImPlotColormap cmap=-1)\",\n      \"call_args\": \"(idx,cmap)\",\n      \"cimguiname\": \"ImPlot_GetColormapColor\",\n      \"defaults\": {\n        \"cmap\": \"-1\"\n      },\n      \"funcname\": \"GetColormapColor\",\n      \"location\": \"implot:1169\",\n      \"namespace\": \"ImPlot\",\n      \"nonUDT\": 1,\n      \"ov_cimguiname\": \"ImPlot_GetColormapColor\",\n      \"ret\": \"void\",\n      \"signature\": \"(int,ImPlotColormap)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_GetColormapColorU32\": [\n    {\n      \"args\": \"(int idx,ImPlotColormap cmap)\",\n      \"argsT\": [\n        {\n          \"name\": \"idx\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"cmap\",\n          \"type\": \"ImPlotColormap\"\n        }\n      ],\n      \"argsoriginal\": \"(int idx,ImPlotColormap cmap)\",\n      \"call_args\": \"(idx,cmap)\",\n      \"cimguiname\": \"ImPlot_GetColormapColorU32\",\n      \"defaults\": {},\n      \"funcname\": \"GetColormapColorU32\",\n      \"location\": \"implot_internal:1479\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_GetColormapColorU32\",\n      \"ret\": \"ImU32\",\n      \"signature\": \"(int,ImPlotColormap)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_GetColormapCount\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImPlot_GetColormapCount\",\n      \"defaults\": {},\n      \"funcname\": \"GetColormapCount\",\n      \"location\": \"implot:1146\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_GetColormapCount\",\n      \"ret\": \"int\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_GetColormapIndex\": [\n    {\n      \"args\": \"(const char* name)\",\n      \"argsT\": [\n        {\n          \"name\": \"name\",\n          \"type\": \"const char*\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* name)\",\n      \"call_args\": \"(name)\",\n      \"cimguiname\": \"ImPlot_GetColormapIndex\",\n      \"defaults\": {},\n      \"funcname\": \"GetColormapIndex\",\n      \"location\": \"implot:1150\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_GetColormapIndex\",\n      \"ret\": \"ImPlotColormap\",\n      \"signature\": \"(const char*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_GetColormapName\": [\n    {\n      \"args\": \"(ImPlotColormap cmap)\",\n      \"argsT\": [\n        {\n          \"name\": \"cmap\",\n          \"type\": \"ImPlotColormap\"\n        }\n      ],\n      \"argsoriginal\": \"(ImPlotColormap cmap)\",\n      \"call_args\": \"(cmap)\",\n      \"cimguiname\": \"ImPlot_GetColormapName\",\n      \"defaults\": {},\n      \"funcname\": \"GetColormapName\",\n      \"location\": \"implot:1148\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_GetColormapName\",\n      \"ret\": \"const char*\",\n      \"signature\": \"(ImPlotColormap)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_GetColormapSize\": [\n    {\n      \"args\": \"(ImPlotColormap cmap)\",\n      \"argsT\": [\n        {\n          \"name\": \"cmap\",\n          \"type\": \"ImPlotColormap\"\n        }\n      ],\n      \"argsoriginal\": \"(ImPlotColormap cmap=-1)\",\n      \"call_args\": \"(cmap)\",\n      \"cimguiname\": \"ImPlot_GetColormapSize\",\n      \"defaults\": {\n        \"cmap\": \"-1\"\n      },\n      \"funcname\": \"GetColormapSize\",\n      \"location\": \"implot:1167\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_GetColormapSize\",\n      \"ret\": \"int\",\n      \"signature\": \"(ImPlotColormap)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_GetCurrentContext\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImPlot_GetCurrentContext\",\n      \"defaults\": {},\n      \"funcname\": \"GetCurrentContext\",\n      \"location\": \"implot:596\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_GetCurrentContext\",\n      \"ret\": \"ImPlotContext*\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_GetCurrentItem\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImPlot_GetCurrentItem\",\n      \"defaults\": {},\n      \"funcname\": \"GetCurrentItem\",\n      \"location\": \"implot_internal:1337\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_GetCurrentItem\",\n      \"ret\": \"ImPlotItem*\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_GetCurrentPlot\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImPlot_GetCurrentPlot\",\n      \"defaults\": {},\n      \"funcname\": \"GetCurrentPlot\",\n      \"location\": \"implot_internal:1282\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_GetCurrentPlot\",\n      \"ret\": \"ImPlotPlot*\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_GetDaysInMonth\": [\n    {\n      \"args\": \"(int year,int month)\",\n      \"argsT\": [\n        {\n          \"name\": \"year\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"month\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(int year,int month)\",\n      \"call_args\": \"(year,month)\",\n      \"cimguiname\": \"ImPlot_GetDaysInMonth\",\n      \"defaults\": {},\n      \"funcname\": \"GetDaysInMonth\",\n      \"location\": \"implot_internal:1550\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_GetDaysInMonth\",\n      \"ret\": \"int\",\n      \"signature\": \"(int,int)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_GetGmtTime\": [\n    {\n      \"args\": \"(const ImPlotTime t,tm* ptm)\",\n      \"argsT\": [\n        {\n          \"name\": \"t\",\n          \"type\": \"const ImPlotTime\"\n        },\n        {\n          \"name\": \"ptm\",\n          \"type\": \"tm*\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImPlotTime& t,tm* ptm)\",\n      \"call_args\": \"(t,ptm)\",\n      \"cimguiname\": \"ImPlot_GetGmtTime\",\n      \"defaults\": {},\n      \"funcname\": \"GetGmtTime\",\n      \"location\": \"implot_internal:1558\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_GetGmtTime\",\n      \"ret\": \"tm*\",\n      \"signature\": \"(const ImPlotTime,tm*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_GetInputMap\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImPlot_GetInputMap\",\n      \"defaults\": {},\n      \"funcname\": \"GetInputMap\",\n      \"location\": \"implot:1194\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_GetInputMap\",\n      \"ret\": \"ImPlotInputMap*\",\n      \"retref\": \"&\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_GetItem\": [\n    {\n      \"args\": \"(const char* label_id)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id)\",\n      \"call_args\": \"(label_id)\",\n      \"cimguiname\": \"ImPlot_GetItem\",\n      \"defaults\": {},\n      \"funcname\": \"GetItem\",\n      \"location\": \"implot_internal:1335\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_GetItem\",\n      \"ret\": \"ImPlotItem*\",\n      \"signature\": \"(const char*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_GetItemData\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImPlot_GetItemData\",\n      \"defaults\": {},\n      \"funcname\": \"GetItemData\",\n      \"location\": \"implot_internal:1441\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_GetItemData\",\n      \"ret\": \"const ImPlotNextItemData*\",\n      \"retref\": \"&\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_GetLastItemColor\": [\n    {\n      \"args\": \"(ImVec4 *pOut)\",\n      \"argsT\": [\n        {\n          \"name\": \"pOut\",\n          \"type\": \"ImVec4*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImPlot_GetLastItemColor\",\n      \"defaults\": {},\n      \"funcname\": \"GetLastItemColor\",\n      \"location\": \"implot:1116\",\n      \"namespace\": \"ImPlot\",\n      \"nonUDT\": 1,\n      \"ov_cimguiname\": \"ImPlot_GetLastItemColor\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_GetLocTime\": [\n    {\n      \"args\": \"(const ImPlotTime t,tm* ptm)\",\n      \"argsT\": [\n        {\n          \"name\": \"t\",\n          \"type\": \"const ImPlotTime\"\n        },\n        {\n          \"name\": \"ptm\",\n          \"type\": \"tm*\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImPlotTime& t,tm* ptm)\",\n      \"call_args\": \"(t,ptm)\",\n      \"cimguiname\": \"ImPlot_GetLocTime\",\n      \"defaults\": {},\n      \"funcname\": \"GetLocTime\",\n      \"location\": \"implot_internal:1563\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_GetLocTime\",\n      \"ret\": \"tm*\",\n      \"signature\": \"(const ImPlotTime,tm*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_GetLocationPos\": [\n    {\n      \"args\": \"(ImVec2 *pOut,const ImRect outer_rect,const ImVec2 inner_size,ImPlotLocation location,const ImVec2 pad)\",\n      \"argsT\": [\n        {\n          \"name\": \"pOut\",\n          \"type\": \"ImVec2*\"\n        },\n        {\n          \"name\": \"outer_rect\",\n          \"type\": \"const ImRect\"\n        },\n        {\n          \"name\": \"inner_size\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"location\",\n          \"type\": \"ImPlotLocation\"\n        },\n        {\n          \"name\": \"pad\",\n          \"type\": \"const ImVec2\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImRect& outer_rect,const ImVec2& inner_size,ImPlotLocation location,const ImVec2& pad=ImVec2(0,0))\",\n      \"call_args\": \"(outer_rect,inner_size,location,pad)\",\n      \"cimguiname\": \"ImPlot_GetLocationPos\",\n      \"defaults\": {\n        \"pad\": \"ImVec2(0,0)\"\n      },\n      \"funcname\": \"GetLocationPos\",\n      \"location\": \"implot_internal:1419\",\n      \"namespace\": \"ImPlot\",\n      \"nonUDT\": 1,\n      \"ov_cimguiname\": \"ImPlot_GetLocationPos\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImRect,const ImVec2,ImPlotLocation,const ImVec2)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_GetMarkerName\": [\n    {\n      \"args\": \"(ImPlotMarker idx)\",\n      \"argsT\": [\n        {\n          \"name\": \"idx\",\n          \"type\": \"ImPlotMarker\"\n        }\n      ],\n      \"argsoriginal\": \"(ImPlotMarker idx)\",\n      \"call_args\": \"(idx)\",\n      \"cimguiname\": \"ImPlot_GetMarkerName\",\n      \"defaults\": {},\n      \"funcname\": \"GetMarkerName\",\n      \"location\": \"implot:1121\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_GetMarkerName\",\n      \"ret\": \"const char*\",\n      \"signature\": \"(ImPlotMarker)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_GetPlot\": [\n    {\n      \"args\": \"(const char* title)\",\n      \"argsT\": [\n        {\n          \"name\": \"title\",\n          \"type\": \"const char*\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* title)\",\n      \"call_args\": \"(title)\",\n      \"cimguiname\": \"ImPlot_GetPlot\",\n      \"defaults\": {},\n      \"funcname\": \"GetPlot\",\n      \"location\": \"implot_internal:1280\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_GetPlot\",\n      \"ret\": \"ImPlotPlot*\",\n      \"signature\": \"(const char*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_GetPlotDrawList\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImPlot_GetPlotDrawList\",\n      \"defaults\": {},\n      \"funcname\": \"GetPlotDrawList\",\n      \"location\": \"implot:1211\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_GetPlotDrawList\",\n      \"ret\": \"ImDrawList*\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_GetPlotLimits\": [\n    {\n      \"args\": \"(ImAxis x_axis,ImAxis y_axis)\",\n      \"argsT\": [\n        {\n          \"name\": \"x_axis\",\n          \"type\": \"ImAxis\"\n        },\n        {\n          \"name\": \"y_axis\",\n          \"type\": \"ImAxis\"\n        }\n      ],\n      \"argsoriginal\": \"(ImAxis x_axis=-1,ImAxis y_axis=-1)\",\n      \"call_args\": \"(x_axis,y_axis)\",\n      \"cimguiname\": \"ImPlot_GetPlotLimits\",\n      \"defaults\": {\n        \"x_axis\": \"-1\",\n        \"y_axis\": \"-1\"\n      },\n      \"funcname\": \"GetPlotLimits\",\n      \"location\": \"implot:970\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_GetPlotLimits\",\n      \"ret\": \"ImPlotRect\",\n      \"signature\": \"(ImAxis,ImAxis)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_GetPlotMousePos\": [\n    {\n      \"args\": \"(ImPlotPoint *pOut,ImAxis x_axis,ImAxis y_axis)\",\n      \"argsT\": [\n        {\n          \"name\": \"pOut\",\n          \"type\": \"ImPlotPoint*\"\n        },\n        {\n          \"name\": \"x_axis\",\n          \"type\": \"ImAxis\"\n        },\n        {\n          \"name\": \"y_axis\",\n          \"type\": \"ImAxis\"\n        }\n      ],\n      \"argsoriginal\": \"(ImAxis x_axis=-1,ImAxis y_axis=-1)\",\n      \"call_args\": \"(x_axis,y_axis)\",\n      \"cimguiname\": \"ImPlot_GetPlotMousePos\",\n      \"defaults\": {\n        \"x_axis\": \"-1\",\n        \"y_axis\": \"-1\"\n      },\n      \"funcname\": \"GetPlotMousePos\",\n      \"location\": \"implot:968\",\n      \"namespace\": \"ImPlot\",\n      \"nonUDT\": 1,\n      \"ov_cimguiname\": \"ImPlot_GetPlotMousePos\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImAxis,ImAxis)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_GetPlotPos\": [\n    {\n      \"args\": \"(ImVec2 *pOut)\",\n      \"argsT\": [\n        {\n          \"name\": \"pOut\",\n          \"type\": \"ImVec2*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImPlot_GetPlotPos\",\n      \"defaults\": {},\n      \"funcname\": \"GetPlotPos\",\n      \"location\": \"implot:963\",\n      \"namespace\": \"ImPlot\",\n      \"nonUDT\": 1,\n      \"ov_cimguiname\": \"ImPlot_GetPlotPos\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_GetPlotSelection\": [\n    {\n      \"args\": \"(ImAxis x_axis,ImAxis y_axis)\",\n      \"argsT\": [\n        {\n          \"name\": \"x_axis\",\n          \"type\": \"ImAxis\"\n        },\n        {\n          \"name\": \"y_axis\",\n          \"type\": \"ImAxis\"\n        }\n      ],\n      \"argsoriginal\": \"(ImAxis x_axis=-1,ImAxis y_axis=-1)\",\n      \"call_args\": \"(x_axis,y_axis)\",\n      \"cimguiname\": \"ImPlot_GetPlotSelection\",\n      \"defaults\": {\n        \"x_axis\": \"-1\",\n        \"y_axis\": \"-1\"\n      },\n      \"funcname\": \"GetPlotSelection\",\n      \"location\": \"implot:982\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_GetPlotSelection\",\n      \"ret\": \"ImPlotRect\",\n      \"signature\": \"(ImAxis,ImAxis)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_GetPlotSize\": [\n    {\n      \"args\": \"(ImVec2 *pOut)\",\n      \"argsT\": [\n        {\n          \"name\": \"pOut\",\n          \"type\": \"ImVec2*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImPlot_GetPlotSize\",\n      \"defaults\": {},\n      \"funcname\": \"GetPlotSize\",\n      \"location\": \"implot:965\",\n      \"namespace\": \"ImPlot\",\n      \"nonUDT\": 1,\n      \"ov_cimguiname\": \"ImPlot_GetPlotSize\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_GetStyle\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImPlot_GetStyle\",\n      \"defaults\": {},\n      \"funcname\": \"GetStyle\",\n      \"location\": \"implot:1071\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_GetStyle\",\n      \"ret\": \"ImPlotStyle*\",\n      \"retref\": \"&\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_GetStyleColorName\": [\n    {\n      \"args\": \"(ImPlotCol idx)\",\n      \"argsT\": [\n        {\n          \"name\": \"idx\",\n          \"type\": \"ImPlotCol\"\n        }\n      ],\n      \"argsoriginal\": \"(ImPlotCol idx)\",\n      \"call_args\": \"(idx)\",\n      \"cimguiname\": \"ImPlot_GetStyleColorName\",\n      \"defaults\": {},\n      \"funcname\": \"GetStyleColorName\",\n      \"location\": \"implot:1119\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_GetStyleColorName\",\n      \"ret\": \"const char*\",\n      \"signature\": \"(ImPlotCol)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_GetStyleColorU32\": [\n    {\n      \"args\": \"(ImPlotCol idx)\",\n      \"argsT\": [\n        {\n          \"name\": \"idx\",\n          \"type\": \"ImPlotCol\"\n        }\n      ],\n      \"argsoriginal\": \"(ImPlotCol idx)\",\n      \"call_args\": \"(idx)\",\n      \"cimguiname\": \"ImPlot_GetStyleColorU32\",\n      \"defaults\": {},\n      \"funcname\": \"GetStyleColorU32\",\n      \"location\": \"implot_internal:1452\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_GetStyleColorU32\",\n      \"ret\": \"ImU32\",\n      \"signature\": \"(ImPlotCol)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_GetStyleColorVec4\": [\n    {\n      \"args\": \"(ImVec4 *pOut,ImPlotCol idx)\",\n      \"argsT\": [\n        {\n          \"name\": \"pOut\",\n          \"type\": \"ImVec4*\"\n        },\n        {\n          \"name\": \"idx\",\n          \"type\": \"ImPlotCol\"\n        }\n      ],\n      \"argsoriginal\": \"(ImPlotCol idx)\",\n      \"call_args\": \"(idx)\",\n      \"cimguiname\": \"ImPlot_GetStyleColorVec4\",\n      \"defaults\": {},\n      \"funcname\": \"GetStyleColorVec4\",\n      \"location\": \"implot_internal:1451\",\n      \"namespace\": \"ImPlot\",\n      \"nonUDT\": 1,\n      \"ov_cimguiname\": \"ImPlot_GetStyleColorVec4\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImPlotCol)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_GetYear\": [\n    {\n      \"args\": \"(const ImPlotTime t)\",\n      \"argsT\": [\n        {\n          \"name\": \"t\",\n          \"type\": \"const ImPlotTime\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImPlotTime& t)\",\n      \"call_args\": \"(t)\",\n      \"cimguiname\": \"ImPlot_GetYear\",\n      \"defaults\": {},\n      \"funcname\": \"GetYear\",\n      \"location\": \"implot_internal:1572\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_GetYear\",\n      \"ret\": \"int\",\n      \"signature\": \"(const ImPlotTime)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_HideNextItem\": [\n    {\n      \"args\": \"(bool hidden,ImPlotCond cond)\",\n      \"argsT\": [\n        {\n          \"name\": \"hidden\",\n          \"type\": \"bool\"\n        },\n        {\n          \"name\": \"cond\",\n          \"type\": \"ImPlotCond\"\n        }\n      ],\n      \"argsoriginal\": \"(bool hidden=true,ImPlotCond cond=ImPlotCond_Once)\",\n      \"call_args\": \"(hidden,cond)\",\n      \"cimguiname\": \"ImPlot_HideNextItem\",\n      \"defaults\": {\n        \"cond\": \"ImPlotCond_Once\",\n        \"hidden\": \"true\"\n      },\n      \"funcname\": \"HideNextItem\",\n      \"location\": \"implot:988\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_HideNextItem\",\n      \"ret\": \"void\",\n      \"signature\": \"(bool,ImPlotCond)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_ImAlmostEqual\": [\n    {\n      \"args\": \"(double v1,double v2,int ulp)\",\n      \"argsT\": [\n        {\n          \"name\": \"v1\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"v2\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"ulp\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(double v1,double v2,int ulp=2)\",\n      \"call_args\": \"(v1,v2,ulp)\",\n      \"cimguiname\": \"ImPlot_ImAlmostEqual\",\n      \"defaults\": {\n        \"ulp\": \"2\"\n      },\n      \"funcname\": \"ImAlmostEqual\",\n      \"location\": \"implot_internal:139\",\n      \"ov_cimguiname\": \"ImPlot_ImAlmostEqual\",\n      \"ret\": \"bool\",\n      \"signature\": \"(double,double,int)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_ImAlphaU32\": [\n    {\n      \"args\": \"(ImU32 col,float alpha)\",\n      \"argsT\": [\n        {\n          \"name\": \"col\",\n          \"type\": \"ImU32\"\n        },\n        {\n          \"name\": \"alpha\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(ImU32 col,float alpha)\",\n      \"call_args\": \"(col,alpha)\",\n      \"cimguiname\": \"ImPlot_ImAlphaU32\",\n      \"defaults\": {},\n      \"funcname\": \"ImAlphaU32\",\n      \"location\": \"implot_internal:219\",\n      \"ov_cimguiname\": \"ImPlot_ImAlphaU32\",\n      \"ret\": \"ImU32\",\n      \"signature\": \"(ImU32,float)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_ImAsinh\": [\n    {\n      \"args\": \"(float x)\",\n      \"argsT\": [\n        {\n          \"name\": \"x\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(float x)\",\n      \"call_args\": \"(x)\",\n      \"cimguiname\": \"ImPlot_ImAsinh\",\n      \"defaults\": {},\n      \"funcname\": \"ImAsinh\",\n      \"location\": \"implot_internal:110\",\n      \"ov_cimguiname\": \"ImPlot_ImAsinh_Float\",\n      \"ret\": \"float\",\n      \"signature\": \"(float)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(double x)\",\n      \"argsT\": [\n        {\n          \"name\": \"x\",\n          \"type\": \"double\"\n        }\n      ],\n      \"argsoriginal\": \"(double x)\",\n      \"call_args\": \"(x)\",\n      \"cimguiname\": \"ImPlot_ImAsinh\",\n      \"defaults\": {},\n      \"funcname\": \"ImAsinh\",\n      \"location\": \"implot_internal:111\",\n      \"ov_cimguiname\": \"ImPlot_ImAsinh_double\",\n      \"ret\": \"double\",\n      \"signature\": \"(double)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_ImConstrainInf\": [\n    {\n      \"args\": \"(double val)\",\n      \"argsT\": [\n        {\n          \"name\": \"val\",\n          \"type\": \"double\"\n        }\n      ],\n      \"argsoriginal\": \"(double val)\",\n      \"call_args\": \"(val)\",\n      \"cimguiname\": \"ImPlot_ImConstrainInf\",\n      \"defaults\": {},\n      \"funcname\": \"ImConstrainInf\",\n      \"location\": \"implot_internal:133\",\n      \"ov_cimguiname\": \"ImPlot_ImConstrainInf\",\n      \"ret\": \"double\",\n      \"signature\": \"(double)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_ImConstrainLog\": [\n    {\n      \"args\": \"(double val)\",\n      \"argsT\": [\n        {\n          \"name\": \"val\",\n          \"type\": \"double\"\n        }\n      ],\n      \"argsoriginal\": \"(double val)\",\n      \"call_args\": \"(val)\",\n      \"cimguiname\": \"ImPlot_ImConstrainLog\",\n      \"defaults\": {},\n      \"funcname\": \"ImConstrainLog\",\n      \"location\": \"implot_internal:135\",\n      \"ov_cimguiname\": \"ImPlot_ImConstrainLog\",\n      \"ret\": \"double\",\n      \"signature\": \"(double)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_ImConstrainNan\": [\n    {\n      \"args\": \"(double val)\",\n      \"argsT\": [\n        {\n          \"name\": \"val\",\n          \"type\": \"double\"\n        }\n      ],\n      \"argsoriginal\": \"(double val)\",\n      \"call_args\": \"(val)\",\n      \"cimguiname\": \"ImPlot_ImConstrainNan\",\n      \"defaults\": {},\n      \"funcname\": \"ImConstrainNan\",\n      \"location\": \"implot_internal:131\",\n      \"ov_cimguiname\": \"ImPlot_ImConstrainNan\",\n      \"ret\": \"double\",\n      \"signature\": \"(double)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_ImConstrainTime\": [\n    {\n      \"args\": \"(double val)\",\n      \"argsT\": [\n        {\n          \"name\": \"val\",\n          \"type\": \"double\"\n        }\n      ],\n      \"argsoriginal\": \"(double val)\",\n      \"call_args\": \"(val)\",\n      \"cimguiname\": \"ImPlot_ImConstrainTime\",\n      \"defaults\": {},\n      \"funcname\": \"ImConstrainTime\",\n      \"location\": \"implot_internal:137\",\n      \"ov_cimguiname\": \"ImPlot_ImConstrainTime\",\n      \"ret\": \"double\",\n      \"signature\": \"(double)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_ImLerpU32\": [\n    {\n      \"args\": \"(const ImU32* colors,int size,float t)\",\n      \"argsT\": [\n        {\n          \"name\": \"colors\",\n          \"type\": \"const ImU32*\"\n        },\n        {\n          \"name\": \"size\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"t\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImU32* colors,int size,float t)\",\n      \"call_args\": \"(colors,size,t)\",\n      \"cimguiname\": \"ImPlot_ImLerpU32\",\n      \"defaults\": {},\n      \"funcname\": \"ImLerpU32\",\n      \"location\": \"implot_internal:206\",\n      \"ov_cimguiname\": \"ImPlot_ImLerpU32\",\n      \"ret\": \"ImU32\",\n      \"signature\": \"(const ImU32*,int,float)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_ImLog10\": [\n    {\n      \"args\": \"(float x)\",\n      \"argsT\": [\n        {\n          \"name\": \"x\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(float x)\",\n      \"call_args\": \"(x)\",\n      \"cimguiname\": \"ImPlot_ImLog10\",\n      \"defaults\": {},\n      \"funcname\": \"ImLog10\",\n      \"location\": \"implot_internal:106\",\n      \"ov_cimguiname\": \"ImPlot_ImLog10_Float\",\n      \"ret\": \"float\",\n      \"signature\": \"(float)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(double x)\",\n      \"argsT\": [\n        {\n          \"name\": \"x\",\n          \"type\": \"double\"\n        }\n      ],\n      \"argsoriginal\": \"(double x)\",\n      \"call_args\": \"(x)\",\n      \"cimguiname\": \"ImPlot_ImLog10\",\n      \"defaults\": {},\n      \"funcname\": \"ImLog10\",\n      \"location\": \"implot_internal:107\",\n      \"ov_cimguiname\": \"ImPlot_ImLog10_double\",\n      \"ret\": \"double\",\n      \"signature\": \"(double)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_ImMaxArray\": [\n    {\n      \"args\": \"(const float* values,int count)\",\n      \"argsT\": [\n        {\n          \"name\": \"values\",\n          \"type\": \"const float*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const float* values,int count)\",\n      \"call_args\": \"(values,count)\",\n      \"cimguiname\": \"ImPlot_ImMaxArray\",\n      \"defaults\": {},\n      \"funcname\": \"ImMaxArray\",\n      \"location\": \"implot_internal:144\",\n      \"ov_cimguiname\": \"ImPlot_ImMaxArray_FloatPtr\",\n      \"ret\": \"float\",\n      \"signature\": \"(const float*,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const double* values,int count)\",\n      \"argsT\": [\n        {\n          \"name\": \"values\",\n          \"type\": \"const double*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const double* values,int count)\",\n      \"call_args\": \"(values,count)\",\n      \"cimguiname\": \"ImPlot_ImMaxArray\",\n      \"defaults\": {},\n      \"funcname\": \"ImMaxArray\",\n      \"location\": \"implot_internal:144\",\n      \"ov_cimguiname\": \"ImPlot_ImMaxArray_doublePtr\",\n      \"ret\": \"double\",\n      \"signature\": \"(const double*,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const ImS8* values,int count)\",\n      \"argsT\": [\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImS8*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImS8* values,int count)\",\n      \"call_args\": \"(values,count)\",\n      \"cimguiname\": \"ImPlot_ImMaxArray\",\n      \"defaults\": {},\n      \"funcname\": \"ImMaxArray\",\n      \"location\": \"implot_internal:144\",\n      \"ov_cimguiname\": \"ImPlot_ImMaxArray_S8Ptr\",\n      \"ret\": \"ImS8\",\n      \"signature\": \"(const ImS8*,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const ImU8* values,int count)\",\n      \"argsT\": [\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImU8*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImU8* values,int count)\",\n      \"call_args\": \"(values,count)\",\n      \"cimguiname\": \"ImPlot_ImMaxArray\",\n      \"defaults\": {},\n      \"funcname\": \"ImMaxArray\",\n      \"location\": \"implot_internal:144\",\n      \"ov_cimguiname\": \"ImPlot_ImMaxArray_U8Ptr\",\n      \"ret\": \"ImU8\",\n      \"signature\": \"(const ImU8*,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const ImS16* values,int count)\",\n      \"argsT\": [\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImS16*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImS16* values,int count)\",\n      \"call_args\": \"(values,count)\",\n      \"cimguiname\": \"ImPlot_ImMaxArray\",\n      \"defaults\": {},\n      \"funcname\": \"ImMaxArray\",\n      \"location\": \"implot_internal:144\",\n      \"ov_cimguiname\": \"ImPlot_ImMaxArray_S16Ptr\",\n      \"ret\": \"ImS16\",\n      \"signature\": \"(const ImS16*,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const ImU16* values,int count)\",\n      \"argsT\": [\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImU16*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImU16* values,int count)\",\n      \"call_args\": \"(values,count)\",\n      \"cimguiname\": \"ImPlot_ImMaxArray\",\n      \"defaults\": {},\n      \"funcname\": \"ImMaxArray\",\n      \"location\": \"implot_internal:144\",\n      \"ov_cimguiname\": \"ImPlot_ImMaxArray_U16Ptr\",\n      \"ret\": \"ImU16\",\n      \"signature\": \"(const ImU16*,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const ImS32* values,int count)\",\n      \"argsT\": [\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImS32*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImS32* values,int count)\",\n      \"call_args\": \"(values,count)\",\n      \"cimguiname\": \"ImPlot_ImMaxArray\",\n      \"defaults\": {},\n      \"funcname\": \"ImMaxArray\",\n      \"location\": \"implot_internal:144\",\n      \"ov_cimguiname\": \"ImPlot_ImMaxArray_S32Ptr\",\n      \"ret\": \"ImS32\",\n      \"signature\": \"(const ImS32*,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const ImU32* values,int count)\",\n      \"argsT\": [\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImU32*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImU32* values,int count)\",\n      \"call_args\": \"(values,count)\",\n      \"cimguiname\": \"ImPlot_ImMaxArray\",\n      \"defaults\": {},\n      \"funcname\": \"ImMaxArray\",\n      \"location\": \"implot_internal:144\",\n      \"ov_cimguiname\": \"ImPlot_ImMaxArray_U32Ptr\",\n      \"ret\": \"ImU32\",\n      \"signature\": \"(const ImU32*,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const ImS64* values,int count)\",\n      \"argsT\": [\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImS64*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImS64* values,int count)\",\n      \"call_args\": \"(values,count)\",\n      \"cimguiname\": \"ImPlot_ImMaxArray\",\n      \"defaults\": {},\n      \"funcname\": \"ImMaxArray\",\n      \"location\": \"implot_internal:144\",\n      \"ov_cimguiname\": \"ImPlot_ImMaxArray_S64Ptr\",\n      \"ret\": \"ImS64\",\n      \"signature\": \"(const ImS64*,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const ImU64* values,int count)\",\n      \"argsT\": [\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImU64*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImU64* values,int count)\",\n      \"call_args\": \"(values,count)\",\n      \"cimguiname\": \"ImPlot_ImMaxArray\",\n      \"defaults\": {},\n      \"funcname\": \"ImMaxArray\",\n      \"location\": \"implot_internal:144\",\n      \"ov_cimguiname\": \"ImPlot_ImMaxArray_U64Ptr\",\n      \"ret\": \"ImU64\",\n      \"signature\": \"(const ImU64*,int)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_ImMean\": [\n    {\n      \"args\": \"(const float* values,int count)\",\n      \"argsT\": [\n        {\n          \"name\": \"values\",\n          \"type\": \"const float*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const float* values,int count)\",\n      \"call_args\": \"(values,count)\",\n      \"cimguiname\": \"ImPlot_ImMean\",\n      \"defaults\": {},\n      \"funcname\": \"ImMean\",\n      \"location\": \"implot_internal:165\",\n      \"ov_cimguiname\": \"ImPlot_ImMean_FloatPtr\",\n      \"ret\": \"double\",\n      \"signature\": \"(const float*,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const double* values,int count)\",\n      \"argsT\": [\n        {\n          \"name\": \"values\",\n          \"type\": \"const double*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const double* values,int count)\",\n      \"call_args\": \"(values,count)\",\n      \"cimguiname\": \"ImPlot_ImMean\",\n      \"defaults\": {},\n      \"funcname\": \"ImMean\",\n      \"location\": \"implot_internal:165\",\n      \"ov_cimguiname\": \"ImPlot_ImMean_doublePtr\",\n      \"ret\": \"double\",\n      \"signature\": \"(const double*,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const ImS8* values,int count)\",\n      \"argsT\": [\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImS8*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImS8* values,int count)\",\n      \"call_args\": \"(values,count)\",\n      \"cimguiname\": \"ImPlot_ImMean\",\n      \"defaults\": {},\n      \"funcname\": \"ImMean\",\n      \"location\": \"implot_internal:165\",\n      \"ov_cimguiname\": \"ImPlot_ImMean_S8Ptr\",\n      \"ret\": \"double\",\n      \"signature\": \"(const ImS8*,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const ImU8* values,int count)\",\n      \"argsT\": [\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImU8*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImU8* values,int count)\",\n      \"call_args\": \"(values,count)\",\n      \"cimguiname\": \"ImPlot_ImMean\",\n      \"defaults\": {},\n      \"funcname\": \"ImMean\",\n      \"location\": \"implot_internal:165\",\n      \"ov_cimguiname\": \"ImPlot_ImMean_U8Ptr\",\n      \"ret\": \"double\",\n      \"signature\": \"(const ImU8*,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const ImS16* values,int count)\",\n      \"argsT\": [\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImS16*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImS16* values,int count)\",\n      \"call_args\": \"(values,count)\",\n      \"cimguiname\": \"ImPlot_ImMean\",\n      \"defaults\": {},\n      \"funcname\": \"ImMean\",\n      \"location\": \"implot_internal:165\",\n      \"ov_cimguiname\": \"ImPlot_ImMean_S16Ptr\",\n      \"ret\": \"double\",\n      \"signature\": \"(const ImS16*,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const ImU16* values,int count)\",\n      \"argsT\": [\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImU16*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImU16* values,int count)\",\n      \"call_args\": \"(values,count)\",\n      \"cimguiname\": \"ImPlot_ImMean\",\n      \"defaults\": {},\n      \"funcname\": \"ImMean\",\n      \"location\": \"implot_internal:165\",\n      \"ov_cimguiname\": \"ImPlot_ImMean_U16Ptr\",\n      \"ret\": \"double\",\n      \"signature\": \"(const ImU16*,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const ImS32* values,int count)\",\n      \"argsT\": [\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImS32*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImS32* values,int count)\",\n      \"call_args\": \"(values,count)\",\n      \"cimguiname\": \"ImPlot_ImMean\",\n      \"defaults\": {},\n      \"funcname\": \"ImMean\",\n      \"location\": \"implot_internal:165\",\n      \"ov_cimguiname\": \"ImPlot_ImMean_S32Ptr\",\n      \"ret\": \"double\",\n      \"signature\": \"(const ImS32*,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const ImU32* values,int count)\",\n      \"argsT\": [\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImU32*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImU32* values,int count)\",\n      \"call_args\": \"(values,count)\",\n      \"cimguiname\": \"ImPlot_ImMean\",\n      \"defaults\": {},\n      \"funcname\": \"ImMean\",\n      \"location\": \"implot_internal:165\",\n      \"ov_cimguiname\": \"ImPlot_ImMean_U32Ptr\",\n      \"ret\": \"double\",\n      \"signature\": \"(const ImU32*,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const ImS64* values,int count)\",\n      \"argsT\": [\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImS64*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImS64* values,int count)\",\n      \"call_args\": \"(values,count)\",\n      \"cimguiname\": \"ImPlot_ImMean\",\n      \"defaults\": {},\n      \"funcname\": \"ImMean\",\n      \"location\": \"implot_internal:165\",\n      \"ov_cimguiname\": \"ImPlot_ImMean_S64Ptr\",\n      \"ret\": \"double\",\n      \"signature\": \"(const ImS64*,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const ImU64* values,int count)\",\n      \"argsT\": [\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImU64*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImU64* values,int count)\",\n      \"call_args\": \"(values,count)\",\n      \"cimguiname\": \"ImPlot_ImMean\",\n      \"defaults\": {},\n      \"funcname\": \"ImMean\",\n      \"location\": \"implot_internal:165\",\n      \"ov_cimguiname\": \"ImPlot_ImMean_U64Ptr\",\n      \"ret\": \"double\",\n      \"signature\": \"(const ImU64*,int)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_ImMinArray\": [\n    {\n      \"args\": \"(const float* values,int count)\",\n      \"argsT\": [\n        {\n          \"name\": \"values\",\n          \"type\": \"const float*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const float* values,int count)\",\n      \"call_args\": \"(values,count)\",\n      \"cimguiname\": \"ImPlot_ImMinArray\",\n      \"defaults\": {},\n      \"funcname\": \"ImMinArray\",\n      \"location\": \"implot_internal:141\",\n      \"ov_cimguiname\": \"ImPlot_ImMinArray_FloatPtr\",\n      \"ret\": \"float\",\n      \"signature\": \"(const float*,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const double* values,int count)\",\n      \"argsT\": [\n        {\n          \"name\": \"values\",\n          \"type\": \"const double*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const double* values,int count)\",\n      \"call_args\": \"(values,count)\",\n      \"cimguiname\": \"ImPlot_ImMinArray\",\n      \"defaults\": {},\n      \"funcname\": \"ImMinArray\",\n      \"location\": \"implot_internal:141\",\n      \"ov_cimguiname\": \"ImPlot_ImMinArray_doublePtr\",\n      \"ret\": \"double\",\n      \"signature\": \"(const double*,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const ImS8* values,int count)\",\n      \"argsT\": [\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImS8*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImS8* values,int count)\",\n      \"call_args\": \"(values,count)\",\n      \"cimguiname\": \"ImPlot_ImMinArray\",\n      \"defaults\": {},\n      \"funcname\": \"ImMinArray\",\n      \"location\": \"implot_internal:141\",\n      \"ov_cimguiname\": \"ImPlot_ImMinArray_S8Ptr\",\n      \"ret\": \"ImS8\",\n      \"signature\": \"(const ImS8*,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const ImU8* values,int count)\",\n      \"argsT\": [\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImU8*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImU8* values,int count)\",\n      \"call_args\": \"(values,count)\",\n      \"cimguiname\": \"ImPlot_ImMinArray\",\n      \"defaults\": {},\n      \"funcname\": \"ImMinArray\",\n      \"location\": \"implot_internal:141\",\n      \"ov_cimguiname\": \"ImPlot_ImMinArray_U8Ptr\",\n      \"ret\": \"ImU8\",\n      \"signature\": \"(const ImU8*,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const ImS16* values,int count)\",\n      \"argsT\": [\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImS16*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImS16* values,int count)\",\n      \"call_args\": \"(values,count)\",\n      \"cimguiname\": \"ImPlot_ImMinArray\",\n      \"defaults\": {},\n      \"funcname\": \"ImMinArray\",\n      \"location\": \"implot_internal:141\",\n      \"ov_cimguiname\": \"ImPlot_ImMinArray_S16Ptr\",\n      \"ret\": \"ImS16\",\n      \"signature\": \"(const ImS16*,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const ImU16* values,int count)\",\n      \"argsT\": [\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImU16*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImU16* values,int count)\",\n      \"call_args\": \"(values,count)\",\n      \"cimguiname\": \"ImPlot_ImMinArray\",\n      \"defaults\": {},\n      \"funcname\": \"ImMinArray\",\n      \"location\": \"implot_internal:141\",\n      \"ov_cimguiname\": \"ImPlot_ImMinArray_U16Ptr\",\n      \"ret\": \"ImU16\",\n      \"signature\": \"(const ImU16*,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const ImS32* values,int count)\",\n      \"argsT\": [\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImS32*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImS32* values,int count)\",\n      \"call_args\": \"(values,count)\",\n      \"cimguiname\": \"ImPlot_ImMinArray\",\n      \"defaults\": {},\n      \"funcname\": \"ImMinArray\",\n      \"location\": \"implot_internal:141\",\n      \"ov_cimguiname\": \"ImPlot_ImMinArray_S32Ptr\",\n      \"ret\": \"ImS32\",\n      \"signature\": \"(const ImS32*,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const ImU32* values,int count)\",\n      \"argsT\": [\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImU32*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImU32* values,int count)\",\n      \"call_args\": \"(values,count)\",\n      \"cimguiname\": \"ImPlot_ImMinArray\",\n      \"defaults\": {},\n      \"funcname\": \"ImMinArray\",\n      \"location\": \"implot_internal:141\",\n      \"ov_cimguiname\": \"ImPlot_ImMinArray_U32Ptr\",\n      \"ret\": \"ImU32\",\n      \"signature\": \"(const ImU32*,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const ImS64* values,int count)\",\n      \"argsT\": [\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImS64*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImS64* values,int count)\",\n      \"call_args\": \"(values,count)\",\n      \"cimguiname\": \"ImPlot_ImMinArray\",\n      \"defaults\": {},\n      \"funcname\": \"ImMinArray\",\n      \"location\": \"implot_internal:141\",\n      \"ov_cimguiname\": \"ImPlot_ImMinArray_S64Ptr\",\n      \"ret\": \"ImS64\",\n      \"signature\": \"(const ImS64*,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const ImU64* values,int count)\",\n      \"argsT\": [\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImU64*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImU64* values,int count)\",\n      \"call_args\": \"(values,count)\",\n      \"cimguiname\": \"ImPlot_ImMinArray\",\n      \"defaults\": {},\n      \"funcname\": \"ImMinArray\",\n      \"location\": \"implot_internal:141\",\n      \"ov_cimguiname\": \"ImPlot_ImMinArray_U64Ptr\",\n      \"ret\": \"ImU64\",\n      \"signature\": \"(const ImU64*,int)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_ImMinMaxArray\": [\n    {\n      \"args\": \"(const float* values,int count,float* min_out,float* max_out)\",\n      \"argsT\": [\n        {\n          \"name\": \"values\",\n          \"type\": \"const float*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"min_out\",\n          \"type\": \"float*\"\n        },\n        {\n          \"name\": \"max_out\",\n          \"type\": \"float*\"\n        }\n      ],\n      \"argsoriginal\": \"(const float* values,int count,float* min_out,float* max_out)\",\n      \"call_args\": \"(values,count,min_out,max_out)\",\n      \"cimguiname\": \"ImPlot_ImMinMaxArray\",\n      \"defaults\": {},\n      \"funcname\": \"ImMinMaxArray\",\n      \"location\": \"implot_internal:147\",\n      \"ov_cimguiname\": \"ImPlot_ImMinMaxArray_FloatPtr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const float*,int,float*,float*)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const double* values,int count,double* min_out,double* max_out)\",\n      \"argsT\": [\n        {\n          \"name\": \"values\",\n          \"type\": \"const double*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"min_out\",\n          \"type\": \"double*\"\n        },\n        {\n          \"name\": \"max_out\",\n          \"type\": \"double*\"\n        }\n      ],\n      \"argsoriginal\": \"(const double* values,int count,double* min_out,double* max_out)\",\n      \"call_args\": \"(values,count,min_out,max_out)\",\n      \"cimguiname\": \"ImPlot_ImMinMaxArray\",\n      \"defaults\": {},\n      \"funcname\": \"ImMinMaxArray\",\n      \"location\": \"implot_internal:147\",\n      \"ov_cimguiname\": \"ImPlot_ImMinMaxArray_doublePtr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const double*,int,double*,double*)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const ImS8* values,int count,ImS8* min_out,ImS8* max_out)\",\n      \"argsT\": [\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImS8*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"min_out\",\n          \"type\": \"ImS8*\"\n        },\n        {\n          \"name\": \"max_out\",\n          \"type\": \"ImS8*\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImS8* values,int count,ImS8* min_out,ImS8* max_out)\",\n      \"call_args\": \"(values,count,min_out,max_out)\",\n      \"cimguiname\": \"ImPlot_ImMinMaxArray\",\n      \"defaults\": {},\n      \"funcname\": \"ImMinMaxArray\",\n      \"location\": \"implot_internal:147\",\n      \"ov_cimguiname\": \"ImPlot_ImMinMaxArray_S8Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImS8*,int,ImS8*,ImS8*)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const ImU8* values,int count,ImU8* min_out,ImU8* max_out)\",\n      \"argsT\": [\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImU8*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"min_out\",\n          \"type\": \"ImU8*\"\n        },\n        {\n          \"name\": \"max_out\",\n          \"type\": \"ImU8*\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImU8* values,int count,ImU8* min_out,ImU8* max_out)\",\n      \"call_args\": \"(values,count,min_out,max_out)\",\n      \"cimguiname\": \"ImPlot_ImMinMaxArray\",\n      \"defaults\": {},\n      \"funcname\": \"ImMinMaxArray\",\n      \"location\": \"implot_internal:147\",\n      \"ov_cimguiname\": \"ImPlot_ImMinMaxArray_U8Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImU8*,int,ImU8*,ImU8*)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const ImS16* values,int count,ImS16* min_out,ImS16* max_out)\",\n      \"argsT\": [\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImS16*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"min_out\",\n          \"type\": \"ImS16*\"\n        },\n        {\n          \"name\": \"max_out\",\n          \"type\": \"ImS16*\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImS16* values,int count,ImS16* min_out,ImS16* max_out)\",\n      \"call_args\": \"(values,count,min_out,max_out)\",\n      \"cimguiname\": \"ImPlot_ImMinMaxArray\",\n      \"defaults\": {},\n      \"funcname\": \"ImMinMaxArray\",\n      \"location\": \"implot_internal:147\",\n      \"ov_cimguiname\": \"ImPlot_ImMinMaxArray_S16Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImS16*,int,ImS16*,ImS16*)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const ImU16* values,int count,ImU16* min_out,ImU16* max_out)\",\n      \"argsT\": [\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImU16*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"min_out\",\n          \"type\": \"ImU16*\"\n        },\n        {\n          \"name\": \"max_out\",\n          \"type\": \"ImU16*\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImU16* values,int count,ImU16* min_out,ImU16* max_out)\",\n      \"call_args\": \"(values,count,min_out,max_out)\",\n      \"cimguiname\": \"ImPlot_ImMinMaxArray\",\n      \"defaults\": {},\n      \"funcname\": \"ImMinMaxArray\",\n      \"location\": \"implot_internal:147\",\n      \"ov_cimguiname\": \"ImPlot_ImMinMaxArray_U16Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImU16*,int,ImU16*,ImU16*)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const ImS32* values,int count,ImS32* min_out,ImS32* max_out)\",\n      \"argsT\": [\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImS32*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"min_out\",\n          \"type\": \"ImS32*\"\n        },\n        {\n          \"name\": \"max_out\",\n          \"type\": \"ImS32*\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImS32* values,int count,ImS32* min_out,ImS32* max_out)\",\n      \"call_args\": \"(values,count,min_out,max_out)\",\n      \"cimguiname\": \"ImPlot_ImMinMaxArray\",\n      \"defaults\": {},\n      \"funcname\": \"ImMinMaxArray\",\n      \"location\": \"implot_internal:147\",\n      \"ov_cimguiname\": \"ImPlot_ImMinMaxArray_S32Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImS32*,int,ImS32*,ImS32*)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const ImU32* values,int count,ImU32* min_out,ImU32* max_out)\",\n      \"argsT\": [\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImU32*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"min_out\",\n          \"type\": \"ImU32*\"\n        },\n        {\n          \"name\": \"max_out\",\n          \"type\": \"ImU32*\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImU32* values,int count,ImU32* min_out,ImU32* max_out)\",\n      \"call_args\": \"(values,count,min_out,max_out)\",\n      \"cimguiname\": \"ImPlot_ImMinMaxArray\",\n      \"defaults\": {},\n      \"funcname\": \"ImMinMaxArray\",\n      \"location\": \"implot_internal:147\",\n      \"ov_cimguiname\": \"ImPlot_ImMinMaxArray_U32Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImU32*,int,ImU32*,ImU32*)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const ImS64* values,int count,ImS64* min_out,ImS64* max_out)\",\n      \"argsT\": [\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImS64*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"min_out\",\n          \"type\": \"ImS64*\"\n        },\n        {\n          \"name\": \"max_out\",\n          \"type\": \"ImS64*\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImS64* values,int count,ImS64* min_out,ImS64* max_out)\",\n      \"call_args\": \"(values,count,min_out,max_out)\",\n      \"cimguiname\": \"ImPlot_ImMinMaxArray\",\n      \"defaults\": {},\n      \"funcname\": \"ImMinMaxArray\",\n      \"location\": \"implot_internal:147\",\n      \"ov_cimguiname\": \"ImPlot_ImMinMaxArray_S64Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImS64*,int,ImS64*,ImS64*)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const ImU64* values,int count,ImU64* min_out,ImU64* max_out)\",\n      \"argsT\": [\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImU64*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"min_out\",\n          \"type\": \"ImU64*\"\n        },\n        {\n          \"name\": \"max_out\",\n          \"type\": \"ImU64*\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImU64* values,int count,ImU64* min_out,ImU64* max_out)\",\n      \"call_args\": \"(values,count,min_out,max_out)\",\n      \"cimguiname\": \"ImPlot_ImMinMaxArray\",\n      \"defaults\": {},\n      \"funcname\": \"ImMinMaxArray\",\n      \"location\": \"implot_internal:147\",\n      \"ov_cimguiname\": \"ImPlot_ImMinMaxArray_U64Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImU64*,int,ImU64*,ImU64*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_ImMixU32\": [\n    {\n      \"args\": \"(ImU32 a,ImU32 b,ImU32 s)\",\n      \"argsT\": [\n        {\n          \"name\": \"a\",\n          \"type\": \"ImU32\"\n        },\n        {\n          \"name\": \"b\",\n          \"type\": \"ImU32\"\n        },\n        {\n          \"name\": \"s\",\n          \"type\": \"ImU32\"\n        }\n      ],\n      \"argsoriginal\": \"(ImU32 a,ImU32 b,ImU32 s)\",\n      \"call_args\": \"(a,b,s)\",\n      \"cimguiname\": \"ImPlot_ImMixU32\",\n      \"defaults\": {},\n      \"funcname\": \"ImMixU32\",\n      \"location\": \"implot_internal:184\",\n      \"ov_cimguiname\": \"ImPlot_ImMixU32\",\n      \"ret\": \"ImU32\",\n      \"signature\": \"(ImU32,ImU32,ImU32)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_ImNan\": [\n    {\n      \"args\": \"(double val)\",\n      \"argsT\": [\n        {\n          \"name\": \"val\",\n          \"type\": \"double\"\n        }\n      ],\n      \"argsoriginal\": \"(double val)\",\n      \"call_args\": \"(val)\",\n      \"cimguiname\": \"ImPlot_ImNan\",\n      \"defaults\": {},\n      \"funcname\": \"ImNan\",\n      \"location\": \"implot_internal:127\",\n      \"ov_cimguiname\": \"ImPlot_ImNan\",\n      \"ret\": \"bool\",\n      \"signature\": \"(double)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_ImNanOrInf\": [\n    {\n      \"args\": \"(double val)\",\n      \"argsT\": [\n        {\n          \"name\": \"val\",\n          \"type\": \"double\"\n        }\n      ],\n      \"argsoriginal\": \"(double val)\",\n      \"call_args\": \"(val)\",\n      \"cimguiname\": \"ImPlot_ImNanOrInf\",\n      \"defaults\": {},\n      \"funcname\": \"ImNanOrInf\",\n      \"location\": \"implot_internal:129\",\n      \"ov_cimguiname\": \"ImPlot_ImNanOrInf\",\n      \"ret\": \"bool\",\n      \"signature\": \"(double)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_ImOverlaps\": [\n    {\n      \"args\": \"(float min_a,float max_a,float min_b,float max_b)\",\n      \"argsT\": [\n        {\n          \"name\": \"min_a\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"max_a\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"min_b\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"max_b\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(float min_a,float max_a,float min_b,float max_b)\",\n      \"call_args\": \"(min_a,max_a,min_b,max_b)\",\n      \"cimguiname\": \"ImPlot_ImOverlaps\",\n      \"defaults\": {},\n      \"funcname\": \"ImOverlaps\",\n      \"location\": \"implot_internal:224\",\n      \"ov_cimguiname\": \"ImPlot_ImOverlaps_Float\",\n      \"ret\": \"bool\",\n      \"signature\": \"(float,float,float,float)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(double min_a,double max_a,double min_b,double max_b)\",\n      \"argsT\": [\n        {\n          \"name\": \"min_a\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"max_a\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"min_b\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"max_b\",\n          \"type\": \"double\"\n        }\n      ],\n      \"argsoriginal\": \"(double min_a,double max_a,double min_b,double max_b)\",\n      \"call_args\": \"(min_a,max_a,min_b,max_b)\",\n      \"cimguiname\": \"ImPlot_ImOverlaps\",\n      \"defaults\": {},\n      \"funcname\": \"ImOverlaps\",\n      \"location\": \"implot_internal:224\",\n      \"ov_cimguiname\": \"ImPlot_ImOverlaps_double\",\n      \"ret\": \"bool\",\n      \"signature\": \"(double,double,double,double)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(ImS8 min_a,ImS8 max_a,ImS8 min_b,ImS8 max_b)\",\n      \"argsT\": [\n        {\n          \"name\": \"min_a\",\n          \"type\": \"ImS8\"\n        },\n        {\n          \"name\": \"max_a\",\n          \"type\": \"ImS8\"\n        },\n        {\n          \"name\": \"min_b\",\n          \"type\": \"ImS8\"\n        },\n        {\n          \"name\": \"max_b\",\n          \"type\": \"ImS8\"\n        }\n      ],\n      \"argsoriginal\": \"(ImS8 min_a,ImS8 max_a,ImS8 min_b,ImS8 max_b)\",\n      \"call_args\": \"(min_a,max_a,min_b,max_b)\",\n      \"cimguiname\": \"ImPlot_ImOverlaps\",\n      \"defaults\": {},\n      \"funcname\": \"ImOverlaps\",\n      \"location\": \"implot_internal:224\",\n      \"ov_cimguiname\": \"ImPlot_ImOverlaps_S8\",\n      \"ret\": \"bool\",\n      \"signature\": \"(ImS8,ImS8,ImS8,ImS8)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(ImU8 min_a,ImU8 max_a,ImU8 min_b,ImU8 max_b)\",\n      \"argsT\": [\n        {\n          \"name\": \"min_a\",\n          \"type\": \"ImU8\"\n        },\n        {\n          \"name\": \"max_a\",\n          \"type\": \"ImU8\"\n        },\n        {\n          \"name\": \"min_b\",\n          \"type\": \"ImU8\"\n        },\n        {\n          \"name\": \"max_b\",\n          \"type\": \"ImU8\"\n        }\n      ],\n      \"argsoriginal\": \"(ImU8 min_a,ImU8 max_a,ImU8 min_b,ImU8 max_b)\",\n      \"call_args\": \"(min_a,max_a,min_b,max_b)\",\n      \"cimguiname\": \"ImPlot_ImOverlaps\",\n      \"defaults\": {},\n      \"funcname\": \"ImOverlaps\",\n      \"location\": \"implot_internal:224\",\n      \"ov_cimguiname\": \"ImPlot_ImOverlaps_U8\",\n      \"ret\": \"bool\",\n      \"signature\": \"(ImU8,ImU8,ImU8,ImU8)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(ImS16 min_a,ImS16 max_a,ImS16 min_b,ImS16 max_b)\",\n      \"argsT\": [\n        {\n          \"name\": \"min_a\",\n          \"type\": \"ImS16\"\n        },\n        {\n          \"name\": \"max_a\",\n          \"type\": \"ImS16\"\n        },\n        {\n          \"name\": \"min_b\",\n          \"type\": \"ImS16\"\n        },\n        {\n          \"name\": \"max_b\",\n          \"type\": \"ImS16\"\n        }\n      ],\n      \"argsoriginal\": \"(ImS16 min_a,ImS16 max_a,ImS16 min_b,ImS16 max_b)\",\n      \"call_args\": \"(min_a,max_a,min_b,max_b)\",\n      \"cimguiname\": \"ImPlot_ImOverlaps\",\n      \"defaults\": {},\n      \"funcname\": \"ImOverlaps\",\n      \"location\": \"implot_internal:224\",\n      \"ov_cimguiname\": \"ImPlot_ImOverlaps_S16\",\n      \"ret\": \"bool\",\n      \"signature\": \"(ImS16,ImS16,ImS16,ImS16)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(ImU16 min_a,ImU16 max_a,ImU16 min_b,ImU16 max_b)\",\n      \"argsT\": [\n        {\n          \"name\": \"min_a\",\n          \"type\": \"ImU16\"\n        },\n        {\n          \"name\": \"max_a\",\n          \"type\": \"ImU16\"\n        },\n        {\n          \"name\": \"min_b\",\n          \"type\": \"ImU16\"\n        },\n        {\n          \"name\": \"max_b\",\n          \"type\": \"ImU16\"\n        }\n      ],\n      \"argsoriginal\": \"(ImU16 min_a,ImU16 max_a,ImU16 min_b,ImU16 max_b)\",\n      \"call_args\": \"(min_a,max_a,min_b,max_b)\",\n      \"cimguiname\": \"ImPlot_ImOverlaps\",\n      \"defaults\": {},\n      \"funcname\": \"ImOverlaps\",\n      \"location\": \"implot_internal:224\",\n      \"ov_cimguiname\": \"ImPlot_ImOverlaps_U16\",\n      \"ret\": \"bool\",\n      \"signature\": \"(ImU16,ImU16,ImU16,ImU16)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(ImS32 min_a,ImS32 max_a,ImS32 min_b,ImS32 max_b)\",\n      \"argsT\": [\n        {\n          \"name\": \"min_a\",\n          \"type\": \"ImS32\"\n        },\n        {\n          \"name\": \"max_a\",\n          \"type\": \"ImS32\"\n        },\n        {\n          \"name\": \"min_b\",\n          \"type\": \"ImS32\"\n        },\n        {\n          \"name\": \"max_b\",\n          \"type\": \"ImS32\"\n        }\n      ],\n      \"argsoriginal\": \"(ImS32 min_a,ImS32 max_a,ImS32 min_b,ImS32 max_b)\",\n      \"call_args\": \"(min_a,max_a,min_b,max_b)\",\n      \"cimguiname\": \"ImPlot_ImOverlaps\",\n      \"defaults\": {},\n      \"funcname\": \"ImOverlaps\",\n      \"location\": \"implot_internal:224\",\n      \"ov_cimguiname\": \"ImPlot_ImOverlaps_S32\",\n      \"ret\": \"bool\",\n      \"signature\": \"(ImS32,ImS32,ImS32,ImS32)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(ImU32 min_a,ImU32 max_a,ImU32 min_b,ImU32 max_b)\",\n      \"argsT\": [\n        {\n          \"name\": \"min_a\",\n          \"type\": \"ImU32\"\n        },\n        {\n          \"name\": \"max_a\",\n          \"type\": \"ImU32\"\n        },\n        {\n          \"name\": \"min_b\",\n          \"type\": \"ImU32\"\n        },\n        {\n          \"name\": \"max_b\",\n          \"type\": \"ImU32\"\n        }\n      ],\n      \"argsoriginal\": \"(ImU32 min_a,ImU32 max_a,ImU32 min_b,ImU32 max_b)\",\n      \"call_args\": \"(min_a,max_a,min_b,max_b)\",\n      \"cimguiname\": \"ImPlot_ImOverlaps\",\n      \"defaults\": {},\n      \"funcname\": \"ImOverlaps\",\n      \"location\": \"implot_internal:224\",\n      \"ov_cimguiname\": \"ImPlot_ImOverlaps_U32\",\n      \"ret\": \"bool\",\n      \"signature\": \"(ImU32,ImU32,ImU32,ImU32)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(ImS64 min_a,ImS64 max_a,ImS64 min_b,ImS64 max_b)\",\n      \"argsT\": [\n        {\n          \"name\": \"min_a\",\n          \"type\": \"ImS64\"\n        },\n        {\n          \"name\": \"max_a\",\n          \"type\": \"ImS64\"\n        },\n        {\n          \"name\": \"min_b\",\n          \"type\": \"ImS64\"\n        },\n        {\n          \"name\": \"max_b\",\n          \"type\": \"ImS64\"\n        }\n      ],\n      \"argsoriginal\": \"(ImS64 min_a,ImS64 max_a,ImS64 min_b,ImS64 max_b)\",\n      \"call_args\": \"(min_a,max_a,min_b,max_b)\",\n      \"cimguiname\": \"ImPlot_ImOverlaps\",\n      \"defaults\": {},\n      \"funcname\": \"ImOverlaps\",\n      \"location\": \"implot_internal:224\",\n      \"ov_cimguiname\": \"ImPlot_ImOverlaps_S64\",\n      \"ret\": \"bool\",\n      \"signature\": \"(ImS64,ImS64,ImS64,ImS64)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(ImU64 min_a,ImU64 max_a,ImU64 min_b,ImU64 max_b)\",\n      \"argsT\": [\n        {\n          \"name\": \"min_a\",\n          \"type\": \"ImU64\"\n        },\n        {\n          \"name\": \"max_a\",\n          \"type\": \"ImU64\"\n        },\n        {\n          \"name\": \"min_b\",\n          \"type\": \"ImU64\"\n        },\n        {\n          \"name\": \"max_b\",\n          \"type\": \"ImU64\"\n        }\n      ],\n      \"argsoriginal\": \"(ImU64 min_a,ImU64 max_a,ImU64 min_b,ImU64 max_b)\",\n      \"call_args\": \"(min_a,max_a,min_b,max_b)\",\n      \"cimguiname\": \"ImPlot_ImOverlaps\",\n      \"defaults\": {},\n      \"funcname\": \"ImOverlaps\",\n      \"location\": \"implot_internal:224\",\n      \"ov_cimguiname\": \"ImPlot_ImOverlaps_U64\",\n      \"ret\": \"bool\",\n      \"signature\": \"(ImU64,ImU64,ImU64,ImU64)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_ImPosMod\": [\n    {\n      \"args\": \"(int l,int r)\",\n      \"argsT\": [\n        {\n          \"name\": \"l\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"r\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(int l,int r)\",\n      \"call_args\": \"(l,r)\",\n      \"cimguiname\": \"ImPlot_ImPosMod\",\n      \"defaults\": {},\n      \"funcname\": \"ImPosMod\",\n      \"location\": \"implot_internal:125\",\n      \"ov_cimguiname\": \"ImPlot_ImPosMod\",\n      \"ret\": \"int\",\n      \"signature\": \"(int,int)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_ImRemap\": [\n    {\n      \"args\": \"(float x,float x0,float x1,float y0,float y1)\",\n      \"argsT\": [\n        {\n          \"name\": \"x\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"x0\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"x1\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"y0\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"y1\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(float x,float x0,float x1,float y0,float y1)\",\n      \"call_args\": \"(x,x0,x1,y0,y1)\",\n      \"cimguiname\": \"ImPlot_ImRemap\",\n      \"defaults\": {},\n      \"funcname\": \"ImRemap\",\n      \"location\": \"implot_internal:119\",\n      \"ov_cimguiname\": \"ImPlot_ImRemap_Float\",\n      \"ret\": \"float\",\n      \"signature\": \"(float,float,float,float,float)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(double x,double x0,double x1,double y0,double y1)\",\n      \"argsT\": [\n        {\n          \"name\": \"x\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"x0\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"x1\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"y0\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"y1\",\n          \"type\": \"double\"\n        }\n      ],\n      \"argsoriginal\": \"(double x,double x0,double x1,double y0,double y1)\",\n      \"call_args\": \"(x,x0,x1,y0,y1)\",\n      \"cimguiname\": \"ImPlot_ImRemap\",\n      \"defaults\": {},\n      \"funcname\": \"ImRemap\",\n      \"location\": \"implot_internal:119\",\n      \"ov_cimguiname\": \"ImPlot_ImRemap_double\",\n      \"ret\": \"double\",\n      \"signature\": \"(double,double,double,double,double)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(ImS8 x,ImS8 x0,ImS8 x1,ImS8 y0,ImS8 y1)\",\n      \"argsT\": [\n        {\n          \"name\": \"x\",\n          \"type\": \"ImS8\"\n        },\n        {\n          \"name\": \"x0\",\n          \"type\": \"ImS8\"\n        },\n        {\n          \"name\": \"x1\",\n          \"type\": \"ImS8\"\n        },\n        {\n          \"name\": \"y0\",\n          \"type\": \"ImS8\"\n        },\n        {\n          \"name\": \"y1\",\n          \"type\": \"ImS8\"\n        }\n      ],\n      \"argsoriginal\": \"(ImS8 x,ImS8 x0,ImS8 x1,ImS8 y0,ImS8 y1)\",\n      \"call_args\": \"(x,x0,x1,y0,y1)\",\n      \"cimguiname\": \"ImPlot_ImRemap\",\n      \"defaults\": {},\n      \"funcname\": \"ImRemap\",\n      \"location\": \"implot_internal:119\",\n      \"ov_cimguiname\": \"ImPlot_ImRemap_S8\",\n      \"ret\": \"ImS8\",\n      \"signature\": \"(ImS8,ImS8,ImS8,ImS8,ImS8)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(ImU8 x,ImU8 x0,ImU8 x1,ImU8 y0,ImU8 y1)\",\n      \"argsT\": [\n        {\n          \"name\": \"x\",\n          \"type\": \"ImU8\"\n        },\n        {\n          \"name\": \"x0\",\n          \"type\": \"ImU8\"\n        },\n        {\n          \"name\": \"x1\",\n          \"type\": \"ImU8\"\n        },\n        {\n          \"name\": \"y0\",\n          \"type\": \"ImU8\"\n        },\n        {\n          \"name\": \"y1\",\n          \"type\": \"ImU8\"\n        }\n      ],\n      \"argsoriginal\": \"(ImU8 x,ImU8 x0,ImU8 x1,ImU8 y0,ImU8 y1)\",\n      \"call_args\": \"(x,x0,x1,y0,y1)\",\n      \"cimguiname\": \"ImPlot_ImRemap\",\n      \"defaults\": {},\n      \"funcname\": \"ImRemap\",\n      \"location\": \"implot_internal:119\",\n      \"ov_cimguiname\": \"ImPlot_ImRemap_U8\",\n      \"ret\": \"ImU8\",\n      \"signature\": \"(ImU8,ImU8,ImU8,ImU8,ImU8)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(ImS16 x,ImS16 x0,ImS16 x1,ImS16 y0,ImS16 y1)\",\n      \"argsT\": [\n        {\n          \"name\": \"x\",\n          \"type\": \"ImS16\"\n        },\n        {\n          \"name\": \"x0\",\n          \"type\": \"ImS16\"\n        },\n        {\n          \"name\": \"x1\",\n          \"type\": \"ImS16\"\n        },\n        {\n          \"name\": \"y0\",\n          \"type\": \"ImS16\"\n        },\n        {\n          \"name\": \"y1\",\n          \"type\": \"ImS16\"\n        }\n      ],\n      \"argsoriginal\": \"(ImS16 x,ImS16 x0,ImS16 x1,ImS16 y0,ImS16 y1)\",\n      \"call_args\": \"(x,x0,x1,y0,y1)\",\n      \"cimguiname\": \"ImPlot_ImRemap\",\n      \"defaults\": {},\n      \"funcname\": \"ImRemap\",\n      \"location\": \"implot_internal:119\",\n      \"ov_cimguiname\": \"ImPlot_ImRemap_S16\",\n      \"ret\": \"ImS16\",\n      \"signature\": \"(ImS16,ImS16,ImS16,ImS16,ImS16)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(ImU16 x,ImU16 x0,ImU16 x1,ImU16 y0,ImU16 y1)\",\n      \"argsT\": [\n        {\n          \"name\": \"x\",\n          \"type\": \"ImU16\"\n        },\n        {\n          \"name\": \"x0\",\n          \"type\": \"ImU16\"\n        },\n        {\n          \"name\": \"x1\",\n          \"type\": \"ImU16\"\n        },\n        {\n          \"name\": \"y0\",\n          \"type\": \"ImU16\"\n        },\n        {\n          \"name\": \"y1\",\n          \"type\": \"ImU16\"\n        }\n      ],\n      \"argsoriginal\": \"(ImU16 x,ImU16 x0,ImU16 x1,ImU16 y0,ImU16 y1)\",\n      \"call_args\": \"(x,x0,x1,y0,y1)\",\n      \"cimguiname\": \"ImPlot_ImRemap\",\n      \"defaults\": {},\n      \"funcname\": \"ImRemap\",\n      \"location\": \"implot_internal:119\",\n      \"ov_cimguiname\": \"ImPlot_ImRemap_U16\",\n      \"ret\": \"ImU16\",\n      \"signature\": \"(ImU16,ImU16,ImU16,ImU16,ImU16)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(ImS32 x,ImS32 x0,ImS32 x1,ImS32 y0,ImS32 y1)\",\n      \"argsT\": [\n        {\n          \"name\": \"x\",\n          \"type\": \"ImS32\"\n        },\n        {\n          \"name\": \"x0\",\n          \"type\": \"ImS32\"\n        },\n        {\n          \"name\": \"x1\",\n          \"type\": \"ImS32\"\n        },\n        {\n          \"name\": \"y0\",\n          \"type\": \"ImS32\"\n        },\n        {\n          \"name\": \"y1\",\n          \"type\": \"ImS32\"\n        }\n      ],\n      \"argsoriginal\": \"(ImS32 x,ImS32 x0,ImS32 x1,ImS32 y0,ImS32 y1)\",\n      \"call_args\": \"(x,x0,x1,y0,y1)\",\n      \"cimguiname\": \"ImPlot_ImRemap\",\n      \"defaults\": {},\n      \"funcname\": \"ImRemap\",\n      \"location\": \"implot_internal:119\",\n      \"ov_cimguiname\": \"ImPlot_ImRemap_S32\",\n      \"ret\": \"ImS32\",\n      \"signature\": \"(ImS32,ImS32,ImS32,ImS32,ImS32)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(ImU32 x,ImU32 x0,ImU32 x1,ImU32 y0,ImU32 y1)\",\n      \"argsT\": [\n        {\n          \"name\": \"x\",\n          \"type\": \"ImU32\"\n        },\n        {\n          \"name\": \"x0\",\n          \"type\": \"ImU32\"\n        },\n        {\n          \"name\": \"x1\",\n          \"type\": \"ImU32\"\n        },\n        {\n          \"name\": \"y0\",\n          \"type\": \"ImU32\"\n        },\n        {\n          \"name\": \"y1\",\n          \"type\": \"ImU32\"\n        }\n      ],\n      \"argsoriginal\": \"(ImU32 x,ImU32 x0,ImU32 x1,ImU32 y0,ImU32 y1)\",\n      \"call_args\": \"(x,x0,x1,y0,y1)\",\n      \"cimguiname\": \"ImPlot_ImRemap\",\n      \"defaults\": {},\n      \"funcname\": \"ImRemap\",\n      \"location\": \"implot_internal:119\",\n      \"ov_cimguiname\": \"ImPlot_ImRemap_U32\",\n      \"ret\": \"ImU32\",\n      \"signature\": \"(ImU32,ImU32,ImU32,ImU32,ImU32)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(ImS64 x,ImS64 x0,ImS64 x1,ImS64 y0,ImS64 y1)\",\n      \"argsT\": [\n        {\n          \"name\": \"x\",\n          \"type\": \"ImS64\"\n        },\n        {\n          \"name\": \"x0\",\n          \"type\": \"ImS64\"\n        },\n        {\n          \"name\": \"x1\",\n          \"type\": \"ImS64\"\n        },\n        {\n          \"name\": \"y0\",\n          \"type\": \"ImS64\"\n        },\n        {\n          \"name\": \"y1\",\n          \"type\": \"ImS64\"\n        }\n      ],\n      \"argsoriginal\": \"(ImS64 x,ImS64 x0,ImS64 x1,ImS64 y0,ImS64 y1)\",\n      \"call_args\": \"(x,x0,x1,y0,y1)\",\n      \"cimguiname\": \"ImPlot_ImRemap\",\n      \"defaults\": {},\n      \"funcname\": \"ImRemap\",\n      \"location\": \"implot_internal:119\",\n      \"ov_cimguiname\": \"ImPlot_ImRemap_S64\",\n      \"ret\": \"ImS64\",\n      \"signature\": \"(ImS64,ImS64,ImS64,ImS64,ImS64)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(ImU64 x,ImU64 x0,ImU64 x1,ImU64 y0,ImU64 y1)\",\n      \"argsT\": [\n        {\n          \"name\": \"x\",\n          \"type\": \"ImU64\"\n        },\n        {\n          \"name\": \"x0\",\n          \"type\": \"ImU64\"\n        },\n        {\n          \"name\": \"x1\",\n          \"type\": \"ImU64\"\n        },\n        {\n          \"name\": \"y0\",\n          \"type\": \"ImU64\"\n        },\n        {\n          \"name\": \"y1\",\n          \"type\": \"ImU64\"\n        }\n      ],\n      \"argsoriginal\": \"(ImU64 x,ImU64 x0,ImU64 x1,ImU64 y0,ImU64 y1)\",\n      \"call_args\": \"(x,x0,x1,y0,y1)\",\n      \"cimguiname\": \"ImPlot_ImRemap\",\n      \"defaults\": {},\n      \"funcname\": \"ImRemap\",\n      \"location\": \"implot_internal:119\",\n      \"ov_cimguiname\": \"ImPlot_ImRemap_U64\",\n      \"ret\": \"ImU64\",\n      \"signature\": \"(ImU64,ImU64,ImU64,ImU64,ImU64)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_ImRemap01\": [\n    {\n      \"args\": \"(float x,float x0,float x1)\",\n      \"argsT\": [\n        {\n          \"name\": \"x\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"x0\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"x1\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(float x,float x0,float x1)\",\n      \"call_args\": \"(x,x0,x1)\",\n      \"cimguiname\": \"ImPlot_ImRemap01\",\n      \"defaults\": {},\n      \"funcname\": \"ImRemap01\",\n      \"location\": \"implot_internal:122\",\n      \"ov_cimguiname\": \"ImPlot_ImRemap01_Float\",\n      \"ret\": \"float\",\n      \"signature\": \"(float,float,float)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(double x,double x0,double x1)\",\n      \"argsT\": [\n        {\n          \"name\": \"x\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"x0\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"x1\",\n          \"type\": \"double\"\n        }\n      ],\n      \"argsoriginal\": \"(double x,double x0,double x1)\",\n      \"call_args\": \"(x,x0,x1)\",\n      \"cimguiname\": \"ImPlot_ImRemap01\",\n      \"defaults\": {},\n      \"funcname\": \"ImRemap01\",\n      \"location\": \"implot_internal:122\",\n      \"ov_cimguiname\": \"ImPlot_ImRemap01_double\",\n      \"ret\": \"double\",\n      \"signature\": \"(double,double,double)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(ImS8 x,ImS8 x0,ImS8 x1)\",\n      \"argsT\": [\n        {\n          \"name\": \"x\",\n          \"type\": \"ImS8\"\n        },\n        {\n          \"name\": \"x0\",\n          \"type\": \"ImS8\"\n        },\n        {\n          \"name\": \"x1\",\n          \"type\": \"ImS8\"\n        }\n      ],\n      \"argsoriginal\": \"(ImS8 x,ImS8 x0,ImS8 x1)\",\n      \"call_args\": \"(x,x0,x1)\",\n      \"cimguiname\": \"ImPlot_ImRemap01\",\n      \"defaults\": {},\n      \"funcname\": \"ImRemap01\",\n      \"location\": \"implot_internal:122\",\n      \"ov_cimguiname\": \"ImPlot_ImRemap01_S8\",\n      \"ret\": \"ImS8\",\n      \"signature\": \"(ImS8,ImS8,ImS8)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(ImU8 x,ImU8 x0,ImU8 x1)\",\n      \"argsT\": [\n        {\n          \"name\": \"x\",\n          \"type\": \"ImU8\"\n        },\n        {\n          \"name\": \"x0\",\n          \"type\": \"ImU8\"\n        },\n        {\n          \"name\": \"x1\",\n          \"type\": \"ImU8\"\n        }\n      ],\n      \"argsoriginal\": \"(ImU8 x,ImU8 x0,ImU8 x1)\",\n      \"call_args\": \"(x,x0,x1)\",\n      \"cimguiname\": \"ImPlot_ImRemap01\",\n      \"defaults\": {},\n      \"funcname\": \"ImRemap01\",\n      \"location\": \"implot_internal:122\",\n      \"ov_cimguiname\": \"ImPlot_ImRemap01_U8\",\n      \"ret\": \"ImU8\",\n      \"signature\": \"(ImU8,ImU8,ImU8)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(ImS16 x,ImS16 x0,ImS16 x1)\",\n      \"argsT\": [\n        {\n          \"name\": \"x\",\n          \"type\": \"ImS16\"\n        },\n        {\n          \"name\": \"x0\",\n          \"type\": \"ImS16\"\n        },\n        {\n          \"name\": \"x1\",\n          \"type\": \"ImS16\"\n        }\n      ],\n      \"argsoriginal\": \"(ImS16 x,ImS16 x0,ImS16 x1)\",\n      \"call_args\": \"(x,x0,x1)\",\n      \"cimguiname\": \"ImPlot_ImRemap01\",\n      \"defaults\": {},\n      \"funcname\": \"ImRemap01\",\n      \"location\": \"implot_internal:122\",\n      \"ov_cimguiname\": \"ImPlot_ImRemap01_S16\",\n      \"ret\": \"ImS16\",\n      \"signature\": \"(ImS16,ImS16,ImS16)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(ImU16 x,ImU16 x0,ImU16 x1)\",\n      \"argsT\": [\n        {\n          \"name\": \"x\",\n          \"type\": \"ImU16\"\n        },\n        {\n          \"name\": \"x0\",\n          \"type\": \"ImU16\"\n        },\n        {\n          \"name\": \"x1\",\n          \"type\": \"ImU16\"\n        }\n      ],\n      \"argsoriginal\": \"(ImU16 x,ImU16 x0,ImU16 x1)\",\n      \"call_args\": \"(x,x0,x1)\",\n      \"cimguiname\": \"ImPlot_ImRemap01\",\n      \"defaults\": {},\n      \"funcname\": \"ImRemap01\",\n      \"location\": \"implot_internal:122\",\n      \"ov_cimguiname\": \"ImPlot_ImRemap01_U16\",\n      \"ret\": \"ImU16\",\n      \"signature\": \"(ImU16,ImU16,ImU16)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(ImS32 x,ImS32 x0,ImS32 x1)\",\n      \"argsT\": [\n        {\n          \"name\": \"x\",\n          \"type\": \"ImS32\"\n        },\n        {\n          \"name\": \"x0\",\n          \"type\": \"ImS32\"\n        },\n        {\n          \"name\": \"x1\",\n          \"type\": \"ImS32\"\n        }\n      ],\n      \"argsoriginal\": \"(ImS32 x,ImS32 x0,ImS32 x1)\",\n      \"call_args\": \"(x,x0,x1)\",\n      \"cimguiname\": \"ImPlot_ImRemap01\",\n      \"defaults\": {},\n      \"funcname\": \"ImRemap01\",\n      \"location\": \"implot_internal:122\",\n      \"ov_cimguiname\": \"ImPlot_ImRemap01_S32\",\n      \"ret\": \"ImS32\",\n      \"signature\": \"(ImS32,ImS32,ImS32)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(ImU32 x,ImU32 x0,ImU32 x1)\",\n      \"argsT\": [\n        {\n          \"name\": \"x\",\n          \"type\": \"ImU32\"\n        },\n        {\n          \"name\": \"x0\",\n          \"type\": \"ImU32\"\n        },\n        {\n          \"name\": \"x1\",\n          \"type\": \"ImU32\"\n        }\n      ],\n      \"argsoriginal\": \"(ImU32 x,ImU32 x0,ImU32 x1)\",\n      \"call_args\": \"(x,x0,x1)\",\n      \"cimguiname\": \"ImPlot_ImRemap01\",\n      \"defaults\": {},\n      \"funcname\": \"ImRemap01\",\n      \"location\": \"implot_internal:122\",\n      \"ov_cimguiname\": \"ImPlot_ImRemap01_U32\",\n      \"ret\": \"ImU32\",\n      \"signature\": \"(ImU32,ImU32,ImU32)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(ImS64 x,ImS64 x0,ImS64 x1)\",\n      \"argsT\": [\n        {\n          \"name\": \"x\",\n          \"type\": \"ImS64\"\n        },\n        {\n          \"name\": \"x0\",\n          \"type\": \"ImS64\"\n        },\n        {\n          \"name\": \"x1\",\n          \"type\": \"ImS64\"\n        }\n      ],\n      \"argsoriginal\": \"(ImS64 x,ImS64 x0,ImS64 x1)\",\n      \"call_args\": \"(x,x0,x1)\",\n      \"cimguiname\": \"ImPlot_ImRemap01\",\n      \"defaults\": {},\n      \"funcname\": \"ImRemap01\",\n      \"location\": \"implot_internal:122\",\n      \"ov_cimguiname\": \"ImPlot_ImRemap01_S64\",\n      \"ret\": \"ImS64\",\n      \"signature\": \"(ImS64,ImS64,ImS64)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(ImU64 x,ImU64 x0,ImU64 x1)\",\n      \"argsT\": [\n        {\n          \"name\": \"x\",\n          \"type\": \"ImU64\"\n        },\n        {\n          \"name\": \"x0\",\n          \"type\": \"ImU64\"\n        },\n        {\n          \"name\": \"x1\",\n          \"type\": \"ImU64\"\n        }\n      ],\n      \"argsoriginal\": \"(ImU64 x,ImU64 x0,ImU64 x1)\",\n      \"call_args\": \"(x,x0,x1)\",\n      \"cimguiname\": \"ImPlot_ImRemap01\",\n      \"defaults\": {},\n      \"funcname\": \"ImRemap01\",\n      \"location\": \"implot_internal:122\",\n      \"ov_cimguiname\": \"ImPlot_ImRemap01_U64\",\n      \"ret\": \"ImU64\",\n      \"signature\": \"(ImU64,ImU64,ImU64)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_ImSinh\": [\n    {\n      \"args\": \"(float x)\",\n      \"argsT\": [\n        {\n          \"name\": \"x\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(float x)\",\n      \"call_args\": \"(x)\",\n      \"cimguiname\": \"ImPlot_ImSinh\",\n      \"defaults\": {},\n      \"funcname\": \"ImSinh\",\n      \"location\": \"implot_internal:108\",\n      \"ov_cimguiname\": \"ImPlot_ImSinh_Float\",\n      \"ret\": \"float\",\n      \"signature\": \"(float)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(double x)\",\n      \"argsT\": [\n        {\n          \"name\": \"x\",\n          \"type\": \"double\"\n        }\n      ],\n      \"argsoriginal\": \"(double x)\",\n      \"call_args\": \"(x)\",\n      \"cimguiname\": \"ImPlot_ImSinh\",\n      \"defaults\": {},\n      \"funcname\": \"ImSinh\",\n      \"location\": \"implot_internal:109\",\n      \"ov_cimguiname\": \"ImPlot_ImSinh_double\",\n      \"ret\": \"double\",\n      \"signature\": \"(double)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_ImStdDev\": [\n    {\n      \"args\": \"(const float* values,int count)\",\n      \"argsT\": [\n        {\n          \"name\": \"values\",\n          \"type\": \"const float*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const float* values,int count)\",\n      \"call_args\": \"(values,count)\",\n      \"cimguiname\": \"ImPlot_ImStdDev\",\n      \"defaults\": {},\n      \"funcname\": \"ImStdDev\",\n      \"location\": \"implot_internal:174\",\n      \"ov_cimguiname\": \"ImPlot_ImStdDev_FloatPtr\",\n      \"ret\": \"double\",\n      \"signature\": \"(const float*,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const double* values,int count)\",\n      \"argsT\": [\n        {\n          \"name\": \"values\",\n          \"type\": \"const double*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const double* values,int count)\",\n      \"call_args\": \"(values,count)\",\n      \"cimguiname\": \"ImPlot_ImStdDev\",\n      \"defaults\": {},\n      \"funcname\": \"ImStdDev\",\n      \"location\": \"implot_internal:174\",\n      \"ov_cimguiname\": \"ImPlot_ImStdDev_doublePtr\",\n      \"ret\": \"double\",\n      \"signature\": \"(const double*,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const ImS8* values,int count)\",\n      \"argsT\": [\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImS8*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImS8* values,int count)\",\n      \"call_args\": \"(values,count)\",\n      \"cimguiname\": \"ImPlot_ImStdDev\",\n      \"defaults\": {},\n      \"funcname\": \"ImStdDev\",\n      \"location\": \"implot_internal:174\",\n      \"ov_cimguiname\": \"ImPlot_ImStdDev_S8Ptr\",\n      \"ret\": \"double\",\n      \"signature\": \"(const ImS8*,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const ImU8* values,int count)\",\n      \"argsT\": [\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImU8*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImU8* values,int count)\",\n      \"call_args\": \"(values,count)\",\n      \"cimguiname\": \"ImPlot_ImStdDev\",\n      \"defaults\": {},\n      \"funcname\": \"ImStdDev\",\n      \"location\": \"implot_internal:174\",\n      \"ov_cimguiname\": \"ImPlot_ImStdDev_U8Ptr\",\n      \"ret\": \"double\",\n      \"signature\": \"(const ImU8*,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const ImS16* values,int count)\",\n      \"argsT\": [\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImS16*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImS16* values,int count)\",\n      \"call_args\": \"(values,count)\",\n      \"cimguiname\": \"ImPlot_ImStdDev\",\n      \"defaults\": {},\n      \"funcname\": \"ImStdDev\",\n      \"location\": \"implot_internal:174\",\n      \"ov_cimguiname\": \"ImPlot_ImStdDev_S16Ptr\",\n      \"ret\": \"double\",\n      \"signature\": \"(const ImS16*,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const ImU16* values,int count)\",\n      \"argsT\": [\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImU16*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImU16* values,int count)\",\n      \"call_args\": \"(values,count)\",\n      \"cimguiname\": \"ImPlot_ImStdDev\",\n      \"defaults\": {},\n      \"funcname\": \"ImStdDev\",\n      \"location\": \"implot_internal:174\",\n      \"ov_cimguiname\": \"ImPlot_ImStdDev_U16Ptr\",\n      \"ret\": \"double\",\n      \"signature\": \"(const ImU16*,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const ImS32* values,int count)\",\n      \"argsT\": [\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImS32*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImS32* values,int count)\",\n      \"call_args\": \"(values,count)\",\n      \"cimguiname\": \"ImPlot_ImStdDev\",\n      \"defaults\": {},\n      \"funcname\": \"ImStdDev\",\n      \"location\": \"implot_internal:174\",\n      \"ov_cimguiname\": \"ImPlot_ImStdDev_S32Ptr\",\n      \"ret\": \"double\",\n      \"signature\": \"(const ImS32*,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const ImU32* values,int count)\",\n      \"argsT\": [\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImU32*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImU32* values,int count)\",\n      \"call_args\": \"(values,count)\",\n      \"cimguiname\": \"ImPlot_ImStdDev\",\n      \"defaults\": {},\n      \"funcname\": \"ImStdDev\",\n      \"location\": \"implot_internal:174\",\n      \"ov_cimguiname\": \"ImPlot_ImStdDev_U32Ptr\",\n      \"ret\": \"double\",\n      \"signature\": \"(const ImU32*,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const ImS64* values,int count)\",\n      \"argsT\": [\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImS64*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImS64* values,int count)\",\n      \"call_args\": \"(values,count)\",\n      \"cimguiname\": \"ImPlot_ImStdDev\",\n      \"defaults\": {},\n      \"funcname\": \"ImStdDev\",\n      \"location\": \"implot_internal:174\",\n      \"ov_cimguiname\": \"ImPlot_ImStdDev_S64Ptr\",\n      \"ret\": \"double\",\n      \"signature\": \"(const ImS64*,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const ImU64* values,int count)\",\n      \"argsT\": [\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImU64*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImU64* values,int count)\",\n      \"call_args\": \"(values,count)\",\n      \"cimguiname\": \"ImPlot_ImStdDev\",\n      \"defaults\": {},\n      \"funcname\": \"ImStdDev\",\n      \"location\": \"implot_internal:174\",\n      \"ov_cimguiname\": \"ImPlot_ImStdDev_U64Ptr\",\n      \"ret\": \"double\",\n      \"signature\": \"(const ImU64*,int)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_ImSum\": [\n    {\n      \"args\": \"(const float* values,int count)\",\n      \"argsT\": [\n        {\n          \"name\": \"values\",\n          \"type\": \"const float*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const float* values,int count)\",\n      \"call_args\": \"(values,count)\",\n      \"cimguiname\": \"ImPlot_ImSum\",\n      \"defaults\": {},\n      \"funcname\": \"ImSum\",\n      \"location\": \"implot_internal:157\",\n      \"ov_cimguiname\": \"ImPlot_ImSum_FloatPtr\",\n      \"ret\": \"float\",\n      \"signature\": \"(const float*,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const double* values,int count)\",\n      \"argsT\": [\n        {\n          \"name\": \"values\",\n          \"type\": \"const double*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const double* values,int count)\",\n      \"call_args\": \"(values,count)\",\n      \"cimguiname\": \"ImPlot_ImSum\",\n      \"defaults\": {},\n      \"funcname\": \"ImSum\",\n      \"location\": \"implot_internal:157\",\n      \"ov_cimguiname\": \"ImPlot_ImSum_doublePtr\",\n      \"ret\": \"double\",\n      \"signature\": \"(const double*,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const ImS8* values,int count)\",\n      \"argsT\": [\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImS8*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImS8* values,int count)\",\n      \"call_args\": \"(values,count)\",\n      \"cimguiname\": \"ImPlot_ImSum\",\n      \"defaults\": {},\n      \"funcname\": \"ImSum\",\n      \"location\": \"implot_internal:157\",\n      \"ov_cimguiname\": \"ImPlot_ImSum_S8Ptr\",\n      \"ret\": \"ImS8\",\n      \"signature\": \"(const ImS8*,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const ImU8* values,int count)\",\n      \"argsT\": [\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImU8*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImU8* values,int count)\",\n      \"call_args\": \"(values,count)\",\n      \"cimguiname\": \"ImPlot_ImSum\",\n      \"defaults\": {},\n      \"funcname\": \"ImSum\",\n      \"location\": \"implot_internal:157\",\n      \"ov_cimguiname\": \"ImPlot_ImSum_U8Ptr\",\n      \"ret\": \"ImU8\",\n      \"signature\": \"(const ImU8*,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const ImS16* values,int count)\",\n      \"argsT\": [\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImS16*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImS16* values,int count)\",\n      \"call_args\": \"(values,count)\",\n      \"cimguiname\": \"ImPlot_ImSum\",\n      \"defaults\": {},\n      \"funcname\": \"ImSum\",\n      \"location\": \"implot_internal:157\",\n      \"ov_cimguiname\": \"ImPlot_ImSum_S16Ptr\",\n      \"ret\": \"ImS16\",\n      \"signature\": \"(const ImS16*,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const ImU16* values,int count)\",\n      \"argsT\": [\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImU16*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImU16* values,int count)\",\n      \"call_args\": \"(values,count)\",\n      \"cimguiname\": \"ImPlot_ImSum\",\n      \"defaults\": {},\n      \"funcname\": \"ImSum\",\n      \"location\": \"implot_internal:157\",\n      \"ov_cimguiname\": \"ImPlot_ImSum_U16Ptr\",\n      \"ret\": \"ImU16\",\n      \"signature\": \"(const ImU16*,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const ImS32* values,int count)\",\n      \"argsT\": [\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImS32*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImS32* values,int count)\",\n      \"call_args\": \"(values,count)\",\n      \"cimguiname\": \"ImPlot_ImSum\",\n      \"defaults\": {},\n      \"funcname\": \"ImSum\",\n      \"location\": \"implot_internal:157\",\n      \"ov_cimguiname\": \"ImPlot_ImSum_S32Ptr\",\n      \"ret\": \"ImS32\",\n      \"signature\": \"(const ImS32*,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const ImU32* values,int count)\",\n      \"argsT\": [\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImU32*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImU32* values,int count)\",\n      \"call_args\": \"(values,count)\",\n      \"cimguiname\": \"ImPlot_ImSum\",\n      \"defaults\": {},\n      \"funcname\": \"ImSum\",\n      \"location\": \"implot_internal:157\",\n      \"ov_cimguiname\": \"ImPlot_ImSum_U32Ptr\",\n      \"ret\": \"ImU32\",\n      \"signature\": \"(const ImU32*,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const ImS64* values,int count)\",\n      \"argsT\": [\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImS64*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImS64* values,int count)\",\n      \"call_args\": \"(values,count)\",\n      \"cimguiname\": \"ImPlot_ImSum\",\n      \"defaults\": {},\n      \"funcname\": \"ImSum\",\n      \"location\": \"implot_internal:157\",\n      \"ov_cimguiname\": \"ImPlot_ImSum_S64Ptr\",\n      \"ret\": \"ImS64\",\n      \"signature\": \"(const ImS64*,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const ImU64* values,int count)\",\n      \"argsT\": [\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImU64*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImU64* values,int count)\",\n      \"call_args\": \"(values,count)\",\n      \"cimguiname\": \"ImPlot_ImSum\",\n      \"defaults\": {},\n      \"funcname\": \"ImSum\",\n      \"location\": \"implot_internal:157\",\n      \"ov_cimguiname\": \"ImPlot_ImSum_U64Ptr\",\n      \"ret\": \"ImU64\",\n      \"signature\": \"(const ImU64*,int)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_Initialize\": [\n    {\n      \"args\": \"(ImPlotContext* ctx)\",\n      \"argsT\": [\n        {\n          \"name\": \"ctx\",\n          \"type\": \"ImPlotContext*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImPlotContext* ctx)\",\n      \"call_args\": \"(ctx)\",\n      \"cimguiname\": \"ImPlot_Initialize\",\n      \"defaults\": {},\n      \"funcname\": \"Initialize\",\n      \"location\": \"implot_internal:1267\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_Initialize\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImPlotContext*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_Intersection\": [\n    {\n      \"args\": \"(ImVec2 *pOut,const ImVec2 a1,const ImVec2 a2,const ImVec2 b1,const ImVec2 b2)\",\n      \"argsT\": [\n        {\n          \"name\": \"pOut\",\n          \"type\": \"ImVec2*\"\n        },\n        {\n          \"name\": \"a1\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"a2\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"b1\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"b2\",\n          \"type\": \"const ImVec2\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImVec2& a1,const ImVec2& a2,const ImVec2& b1,const ImVec2& b2)\",\n      \"call_args\": \"(a1,a2,b1,b2)\",\n      \"cimguiname\": \"ImPlot_Intersection\",\n      \"defaults\": {},\n      \"funcname\": \"Intersection\",\n      \"location\": \"implot_internal:1504\",\n      \"namespace\": \"ImPlot\",\n      \"nonUDT\": 1,\n      \"ov_cimguiname\": \"ImPlot_Intersection\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImVec2,const ImVec2,const ImVec2,const ImVec2)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_IsAxisHovered\": [\n    {\n      \"args\": \"(ImAxis axis)\",\n      \"argsT\": [\n        {\n          \"name\": \"axis\",\n          \"type\": \"ImAxis\"\n        }\n      ],\n      \"argsoriginal\": \"(ImAxis axis)\",\n      \"call_args\": \"(axis)\",\n      \"cimguiname\": \"ImPlot_IsAxisHovered\",\n      \"defaults\": {},\n      \"funcname\": \"IsAxisHovered\",\n      \"location\": \"implot:975\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_IsAxisHovered\",\n      \"ret\": \"bool\",\n      \"signature\": \"(ImAxis)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_IsColorAuto\": [\n    {\n      \"args\": \"(const ImVec4 col)\",\n      \"argsT\": [\n        {\n          \"name\": \"col\",\n          \"type\": \"const ImVec4\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImVec4& col)\",\n      \"call_args\": \"(col)\",\n      \"cimguiname\": \"ImPlot_IsColorAuto\",\n      \"defaults\": {},\n      \"funcname\": \"IsColorAuto\",\n      \"location\": \"implot_internal:1444\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_IsColorAuto_Vec4\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const ImVec4)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(ImPlotCol idx)\",\n      \"argsT\": [\n        {\n          \"name\": \"idx\",\n          \"type\": \"ImPlotCol\"\n        }\n      ],\n      \"argsoriginal\": \"(ImPlotCol idx)\",\n      \"call_args\": \"(idx)\",\n      \"cimguiname\": \"ImPlot_IsColorAuto\",\n      \"defaults\": {},\n      \"funcname\": \"IsColorAuto\",\n      \"location\": \"implot_internal:1446\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_IsColorAuto_PlotCol\",\n      \"ret\": \"bool\",\n      \"signature\": \"(ImPlotCol)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_IsLeapYear\": [\n    {\n      \"args\": \"(int year)\",\n      \"argsT\": [\n        {\n          \"name\": \"year\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(int year)\",\n      \"call_args\": \"(year)\",\n      \"cimguiname\": \"ImPlot_IsLeapYear\",\n      \"defaults\": {},\n      \"funcname\": \"IsLeapYear\",\n      \"location\": \"implot_internal:1546\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_IsLeapYear\",\n      \"ret\": \"bool\",\n      \"signature\": \"(int)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_IsLegendEntryHovered\": [\n    {\n      \"args\": \"(const char* label_id)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id)\",\n      \"call_args\": \"(label_id)\",\n      \"cimguiname\": \"ImPlot_IsLegendEntryHovered\",\n      \"defaults\": {},\n      \"funcname\": \"IsLegendEntryHovered\",\n      \"location\": \"implot:1010\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_IsLegendEntryHovered\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_IsPlotHovered\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImPlot_IsPlotHovered\",\n      \"defaults\": {},\n      \"funcname\": \"IsPlotHovered\",\n      \"location\": \"implot:973\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_IsPlotHovered\",\n      \"ret\": \"bool\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_IsPlotSelected\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImPlot_IsPlotSelected\",\n      \"defaults\": {},\n      \"funcname\": \"IsPlotSelected\",\n      \"location\": \"implot:980\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_IsPlotSelected\",\n      \"ret\": \"bool\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_IsSubplotsHovered\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImPlot_IsSubplotsHovered\",\n      \"defaults\": {},\n      \"funcname\": \"IsSubplotsHovered\",\n      \"location\": \"implot:977\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_IsSubplotsHovered\",\n      \"ret\": \"bool\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_ItemIcon\": [\n    {\n      \"args\": \"(const ImVec4 col)\",\n      \"argsT\": [\n        {\n          \"name\": \"col\",\n          \"type\": \"const ImVec4\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImVec4& col)\",\n      \"call_args\": \"(col)\",\n      \"cimguiname\": \"ImPlot_ItemIcon\",\n      \"defaults\": {},\n      \"funcname\": \"ItemIcon\",\n      \"location\": \"implot:1206\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_ItemIcon_Vec4\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImVec4)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(ImU32 col)\",\n      \"argsT\": [\n        {\n          \"name\": \"col\",\n          \"type\": \"ImU32\"\n        }\n      ],\n      \"argsoriginal\": \"(ImU32 col)\",\n      \"call_args\": \"(col)\",\n      \"cimguiname\": \"ImPlot_ItemIcon\",\n      \"defaults\": {},\n      \"funcname\": \"ItemIcon\",\n      \"location\": \"implot:1207\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_ItemIcon_U32\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImU32)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_LabelAxisValue\": [\n    {\n      \"args\": \"(const ImPlotAxis axis,double value,char* buff,int size,bool round)\",\n      \"argsT\": [\n        {\n          \"name\": \"axis\",\n          \"type\": \"const ImPlotAxis\"\n        },\n        {\n          \"name\": \"value\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"buff\",\n          \"type\": \"char*\"\n        },\n        {\n          \"name\": \"size\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"round\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImPlotAxis& axis,double value,char* buff,int size,bool round=false)\",\n      \"call_args\": \"(axis,value,buff,size,round)\",\n      \"cimguiname\": \"ImPlot_LabelAxisValue\",\n      \"defaults\": {\n        \"round\": \"false\"\n      },\n      \"funcname\": \"LabelAxisValue\",\n      \"location\": \"implot_internal:1434\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_LabelAxisValue\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImPlotAxis,double,char*,int,bool)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_Locator_Default\": [\n    {\n      \"args\": \"(ImPlotTicker* ticker,const ImPlotRange range,float pixels,bool vertical,ImPlotFormatter formatter,void* formatter_data)\",\n      \"argsT\": [\n        {\n          \"name\": \"ticker\",\n          \"reftoptr\": true,\n          \"type\": \"ImPlotTicker*\"\n        },\n        {\n          \"name\": \"range\",\n          \"type\": \"const ImPlotRange\"\n        },\n        {\n          \"name\": \"pixels\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"vertical\",\n          \"type\": \"bool\"\n        },\n        {\n          \"name\": \"formatter\",\n          \"type\": \"ImPlotFormatter\"\n        },\n        {\n          \"name\": \"formatter_data\",\n          \"type\": \"void*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImPlotTicker& ticker,const ImPlotRange& range,float pixels,bool vertical,ImPlotFormatter formatter,void* formatter_data)\",\n      \"call_args\": \"(*ticker,range,pixels,vertical,formatter,formatter_data)\",\n      \"cimguiname\": \"ImPlot_Locator_Default\",\n      \"defaults\": {},\n      \"funcname\": \"Locator_Default\",\n      \"location\": \"implot_internal:1665\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_Locator_Default\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImPlotTicker*,const ImPlotRange,float,bool,ImPlotFormatter,void*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_Locator_Log10\": [\n    {\n      \"args\": \"(ImPlotTicker* ticker,const ImPlotRange range,float pixels,bool vertical,ImPlotFormatter formatter,void* formatter_data)\",\n      \"argsT\": [\n        {\n          \"name\": \"ticker\",\n          \"reftoptr\": true,\n          \"type\": \"ImPlotTicker*\"\n        },\n        {\n          \"name\": \"range\",\n          \"type\": \"const ImPlotRange\"\n        },\n        {\n          \"name\": \"pixels\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"vertical\",\n          \"type\": \"bool\"\n        },\n        {\n          \"name\": \"formatter\",\n          \"type\": \"ImPlotFormatter\"\n        },\n        {\n          \"name\": \"formatter_data\",\n          \"type\": \"void*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImPlotTicker& ticker,const ImPlotRange& range,float pixels,bool vertical,ImPlotFormatter formatter,void* formatter_data)\",\n      \"call_args\": \"(*ticker,range,pixels,vertical,formatter,formatter_data)\",\n      \"cimguiname\": \"ImPlot_Locator_Log10\",\n      \"defaults\": {},\n      \"funcname\": \"Locator_Log10\",\n      \"location\": \"implot_internal:1667\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_Locator_Log10\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImPlotTicker*,const ImPlotRange,float,bool,ImPlotFormatter,void*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_Locator_SymLog\": [\n    {\n      \"args\": \"(ImPlotTicker* ticker,const ImPlotRange range,float pixels,bool vertical,ImPlotFormatter formatter,void* formatter_data)\",\n      \"argsT\": [\n        {\n          \"name\": \"ticker\",\n          \"reftoptr\": true,\n          \"type\": \"ImPlotTicker*\"\n        },\n        {\n          \"name\": \"range\",\n          \"type\": \"const ImPlotRange\"\n        },\n        {\n          \"name\": \"pixels\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"vertical\",\n          \"type\": \"bool\"\n        },\n        {\n          \"name\": \"formatter\",\n          \"type\": \"ImPlotFormatter\"\n        },\n        {\n          \"name\": \"formatter_data\",\n          \"type\": \"void*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImPlotTicker& ticker,const ImPlotRange& range,float pixels,bool vertical,ImPlotFormatter formatter,void* formatter_data)\",\n      \"call_args\": \"(*ticker,range,pixels,vertical,formatter,formatter_data)\",\n      \"cimguiname\": \"ImPlot_Locator_SymLog\",\n      \"defaults\": {},\n      \"funcname\": \"Locator_SymLog\",\n      \"location\": \"implot_internal:1668\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_Locator_SymLog\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImPlotTicker*,const ImPlotRange,float,bool,ImPlotFormatter,void*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_Locator_Time\": [\n    {\n      \"args\": \"(ImPlotTicker* ticker,const ImPlotRange range,float pixels,bool vertical,ImPlotFormatter formatter,void* formatter_data)\",\n      \"argsT\": [\n        {\n          \"name\": \"ticker\",\n          \"reftoptr\": true,\n          \"type\": \"ImPlotTicker*\"\n        },\n        {\n          \"name\": \"range\",\n          \"type\": \"const ImPlotRange\"\n        },\n        {\n          \"name\": \"pixels\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"vertical\",\n          \"type\": \"bool\"\n        },\n        {\n          \"name\": \"formatter\",\n          \"type\": \"ImPlotFormatter\"\n        },\n        {\n          \"name\": \"formatter_data\",\n          \"type\": \"void*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImPlotTicker& ticker,const ImPlotRange& range,float pixels,bool vertical,ImPlotFormatter formatter,void* formatter_data)\",\n      \"call_args\": \"(*ticker,range,pixels,vertical,formatter,formatter_data)\",\n      \"cimguiname\": \"ImPlot_Locator_Time\",\n      \"defaults\": {},\n      \"funcname\": \"Locator_Time\",\n      \"location\": \"implot_internal:1666\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_Locator_Time\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImPlotTicker*,const ImPlotRange,float,bool,ImPlotFormatter,void*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_MakeTime\": [\n    {\n      \"args\": \"(ImPlotTime *pOut,int year,int month,int day,int hour,int min,int sec,int us)\",\n      \"argsT\": [\n        {\n          \"name\": \"pOut\",\n          \"type\": \"ImPlotTime*\"\n        },\n        {\n          \"name\": \"year\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"month\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"day\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"hour\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"min\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"sec\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"us\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(int year,int month=0,int day=1,int hour=0,int min=0,int sec=0,int us=0)\",\n      \"call_args\": \"(year,month,day,hour,min,sec,us)\",\n      \"cimguiname\": \"ImPlot_MakeTime\",\n      \"defaults\": {\n        \"day\": \"1\",\n        \"hour\": \"0\",\n        \"min\": \"0\",\n        \"month\": \"0\",\n        \"sec\": \"0\",\n        \"us\": \"0\"\n      },\n      \"funcname\": \"MakeTime\",\n      \"location\": \"implot_internal:1570\",\n      \"namespace\": \"ImPlot\",\n      \"nonUDT\": 1,\n      \"ov_cimguiname\": \"ImPlot_MakeTime\",\n      \"ret\": \"void\",\n      \"signature\": \"(int,int,int,int,int,int,int)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_MapInputDefault\": [\n    {\n      \"args\": \"(ImPlotInputMap* dst)\",\n      \"argsT\": [\n        {\n          \"name\": \"dst\",\n          \"type\": \"ImPlotInputMap*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImPlotInputMap* dst=((void*)0))\",\n      \"call_args\": \"(dst)\",\n      \"cimguiname\": \"ImPlot_MapInputDefault\",\n      \"defaults\": {\n        \"dst\": \"NULL\"\n      },\n      \"funcname\": \"MapInputDefault\",\n      \"location\": \"implot:1197\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_MapInputDefault\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImPlotInputMap*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_MapInputReverse\": [\n    {\n      \"args\": \"(ImPlotInputMap* dst)\",\n      \"argsT\": [\n        {\n          \"name\": \"dst\",\n          \"type\": \"ImPlotInputMap*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImPlotInputMap* dst=((void*)0))\",\n      \"call_args\": \"(dst)\",\n      \"cimguiname\": \"ImPlot_MapInputReverse\",\n      \"defaults\": {\n        \"dst\": \"NULL\"\n      },\n      \"funcname\": \"MapInputReverse\",\n      \"location\": \"implot:1199\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_MapInputReverse\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImPlotInputMap*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_MkGmtTime\": [\n    {\n      \"args\": \"(ImPlotTime *pOut,struct tm* ptm)\",\n      \"argsT\": [\n        {\n          \"name\": \"pOut\",\n          \"type\": \"ImPlotTime*\"\n        },\n        {\n          \"name\": \"ptm\",\n          \"type\": \"struct tm*\"\n        }\n      ],\n      \"argsoriginal\": \"(struct tm* ptm)\",\n      \"call_args\": \"(ptm)\",\n      \"cimguiname\": \"ImPlot_MkGmtTime\",\n      \"defaults\": {},\n      \"funcname\": \"MkGmtTime\",\n      \"location\": \"implot_internal:1556\",\n      \"namespace\": \"ImPlot\",\n      \"nonUDT\": 1,\n      \"ov_cimguiname\": \"ImPlot_MkGmtTime\",\n      \"ret\": \"void\",\n      \"signature\": \"(struct tm*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_MkLocTime\": [\n    {\n      \"args\": \"(ImPlotTime *pOut,struct tm* ptm)\",\n      \"argsT\": [\n        {\n          \"name\": \"pOut\",\n          \"type\": \"ImPlotTime*\"\n        },\n        {\n          \"name\": \"ptm\",\n          \"type\": \"struct tm*\"\n        }\n      ],\n      \"argsoriginal\": \"(struct tm* ptm)\",\n      \"call_args\": \"(ptm)\",\n      \"cimguiname\": \"ImPlot_MkLocTime\",\n      \"defaults\": {},\n      \"funcname\": \"MkLocTime\",\n      \"location\": \"implot_internal:1561\",\n      \"namespace\": \"ImPlot\",\n      \"nonUDT\": 1,\n      \"ov_cimguiname\": \"ImPlot_MkLocTime\",\n      \"ret\": \"void\",\n      \"signature\": \"(struct tm*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_NextColormapColor\": [\n    {\n      \"args\": \"(ImVec4 *pOut)\",\n      \"argsT\": [\n        {\n          \"name\": \"pOut\",\n          \"type\": \"ImVec4*\"\n        }\n      ],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImPlot_NextColormapColor\",\n      \"defaults\": {},\n      \"funcname\": \"NextColormapColor\",\n      \"location\": \"implot:1161\",\n      \"namespace\": \"ImPlot\",\n      \"nonUDT\": 1,\n      \"ov_cimguiname\": \"ImPlot_NextColormapColor\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_NextColormapColorU32\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImPlot_NextColormapColorU32\",\n      \"defaults\": {},\n      \"funcname\": \"NextColormapColorU32\",\n      \"location\": \"implot_internal:1481\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_NextColormapColorU32\",\n      \"ret\": \"ImU32\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_NiceNum\": [\n    {\n      \"args\": \"(double x,bool round)\",\n      \"argsT\": [\n        {\n          \"name\": \"x\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"round\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"argsoriginal\": \"(double x,bool round)\",\n      \"call_args\": \"(x,round)\",\n      \"cimguiname\": \"ImPlot_NiceNum\",\n      \"defaults\": {},\n      \"funcname\": \"NiceNum\",\n      \"location\": \"implot_internal:1493\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_NiceNum\",\n      \"ret\": \"double\",\n      \"signature\": \"(double,bool)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_OrderOfMagnitude\": [\n    {\n      \"args\": \"(double val)\",\n      \"argsT\": [\n        {\n          \"name\": \"val\",\n          \"type\": \"double\"\n        }\n      ],\n      \"argsoriginal\": \"(double val)\",\n      \"call_args\": \"(val)\",\n      \"cimguiname\": \"ImPlot_OrderOfMagnitude\",\n      \"defaults\": {},\n      \"funcname\": \"OrderOfMagnitude\",\n      \"location\": \"implot_internal:1495\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_OrderOfMagnitude\",\n      \"ret\": \"int\",\n      \"signature\": \"(double)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_OrderToPrecision\": [\n    {\n      \"args\": \"(int order)\",\n      \"argsT\": [\n        {\n          \"name\": \"order\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(int order)\",\n      \"call_args\": \"(order)\",\n      \"cimguiname\": \"ImPlot_OrderToPrecision\",\n      \"defaults\": {},\n      \"funcname\": \"OrderToPrecision\",\n      \"location\": \"implot_internal:1497\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_OrderToPrecision\",\n      \"ret\": \"int\",\n      \"signature\": \"(int)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_PixelsToPlot\": [\n    {\n      \"args\": \"(ImPlotPoint *pOut,const ImVec2 pix,ImAxis x_axis,ImAxis y_axis)\",\n      \"argsT\": [\n        {\n          \"name\": \"pOut\",\n          \"type\": \"ImPlotPoint*\"\n        },\n        {\n          \"name\": \"pix\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"x_axis\",\n          \"type\": \"ImAxis\"\n        },\n        {\n          \"name\": \"y_axis\",\n          \"type\": \"ImAxis\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImVec2& pix,ImAxis x_axis=-1,ImAxis y_axis=-1)\",\n      \"call_args\": \"(pix,x_axis,y_axis)\",\n      \"cimguiname\": \"ImPlot_PixelsToPlot\",\n      \"defaults\": {\n        \"x_axis\": \"-1\",\n        \"y_axis\": \"-1\"\n      },\n      \"funcname\": \"PixelsToPlot\",\n      \"location\": \"implot:955\",\n      \"namespace\": \"ImPlot\",\n      \"nonUDT\": 1,\n      \"ov_cimguiname\": \"ImPlot_PixelsToPlot_Vec2\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImVec2,ImAxis,ImAxis)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(ImPlotPoint *pOut,float x,float y,ImAxis x_axis,ImAxis y_axis)\",\n      \"argsT\": [\n        {\n          \"name\": \"pOut\",\n          \"type\": \"ImPlotPoint*\"\n        },\n        {\n          \"name\": \"x\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"y\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"x_axis\",\n          \"type\": \"ImAxis\"\n        },\n        {\n          \"name\": \"y_axis\",\n          \"type\": \"ImAxis\"\n        }\n      ],\n      \"argsoriginal\": \"(float x,float y,ImAxis x_axis=-1,ImAxis y_axis=-1)\",\n      \"call_args\": \"(x,y,x_axis,y_axis)\",\n      \"cimguiname\": \"ImPlot_PixelsToPlot\",\n      \"defaults\": {\n        \"x_axis\": \"-1\",\n        \"y_axis\": \"-1\"\n      },\n      \"funcname\": \"PixelsToPlot\",\n      \"location\": \"implot:956\",\n      \"namespace\": \"ImPlot\",\n      \"nonUDT\": 1,\n      \"ov_cimguiname\": \"ImPlot_PixelsToPlot_Float\",\n      \"ret\": \"void\",\n      \"signature\": \"(float,float,ImAxis,ImAxis)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_PlotBarGroups\": [\n    {\n      \"args\": \"(const char* const label_ids[],const float* values,int item_count,int group_count,double group_size,double shift,ImPlotBarGroupsFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_ids\",\n          \"type\": \"const char* const[]\"\n        },\n        {\n          \"name\": \"values\",\n          \"type\": \"const float*\"\n        },\n        {\n          \"name\": \"item_count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"group_count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"group_size\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"shift\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotBarGroupsFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* const label_ids[],const float* values,int item_count,int group_count,double group_size=0.67,double shift=0,ImPlotBarGroupsFlags flags=0)\",\n      \"call_args\": \"(label_ids,values,item_count,group_count,group_size,shift,flags)\",\n      \"cimguiname\": \"ImPlot_PlotBarGroups\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"group_size\": \"0.67\",\n        \"shift\": \"0\"\n      },\n      \"funcname\": \"PlotBarGroups\",\n      \"location\": \"implot:874\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotBarGroups_FloatPtr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char* const[],const float*,int,int,double,double,ImPlotBarGroupsFlags)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* const label_ids[],const double* values,int item_count,int group_count,double group_size,double shift,ImPlotBarGroupsFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_ids\",\n          \"type\": \"const char* const[]\"\n        },\n        {\n          \"name\": \"values\",\n          \"type\": \"const double*\"\n        },\n        {\n          \"name\": \"item_count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"group_count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"group_size\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"shift\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotBarGroupsFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* const label_ids[],const double* values,int item_count,int group_count,double group_size=0.67,double shift=0,ImPlotBarGroupsFlags flags=0)\",\n      \"call_args\": \"(label_ids,values,item_count,group_count,group_size,shift,flags)\",\n      \"cimguiname\": \"ImPlot_PlotBarGroups\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"group_size\": \"0.67\",\n        \"shift\": \"0\"\n      },\n      \"funcname\": \"PlotBarGroups\",\n      \"location\": \"implot:874\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotBarGroups_doublePtr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char* const[],const double*,int,int,double,double,ImPlotBarGroupsFlags)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* const label_ids[],const ImS8* values,int item_count,int group_count,double group_size,double shift,ImPlotBarGroupsFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_ids\",\n          \"type\": \"const char* const[]\"\n        },\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImS8*\"\n        },\n        {\n          \"name\": \"item_count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"group_count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"group_size\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"shift\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotBarGroupsFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* const label_ids[],const ImS8* values,int item_count,int group_count,double group_size=0.67,double shift=0,ImPlotBarGroupsFlags flags=0)\",\n      \"call_args\": \"(label_ids,values,item_count,group_count,group_size,shift,flags)\",\n      \"cimguiname\": \"ImPlot_PlotBarGroups\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"group_size\": \"0.67\",\n        \"shift\": \"0\"\n      },\n      \"funcname\": \"PlotBarGroups\",\n      \"location\": \"implot:874\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotBarGroups_S8Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char* const[],const ImS8*,int,int,double,double,ImPlotBarGroupsFlags)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* const label_ids[],const ImU8* values,int item_count,int group_count,double group_size,double shift,ImPlotBarGroupsFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_ids\",\n          \"type\": \"const char* const[]\"\n        },\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImU8*\"\n        },\n        {\n          \"name\": \"item_count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"group_count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"group_size\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"shift\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotBarGroupsFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* const label_ids[],const ImU8* values,int item_count,int group_count,double group_size=0.67,double shift=0,ImPlotBarGroupsFlags flags=0)\",\n      \"call_args\": \"(label_ids,values,item_count,group_count,group_size,shift,flags)\",\n      \"cimguiname\": \"ImPlot_PlotBarGroups\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"group_size\": \"0.67\",\n        \"shift\": \"0\"\n      },\n      \"funcname\": \"PlotBarGroups\",\n      \"location\": \"implot:874\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotBarGroups_U8Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char* const[],const ImU8*,int,int,double,double,ImPlotBarGroupsFlags)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* const label_ids[],const ImS16* values,int item_count,int group_count,double group_size,double shift,ImPlotBarGroupsFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_ids\",\n          \"type\": \"const char* const[]\"\n        },\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImS16*\"\n        },\n        {\n          \"name\": \"item_count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"group_count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"group_size\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"shift\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotBarGroupsFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* const label_ids[],const ImS16* values,int item_count,int group_count,double group_size=0.67,double shift=0,ImPlotBarGroupsFlags flags=0)\",\n      \"call_args\": \"(label_ids,values,item_count,group_count,group_size,shift,flags)\",\n      \"cimguiname\": \"ImPlot_PlotBarGroups\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"group_size\": \"0.67\",\n        \"shift\": \"0\"\n      },\n      \"funcname\": \"PlotBarGroups\",\n      \"location\": \"implot:874\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotBarGroups_S16Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char* const[],const ImS16*,int,int,double,double,ImPlotBarGroupsFlags)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* const label_ids[],const ImU16* values,int item_count,int group_count,double group_size,double shift,ImPlotBarGroupsFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_ids\",\n          \"type\": \"const char* const[]\"\n        },\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImU16*\"\n        },\n        {\n          \"name\": \"item_count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"group_count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"group_size\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"shift\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotBarGroupsFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* const label_ids[],const ImU16* values,int item_count,int group_count,double group_size=0.67,double shift=0,ImPlotBarGroupsFlags flags=0)\",\n      \"call_args\": \"(label_ids,values,item_count,group_count,group_size,shift,flags)\",\n      \"cimguiname\": \"ImPlot_PlotBarGroups\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"group_size\": \"0.67\",\n        \"shift\": \"0\"\n      },\n      \"funcname\": \"PlotBarGroups\",\n      \"location\": \"implot:874\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotBarGroups_U16Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char* const[],const ImU16*,int,int,double,double,ImPlotBarGroupsFlags)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* const label_ids[],const ImS32* values,int item_count,int group_count,double group_size,double shift,ImPlotBarGroupsFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_ids\",\n          \"type\": \"const char* const[]\"\n        },\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImS32*\"\n        },\n        {\n          \"name\": \"item_count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"group_count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"group_size\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"shift\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotBarGroupsFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* const label_ids[],const ImS32* values,int item_count,int group_count,double group_size=0.67,double shift=0,ImPlotBarGroupsFlags flags=0)\",\n      \"call_args\": \"(label_ids,values,item_count,group_count,group_size,shift,flags)\",\n      \"cimguiname\": \"ImPlot_PlotBarGroups\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"group_size\": \"0.67\",\n        \"shift\": \"0\"\n      },\n      \"funcname\": \"PlotBarGroups\",\n      \"location\": \"implot:874\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotBarGroups_S32Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char* const[],const ImS32*,int,int,double,double,ImPlotBarGroupsFlags)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* const label_ids[],const ImU32* values,int item_count,int group_count,double group_size,double shift,ImPlotBarGroupsFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_ids\",\n          \"type\": \"const char* const[]\"\n        },\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImU32*\"\n        },\n        {\n          \"name\": \"item_count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"group_count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"group_size\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"shift\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotBarGroupsFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* const label_ids[],const ImU32* values,int item_count,int group_count,double group_size=0.67,double shift=0,ImPlotBarGroupsFlags flags=0)\",\n      \"call_args\": \"(label_ids,values,item_count,group_count,group_size,shift,flags)\",\n      \"cimguiname\": \"ImPlot_PlotBarGroups\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"group_size\": \"0.67\",\n        \"shift\": \"0\"\n      },\n      \"funcname\": \"PlotBarGroups\",\n      \"location\": \"implot:874\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotBarGroups_U32Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char* const[],const ImU32*,int,int,double,double,ImPlotBarGroupsFlags)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* const label_ids[],const ImS64* values,int item_count,int group_count,double group_size,double shift,ImPlotBarGroupsFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_ids\",\n          \"type\": \"const char* const[]\"\n        },\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImS64*\"\n        },\n        {\n          \"name\": \"item_count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"group_count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"group_size\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"shift\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotBarGroupsFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* const label_ids[],const ImS64* values,int item_count,int group_count,double group_size=0.67,double shift=0,ImPlotBarGroupsFlags flags=0)\",\n      \"call_args\": \"(label_ids,values,item_count,group_count,group_size,shift,flags)\",\n      \"cimguiname\": \"ImPlot_PlotBarGroups\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"group_size\": \"0.67\",\n        \"shift\": \"0\"\n      },\n      \"funcname\": \"PlotBarGroups\",\n      \"location\": \"implot:874\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotBarGroups_S64Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char* const[],const ImS64*,int,int,double,double,ImPlotBarGroupsFlags)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* const label_ids[],const ImU64* values,int item_count,int group_count,double group_size,double shift,ImPlotBarGroupsFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_ids\",\n          \"type\": \"const char* const[]\"\n        },\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImU64*\"\n        },\n        {\n          \"name\": \"item_count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"group_count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"group_size\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"shift\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotBarGroupsFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* const label_ids[],const ImU64* values,int item_count,int group_count,double group_size=0.67,double shift=0,ImPlotBarGroupsFlags flags=0)\",\n      \"call_args\": \"(label_ids,values,item_count,group_count,group_size,shift,flags)\",\n      \"cimguiname\": \"ImPlot_PlotBarGroups\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"group_size\": \"0.67\",\n        \"shift\": \"0\"\n      },\n      \"funcname\": \"PlotBarGroups\",\n      \"location\": \"implot:874\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotBarGroups_U64Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char* const[],const ImU64*,int,int,double,double,ImPlotBarGroupsFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_PlotBars\": [\n    {\n      \"args\": \"(const char* label_id,const float* values,int count,double bar_size,double shift,ImPlotBarsFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"values\",\n          \"type\": \"const float*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"bar_size\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"shift\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotBarsFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const float* values,int count,double bar_size=0.67,double shift=0,ImPlotBarsFlags flags=0,int offset=0,int stride=sizeof(float))\",\n      \"call_args\": \"(label_id,values,count,bar_size,shift,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotBars\",\n      \"defaults\": {\n        \"bar_size\": \"0.67\",\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"shift\": \"0\",\n        \"stride\": \"sizeof(float)\"\n      },\n      \"funcname\": \"PlotBars\",\n      \"location\": \"implot:869\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotBars_FloatPtrInt\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const float*,int,double,double,ImPlotBarsFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const double* values,int count,double bar_size,double shift,ImPlotBarsFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"values\",\n          \"type\": \"const double*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"bar_size\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"shift\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotBarsFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const double* values,int count,double bar_size=0.67,double shift=0,ImPlotBarsFlags flags=0,int offset=0,int stride=sizeof(double))\",\n      \"call_args\": \"(label_id,values,count,bar_size,shift,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotBars\",\n      \"defaults\": {\n        \"bar_size\": \"0.67\",\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"shift\": \"0\",\n        \"stride\": \"sizeof(double)\"\n      },\n      \"funcname\": \"PlotBars\",\n      \"location\": \"implot:869\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotBars_doublePtrInt\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const double*,int,double,double,ImPlotBarsFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImS8* values,int count,double bar_size,double shift,ImPlotBarsFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImS8*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"bar_size\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"shift\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotBarsFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImS8* values,int count,double bar_size=0.67,double shift=0,ImPlotBarsFlags flags=0,int offset=0,int stride=sizeof(ImS8))\",\n      \"call_args\": \"(label_id,values,count,bar_size,shift,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotBars\",\n      \"defaults\": {\n        \"bar_size\": \"0.67\",\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"shift\": \"0\",\n        \"stride\": \"sizeof(ImS8)\"\n      },\n      \"funcname\": \"PlotBars\",\n      \"location\": \"implot:869\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotBars_S8PtrInt\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImS8*,int,double,double,ImPlotBarsFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImU8* values,int count,double bar_size,double shift,ImPlotBarsFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImU8*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"bar_size\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"shift\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotBarsFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImU8* values,int count,double bar_size=0.67,double shift=0,ImPlotBarsFlags flags=0,int offset=0,int stride=sizeof(ImU8))\",\n      \"call_args\": \"(label_id,values,count,bar_size,shift,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotBars\",\n      \"defaults\": {\n        \"bar_size\": \"0.67\",\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"shift\": \"0\",\n        \"stride\": \"sizeof(ImU8)\"\n      },\n      \"funcname\": \"PlotBars\",\n      \"location\": \"implot:869\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotBars_U8PtrInt\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImU8*,int,double,double,ImPlotBarsFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImS16* values,int count,double bar_size,double shift,ImPlotBarsFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImS16*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"bar_size\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"shift\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotBarsFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImS16* values,int count,double bar_size=0.67,double shift=0,ImPlotBarsFlags flags=0,int offset=0,int stride=sizeof(ImS16))\",\n      \"call_args\": \"(label_id,values,count,bar_size,shift,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotBars\",\n      \"defaults\": {\n        \"bar_size\": \"0.67\",\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"shift\": \"0\",\n        \"stride\": \"sizeof(ImS16)\"\n      },\n      \"funcname\": \"PlotBars\",\n      \"location\": \"implot:869\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotBars_S16PtrInt\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImS16*,int,double,double,ImPlotBarsFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImU16* values,int count,double bar_size,double shift,ImPlotBarsFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImU16*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"bar_size\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"shift\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotBarsFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImU16* values,int count,double bar_size=0.67,double shift=0,ImPlotBarsFlags flags=0,int offset=0,int stride=sizeof(ImU16))\",\n      \"call_args\": \"(label_id,values,count,bar_size,shift,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotBars\",\n      \"defaults\": {\n        \"bar_size\": \"0.67\",\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"shift\": \"0\",\n        \"stride\": \"sizeof(ImU16)\"\n      },\n      \"funcname\": \"PlotBars\",\n      \"location\": \"implot:869\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotBars_U16PtrInt\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImU16*,int,double,double,ImPlotBarsFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImS32* values,int count,double bar_size,double shift,ImPlotBarsFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImS32*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"bar_size\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"shift\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotBarsFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImS32* values,int count,double bar_size=0.67,double shift=0,ImPlotBarsFlags flags=0,int offset=0,int stride=sizeof(ImS32))\",\n      \"call_args\": \"(label_id,values,count,bar_size,shift,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotBars\",\n      \"defaults\": {\n        \"bar_size\": \"0.67\",\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"shift\": \"0\",\n        \"stride\": \"sizeof(ImS32)\"\n      },\n      \"funcname\": \"PlotBars\",\n      \"location\": \"implot:869\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotBars_S32PtrInt\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImS32*,int,double,double,ImPlotBarsFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImU32* values,int count,double bar_size,double shift,ImPlotBarsFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImU32*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"bar_size\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"shift\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotBarsFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImU32* values,int count,double bar_size=0.67,double shift=0,ImPlotBarsFlags flags=0,int offset=0,int stride=sizeof(ImU32))\",\n      \"call_args\": \"(label_id,values,count,bar_size,shift,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotBars\",\n      \"defaults\": {\n        \"bar_size\": \"0.67\",\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"shift\": \"0\",\n        \"stride\": \"sizeof(ImU32)\"\n      },\n      \"funcname\": \"PlotBars\",\n      \"location\": \"implot:869\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotBars_U32PtrInt\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImU32*,int,double,double,ImPlotBarsFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImS64* values,int count,double bar_size,double shift,ImPlotBarsFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImS64*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"bar_size\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"shift\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotBarsFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImS64* values,int count,double bar_size=0.67,double shift=0,ImPlotBarsFlags flags=0,int offset=0,int stride=sizeof(ImS64))\",\n      \"call_args\": \"(label_id,values,count,bar_size,shift,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotBars\",\n      \"defaults\": {\n        \"bar_size\": \"0.67\",\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"shift\": \"0\",\n        \"stride\": \"sizeof(ImS64)\"\n      },\n      \"funcname\": \"PlotBars\",\n      \"location\": \"implot:869\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotBars_S64PtrInt\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImS64*,int,double,double,ImPlotBarsFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImU64* values,int count,double bar_size,double shift,ImPlotBarsFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImU64*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"bar_size\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"shift\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotBarsFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImU64* values,int count,double bar_size=0.67,double shift=0,ImPlotBarsFlags flags=0,int offset=0,int stride=sizeof(ImU64))\",\n      \"call_args\": \"(label_id,values,count,bar_size,shift,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotBars\",\n      \"defaults\": {\n        \"bar_size\": \"0.67\",\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"shift\": \"0\",\n        \"stride\": \"sizeof(ImU64)\"\n      },\n      \"funcname\": \"PlotBars\",\n      \"location\": \"implot:869\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotBars_U64PtrInt\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImU64*,int,double,double,ImPlotBarsFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const float* xs,const float* ys,int count,double bar_size,ImPlotBarsFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"xs\",\n          \"type\": \"const float*\"\n        },\n        {\n          \"name\": \"ys\",\n          \"type\": \"const float*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"bar_size\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotBarsFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const float* xs,const float* ys,int count,double bar_size,ImPlotBarsFlags flags=0,int offset=0,int stride=sizeof(float))\",\n      \"call_args\": \"(label_id,xs,ys,count,bar_size,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotBars\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(float)\"\n      },\n      \"funcname\": \"PlotBars\",\n      \"location\": \"implot:870\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotBars_FloatPtrFloatPtr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const float*,const float*,int,double,ImPlotBarsFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const double* xs,const double* ys,int count,double bar_size,ImPlotBarsFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"xs\",\n          \"type\": \"const double*\"\n        },\n        {\n          \"name\": \"ys\",\n          \"type\": \"const double*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"bar_size\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotBarsFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const double* xs,const double* ys,int count,double bar_size,ImPlotBarsFlags flags=0,int offset=0,int stride=sizeof(double))\",\n      \"call_args\": \"(label_id,xs,ys,count,bar_size,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotBars\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(double)\"\n      },\n      \"funcname\": \"PlotBars\",\n      \"location\": \"implot:870\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotBars_doublePtrdoublePtr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const double*,const double*,int,double,ImPlotBarsFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImS8* xs,const ImS8* ys,int count,double bar_size,ImPlotBarsFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"xs\",\n          \"type\": \"const ImS8*\"\n        },\n        {\n          \"name\": \"ys\",\n          \"type\": \"const ImS8*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"bar_size\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotBarsFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImS8* xs,const ImS8* ys,int count,double bar_size,ImPlotBarsFlags flags=0,int offset=0,int stride=sizeof(ImS8))\",\n      \"call_args\": \"(label_id,xs,ys,count,bar_size,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotBars\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(ImS8)\"\n      },\n      \"funcname\": \"PlotBars\",\n      \"location\": \"implot:870\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotBars_S8PtrS8Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImS8*,const ImS8*,int,double,ImPlotBarsFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImU8* xs,const ImU8* ys,int count,double bar_size,ImPlotBarsFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"xs\",\n          \"type\": \"const ImU8*\"\n        },\n        {\n          \"name\": \"ys\",\n          \"type\": \"const ImU8*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"bar_size\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotBarsFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImU8* xs,const ImU8* ys,int count,double bar_size,ImPlotBarsFlags flags=0,int offset=0,int stride=sizeof(ImU8))\",\n      \"call_args\": \"(label_id,xs,ys,count,bar_size,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotBars\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(ImU8)\"\n      },\n      \"funcname\": \"PlotBars\",\n      \"location\": \"implot:870\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotBars_U8PtrU8Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImU8*,const ImU8*,int,double,ImPlotBarsFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImS16* xs,const ImS16* ys,int count,double bar_size,ImPlotBarsFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"xs\",\n          \"type\": \"const ImS16*\"\n        },\n        {\n          \"name\": \"ys\",\n          \"type\": \"const ImS16*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"bar_size\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotBarsFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImS16* xs,const ImS16* ys,int count,double bar_size,ImPlotBarsFlags flags=0,int offset=0,int stride=sizeof(ImS16))\",\n      \"call_args\": \"(label_id,xs,ys,count,bar_size,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotBars\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(ImS16)\"\n      },\n      \"funcname\": \"PlotBars\",\n      \"location\": \"implot:870\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotBars_S16PtrS16Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImS16*,const ImS16*,int,double,ImPlotBarsFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImU16* xs,const ImU16* ys,int count,double bar_size,ImPlotBarsFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"xs\",\n          \"type\": \"const ImU16*\"\n        },\n        {\n          \"name\": \"ys\",\n          \"type\": \"const ImU16*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"bar_size\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotBarsFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImU16* xs,const ImU16* ys,int count,double bar_size,ImPlotBarsFlags flags=0,int offset=0,int stride=sizeof(ImU16))\",\n      \"call_args\": \"(label_id,xs,ys,count,bar_size,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotBars\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(ImU16)\"\n      },\n      \"funcname\": \"PlotBars\",\n      \"location\": \"implot:870\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotBars_U16PtrU16Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImU16*,const ImU16*,int,double,ImPlotBarsFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImS32* xs,const ImS32* ys,int count,double bar_size,ImPlotBarsFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"xs\",\n          \"type\": \"const ImS32*\"\n        },\n        {\n          \"name\": \"ys\",\n          \"type\": \"const ImS32*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"bar_size\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotBarsFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImS32* xs,const ImS32* ys,int count,double bar_size,ImPlotBarsFlags flags=0,int offset=0,int stride=sizeof(ImS32))\",\n      \"call_args\": \"(label_id,xs,ys,count,bar_size,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotBars\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(ImS32)\"\n      },\n      \"funcname\": \"PlotBars\",\n      \"location\": \"implot:870\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotBars_S32PtrS32Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImS32*,const ImS32*,int,double,ImPlotBarsFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImU32* xs,const ImU32* ys,int count,double bar_size,ImPlotBarsFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"xs\",\n          \"type\": \"const ImU32*\"\n        },\n        {\n          \"name\": \"ys\",\n          \"type\": \"const ImU32*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"bar_size\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotBarsFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImU32* xs,const ImU32* ys,int count,double bar_size,ImPlotBarsFlags flags=0,int offset=0,int stride=sizeof(ImU32))\",\n      \"call_args\": \"(label_id,xs,ys,count,bar_size,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotBars\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(ImU32)\"\n      },\n      \"funcname\": \"PlotBars\",\n      \"location\": \"implot:870\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotBars_U32PtrU32Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImU32*,const ImU32*,int,double,ImPlotBarsFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImS64* xs,const ImS64* ys,int count,double bar_size,ImPlotBarsFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"xs\",\n          \"type\": \"const ImS64*\"\n        },\n        {\n          \"name\": \"ys\",\n          \"type\": \"const ImS64*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"bar_size\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotBarsFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImS64* xs,const ImS64* ys,int count,double bar_size,ImPlotBarsFlags flags=0,int offset=0,int stride=sizeof(ImS64))\",\n      \"call_args\": \"(label_id,xs,ys,count,bar_size,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotBars\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(ImS64)\"\n      },\n      \"funcname\": \"PlotBars\",\n      \"location\": \"implot:870\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotBars_S64PtrS64Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImS64*,const ImS64*,int,double,ImPlotBarsFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImU64* xs,const ImU64* ys,int count,double bar_size,ImPlotBarsFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"xs\",\n          \"type\": \"const ImU64*\"\n        },\n        {\n          \"name\": \"ys\",\n          \"type\": \"const ImU64*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"bar_size\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotBarsFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImU64* xs,const ImU64* ys,int count,double bar_size,ImPlotBarsFlags flags=0,int offset=0,int stride=sizeof(ImU64))\",\n      \"call_args\": \"(label_id,xs,ys,count,bar_size,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotBars\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(ImU64)\"\n      },\n      \"funcname\": \"PlotBars\",\n      \"location\": \"implot:870\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotBars_U64PtrU64Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImU64*,const ImU64*,int,double,ImPlotBarsFlags,int,int)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_PlotBarsG\": [\n    {\n      \"args\": \"(const char* label_id,ImPlotGetter getter,void* data,int count,double bar_size,ImPlotBarsFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"custom_type\": \"ImPlotPoint_getter\",\n          \"name\": \"getter\",\n          \"type\": \"ImPlotGetter\"\n        },\n        {\n          \"name\": \"data\",\n          \"type\": \"void*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"bar_size\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotBarsFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,ImPlotGetter getter,void* data,int count,double bar_size,ImPlotBarsFlags flags=0)\",\n      \"call_args\": \"(label_id,getter,data,count,bar_size,flags)\",\n      \"cimguiname\": \"ImPlot_PlotBarsG\",\n      \"defaults\": {\n        \"flags\": \"0\"\n      },\n      \"funcname\": \"PlotBarsG\",\n      \"location\": \"implot:871\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotBarsG\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,ImPlotGetter,void*,int,double,ImPlotBarsFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_PlotDigital\": [\n    {\n      \"args\": \"(const char* label_id,const float* xs,const float* ys,int count,ImPlotDigitalFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"xs\",\n          \"type\": \"const float*\"\n        },\n        {\n          \"name\": \"ys\",\n          \"type\": \"const float*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotDigitalFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const float* xs,const float* ys,int count,ImPlotDigitalFlags flags=0,int offset=0,int stride=sizeof(float))\",\n      \"call_args\": \"(label_id,xs,ys,count,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotDigital\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(float)\"\n      },\n      \"funcname\": \"PlotDigital\",\n      \"location\": \"implot:902\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotDigital_FloatPtr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const float*,const float*,int,ImPlotDigitalFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const double* xs,const double* ys,int count,ImPlotDigitalFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"xs\",\n          \"type\": \"const double*\"\n        },\n        {\n          \"name\": \"ys\",\n          \"type\": \"const double*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotDigitalFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const double* xs,const double* ys,int count,ImPlotDigitalFlags flags=0,int offset=0,int stride=sizeof(double))\",\n      \"call_args\": \"(label_id,xs,ys,count,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotDigital\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(double)\"\n      },\n      \"funcname\": \"PlotDigital\",\n      \"location\": \"implot:902\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotDigital_doublePtr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const double*,const double*,int,ImPlotDigitalFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImS8* xs,const ImS8* ys,int count,ImPlotDigitalFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"xs\",\n          \"type\": \"const ImS8*\"\n        },\n        {\n          \"name\": \"ys\",\n          \"type\": \"const ImS8*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotDigitalFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImS8* xs,const ImS8* ys,int count,ImPlotDigitalFlags flags=0,int offset=0,int stride=sizeof(ImS8))\",\n      \"call_args\": \"(label_id,xs,ys,count,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotDigital\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(ImS8)\"\n      },\n      \"funcname\": \"PlotDigital\",\n      \"location\": \"implot:902\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotDigital_S8Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImS8*,const ImS8*,int,ImPlotDigitalFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImU8* xs,const ImU8* ys,int count,ImPlotDigitalFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"xs\",\n          \"type\": \"const ImU8*\"\n        },\n        {\n          \"name\": \"ys\",\n          \"type\": \"const ImU8*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotDigitalFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImU8* xs,const ImU8* ys,int count,ImPlotDigitalFlags flags=0,int offset=0,int stride=sizeof(ImU8))\",\n      \"call_args\": \"(label_id,xs,ys,count,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotDigital\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(ImU8)\"\n      },\n      \"funcname\": \"PlotDigital\",\n      \"location\": \"implot:902\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotDigital_U8Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImU8*,const ImU8*,int,ImPlotDigitalFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImS16* xs,const ImS16* ys,int count,ImPlotDigitalFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"xs\",\n          \"type\": \"const ImS16*\"\n        },\n        {\n          \"name\": \"ys\",\n          \"type\": \"const ImS16*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotDigitalFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImS16* xs,const ImS16* ys,int count,ImPlotDigitalFlags flags=0,int offset=0,int stride=sizeof(ImS16))\",\n      \"call_args\": \"(label_id,xs,ys,count,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotDigital\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(ImS16)\"\n      },\n      \"funcname\": \"PlotDigital\",\n      \"location\": \"implot:902\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotDigital_S16Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImS16*,const ImS16*,int,ImPlotDigitalFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImU16* xs,const ImU16* ys,int count,ImPlotDigitalFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"xs\",\n          \"type\": \"const ImU16*\"\n        },\n        {\n          \"name\": \"ys\",\n          \"type\": \"const ImU16*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotDigitalFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImU16* xs,const ImU16* ys,int count,ImPlotDigitalFlags flags=0,int offset=0,int stride=sizeof(ImU16))\",\n      \"call_args\": \"(label_id,xs,ys,count,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotDigital\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(ImU16)\"\n      },\n      \"funcname\": \"PlotDigital\",\n      \"location\": \"implot:902\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotDigital_U16Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImU16*,const ImU16*,int,ImPlotDigitalFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImS32* xs,const ImS32* ys,int count,ImPlotDigitalFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"xs\",\n          \"type\": \"const ImS32*\"\n        },\n        {\n          \"name\": \"ys\",\n          \"type\": \"const ImS32*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotDigitalFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImS32* xs,const ImS32* ys,int count,ImPlotDigitalFlags flags=0,int offset=0,int stride=sizeof(ImS32))\",\n      \"call_args\": \"(label_id,xs,ys,count,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotDigital\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(ImS32)\"\n      },\n      \"funcname\": \"PlotDigital\",\n      \"location\": \"implot:902\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotDigital_S32Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImS32*,const ImS32*,int,ImPlotDigitalFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImU32* xs,const ImU32* ys,int count,ImPlotDigitalFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"xs\",\n          \"type\": \"const ImU32*\"\n        },\n        {\n          \"name\": \"ys\",\n          \"type\": \"const ImU32*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotDigitalFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImU32* xs,const ImU32* ys,int count,ImPlotDigitalFlags flags=0,int offset=0,int stride=sizeof(ImU32))\",\n      \"call_args\": \"(label_id,xs,ys,count,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotDigital\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(ImU32)\"\n      },\n      \"funcname\": \"PlotDigital\",\n      \"location\": \"implot:902\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotDigital_U32Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImU32*,const ImU32*,int,ImPlotDigitalFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImS64* xs,const ImS64* ys,int count,ImPlotDigitalFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"xs\",\n          \"type\": \"const ImS64*\"\n        },\n        {\n          \"name\": \"ys\",\n          \"type\": \"const ImS64*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotDigitalFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImS64* xs,const ImS64* ys,int count,ImPlotDigitalFlags flags=0,int offset=0,int stride=sizeof(ImS64))\",\n      \"call_args\": \"(label_id,xs,ys,count,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotDigital\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(ImS64)\"\n      },\n      \"funcname\": \"PlotDigital\",\n      \"location\": \"implot:902\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotDigital_S64Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImS64*,const ImS64*,int,ImPlotDigitalFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImU64* xs,const ImU64* ys,int count,ImPlotDigitalFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"xs\",\n          \"type\": \"const ImU64*\"\n        },\n        {\n          \"name\": \"ys\",\n          \"type\": \"const ImU64*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotDigitalFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImU64* xs,const ImU64* ys,int count,ImPlotDigitalFlags flags=0,int offset=0,int stride=sizeof(ImU64))\",\n      \"call_args\": \"(label_id,xs,ys,count,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotDigital\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(ImU64)\"\n      },\n      \"funcname\": \"PlotDigital\",\n      \"location\": \"implot:902\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotDigital_U64Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImU64*,const ImU64*,int,ImPlotDigitalFlags,int,int)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_PlotDigitalG\": [\n    {\n      \"args\": \"(const char* label_id,ImPlotGetter getter,void* data,int count,ImPlotDigitalFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"custom_type\": \"ImPlotPoint_getter\",\n          \"name\": \"getter\",\n          \"type\": \"ImPlotGetter\"\n        },\n        {\n          \"name\": \"data\",\n          \"type\": \"void*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotDigitalFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,ImPlotGetter getter,void* data,int count,ImPlotDigitalFlags flags=0)\",\n      \"call_args\": \"(label_id,getter,data,count,flags)\",\n      \"cimguiname\": \"ImPlot_PlotDigitalG\",\n      \"defaults\": {\n        \"flags\": \"0\"\n      },\n      \"funcname\": \"PlotDigitalG\",\n      \"location\": \"implot:903\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotDigitalG\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,ImPlotGetter,void*,int,ImPlotDigitalFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_PlotDummy\": [\n    {\n      \"args\": \"(const char* label_id,ImPlotDummyFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotDummyFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,ImPlotDummyFlags flags=0)\",\n      \"call_args\": \"(label_id,flags)\",\n      \"cimguiname\": \"ImPlot_PlotDummy\",\n      \"defaults\": {\n        \"flags\": \"0\"\n      },\n      \"funcname\": \"PlotDummy\",\n      \"location\": \"implot:912\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotDummy\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,ImPlotDummyFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_PlotErrorBars\": [\n    {\n      \"args\": \"(const char* label_id,const float* xs,const float* ys,const float* err,int count,ImPlotErrorBarsFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"xs\",\n          \"type\": \"const float*\"\n        },\n        {\n          \"name\": \"ys\",\n          \"type\": \"const float*\"\n        },\n        {\n          \"name\": \"err\",\n          \"type\": \"const float*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotErrorBarsFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const float* xs,const float* ys,const float* err,int count,ImPlotErrorBarsFlags flags=0,int offset=0,int stride=sizeof(float))\",\n      \"call_args\": \"(label_id,xs,ys,err,count,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotErrorBars\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(float)\"\n      },\n      \"funcname\": \"PlotErrorBars\",\n      \"location\": \"implot:877\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotErrorBars_FloatPtrFloatPtrFloatPtrInt\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const float*,const float*,const float*,int,ImPlotErrorBarsFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const double* xs,const double* ys,const double* err,int count,ImPlotErrorBarsFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"xs\",\n          \"type\": \"const double*\"\n        },\n        {\n          \"name\": \"ys\",\n          \"type\": \"const double*\"\n        },\n        {\n          \"name\": \"err\",\n          \"type\": \"const double*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotErrorBarsFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const double* xs,const double* ys,const double* err,int count,ImPlotErrorBarsFlags flags=0,int offset=0,int stride=sizeof(double))\",\n      \"call_args\": \"(label_id,xs,ys,err,count,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotErrorBars\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(double)\"\n      },\n      \"funcname\": \"PlotErrorBars\",\n      \"location\": \"implot:877\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotErrorBars_doublePtrdoublePtrdoublePtrInt\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const double*,const double*,const double*,int,ImPlotErrorBarsFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImS8* xs,const ImS8* ys,const ImS8* err,int count,ImPlotErrorBarsFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"xs\",\n          \"type\": \"const ImS8*\"\n        },\n        {\n          \"name\": \"ys\",\n          \"type\": \"const ImS8*\"\n        },\n        {\n          \"name\": \"err\",\n          \"type\": \"const ImS8*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotErrorBarsFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImS8* xs,const ImS8* ys,const ImS8* err,int count,ImPlotErrorBarsFlags flags=0,int offset=0,int stride=sizeof(ImS8))\",\n      \"call_args\": \"(label_id,xs,ys,err,count,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotErrorBars\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(ImS8)\"\n      },\n      \"funcname\": \"PlotErrorBars\",\n      \"location\": \"implot:877\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotErrorBars_S8PtrS8PtrS8PtrInt\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImS8*,const ImS8*,const ImS8*,int,ImPlotErrorBarsFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImU8* xs,const ImU8* ys,const ImU8* err,int count,ImPlotErrorBarsFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"xs\",\n          \"type\": \"const ImU8*\"\n        },\n        {\n          \"name\": \"ys\",\n          \"type\": \"const ImU8*\"\n        },\n        {\n          \"name\": \"err\",\n          \"type\": \"const ImU8*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotErrorBarsFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImU8* xs,const ImU8* ys,const ImU8* err,int count,ImPlotErrorBarsFlags flags=0,int offset=0,int stride=sizeof(ImU8))\",\n      \"call_args\": \"(label_id,xs,ys,err,count,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotErrorBars\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(ImU8)\"\n      },\n      \"funcname\": \"PlotErrorBars\",\n      \"location\": \"implot:877\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotErrorBars_U8PtrU8PtrU8PtrInt\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImU8*,const ImU8*,const ImU8*,int,ImPlotErrorBarsFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImS16* xs,const ImS16* ys,const ImS16* err,int count,ImPlotErrorBarsFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"xs\",\n          \"type\": \"const ImS16*\"\n        },\n        {\n          \"name\": \"ys\",\n          \"type\": \"const ImS16*\"\n        },\n        {\n          \"name\": \"err\",\n          \"type\": \"const ImS16*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotErrorBarsFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImS16* xs,const ImS16* ys,const ImS16* err,int count,ImPlotErrorBarsFlags flags=0,int offset=0,int stride=sizeof(ImS16))\",\n      \"call_args\": \"(label_id,xs,ys,err,count,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotErrorBars\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(ImS16)\"\n      },\n      \"funcname\": \"PlotErrorBars\",\n      \"location\": \"implot:877\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotErrorBars_S16PtrS16PtrS16PtrInt\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImS16*,const ImS16*,const ImS16*,int,ImPlotErrorBarsFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImU16* xs,const ImU16* ys,const ImU16* err,int count,ImPlotErrorBarsFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"xs\",\n          \"type\": \"const ImU16*\"\n        },\n        {\n          \"name\": \"ys\",\n          \"type\": \"const ImU16*\"\n        },\n        {\n          \"name\": \"err\",\n          \"type\": \"const ImU16*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotErrorBarsFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImU16* xs,const ImU16* ys,const ImU16* err,int count,ImPlotErrorBarsFlags flags=0,int offset=0,int stride=sizeof(ImU16))\",\n      \"call_args\": \"(label_id,xs,ys,err,count,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotErrorBars\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(ImU16)\"\n      },\n      \"funcname\": \"PlotErrorBars\",\n      \"location\": \"implot:877\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotErrorBars_U16PtrU16PtrU16PtrInt\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImU16*,const ImU16*,const ImU16*,int,ImPlotErrorBarsFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImS32* xs,const ImS32* ys,const ImS32* err,int count,ImPlotErrorBarsFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"xs\",\n          \"type\": \"const ImS32*\"\n        },\n        {\n          \"name\": \"ys\",\n          \"type\": \"const ImS32*\"\n        },\n        {\n          \"name\": \"err\",\n          \"type\": \"const ImS32*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotErrorBarsFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImS32* xs,const ImS32* ys,const ImS32* err,int count,ImPlotErrorBarsFlags flags=0,int offset=0,int stride=sizeof(ImS32))\",\n      \"call_args\": \"(label_id,xs,ys,err,count,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotErrorBars\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(ImS32)\"\n      },\n      \"funcname\": \"PlotErrorBars\",\n      \"location\": \"implot:877\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotErrorBars_S32PtrS32PtrS32PtrInt\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImS32*,const ImS32*,const ImS32*,int,ImPlotErrorBarsFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImU32* xs,const ImU32* ys,const ImU32* err,int count,ImPlotErrorBarsFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"xs\",\n          \"type\": \"const ImU32*\"\n        },\n        {\n          \"name\": \"ys\",\n          \"type\": \"const ImU32*\"\n        },\n        {\n          \"name\": \"err\",\n          \"type\": \"const ImU32*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotErrorBarsFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImU32* xs,const ImU32* ys,const ImU32* err,int count,ImPlotErrorBarsFlags flags=0,int offset=0,int stride=sizeof(ImU32))\",\n      \"call_args\": \"(label_id,xs,ys,err,count,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotErrorBars\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(ImU32)\"\n      },\n      \"funcname\": \"PlotErrorBars\",\n      \"location\": \"implot:877\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotErrorBars_U32PtrU32PtrU32PtrInt\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImU32*,const ImU32*,const ImU32*,int,ImPlotErrorBarsFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImS64* xs,const ImS64* ys,const ImS64* err,int count,ImPlotErrorBarsFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"xs\",\n          \"type\": \"const ImS64*\"\n        },\n        {\n          \"name\": \"ys\",\n          \"type\": \"const ImS64*\"\n        },\n        {\n          \"name\": \"err\",\n          \"type\": \"const ImS64*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotErrorBarsFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImS64* xs,const ImS64* ys,const ImS64* err,int count,ImPlotErrorBarsFlags flags=0,int offset=0,int stride=sizeof(ImS64))\",\n      \"call_args\": \"(label_id,xs,ys,err,count,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotErrorBars\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(ImS64)\"\n      },\n      \"funcname\": \"PlotErrorBars\",\n      \"location\": \"implot:877\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotErrorBars_S64PtrS64PtrS64PtrInt\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImS64*,const ImS64*,const ImS64*,int,ImPlotErrorBarsFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImU64* xs,const ImU64* ys,const ImU64* err,int count,ImPlotErrorBarsFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"xs\",\n          \"type\": \"const ImU64*\"\n        },\n        {\n          \"name\": \"ys\",\n          \"type\": \"const ImU64*\"\n        },\n        {\n          \"name\": \"err\",\n          \"type\": \"const ImU64*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotErrorBarsFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImU64* xs,const ImU64* ys,const ImU64* err,int count,ImPlotErrorBarsFlags flags=0,int offset=0,int stride=sizeof(ImU64))\",\n      \"call_args\": \"(label_id,xs,ys,err,count,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotErrorBars\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(ImU64)\"\n      },\n      \"funcname\": \"PlotErrorBars\",\n      \"location\": \"implot:877\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotErrorBars_U64PtrU64PtrU64PtrInt\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImU64*,const ImU64*,const ImU64*,int,ImPlotErrorBarsFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const float* xs,const float* ys,const float* neg,const float* pos,int count,ImPlotErrorBarsFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"xs\",\n          \"type\": \"const float*\"\n        },\n        {\n          \"name\": \"ys\",\n          \"type\": \"const float*\"\n        },\n        {\n          \"name\": \"neg\",\n          \"type\": \"const float*\"\n        },\n        {\n          \"name\": \"pos\",\n          \"type\": \"const float*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotErrorBarsFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const float* xs,const float* ys,const float* neg,const float* pos,int count,ImPlotErrorBarsFlags flags=0,int offset=0,int stride=sizeof(float))\",\n      \"call_args\": \"(label_id,xs,ys,neg,pos,count,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotErrorBars\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(float)\"\n      },\n      \"funcname\": \"PlotErrorBars\",\n      \"location\": \"implot:878\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotErrorBars_FloatPtrFloatPtrFloatPtrFloatPtr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const float*,const float*,const float*,const float*,int,ImPlotErrorBarsFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const double* xs,const double* ys,const double* neg,const double* pos,int count,ImPlotErrorBarsFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"xs\",\n          \"type\": \"const double*\"\n        },\n        {\n          \"name\": \"ys\",\n          \"type\": \"const double*\"\n        },\n        {\n          \"name\": \"neg\",\n          \"type\": \"const double*\"\n        },\n        {\n          \"name\": \"pos\",\n          \"type\": \"const double*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotErrorBarsFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const double* xs,const double* ys,const double* neg,const double* pos,int count,ImPlotErrorBarsFlags flags=0,int offset=0,int stride=sizeof(double))\",\n      \"call_args\": \"(label_id,xs,ys,neg,pos,count,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotErrorBars\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(double)\"\n      },\n      \"funcname\": \"PlotErrorBars\",\n      \"location\": \"implot:878\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotErrorBars_doublePtrdoublePtrdoublePtrdoublePtr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const double*,const double*,const double*,const double*,int,ImPlotErrorBarsFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImS8* xs,const ImS8* ys,const ImS8* neg,const ImS8* pos,int count,ImPlotErrorBarsFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"xs\",\n          \"type\": \"const ImS8*\"\n        },\n        {\n          \"name\": \"ys\",\n          \"type\": \"const ImS8*\"\n        },\n        {\n          \"name\": \"neg\",\n          \"type\": \"const ImS8*\"\n        },\n        {\n          \"name\": \"pos\",\n          \"type\": \"const ImS8*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotErrorBarsFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImS8* xs,const ImS8* ys,const ImS8* neg,const ImS8* pos,int count,ImPlotErrorBarsFlags flags=0,int offset=0,int stride=sizeof(ImS8))\",\n      \"call_args\": \"(label_id,xs,ys,neg,pos,count,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotErrorBars\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(ImS8)\"\n      },\n      \"funcname\": \"PlotErrorBars\",\n      \"location\": \"implot:878\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotErrorBars_S8PtrS8PtrS8PtrS8Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImS8*,const ImS8*,const ImS8*,const ImS8*,int,ImPlotErrorBarsFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImU8* xs,const ImU8* ys,const ImU8* neg,const ImU8* pos,int count,ImPlotErrorBarsFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"xs\",\n          \"type\": \"const ImU8*\"\n        },\n        {\n          \"name\": \"ys\",\n          \"type\": \"const ImU8*\"\n        },\n        {\n          \"name\": \"neg\",\n          \"type\": \"const ImU8*\"\n        },\n        {\n          \"name\": \"pos\",\n          \"type\": \"const ImU8*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotErrorBarsFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImU8* xs,const ImU8* ys,const ImU8* neg,const ImU8* pos,int count,ImPlotErrorBarsFlags flags=0,int offset=0,int stride=sizeof(ImU8))\",\n      \"call_args\": \"(label_id,xs,ys,neg,pos,count,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotErrorBars\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(ImU8)\"\n      },\n      \"funcname\": \"PlotErrorBars\",\n      \"location\": \"implot:878\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotErrorBars_U8PtrU8PtrU8PtrU8Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImU8*,const ImU8*,const ImU8*,const ImU8*,int,ImPlotErrorBarsFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImS16* xs,const ImS16* ys,const ImS16* neg,const ImS16* pos,int count,ImPlotErrorBarsFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"xs\",\n          \"type\": \"const ImS16*\"\n        },\n        {\n          \"name\": \"ys\",\n          \"type\": \"const ImS16*\"\n        },\n        {\n          \"name\": \"neg\",\n          \"type\": \"const ImS16*\"\n        },\n        {\n          \"name\": \"pos\",\n          \"type\": \"const ImS16*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotErrorBarsFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImS16* xs,const ImS16* ys,const ImS16* neg,const ImS16* pos,int count,ImPlotErrorBarsFlags flags=0,int offset=0,int stride=sizeof(ImS16))\",\n      \"call_args\": \"(label_id,xs,ys,neg,pos,count,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotErrorBars\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(ImS16)\"\n      },\n      \"funcname\": \"PlotErrorBars\",\n      \"location\": \"implot:878\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotErrorBars_S16PtrS16PtrS16PtrS16Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImS16*,const ImS16*,const ImS16*,const ImS16*,int,ImPlotErrorBarsFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImU16* xs,const ImU16* ys,const ImU16* neg,const ImU16* pos,int count,ImPlotErrorBarsFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"xs\",\n          \"type\": \"const ImU16*\"\n        },\n        {\n          \"name\": \"ys\",\n          \"type\": \"const ImU16*\"\n        },\n        {\n          \"name\": \"neg\",\n          \"type\": \"const ImU16*\"\n        },\n        {\n          \"name\": \"pos\",\n          \"type\": \"const ImU16*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotErrorBarsFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImU16* xs,const ImU16* ys,const ImU16* neg,const ImU16* pos,int count,ImPlotErrorBarsFlags flags=0,int offset=0,int stride=sizeof(ImU16))\",\n      \"call_args\": \"(label_id,xs,ys,neg,pos,count,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotErrorBars\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(ImU16)\"\n      },\n      \"funcname\": \"PlotErrorBars\",\n      \"location\": \"implot:878\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotErrorBars_U16PtrU16PtrU16PtrU16Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImU16*,const ImU16*,const ImU16*,const ImU16*,int,ImPlotErrorBarsFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImS32* xs,const ImS32* ys,const ImS32* neg,const ImS32* pos,int count,ImPlotErrorBarsFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"xs\",\n          \"type\": \"const ImS32*\"\n        },\n        {\n          \"name\": \"ys\",\n          \"type\": \"const ImS32*\"\n        },\n        {\n          \"name\": \"neg\",\n          \"type\": \"const ImS32*\"\n        },\n        {\n          \"name\": \"pos\",\n          \"type\": \"const ImS32*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotErrorBarsFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImS32* xs,const ImS32* ys,const ImS32* neg,const ImS32* pos,int count,ImPlotErrorBarsFlags flags=0,int offset=0,int stride=sizeof(ImS32))\",\n      \"call_args\": \"(label_id,xs,ys,neg,pos,count,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotErrorBars\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(ImS32)\"\n      },\n      \"funcname\": \"PlotErrorBars\",\n      \"location\": \"implot:878\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotErrorBars_S32PtrS32PtrS32PtrS32Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImS32*,const ImS32*,const ImS32*,const ImS32*,int,ImPlotErrorBarsFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImU32* xs,const ImU32* ys,const ImU32* neg,const ImU32* pos,int count,ImPlotErrorBarsFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"xs\",\n          \"type\": \"const ImU32*\"\n        },\n        {\n          \"name\": \"ys\",\n          \"type\": \"const ImU32*\"\n        },\n        {\n          \"name\": \"neg\",\n          \"type\": \"const ImU32*\"\n        },\n        {\n          \"name\": \"pos\",\n          \"type\": \"const ImU32*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotErrorBarsFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImU32* xs,const ImU32* ys,const ImU32* neg,const ImU32* pos,int count,ImPlotErrorBarsFlags flags=0,int offset=0,int stride=sizeof(ImU32))\",\n      \"call_args\": \"(label_id,xs,ys,neg,pos,count,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotErrorBars\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(ImU32)\"\n      },\n      \"funcname\": \"PlotErrorBars\",\n      \"location\": \"implot:878\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotErrorBars_U32PtrU32PtrU32PtrU32Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImU32*,const ImU32*,const ImU32*,const ImU32*,int,ImPlotErrorBarsFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImS64* xs,const ImS64* ys,const ImS64* neg,const ImS64* pos,int count,ImPlotErrorBarsFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"xs\",\n          \"type\": \"const ImS64*\"\n        },\n        {\n          \"name\": \"ys\",\n          \"type\": \"const ImS64*\"\n        },\n        {\n          \"name\": \"neg\",\n          \"type\": \"const ImS64*\"\n        },\n        {\n          \"name\": \"pos\",\n          \"type\": \"const ImS64*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotErrorBarsFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImS64* xs,const ImS64* ys,const ImS64* neg,const ImS64* pos,int count,ImPlotErrorBarsFlags flags=0,int offset=0,int stride=sizeof(ImS64))\",\n      \"call_args\": \"(label_id,xs,ys,neg,pos,count,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotErrorBars\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(ImS64)\"\n      },\n      \"funcname\": \"PlotErrorBars\",\n      \"location\": \"implot:878\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotErrorBars_S64PtrS64PtrS64PtrS64Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImS64*,const ImS64*,const ImS64*,const ImS64*,int,ImPlotErrorBarsFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImU64* xs,const ImU64* ys,const ImU64* neg,const ImU64* pos,int count,ImPlotErrorBarsFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"xs\",\n          \"type\": \"const ImU64*\"\n        },\n        {\n          \"name\": \"ys\",\n          \"type\": \"const ImU64*\"\n        },\n        {\n          \"name\": \"neg\",\n          \"type\": \"const ImU64*\"\n        },\n        {\n          \"name\": \"pos\",\n          \"type\": \"const ImU64*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotErrorBarsFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImU64* xs,const ImU64* ys,const ImU64* neg,const ImU64* pos,int count,ImPlotErrorBarsFlags flags=0,int offset=0,int stride=sizeof(ImU64))\",\n      \"call_args\": \"(label_id,xs,ys,neg,pos,count,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotErrorBars\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(ImU64)\"\n      },\n      \"funcname\": \"PlotErrorBars\",\n      \"location\": \"implot:878\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotErrorBars_U64PtrU64PtrU64PtrU64Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImU64*,const ImU64*,const ImU64*,const ImU64*,int,ImPlotErrorBarsFlags,int,int)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_PlotHeatmap\": [\n    {\n      \"args\": \"(const char* label_id,const float* values,int rows,int cols,double scale_min,double scale_max,const char* label_fmt,const ImPlotPoint bounds_min,const ImPlotPoint bounds_max,ImPlotHeatmapFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"values\",\n          \"type\": \"const float*\"\n        },\n        {\n          \"name\": \"rows\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"cols\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"scale_min\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"scale_max\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"label_fmt\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"bounds_min\",\n          \"type\": \"const ImPlotPoint\"\n        },\n        {\n          \"name\": \"bounds_max\",\n          \"type\": \"const ImPlotPoint\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotHeatmapFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const float* values,int rows,int cols,double scale_min=0,double scale_max=0,const char* label_fmt=\\\"%.1f\\\",const ImPlotPoint& bounds_min=ImPlotPoint(0,0),const ImPlotPoint& bounds_max=ImPlotPoint(1,1),ImPlotHeatmapFlags flags=0)\",\n      \"call_args\": \"(label_id,values,rows,cols,scale_min,scale_max,label_fmt,bounds_min,bounds_max,flags)\",\n      \"cimguiname\": \"ImPlot_PlotHeatmap\",\n      \"defaults\": {\n        \"bounds_max\": \"ImPlotPoint(1,1)\",\n        \"bounds_min\": \"ImPlotPoint(0,0)\",\n        \"flags\": \"0\",\n        \"label_fmt\": \"\\\"%.1f\\\"\",\n        \"scale_max\": \"0\",\n        \"scale_min\": \"0\"\n      },\n      \"funcname\": \"PlotHeatmap\",\n      \"location\": \"implot:891\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotHeatmap_FloatPtr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const float*,int,int,double,double,const char*,const ImPlotPoint,const ImPlotPoint,ImPlotHeatmapFlags)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const double* values,int rows,int cols,double scale_min,double scale_max,const char* label_fmt,const ImPlotPoint bounds_min,const ImPlotPoint bounds_max,ImPlotHeatmapFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"values\",\n          \"type\": \"const double*\"\n        },\n        {\n          \"name\": \"rows\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"cols\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"scale_min\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"scale_max\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"label_fmt\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"bounds_min\",\n          \"type\": \"const ImPlotPoint\"\n        },\n        {\n          \"name\": \"bounds_max\",\n          \"type\": \"const ImPlotPoint\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotHeatmapFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const double* values,int rows,int cols,double scale_min=0,double scale_max=0,const char* label_fmt=\\\"%.1f\\\",const ImPlotPoint& bounds_min=ImPlotPoint(0,0),const ImPlotPoint& bounds_max=ImPlotPoint(1,1),ImPlotHeatmapFlags flags=0)\",\n      \"call_args\": \"(label_id,values,rows,cols,scale_min,scale_max,label_fmt,bounds_min,bounds_max,flags)\",\n      \"cimguiname\": \"ImPlot_PlotHeatmap\",\n      \"defaults\": {\n        \"bounds_max\": \"ImPlotPoint(1,1)\",\n        \"bounds_min\": \"ImPlotPoint(0,0)\",\n        \"flags\": \"0\",\n        \"label_fmt\": \"\\\"%.1f\\\"\",\n        \"scale_max\": \"0\",\n        \"scale_min\": \"0\"\n      },\n      \"funcname\": \"PlotHeatmap\",\n      \"location\": \"implot:891\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotHeatmap_doublePtr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const double*,int,int,double,double,const char*,const ImPlotPoint,const ImPlotPoint,ImPlotHeatmapFlags)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImS8* values,int rows,int cols,double scale_min,double scale_max,const char* label_fmt,const ImPlotPoint bounds_min,const ImPlotPoint bounds_max,ImPlotHeatmapFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImS8*\"\n        },\n        {\n          \"name\": \"rows\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"cols\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"scale_min\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"scale_max\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"label_fmt\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"bounds_min\",\n          \"type\": \"const ImPlotPoint\"\n        },\n        {\n          \"name\": \"bounds_max\",\n          \"type\": \"const ImPlotPoint\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotHeatmapFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImS8* values,int rows,int cols,double scale_min=0,double scale_max=0,const char* label_fmt=\\\"%.1f\\\",const ImPlotPoint& bounds_min=ImPlotPoint(0,0),const ImPlotPoint& bounds_max=ImPlotPoint(1,1),ImPlotHeatmapFlags flags=0)\",\n      \"call_args\": \"(label_id,values,rows,cols,scale_min,scale_max,label_fmt,bounds_min,bounds_max,flags)\",\n      \"cimguiname\": \"ImPlot_PlotHeatmap\",\n      \"defaults\": {\n        \"bounds_max\": \"ImPlotPoint(1,1)\",\n        \"bounds_min\": \"ImPlotPoint(0,0)\",\n        \"flags\": \"0\",\n        \"label_fmt\": \"\\\"%.1f\\\"\",\n        \"scale_max\": \"0\",\n        \"scale_min\": \"0\"\n      },\n      \"funcname\": \"PlotHeatmap\",\n      \"location\": \"implot:891\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotHeatmap_S8Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImS8*,int,int,double,double,const char*,const ImPlotPoint,const ImPlotPoint,ImPlotHeatmapFlags)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImU8* values,int rows,int cols,double scale_min,double scale_max,const char* label_fmt,const ImPlotPoint bounds_min,const ImPlotPoint bounds_max,ImPlotHeatmapFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImU8*\"\n        },\n        {\n          \"name\": \"rows\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"cols\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"scale_min\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"scale_max\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"label_fmt\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"bounds_min\",\n          \"type\": \"const ImPlotPoint\"\n        },\n        {\n          \"name\": \"bounds_max\",\n          \"type\": \"const ImPlotPoint\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotHeatmapFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImU8* values,int rows,int cols,double scale_min=0,double scale_max=0,const char* label_fmt=\\\"%.1f\\\",const ImPlotPoint& bounds_min=ImPlotPoint(0,0),const ImPlotPoint& bounds_max=ImPlotPoint(1,1),ImPlotHeatmapFlags flags=0)\",\n      \"call_args\": \"(label_id,values,rows,cols,scale_min,scale_max,label_fmt,bounds_min,bounds_max,flags)\",\n      \"cimguiname\": \"ImPlot_PlotHeatmap\",\n      \"defaults\": {\n        \"bounds_max\": \"ImPlotPoint(1,1)\",\n        \"bounds_min\": \"ImPlotPoint(0,0)\",\n        \"flags\": \"0\",\n        \"label_fmt\": \"\\\"%.1f\\\"\",\n        \"scale_max\": \"0\",\n        \"scale_min\": \"0\"\n      },\n      \"funcname\": \"PlotHeatmap\",\n      \"location\": \"implot:891\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotHeatmap_U8Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImU8*,int,int,double,double,const char*,const ImPlotPoint,const ImPlotPoint,ImPlotHeatmapFlags)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImS16* values,int rows,int cols,double scale_min,double scale_max,const char* label_fmt,const ImPlotPoint bounds_min,const ImPlotPoint bounds_max,ImPlotHeatmapFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImS16*\"\n        },\n        {\n          \"name\": \"rows\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"cols\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"scale_min\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"scale_max\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"label_fmt\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"bounds_min\",\n          \"type\": \"const ImPlotPoint\"\n        },\n        {\n          \"name\": \"bounds_max\",\n          \"type\": \"const ImPlotPoint\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotHeatmapFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImS16* values,int rows,int cols,double scale_min=0,double scale_max=0,const char* label_fmt=\\\"%.1f\\\",const ImPlotPoint& bounds_min=ImPlotPoint(0,0),const ImPlotPoint& bounds_max=ImPlotPoint(1,1),ImPlotHeatmapFlags flags=0)\",\n      \"call_args\": \"(label_id,values,rows,cols,scale_min,scale_max,label_fmt,bounds_min,bounds_max,flags)\",\n      \"cimguiname\": \"ImPlot_PlotHeatmap\",\n      \"defaults\": {\n        \"bounds_max\": \"ImPlotPoint(1,1)\",\n        \"bounds_min\": \"ImPlotPoint(0,0)\",\n        \"flags\": \"0\",\n        \"label_fmt\": \"\\\"%.1f\\\"\",\n        \"scale_max\": \"0\",\n        \"scale_min\": \"0\"\n      },\n      \"funcname\": \"PlotHeatmap\",\n      \"location\": \"implot:891\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotHeatmap_S16Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImS16*,int,int,double,double,const char*,const ImPlotPoint,const ImPlotPoint,ImPlotHeatmapFlags)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImU16* values,int rows,int cols,double scale_min,double scale_max,const char* label_fmt,const ImPlotPoint bounds_min,const ImPlotPoint bounds_max,ImPlotHeatmapFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImU16*\"\n        },\n        {\n          \"name\": \"rows\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"cols\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"scale_min\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"scale_max\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"label_fmt\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"bounds_min\",\n          \"type\": \"const ImPlotPoint\"\n        },\n        {\n          \"name\": \"bounds_max\",\n          \"type\": \"const ImPlotPoint\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotHeatmapFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImU16* values,int rows,int cols,double scale_min=0,double scale_max=0,const char* label_fmt=\\\"%.1f\\\",const ImPlotPoint& bounds_min=ImPlotPoint(0,0),const ImPlotPoint& bounds_max=ImPlotPoint(1,1),ImPlotHeatmapFlags flags=0)\",\n      \"call_args\": \"(label_id,values,rows,cols,scale_min,scale_max,label_fmt,bounds_min,bounds_max,flags)\",\n      \"cimguiname\": \"ImPlot_PlotHeatmap\",\n      \"defaults\": {\n        \"bounds_max\": \"ImPlotPoint(1,1)\",\n        \"bounds_min\": \"ImPlotPoint(0,0)\",\n        \"flags\": \"0\",\n        \"label_fmt\": \"\\\"%.1f\\\"\",\n        \"scale_max\": \"0\",\n        \"scale_min\": \"0\"\n      },\n      \"funcname\": \"PlotHeatmap\",\n      \"location\": \"implot:891\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotHeatmap_U16Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImU16*,int,int,double,double,const char*,const ImPlotPoint,const ImPlotPoint,ImPlotHeatmapFlags)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImS32* values,int rows,int cols,double scale_min,double scale_max,const char* label_fmt,const ImPlotPoint bounds_min,const ImPlotPoint bounds_max,ImPlotHeatmapFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImS32*\"\n        },\n        {\n          \"name\": \"rows\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"cols\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"scale_min\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"scale_max\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"label_fmt\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"bounds_min\",\n          \"type\": \"const ImPlotPoint\"\n        },\n        {\n          \"name\": \"bounds_max\",\n          \"type\": \"const ImPlotPoint\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotHeatmapFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImS32* values,int rows,int cols,double scale_min=0,double scale_max=0,const char* label_fmt=\\\"%.1f\\\",const ImPlotPoint& bounds_min=ImPlotPoint(0,0),const ImPlotPoint& bounds_max=ImPlotPoint(1,1),ImPlotHeatmapFlags flags=0)\",\n      \"call_args\": \"(label_id,values,rows,cols,scale_min,scale_max,label_fmt,bounds_min,bounds_max,flags)\",\n      \"cimguiname\": \"ImPlot_PlotHeatmap\",\n      \"defaults\": {\n        \"bounds_max\": \"ImPlotPoint(1,1)\",\n        \"bounds_min\": \"ImPlotPoint(0,0)\",\n        \"flags\": \"0\",\n        \"label_fmt\": \"\\\"%.1f\\\"\",\n        \"scale_max\": \"0\",\n        \"scale_min\": \"0\"\n      },\n      \"funcname\": \"PlotHeatmap\",\n      \"location\": \"implot:891\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotHeatmap_S32Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImS32*,int,int,double,double,const char*,const ImPlotPoint,const ImPlotPoint,ImPlotHeatmapFlags)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImU32* values,int rows,int cols,double scale_min,double scale_max,const char* label_fmt,const ImPlotPoint bounds_min,const ImPlotPoint bounds_max,ImPlotHeatmapFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImU32*\"\n        },\n        {\n          \"name\": \"rows\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"cols\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"scale_min\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"scale_max\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"label_fmt\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"bounds_min\",\n          \"type\": \"const ImPlotPoint\"\n        },\n        {\n          \"name\": \"bounds_max\",\n          \"type\": \"const ImPlotPoint\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotHeatmapFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImU32* values,int rows,int cols,double scale_min=0,double scale_max=0,const char* label_fmt=\\\"%.1f\\\",const ImPlotPoint& bounds_min=ImPlotPoint(0,0),const ImPlotPoint& bounds_max=ImPlotPoint(1,1),ImPlotHeatmapFlags flags=0)\",\n      \"call_args\": \"(label_id,values,rows,cols,scale_min,scale_max,label_fmt,bounds_min,bounds_max,flags)\",\n      \"cimguiname\": \"ImPlot_PlotHeatmap\",\n      \"defaults\": {\n        \"bounds_max\": \"ImPlotPoint(1,1)\",\n        \"bounds_min\": \"ImPlotPoint(0,0)\",\n        \"flags\": \"0\",\n        \"label_fmt\": \"\\\"%.1f\\\"\",\n        \"scale_max\": \"0\",\n        \"scale_min\": \"0\"\n      },\n      \"funcname\": \"PlotHeatmap\",\n      \"location\": \"implot:891\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotHeatmap_U32Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImU32*,int,int,double,double,const char*,const ImPlotPoint,const ImPlotPoint,ImPlotHeatmapFlags)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImS64* values,int rows,int cols,double scale_min,double scale_max,const char* label_fmt,const ImPlotPoint bounds_min,const ImPlotPoint bounds_max,ImPlotHeatmapFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImS64*\"\n        },\n        {\n          \"name\": \"rows\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"cols\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"scale_min\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"scale_max\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"label_fmt\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"bounds_min\",\n          \"type\": \"const ImPlotPoint\"\n        },\n        {\n          \"name\": \"bounds_max\",\n          \"type\": \"const ImPlotPoint\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotHeatmapFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImS64* values,int rows,int cols,double scale_min=0,double scale_max=0,const char* label_fmt=\\\"%.1f\\\",const ImPlotPoint& bounds_min=ImPlotPoint(0,0),const ImPlotPoint& bounds_max=ImPlotPoint(1,1),ImPlotHeatmapFlags flags=0)\",\n      \"call_args\": \"(label_id,values,rows,cols,scale_min,scale_max,label_fmt,bounds_min,bounds_max,flags)\",\n      \"cimguiname\": \"ImPlot_PlotHeatmap\",\n      \"defaults\": {\n        \"bounds_max\": \"ImPlotPoint(1,1)\",\n        \"bounds_min\": \"ImPlotPoint(0,0)\",\n        \"flags\": \"0\",\n        \"label_fmt\": \"\\\"%.1f\\\"\",\n        \"scale_max\": \"0\",\n        \"scale_min\": \"0\"\n      },\n      \"funcname\": \"PlotHeatmap\",\n      \"location\": \"implot:891\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotHeatmap_S64Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImS64*,int,int,double,double,const char*,const ImPlotPoint,const ImPlotPoint,ImPlotHeatmapFlags)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImU64* values,int rows,int cols,double scale_min,double scale_max,const char* label_fmt,const ImPlotPoint bounds_min,const ImPlotPoint bounds_max,ImPlotHeatmapFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImU64*\"\n        },\n        {\n          \"name\": \"rows\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"cols\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"scale_min\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"scale_max\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"label_fmt\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"bounds_min\",\n          \"type\": \"const ImPlotPoint\"\n        },\n        {\n          \"name\": \"bounds_max\",\n          \"type\": \"const ImPlotPoint\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotHeatmapFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImU64* values,int rows,int cols,double scale_min=0,double scale_max=0,const char* label_fmt=\\\"%.1f\\\",const ImPlotPoint& bounds_min=ImPlotPoint(0,0),const ImPlotPoint& bounds_max=ImPlotPoint(1,1),ImPlotHeatmapFlags flags=0)\",\n      \"call_args\": \"(label_id,values,rows,cols,scale_min,scale_max,label_fmt,bounds_min,bounds_max,flags)\",\n      \"cimguiname\": \"ImPlot_PlotHeatmap\",\n      \"defaults\": {\n        \"bounds_max\": \"ImPlotPoint(1,1)\",\n        \"bounds_min\": \"ImPlotPoint(0,0)\",\n        \"flags\": \"0\",\n        \"label_fmt\": \"\\\"%.1f\\\"\",\n        \"scale_max\": \"0\",\n        \"scale_min\": \"0\"\n      },\n      \"funcname\": \"PlotHeatmap\",\n      \"location\": \"implot:891\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotHeatmap_U64Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImU64*,int,int,double,double,const char*,const ImPlotPoint,const ImPlotPoint,ImPlotHeatmapFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_PlotHistogram\": [\n    {\n      \"args\": \"(const char* label_id,const float* values,int count,int bins,double bar_scale,ImPlotRange range,ImPlotHistogramFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"values\",\n          \"type\": \"const float*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"bins\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"bar_scale\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"range\",\n          \"type\": \"ImPlotRange\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotHistogramFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const float* values,int count,int bins=ImPlotBin_Sturges,double bar_scale=1.0,ImPlotRange range=ImPlotRange(),ImPlotHistogramFlags flags=0)\",\n      \"call_args\": \"(label_id,values,count,bins,bar_scale,range,flags)\",\n      \"cimguiname\": \"ImPlot_PlotHistogram\",\n      \"defaults\": {\n        \"bar_scale\": \"1.0\",\n        \"bins\": \"ImPlotBin_Sturges\",\n        \"flags\": \"0\",\n        \"range\": \"ImPlotRange()\"\n      },\n      \"funcname\": \"PlotHistogram\",\n      \"location\": \"implot:895\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotHistogram_FloatPtr\",\n      \"ret\": \"double\",\n      \"signature\": \"(const char*,const float*,int,int,double,ImPlotRange,ImPlotHistogramFlags)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const double* values,int count,int bins,double bar_scale,ImPlotRange range,ImPlotHistogramFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"values\",\n          \"type\": \"const double*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"bins\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"bar_scale\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"range\",\n          \"type\": \"ImPlotRange\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotHistogramFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const double* values,int count,int bins=ImPlotBin_Sturges,double bar_scale=1.0,ImPlotRange range=ImPlotRange(),ImPlotHistogramFlags flags=0)\",\n      \"call_args\": \"(label_id,values,count,bins,bar_scale,range,flags)\",\n      \"cimguiname\": \"ImPlot_PlotHistogram\",\n      \"defaults\": {\n        \"bar_scale\": \"1.0\",\n        \"bins\": \"ImPlotBin_Sturges\",\n        \"flags\": \"0\",\n        \"range\": \"ImPlotRange()\"\n      },\n      \"funcname\": \"PlotHistogram\",\n      \"location\": \"implot:895\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotHistogram_doublePtr\",\n      \"ret\": \"double\",\n      \"signature\": \"(const char*,const double*,int,int,double,ImPlotRange,ImPlotHistogramFlags)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImS8* values,int count,int bins,double bar_scale,ImPlotRange range,ImPlotHistogramFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImS8*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"bins\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"bar_scale\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"range\",\n          \"type\": \"ImPlotRange\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotHistogramFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImS8* values,int count,int bins=ImPlotBin_Sturges,double bar_scale=1.0,ImPlotRange range=ImPlotRange(),ImPlotHistogramFlags flags=0)\",\n      \"call_args\": \"(label_id,values,count,bins,bar_scale,range,flags)\",\n      \"cimguiname\": \"ImPlot_PlotHistogram\",\n      \"defaults\": {\n        \"bar_scale\": \"1.0\",\n        \"bins\": \"ImPlotBin_Sturges\",\n        \"flags\": \"0\",\n        \"range\": \"ImPlotRange()\"\n      },\n      \"funcname\": \"PlotHistogram\",\n      \"location\": \"implot:895\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotHistogram_S8Ptr\",\n      \"ret\": \"double\",\n      \"signature\": \"(const char*,const ImS8*,int,int,double,ImPlotRange,ImPlotHistogramFlags)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImU8* values,int count,int bins,double bar_scale,ImPlotRange range,ImPlotHistogramFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImU8*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"bins\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"bar_scale\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"range\",\n          \"type\": \"ImPlotRange\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotHistogramFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImU8* values,int count,int bins=ImPlotBin_Sturges,double bar_scale=1.0,ImPlotRange range=ImPlotRange(),ImPlotHistogramFlags flags=0)\",\n      \"call_args\": \"(label_id,values,count,bins,bar_scale,range,flags)\",\n      \"cimguiname\": \"ImPlot_PlotHistogram\",\n      \"defaults\": {\n        \"bar_scale\": \"1.0\",\n        \"bins\": \"ImPlotBin_Sturges\",\n        \"flags\": \"0\",\n        \"range\": \"ImPlotRange()\"\n      },\n      \"funcname\": \"PlotHistogram\",\n      \"location\": \"implot:895\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotHistogram_U8Ptr\",\n      \"ret\": \"double\",\n      \"signature\": \"(const char*,const ImU8*,int,int,double,ImPlotRange,ImPlotHistogramFlags)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImS16* values,int count,int bins,double bar_scale,ImPlotRange range,ImPlotHistogramFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImS16*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"bins\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"bar_scale\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"range\",\n          \"type\": \"ImPlotRange\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotHistogramFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImS16* values,int count,int bins=ImPlotBin_Sturges,double bar_scale=1.0,ImPlotRange range=ImPlotRange(),ImPlotHistogramFlags flags=0)\",\n      \"call_args\": \"(label_id,values,count,bins,bar_scale,range,flags)\",\n      \"cimguiname\": \"ImPlot_PlotHistogram\",\n      \"defaults\": {\n        \"bar_scale\": \"1.0\",\n        \"bins\": \"ImPlotBin_Sturges\",\n        \"flags\": \"0\",\n        \"range\": \"ImPlotRange()\"\n      },\n      \"funcname\": \"PlotHistogram\",\n      \"location\": \"implot:895\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotHistogram_S16Ptr\",\n      \"ret\": \"double\",\n      \"signature\": \"(const char*,const ImS16*,int,int,double,ImPlotRange,ImPlotHistogramFlags)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImU16* values,int count,int bins,double bar_scale,ImPlotRange range,ImPlotHistogramFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImU16*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"bins\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"bar_scale\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"range\",\n          \"type\": \"ImPlotRange\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotHistogramFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImU16* values,int count,int bins=ImPlotBin_Sturges,double bar_scale=1.0,ImPlotRange range=ImPlotRange(),ImPlotHistogramFlags flags=0)\",\n      \"call_args\": \"(label_id,values,count,bins,bar_scale,range,flags)\",\n      \"cimguiname\": \"ImPlot_PlotHistogram\",\n      \"defaults\": {\n        \"bar_scale\": \"1.0\",\n        \"bins\": \"ImPlotBin_Sturges\",\n        \"flags\": \"0\",\n        \"range\": \"ImPlotRange()\"\n      },\n      \"funcname\": \"PlotHistogram\",\n      \"location\": \"implot:895\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotHistogram_U16Ptr\",\n      \"ret\": \"double\",\n      \"signature\": \"(const char*,const ImU16*,int,int,double,ImPlotRange,ImPlotHistogramFlags)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImS32* values,int count,int bins,double bar_scale,ImPlotRange range,ImPlotHistogramFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImS32*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"bins\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"bar_scale\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"range\",\n          \"type\": \"ImPlotRange\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotHistogramFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImS32* values,int count,int bins=ImPlotBin_Sturges,double bar_scale=1.0,ImPlotRange range=ImPlotRange(),ImPlotHistogramFlags flags=0)\",\n      \"call_args\": \"(label_id,values,count,bins,bar_scale,range,flags)\",\n      \"cimguiname\": \"ImPlot_PlotHistogram\",\n      \"defaults\": {\n        \"bar_scale\": \"1.0\",\n        \"bins\": \"ImPlotBin_Sturges\",\n        \"flags\": \"0\",\n        \"range\": \"ImPlotRange()\"\n      },\n      \"funcname\": \"PlotHistogram\",\n      \"location\": \"implot:895\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotHistogram_S32Ptr\",\n      \"ret\": \"double\",\n      \"signature\": \"(const char*,const ImS32*,int,int,double,ImPlotRange,ImPlotHistogramFlags)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImU32* values,int count,int bins,double bar_scale,ImPlotRange range,ImPlotHistogramFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImU32*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"bins\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"bar_scale\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"range\",\n          \"type\": \"ImPlotRange\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotHistogramFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImU32* values,int count,int bins=ImPlotBin_Sturges,double bar_scale=1.0,ImPlotRange range=ImPlotRange(),ImPlotHistogramFlags flags=0)\",\n      \"call_args\": \"(label_id,values,count,bins,bar_scale,range,flags)\",\n      \"cimguiname\": \"ImPlot_PlotHistogram\",\n      \"defaults\": {\n        \"bar_scale\": \"1.0\",\n        \"bins\": \"ImPlotBin_Sturges\",\n        \"flags\": \"0\",\n        \"range\": \"ImPlotRange()\"\n      },\n      \"funcname\": \"PlotHistogram\",\n      \"location\": \"implot:895\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotHistogram_U32Ptr\",\n      \"ret\": \"double\",\n      \"signature\": \"(const char*,const ImU32*,int,int,double,ImPlotRange,ImPlotHistogramFlags)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImS64* values,int count,int bins,double bar_scale,ImPlotRange range,ImPlotHistogramFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImS64*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"bins\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"bar_scale\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"range\",\n          \"type\": \"ImPlotRange\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotHistogramFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImS64* values,int count,int bins=ImPlotBin_Sturges,double bar_scale=1.0,ImPlotRange range=ImPlotRange(),ImPlotHistogramFlags flags=0)\",\n      \"call_args\": \"(label_id,values,count,bins,bar_scale,range,flags)\",\n      \"cimguiname\": \"ImPlot_PlotHistogram\",\n      \"defaults\": {\n        \"bar_scale\": \"1.0\",\n        \"bins\": \"ImPlotBin_Sturges\",\n        \"flags\": \"0\",\n        \"range\": \"ImPlotRange()\"\n      },\n      \"funcname\": \"PlotHistogram\",\n      \"location\": \"implot:895\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotHistogram_S64Ptr\",\n      \"ret\": \"double\",\n      \"signature\": \"(const char*,const ImS64*,int,int,double,ImPlotRange,ImPlotHistogramFlags)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImU64* values,int count,int bins,double bar_scale,ImPlotRange range,ImPlotHistogramFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImU64*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"bins\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"bar_scale\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"range\",\n          \"type\": \"ImPlotRange\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotHistogramFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImU64* values,int count,int bins=ImPlotBin_Sturges,double bar_scale=1.0,ImPlotRange range=ImPlotRange(),ImPlotHistogramFlags flags=0)\",\n      \"call_args\": \"(label_id,values,count,bins,bar_scale,range,flags)\",\n      \"cimguiname\": \"ImPlot_PlotHistogram\",\n      \"defaults\": {\n        \"bar_scale\": \"1.0\",\n        \"bins\": \"ImPlotBin_Sturges\",\n        \"flags\": \"0\",\n        \"range\": \"ImPlotRange()\"\n      },\n      \"funcname\": \"PlotHistogram\",\n      \"location\": \"implot:895\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotHistogram_U64Ptr\",\n      \"ret\": \"double\",\n      \"signature\": \"(const char*,const ImU64*,int,int,double,ImPlotRange,ImPlotHistogramFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_PlotHistogram2D\": [\n    {\n      \"args\": \"(const char* label_id,const float* xs,const float* ys,int count,int x_bins,int y_bins,ImPlotRect range,ImPlotHistogramFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"xs\",\n          \"type\": \"const float*\"\n        },\n        {\n          \"name\": \"ys\",\n          \"type\": \"const float*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"x_bins\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"y_bins\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"range\",\n          \"type\": \"ImPlotRect\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotHistogramFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const float* xs,const float* ys,int count,int x_bins=ImPlotBin_Sturges,int y_bins=ImPlotBin_Sturges,ImPlotRect range=ImPlotRect(),ImPlotHistogramFlags flags=0)\",\n      \"call_args\": \"(label_id,xs,ys,count,x_bins,y_bins,range,flags)\",\n      \"cimguiname\": \"ImPlot_PlotHistogram2D\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"range\": \"ImPlotRect()\",\n        \"x_bins\": \"ImPlotBin_Sturges\",\n        \"y_bins\": \"ImPlotBin_Sturges\"\n      },\n      \"funcname\": \"PlotHistogram2D\",\n      \"location\": \"implot:899\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotHistogram2D_FloatPtr\",\n      \"ret\": \"double\",\n      \"signature\": \"(const char*,const float*,const float*,int,int,int,ImPlotRect,ImPlotHistogramFlags)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const double* xs,const double* ys,int count,int x_bins,int y_bins,ImPlotRect range,ImPlotHistogramFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"xs\",\n          \"type\": \"const double*\"\n        },\n        {\n          \"name\": \"ys\",\n          \"type\": \"const double*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"x_bins\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"y_bins\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"range\",\n          \"type\": \"ImPlotRect\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotHistogramFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const double* xs,const double* ys,int count,int x_bins=ImPlotBin_Sturges,int y_bins=ImPlotBin_Sturges,ImPlotRect range=ImPlotRect(),ImPlotHistogramFlags flags=0)\",\n      \"call_args\": \"(label_id,xs,ys,count,x_bins,y_bins,range,flags)\",\n      \"cimguiname\": \"ImPlot_PlotHistogram2D\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"range\": \"ImPlotRect()\",\n        \"x_bins\": \"ImPlotBin_Sturges\",\n        \"y_bins\": \"ImPlotBin_Sturges\"\n      },\n      \"funcname\": \"PlotHistogram2D\",\n      \"location\": \"implot:899\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotHistogram2D_doublePtr\",\n      \"ret\": \"double\",\n      \"signature\": \"(const char*,const double*,const double*,int,int,int,ImPlotRect,ImPlotHistogramFlags)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImS8* xs,const ImS8* ys,int count,int x_bins,int y_bins,ImPlotRect range,ImPlotHistogramFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"xs\",\n          \"type\": \"const ImS8*\"\n        },\n        {\n          \"name\": \"ys\",\n          \"type\": \"const ImS8*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"x_bins\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"y_bins\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"range\",\n          \"type\": \"ImPlotRect\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotHistogramFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImS8* xs,const ImS8* ys,int count,int x_bins=ImPlotBin_Sturges,int y_bins=ImPlotBin_Sturges,ImPlotRect range=ImPlotRect(),ImPlotHistogramFlags flags=0)\",\n      \"call_args\": \"(label_id,xs,ys,count,x_bins,y_bins,range,flags)\",\n      \"cimguiname\": \"ImPlot_PlotHistogram2D\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"range\": \"ImPlotRect()\",\n        \"x_bins\": \"ImPlotBin_Sturges\",\n        \"y_bins\": \"ImPlotBin_Sturges\"\n      },\n      \"funcname\": \"PlotHistogram2D\",\n      \"location\": \"implot:899\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotHistogram2D_S8Ptr\",\n      \"ret\": \"double\",\n      \"signature\": \"(const char*,const ImS8*,const ImS8*,int,int,int,ImPlotRect,ImPlotHistogramFlags)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImU8* xs,const ImU8* ys,int count,int x_bins,int y_bins,ImPlotRect range,ImPlotHistogramFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"xs\",\n          \"type\": \"const ImU8*\"\n        },\n        {\n          \"name\": \"ys\",\n          \"type\": \"const ImU8*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"x_bins\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"y_bins\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"range\",\n          \"type\": \"ImPlotRect\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotHistogramFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImU8* xs,const ImU8* ys,int count,int x_bins=ImPlotBin_Sturges,int y_bins=ImPlotBin_Sturges,ImPlotRect range=ImPlotRect(),ImPlotHistogramFlags flags=0)\",\n      \"call_args\": \"(label_id,xs,ys,count,x_bins,y_bins,range,flags)\",\n      \"cimguiname\": \"ImPlot_PlotHistogram2D\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"range\": \"ImPlotRect()\",\n        \"x_bins\": \"ImPlotBin_Sturges\",\n        \"y_bins\": \"ImPlotBin_Sturges\"\n      },\n      \"funcname\": \"PlotHistogram2D\",\n      \"location\": \"implot:899\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotHistogram2D_U8Ptr\",\n      \"ret\": \"double\",\n      \"signature\": \"(const char*,const ImU8*,const ImU8*,int,int,int,ImPlotRect,ImPlotHistogramFlags)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImS16* xs,const ImS16* ys,int count,int x_bins,int y_bins,ImPlotRect range,ImPlotHistogramFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"xs\",\n          \"type\": \"const ImS16*\"\n        },\n        {\n          \"name\": \"ys\",\n          \"type\": \"const ImS16*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"x_bins\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"y_bins\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"range\",\n          \"type\": \"ImPlotRect\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotHistogramFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImS16* xs,const ImS16* ys,int count,int x_bins=ImPlotBin_Sturges,int y_bins=ImPlotBin_Sturges,ImPlotRect range=ImPlotRect(),ImPlotHistogramFlags flags=0)\",\n      \"call_args\": \"(label_id,xs,ys,count,x_bins,y_bins,range,flags)\",\n      \"cimguiname\": \"ImPlot_PlotHistogram2D\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"range\": \"ImPlotRect()\",\n        \"x_bins\": \"ImPlotBin_Sturges\",\n        \"y_bins\": \"ImPlotBin_Sturges\"\n      },\n      \"funcname\": \"PlotHistogram2D\",\n      \"location\": \"implot:899\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotHistogram2D_S16Ptr\",\n      \"ret\": \"double\",\n      \"signature\": \"(const char*,const ImS16*,const ImS16*,int,int,int,ImPlotRect,ImPlotHistogramFlags)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImU16* xs,const ImU16* ys,int count,int x_bins,int y_bins,ImPlotRect range,ImPlotHistogramFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"xs\",\n          \"type\": \"const ImU16*\"\n        },\n        {\n          \"name\": \"ys\",\n          \"type\": \"const ImU16*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"x_bins\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"y_bins\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"range\",\n          \"type\": \"ImPlotRect\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotHistogramFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImU16* xs,const ImU16* ys,int count,int x_bins=ImPlotBin_Sturges,int y_bins=ImPlotBin_Sturges,ImPlotRect range=ImPlotRect(),ImPlotHistogramFlags flags=0)\",\n      \"call_args\": \"(label_id,xs,ys,count,x_bins,y_bins,range,flags)\",\n      \"cimguiname\": \"ImPlot_PlotHistogram2D\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"range\": \"ImPlotRect()\",\n        \"x_bins\": \"ImPlotBin_Sturges\",\n        \"y_bins\": \"ImPlotBin_Sturges\"\n      },\n      \"funcname\": \"PlotHistogram2D\",\n      \"location\": \"implot:899\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotHistogram2D_U16Ptr\",\n      \"ret\": \"double\",\n      \"signature\": \"(const char*,const ImU16*,const ImU16*,int,int,int,ImPlotRect,ImPlotHistogramFlags)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImS32* xs,const ImS32* ys,int count,int x_bins,int y_bins,ImPlotRect range,ImPlotHistogramFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"xs\",\n          \"type\": \"const ImS32*\"\n        },\n        {\n          \"name\": \"ys\",\n          \"type\": \"const ImS32*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"x_bins\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"y_bins\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"range\",\n          \"type\": \"ImPlotRect\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotHistogramFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImS32* xs,const ImS32* ys,int count,int x_bins=ImPlotBin_Sturges,int y_bins=ImPlotBin_Sturges,ImPlotRect range=ImPlotRect(),ImPlotHistogramFlags flags=0)\",\n      \"call_args\": \"(label_id,xs,ys,count,x_bins,y_bins,range,flags)\",\n      \"cimguiname\": \"ImPlot_PlotHistogram2D\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"range\": \"ImPlotRect()\",\n        \"x_bins\": \"ImPlotBin_Sturges\",\n        \"y_bins\": \"ImPlotBin_Sturges\"\n      },\n      \"funcname\": \"PlotHistogram2D\",\n      \"location\": \"implot:899\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotHistogram2D_S32Ptr\",\n      \"ret\": \"double\",\n      \"signature\": \"(const char*,const ImS32*,const ImS32*,int,int,int,ImPlotRect,ImPlotHistogramFlags)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImU32* xs,const ImU32* ys,int count,int x_bins,int y_bins,ImPlotRect range,ImPlotHistogramFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"xs\",\n          \"type\": \"const ImU32*\"\n        },\n        {\n          \"name\": \"ys\",\n          \"type\": \"const ImU32*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"x_bins\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"y_bins\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"range\",\n          \"type\": \"ImPlotRect\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotHistogramFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImU32* xs,const ImU32* ys,int count,int x_bins=ImPlotBin_Sturges,int y_bins=ImPlotBin_Sturges,ImPlotRect range=ImPlotRect(),ImPlotHistogramFlags flags=0)\",\n      \"call_args\": \"(label_id,xs,ys,count,x_bins,y_bins,range,flags)\",\n      \"cimguiname\": \"ImPlot_PlotHistogram2D\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"range\": \"ImPlotRect()\",\n        \"x_bins\": \"ImPlotBin_Sturges\",\n        \"y_bins\": \"ImPlotBin_Sturges\"\n      },\n      \"funcname\": \"PlotHistogram2D\",\n      \"location\": \"implot:899\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotHistogram2D_U32Ptr\",\n      \"ret\": \"double\",\n      \"signature\": \"(const char*,const ImU32*,const ImU32*,int,int,int,ImPlotRect,ImPlotHistogramFlags)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImS64* xs,const ImS64* ys,int count,int x_bins,int y_bins,ImPlotRect range,ImPlotHistogramFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"xs\",\n          \"type\": \"const ImS64*\"\n        },\n        {\n          \"name\": \"ys\",\n          \"type\": \"const ImS64*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"x_bins\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"y_bins\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"range\",\n          \"type\": \"ImPlotRect\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotHistogramFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImS64* xs,const ImS64* ys,int count,int x_bins=ImPlotBin_Sturges,int y_bins=ImPlotBin_Sturges,ImPlotRect range=ImPlotRect(),ImPlotHistogramFlags flags=0)\",\n      \"call_args\": \"(label_id,xs,ys,count,x_bins,y_bins,range,flags)\",\n      \"cimguiname\": \"ImPlot_PlotHistogram2D\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"range\": \"ImPlotRect()\",\n        \"x_bins\": \"ImPlotBin_Sturges\",\n        \"y_bins\": \"ImPlotBin_Sturges\"\n      },\n      \"funcname\": \"PlotHistogram2D\",\n      \"location\": \"implot:899\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotHistogram2D_S64Ptr\",\n      \"ret\": \"double\",\n      \"signature\": \"(const char*,const ImS64*,const ImS64*,int,int,int,ImPlotRect,ImPlotHistogramFlags)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImU64* xs,const ImU64* ys,int count,int x_bins,int y_bins,ImPlotRect range,ImPlotHistogramFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"xs\",\n          \"type\": \"const ImU64*\"\n        },\n        {\n          \"name\": \"ys\",\n          \"type\": \"const ImU64*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"x_bins\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"y_bins\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"range\",\n          \"type\": \"ImPlotRect\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotHistogramFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImU64* xs,const ImU64* ys,int count,int x_bins=ImPlotBin_Sturges,int y_bins=ImPlotBin_Sturges,ImPlotRect range=ImPlotRect(),ImPlotHistogramFlags flags=0)\",\n      \"call_args\": \"(label_id,xs,ys,count,x_bins,y_bins,range,flags)\",\n      \"cimguiname\": \"ImPlot_PlotHistogram2D\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"range\": \"ImPlotRect()\",\n        \"x_bins\": \"ImPlotBin_Sturges\",\n        \"y_bins\": \"ImPlotBin_Sturges\"\n      },\n      \"funcname\": \"PlotHistogram2D\",\n      \"location\": \"implot:899\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotHistogram2D_U64Ptr\",\n      \"ret\": \"double\",\n      \"signature\": \"(const char*,const ImU64*,const ImU64*,int,int,int,ImPlotRect,ImPlotHistogramFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_PlotImage\": [\n    {\n      \"args\": \"(const char* label_id,ImTextureID user_texture_id,const ImPlotPoint bounds_min,const ImPlotPoint bounds_max,const ImVec2 uv0,const ImVec2 uv1,const ImVec4 tint_col,ImPlotImageFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"user_texture_id\",\n          \"type\": \"ImTextureID\"\n        },\n        {\n          \"name\": \"bounds_min\",\n          \"type\": \"const ImPlotPoint\"\n        },\n        {\n          \"name\": \"bounds_max\",\n          \"type\": \"const ImPlotPoint\"\n        },\n        {\n          \"name\": \"uv0\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"uv1\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"tint_col\",\n          \"type\": \"const ImVec4\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotImageFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,ImTextureID user_texture_id,const ImPlotPoint& bounds_min,const ImPlotPoint& bounds_max,const ImVec2& uv0=ImVec2(0,0),const ImVec2& uv1=ImVec2(1,1),const ImVec4& tint_col=ImVec4(1,1,1,1),ImPlotImageFlags flags=0)\",\n      \"call_args\": \"(label_id,user_texture_id,bounds_min,bounds_max,uv0,uv1,tint_col,flags)\",\n      \"cimguiname\": \"ImPlot_PlotImage\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"tint_col\": \"ImVec4(1,1,1,1)\",\n        \"uv0\": \"ImVec2(0,0)\",\n        \"uv1\": \"ImVec2(1,1)\"\n      },\n      \"funcname\": \"PlotImage\",\n      \"location\": \"implot:906\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotImage\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,ImTextureID,const ImPlotPoint,const ImPlotPoint,const ImVec2,const ImVec2,const ImVec4,ImPlotImageFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_PlotInfLines\": [\n    {\n      \"args\": \"(const char* label_id,const float* values,int count,ImPlotInfLinesFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"values\",\n          \"type\": \"const float*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotInfLinesFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const float* values,int count,ImPlotInfLinesFlags flags=0,int offset=0,int stride=sizeof(float))\",\n      \"call_args\": \"(label_id,values,count,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotInfLines\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(float)\"\n      },\n      \"funcname\": \"PlotInfLines\",\n      \"location\": \"implot:885\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotInfLines_FloatPtr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const float*,int,ImPlotInfLinesFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const double* values,int count,ImPlotInfLinesFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"values\",\n          \"type\": \"const double*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotInfLinesFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const double* values,int count,ImPlotInfLinesFlags flags=0,int offset=0,int stride=sizeof(double))\",\n      \"call_args\": \"(label_id,values,count,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotInfLines\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(double)\"\n      },\n      \"funcname\": \"PlotInfLines\",\n      \"location\": \"implot:885\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotInfLines_doublePtr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const double*,int,ImPlotInfLinesFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImS8* values,int count,ImPlotInfLinesFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImS8*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotInfLinesFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImS8* values,int count,ImPlotInfLinesFlags flags=0,int offset=0,int stride=sizeof(ImS8))\",\n      \"call_args\": \"(label_id,values,count,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotInfLines\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(ImS8)\"\n      },\n      \"funcname\": \"PlotInfLines\",\n      \"location\": \"implot:885\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotInfLines_S8Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImS8*,int,ImPlotInfLinesFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImU8* values,int count,ImPlotInfLinesFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImU8*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotInfLinesFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImU8* values,int count,ImPlotInfLinesFlags flags=0,int offset=0,int stride=sizeof(ImU8))\",\n      \"call_args\": \"(label_id,values,count,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotInfLines\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(ImU8)\"\n      },\n      \"funcname\": \"PlotInfLines\",\n      \"location\": \"implot:885\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotInfLines_U8Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImU8*,int,ImPlotInfLinesFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImS16* values,int count,ImPlotInfLinesFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImS16*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotInfLinesFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImS16* values,int count,ImPlotInfLinesFlags flags=0,int offset=0,int stride=sizeof(ImS16))\",\n      \"call_args\": \"(label_id,values,count,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotInfLines\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(ImS16)\"\n      },\n      \"funcname\": \"PlotInfLines\",\n      \"location\": \"implot:885\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotInfLines_S16Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImS16*,int,ImPlotInfLinesFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImU16* values,int count,ImPlotInfLinesFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImU16*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotInfLinesFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImU16* values,int count,ImPlotInfLinesFlags flags=0,int offset=0,int stride=sizeof(ImU16))\",\n      \"call_args\": \"(label_id,values,count,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotInfLines\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(ImU16)\"\n      },\n      \"funcname\": \"PlotInfLines\",\n      \"location\": \"implot:885\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotInfLines_U16Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImU16*,int,ImPlotInfLinesFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImS32* values,int count,ImPlotInfLinesFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImS32*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotInfLinesFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImS32* values,int count,ImPlotInfLinesFlags flags=0,int offset=0,int stride=sizeof(ImS32))\",\n      \"call_args\": \"(label_id,values,count,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotInfLines\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(ImS32)\"\n      },\n      \"funcname\": \"PlotInfLines\",\n      \"location\": \"implot:885\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotInfLines_S32Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImS32*,int,ImPlotInfLinesFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImU32* values,int count,ImPlotInfLinesFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImU32*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotInfLinesFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImU32* values,int count,ImPlotInfLinesFlags flags=0,int offset=0,int stride=sizeof(ImU32))\",\n      \"call_args\": \"(label_id,values,count,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotInfLines\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(ImU32)\"\n      },\n      \"funcname\": \"PlotInfLines\",\n      \"location\": \"implot:885\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotInfLines_U32Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImU32*,int,ImPlotInfLinesFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImS64* values,int count,ImPlotInfLinesFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImS64*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotInfLinesFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImS64* values,int count,ImPlotInfLinesFlags flags=0,int offset=0,int stride=sizeof(ImS64))\",\n      \"call_args\": \"(label_id,values,count,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotInfLines\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(ImS64)\"\n      },\n      \"funcname\": \"PlotInfLines\",\n      \"location\": \"implot:885\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotInfLines_S64Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImS64*,int,ImPlotInfLinesFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImU64* values,int count,ImPlotInfLinesFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImU64*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotInfLinesFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImU64* values,int count,ImPlotInfLinesFlags flags=0,int offset=0,int stride=sizeof(ImU64))\",\n      \"call_args\": \"(label_id,values,count,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotInfLines\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(ImU64)\"\n      },\n      \"funcname\": \"PlotInfLines\",\n      \"location\": \"implot:885\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotInfLines_U64Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImU64*,int,ImPlotInfLinesFlags,int,int)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_PlotLine\": [\n    {\n      \"args\": \"(const char* label_id,const float* values,int count,double xscale,double xstart,ImPlotLineFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"values\",\n          \"type\": \"const float*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"xscale\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"xstart\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotLineFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const float* values,int count,double xscale=1,double xstart=0,ImPlotLineFlags flags=0,int offset=0,int stride=sizeof(float))\",\n      \"call_args\": \"(label_id,values,count,xscale,xstart,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotLine\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(float)\",\n        \"xscale\": \"1\",\n        \"xstart\": \"0\"\n      },\n      \"funcname\": \"PlotLine\",\n      \"location\": \"implot:848\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotLine_FloatPtrInt\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const float*,int,double,double,ImPlotLineFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const double* values,int count,double xscale,double xstart,ImPlotLineFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"values\",\n          \"type\": \"const double*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"xscale\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"xstart\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotLineFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const double* values,int count,double xscale=1,double xstart=0,ImPlotLineFlags flags=0,int offset=0,int stride=sizeof(double))\",\n      \"call_args\": \"(label_id,values,count,xscale,xstart,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotLine\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(double)\",\n        \"xscale\": \"1\",\n        \"xstart\": \"0\"\n      },\n      \"funcname\": \"PlotLine\",\n      \"location\": \"implot:848\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotLine_doublePtrInt\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const double*,int,double,double,ImPlotLineFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImS8* values,int count,double xscale,double xstart,ImPlotLineFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImS8*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"xscale\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"xstart\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotLineFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImS8* values,int count,double xscale=1,double xstart=0,ImPlotLineFlags flags=0,int offset=0,int stride=sizeof(ImS8))\",\n      \"call_args\": \"(label_id,values,count,xscale,xstart,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotLine\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(ImS8)\",\n        \"xscale\": \"1\",\n        \"xstart\": \"0\"\n      },\n      \"funcname\": \"PlotLine\",\n      \"location\": \"implot:848\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotLine_S8PtrInt\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImS8*,int,double,double,ImPlotLineFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImU8* values,int count,double xscale,double xstart,ImPlotLineFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImU8*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"xscale\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"xstart\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotLineFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImU8* values,int count,double xscale=1,double xstart=0,ImPlotLineFlags flags=0,int offset=0,int stride=sizeof(ImU8))\",\n      \"call_args\": \"(label_id,values,count,xscale,xstart,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotLine\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(ImU8)\",\n        \"xscale\": \"1\",\n        \"xstart\": \"0\"\n      },\n      \"funcname\": \"PlotLine\",\n      \"location\": \"implot:848\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotLine_U8PtrInt\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImU8*,int,double,double,ImPlotLineFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImS16* values,int count,double xscale,double xstart,ImPlotLineFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImS16*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"xscale\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"xstart\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotLineFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImS16* values,int count,double xscale=1,double xstart=0,ImPlotLineFlags flags=0,int offset=0,int stride=sizeof(ImS16))\",\n      \"call_args\": \"(label_id,values,count,xscale,xstart,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotLine\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(ImS16)\",\n        \"xscale\": \"1\",\n        \"xstart\": \"0\"\n      },\n      \"funcname\": \"PlotLine\",\n      \"location\": \"implot:848\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotLine_S16PtrInt\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImS16*,int,double,double,ImPlotLineFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImU16* values,int count,double xscale,double xstart,ImPlotLineFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImU16*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"xscale\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"xstart\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotLineFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImU16* values,int count,double xscale=1,double xstart=0,ImPlotLineFlags flags=0,int offset=0,int stride=sizeof(ImU16))\",\n      \"call_args\": \"(label_id,values,count,xscale,xstart,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotLine\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(ImU16)\",\n        \"xscale\": \"1\",\n        \"xstart\": \"0\"\n      },\n      \"funcname\": \"PlotLine\",\n      \"location\": \"implot:848\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotLine_U16PtrInt\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImU16*,int,double,double,ImPlotLineFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImS32* values,int count,double xscale,double xstart,ImPlotLineFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImS32*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"xscale\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"xstart\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotLineFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImS32* values,int count,double xscale=1,double xstart=0,ImPlotLineFlags flags=0,int offset=0,int stride=sizeof(ImS32))\",\n      \"call_args\": \"(label_id,values,count,xscale,xstart,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotLine\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(ImS32)\",\n        \"xscale\": \"1\",\n        \"xstart\": \"0\"\n      },\n      \"funcname\": \"PlotLine\",\n      \"location\": \"implot:848\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotLine_S32PtrInt\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImS32*,int,double,double,ImPlotLineFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImU32* values,int count,double xscale,double xstart,ImPlotLineFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImU32*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"xscale\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"xstart\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotLineFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImU32* values,int count,double xscale=1,double xstart=0,ImPlotLineFlags flags=0,int offset=0,int stride=sizeof(ImU32))\",\n      \"call_args\": \"(label_id,values,count,xscale,xstart,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotLine\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(ImU32)\",\n        \"xscale\": \"1\",\n        \"xstart\": \"0\"\n      },\n      \"funcname\": \"PlotLine\",\n      \"location\": \"implot:848\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotLine_U32PtrInt\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImU32*,int,double,double,ImPlotLineFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImS64* values,int count,double xscale,double xstart,ImPlotLineFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImS64*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"xscale\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"xstart\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotLineFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImS64* values,int count,double xscale=1,double xstart=0,ImPlotLineFlags flags=0,int offset=0,int stride=sizeof(ImS64))\",\n      \"call_args\": \"(label_id,values,count,xscale,xstart,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotLine\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(ImS64)\",\n        \"xscale\": \"1\",\n        \"xstart\": \"0\"\n      },\n      \"funcname\": \"PlotLine\",\n      \"location\": \"implot:848\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotLine_S64PtrInt\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImS64*,int,double,double,ImPlotLineFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImU64* values,int count,double xscale,double xstart,ImPlotLineFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImU64*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"xscale\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"xstart\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotLineFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImU64* values,int count,double xscale=1,double xstart=0,ImPlotLineFlags flags=0,int offset=0,int stride=sizeof(ImU64))\",\n      \"call_args\": \"(label_id,values,count,xscale,xstart,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotLine\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(ImU64)\",\n        \"xscale\": \"1\",\n        \"xstart\": \"0\"\n      },\n      \"funcname\": \"PlotLine\",\n      \"location\": \"implot:848\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotLine_U64PtrInt\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImU64*,int,double,double,ImPlotLineFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const float* xs,const float* ys,int count,ImPlotLineFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"xs\",\n          \"type\": \"const float*\"\n        },\n        {\n          \"name\": \"ys\",\n          \"type\": \"const float*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotLineFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const float* xs,const float* ys,int count,ImPlotLineFlags flags=0,int offset=0,int stride=sizeof(float))\",\n      \"call_args\": \"(label_id,xs,ys,count,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotLine\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(float)\"\n      },\n      \"funcname\": \"PlotLine\",\n      \"location\": \"implot:849\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotLine_FloatPtrFloatPtr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const float*,const float*,int,ImPlotLineFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const double* xs,const double* ys,int count,ImPlotLineFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"xs\",\n          \"type\": \"const double*\"\n        },\n        {\n          \"name\": \"ys\",\n          \"type\": \"const double*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotLineFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const double* xs,const double* ys,int count,ImPlotLineFlags flags=0,int offset=0,int stride=sizeof(double))\",\n      \"call_args\": \"(label_id,xs,ys,count,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotLine\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(double)\"\n      },\n      \"funcname\": \"PlotLine\",\n      \"location\": \"implot:849\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotLine_doublePtrdoublePtr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const double*,const double*,int,ImPlotLineFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImS8* xs,const ImS8* ys,int count,ImPlotLineFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"xs\",\n          \"type\": \"const ImS8*\"\n        },\n        {\n          \"name\": \"ys\",\n          \"type\": \"const ImS8*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotLineFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImS8* xs,const ImS8* ys,int count,ImPlotLineFlags flags=0,int offset=0,int stride=sizeof(ImS8))\",\n      \"call_args\": \"(label_id,xs,ys,count,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotLine\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(ImS8)\"\n      },\n      \"funcname\": \"PlotLine\",\n      \"location\": \"implot:849\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotLine_S8PtrS8Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImS8*,const ImS8*,int,ImPlotLineFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImU8* xs,const ImU8* ys,int count,ImPlotLineFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"xs\",\n          \"type\": \"const ImU8*\"\n        },\n        {\n          \"name\": \"ys\",\n          \"type\": \"const ImU8*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotLineFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImU8* xs,const ImU8* ys,int count,ImPlotLineFlags flags=0,int offset=0,int stride=sizeof(ImU8))\",\n      \"call_args\": \"(label_id,xs,ys,count,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotLine\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(ImU8)\"\n      },\n      \"funcname\": \"PlotLine\",\n      \"location\": \"implot:849\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotLine_U8PtrU8Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImU8*,const ImU8*,int,ImPlotLineFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImS16* xs,const ImS16* ys,int count,ImPlotLineFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"xs\",\n          \"type\": \"const ImS16*\"\n        },\n        {\n          \"name\": \"ys\",\n          \"type\": \"const ImS16*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotLineFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImS16* xs,const ImS16* ys,int count,ImPlotLineFlags flags=0,int offset=0,int stride=sizeof(ImS16))\",\n      \"call_args\": \"(label_id,xs,ys,count,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotLine\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(ImS16)\"\n      },\n      \"funcname\": \"PlotLine\",\n      \"location\": \"implot:849\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotLine_S16PtrS16Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImS16*,const ImS16*,int,ImPlotLineFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImU16* xs,const ImU16* ys,int count,ImPlotLineFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"xs\",\n          \"type\": \"const ImU16*\"\n        },\n        {\n          \"name\": \"ys\",\n          \"type\": \"const ImU16*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotLineFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImU16* xs,const ImU16* ys,int count,ImPlotLineFlags flags=0,int offset=0,int stride=sizeof(ImU16))\",\n      \"call_args\": \"(label_id,xs,ys,count,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotLine\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(ImU16)\"\n      },\n      \"funcname\": \"PlotLine\",\n      \"location\": \"implot:849\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotLine_U16PtrU16Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImU16*,const ImU16*,int,ImPlotLineFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImS32* xs,const ImS32* ys,int count,ImPlotLineFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"xs\",\n          \"type\": \"const ImS32*\"\n        },\n        {\n          \"name\": \"ys\",\n          \"type\": \"const ImS32*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotLineFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImS32* xs,const ImS32* ys,int count,ImPlotLineFlags flags=0,int offset=0,int stride=sizeof(ImS32))\",\n      \"call_args\": \"(label_id,xs,ys,count,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotLine\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(ImS32)\"\n      },\n      \"funcname\": \"PlotLine\",\n      \"location\": \"implot:849\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotLine_S32PtrS32Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImS32*,const ImS32*,int,ImPlotLineFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImU32* xs,const ImU32* ys,int count,ImPlotLineFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"xs\",\n          \"type\": \"const ImU32*\"\n        },\n        {\n          \"name\": \"ys\",\n          \"type\": \"const ImU32*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotLineFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImU32* xs,const ImU32* ys,int count,ImPlotLineFlags flags=0,int offset=0,int stride=sizeof(ImU32))\",\n      \"call_args\": \"(label_id,xs,ys,count,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotLine\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(ImU32)\"\n      },\n      \"funcname\": \"PlotLine\",\n      \"location\": \"implot:849\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotLine_U32PtrU32Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImU32*,const ImU32*,int,ImPlotLineFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImS64* xs,const ImS64* ys,int count,ImPlotLineFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"xs\",\n          \"type\": \"const ImS64*\"\n        },\n        {\n          \"name\": \"ys\",\n          \"type\": \"const ImS64*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotLineFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImS64* xs,const ImS64* ys,int count,ImPlotLineFlags flags=0,int offset=0,int stride=sizeof(ImS64))\",\n      \"call_args\": \"(label_id,xs,ys,count,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotLine\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(ImS64)\"\n      },\n      \"funcname\": \"PlotLine\",\n      \"location\": \"implot:849\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotLine_S64PtrS64Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImS64*,const ImS64*,int,ImPlotLineFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImU64* xs,const ImU64* ys,int count,ImPlotLineFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"xs\",\n          \"type\": \"const ImU64*\"\n        },\n        {\n          \"name\": \"ys\",\n          \"type\": \"const ImU64*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotLineFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImU64* xs,const ImU64* ys,int count,ImPlotLineFlags flags=0,int offset=0,int stride=sizeof(ImU64))\",\n      \"call_args\": \"(label_id,xs,ys,count,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotLine\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(ImU64)\"\n      },\n      \"funcname\": \"PlotLine\",\n      \"location\": \"implot:849\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotLine_U64PtrU64Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImU64*,const ImU64*,int,ImPlotLineFlags,int,int)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_PlotLineG\": [\n    {\n      \"args\": \"(const char* label_id,ImPlotGetter getter,void* data,int count,ImPlotLineFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"custom_type\": \"ImPlotPoint_getter\",\n          \"name\": \"getter\",\n          \"type\": \"ImPlotGetter\"\n        },\n        {\n          \"name\": \"data\",\n          \"type\": \"void*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotLineFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,ImPlotGetter getter,void* data,int count,ImPlotLineFlags flags=0)\",\n      \"call_args\": \"(label_id,getter,data,count,flags)\",\n      \"cimguiname\": \"ImPlot_PlotLineG\",\n      \"defaults\": {\n        \"flags\": \"0\"\n      },\n      \"funcname\": \"PlotLineG\",\n      \"location\": \"implot:850\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotLineG\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,ImPlotGetter,void*,int,ImPlotLineFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_PlotPieChart\": [\n    {\n      \"args\": \"(const char* const label_ids[],const float* values,int count,double x,double y,double radius,const char* label_fmt,double angle0,ImPlotPieChartFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_ids\",\n          \"type\": \"const char* const[]\"\n        },\n        {\n          \"name\": \"values\",\n          \"type\": \"const float*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"x\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"y\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"radius\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"label_fmt\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"angle0\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotPieChartFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* const label_ids[],const float* values,int count,double x,double y,double radius,const char* label_fmt=\\\"%.1f\\\",double angle0=90,ImPlotPieChartFlags flags=0)\",\n      \"call_args\": \"(label_ids,values,count,x,y,radius,label_fmt,angle0,flags)\",\n      \"cimguiname\": \"ImPlot_PlotPieChart\",\n      \"defaults\": {\n        \"angle0\": \"90\",\n        \"flags\": \"0\",\n        \"label_fmt\": \"\\\"%.1f\\\"\"\n      },\n      \"funcname\": \"PlotPieChart\",\n      \"location\": \"implot:888\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotPieChart_FloatPtr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char* const[],const float*,int,double,double,double,const char*,double,ImPlotPieChartFlags)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* const label_ids[],const double* values,int count,double x,double y,double radius,const char* label_fmt,double angle0,ImPlotPieChartFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_ids\",\n          \"type\": \"const char* const[]\"\n        },\n        {\n          \"name\": \"values\",\n          \"type\": \"const double*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"x\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"y\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"radius\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"label_fmt\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"angle0\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotPieChartFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* const label_ids[],const double* values,int count,double x,double y,double radius,const char* label_fmt=\\\"%.1f\\\",double angle0=90,ImPlotPieChartFlags flags=0)\",\n      \"call_args\": \"(label_ids,values,count,x,y,radius,label_fmt,angle0,flags)\",\n      \"cimguiname\": \"ImPlot_PlotPieChart\",\n      \"defaults\": {\n        \"angle0\": \"90\",\n        \"flags\": \"0\",\n        \"label_fmt\": \"\\\"%.1f\\\"\"\n      },\n      \"funcname\": \"PlotPieChart\",\n      \"location\": \"implot:888\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotPieChart_doublePtr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char* const[],const double*,int,double,double,double,const char*,double,ImPlotPieChartFlags)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* const label_ids[],const ImS8* values,int count,double x,double y,double radius,const char* label_fmt,double angle0,ImPlotPieChartFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_ids\",\n          \"type\": \"const char* const[]\"\n        },\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImS8*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"x\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"y\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"radius\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"label_fmt\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"angle0\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotPieChartFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* const label_ids[],const ImS8* values,int count,double x,double y,double radius,const char* label_fmt=\\\"%.1f\\\",double angle0=90,ImPlotPieChartFlags flags=0)\",\n      \"call_args\": \"(label_ids,values,count,x,y,radius,label_fmt,angle0,flags)\",\n      \"cimguiname\": \"ImPlot_PlotPieChart\",\n      \"defaults\": {\n        \"angle0\": \"90\",\n        \"flags\": \"0\",\n        \"label_fmt\": \"\\\"%.1f\\\"\"\n      },\n      \"funcname\": \"PlotPieChart\",\n      \"location\": \"implot:888\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotPieChart_S8Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char* const[],const ImS8*,int,double,double,double,const char*,double,ImPlotPieChartFlags)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* const label_ids[],const ImU8* values,int count,double x,double y,double radius,const char* label_fmt,double angle0,ImPlotPieChartFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_ids\",\n          \"type\": \"const char* const[]\"\n        },\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImU8*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"x\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"y\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"radius\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"label_fmt\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"angle0\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotPieChartFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* const label_ids[],const ImU8* values,int count,double x,double y,double radius,const char* label_fmt=\\\"%.1f\\\",double angle0=90,ImPlotPieChartFlags flags=0)\",\n      \"call_args\": \"(label_ids,values,count,x,y,radius,label_fmt,angle0,flags)\",\n      \"cimguiname\": \"ImPlot_PlotPieChart\",\n      \"defaults\": {\n        \"angle0\": \"90\",\n        \"flags\": \"0\",\n        \"label_fmt\": \"\\\"%.1f\\\"\"\n      },\n      \"funcname\": \"PlotPieChart\",\n      \"location\": \"implot:888\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotPieChart_U8Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char* const[],const ImU8*,int,double,double,double,const char*,double,ImPlotPieChartFlags)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* const label_ids[],const ImS16* values,int count,double x,double y,double radius,const char* label_fmt,double angle0,ImPlotPieChartFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_ids\",\n          \"type\": \"const char* const[]\"\n        },\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImS16*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"x\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"y\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"radius\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"label_fmt\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"angle0\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotPieChartFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* const label_ids[],const ImS16* values,int count,double x,double y,double radius,const char* label_fmt=\\\"%.1f\\\",double angle0=90,ImPlotPieChartFlags flags=0)\",\n      \"call_args\": \"(label_ids,values,count,x,y,radius,label_fmt,angle0,flags)\",\n      \"cimguiname\": \"ImPlot_PlotPieChart\",\n      \"defaults\": {\n        \"angle0\": \"90\",\n        \"flags\": \"0\",\n        \"label_fmt\": \"\\\"%.1f\\\"\"\n      },\n      \"funcname\": \"PlotPieChart\",\n      \"location\": \"implot:888\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotPieChart_S16Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char* const[],const ImS16*,int,double,double,double,const char*,double,ImPlotPieChartFlags)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* const label_ids[],const ImU16* values,int count,double x,double y,double radius,const char* label_fmt,double angle0,ImPlotPieChartFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_ids\",\n          \"type\": \"const char* const[]\"\n        },\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImU16*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"x\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"y\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"radius\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"label_fmt\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"angle0\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotPieChartFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* const label_ids[],const ImU16* values,int count,double x,double y,double radius,const char* label_fmt=\\\"%.1f\\\",double angle0=90,ImPlotPieChartFlags flags=0)\",\n      \"call_args\": \"(label_ids,values,count,x,y,radius,label_fmt,angle0,flags)\",\n      \"cimguiname\": \"ImPlot_PlotPieChart\",\n      \"defaults\": {\n        \"angle0\": \"90\",\n        \"flags\": \"0\",\n        \"label_fmt\": \"\\\"%.1f\\\"\"\n      },\n      \"funcname\": \"PlotPieChart\",\n      \"location\": \"implot:888\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotPieChart_U16Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char* const[],const ImU16*,int,double,double,double,const char*,double,ImPlotPieChartFlags)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* const label_ids[],const ImS32* values,int count,double x,double y,double radius,const char* label_fmt,double angle0,ImPlotPieChartFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_ids\",\n          \"type\": \"const char* const[]\"\n        },\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImS32*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"x\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"y\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"radius\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"label_fmt\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"angle0\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotPieChartFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* const label_ids[],const ImS32* values,int count,double x,double y,double radius,const char* label_fmt=\\\"%.1f\\\",double angle0=90,ImPlotPieChartFlags flags=0)\",\n      \"call_args\": \"(label_ids,values,count,x,y,radius,label_fmt,angle0,flags)\",\n      \"cimguiname\": \"ImPlot_PlotPieChart\",\n      \"defaults\": {\n        \"angle0\": \"90\",\n        \"flags\": \"0\",\n        \"label_fmt\": \"\\\"%.1f\\\"\"\n      },\n      \"funcname\": \"PlotPieChart\",\n      \"location\": \"implot:888\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotPieChart_S32Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char* const[],const ImS32*,int,double,double,double,const char*,double,ImPlotPieChartFlags)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* const label_ids[],const ImU32* values,int count,double x,double y,double radius,const char* label_fmt,double angle0,ImPlotPieChartFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_ids\",\n          \"type\": \"const char* const[]\"\n        },\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImU32*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"x\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"y\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"radius\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"label_fmt\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"angle0\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotPieChartFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* const label_ids[],const ImU32* values,int count,double x,double y,double radius,const char* label_fmt=\\\"%.1f\\\",double angle0=90,ImPlotPieChartFlags flags=0)\",\n      \"call_args\": \"(label_ids,values,count,x,y,radius,label_fmt,angle0,flags)\",\n      \"cimguiname\": \"ImPlot_PlotPieChart\",\n      \"defaults\": {\n        \"angle0\": \"90\",\n        \"flags\": \"0\",\n        \"label_fmt\": \"\\\"%.1f\\\"\"\n      },\n      \"funcname\": \"PlotPieChart\",\n      \"location\": \"implot:888\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotPieChart_U32Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char* const[],const ImU32*,int,double,double,double,const char*,double,ImPlotPieChartFlags)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* const label_ids[],const ImS64* values,int count,double x,double y,double radius,const char* label_fmt,double angle0,ImPlotPieChartFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_ids\",\n          \"type\": \"const char* const[]\"\n        },\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImS64*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"x\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"y\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"radius\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"label_fmt\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"angle0\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotPieChartFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* const label_ids[],const ImS64* values,int count,double x,double y,double radius,const char* label_fmt=\\\"%.1f\\\",double angle0=90,ImPlotPieChartFlags flags=0)\",\n      \"call_args\": \"(label_ids,values,count,x,y,radius,label_fmt,angle0,flags)\",\n      \"cimguiname\": \"ImPlot_PlotPieChart\",\n      \"defaults\": {\n        \"angle0\": \"90\",\n        \"flags\": \"0\",\n        \"label_fmt\": \"\\\"%.1f\\\"\"\n      },\n      \"funcname\": \"PlotPieChart\",\n      \"location\": \"implot:888\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotPieChart_S64Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char* const[],const ImS64*,int,double,double,double,const char*,double,ImPlotPieChartFlags)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* const label_ids[],const ImU64* values,int count,double x,double y,double radius,const char* label_fmt,double angle0,ImPlotPieChartFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_ids\",\n          \"type\": \"const char* const[]\"\n        },\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImU64*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"x\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"y\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"radius\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"label_fmt\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"angle0\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotPieChartFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* const label_ids[],const ImU64* values,int count,double x,double y,double radius,const char* label_fmt=\\\"%.1f\\\",double angle0=90,ImPlotPieChartFlags flags=0)\",\n      \"call_args\": \"(label_ids,values,count,x,y,radius,label_fmt,angle0,flags)\",\n      \"cimguiname\": \"ImPlot_PlotPieChart\",\n      \"defaults\": {\n        \"angle0\": \"90\",\n        \"flags\": \"0\",\n        \"label_fmt\": \"\\\"%.1f\\\"\"\n      },\n      \"funcname\": \"PlotPieChart\",\n      \"location\": \"implot:888\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotPieChart_U64Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char* const[],const ImU64*,int,double,double,double,const char*,double,ImPlotPieChartFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_PlotScatter\": [\n    {\n      \"args\": \"(const char* label_id,const float* values,int count,double xscale,double xstart,ImPlotScatterFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"values\",\n          \"type\": \"const float*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"xscale\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"xstart\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotScatterFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const float* values,int count,double xscale=1,double xstart=0,ImPlotScatterFlags flags=0,int offset=0,int stride=sizeof(float))\",\n      \"call_args\": \"(label_id,values,count,xscale,xstart,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotScatter\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(float)\",\n        \"xscale\": \"1\",\n        \"xstart\": \"0\"\n      },\n      \"funcname\": \"PlotScatter\",\n      \"location\": \"implot:853\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotScatter_FloatPtrInt\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const float*,int,double,double,ImPlotScatterFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const double* values,int count,double xscale,double xstart,ImPlotScatterFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"values\",\n          \"type\": \"const double*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"xscale\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"xstart\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotScatterFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const double* values,int count,double xscale=1,double xstart=0,ImPlotScatterFlags flags=0,int offset=0,int stride=sizeof(double))\",\n      \"call_args\": \"(label_id,values,count,xscale,xstart,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotScatter\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(double)\",\n        \"xscale\": \"1\",\n        \"xstart\": \"0\"\n      },\n      \"funcname\": \"PlotScatter\",\n      \"location\": \"implot:853\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotScatter_doublePtrInt\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const double*,int,double,double,ImPlotScatterFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImS8* values,int count,double xscale,double xstart,ImPlotScatterFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImS8*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"xscale\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"xstart\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotScatterFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImS8* values,int count,double xscale=1,double xstart=0,ImPlotScatterFlags flags=0,int offset=0,int stride=sizeof(ImS8))\",\n      \"call_args\": \"(label_id,values,count,xscale,xstart,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotScatter\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(ImS8)\",\n        \"xscale\": \"1\",\n        \"xstart\": \"0\"\n      },\n      \"funcname\": \"PlotScatter\",\n      \"location\": \"implot:853\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotScatter_S8PtrInt\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImS8*,int,double,double,ImPlotScatterFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImU8* values,int count,double xscale,double xstart,ImPlotScatterFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImU8*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"xscale\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"xstart\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotScatterFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImU8* values,int count,double xscale=1,double xstart=0,ImPlotScatterFlags flags=0,int offset=0,int stride=sizeof(ImU8))\",\n      \"call_args\": \"(label_id,values,count,xscale,xstart,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotScatter\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(ImU8)\",\n        \"xscale\": \"1\",\n        \"xstart\": \"0\"\n      },\n      \"funcname\": \"PlotScatter\",\n      \"location\": \"implot:853\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotScatter_U8PtrInt\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImU8*,int,double,double,ImPlotScatterFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImS16* values,int count,double xscale,double xstart,ImPlotScatterFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImS16*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"xscale\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"xstart\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotScatterFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImS16* values,int count,double xscale=1,double xstart=0,ImPlotScatterFlags flags=0,int offset=0,int stride=sizeof(ImS16))\",\n      \"call_args\": \"(label_id,values,count,xscale,xstart,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotScatter\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(ImS16)\",\n        \"xscale\": \"1\",\n        \"xstart\": \"0\"\n      },\n      \"funcname\": \"PlotScatter\",\n      \"location\": \"implot:853\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotScatter_S16PtrInt\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImS16*,int,double,double,ImPlotScatterFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImU16* values,int count,double xscale,double xstart,ImPlotScatterFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImU16*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"xscale\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"xstart\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotScatterFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImU16* values,int count,double xscale=1,double xstart=0,ImPlotScatterFlags flags=0,int offset=0,int stride=sizeof(ImU16))\",\n      \"call_args\": \"(label_id,values,count,xscale,xstart,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotScatter\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(ImU16)\",\n        \"xscale\": \"1\",\n        \"xstart\": \"0\"\n      },\n      \"funcname\": \"PlotScatter\",\n      \"location\": \"implot:853\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotScatter_U16PtrInt\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImU16*,int,double,double,ImPlotScatterFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImS32* values,int count,double xscale,double xstart,ImPlotScatterFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImS32*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"xscale\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"xstart\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotScatterFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImS32* values,int count,double xscale=1,double xstart=0,ImPlotScatterFlags flags=0,int offset=0,int stride=sizeof(ImS32))\",\n      \"call_args\": \"(label_id,values,count,xscale,xstart,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotScatter\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(ImS32)\",\n        \"xscale\": \"1\",\n        \"xstart\": \"0\"\n      },\n      \"funcname\": \"PlotScatter\",\n      \"location\": \"implot:853\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotScatter_S32PtrInt\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImS32*,int,double,double,ImPlotScatterFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImU32* values,int count,double xscale,double xstart,ImPlotScatterFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImU32*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"xscale\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"xstart\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotScatterFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImU32* values,int count,double xscale=1,double xstart=0,ImPlotScatterFlags flags=0,int offset=0,int stride=sizeof(ImU32))\",\n      \"call_args\": \"(label_id,values,count,xscale,xstart,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotScatter\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(ImU32)\",\n        \"xscale\": \"1\",\n        \"xstart\": \"0\"\n      },\n      \"funcname\": \"PlotScatter\",\n      \"location\": \"implot:853\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotScatter_U32PtrInt\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImU32*,int,double,double,ImPlotScatterFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImS64* values,int count,double xscale,double xstart,ImPlotScatterFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImS64*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"xscale\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"xstart\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotScatterFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImS64* values,int count,double xscale=1,double xstart=0,ImPlotScatterFlags flags=0,int offset=0,int stride=sizeof(ImS64))\",\n      \"call_args\": \"(label_id,values,count,xscale,xstart,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotScatter\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(ImS64)\",\n        \"xscale\": \"1\",\n        \"xstart\": \"0\"\n      },\n      \"funcname\": \"PlotScatter\",\n      \"location\": \"implot:853\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotScatter_S64PtrInt\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImS64*,int,double,double,ImPlotScatterFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImU64* values,int count,double xscale,double xstart,ImPlotScatterFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImU64*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"xscale\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"xstart\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotScatterFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImU64* values,int count,double xscale=1,double xstart=0,ImPlotScatterFlags flags=0,int offset=0,int stride=sizeof(ImU64))\",\n      \"call_args\": \"(label_id,values,count,xscale,xstart,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotScatter\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(ImU64)\",\n        \"xscale\": \"1\",\n        \"xstart\": \"0\"\n      },\n      \"funcname\": \"PlotScatter\",\n      \"location\": \"implot:853\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotScatter_U64PtrInt\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImU64*,int,double,double,ImPlotScatterFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const float* xs,const float* ys,int count,ImPlotScatterFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"xs\",\n          \"type\": \"const float*\"\n        },\n        {\n          \"name\": \"ys\",\n          \"type\": \"const float*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotScatterFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const float* xs,const float* ys,int count,ImPlotScatterFlags flags=0,int offset=0,int stride=sizeof(float))\",\n      \"call_args\": \"(label_id,xs,ys,count,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotScatter\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(float)\"\n      },\n      \"funcname\": \"PlotScatter\",\n      \"location\": \"implot:854\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotScatter_FloatPtrFloatPtr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const float*,const float*,int,ImPlotScatterFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const double* xs,const double* ys,int count,ImPlotScatterFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"xs\",\n          \"type\": \"const double*\"\n        },\n        {\n          \"name\": \"ys\",\n          \"type\": \"const double*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotScatterFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const double* xs,const double* ys,int count,ImPlotScatterFlags flags=0,int offset=0,int stride=sizeof(double))\",\n      \"call_args\": \"(label_id,xs,ys,count,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotScatter\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(double)\"\n      },\n      \"funcname\": \"PlotScatter\",\n      \"location\": \"implot:854\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotScatter_doublePtrdoublePtr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const double*,const double*,int,ImPlotScatterFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImS8* xs,const ImS8* ys,int count,ImPlotScatterFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"xs\",\n          \"type\": \"const ImS8*\"\n        },\n        {\n          \"name\": \"ys\",\n          \"type\": \"const ImS8*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotScatterFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImS8* xs,const ImS8* ys,int count,ImPlotScatterFlags flags=0,int offset=0,int stride=sizeof(ImS8))\",\n      \"call_args\": \"(label_id,xs,ys,count,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotScatter\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(ImS8)\"\n      },\n      \"funcname\": \"PlotScatter\",\n      \"location\": \"implot:854\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotScatter_S8PtrS8Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImS8*,const ImS8*,int,ImPlotScatterFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImU8* xs,const ImU8* ys,int count,ImPlotScatterFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"xs\",\n          \"type\": \"const ImU8*\"\n        },\n        {\n          \"name\": \"ys\",\n          \"type\": \"const ImU8*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotScatterFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImU8* xs,const ImU8* ys,int count,ImPlotScatterFlags flags=0,int offset=0,int stride=sizeof(ImU8))\",\n      \"call_args\": \"(label_id,xs,ys,count,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotScatter\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(ImU8)\"\n      },\n      \"funcname\": \"PlotScatter\",\n      \"location\": \"implot:854\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotScatter_U8PtrU8Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImU8*,const ImU8*,int,ImPlotScatterFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImS16* xs,const ImS16* ys,int count,ImPlotScatterFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"xs\",\n          \"type\": \"const ImS16*\"\n        },\n        {\n          \"name\": \"ys\",\n          \"type\": \"const ImS16*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotScatterFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImS16* xs,const ImS16* ys,int count,ImPlotScatterFlags flags=0,int offset=0,int stride=sizeof(ImS16))\",\n      \"call_args\": \"(label_id,xs,ys,count,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotScatter\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(ImS16)\"\n      },\n      \"funcname\": \"PlotScatter\",\n      \"location\": \"implot:854\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotScatter_S16PtrS16Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImS16*,const ImS16*,int,ImPlotScatterFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImU16* xs,const ImU16* ys,int count,ImPlotScatterFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"xs\",\n          \"type\": \"const ImU16*\"\n        },\n        {\n          \"name\": \"ys\",\n          \"type\": \"const ImU16*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotScatterFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImU16* xs,const ImU16* ys,int count,ImPlotScatterFlags flags=0,int offset=0,int stride=sizeof(ImU16))\",\n      \"call_args\": \"(label_id,xs,ys,count,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotScatter\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(ImU16)\"\n      },\n      \"funcname\": \"PlotScatter\",\n      \"location\": \"implot:854\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotScatter_U16PtrU16Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImU16*,const ImU16*,int,ImPlotScatterFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImS32* xs,const ImS32* ys,int count,ImPlotScatterFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"xs\",\n          \"type\": \"const ImS32*\"\n        },\n        {\n          \"name\": \"ys\",\n          \"type\": \"const ImS32*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotScatterFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImS32* xs,const ImS32* ys,int count,ImPlotScatterFlags flags=0,int offset=0,int stride=sizeof(ImS32))\",\n      \"call_args\": \"(label_id,xs,ys,count,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotScatter\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(ImS32)\"\n      },\n      \"funcname\": \"PlotScatter\",\n      \"location\": \"implot:854\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotScatter_S32PtrS32Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImS32*,const ImS32*,int,ImPlotScatterFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImU32* xs,const ImU32* ys,int count,ImPlotScatterFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"xs\",\n          \"type\": \"const ImU32*\"\n        },\n        {\n          \"name\": \"ys\",\n          \"type\": \"const ImU32*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotScatterFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImU32* xs,const ImU32* ys,int count,ImPlotScatterFlags flags=0,int offset=0,int stride=sizeof(ImU32))\",\n      \"call_args\": \"(label_id,xs,ys,count,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotScatter\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(ImU32)\"\n      },\n      \"funcname\": \"PlotScatter\",\n      \"location\": \"implot:854\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotScatter_U32PtrU32Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImU32*,const ImU32*,int,ImPlotScatterFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImS64* xs,const ImS64* ys,int count,ImPlotScatterFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"xs\",\n          \"type\": \"const ImS64*\"\n        },\n        {\n          \"name\": \"ys\",\n          \"type\": \"const ImS64*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotScatterFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImS64* xs,const ImS64* ys,int count,ImPlotScatterFlags flags=0,int offset=0,int stride=sizeof(ImS64))\",\n      \"call_args\": \"(label_id,xs,ys,count,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotScatter\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(ImS64)\"\n      },\n      \"funcname\": \"PlotScatter\",\n      \"location\": \"implot:854\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotScatter_S64PtrS64Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImS64*,const ImS64*,int,ImPlotScatterFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImU64* xs,const ImU64* ys,int count,ImPlotScatterFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"xs\",\n          \"type\": \"const ImU64*\"\n        },\n        {\n          \"name\": \"ys\",\n          \"type\": \"const ImU64*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotScatterFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImU64* xs,const ImU64* ys,int count,ImPlotScatterFlags flags=0,int offset=0,int stride=sizeof(ImU64))\",\n      \"call_args\": \"(label_id,xs,ys,count,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotScatter\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(ImU64)\"\n      },\n      \"funcname\": \"PlotScatter\",\n      \"location\": \"implot:854\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotScatter_U64PtrU64Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImU64*,const ImU64*,int,ImPlotScatterFlags,int,int)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_PlotScatterG\": [\n    {\n      \"args\": \"(const char* label_id,ImPlotGetter getter,void* data,int count,ImPlotScatterFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"custom_type\": \"ImPlotPoint_getter\",\n          \"name\": \"getter\",\n          \"type\": \"ImPlotGetter\"\n        },\n        {\n          \"name\": \"data\",\n          \"type\": \"void*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotScatterFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,ImPlotGetter getter,void* data,int count,ImPlotScatterFlags flags=0)\",\n      \"call_args\": \"(label_id,getter,data,count,flags)\",\n      \"cimguiname\": \"ImPlot_PlotScatterG\",\n      \"defaults\": {\n        \"flags\": \"0\"\n      },\n      \"funcname\": \"PlotScatterG\",\n      \"location\": \"implot:855\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotScatterG\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,ImPlotGetter,void*,int,ImPlotScatterFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_PlotShaded\": [\n    {\n      \"args\": \"(const char* label_id,const float* values,int count,double yref,double xscale,double xstart,ImPlotShadedFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"values\",\n          \"type\": \"const float*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"yref\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"xscale\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"xstart\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotShadedFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const float* values,int count,double yref=0,double xscale=1,double xstart=0,ImPlotShadedFlags flags=0,int offset=0,int stride=sizeof(float))\",\n      \"call_args\": \"(label_id,values,count,yref,xscale,xstart,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotShaded\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(float)\",\n        \"xscale\": \"1\",\n        \"xstart\": \"0\",\n        \"yref\": \"0\"\n      },\n      \"funcname\": \"PlotShaded\",\n      \"location\": \"implot:863\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotShaded_FloatPtrInt\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const float*,int,double,double,double,ImPlotShadedFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const double* values,int count,double yref,double xscale,double xstart,ImPlotShadedFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"values\",\n          \"type\": \"const double*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"yref\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"xscale\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"xstart\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotShadedFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const double* values,int count,double yref=0,double xscale=1,double xstart=0,ImPlotShadedFlags flags=0,int offset=0,int stride=sizeof(double))\",\n      \"call_args\": \"(label_id,values,count,yref,xscale,xstart,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotShaded\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(double)\",\n        \"xscale\": \"1\",\n        \"xstart\": \"0\",\n        \"yref\": \"0\"\n      },\n      \"funcname\": \"PlotShaded\",\n      \"location\": \"implot:863\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotShaded_doublePtrInt\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const double*,int,double,double,double,ImPlotShadedFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImS8* values,int count,double yref,double xscale,double xstart,ImPlotShadedFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImS8*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"yref\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"xscale\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"xstart\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotShadedFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImS8* values,int count,double yref=0,double xscale=1,double xstart=0,ImPlotShadedFlags flags=0,int offset=0,int stride=sizeof(ImS8))\",\n      \"call_args\": \"(label_id,values,count,yref,xscale,xstart,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotShaded\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(ImS8)\",\n        \"xscale\": \"1\",\n        \"xstart\": \"0\",\n        \"yref\": \"0\"\n      },\n      \"funcname\": \"PlotShaded\",\n      \"location\": \"implot:863\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotShaded_S8PtrInt\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImS8*,int,double,double,double,ImPlotShadedFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImU8* values,int count,double yref,double xscale,double xstart,ImPlotShadedFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImU8*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"yref\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"xscale\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"xstart\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotShadedFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImU8* values,int count,double yref=0,double xscale=1,double xstart=0,ImPlotShadedFlags flags=0,int offset=0,int stride=sizeof(ImU8))\",\n      \"call_args\": \"(label_id,values,count,yref,xscale,xstart,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotShaded\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(ImU8)\",\n        \"xscale\": \"1\",\n        \"xstart\": \"0\",\n        \"yref\": \"0\"\n      },\n      \"funcname\": \"PlotShaded\",\n      \"location\": \"implot:863\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotShaded_U8PtrInt\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImU8*,int,double,double,double,ImPlotShadedFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImS16* values,int count,double yref,double xscale,double xstart,ImPlotShadedFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImS16*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"yref\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"xscale\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"xstart\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotShadedFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImS16* values,int count,double yref=0,double xscale=1,double xstart=0,ImPlotShadedFlags flags=0,int offset=0,int stride=sizeof(ImS16))\",\n      \"call_args\": \"(label_id,values,count,yref,xscale,xstart,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotShaded\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(ImS16)\",\n        \"xscale\": \"1\",\n        \"xstart\": \"0\",\n        \"yref\": \"0\"\n      },\n      \"funcname\": \"PlotShaded\",\n      \"location\": \"implot:863\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotShaded_S16PtrInt\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImS16*,int,double,double,double,ImPlotShadedFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImU16* values,int count,double yref,double xscale,double xstart,ImPlotShadedFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImU16*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"yref\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"xscale\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"xstart\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotShadedFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImU16* values,int count,double yref=0,double xscale=1,double xstart=0,ImPlotShadedFlags flags=0,int offset=0,int stride=sizeof(ImU16))\",\n      \"call_args\": \"(label_id,values,count,yref,xscale,xstart,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotShaded\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(ImU16)\",\n        \"xscale\": \"1\",\n        \"xstart\": \"0\",\n        \"yref\": \"0\"\n      },\n      \"funcname\": \"PlotShaded\",\n      \"location\": \"implot:863\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotShaded_U16PtrInt\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImU16*,int,double,double,double,ImPlotShadedFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImS32* values,int count,double yref,double xscale,double xstart,ImPlotShadedFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImS32*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"yref\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"xscale\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"xstart\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotShadedFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImS32* values,int count,double yref=0,double xscale=1,double xstart=0,ImPlotShadedFlags flags=0,int offset=0,int stride=sizeof(ImS32))\",\n      \"call_args\": \"(label_id,values,count,yref,xscale,xstart,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotShaded\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(ImS32)\",\n        \"xscale\": \"1\",\n        \"xstart\": \"0\",\n        \"yref\": \"0\"\n      },\n      \"funcname\": \"PlotShaded\",\n      \"location\": \"implot:863\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotShaded_S32PtrInt\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImS32*,int,double,double,double,ImPlotShadedFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImU32* values,int count,double yref,double xscale,double xstart,ImPlotShadedFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImU32*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"yref\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"xscale\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"xstart\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotShadedFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImU32* values,int count,double yref=0,double xscale=1,double xstart=0,ImPlotShadedFlags flags=0,int offset=0,int stride=sizeof(ImU32))\",\n      \"call_args\": \"(label_id,values,count,yref,xscale,xstart,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotShaded\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(ImU32)\",\n        \"xscale\": \"1\",\n        \"xstart\": \"0\",\n        \"yref\": \"0\"\n      },\n      \"funcname\": \"PlotShaded\",\n      \"location\": \"implot:863\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotShaded_U32PtrInt\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImU32*,int,double,double,double,ImPlotShadedFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImS64* values,int count,double yref,double xscale,double xstart,ImPlotShadedFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImS64*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"yref\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"xscale\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"xstart\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotShadedFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImS64* values,int count,double yref=0,double xscale=1,double xstart=0,ImPlotShadedFlags flags=0,int offset=0,int stride=sizeof(ImS64))\",\n      \"call_args\": \"(label_id,values,count,yref,xscale,xstart,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotShaded\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(ImS64)\",\n        \"xscale\": \"1\",\n        \"xstart\": \"0\",\n        \"yref\": \"0\"\n      },\n      \"funcname\": \"PlotShaded\",\n      \"location\": \"implot:863\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotShaded_S64PtrInt\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImS64*,int,double,double,double,ImPlotShadedFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImU64* values,int count,double yref,double xscale,double xstart,ImPlotShadedFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImU64*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"yref\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"xscale\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"xstart\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotShadedFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImU64* values,int count,double yref=0,double xscale=1,double xstart=0,ImPlotShadedFlags flags=0,int offset=0,int stride=sizeof(ImU64))\",\n      \"call_args\": \"(label_id,values,count,yref,xscale,xstart,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotShaded\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(ImU64)\",\n        \"xscale\": \"1\",\n        \"xstart\": \"0\",\n        \"yref\": \"0\"\n      },\n      \"funcname\": \"PlotShaded\",\n      \"location\": \"implot:863\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotShaded_U64PtrInt\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImU64*,int,double,double,double,ImPlotShadedFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const float* xs,const float* ys,int count,double yref,ImPlotShadedFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"xs\",\n          \"type\": \"const float*\"\n        },\n        {\n          \"name\": \"ys\",\n          \"type\": \"const float*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"yref\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotShadedFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const float* xs,const float* ys,int count,double yref=0,ImPlotShadedFlags flags=0,int offset=0,int stride=sizeof(float))\",\n      \"call_args\": \"(label_id,xs,ys,count,yref,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotShaded\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(float)\",\n        \"yref\": \"0\"\n      },\n      \"funcname\": \"PlotShaded\",\n      \"location\": \"implot:864\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotShaded_FloatPtrFloatPtrInt\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const float*,const float*,int,double,ImPlotShadedFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const double* xs,const double* ys,int count,double yref,ImPlotShadedFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"xs\",\n          \"type\": \"const double*\"\n        },\n        {\n          \"name\": \"ys\",\n          \"type\": \"const double*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"yref\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotShadedFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const double* xs,const double* ys,int count,double yref=0,ImPlotShadedFlags flags=0,int offset=0,int stride=sizeof(double))\",\n      \"call_args\": \"(label_id,xs,ys,count,yref,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotShaded\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(double)\",\n        \"yref\": \"0\"\n      },\n      \"funcname\": \"PlotShaded\",\n      \"location\": \"implot:864\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotShaded_doublePtrdoublePtrInt\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const double*,const double*,int,double,ImPlotShadedFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImS8* xs,const ImS8* ys,int count,double yref,ImPlotShadedFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"xs\",\n          \"type\": \"const ImS8*\"\n        },\n        {\n          \"name\": \"ys\",\n          \"type\": \"const ImS8*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"yref\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotShadedFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImS8* xs,const ImS8* ys,int count,double yref=0,ImPlotShadedFlags flags=0,int offset=0,int stride=sizeof(ImS8))\",\n      \"call_args\": \"(label_id,xs,ys,count,yref,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotShaded\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(ImS8)\",\n        \"yref\": \"0\"\n      },\n      \"funcname\": \"PlotShaded\",\n      \"location\": \"implot:864\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotShaded_S8PtrS8PtrInt\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImS8*,const ImS8*,int,double,ImPlotShadedFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImU8* xs,const ImU8* ys,int count,double yref,ImPlotShadedFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"xs\",\n          \"type\": \"const ImU8*\"\n        },\n        {\n          \"name\": \"ys\",\n          \"type\": \"const ImU8*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"yref\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotShadedFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImU8* xs,const ImU8* ys,int count,double yref=0,ImPlotShadedFlags flags=0,int offset=0,int stride=sizeof(ImU8))\",\n      \"call_args\": \"(label_id,xs,ys,count,yref,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotShaded\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(ImU8)\",\n        \"yref\": \"0\"\n      },\n      \"funcname\": \"PlotShaded\",\n      \"location\": \"implot:864\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotShaded_U8PtrU8PtrInt\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImU8*,const ImU8*,int,double,ImPlotShadedFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImS16* xs,const ImS16* ys,int count,double yref,ImPlotShadedFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"xs\",\n          \"type\": \"const ImS16*\"\n        },\n        {\n          \"name\": \"ys\",\n          \"type\": \"const ImS16*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"yref\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotShadedFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImS16* xs,const ImS16* ys,int count,double yref=0,ImPlotShadedFlags flags=0,int offset=0,int stride=sizeof(ImS16))\",\n      \"call_args\": \"(label_id,xs,ys,count,yref,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotShaded\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(ImS16)\",\n        \"yref\": \"0\"\n      },\n      \"funcname\": \"PlotShaded\",\n      \"location\": \"implot:864\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotShaded_S16PtrS16PtrInt\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImS16*,const ImS16*,int,double,ImPlotShadedFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImU16* xs,const ImU16* ys,int count,double yref,ImPlotShadedFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"xs\",\n          \"type\": \"const ImU16*\"\n        },\n        {\n          \"name\": \"ys\",\n          \"type\": \"const ImU16*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"yref\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotShadedFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImU16* xs,const ImU16* ys,int count,double yref=0,ImPlotShadedFlags flags=0,int offset=0,int stride=sizeof(ImU16))\",\n      \"call_args\": \"(label_id,xs,ys,count,yref,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotShaded\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(ImU16)\",\n        \"yref\": \"0\"\n      },\n      \"funcname\": \"PlotShaded\",\n      \"location\": \"implot:864\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotShaded_U16PtrU16PtrInt\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImU16*,const ImU16*,int,double,ImPlotShadedFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImS32* xs,const ImS32* ys,int count,double yref,ImPlotShadedFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"xs\",\n          \"type\": \"const ImS32*\"\n        },\n        {\n          \"name\": \"ys\",\n          \"type\": \"const ImS32*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"yref\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotShadedFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImS32* xs,const ImS32* ys,int count,double yref=0,ImPlotShadedFlags flags=0,int offset=0,int stride=sizeof(ImS32))\",\n      \"call_args\": \"(label_id,xs,ys,count,yref,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotShaded\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(ImS32)\",\n        \"yref\": \"0\"\n      },\n      \"funcname\": \"PlotShaded\",\n      \"location\": \"implot:864\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotShaded_S32PtrS32PtrInt\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImS32*,const ImS32*,int,double,ImPlotShadedFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImU32* xs,const ImU32* ys,int count,double yref,ImPlotShadedFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"xs\",\n          \"type\": \"const ImU32*\"\n        },\n        {\n          \"name\": \"ys\",\n          \"type\": \"const ImU32*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"yref\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotShadedFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImU32* xs,const ImU32* ys,int count,double yref=0,ImPlotShadedFlags flags=0,int offset=0,int stride=sizeof(ImU32))\",\n      \"call_args\": \"(label_id,xs,ys,count,yref,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotShaded\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(ImU32)\",\n        \"yref\": \"0\"\n      },\n      \"funcname\": \"PlotShaded\",\n      \"location\": \"implot:864\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotShaded_U32PtrU32PtrInt\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImU32*,const ImU32*,int,double,ImPlotShadedFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImS64* xs,const ImS64* ys,int count,double yref,ImPlotShadedFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"xs\",\n          \"type\": \"const ImS64*\"\n        },\n        {\n          \"name\": \"ys\",\n          \"type\": \"const ImS64*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"yref\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotShadedFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImS64* xs,const ImS64* ys,int count,double yref=0,ImPlotShadedFlags flags=0,int offset=0,int stride=sizeof(ImS64))\",\n      \"call_args\": \"(label_id,xs,ys,count,yref,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotShaded\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(ImS64)\",\n        \"yref\": \"0\"\n      },\n      \"funcname\": \"PlotShaded\",\n      \"location\": \"implot:864\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotShaded_S64PtrS64PtrInt\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImS64*,const ImS64*,int,double,ImPlotShadedFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImU64* xs,const ImU64* ys,int count,double yref,ImPlotShadedFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"xs\",\n          \"type\": \"const ImU64*\"\n        },\n        {\n          \"name\": \"ys\",\n          \"type\": \"const ImU64*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"yref\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotShadedFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImU64* xs,const ImU64* ys,int count,double yref=0,ImPlotShadedFlags flags=0,int offset=0,int stride=sizeof(ImU64))\",\n      \"call_args\": \"(label_id,xs,ys,count,yref,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotShaded\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(ImU64)\",\n        \"yref\": \"0\"\n      },\n      \"funcname\": \"PlotShaded\",\n      \"location\": \"implot:864\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotShaded_U64PtrU64PtrInt\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImU64*,const ImU64*,int,double,ImPlotShadedFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const float* xs,const float* ys1,const float* ys2,int count,ImPlotShadedFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"xs\",\n          \"type\": \"const float*\"\n        },\n        {\n          \"name\": \"ys1\",\n          \"type\": \"const float*\"\n        },\n        {\n          \"name\": \"ys2\",\n          \"type\": \"const float*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotShadedFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const float* xs,const float* ys1,const float* ys2,int count,ImPlotShadedFlags flags=0,int offset=0,int stride=sizeof(float))\",\n      \"call_args\": \"(label_id,xs,ys1,ys2,count,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotShaded\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(float)\"\n      },\n      \"funcname\": \"PlotShaded\",\n      \"location\": \"implot:865\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotShaded_FloatPtrFloatPtrFloatPtr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const float*,const float*,const float*,int,ImPlotShadedFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const double* xs,const double* ys1,const double* ys2,int count,ImPlotShadedFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"xs\",\n          \"type\": \"const double*\"\n        },\n        {\n          \"name\": \"ys1\",\n          \"type\": \"const double*\"\n        },\n        {\n          \"name\": \"ys2\",\n          \"type\": \"const double*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotShadedFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const double* xs,const double* ys1,const double* ys2,int count,ImPlotShadedFlags flags=0,int offset=0,int stride=sizeof(double))\",\n      \"call_args\": \"(label_id,xs,ys1,ys2,count,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotShaded\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(double)\"\n      },\n      \"funcname\": \"PlotShaded\",\n      \"location\": \"implot:865\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotShaded_doublePtrdoublePtrdoublePtr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const double*,const double*,const double*,int,ImPlotShadedFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImS8* xs,const ImS8* ys1,const ImS8* ys2,int count,ImPlotShadedFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"xs\",\n          \"type\": \"const ImS8*\"\n        },\n        {\n          \"name\": \"ys1\",\n          \"type\": \"const ImS8*\"\n        },\n        {\n          \"name\": \"ys2\",\n          \"type\": \"const ImS8*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotShadedFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImS8* xs,const ImS8* ys1,const ImS8* ys2,int count,ImPlotShadedFlags flags=0,int offset=0,int stride=sizeof(ImS8))\",\n      \"call_args\": \"(label_id,xs,ys1,ys2,count,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotShaded\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(ImS8)\"\n      },\n      \"funcname\": \"PlotShaded\",\n      \"location\": \"implot:865\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotShaded_S8PtrS8PtrS8Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImS8*,const ImS8*,const ImS8*,int,ImPlotShadedFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImU8* xs,const ImU8* ys1,const ImU8* ys2,int count,ImPlotShadedFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"xs\",\n          \"type\": \"const ImU8*\"\n        },\n        {\n          \"name\": \"ys1\",\n          \"type\": \"const ImU8*\"\n        },\n        {\n          \"name\": \"ys2\",\n          \"type\": \"const ImU8*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotShadedFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImU8* xs,const ImU8* ys1,const ImU8* ys2,int count,ImPlotShadedFlags flags=0,int offset=0,int stride=sizeof(ImU8))\",\n      \"call_args\": \"(label_id,xs,ys1,ys2,count,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotShaded\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(ImU8)\"\n      },\n      \"funcname\": \"PlotShaded\",\n      \"location\": \"implot:865\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotShaded_U8PtrU8PtrU8Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImU8*,const ImU8*,const ImU8*,int,ImPlotShadedFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImS16* xs,const ImS16* ys1,const ImS16* ys2,int count,ImPlotShadedFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"xs\",\n          \"type\": \"const ImS16*\"\n        },\n        {\n          \"name\": \"ys1\",\n          \"type\": \"const ImS16*\"\n        },\n        {\n          \"name\": \"ys2\",\n          \"type\": \"const ImS16*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotShadedFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImS16* xs,const ImS16* ys1,const ImS16* ys2,int count,ImPlotShadedFlags flags=0,int offset=0,int stride=sizeof(ImS16))\",\n      \"call_args\": \"(label_id,xs,ys1,ys2,count,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotShaded\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(ImS16)\"\n      },\n      \"funcname\": \"PlotShaded\",\n      \"location\": \"implot:865\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotShaded_S16PtrS16PtrS16Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImS16*,const ImS16*,const ImS16*,int,ImPlotShadedFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImU16* xs,const ImU16* ys1,const ImU16* ys2,int count,ImPlotShadedFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"xs\",\n          \"type\": \"const ImU16*\"\n        },\n        {\n          \"name\": \"ys1\",\n          \"type\": \"const ImU16*\"\n        },\n        {\n          \"name\": \"ys2\",\n          \"type\": \"const ImU16*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotShadedFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImU16* xs,const ImU16* ys1,const ImU16* ys2,int count,ImPlotShadedFlags flags=0,int offset=0,int stride=sizeof(ImU16))\",\n      \"call_args\": \"(label_id,xs,ys1,ys2,count,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotShaded\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(ImU16)\"\n      },\n      \"funcname\": \"PlotShaded\",\n      \"location\": \"implot:865\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotShaded_U16PtrU16PtrU16Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImU16*,const ImU16*,const ImU16*,int,ImPlotShadedFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImS32* xs,const ImS32* ys1,const ImS32* ys2,int count,ImPlotShadedFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"xs\",\n          \"type\": \"const ImS32*\"\n        },\n        {\n          \"name\": \"ys1\",\n          \"type\": \"const ImS32*\"\n        },\n        {\n          \"name\": \"ys2\",\n          \"type\": \"const ImS32*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotShadedFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImS32* xs,const ImS32* ys1,const ImS32* ys2,int count,ImPlotShadedFlags flags=0,int offset=0,int stride=sizeof(ImS32))\",\n      \"call_args\": \"(label_id,xs,ys1,ys2,count,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotShaded\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(ImS32)\"\n      },\n      \"funcname\": \"PlotShaded\",\n      \"location\": \"implot:865\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotShaded_S32PtrS32PtrS32Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImS32*,const ImS32*,const ImS32*,int,ImPlotShadedFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImU32* xs,const ImU32* ys1,const ImU32* ys2,int count,ImPlotShadedFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"xs\",\n          \"type\": \"const ImU32*\"\n        },\n        {\n          \"name\": \"ys1\",\n          \"type\": \"const ImU32*\"\n        },\n        {\n          \"name\": \"ys2\",\n          \"type\": \"const ImU32*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotShadedFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImU32* xs,const ImU32* ys1,const ImU32* ys2,int count,ImPlotShadedFlags flags=0,int offset=0,int stride=sizeof(ImU32))\",\n      \"call_args\": \"(label_id,xs,ys1,ys2,count,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotShaded\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(ImU32)\"\n      },\n      \"funcname\": \"PlotShaded\",\n      \"location\": \"implot:865\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotShaded_U32PtrU32PtrU32Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImU32*,const ImU32*,const ImU32*,int,ImPlotShadedFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImS64* xs,const ImS64* ys1,const ImS64* ys2,int count,ImPlotShadedFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"xs\",\n          \"type\": \"const ImS64*\"\n        },\n        {\n          \"name\": \"ys1\",\n          \"type\": \"const ImS64*\"\n        },\n        {\n          \"name\": \"ys2\",\n          \"type\": \"const ImS64*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotShadedFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImS64* xs,const ImS64* ys1,const ImS64* ys2,int count,ImPlotShadedFlags flags=0,int offset=0,int stride=sizeof(ImS64))\",\n      \"call_args\": \"(label_id,xs,ys1,ys2,count,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotShaded\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(ImS64)\"\n      },\n      \"funcname\": \"PlotShaded\",\n      \"location\": \"implot:865\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotShaded_S64PtrS64PtrS64Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImS64*,const ImS64*,const ImS64*,int,ImPlotShadedFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImU64* xs,const ImU64* ys1,const ImU64* ys2,int count,ImPlotShadedFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"xs\",\n          \"type\": \"const ImU64*\"\n        },\n        {\n          \"name\": \"ys1\",\n          \"type\": \"const ImU64*\"\n        },\n        {\n          \"name\": \"ys2\",\n          \"type\": \"const ImU64*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotShadedFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImU64* xs,const ImU64* ys1,const ImU64* ys2,int count,ImPlotShadedFlags flags=0,int offset=0,int stride=sizeof(ImU64))\",\n      \"call_args\": \"(label_id,xs,ys1,ys2,count,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotShaded\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(ImU64)\"\n      },\n      \"funcname\": \"PlotShaded\",\n      \"location\": \"implot:865\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotShaded_U64PtrU64PtrU64Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImU64*,const ImU64*,const ImU64*,int,ImPlotShadedFlags,int,int)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_PlotShadedG\": [\n    {\n      \"args\": \"(const char* label_id,ImPlotGetter getter1,void* data1,ImPlotGetter getter2,void* data2,int count,ImPlotShadedFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"custom_type\": \"ImPlotPoint_getter\",\n          \"name\": \"getter1\",\n          \"type\": \"ImPlotGetter\"\n        },\n        {\n          \"name\": \"data1\",\n          \"type\": \"void*\"\n        },\n        {\n          \"custom_type\": \"ImPlotPoint_getter\",\n          \"name\": \"getter2\",\n          \"type\": \"ImPlotGetter\"\n        },\n        {\n          \"name\": \"data2\",\n          \"type\": \"void*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotShadedFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,ImPlotGetter getter1,void* data1,ImPlotGetter getter2,void* data2,int count,ImPlotShadedFlags flags=0)\",\n      \"call_args\": \"(label_id,getter1,data1,getter2,data2,count,flags)\",\n      \"cimguiname\": \"ImPlot_PlotShadedG\",\n      \"defaults\": {\n        \"flags\": \"0\"\n      },\n      \"funcname\": \"PlotShadedG\",\n      \"location\": \"implot:866\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotShadedG\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,ImPlotGetter,void*,ImPlotGetter,void*,int,ImPlotShadedFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_PlotStairs\": [\n    {\n      \"args\": \"(const char* label_id,const float* values,int count,double xscale,double xstart,ImPlotStairsFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"values\",\n          \"type\": \"const float*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"xscale\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"xstart\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotStairsFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const float* values,int count,double xscale=1,double xstart=0,ImPlotStairsFlags flags=0,int offset=0,int stride=sizeof(float))\",\n      \"call_args\": \"(label_id,values,count,xscale,xstart,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotStairs\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(float)\",\n        \"xscale\": \"1\",\n        \"xstart\": \"0\"\n      },\n      \"funcname\": \"PlotStairs\",\n      \"location\": \"implot:858\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotStairs_FloatPtrInt\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const float*,int,double,double,ImPlotStairsFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const double* values,int count,double xscale,double xstart,ImPlotStairsFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"values\",\n          \"type\": \"const double*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"xscale\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"xstart\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotStairsFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const double* values,int count,double xscale=1,double xstart=0,ImPlotStairsFlags flags=0,int offset=0,int stride=sizeof(double))\",\n      \"call_args\": \"(label_id,values,count,xscale,xstart,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotStairs\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(double)\",\n        \"xscale\": \"1\",\n        \"xstart\": \"0\"\n      },\n      \"funcname\": \"PlotStairs\",\n      \"location\": \"implot:858\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotStairs_doublePtrInt\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const double*,int,double,double,ImPlotStairsFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImS8* values,int count,double xscale,double xstart,ImPlotStairsFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImS8*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"xscale\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"xstart\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotStairsFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImS8* values,int count,double xscale=1,double xstart=0,ImPlotStairsFlags flags=0,int offset=0,int stride=sizeof(ImS8))\",\n      \"call_args\": \"(label_id,values,count,xscale,xstart,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotStairs\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(ImS8)\",\n        \"xscale\": \"1\",\n        \"xstart\": \"0\"\n      },\n      \"funcname\": \"PlotStairs\",\n      \"location\": \"implot:858\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotStairs_S8PtrInt\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImS8*,int,double,double,ImPlotStairsFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImU8* values,int count,double xscale,double xstart,ImPlotStairsFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImU8*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"xscale\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"xstart\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotStairsFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImU8* values,int count,double xscale=1,double xstart=0,ImPlotStairsFlags flags=0,int offset=0,int stride=sizeof(ImU8))\",\n      \"call_args\": \"(label_id,values,count,xscale,xstart,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotStairs\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(ImU8)\",\n        \"xscale\": \"1\",\n        \"xstart\": \"0\"\n      },\n      \"funcname\": \"PlotStairs\",\n      \"location\": \"implot:858\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotStairs_U8PtrInt\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImU8*,int,double,double,ImPlotStairsFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImS16* values,int count,double xscale,double xstart,ImPlotStairsFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImS16*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"xscale\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"xstart\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotStairsFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImS16* values,int count,double xscale=1,double xstart=0,ImPlotStairsFlags flags=0,int offset=0,int stride=sizeof(ImS16))\",\n      \"call_args\": \"(label_id,values,count,xscale,xstart,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotStairs\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(ImS16)\",\n        \"xscale\": \"1\",\n        \"xstart\": \"0\"\n      },\n      \"funcname\": \"PlotStairs\",\n      \"location\": \"implot:858\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotStairs_S16PtrInt\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImS16*,int,double,double,ImPlotStairsFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImU16* values,int count,double xscale,double xstart,ImPlotStairsFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImU16*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"xscale\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"xstart\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotStairsFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImU16* values,int count,double xscale=1,double xstart=0,ImPlotStairsFlags flags=0,int offset=0,int stride=sizeof(ImU16))\",\n      \"call_args\": \"(label_id,values,count,xscale,xstart,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotStairs\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(ImU16)\",\n        \"xscale\": \"1\",\n        \"xstart\": \"0\"\n      },\n      \"funcname\": \"PlotStairs\",\n      \"location\": \"implot:858\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotStairs_U16PtrInt\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImU16*,int,double,double,ImPlotStairsFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImS32* values,int count,double xscale,double xstart,ImPlotStairsFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImS32*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"xscale\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"xstart\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotStairsFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImS32* values,int count,double xscale=1,double xstart=0,ImPlotStairsFlags flags=0,int offset=0,int stride=sizeof(ImS32))\",\n      \"call_args\": \"(label_id,values,count,xscale,xstart,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotStairs\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(ImS32)\",\n        \"xscale\": \"1\",\n        \"xstart\": \"0\"\n      },\n      \"funcname\": \"PlotStairs\",\n      \"location\": \"implot:858\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotStairs_S32PtrInt\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImS32*,int,double,double,ImPlotStairsFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImU32* values,int count,double xscale,double xstart,ImPlotStairsFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImU32*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"xscale\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"xstart\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotStairsFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImU32* values,int count,double xscale=1,double xstart=0,ImPlotStairsFlags flags=0,int offset=0,int stride=sizeof(ImU32))\",\n      \"call_args\": \"(label_id,values,count,xscale,xstart,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotStairs\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(ImU32)\",\n        \"xscale\": \"1\",\n        \"xstart\": \"0\"\n      },\n      \"funcname\": \"PlotStairs\",\n      \"location\": \"implot:858\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotStairs_U32PtrInt\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImU32*,int,double,double,ImPlotStairsFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImS64* values,int count,double xscale,double xstart,ImPlotStairsFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImS64*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"xscale\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"xstart\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotStairsFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImS64* values,int count,double xscale=1,double xstart=0,ImPlotStairsFlags flags=0,int offset=0,int stride=sizeof(ImS64))\",\n      \"call_args\": \"(label_id,values,count,xscale,xstart,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotStairs\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(ImS64)\",\n        \"xscale\": \"1\",\n        \"xstart\": \"0\"\n      },\n      \"funcname\": \"PlotStairs\",\n      \"location\": \"implot:858\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotStairs_S64PtrInt\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImS64*,int,double,double,ImPlotStairsFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImU64* values,int count,double xscale,double xstart,ImPlotStairsFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImU64*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"xscale\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"xstart\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotStairsFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImU64* values,int count,double xscale=1,double xstart=0,ImPlotStairsFlags flags=0,int offset=0,int stride=sizeof(ImU64))\",\n      \"call_args\": \"(label_id,values,count,xscale,xstart,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotStairs\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(ImU64)\",\n        \"xscale\": \"1\",\n        \"xstart\": \"0\"\n      },\n      \"funcname\": \"PlotStairs\",\n      \"location\": \"implot:858\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotStairs_U64PtrInt\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImU64*,int,double,double,ImPlotStairsFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const float* xs,const float* ys,int count,ImPlotStairsFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"xs\",\n          \"type\": \"const float*\"\n        },\n        {\n          \"name\": \"ys\",\n          \"type\": \"const float*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotStairsFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const float* xs,const float* ys,int count,ImPlotStairsFlags flags=0,int offset=0,int stride=sizeof(float))\",\n      \"call_args\": \"(label_id,xs,ys,count,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotStairs\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(float)\"\n      },\n      \"funcname\": \"PlotStairs\",\n      \"location\": \"implot:859\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotStairs_FloatPtrFloatPtr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const float*,const float*,int,ImPlotStairsFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const double* xs,const double* ys,int count,ImPlotStairsFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"xs\",\n          \"type\": \"const double*\"\n        },\n        {\n          \"name\": \"ys\",\n          \"type\": \"const double*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotStairsFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const double* xs,const double* ys,int count,ImPlotStairsFlags flags=0,int offset=0,int stride=sizeof(double))\",\n      \"call_args\": \"(label_id,xs,ys,count,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotStairs\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(double)\"\n      },\n      \"funcname\": \"PlotStairs\",\n      \"location\": \"implot:859\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotStairs_doublePtrdoublePtr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const double*,const double*,int,ImPlotStairsFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImS8* xs,const ImS8* ys,int count,ImPlotStairsFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"xs\",\n          \"type\": \"const ImS8*\"\n        },\n        {\n          \"name\": \"ys\",\n          \"type\": \"const ImS8*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotStairsFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImS8* xs,const ImS8* ys,int count,ImPlotStairsFlags flags=0,int offset=0,int stride=sizeof(ImS8))\",\n      \"call_args\": \"(label_id,xs,ys,count,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotStairs\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(ImS8)\"\n      },\n      \"funcname\": \"PlotStairs\",\n      \"location\": \"implot:859\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotStairs_S8PtrS8Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImS8*,const ImS8*,int,ImPlotStairsFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImU8* xs,const ImU8* ys,int count,ImPlotStairsFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"xs\",\n          \"type\": \"const ImU8*\"\n        },\n        {\n          \"name\": \"ys\",\n          \"type\": \"const ImU8*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotStairsFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImU8* xs,const ImU8* ys,int count,ImPlotStairsFlags flags=0,int offset=0,int stride=sizeof(ImU8))\",\n      \"call_args\": \"(label_id,xs,ys,count,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotStairs\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(ImU8)\"\n      },\n      \"funcname\": \"PlotStairs\",\n      \"location\": \"implot:859\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotStairs_U8PtrU8Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImU8*,const ImU8*,int,ImPlotStairsFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImS16* xs,const ImS16* ys,int count,ImPlotStairsFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"xs\",\n          \"type\": \"const ImS16*\"\n        },\n        {\n          \"name\": \"ys\",\n          \"type\": \"const ImS16*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotStairsFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImS16* xs,const ImS16* ys,int count,ImPlotStairsFlags flags=0,int offset=0,int stride=sizeof(ImS16))\",\n      \"call_args\": \"(label_id,xs,ys,count,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotStairs\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(ImS16)\"\n      },\n      \"funcname\": \"PlotStairs\",\n      \"location\": \"implot:859\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotStairs_S16PtrS16Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImS16*,const ImS16*,int,ImPlotStairsFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImU16* xs,const ImU16* ys,int count,ImPlotStairsFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"xs\",\n          \"type\": \"const ImU16*\"\n        },\n        {\n          \"name\": \"ys\",\n          \"type\": \"const ImU16*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotStairsFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImU16* xs,const ImU16* ys,int count,ImPlotStairsFlags flags=0,int offset=0,int stride=sizeof(ImU16))\",\n      \"call_args\": \"(label_id,xs,ys,count,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotStairs\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(ImU16)\"\n      },\n      \"funcname\": \"PlotStairs\",\n      \"location\": \"implot:859\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotStairs_U16PtrU16Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImU16*,const ImU16*,int,ImPlotStairsFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImS32* xs,const ImS32* ys,int count,ImPlotStairsFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"xs\",\n          \"type\": \"const ImS32*\"\n        },\n        {\n          \"name\": \"ys\",\n          \"type\": \"const ImS32*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotStairsFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImS32* xs,const ImS32* ys,int count,ImPlotStairsFlags flags=0,int offset=0,int stride=sizeof(ImS32))\",\n      \"call_args\": \"(label_id,xs,ys,count,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotStairs\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(ImS32)\"\n      },\n      \"funcname\": \"PlotStairs\",\n      \"location\": \"implot:859\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotStairs_S32PtrS32Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImS32*,const ImS32*,int,ImPlotStairsFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImU32* xs,const ImU32* ys,int count,ImPlotStairsFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"xs\",\n          \"type\": \"const ImU32*\"\n        },\n        {\n          \"name\": \"ys\",\n          \"type\": \"const ImU32*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotStairsFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImU32* xs,const ImU32* ys,int count,ImPlotStairsFlags flags=0,int offset=0,int stride=sizeof(ImU32))\",\n      \"call_args\": \"(label_id,xs,ys,count,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotStairs\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(ImU32)\"\n      },\n      \"funcname\": \"PlotStairs\",\n      \"location\": \"implot:859\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotStairs_U32PtrU32Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImU32*,const ImU32*,int,ImPlotStairsFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImS64* xs,const ImS64* ys,int count,ImPlotStairsFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"xs\",\n          \"type\": \"const ImS64*\"\n        },\n        {\n          \"name\": \"ys\",\n          \"type\": \"const ImS64*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotStairsFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImS64* xs,const ImS64* ys,int count,ImPlotStairsFlags flags=0,int offset=0,int stride=sizeof(ImS64))\",\n      \"call_args\": \"(label_id,xs,ys,count,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotStairs\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(ImS64)\"\n      },\n      \"funcname\": \"PlotStairs\",\n      \"location\": \"implot:859\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotStairs_S64PtrS64Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImS64*,const ImS64*,int,ImPlotStairsFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImU64* xs,const ImU64* ys,int count,ImPlotStairsFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"xs\",\n          \"type\": \"const ImU64*\"\n        },\n        {\n          \"name\": \"ys\",\n          \"type\": \"const ImU64*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotStairsFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImU64* xs,const ImU64* ys,int count,ImPlotStairsFlags flags=0,int offset=0,int stride=sizeof(ImU64))\",\n      \"call_args\": \"(label_id,xs,ys,count,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotStairs\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"stride\": \"sizeof(ImU64)\"\n      },\n      \"funcname\": \"PlotStairs\",\n      \"location\": \"implot:859\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotStairs_U64PtrU64Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImU64*,const ImU64*,int,ImPlotStairsFlags,int,int)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_PlotStairsG\": [\n    {\n      \"args\": \"(const char* label_id,ImPlotGetter getter,void* data,int count,ImPlotStairsFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"custom_type\": \"ImPlotPoint_getter\",\n          \"name\": \"getter\",\n          \"type\": \"ImPlotGetter\"\n        },\n        {\n          \"name\": \"data\",\n          \"type\": \"void*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotStairsFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,ImPlotGetter getter,void* data,int count,ImPlotStairsFlags flags=0)\",\n      \"call_args\": \"(label_id,getter,data,count,flags)\",\n      \"cimguiname\": \"ImPlot_PlotStairsG\",\n      \"defaults\": {\n        \"flags\": \"0\"\n      },\n      \"funcname\": \"PlotStairsG\",\n      \"location\": \"implot:860\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotStairsG\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,ImPlotGetter,void*,int,ImPlotStairsFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_PlotStems\": [\n    {\n      \"args\": \"(const char* label_id,const float* values,int count,double ref,double scale,double start,ImPlotStemsFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"values\",\n          \"type\": \"const float*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"ref\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"scale\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"start\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotStemsFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const float* values,int count,double ref=0,double scale=1,double start=0,ImPlotStemsFlags flags=0,int offset=0,int stride=sizeof(float))\",\n      \"call_args\": \"(label_id,values,count,ref,scale,start,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotStems\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"ref\": \"0\",\n        \"scale\": \"1\",\n        \"start\": \"0\",\n        \"stride\": \"sizeof(float)\"\n      },\n      \"funcname\": \"PlotStems\",\n      \"location\": \"implot:881\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotStems_FloatPtrInt\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const float*,int,double,double,double,ImPlotStemsFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const double* values,int count,double ref,double scale,double start,ImPlotStemsFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"values\",\n          \"type\": \"const double*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"ref\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"scale\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"start\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotStemsFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const double* values,int count,double ref=0,double scale=1,double start=0,ImPlotStemsFlags flags=0,int offset=0,int stride=sizeof(double))\",\n      \"call_args\": \"(label_id,values,count,ref,scale,start,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotStems\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"ref\": \"0\",\n        \"scale\": \"1\",\n        \"start\": \"0\",\n        \"stride\": \"sizeof(double)\"\n      },\n      \"funcname\": \"PlotStems\",\n      \"location\": \"implot:881\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotStems_doublePtrInt\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const double*,int,double,double,double,ImPlotStemsFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImS8* values,int count,double ref,double scale,double start,ImPlotStemsFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImS8*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"ref\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"scale\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"start\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotStemsFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImS8* values,int count,double ref=0,double scale=1,double start=0,ImPlotStemsFlags flags=0,int offset=0,int stride=sizeof(ImS8))\",\n      \"call_args\": \"(label_id,values,count,ref,scale,start,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotStems\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"ref\": \"0\",\n        \"scale\": \"1\",\n        \"start\": \"0\",\n        \"stride\": \"sizeof(ImS8)\"\n      },\n      \"funcname\": \"PlotStems\",\n      \"location\": \"implot:881\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotStems_S8PtrInt\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImS8*,int,double,double,double,ImPlotStemsFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImU8* values,int count,double ref,double scale,double start,ImPlotStemsFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImU8*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"ref\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"scale\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"start\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotStemsFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImU8* values,int count,double ref=0,double scale=1,double start=0,ImPlotStemsFlags flags=0,int offset=0,int stride=sizeof(ImU8))\",\n      \"call_args\": \"(label_id,values,count,ref,scale,start,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotStems\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"ref\": \"0\",\n        \"scale\": \"1\",\n        \"start\": \"0\",\n        \"stride\": \"sizeof(ImU8)\"\n      },\n      \"funcname\": \"PlotStems\",\n      \"location\": \"implot:881\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotStems_U8PtrInt\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImU8*,int,double,double,double,ImPlotStemsFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImS16* values,int count,double ref,double scale,double start,ImPlotStemsFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImS16*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"ref\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"scale\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"start\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotStemsFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImS16* values,int count,double ref=0,double scale=1,double start=0,ImPlotStemsFlags flags=0,int offset=0,int stride=sizeof(ImS16))\",\n      \"call_args\": \"(label_id,values,count,ref,scale,start,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotStems\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"ref\": \"0\",\n        \"scale\": \"1\",\n        \"start\": \"0\",\n        \"stride\": \"sizeof(ImS16)\"\n      },\n      \"funcname\": \"PlotStems\",\n      \"location\": \"implot:881\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotStems_S16PtrInt\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImS16*,int,double,double,double,ImPlotStemsFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImU16* values,int count,double ref,double scale,double start,ImPlotStemsFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImU16*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"ref\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"scale\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"start\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotStemsFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImU16* values,int count,double ref=0,double scale=1,double start=0,ImPlotStemsFlags flags=0,int offset=0,int stride=sizeof(ImU16))\",\n      \"call_args\": \"(label_id,values,count,ref,scale,start,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotStems\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"ref\": \"0\",\n        \"scale\": \"1\",\n        \"start\": \"0\",\n        \"stride\": \"sizeof(ImU16)\"\n      },\n      \"funcname\": \"PlotStems\",\n      \"location\": \"implot:881\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotStems_U16PtrInt\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImU16*,int,double,double,double,ImPlotStemsFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImS32* values,int count,double ref,double scale,double start,ImPlotStemsFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImS32*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"ref\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"scale\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"start\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotStemsFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImS32* values,int count,double ref=0,double scale=1,double start=0,ImPlotStemsFlags flags=0,int offset=0,int stride=sizeof(ImS32))\",\n      \"call_args\": \"(label_id,values,count,ref,scale,start,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotStems\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"ref\": \"0\",\n        \"scale\": \"1\",\n        \"start\": \"0\",\n        \"stride\": \"sizeof(ImS32)\"\n      },\n      \"funcname\": \"PlotStems\",\n      \"location\": \"implot:881\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotStems_S32PtrInt\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImS32*,int,double,double,double,ImPlotStemsFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImU32* values,int count,double ref,double scale,double start,ImPlotStemsFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImU32*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"ref\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"scale\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"start\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotStemsFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImU32* values,int count,double ref=0,double scale=1,double start=0,ImPlotStemsFlags flags=0,int offset=0,int stride=sizeof(ImU32))\",\n      \"call_args\": \"(label_id,values,count,ref,scale,start,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotStems\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"ref\": \"0\",\n        \"scale\": \"1\",\n        \"start\": \"0\",\n        \"stride\": \"sizeof(ImU32)\"\n      },\n      \"funcname\": \"PlotStems\",\n      \"location\": \"implot:881\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotStems_U32PtrInt\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImU32*,int,double,double,double,ImPlotStemsFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImS64* values,int count,double ref,double scale,double start,ImPlotStemsFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImS64*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"ref\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"scale\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"start\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotStemsFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImS64* values,int count,double ref=0,double scale=1,double start=0,ImPlotStemsFlags flags=0,int offset=0,int stride=sizeof(ImS64))\",\n      \"call_args\": \"(label_id,values,count,ref,scale,start,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotStems\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"ref\": \"0\",\n        \"scale\": \"1\",\n        \"start\": \"0\",\n        \"stride\": \"sizeof(ImS64)\"\n      },\n      \"funcname\": \"PlotStems\",\n      \"location\": \"implot:881\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotStems_S64PtrInt\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImS64*,int,double,double,double,ImPlotStemsFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImU64* values,int count,double ref,double scale,double start,ImPlotStemsFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"values\",\n          \"type\": \"const ImU64*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"ref\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"scale\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"start\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotStemsFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImU64* values,int count,double ref=0,double scale=1,double start=0,ImPlotStemsFlags flags=0,int offset=0,int stride=sizeof(ImU64))\",\n      \"call_args\": \"(label_id,values,count,ref,scale,start,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotStems\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"ref\": \"0\",\n        \"scale\": \"1\",\n        \"start\": \"0\",\n        \"stride\": \"sizeof(ImU64)\"\n      },\n      \"funcname\": \"PlotStems\",\n      \"location\": \"implot:881\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotStems_U64PtrInt\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImU64*,int,double,double,double,ImPlotStemsFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const float* xs,const float* ys,int count,double ref,ImPlotStemsFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"xs\",\n          \"type\": \"const float*\"\n        },\n        {\n          \"name\": \"ys\",\n          \"type\": \"const float*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"ref\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotStemsFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const float* xs,const float* ys,int count,double ref=0,ImPlotStemsFlags flags=0,int offset=0,int stride=sizeof(float))\",\n      \"call_args\": \"(label_id,xs,ys,count,ref,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotStems\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"ref\": \"0\",\n        \"stride\": \"sizeof(float)\"\n      },\n      \"funcname\": \"PlotStems\",\n      \"location\": \"implot:882\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotStems_FloatPtrFloatPtr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const float*,const float*,int,double,ImPlotStemsFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const double* xs,const double* ys,int count,double ref,ImPlotStemsFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"xs\",\n          \"type\": \"const double*\"\n        },\n        {\n          \"name\": \"ys\",\n          \"type\": \"const double*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"ref\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotStemsFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const double* xs,const double* ys,int count,double ref=0,ImPlotStemsFlags flags=0,int offset=0,int stride=sizeof(double))\",\n      \"call_args\": \"(label_id,xs,ys,count,ref,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotStems\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"ref\": \"0\",\n        \"stride\": \"sizeof(double)\"\n      },\n      \"funcname\": \"PlotStems\",\n      \"location\": \"implot:882\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotStems_doublePtrdoublePtr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const double*,const double*,int,double,ImPlotStemsFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImS8* xs,const ImS8* ys,int count,double ref,ImPlotStemsFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"xs\",\n          \"type\": \"const ImS8*\"\n        },\n        {\n          \"name\": \"ys\",\n          \"type\": \"const ImS8*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"ref\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotStemsFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImS8* xs,const ImS8* ys,int count,double ref=0,ImPlotStemsFlags flags=0,int offset=0,int stride=sizeof(ImS8))\",\n      \"call_args\": \"(label_id,xs,ys,count,ref,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotStems\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"ref\": \"0\",\n        \"stride\": \"sizeof(ImS8)\"\n      },\n      \"funcname\": \"PlotStems\",\n      \"location\": \"implot:882\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotStems_S8PtrS8Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImS8*,const ImS8*,int,double,ImPlotStemsFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImU8* xs,const ImU8* ys,int count,double ref,ImPlotStemsFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"xs\",\n          \"type\": \"const ImU8*\"\n        },\n        {\n          \"name\": \"ys\",\n          \"type\": \"const ImU8*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"ref\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotStemsFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImU8* xs,const ImU8* ys,int count,double ref=0,ImPlotStemsFlags flags=0,int offset=0,int stride=sizeof(ImU8))\",\n      \"call_args\": \"(label_id,xs,ys,count,ref,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotStems\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"ref\": \"0\",\n        \"stride\": \"sizeof(ImU8)\"\n      },\n      \"funcname\": \"PlotStems\",\n      \"location\": \"implot:882\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotStems_U8PtrU8Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImU8*,const ImU8*,int,double,ImPlotStemsFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImS16* xs,const ImS16* ys,int count,double ref,ImPlotStemsFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"xs\",\n          \"type\": \"const ImS16*\"\n        },\n        {\n          \"name\": \"ys\",\n          \"type\": \"const ImS16*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"ref\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotStemsFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImS16* xs,const ImS16* ys,int count,double ref=0,ImPlotStemsFlags flags=0,int offset=0,int stride=sizeof(ImS16))\",\n      \"call_args\": \"(label_id,xs,ys,count,ref,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotStems\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"ref\": \"0\",\n        \"stride\": \"sizeof(ImS16)\"\n      },\n      \"funcname\": \"PlotStems\",\n      \"location\": \"implot:882\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotStems_S16PtrS16Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImS16*,const ImS16*,int,double,ImPlotStemsFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImU16* xs,const ImU16* ys,int count,double ref,ImPlotStemsFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"xs\",\n          \"type\": \"const ImU16*\"\n        },\n        {\n          \"name\": \"ys\",\n          \"type\": \"const ImU16*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"ref\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotStemsFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImU16* xs,const ImU16* ys,int count,double ref=0,ImPlotStemsFlags flags=0,int offset=0,int stride=sizeof(ImU16))\",\n      \"call_args\": \"(label_id,xs,ys,count,ref,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotStems\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"ref\": \"0\",\n        \"stride\": \"sizeof(ImU16)\"\n      },\n      \"funcname\": \"PlotStems\",\n      \"location\": \"implot:882\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotStems_U16PtrU16Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImU16*,const ImU16*,int,double,ImPlotStemsFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImS32* xs,const ImS32* ys,int count,double ref,ImPlotStemsFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"xs\",\n          \"type\": \"const ImS32*\"\n        },\n        {\n          \"name\": \"ys\",\n          \"type\": \"const ImS32*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"ref\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotStemsFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImS32* xs,const ImS32* ys,int count,double ref=0,ImPlotStemsFlags flags=0,int offset=0,int stride=sizeof(ImS32))\",\n      \"call_args\": \"(label_id,xs,ys,count,ref,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotStems\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"ref\": \"0\",\n        \"stride\": \"sizeof(ImS32)\"\n      },\n      \"funcname\": \"PlotStems\",\n      \"location\": \"implot:882\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotStems_S32PtrS32Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImS32*,const ImS32*,int,double,ImPlotStemsFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImU32* xs,const ImU32* ys,int count,double ref,ImPlotStemsFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"xs\",\n          \"type\": \"const ImU32*\"\n        },\n        {\n          \"name\": \"ys\",\n          \"type\": \"const ImU32*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"ref\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotStemsFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImU32* xs,const ImU32* ys,int count,double ref=0,ImPlotStemsFlags flags=0,int offset=0,int stride=sizeof(ImU32))\",\n      \"call_args\": \"(label_id,xs,ys,count,ref,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotStems\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"ref\": \"0\",\n        \"stride\": \"sizeof(ImU32)\"\n      },\n      \"funcname\": \"PlotStems\",\n      \"location\": \"implot:882\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotStems_U32PtrU32Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImU32*,const ImU32*,int,double,ImPlotStemsFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImS64* xs,const ImS64* ys,int count,double ref,ImPlotStemsFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"xs\",\n          \"type\": \"const ImS64*\"\n        },\n        {\n          \"name\": \"ys\",\n          \"type\": \"const ImS64*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"ref\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotStemsFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImS64* xs,const ImS64* ys,int count,double ref=0,ImPlotStemsFlags flags=0,int offset=0,int stride=sizeof(ImS64))\",\n      \"call_args\": \"(label_id,xs,ys,count,ref,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotStems\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"ref\": \"0\",\n        \"stride\": \"sizeof(ImS64)\"\n      },\n      \"funcname\": \"PlotStems\",\n      \"location\": \"implot:882\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotStems_S64PtrS64Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImS64*,const ImS64*,int,double,ImPlotStemsFlags,int,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* label_id,const ImU64* xs,const ImU64* ys,int count,double ref,ImPlotStemsFlags flags,int offset,int stride)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"xs\",\n          \"type\": \"const ImU64*\"\n        },\n        {\n          \"name\": \"ys\",\n          \"type\": \"const ImU64*\"\n        },\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"ref\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotStemsFlags\"\n        },\n        {\n          \"name\": \"offset\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"stride\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,const ImU64* xs,const ImU64* ys,int count,double ref=0,ImPlotStemsFlags flags=0,int offset=0,int stride=sizeof(ImU64))\",\n      \"call_args\": \"(label_id,xs,ys,count,ref,flags,offset,stride)\",\n      \"cimguiname\": \"ImPlot_PlotStems\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"offset\": \"0\",\n        \"ref\": \"0\",\n        \"stride\": \"sizeof(ImU64)\"\n      },\n      \"funcname\": \"PlotStems\",\n      \"location\": \"implot:882\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotStems_U64PtrU64Ptr\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const ImU64*,const ImU64*,int,double,ImPlotStemsFlags,int,int)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_PlotText\": [\n    {\n      \"args\": \"(const char* text,double x,double y,const ImVec2 pix_offset,ImPlotTextFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"text\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"x\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"y\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"pix_offset\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotTextFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* text,double x,double y,const ImVec2& pix_offset=ImVec2(0,0),ImPlotTextFlags flags=0)\",\n      \"call_args\": \"(text,x,y,pix_offset,flags)\",\n      \"cimguiname\": \"ImPlot_PlotText\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"pix_offset\": \"ImVec2(0,0)\"\n      },\n      \"funcname\": \"PlotText\",\n      \"location\": \"implot:909\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PlotText\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,double,double,const ImVec2,ImPlotTextFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_PlotToPixels\": [\n    {\n      \"args\": \"(ImVec2 *pOut,const ImPlotPoint plt,ImAxis x_axis,ImAxis y_axis)\",\n      \"argsT\": [\n        {\n          \"name\": \"pOut\",\n          \"type\": \"ImVec2*\"\n        },\n        {\n          \"name\": \"plt\",\n          \"type\": \"const ImPlotPoint\"\n        },\n        {\n          \"name\": \"x_axis\",\n          \"type\": \"ImAxis\"\n        },\n        {\n          \"name\": \"y_axis\",\n          \"type\": \"ImAxis\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImPlotPoint& plt,ImAxis x_axis=-1,ImAxis y_axis=-1)\",\n      \"call_args\": \"(plt,x_axis,y_axis)\",\n      \"cimguiname\": \"ImPlot_PlotToPixels\",\n      \"defaults\": {\n        \"x_axis\": \"-1\",\n        \"y_axis\": \"-1\"\n      },\n      \"funcname\": \"PlotToPixels\",\n      \"location\": \"implot:959\",\n      \"namespace\": \"ImPlot\",\n      \"nonUDT\": 1,\n      \"ov_cimguiname\": \"ImPlot_PlotToPixels_PlotPoInt\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImPlotPoint,ImAxis,ImAxis)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(ImVec2 *pOut,double x,double y,ImAxis x_axis,ImAxis y_axis)\",\n      \"argsT\": [\n        {\n          \"name\": \"pOut\",\n          \"type\": \"ImVec2*\"\n        },\n        {\n          \"name\": \"x\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"y\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"x_axis\",\n          \"type\": \"ImAxis\"\n        },\n        {\n          \"name\": \"y_axis\",\n          \"type\": \"ImAxis\"\n        }\n      ],\n      \"argsoriginal\": \"(double x,double y,ImAxis x_axis=-1,ImAxis y_axis=-1)\",\n      \"call_args\": \"(x,y,x_axis,y_axis)\",\n      \"cimguiname\": \"ImPlot_PlotToPixels\",\n      \"defaults\": {\n        \"x_axis\": \"-1\",\n        \"y_axis\": \"-1\"\n      },\n      \"funcname\": \"PlotToPixels\",\n      \"location\": \"implot:960\",\n      \"namespace\": \"ImPlot\",\n      \"nonUDT\": 1,\n      \"ov_cimguiname\": \"ImPlot_PlotToPixels_double\",\n      \"ret\": \"void\",\n      \"signature\": \"(double,double,ImAxis,ImAxis)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_PopColormap\": [\n    {\n      \"args\": \"(int count)\",\n      \"argsT\": [\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(int count=1)\",\n      \"call_args\": \"(count)\",\n      \"cimguiname\": \"ImPlot_PopColormap\",\n      \"defaults\": {\n        \"count\": \"1\"\n      },\n      \"funcname\": \"PopColormap\",\n      \"location\": \"implot:1157\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PopColormap\",\n      \"ret\": \"void\",\n      \"signature\": \"(int)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_PopPlotClipRect\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImPlot_PopPlotClipRect\",\n      \"defaults\": {},\n      \"funcname\": \"PopPlotClipRect\",\n      \"location\": \"implot:1215\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PopPlotClipRect\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_PopStyleColor\": [\n    {\n      \"args\": \"(int count)\",\n      \"argsT\": [\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(int count=1)\",\n      \"call_args\": \"(count)\",\n      \"cimguiname\": \"ImPlot_PopStyleColor\",\n      \"defaults\": {\n        \"count\": \"1\"\n      },\n      \"funcname\": \"PopStyleColor\",\n      \"location\": \"implot:1090\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PopStyleColor\",\n      \"ret\": \"void\",\n      \"signature\": \"(int)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_PopStyleVar\": [\n    {\n      \"args\": \"(int count)\",\n      \"argsT\": [\n        {\n          \"name\": \"count\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(int count=1)\",\n      \"call_args\": \"(count)\",\n      \"cimguiname\": \"ImPlot_PopStyleVar\",\n      \"defaults\": {\n        \"count\": \"1\"\n      },\n      \"funcname\": \"PopStyleVar\",\n      \"location\": \"implot:1099\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PopStyleVar\",\n      \"ret\": \"void\",\n      \"signature\": \"(int)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_Precision\": [\n    {\n      \"args\": \"(double val)\",\n      \"argsT\": [\n        {\n          \"name\": \"val\",\n          \"type\": \"double\"\n        }\n      ],\n      \"argsoriginal\": \"(double val)\",\n      \"call_args\": \"(val)\",\n      \"cimguiname\": \"ImPlot_Precision\",\n      \"defaults\": {},\n      \"funcname\": \"Precision\",\n      \"location\": \"implot_internal:1499\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_Precision\",\n      \"ret\": \"int\",\n      \"signature\": \"(double)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_PushColormap\": [\n    {\n      \"args\": \"(ImPlotColormap cmap)\",\n      \"argsT\": [\n        {\n          \"name\": \"cmap\",\n          \"type\": \"ImPlotColormap\"\n        }\n      ],\n      \"argsoriginal\": \"(ImPlotColormap cmap)\",\n      \"call_args\": \"(cmap)\",\n      \"cimguiname\": \"ImPlot_PushColormap\",\n      \"defaults\": {},\n      \"funcname\": \"PushColormap\",\n      \"location\": \"implot:1153\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PushColormap_PlotColormap\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImPlotColormap)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(const char* name)\",\n      \"argsT\": [\n        {\n          \"name\": \"name\",\n          \"type\": \"const char*\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* name)\",\n      \"call_args\": \"(name)\",\n      \"cimguiname\": \"ImPlot_PushColormap\",\n      \"defaults\": {},\n      \"funcname\": \"PushColormap\",\n      \"location\": \"implot:1155\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PushColormap_Str\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_PushPlotClipRect\": [\n    {\n      \"args\": \"(float expand)\",\n      \"argsT\": [\n        {\n          \"name\": \"expand\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(float expand=0)\",\n      \"call_args\": \"(expand)\",\n      \"cimguiname\": \"ImPlot_PushPlotClipRect\",\n      \"defaults\": {\n        \"expand\": \"0\"\n      },\n      \"funcname\": \"PushPlotClipRect\",\n      \"location\": \"implot:1213\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PushPlotClipRect\",\n      \"ret\": \"void\",\n      \"signature\": \"(float)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_PushStyleColor\": [\n    {\n      \"args\": \"(ImPlotCol idx,ImU32 col)\",\n      \"argsT\": [\n        {\n          \"name\": \"idx\",\n          \"type\": \"ImPlotCol\"\n        },\n        {\n          \"name\": \"col\",\n          \"type\": \"ImU32\"\n        }\n      ],\n      \"argsoriginal\": \"(ImPlotCol idx,ImU32 col)\",\n      \"call_args\": \"(idx,col)\",\n      \"cimguiname\": \"ImPlot_PushStyleColor\",\n      \"defaults\": {},\n      \"funcname\": \"PushStyleColor\",\n      \"location\": \"implot:1087\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PushStyleColor_U32\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImPlotCol,ImU32)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(ImPlotCol idx,const ImVec4 col)\",\n      \"argsT\": [\n        {\n          \"name\": \"idx\",\n          \"type\": \"ImPlotCol\"\n        },\n        {\n          \"name\": \"col\",\n          \"type\": \"const ImVec4\"\n        }\n      ],\n      \"argsoriginal\": \"(ImPlotCol idx,const ImVec4& col)\",\n      \"call_args\": \"(idx,col)\",\n      \"cimguiname\": \"ImPlot_PushStyleColor\",\n      \"defaults\": {},\n      \"funcname\": \"PushStyleColor\",\n      \"location\": \"implot:1088\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PushStyleColor_Vec4\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImPlotCol,const ImVec4)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_PushStyleVar\": [\n    {\n      \"args\": \"(ImPlotStyleVar idx,float val)\",\n      \"argsT\": [\n        {\n          \"name\": \"idx\",\n          \"type\": \"ImPlotStyleVar\"\n        },\n        {\n          \"name\": \"val\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(ImPlotStyleVar idx,float val)\",\n      \"call_args\": \"(idx,val)\",\n      \"cimguiname\": \"ImPlot_PushStyleVar\",\n      \"defaults\": {},\n      \"funcname\": \"PushStyleVar\",\n      \"location\": \"implot:1093\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PushStyleVar_Float\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImPlotStyleVar,float)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(ImPlotStyleVar idx,int val)\",\n      \"argsT\": [\n        {\n          \"name\": \"idx\",\n          \"type\": \"ImPlotStyleVar\"\n        },\n        {\n          \"name\": \"val\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(ImPlotStyleVar idx,int val)\",\n      \"call_args\": \"(idx,val)\",\n      \"cimguiname\": \"ImPlot_PushStyleVar\",\n      \"defaults\": {},\n      \"funcname\": \"PushStyleVar\",\n      \"location\": \"implot:1095\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PushStyleVar_Int\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImPlotStyleVar,int)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(ImPlotStyleVar idx,const ImVec2 val)\",\n      \"argsT\": [\n        {\n          \"name\": \"idx\",\n          \"type\": \"ImPlotStyleVar\"\n        },\n        {\n          \"name\": \"val\",\n          \"type\": \"const ImVec2\"\n        }\n      ],\n      \"argsoriginal\": \"(ImPlotStyleVar idx,const ImVec2& val)\",\n      \"call_args\": \"(idx,val)\",\n      \"cimguiname\": \"ImPlot_PushStyleVar\",\n      \"defaults\": {},\n      \"funcname\": \"PushStyleVar\",\n      \"location\": \"implot:1097\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_PushStyleVar_Vec2\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImPlotStyleVar,const ImVec2)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_RangesOverlap\": [\n    {\n      \"args\": \"(const ImPlotRange r1,const ImPlotRange r2)\",\n      \"argsT\": [\n        {\n          \"name\": \"r1\",\n          \"type\": \"const ImPlotRange\"\n        },\n        {\n          \"name\": \"r2\",\n          \"type\": \"const ImPlotRange\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImPlotRange& r1,const ImPlotRange& r2)\",\n      \"call_args\": \"(r1,r2)\",\n      \"cimguiname\": \"ImPlot_RangesOverlap\",\n      \"defaults\": {},\n      \"funcname\": \"RangesOverlap\",\n      \"location\": \"implot_internal:1408\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_RangesOverlap\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const ImPlotRange,const ImPlotRange)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_RegisterOrGetItem\": [\n    {\n      \"args\": \"(const char* label_id,ImPlotItemFlags flags,bool* just_created)\",\n      \"argsT\": [\n        {\n          \"name\": \"label_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotItemFlags\"\n        },\n        {\n          \"name\": \"just_created\",\n          \"type\": \"bool*\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label_id,ImPlotItemFlags flags,bool* just_created=((void*)0))\",\n      \"call_args\": \"(label_id,flags,just_created)\",\n      \"cimguiname\": \"ImPlot_RegisterOrGetItem\",\n      \"defaults\": {\n        \"just_created\": \"NULL\"\n      },\n      \"funcname\": \"RegisterOrGetItem\",\n      \"location\": \"implot_internal:1333\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_RegisterOrGetItem\",\n      \"ret\": \"ImPlotItem*\",\n      \"signature\": \"(const char*,ImPlotItemFlags,bool*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_RenderColorBar\": [\n    {\n      \"args\": \"(const ImU32* colors,int size,ImDrawList* DrawList,const ImRect bounds,bool vert,bool reversed,bool continuous)\",\n      \"argsT\": [\n        {\n          \"name\": \"colors\",\n          \"type\": \"const ImU32*\"\n        },\n        {\n          \"name\": \"size\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"DrawList\",\n          \"reftoptr\": true,\n          \"type\": \"ImDrawList*\"\n        },\n        {\n          \"name\": \"bounds\",\n          \"type\": \"const ImRect\"\n        },\n        {\n          \"name\": \"vert\",\n          \"type\": \"bool\"\n        },\n        {\n          \"name\": \"reversed\",\n          \"type\": \"bool\"\n        },\n        {\n          \"name\": \"continuous\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImU32* colors,int size,ImDrawList& DrawList,const ImRect& bounds,bool vert,bool reversed,bool continuous)\",\n      \"call_args\": \"(colors,size,*DrawList,bounds,vert,reversed,continuous)\",\n      \"cimguiname\": \"ImPlot_RenderColorBar\",\n      \"defaults\": {},\n      \"funcname\": \"RenderColorBar\",\n      \"location\": \"implot_internal:1486\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_RenderColorBar\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImU32*,int,ImDrawList*,const ImRect,bool,bool,bool)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_ResetCtxForNextAlignedPlots\": [\n    {\n      \"args\": \"(ImPlotContext* ctx)\",\n      \"argsT\": [\n        {\n          \"name\": \"ctx\",\n          \"type\": \"ImPlotContext*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImPlotContext* ctx)\",\n      \"call_args\": \"(ctx)\",\n      \"cimguiname\": \"ImPlot_ResetCtxForNextAlignedPlots\",\n      \"defaults\": {},\n      \"funcname\": \"ResetCtxForNextAlignedPlots\",\n      \"location\": \"implot_internal:1271\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_ResetCtxForNextAlignedPlots\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImPlotContext*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_ResetCtxForNextPlot\": [\n    {\n      \"args\": \"(ImPlotContext* ctx)\",\n      \"argsT\": [\n        {\n          \"name\": \"ctx\",\n          \"type\": \"ImPlotContext*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImPlotContext* ctx)\",\n      \"call_args\": \"(ctx)\",\n      \"cimguiname\": \"ImPlot_ResetCtxForNextPlot\",\n      \"defaults\": {},\n      \"funcname\": \"ResetCtxForNextPlot\",\n      \"location\": \"implot_internal:1269\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_ResetCtxForNextPlot\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImPlotContext*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_ResetCtxForNextSubplot\": [\n    {\n      \"args\": \"(ImPlotContext* ctx)\",\n      \"argsT\": [\n        {\n          \"name\": \"ctx\",\n          \"type\": \"ImPlotContext*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImPlotContext* ctx)\",\n      \"call_args\": \"(ctx)\",\n      \"cimguiname\": \"ImPlot_ResetCtxForNextSubplot\",\n      \"defaults\": {},\n      \"funcname\": \"ResetCtxForNextSubplot\",\n      \"location\": \"implot_internal:1273\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_ResetCtxForNextSubplot\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImPlotContext*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_RoundTime\": [\n    {\n      \"args\": \"(ImPlotTime *pOut,const ImPlotTime t,ImPlotTimeUnit unit)\",\n      \"argsT\": [\n        {\n          \"name\": \"pOut\",\n          \"type\": \"ImPlotTime*\"\n        },\n        {\n          \"name\": \"t\",\n          \"type\": \"const ImPlotTime\"\n        },\n        {\n          \"name\": \"unit\",\n          \"type\": \"ImPlotTimeUnit\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImPlotTime& t,ImPlotTimeUnit unit)\",\n      \"call_args\": \"(t,unit)\",\n      \"cimguiname\": \"ImPlot_RoundTime\",\n      \"defaults\": {},\n      \"funcname\": \"RoundTime\",\n      \"location\": \"implot_internal:1581\",\n      \"namespace\": \"ImPlot\",\n      \"nonUDT\": 1,\n      \"ov_cimguiname\": \"ImPlot_RoundTime\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImPlotTime,ImPlotTimeUnit)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_RoundTo\": [\n    {\n      \"args\": \"(double val,int prec)\",\n      \"argsT\": [\n        {\n          \"name\": \"val\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"prec\",\n          \"type\": \"int\"\n        }\n      ],\n      \"argsoriginal\": \"(double val,int prec)\",\n      \"call_args\": \"(val,prec)\",\n      \"cimguiname\": \"ImPlot_RoundTo\",\n      \"defaults\": {},\n      \"funcname\": \"RoundTo\",\n      \"location\": \"implot_internal:1501\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_RoundTo\",\n      \"ret\": \"double\",\n      \"signature\": \"(double,int)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_SampleColormap\": [\n    {\n      \"args\": \"(ImVec4 *pOut,float t,ImPlotColormap cmap)\",\n      \"argsT\": [\n        {\n          \"name\": \"pOut\",\n          \"type\": \"ImVec4*\"\n        },\n        {\n          \"name\": \"t\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"cmap\",\n          \"type\": \"ImPlotColormap\"\n        }\n      ],\n      \"argsoriginal\": \"(float t,ImPlotColormap cmap=-1)\",\n      \"call_args\": \"(t,cmap)\",\n      \"cimguiname\": \"ImPlot_SampleColormap\",\n      \"defaults\": {\n        \"cmap\": \"-1\"\n      },\n      \"funcname\": \"SampleColormap\",\n      \"location\": \"implot:1171\",\n      \"namespace\": \"ImPlot\",\n      \"nonUDT\": 1,\n      \"ov_cimguiname\": \"ImPlot_SampleColormap\",\n      \"ret\": \"void\",\n      \"signature\": \"(float,ImPlotColormap)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_SampleColormapU32\": [\n    {\n      \"args\": \"(float t,ImPlotColormap cmap)\",\n      \"argsT\": [\n        {\n          \"name\": \"t\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"cmap\",\n          \"type\": \"ImPlotColormap\"\n        }\n      ],\n      \"argsoriginal\": \"(float t,ImPlotColormap cmap)\",\n      \"call_args\": \"(t,cmap)\",\n      \"cimguiname\": \"ImPlot_SampleColormapU32\",\n      \"defaults\": {},\n      \"funcname\": \"SampleColormapU32\",\n      \"location\": \"implot_internal:1483\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_SampleColormapU32\",\n      \"ret\": \"ImU32\",\n      \"signature\": \"(float,ImPlotColormap)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_SetAxes\": [\n    {\n      \"args\": \"(ImAxis x_axis,ImAxis y_axis)\",\n      \"argsT\": [\n        {\n          \"name\": \"x_axis\",\n          \"type\": \"ImAxis\"\n        },\n        {\n          \"name\": \"y_axis\",\n          \"type\": \"ImAxis\"\n        }\n      ],\n      \"argsoriginal\": \"(ImAxis x_axis,ImAxis y_axis)\",\n      \"call_args\": \"(x_axis,y_axis)\",\n      \"cimguiname\": \"ImPlot_SetAxes\",\n      \"defaults\": {},\n      \"funcname\": \"SetAxes\",\n      \"location\": \"implot:952\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_SetAxes\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImAxis,ImAxis)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_SetAxis\": [\n    {\n      \"args\": \"(ImAxis axis)\",\n      \"argsT\": [\n        {\n          \"name\": \"axis\",\n          \"type\": \"ImAxis\"\n        }\n      ],\n      \"argsoriginal\": \"(ImAxis axis)\",\n      \"call_args\": \"(axis)\",\n      \"cimguiname\": \"ImPlot_SetAxis\",\n      \"defaults\": {},\n      \"funcname\": \"SetAxis\",\n      \"location\": \"implot:951\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_SetAxis\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImAxis)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_SetCurrentContext\": [\n    {\n      \"args\": \"(ImPlotContext* ctx)\",\n      \"argsT\": [\n        {\n          \"name\": \"ctx\",\n          \"type\": \"ImPlotContext*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImPlotContext* ctx)\",\n      \"call_args\": \"(ctx)\",\n      \"cimguiname\": \"ImPlot_SetCurrentContext\",\n      \"defaults\": {},\n      \"funcname\": \"SetCurrentContext\",\n      \"location\": \"implot:598\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_SetCurrentContext\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImPlotContext*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_SetImGuiContext\": [\n    {\n      \"args\": \"(ImGuiContext* ctx)\",\n      \"argsT\": [\n        {\n          \"name\": \"ctx\",\n          \"type\": \"ImGuiContext*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImGuiContext* ctx)\",\n      \"call_args\": \"(ctx)\",\n      \"cimguiname\": \"ImPlot_SetImGuiContext\",\n      \"defaults\": {},\n      \"funcname\": \"SetImGuiContext\",\n      \"location\": \"implot:604\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_SetImGuiContext\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImGuiContext*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_SetNextAxesLimits\": [\n    {\n      \"args\": \"(double x_min,double x_max,double y_min,double y_max,ImPlotCond cond)\",\n      \"argsT\": [\n        {\n          \"name\": \"x_min\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"x_max\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"y_min\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"y_max\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"cond\",\n          \"type\": \"ImPlotCond\"\n        }\n      ],\n      \"argsoriginal\": \"(double x_min,double x_max,double y_min,double y_max,ImPlotCond cond=ImPlotCond_Once)\",\n      \"call_args\": \"(x_min,x_max,y_min,y_max,cond)\",\n      \"cimguiname\": \"ImPlot_SetNextAxesLimits\",\n      \"defaults\": {\n        \"cond\": \"ImPlotCond_Once\"\n      },\n      \"funcname\": \"SetNextAxesLimits\",\n      \"location\": \"implot:791\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_SetNextAxesLimits\",\n      \"ret\": \"void\",\n      \"signature\": \"(double,double,double,double,ImPlotCond)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_SetNextAxesToFit\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImPlot_SetNextAxesToFit\",\n      \"defaults\": {},\n      \"funcname\": \"SetNextAxesToFit\",\n      \"location\": \"implot:793\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_SetNextAxesToFit\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_SetNextAxisLimits\": [\n    {\n      \"args\": \"(ImAxis axis,double v_min,double v_max,ImPlotCond cond)\",\n      \"argsT\": [\n        {\n          \"name\": \"axis\",\n          \"type\": \"ImAxis\"\n        },\n        {\n          \"name\": \"v_min\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"v_max\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"cond\",\n          \"type\": \"ImPlotCond\"\n        }\n      ],\n      \"argsoriginal\": \"(ImAxis axis,double v_min,double v_max,ImPlotCond cond=ImPlotCond_Once)\",\n      \"call_args\": \"(axis,v_min,v_max,cond)\",\n      \"cimguiname\": \"ImPlot_SetNextAxisLimits\",\n      \"defaults\": {\n        \"cond\": \"ImPlotCond_Once\"\n      },\n      \"funcname\": \"SetNextAxisLimits\",\n      \"location\": \"implot:784\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_SetNextAxisLimits\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImAxis,double,double,ImPlotCond)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_SetNextAxisLinks\": [\n    {\n      \"args\": \"(ImAxis axis,double* link_min,double* link_max)\",\n      \"argsT\": [\n        {\n          \"name\": \"axis\",\n          \"type\": \"ImAxis\"\n        },\n        {\n          \"name\": \"link_min\",\n          \"type\": \"double*\"\n        },\n        {\n          \"name\": \"link_max\",\n          \"type\": \"double*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImAxis axis,double* link_min,double* link_max)\",\n      \"call_args\": \"(axis,link_min,link_max)\",\n      \"cimguiname\": \"ImPlot_SetNextAxisLinks\",\n      \"defaults\": {},\n      \"funcname\": \"SetNextAxisLinks\",\n      \"location\": \"implot:786\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_SetNextAxisLinks\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImAxis,double*,double*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_SetNextAxisToFit\": [\n    {\n      \"args\": \"(ImAxis axis)\",\n      \"argsT\": [\n        {\n          \"name\": \"axis\",\n          \"type\": \"ImAxis\"\n        }\n      ],\n      \"argsoriginal\": \"(ImAxis axis)\",\n      \"call_args\": \"(axis)\",\n      \"cimguiname\": \"ImPlot_SetNextAxisToFit\",\n      \"defaults\": {},\n      \"funcname\": \"SetNextAxisToFit\",\n      \"location\": \"implot:788\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_SetNextAxisToFit\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImAxis)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_SetNextErrorBarStyle\": [\n    {\n      \"args\": \"(const ImVec4 col,float size,float weight)\",\n      \"argsT\": [\n        {\n          \"name\": \"col\",\n          \"type\": \"const ImVec4\"\n        },\n        {\n          \"name\": \"size\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"weight\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImVec4& col=ImVec4(0,0,0,-1),float size=-1,float weight=-1)\",\n      \"call_args\": \"(col,size,weight)\",\n      \"cimguiname\": \"ImPlot_SetNextErrorBarStyle\",\n      \"defaults\": {\n        \"col\": \"ImVec4(0,0,0,-1)\",\n        \"size\": \"-1\",\n        \"weight\": \"-1\"\n      },\n      \"funcname\": \"SetNextErrorBarStyle\",\n      \"location\": \"implot:1113\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_SetNextErrorBarStyle\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImVec4,float,float)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_SetNextFillStyle\": [\n    {\n      \"args\": \"(const ImVec4 col,float alpha_mod)\",\n      \"argsT\": [\n        {\n          \"name\": \"col\",\n          \"type\": \"const ImVec4\"\n        },\n        {\n          \"name\": \"alpha_mod\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImVec4& col=ImVec4(0,0,0,-1),float alpha_mod=-1)\",\n      \"call_args\": \"(col,alpha_mod)\",\n      \"cimguiname\": \"ImPlot_SetNextFillStyle\",\n      \"defaults\": {\n        \"alpha_mod\": \"-1\",\n        \"col\": \"ImVec4(0,0,0,-1)\"\n      },\n      \"funcname\": \"SetNextFillStyle\",\n      \"location\": \"implot:1109\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_SetNextFillStyle\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImVec4,float)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_SetNextLineStyle\": [\n    {\n      \"args\": \"(const ImVec4 col,float weight)\",\n      \"argsT\": [\n        {\n          \"name\": \"col\",\n          \"type\": \"const ImVec4\"\n        },\n        {\n          \"name\": \"weight\",\n          \"type\": \"float\"\n        }\n      ],\n      \"argsoriginal\": \"(const ImVec4& col=ImVec4(0,0,0,-1),float weight=-1)\",\n      \"call_args\": \"(col,weight)\",\n      \"cimguiname\": \"ImPlot_SetNextLineStyle\",\n      \"defaults\": {\n        \"col\": \"ImVec4(0,0,0,-1)\",\n        \"weight\": \"-1\"\n      },\n      \"funcname\": \"SetNextLineStyle\",\n      \"location\": \"implot:1107\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_SetNextLineStyle\",\n      \"ret\": \"void\",\n      \"signature\": \"(const ImVec4,float)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_SetNextMarkerStyle\": [\n    {\n      \"args\": \"(ImPlotMarker marker,float size,const ImVec4 fill,float weight,const ImVec4 outline)\",\n      \"argsT\": [\n        {\n          \"name\": \"marker\",\n          \"type\": \"ImPlotMarker\"\n        },\n        {\n          \"name\": \"size\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"fill\",\n          \"type\": \"const ImVec4\"\n        },\n        {\n          \"name\": \"weight\",\n          \"type\": \"float\"\n        },\n        {\n          \"name\": \"outline\",\n          \"type\": \"const ImVec4\"\n        }\n      ],\n      \"argsoriginal\": \"(ImPlotMarker marker=-1,float size=-1,const ImVec4& fill=ImVec4(0,0,0,-1),float weight=-1,const ImVec4& outline=ImVec4(0,0,0,-1))\",\n      \"call_args\": \"(marker,size,fill,weight,outline)\",\n      \"cimguiname\": \"ImPlot_SetNextMarkerStyle\",\n      \"defaults\": {\n        \"fill\": \"ImVec4(0,0,0,-1)\",\n        \"marker\": \"-1\",\n        \"outline\": \"ImVec4(0,0,0,-1)\",\n        \"size\": \"-1\",\n        \"weight\": \"-1\"\n      },\n      \"funcname\": \"SetNextMarkerStyle\",\n      \"location\": \"implot:1111\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_SetNextMarkerStyle\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImPlotMarker,float,const ImVec4,float,const ImVec4)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_SetupAxes\": [\n    {\n      \"args\": \"(const char* x_label,const char* y_label,ImPlotAxisFlags x_flags,ImPlotAxisFlags y_flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"x_label\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"y_label\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"x_flags\",\n          \"type\": \"ImPlotAxisFlags\"\n        },\n        {\n          \"name\": \"y_flags\",\n          \"type\": \"ImPlotAxisFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* x_label,const char* y_label,ImPlotAxisFlags x_flags=0,ImPlotAxisFlags y_flags=0)\",\n      \"call_args\": \"(x_label,y_label,x_flags,y_flags)\",\n      \"cimguiname\": \"ImPlot_SetupAxes\",\n      \"defaults\": {\n        \"x_flags\": \"0\",\n        \"y_flags\": \"0\"\n      },\n      \"funcname\": \"SetupAxes\",\n      \"location\": \"implot:747\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_SetupAxes\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,const char*,ImPlotAxisFlags,ImPlotAxisFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_SetupAxesLimits\": [\n    {\n      \"args\": \"(double x_min,double x_max,double y_min,double y_max,ImPlotCond cond)\",\n      \"argsT\": [\n        {\n          \"name\": \"x_min\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"x_max\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"y_min\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"y_max\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"cond\",\n          \"type\": \"ImPlotCond\"\n        }\n      ],\n      \"argsoriginal\": \"(double x_min,double x_max,double y_min,double y_max,ImPlotCond cond=ImPlotCond_Once)\",\n      \"call_args\": \"(x_min,x_max,y_min,y_max,cond)\",\n      \"cimguiname\": \"ImPlot_SetupAxesLimits\",\n      \"defaults\": {\n        \"cond\": \"ImPlotCond_Once\"\n      },\n      \"funcname\": \"SetupAxesLimits\",\n      \"location\": \"implot:749\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_SetupAxesLimits\",\n      \"ret\": \"void\",\n      \"signature\": \"(double,double,double,double,ImPlotCond)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_SetupAxis\": [\n    {\n      \"args\": \"(ImAxis axis,const char* label,ImPlotAxisFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"axis\",\n          \"type\": \"ImAxis\"\n        },\n        {\n          \"name\": \"label\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotAxisFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(ImAxis axis,const char* label=((void*)0),ImPlotAxisFlags flags=0)\",\n      \"call_args\": \"(axis,label,flags)\",\n      \"cimguiname\": \"ImPlot_SetupAxis\",\n      \"defaults\": {\n        \"flags\": \"0\",\n        \"label\": \"NULL\"\n      },\n      \"funcname\": \"SetupAxis\",\n      \"location\": \"implot:724\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_SetupAxis\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImAxis,const char*,ImPlotAxisFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_SetupAxisFormat\": [\n    {\n      \"args\": \"(ImAxis axis,const char* fmt)\",\n      \"argsT\": [\n        {\n          \"name\": \"axis\",\n          \"type\": \"ImAxis\"\n        },\n        {\n          \"name\": \"fmt\",\n          \"type\": \"const char*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImAxis axis,const char* fmt)\",\n      \"call_args\": \"(axis,fmt)\",\n      \"cimguiname\": \"ImPlot_SetupAxisFormat\",\n      \"defaults\": {},\n      \"funcname\": \"SetupAxisFormat\",\n      \"location\": \"implot:730\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_SetupAxisFormat_Str\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImAxis,const char*)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(ImAxis axis,ImPlotFormatter formatter,void* data)\",\n      \"argsT\": [\n        {\n          \"name\": \"axis\",\n          \"type\": \"ImAxis\"\n        },\n        {\n          \"name\": \"formatter\",\n          \"type\": \"ImPlotFormatter\"\n        },\n        {\n          \"name\": \"data\",\n          \"type\": \"void*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImAxis axis,ImPlotFormatter formatter,void* data=((void*)0))\",\n      \"call_args\": \"(axis,formatter,data)\",\n      \"cimguiname\": \"ImPlot_SetupAxisFormat\",\n      \"defaults\": {\n        \"data\": \"NULL\"\n      },\n      \"funcname\": \"SetupAxisFormat\",\n      \"location\": \"implot:732\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_SetupAxisFormat_PlotFormatter\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImAxis,ImPlotFormatter,void*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_SetupAxisLimits\": [\n    {\n      \"args\": \"(ImAxis axis,double v_min,double v_max,ImPlotCond cond)\",\n      \"argsT\": [\n        {\n          \"name\": \"axis\",\n          \"type\": \"ImAxis\"\n        },\n        {\n          \"name\": \"v_min\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"v_max\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"cond\",\n          \"type\": \"ImPlotCond\"\n        }\n      ],\n      \"argsoriginal\": \"(ImAxis axis,double v_min,double v_max,ImPlotCond cond=ImPlotCond_Once)\",\n      \"call_args\": \"(axis,v_min,v_max,cond)\",\n      \"cimguiname\": \"ImPlot_SetupAxisLimits\",\n      \"defaults\": {\n        \"cond\": \"ImPlotCond_Once\"\n      },\n      \"funcname\": \"SetupAxisLimits\",\n      \"location\": \"implot:726\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_SetupAxisLimits\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImAxis,double,double,ImPlotCond)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_SetupAxisLimitsConstraints\": [\n    {\n      \"args\": \"(ImAxis axis,double v_min,double v_max)\",\n      \"argsT\": [\n        {\n          \"name\": \"axis\",\n          \"type\": \"ImAxis\"\n        },\n        {\n          \"name\": \"v_min\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"v_max\",\n          \"type\": \"double\"\n        }\n      ],\n      \"argsoriginal\": \"(ImAxis axis,double v_min,double v_max)\",\n      \"call_args\": \"(axis,v_min,v_max)\",\n      \"cimguiname\": \"ImPlot_SetupAxisLimitsConstraints\",\n      \"defaults\": {},\n      \"funcname\": \"SetupAxisLimitsConstraints\",\n      \"location\": \"implot:742\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_SetupAxisLimitsConstraints\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImAxis,double,double)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_SetupAxisLinks\": [\n    {\n      \"args\": \"(ImAxis axis,double* link_min,double* link_max)\",\n      \"argsT\": [\n        {\n          \"name\": \"axis\",\n          \"type\": \"ImAxis\"\n        },\n        {\n          \"name\": \"link_min\",\n          \"type\": \"double*\"\n        },\n        {\n          \"name\": \"link_max\",\n          \"type\": \"double*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImAxis axis,double* link_min,double* link_max)\",\n      \"call_args\": \"(axis,link_min,link_max)\",\n      \"cimguiname\": \"ImPlot_SetupAxisLinks\",\n      \"defaults\": {},\n      \"funcname\": \"SetupAxisLinks\",\n      \"location\": \"implot:728\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_SetupAxisLinks\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImAxis,double*,double*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_SetupAxisScale\": [\n    {\n      \"args\": \"(ImAxis axis,ImPlotScale scale)\",\n      \"argsT\": [\n        {\n          \"name\": \"axis\",\n          \"type\": \"ImAxis\"\n        },\n        {\n          \"name\": \"scale\",\n          \"type\": \"ImPlotScale\"\n        }\n      ],\n      \"argsoriginal\": \"(ImAxis axis,ImPlotScale scale)\",\n      \"call_args\": \"(axis,scale)\",\n      \"cimguiname\": \"ImPlot_SetupAxisScale\",\n      \"defaults\": {},\n      \"funcname\": \"SetupAxisScale\",\n      \"location\": \"implot:738\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_SetupAxisScale_PlotScale\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImAxis,ImPlotScale)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(ImAxis axis,ImPlotTransform forward,ImPlotTransform inverse,void* data)\",\n      \"argsT\": [\n        {\n          \"name\": \"axis\",\n          \"type\": \"ImAxis\"\n        },\n        {\n          \"name\": \"forward\",\n          \"type\": \"ImPlotTransform\"\n        },\n        {\n          \"name\": \"inverse\",\n          \"type\": \"ImPlotTransform\"\n        },\n        {\n          \"name\": \"data\",\n          \"type\": \"void*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImAxis axis,ImPlotTransform forward,ImPlotTransform inverse,void* data=((void*)0))\",\n      \"call_args\": \"(axis,forward,inverse,data)\",\n      \"cimguiname\": \"ImPlot_SetupAxisScale\",\n      \"defaults\": {\n        \"data\": \"NULL\"\n      },\n      \"funcname\": \"SetupAxisScale\",\n      \"location\": \"implot:740\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_SetupAxisScale_PlotTransform\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImAxis,ImPlotTransform,ImPlotTransform,void*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_SetupAxisTicks\": [\n    {\n      \"args\": \"(ImAxis axis,const double* values,int n_ticks,const char* const labels[],bool keep_default)\",\n      \"argsT\": [\n        {\n          \"name\": \"axis\",\n          \"type\": \"ImAxis\"\n        },\n        {\n          \"name\": \"values\",\n          \"type\": \"const double*\"\n        },\n        {\n          \"name\": \"n_ticks\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"labels\",\n          \"type\": \"const char* const[]\"\n        },\n        {\n          \"name\": \"keep_default\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"argsoriginal\": \"(ImAxis axis,const double* values,int n_ticks,const char* const labels[]=((void*)0),bool keep_default=false)\",\n      \"call_args\": \"(axis,values,n_ticks,labels,keep_default)\",\n      \"cimguiname\": \"ImPlot_SetupAxisTicks\",\n      \"defaults\": {\n        \"keep_default\": \"false\",\n        \"labels\": \"NULL\"\n      },\n      \"funcname\": \"SetupAxisTicks\",\n      \"location\": \"implot:734\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_SetupAxisTicks_doublePtr\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImAxis,const double*,int,const char* const[],bool)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(ImAxis axis,double v_min,double v_max,int n_ticks,const char* const labels[],bool keep_default)\",\n      \"argsT\": [\n        {\n          \"name\": \"axis\",\n          \"type\": \"ImAxis\"\n        },\n        {\n          \"name\": \"v_min\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"v_max\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"n_ticks\",\n          \"type\": \"int\"\n        },\n        {\n          \"name\": \"labels\",\n          \"type\": \"const char* const[]\"\n        },\n        {\n          \"name\": \"keep_default\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"argsoriginal\": \"(ImAxis axis,double v_min,double v_max,int n_ticks,const char* const labels[]=((void*)0),bool keep_default=false)\",\n      \"call_args\": \"(axis,v_min,v_max,n_ticks,labels,keep_default)\",\n      \"cimguiname\": \"ImPlot_SetupAxisTicks\",\n      \"defaults\": {\n        \"keep_default\": \"false\",\n        \"labels\": \"NULL\"\n      },\n      \"funcname\": \"SetupAxisTicks\",\n      \"location\": \"implot:736\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_SetupAxisTicks_double\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImAxis,double,double,int,const char* const[],bool)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_SetupAxisZoomConstraints\": [\n    {\n      \"args\": \"(ImAxis axis,double z_min,double z_max)\",\n      \"argsT\": [\n        {\n          \"name\": \"axis\",\n          \"type\": \"ImAxis\"\n        },\n        {\n          \"name\": \"z_min\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"z_max\",\n          \"type\": \"double\"\n        }\n      ],\n      \"argsoriginal\": \"(ImAxis axis,double z_min,double z_max)\",\n      \"call_args\": \"(axis,z_min,z_max)\",\n      \"cimguiname\": \"ImPlot_SetupAxisZoomConstraints\",\n      \"defaults\": {},\n      \"funcname\": \"SetupAxisZoomConstraints\",\n      \"location\": \"implot:744\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_SetupAxisZoomConstraints\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImAxis,double,double)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_SetupFinish\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImPlot_SetupFinish\",\n      \"defaults\": {},\n      \"funcname\": \"SetupFinish\",\n      \"location\": \"implot:758\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_SetupFinish\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_SetupLegend\": [\n    {\n      \"args\": \"(ImPlotLocation location,ImPlotLegendFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"location\",\n          \"type\": \"ImPlotLocation\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotLegendFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(ImPlotLocation location,ImPlotLegendFlags flags=0)\",\n      \"call_args\": \"(location,flags)\",\n      \"cimguiname\": \"ImPlot_SetupLegend\",\n      \"defaults\": {\n        \"flags\": \"0\"\n      },\n      \"funcname\": \"SetupLegend\",\n      \"location\": \"implot:752\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_SetupLegend\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImPlotLocation,ImPlotLegendFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_SetupLock\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImPlot_SetupLock\",\n      \"defaults\": {},\n      \"funcname\": \"SetupLock\",\n      \"location\": \"implot_internal:1294\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_SetupLock\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_SetupMouseText\": [\n    {\n      \"args\": \"(ImPlotLocation location,ImPlotMouseTextFlags flags)\",\n      \"argsT\": [\n        {\n          \"name\": \"location\",\n          \"type\": \"ImPlotLocation\"\n        },\n        {\n          \"name\": \"flags\",\n          \"type\": \"ImPlotMouseTextFlags\"\n        }\n      ],\n      \"argsoriginal\": \"(ImPlotLocation location,ImPlotMouseTextFlags flags=0)\",\n      \"call_args\": \"(location,flags)\",\n      \"cimguiname\": \"ImPlot_SetupMouseText\",\n      \"defaults\": {\n        \"flags\": \"0\"\n      },\n      \"funcname\": \"SetupMouseText\",\n      \"location\": \"implot:754\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_SetupMouseText\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImPlotLocation,ImPlotMouseTextFlags)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_ShowAltLegend\": [\n    {\n      \"args\": \"(const char* title_id,bool vertical,const ImVec2 size,bool interactable)\",\n      \"argsT\": [\n        {\n          \"name\": \"title_id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"vertical\",\n          \"type\": \"bool\"\n        },\n        {\n          \"name\": \"size\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"interactable\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* title_id,bool vertical=true,const ImVec2 size=ImVec2(0,0),bool interactable=true)\",\n      \"call_args\": \"(title_id,vertical,size,interactable)\",\n      \"cimguiname\": \"ImPlot_ShowAltLegend\",\n      \"defaults\": {\n        \"interactable\": \"true\",\n        \"size\": \"ImVec2(0,0)\",\n        \"vertical\": \"true\"\n      },\n      \"funcname\": \"ShowAltLegend\",\n      \"location\": \"implot_internal:1425\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_ShowAltLegend\",\n      \"ret\": \"void\",\n      \"signature\": \"(const char*,bool,const ImVec2,bool)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_ShowAxisContextMenu\": [\n    {\n      \"args\": \"(ImPlotAxis* axis,ImPlotAxis* equal_axis,bool time_allowed)\",\n      \"argsT\": [\n        {\n          \"name\": \"axis\",\n          \"reftoptr\": true,\n          \"type\": \"ImPlotAxis*\"\n        },\n        {\n          \"name\": \"equal_axis\",\n          \"type\": \"ImPlotAxis*\"\n        },\n        {\n          \"name\": \"time_allowed\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"argsoriginal\": \"(ImPlotAxis& axis,ImPlotAxis* equal_axis,bool time_allowed=false)\",\n      \"call_args\": \"(*axis,equal_axis,time_allowed)\",\n      \"cimguiname\": \"ImPlot_ShowAxisContextMenu\",\n      \"defaults\": {\n        \"time_allowed\": \"false\"\n      },\n      \"funcname\": \"ShowAxisContextMenu\",\n      \"location\": \"implot_internal:1412\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_ShowAxisContextMenu\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImPlotAxis*,ImPlotAxis*,bool)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_ShowColormapSelector\": [\n    {\n      \"args\": \"(const char* label)\",\n      \"argsT\": [\n        {\n          \"name\": \"label\",\n          \"type\": \"const char*\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label)\",\n      \"call_args\": \"(label)\",\n      \"cimguiname\": \"ImPlot_ShowColormapSelector\",\n      \"defaults\": {},\n      \"funcname\": \"ShowColormapSelector\",\n      \"location\": \"implot:1220\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_ShowColormapSelector\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_ShowDatePicker\": [\n    {\n      \"args\": \"(const char* id,int* level,ImPlotTime* t,const ImPlotTime* t1,const ImPlotTime* t2)\",\n      \"argsT\": [\n        {\n          \"name\": \"id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"level\",\n          \"type\": \"int*\"\n        },\n        {\n          \"name\": \"t\",\n          \"type\": \"ImPlotTime*\"\n        },\n        {\n          \"name\": \"t1\",\n          \"type\": \"const ImPlotTime*\"\n        },\n        {\n          \"name\": \"t2\",\n          \"type\": \"const ImPlotTime*\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* id,int* level,ImPlotTime* t,const ImPlotTime* t1=((void*)0),const ImPlotTime* t2=((void*)0))\",\n      \"call_args\": \"(id,level,t,t1,t2)\",\n      \"cimguiname\": \"ImPlot_ShowDatePicker\",\n      \"defaults\": {\n        \"t1\": \"NULL\",\n        \"t2\": \"NULL\"\n      },\n      \"funcname\": \"ShowDatePicker\",\n      \"location\": \"implot_internal:1596\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_ShowDatePicker\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*,int*,ImPlotTime*,const ImPlotTime*,const ImPlotTime*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_ShowDemoWindow\": [\n    {\n      \"args\": \"(bool* p_open)\",\n      \"argsT\": [\n        {\n          \"name\": \"p_open\",\n          \"type\": \"bool*\"\n        }\n      ],\n      \"argsoriginal\": \"(bool* p_open=((void*)0))\",\n      \"call_args\": \"(p_open)\",\n      \"cimguiname\": \"ImPlot_ShowDemoWindow\",\n      \"defaults\": {\n        \"p_open\": \"NULL\"\n      },\n      \"funcname\": \"ShowDemoWindow\",\n      \"location\": \"implot:1235\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_ShowDemoWindow\",\n      \"ret\": \"void\",\n      \"signature\": \"(bool*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_ShowInputMapSelector\": [\n    {\n      \"args\": \"(const char* label)\",\n      \"argsT\": [\n        {\n          \"name\": \"label\",\n          \"type\": \"const char*\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label)\",\n      \"call_args\": \"(label)\",\n      \"cimguiname\": \"ImPlot_ShowInputMapSelector\",\n      \"defaults\": {},\n      \"funcname\": \"ShowInputMapSelector\",\n      \"location\": \"implot:1222\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_ShowInputMapSelector\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_ShowLegendContextMenu\": [\n    {\n      \"args\": \"(ImPlotLegend* legend,bool visible)\",\n      \"argsT\": [\n        {\n          \"name\": \"legend\",\n          \"reftoptr\": true,\n          \"type\": \"ImPlotLegend*\"\n        },\n        {\n          \"name\": \"visible\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"argsoriginal\": \"(ImPlotLegend& legend,bool visible)\",\n      \"call_args\": \"(*legend,visible)\",\n      \"cimguiname\": \"ImPlot_ShowLegendContextMenu\",\n      \"defaults\": {},\n      \"funcname\": \"ShowLegendContextMenu\",\n      \"location\": \"implot_internal:1427\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_ShowLegendContextMenu\",\n      \"ret\": \"bool\",\n      \"signature\": \"(ImPlotLegend*,bool)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_ShowLegendEntries\": [\n    {\n      \"args\": \"(ImPlotItemGroup* items,const ImRect legend_bb,bool interactable,const ImVec2 pad,const ImVec2 spacing,bool vertical,ImDrawList* DrawList)\",\n      \"argsT\": [\n        {\n          \"name\": \"items\",\n          \"reftoptr\": true,\n          \"type\": \"ImPlotItemGroup*\"\n        },\n        {\n          \"name\": \"legend_bb\",\n          \"type\": \"const ImRect\"\n        },\n        {\n          \"name\": \"interactable\",\n          \"type\": \"bool\"\n        },\n        {\n          \"name\": \"pad\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"spacing\",\n          \"type\": \"const ImVec2\"\n        },\n        {\n          \"name\": \"vertical\",\n          \"type\": \"bool\"\n        },\n        {\n          \"name\": \"DrawList\",\n          \"reftoptr\": true,\n          \"type\": \"ImDrawList*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImPlotItemGroup& items,const ImRect& legend_bb,bool interactable,const ImVec2& pad,const ImVec2& spacing,bool vertical,ImDrawList& DrawList)\",\n      \"call_args\": \"(*items,legend_bb,interactable,pad,spacing,vertical,*DrawList)\",\n      \"cimguiname\": \"ImPlot_ShowLegendEntries\",\n      \"defaults\": {},\n      \"funcname\": \"ShowLegendEntries\",\n      \"location\": \"implot_internal:1423\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_ShowLegendEntries\",\n      \"ret\": \"bool\",\n      \"signature\": \"(ImPlotItemGroup*,const ImRect,bool,const ImVec2,const ImVec2,bool,ImDrawList*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_ShowMetricsWindow\": [\n    {\n      \"args\": \"(bool* p_popen)\",\n      \"argsT\": [\n        {\n          \"name\": \"p_popen\",\n          \"type\": \"bool*\"\n        }\n      ],\n      \"argsoriginal\": \"(bool* p_popen=((void*)0))\",\n      \"call_args\": \"(p_popen)\",\n      \"cimguiname\": \"ImPlot_ShowMetricsWindow\",\n      \"defaults\": {\n        \"p_popen\": \"NULL\"\n      },\n      \"funcname\": \"ShowMetricsWindow\",\n      \"location\": \"implot:1228\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_ShowMetricsWindow\",\n      \"ret\": \"void\",\n      \"signature\": \"(bool*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_ShowPlotContextMenu\": [\n    {\n      \"args\": \"(ImPlotPlot* plot)\",\n      \"argsT\": [\n        {\n          \"name\": \"plot\",\n          \"reftoptr\": true,\n          \"type\": \"ImPlotPlot*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImPlotPlot& plot)\",\n      \"call_args\": \"(*plot)\",\n      \"cimguiname\": \"ImPlot_ShowPlotContextMenu\",\n      \"defaults\": {},\n      \"funcname\": \"ShowPlotContextMenu\",\n      \"location\": \"implot_internal:1287\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_ShowPlotContextMenu\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImPlotPlot*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_ShowStyleEditor\": [\n    {\n      \"args\": \"(ImPlotStyle* ref)\",\n      \"argsT\": [\n        {\n          \"name\": \"ref\",\n          \"type\": \"ImPlotStyle*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImPlotStyle* ref=((void*)0))\",\n      \"call_args\": \"(ref)\",\n      \"cimguiname\": \"ImPlot_ShowStyleEditor\",\n      \"defaults\": {\n        \"ref\": \"NULL\"\n      },\n      \"funcname\": \"ShowStyleEditor\",\n      \"location\": \"implot:1224\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_ShowStyleEditor\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImPlotStyle*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_ShowStyleSelector\": [\n    {\n      \"args\": \"(const char* label)\",\n      \"argsT\": [\n        {\n          \"name\": \"label\",\n          \"type\": \"const char*\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* label)\",\n      \"call_args\": \"(label)\",\n      \"cimguiname\": \"ImPlot_ShowStyleSelector\",\n      \"defaults\": {},\n      \"funcname\": \"ShowStyleSelector\",\n      \"location\": \"implot:1218\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_ShowStyleSelector\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_ShowSubplotsContextMenu\": [\n    {\n      \"args\": \"(ImPlotSubplot* subplot)\",\n      \"argsT\": [\n        {\n          \"name\": \"subplot\",\n          \"reftoptr\": true,\n          \"type\": \"ImPlotSubplot*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImPlotSubplot& subplot)\",\n      \"call_args\": \"(*subplot)\",\n      \"cimguiname\": \"ImPlot_ShowSubplotsContextMenu\",\n      \"defaults\": {},\n      \"funcname\": \"ShowSubplotsContextMenu\",\n      \"location\": \"implot_internal:1308\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_ShowSubplotsContextMenu\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImPlotSubplot*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_ShowTimePicker\": [\n    {\n      \"args\": \"(const char* id,ImPlotTime* t)\",\n      \"argsT\": [\n        {\n          \"name\": \"id\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"t\",\n          \"type\": \"ImPlotTime*\"\n        }\n      ],\n      \"argsoriginal\": \"(const char* id,ImPlotTime* t)\",\n      \"call_args\": \"(id,t)\",\n      \"cimguiname\": \"ImPlot_ShowTimePicker\",\n      \"defaults\": {},\n      \"funcname\": \"ShowTimePicker\",\n      \"location\": \"implot_internal:1599\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_ShowTimePicker\",\n      \"ret\": \"bool\",\n      \"signature\": \"(const char*,ImPlotTime*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_ShowUserGuide\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImPlot_ShowUserGuide\",\n      \"defaults\": {},\n      \"funcname\": \"ShowUserGuide\",\n      \"location\": \"implot:1226\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_ShowUserGuide\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_StyleColorsAuto\": [\n    {\n      \"args\": \"(ImPlotStyle* dst)\",\n      \"argsT\": [\n        {\n          \"name\": \"dst\",\n          \"type\": \"ImPlotStyle*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImPlotStyle* dst=((void*)0))\",\n      \"call_args\": \"(dst)\",\n      \"cimguiname\": \"ImPlot_StyleColorsAuto\",\n      \"defaults\": {\n        \"dst\": \"NULL\"\n      },\n      \"funcname\": \"StyleColorsAuto\",\n      \"location\": \"implot:1074\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_StyleColorsAuto\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImPlotStyle*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_StyleColorsClassic\": [\n    {\n      \"args\": \"(ImPlotStyle* dst)\",\n      \"argsT\": [\n        {\n          \"name\": \"dst\",\n          \"type\": \"ImPlotStyle*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImPlotStyle* dst=((void*)0))\",\n      \"call_args\": \"(dst)\",\n      \"cimguiname\": \"ImPlot_StyleColorsClassic\",\n      \"defaults\": {\n        \"dst\": \"NULL\"\n      },\n      \"funcname\": \"StyleColorsClassic\",\n      \"location\": \"implot:1076\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_StyleColorsClassic\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImPlotStyle*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_StyleColorsDark\": [\n    {\n      \"args\": \"(ImPlotStyle* dst)\",\n      \"argsT\": [\n        {\n          \"name\": \"dst\",\n          \"type\": \"ImPlotStyle*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImPlotStyle* dst=((void*)0))\",\n      \"call_args\": \"(dst)\",\n      \"cimguiname\": \"ImPlot_StyleColorsDark\",\n      \"defaults\": {\n        \"dst\": \"NULL\"\n      },\n      \"funcname\": \"StyleColorsDark\",\n      \"location\": \"implot:1078\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_StyleColorsDark\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImPlotStyle*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_StyleColorsLight\": [\n    {\n      \"args\": \"(ImPlotStyle* dst)\",\n      \"argsT\": [\n        {\n          \"name\": \"dst\",\n          \"type\": \"ImPlotStyle*\"\n        }\n      ],\n      \"argsoriginal\": \"(ImPlotStyle* dst=((void*)0))\",\n      \"call_args\": \"(dst)\",\n      \"cimguiname\": \"ImPlot_StyleColorsLight\",\n      \"defaults\": {\n        \"dst\": \"NULL\"\n      },\n      \"funcname\": \"StyleColorsLight\",\n      \"location\": \"implot:1080\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_StyleColorsLight\",\n      \"ret\": \"void\",\n      \"signature\": \"(ImPlotStyle*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_SubplotNextCell\": [\n    {\n      \"args\": \"()\",\n      \"argsT\": [],\n      \"argsoriginal\": \"()\",\n      \"call_args\": \"()\",\n      \"cimguiname\": \"ImPlot_SubplotNextCell\",\n      \"defaults\": {},\n      \"funcname\": \"SubplotNextCell\",\n      \"location\": \"implot_internal:1305\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_SubplotNextCell\",\n      \"ret\": \"void\",\n      \"signature\": \"()\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_TagX\": [\n    {\n      \"args\": \"(double x,const ImVec4 col,bool round)\",\n      \"argsT\": [\n        {\n          \"name\": \"x\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"col\",\n          \"type\": \"const ImVec4\"\n        },\n        {\n          \"name\": \"round\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"argsoriginal\": \"(double x,const ImVec4& col,bool round=false)\",\n      \"call_args\": \"(x,col,round)\",\n      \"cimguiname\": \"ImPlot_TagX\",\n      \"defaults\": {\n        \"round\": \"false\"\n      },\n      \"funcname\": \"TagX\",\n      \"location\": \"implot:937\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_TagX_Bool\",\n      \"ret\": \"void\",\n      \"signature\": \"(double,const ImVec4,bool)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(double x,const ImVec4 col,const char* fmt,...)\",\n      \"argsT\": [\n        {\n          \"name\": \"x\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"col\",\n          \"type\": \"const ImVec4\"\n        },\n        {\n          \"name\": \"fmt\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"...\",\n          \"type\": \"...\"\n        }\n      ],\n      \"argsoriginal\": \"(double x,const ImVec4& col,const char* fmt,...)\",\n      \"call_args\": \"(x,col,fmt,...)\",\n      \"cimguiname\": \"ImPlot_TagX\",\n      \"defaults\": {},\n      \"funcname\": \"TagX\",\n      \"isvararg\": \"...)\",\n      \"location\": \"implot:938\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_TagX_Str\",\n      \"ret\": \"void\",\n      \"signature\": \"(double,const ImVec4,const char*,...)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_TagXV\": [\n    {\n      \"args\": \"(double x,const ImVec4 col,const char* fmt,va_list args)\",\n      \"argsT\": [\n        {\n          \"name\": \"x\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"col\",\n          \"type\": \"const ImVec4\"\n        },\n        {\n          \"name\": \"fmt\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"args\",\n          \"type\": \"va_list\"\n        }\n      ],\n      \"argsoriginal\": \"(double x,const ImVec4& col,const char* fmt,va_list args)\",\n      \"call_args\": \"(x,col,fmt,args)\",\n      \"cimguiname\": \"ImPlot_TagXV\",\n      \"defaults\": {},\n      \"funcname\": \"TagXV\",\n      \"location\": \"implot:939\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_TagXV\",\n      \"ret\": \"void\",\n      \"signature\": \"(double,const ImVec4,const char*,va_list)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_TagY\": [\n    {\n      \"args\": \"(double y,const ImVec4 col,bool round)\",\n      \"argsT\": [\n        {\n          \"name\": \"y\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"col\",\n          \"type\": \"const ImVec4\"\n        },\n        {\n          \"name\": \"round\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"argsoriginal\": \"(double y,const ImVec4& col,bool round=false)\",\n      \"call_args\": \"(y,col,round)\",\n      \"cimguiname\": \"ImPlot_TagY\",\n      \"defaults\": {\n        \"round\": \"false\"\n      },\n      \"funcname\": \"TagY\",\n      \"location\": \"implot:942\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_TagY_Bool\",\n      \"ret\": \"void\",\n      \"signature\": \"(double,const ImVec4,bool)\",\n      \"stname\": \"\"\n    },\n    {\n      \"args\": \"(double y,const ImVec4 col,const char* fmt,...)\",\n      \"argsT\": [\n        {\n          \"name\": \"y\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"col\",\n          \"type\": \"const ImVec4\"\n        },\n        {\n          \"name\": \"fmt\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"...\",\n          \"type\": \"...\"\n        }\n      ],\n      \"argsoriginal\": \"(double y,const ImVec4& col,const char* fmt,...)\",\n      \"call_args\": \"(y,col,fmt,...)\",\n      \"cimguiname\": \"ImPlot_TagY\",\n      \"defaults\": {},\n      \"funcname\": \"TagY\",\n      \"isvararg\": \"...)\",\n      \"location\": \"implot:943\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_TagY_Str\",\n      \"ret\": \"void\",\n      \"signature\": \"(double,const ImVec4,const char*,...)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_TagYV\": [\n    {\n      \"args\": \"(double y,const ImVec4 col,const char* fmt,va_list args)\",\n      \"argsT\": [\n        {\n          \"name\": \"y\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"col\",\n          \"type\": \"const ImVec4\"\n        },\n        {\n          \"name\": \"fmt\",\n          \"type\": \"const char*\"\n        },\n        {\n          \"name\": \"args\",\n          \"type\": \"va_list\"\n        }\n      ],\n      \"argsoriginal\": \"(double y,const ImVec4& col,const char* fmt,va_list args)\",\n      \"call_args\": \"(y,col,fmt,args)\",\n      \"cimguiname\": \"ImPlot_TagYV\",\n      \"defaults\": {},\n      \"funcname\": \"TagYV\",\n      \"location\": \"implot:944\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_TagYV\",\n      \"ret\": \"void\",\n      \"signature\": \"(double,const ImVec4,const char*,va_list)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_TransformForward_Log10\": [\n    {\n      \"args\": \"(double v,void* noname1)\",\n      \"argsT\": [\n        {\n          \"name\": \"v\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"noname1\",\n          \"type\": \"void*\"\n        }\n      ],\n      \"argsoriginal\": \"(double v,void*)\",\n      \"call_args\": \"(v,noname1)\",\n      \"cimguiname\": \"ImPlot_TransformForward_Log10\",\n      \"defaults\": {},\n      \"funcname\": \"TransformForward_Log10\",\n      \"location\": \"implot_internal:1605\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_TransformForward_Log10\",\n      \"ret\": \"double\",\n      \"signature\": \"(double,void*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_TransformForward_Logit\": [\n    {\n      \"args\": \"(double v,void* noname1)\",\n      \"argsT\": [\n        {\n          \"name\": \"v\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"noname1\",\n          \"type\": \"void*\"\n        }\n      ],\n      \"argsoriginal\": \"(double v,void*)\",\n      \"call_args\": \"(v,noname1)\",\n      \"cimguiname\": \"ImPlot_TransformForward_Logit\",\n      \"defaults\": {},\n      \"funcname\": \"TransformForward_Logit\",\n      \"location\": \"implot_internal:1622\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_TransformForward_Logit\",\n      \"ret\": \"double\",\n      \"signature\": \"(double,void*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_TransformForward_SymLog\": [\n    {\n      \"args\": \"(double v,void* noname1)\",\n      \"argsT\": [\n        {\n          \"name\": \"v\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"noname1\",\n          \"type\": \"void*\"\n        }\n      ],\n      \"argsoriginal\": \"(double v,void*)\",\n      \"call_args\": \"(v,noname1)\",\n      \"cimguiname\": \"ImPlot_TransformForward_SymLog\",\n      \"defaults\": {},\n      \"funcname\": \"TransformForward_SymLog\",\n      \"location\": \"implot_internal:1614\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_TransformForward_SymLog\",\n      \"ret\": \"double\",\n      \"signature\": \"(double,void*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_TransformInverse_Log10\": [\n    {\n      \"args\": \"(double v,void* noname1)\",\n      \"argsT\": [\n        {\n          \"name\": \"v\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"noname1\",\n          \"type\": \"void*\"\n        }\n      ],\n      \"argsoriginal\": \"(double v,void*)\",\n      \"call_args\": \"(v,noname1)\",\n      \"cimguiname\": \"ImPlot_TransformInverse_Log10\",\n      \"defaults\": {},\n      \"funcname\": \"TransformInverse_Log10\",\n      \"location\": \"implot_internal:1610\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_TransformInverse_Log10\",\n      \"ret\": \"double\",\n      \"signature\": \"(double,void*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_TransformInverse_Logit\": [\n    {\n      \"args\": \"(double v,void* noname1)\",\n      \"argsT\": [\n        {\n          \"name\": \"v\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"noname1\",\n          \"type\": \"void*\"\n        }\n      ],\n      \"argsoriginal\": \"(double v,void*)\",\n      \"call_args\": \"(v,noname1)\",\n      \"cimguiname\": \"ImPlot_TransformInverse_Logit\",\n      \"defaults\": {},\n      \"funcname\": \"TransformInverse_Logit\",\n      \"location\": \"implot_internal:1627\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_TransformInverse_Logit\",\n      \"ret\": \"double\",\n      \"signature\": \"(double,void*)\",\n      \"stname\": \"\"\n    }\n  ],\n  \"ImPlot_TransformInverse_SymLog\": [\n    {\n      \"args\": \"(double v,void* noname1)\",\n      \"argsT\": [\n        {\n          \"name\": \"v\",\n          \"type\": \"double\"\n        },\n        {\n          \"name\": \"noname1\",\n          \"type\": \"void*\"\n        }\n      ],\n      \"argsoriginal\": \"(double v,void*)\",\n      \"call_args\": \"(v,noname1)\",\n      \"cimguiname\": \"ImPlot_TransformInverse_SymLog\",\n      \"defaults\": {},\n      \"funcname\": \"TransformInverse_SymLog\",\n      \"location\": \"implot_internal:1618\",\n      \"namespace\": \"ImPlot\",\n      \"ov_cimguiname\": \"ImPlot_TransformInverse_SymLog\",\n      \"ret\": \"double\",\n      \"signature\": \"(double,void*)\",\n      \"stname\": \"\"\n    }\n  ]\n}"
  },
  {
    "path": "tools/ImGui.NET/CodeGenerator/definitions/cimplot/structs_and_enums.json",
    "content": "{\n  \"enums\": {\n    \"ImAxis_\": [\n      {\n        \"calc_value\": 0,\n        \"name\": \"ImAxis_X1\",\n        \"value\": \"0\"\n      },\n      {\n        \"calc_value\": 1,\n        \"name\": \"ImAxis_X2\",\n        \"value\": \"1\"\n      },\n      {\n        \"calc_value\": 2,\n        \"name\": \"ImAxis_X3\",\n        \"value\": \"2\"\n      },\n      {\n        \"calc_value\": 3,\n        \"name\": \"ImAxis_Y1\",\n        \"value\": \"3\"\n      },\n      {\n        \"calc_value\": 4,\n        \"name\": \"ImAxis_Y2\",\n        \"value\": \"4\"\n      },\n      {\n        \"calc_value\": 5,\n        \"name\": \"ImAxis_Y3\",\n        \"value\": \"5\"\n      },\n      {\n        \"calc_value\": 6,\n        \"name\": \"ImAxis_COUNT\",\n        \"value\": \"6\"\n      }\n    ],\n    \"ImPlotAxisFlags_\": [\n      {\n        \"calc_value\": 0,\n        \"name\": \"ImPlotAxisFlags_None\",\n        \"value\": \"0\"\n      },\n      {\n        \"calc_value\": 1,\n        \"name\": \"ImPlotAxisFlags_NoLabel\",\n        \"value\": \"1 << 0\"\n      },\n      {\n        \"calc_value\": 2,\n        \"name\": \"ImPlotAxisFlags_NoGridLines\",\n        \"value\": \"1 << 1\"\n      },\n      {\n        \"calc_value\": 4,\n        \"name\": \"ImPlotAxisFlags_NoTickMarks\",\n        \"value\": \"1 << 2\"\n      },\n      {\n        \"calc_value\": 8,\n        \"name\": \"ImPlotAxisFlags_NoTickLabels\",\n        \"value\": \"1 << 3\"\n      },\n      {\n        \"calc_value\": 16,\n        \"name\": \"ImPlotAxisFlags_NoInitialFit\",\n        \"value\": \"1 << 4\"\n      },\n      {\n        \"calc_value\": 32,\n        \"name\": \"ImPlotAxisFlags_NoMenus\",\n        \"value\": \"1 << 5\"\n      },\n      {\n        \"calc_value\": 64,\n        \"name\": \"ImPlotAxisFlags_NoSideSwitch\",\n        \"value\": \"1 << 6\"\n      },\n      {\n        \"calc_value\": 128,\n        \"name\": \"ImPlotAxisFlags_NoHighlight\",\n        \"value\": \"1 << 7\"\n      },\n      {\n        \"calc_value\": 256,\n        \"name\": \"ImPlotAxisFlags_Opposite\",\n        \"value\": \"1 << 8\"\n      },\n      {\n        \"calc_value\": 512,\n        \"name\": \"ImPlotAxisFlags_Foreground\",\n        \"value\": \"1 << 9\"\n      },\n      {\n        \"calc_value\": 1024,\n        \"name\": \"ImPlotAxisFlags_Invert\",\n        \"value\": \"1 << 10\"\n      },\n      {\n        \"calc_value\": 2048,\n        \"name\": \"ImPlotAxisFlags_AutoFit\",\n        \"value\": \"1 << 11\"\n      },\n      {\n        \"calc_value\": 4096,\n        \"name\": \"ImPlotAxisFlags_RangeFit\",\n        \"value\": \"1 << 12\"\n      },\n      {\n        \"calc_value\": 8192,\n        \"name\": \"ImPlotAxisFlags_PanStretch\",\n        \"value\": \"1 << 13\"\n      },\n      {\n        \"calc_value\": 16384,\n        \"name\": \"ImPlotAxisFlags_LockMin\",\n        \"value\": \"1 << 14\"\n      },\n      {\n        \"calc_value\": 32768,\n        \"name\": \"ImPlotAxisFlags_LockMax\",\n        \"value\": \"1 << 15\"\n      },\n      {\n        \"calc_value\": 49152,\n        \"name\": \"ImPlotAxisFlags_Lock\",\n        \"value\": \"ImPlotAxisFlags_LockMin | ImPlotAxisFlags_LockMax\"\n      },\n      {\n        \"calc_value\": 15,\n        \"name\": \"ImPlotAxisFlags_NoDecorations\",\n        \"value\": \"ImPlotAxisFlags_NoLabel | ImPlotAxisFlags_NoGridLines | ImPlotAxisFlags_NoTickMarks | ImPlotAxisFlags_NoTickLabels\"\n      },\n      {\n        \"calc_value\": 258,\n        \"name\": \"ImPlotAxisFlags_AuxDefault\",\n        \"value\": \"ImPlotAxisFlags_NoGridLines | ImPlotAxisFlags_Opposite\"\n      }\n    ],\n    \"ImPlotBarGroupsFlags_\": [\n      {\n        \"calc_value\": 0,\n        \"name\": \"ImPlotBarGroupsFlags_None\",\n        \"value\": \"0\"\n      },\n      {\n        \"calc_value\": 1024,\n        \"name\": \"ImPlotBarGroupsFlags_Horizontal\",\n        \"value\": \"1 << 10\"\n      },\n      {\n        \"calc_value\": 2048,\n        \"name\": \"ImPlotBarGroupsFlags_Stacked\",\n        \"value\": \"1 << 11\"\n      }\n    ],\n    \"ImPlotBarsFlags_\": [\n      {\n        \"calc_value\": 0,\n        \"name\": \"ImPlotBarsFlags_None\",\n        \"value\": \"0\"\n      },\n      {\n        \"calc_value\": 1024,\n        \"name\": \"ImPlotBarsFlags_Horizontal\",\n        \"value\": \"1 << 10\"\n      }\n    ],\n    \"ImPlotBin_\": [\n      {\n        \"calc_value\": -1,\n        \"name\": \"ImPlotBin_Sqrt\",\n        \"value\": \"-1\"\n      },\n      {\n        \"calc_value\": -2,\n        \"name\": \"ImPlotBin_Sturges\",\n        \"value\": \"-2\"\n      },\n      {\n        \"calc_value\": -3,\n        \"name\": \"ImPlotBin_Rice\",\n        \"value\": \"-3\"\n      },\n      {\n        \"calc_value\": -4,\n        \"name\": \"ImPlotBin_Scott\",\n        \"value\": \"-4\"\n      }\n    ],\n    \"ImPlotCol_\": [\n      {\n        \"calc_value\": 0,\n        \"name\": \"ImPlotCol_Line\",\n        \"value\": \"0\"\n      },\n      {\n        \"calc_value\": 1,\n        \"name\": \"ImPlotCol_Fill\",\n        \"value\": \"1\"\n      },\n      {\n        \"calc_value\": 2,\n        \"name\": \"ImPlotCol_MarkerOutline\",\n        \"value\": \"2\"\n      },\n      {\n        \"calc_value\": 3,\n        \"name\": \"ImPlotCol_MarkerFill\",\n        \"value\": \"3\"\n      },\n      {\n        \"calc_value\": 4,\n        \"name\": \"ImPlotCol_ErrorBar\",\n        \"value\": \"4\"\n      },\n      {\n        \"calc_value\": 5,\n        \"name\": \"ImPlotCol_FrameBg\",\n        \"value\": \"5\"\n      },\n      {\n        \"calc_value\": 6,\n        \"name\": \"ImPlotCol_PlotBg\",\n        \"value\": \"6\"\n      },\n      {\n        \"calc_value\": 7,\n        \"name\": \"ImPlotCol_PlotBorder\",\n        \"value\": \"7\"\n      },\n      {\n        \"calc_value\": 8,\n        \"name\": \"ImPlotCol_LegendBg\",\n        \"value\": \"8\"\n      },\n      {\n        \"calc_value\": 9,\n        \"name\": \"ImPlotCol_LegendBorder\",\n        \"value\": \"9\"\n      },\n      {\n        \"calc_value\": 10,\n        \"name\": \"ImPlotCol_LegendText\",\n        \"value\": \"10\"\n      },\n      {\n        \"calc_value\": 11,\n        \"name\": \"ImPlotCol_TitleText\",\n        \"value\": \"11\"\n      },\n      {\n        \"calc_value\": 12,\n        \"name\": \"ImPlotCol_InlayText\",\n        \"value\": \"12\"\n      },\n      {\n        \"calc_value\": 13,\n        \"name\": \"ImPlotCol_AxisText\",\n        \"value\": \"13\"\n      },\n      {\n        \"calc_value\": 14,\n        \"name\": \"ImPlotCol_AxisGrid\",\n        \"value\": \"14\"\n      },\n      {\n        \"calc_value\": 15,\n        \"name\": \"ImPlotCol_AxisTick\",\n        \"value\": \"15\"\n      },\n      {\n        \"calc_value\": 16,\n        \"name\": \"ImPlotCol_AxisBg\",\n        \"value\": \"16\"\n      },\n      {\n        \"calc_value\": 17,\n        \"name\": \"ImPlotCol_AxisBgHovered\",\n        \"value\": \"17\"\n      },\n      {\n        \"calc_value\": 18,\n        \"name\": \"ImPlotCol_AxisBgActive\",\n        \"value\": \"18\"\n      },\n      {\n        \"calc_value\": 19,\n        \"name\": \"ImPlotCol_Selection\",\n        \"value\": \"19\"\n      },\n      {\n        \"calc_value\": 20,\n        \"name\": \"ImPlotCol_Crosshairs\",\n        \"value\": \"20\"\n      },\n      {\n        \"calc_value\": 21,\n        \"name\": \"ImPlotCol_COUNT\",\n        \"value\": \"21\"\n      }\n    ],\n    \"ImPlotColormapScaleFlags_\": [\n      {\n        \"calc_value\": 0,\n        \"name\": \"ImPlotColormapScaleFlags_None\",\n        \"value\": \"0\"\n      },\n      {\n        \"calc_value\": 1,\n        \"name\": \"ImPlotColormapScaleFlags_NoLabel\",\n        \"value\": \"1 << 0\"\n      },\n      {\n        \"calc_value\": 2,\n        \"name\": \"ImPlotColormapScaleFlags_Opposite\",\n        \"value\": \"1 << 1\"\n      },\n      {\n        \"calc_value\": 4,\n        \"name\": \"ImPlotColormapScaleFlags_Invert\",\n        \"value\": \"1 << 2\"\n      }\n    ],\n    \"ImPlotColormap_\": [\n      {\n        \"calc_value\": 0,\n        \"name\": \"ImPlotColormap_Deep\",\n        \"value\": \"0\"\n      },\n      {\n        \"calc_value\": 1,\n        \"name\": \"ImPlotColormap_Dark\",\n        \"value\": \"1\"\n      },\n      {\n        \"calc_value\": 2,\n        \"name\": \"ImPlotColormap_Pastel\",\n        \"value\": \"2\"\n      },\n      {\n        \"calc_value\": 3,\n        \"name\": \"ImPlotColormap_Paired\",\n        \"value\": \"3\"\n      },\n      {\n        \"calc_value\": 4,\n        \"name\": \"ImPlotColormap_Viridis\",\n        \"value\": \"4\"\n      },\n      {\n        \"calc_value\": 5,\n        \"name\": \"ImPlotColormap_Plasma\",\n        \"value\": \"5\"\n      },\n      {\n        \"calc_value\": 6,\n        \"name\": \"ImPlotColormap_Hot\",\n        \"value\": \"6\"\n      },\n      {\n        \"calc_value\": 7,\n        \"name\": \"ImPlotColormap_Cool\",\n        \"value\": \"7\"\n      },\n      {\n        \"calc_value\": 8,\n        \"name\": \"ImPlotColormap_Pink\",\n        \"value\": \"8\"\n      },\n      {\n        \"calc_value\": 9,\n        \"name\": \"ImPlotColormap_Jet\",\n        \"value\": \"9\"\n      },\n      {\n        \"calc_value\": 10,\n        \"name\": \"ImPlotColormap_Twilight\",\n        \"value\": \"10\"\n      },\n      {\n        \"calc_value\": 11,\n        \"name\": \"ImPlotColormap_RdBu\",\n        \"value\": \"11\"\n      },\n      {\n        \"calc_value\": 12,\n        \"name\": \"ImPlotColormap_BrBG\",\n        \"value\": \"12\"\n      },\n      {\n        \"calc_value\": 13,\n        \"name\": \"ImPlotColormap_PiYG\",\n        \"value\": \"13\"\n      },\n      {\n        \"calc_value\": 14,\n        \"name\": \"ImPlotColormap_Spectral\",\n        \"value\": \"14\"\n      },\n      {\n        \"calc_value\": 15,\n        \"name\": \"ImPlotColormap_Greys\",\n        \"value\": \"15\"\n      }\n    ],\n    \"ImPlotCond_\": [\n      {\n        \"calc_value\": 0,\n        \"name\": \"ImPlotCond_None\",\n        \"value\": \"ImGuiCond_None\"\n      },\n      {\n        \"calc_value\": 1,\n        \"name\": \"ImPlotCond_Always\",\n        \"value\": \"ImGuiCond_Always\"\n      },\n      {\n        \"calc_value\": 2,\n        \"name\": \"ImPlotCond_Once\",\n        \"value\": \"ImGuiCond_Once\"\n      }\n    ],\n    \"ImPlotDateFmt_\": [\n      {\n        \"calc_value\": 0,\n        \"name\": \"ImPlotDateFmt_None\",\n        \"value\": \"0\"\n      },\n      {\n        \"calc_value\": 1,\n        \"name\": \"ImPlotDateFmt_DayMo\",\n        \"value\": \"1\"\n      },\n      {\n        \"calc_value\": 2,\n        \"name\": \"ImPlotDateFmt_DayMoYr\",\n        \"value\": \"2\"\n      },\n      {\n        \"calc_value\": 3,\n        \"name\": \"ImPlotDateFmt_MoYr\",\n        \"value\": \"3\"\n      },\n      {\n        \"calc_value\": 4,\n        \"name\": \"ImPlotDateFmt_Mo\",\n        \"value\": \"4\"\n      },\n      {\n        \"calc_value\": 5,\n        \"name\": \"ImPlotDateFmt_Yr\",\n        \"value\": \"5\"\n      }\n    ],\n    \"ImPlotDigitalFlags_\": [\n      {\n        \"calc_value\": 0,\n        \"name\": \"ImPlotDigitalFlags_None\",\n        \"value\": \"0\"\n      }\n    ],\n    \"ImPlotDragToolFlags_\": [\n      {\n        \"calc_value\": 0,\n        \"name\": \"ImPlotDragToolFlags_None\",\n        \"value\": \"0\"\n      },\n      {\n        \"calc_value\": 1,\n        \"name\": \"ImPlotDragToolFlags_NoCursors\",\n        \"value\": \"1 << 0\"\n      },\n      {\n        \"calc_value\": 2,\n        \"name\": \"ImPlotDragToolFlags_NoFit\",\n        \"value\": \"1 << 1\"\n      },\n      {\n        \"calc_value\": 4,\n        \"name\": \"ImPlotDragToolFlags_NoInputs\",\n        \"value\": \"1 << 2\"\n      },\n      {\n        \"calc_value\": 8,\n        \"name\": \"ImPlotDragToolFlags_Delayed\",\n        \"value\": \"1 << 3\"\n      }\n    ],\n    \"ImPlotDummyFlags_\": [\n      {\n        \"calc_value\": 0,\n        \"name\": \"ImPlotDummyFlags_None\",\n        \"value\": \"0\"\n      }\n    ],\n    \"ImPlotErrorBarsFlags_\": [\n      {\n        \"calc_value\": 0,\n        \"name\": \"ImPlotErrorBarsFlags_None\",\n        \"value\": \"0\"\n      },\n      {\n        \"calc_value\": 1024,\n        \"name\": \"ImPlotErrorBarsFlags_Horizontal\",\n        \"value\": \"1 << 10\"\n      }\n    ],\n    \"ImPlotFlags_\": [\n      {\n        \"calc_value\": 0,\n        \"name\": \"ImPlotFlags_None\",\n        \"value\": \"0\"\n      },\n      {\n        \"calc_value\": 1,\n        \"name\": \"ImPlotFlags_NoTitle\",\n        \"value\": \"1 << 0\"\n      },\n      {\n        \"calc_value\": 2,\n        \"name\": \"ImPlotFlags_NoLegend\",\n        \"value\": \"1 << 1\"\n      },\n      {\n        \"calc_value\": 4,\n        \"name\": \"ImPlotFlags_NoMouseText\",\n        \"value\": \"1 << 2\"\n      },\n      {\n        \"calc_value\": 8,\n        \"name\": \"ImPlotFlags_NoInputs\",\n        \"value\": \"1 << 3\"\n      },\n      {\n        \"calc_value\": 16,\n        \"name\": \"ImPlotFlags_NoMenus\",\n        \"value\": \"1 << 4\"\n      },\n      {\n        \"calc_value\": 32,\n        \"name\": \"ImPlotFlags_NoBoxSelect\",\n        \"value\": \"1 << 5\"\n      },\n      {\n        \"calc_value\": 64,\n        \"name\": \"ImPlotFlags_NoChild\",\n        \"value\": \"1 << 6\"\n      },\n      {\n        \"calc_value\": 128,\n        \"name\": \"ImPlotFlags_NoFrame\",\n        \"value\": \"1 << 7\"\n      },\n      {\n        \"calc_value\": 256,\n        \"name\": \"ImPlotFlags_Equal\",\n        \"value\": \"1 << 8\"\n      },\n      {\n        \"calc_value\": 512,\n        \"name\": \"ImPlotFlags_Crosshairs\",\n        \"value\": \"1 << 9\"\n      },\n      {\n        \"calc_value\": 55,\n        \"name\": \"ImPlotFlags_CanvasOnly\",\n        \"value\": \"ImPlotFlags_NoTitle | ImPlotFlags_NoLegend | ImPlotFlags_NoMenus | ImPlotFlags_NoBoxSelect | ImPlotFlags_NoMouseText\"\n      }\n    ],\n    \"ImPlotHeatmapFlags_\": [\n      {\n        \"calc_value\": 0,\n        \"name\": \"ImPlotHeatmapFlags_None\",\n        \"value\": \"0\"\n      },\n      {\n        \"calc_value\": 1024,\n        \"name\": \"ImPlotHeatmapFlags_ColMajor\",\n        \"value\": \"1 << 10\"\n      }\n    ],\n    \"ImPlotHistogramFlags_\": [\n      {\n        \"calc_value\": 0,\n        \"name\": \"ImPlotHistogramFlags_None\",\n        \"value\": \"0\"\n      },\n      {\n        \"calc_value\": 1024,\n        \"name\": \"ImPlotHistogramFlags_Horizontal\",\n        \"value\": \"1 << 10\"\n      },\n      {\n        \"calc_value\": 2048,\n        \"name\": \"ImPlotHistogramFlags_Cumulative\",\n        \"value\": \"1 << 11\"\n      },\n      {\n        \"calc_value\": 4096,\n        \"name\": \"ImPlotHistogramFlags_Density\",\n        \"value\": \"1 << 12\"\n      },\n      {\n        \"calc_value\": 8192,\n        \"name\": \"ImPlotHistogramFlags_NoOutliers\",\n        \"value\": \"1 << 13\"\n      },\n      {\n        \"calc_value\": 16384,\n        \"name\": \"ImPlotHistogramFlags_ColMajor\",\n        \"value\": \"1 << 14\"\n      }\n    ],\n    \"ImPlotImageFlags_\": [\n      {\n        \"calc_value\": 0,\n        \"name\": \"ImPlotImageFlags_None\",\n        \"value\": \"0\"\n      }\n    ],\n    \"ImPlotInfLinesFlags_\": [\n      {\n        \"calc_value\": 0,\n        \"name\": \"ImPlotInfLinesFlags_None\",\n        \"value\": \"0\"\n      },\n      {\n        \"calc_value\": 1024,\n        \"name\": \"ImPlotInfLinesFlags_Horizontal\",\n        \"value\": \"1 << 10\"\n      }\n    ],\n    \"ImPlotItemFlags_\": [\n      {\n        \"calc_value\": 0,\n        \"name\": \"ImPlotItemFlags_None\",\n        \"value\": \"0\"\n      },\n      {\n        \"calc_value\": 1,\n        \"name\": \"ImPlotItemFlags_NoLegend\",\n        \"value\": \"1 << 0\"\n      },\n      {\n        \"calc_value\": 2,\n        \"name\": \"ImPlotItemFlags_NoFit\",\n        \"value\": \"1 << 1\"\n      }\n    ],\n    \"ImPlotLegendFlags_\": [\n      {\n        \"calc_value\": 0,\n        \"name\": \"ImPlotLegendFlags_None\",\n        \"value\": \"0\"\n      },\n      {\n        \"calc_value\": 1,\n        \"name\": \"ImPlotLegendFlags_NoButtons\",\n        \"value\": \"1 << 0\"\n      },\n      {\n        \"calc_value\": 2,\n        \"name\": \"ImPlotLegendFlags_NoHighlightItem\",\n        \"value\": \"1 << 1\"\n      },\n      {\n        \"calc_value\": 4,\n        \"name\": \"ImPlotLegendFlags_NoHighlightAxis\",\n        \"value\": \"1 << 2\"\n      },\n      {\n        \"calc_value\": 8,\n        \"name\": \"ImPlotLegendFlags_NoMenus\",\n        \"value\": \"1 << 3\"\n      },\n      {\n        \"calc_value\": 16,\n        \"name\": \"ImPlotLegendFlags_Outside\",\n        \"value\": \"1 << 4\"\n      },\n      {\n        \"calc_value\": 32,\n        \"name\": \"ImPlotLegendFlags_Horizontal\",\n        \"value\": \"1 << 5\"\n      },\n      {\n        \"calc_value\": 64,\n        \"name\": \"ImPlotLegendFlags_Sort\",\n        \"value\": \"1 << 6\"\n      }\n    ],\n    \"ImPlotLineFlags_\": [\n      {\n        \"calc_value\": 0,\n        \"name\": \"ImPlotLineFlags_None\",\n        \"value\": \"0\"\n      },\n      {\n        \"calc_value\": 1024,\n        \"name\": \"ImPlotLineFlags_Segments\",\n        \"value\": \"1 << 10\"\n      },\n      {\n        \"calc_value\": 2048,\n        \"name\": \"ImPlotLineFlags_Loop\",\n        \"value\": \"1 << 11\"\n      },\n      {\n        \"calc_value\": 4096,\n        \"name\": \"ImPlotLineFlags_SkipNaN\",\n        \"value\": \"1 << 12\"\n      },\n      {\n        \"calc_value\": 8192,\n        \"name\": \"ImPlotLineFlags_NoClip\",\n        \"value\": \"1 << 13\"\n      },\n      {\n        \"calc_value\": 16384,\n        \"name\": \"ImPlotLineFlags_Shaded\",\n        \"value\": \"1 << 14\"\n      }\n    ],\n    \"ImPlotLocation_\": [\n      {\n        \"calc_value\": 0,\n        \"name\": \"ImPlotLocation_Center\",\n        \"value\": \"0\"\n      },\n      {\n        \"calc_value\": 1,\n        \"name\": \"ImPlotLocation_North\",\n        \"value\": \"1 << 0\"\n      },\n      {\n        \"calc_value\": 2,\n        \"name\": \"ImPlotLocation_South\",\n        \"value\": \"1 << 1\"\n      },\n      {\n        \"calc_value\": 4,\n        \"name\": \"ImPlotLocation_West\",\n        \"value\": \"1 << 2\"\n      },\n      {\n        \"calc_value\": 8,\n        \"name\": \"ImPlotLocation_East\",\n        \"value\": \"1 << 3\"\n      },\n      {\n        \"calc_value\": 5,\n        \"name\": \"ImPlotLocation_NorthWest\",\n        \"value\": \"ImPlotLocation_North | ImPlotLocation_West\"\n      },\n      {\n        \"calc_value\": 9,\n        \"name\": \"ImPlotLocation_NorthEast\",\n        \"value\": \"ImPlotLocation_North | ImPlotLocation_East\"\n      },\n      {\n        \"calc_value\": 6,\n        \"name\": \"ImPlotLocation_SouthWest\",\n        \"value\": \"ImPlotLocation_South | ImPlotLocation_West\"\n      },\n      {\n        \"calc_value\": 10,\n        \"name\": \"ImPlotLocation_SouthEast\",\n        \"value\": \"ImPlotLocation_South | ImPlotLocation_East\"\n      }\n    ],\n    \"ImPlotMarker_\": [\n      {\n        \"calc_value\": -1,\n        \"name\": \"ImPlotMarker_None\",\n        \"value\": \"-1\"\n      },\n      {\n        \"calc_value\": 0,\n        \"name\": \"ImPlotMarker_Circle\",\n        \"value\": \"0\"\n      },\n      {\n        \"calc_value\": 1,\n        \"name\": \"ImPlotMarker_Square\",\n        \"value\": \"1\"\n      },\n      {\n        \"calc_value\": 2,\n        \"name\": \"ImPlotMarker_Diamond\",\n        \"value\": \"2\"\n      },\n      {\n        \"calc_value\": 3,\n        \"name\": \"ImPlotMarker_Up\",\n        \"value\": \"3\"\n      },\n      {\n        \"calc_value\": 4,\n        \"name\": \"ImPlotMarker_Down\",\n        \"value\": \"4\"\n      },\n      {\n        \"calc_value\": 5,\n        \"name\": \"ImPlotMarker_Left\",\n        \"value\": \"5\"\n      },\n      {\n        \"calc_value\": 6,\n        \"name\": \"ImPlotMarker_Right\",\n        \"value\": \"6\"\n      },\n      {\n        \"calc_value\": 7,\n        \"name\": \"ImPlotMarker_Cross\",\n        \"value\": \"7\"\n      },\n      {\n        \"calc_value\": 8,\n        \"name\": \"ImPlotMarker_Plus\",\n        \"value\": \"8\"\n      },\n      {\n        \"calc_value\": 9,\n        \"name\": \"ImPlotMarker_Asterisk\",\n        \"value\": \"9\"\n      },\n      {\n        \"calc_value\": 10,\n        \"name\": \"ImPlotMarker_COUNT\",\n        \"value\": \"10\"\n      }\n    ],\n    \"ImPlotMouseTextFlags_\": [\n      {\n        \"calc_value\": 0,\n        \"name\": \"ImPlotMouseTextFlags_None\",\n        \"value\": \"0\"\n      },\n      {\n        \"calc_value\": 1,\n        \"name\": \"ImPlotMouseTextFlags_NoAuxAxes\",\n        \"value\": \"1 << 0\"\n      },\n      {\n        \"calc_value\": 2,\n        \"name\": \"ImPlotMouseTextFlags_NoFormat\",\n        \"value\": \"1 << 1\"\n      },\n      {\n        \"calc_value\": 4,\n        \"name\": \"ImPlotMouseTextFlags_ShowAlways\",\n        \"value\": \"1 << 2\"\n      }\n    ],\n    \"ImPlotPieChartFlags_\": [\n      {\n        \"calc_value\": 0,\n        \"name\": \"ImPlotPieChartFlags_None\",\n        \"value\": \"0\"\n      },\n      {\n        \"calc_value\": 1024,\n        \"name\": \"ImPlotPieChartFlags_Normalize\",\n        \"value\": \"1 << 10\"\n      }\n    ],\n    \"ImPlotScale_\": [\n      {\n        \"calc_value\": 0,\n        \"name\": \"ImPlotScale_Linear\",\n        \"value\": \"0\"\n      },\n      {\n        \"calc_value\": 1,\n        \"name\": \"ImPlotScale_Time\",\n        \"value\": \"1\"\n      },\n      {\n        \"calc_value\": 2,\n        \"name\": \"ImPlotScale_Log10\",\n        \"value\": \"2\"\n      },\n      {\n        \"calc_value\": 3,\n        \"name\": \"ImPlotScale_SymLog\",\n        \"value\": \"3\"\n      }\n    ],\n    \"ImPlotScatterFlags_\": [\n      {\n        \"calc_value\": 0,\n        \"name\": \"ImPlotScatterFlags_None\",\n        \"value\": \"0\"\n      },\n      {\n        \"calc_value\": 1024,\n        \"name\": \"ImPlotScatterFlags_NoClip\",\n        \"value\": \"1 << 10\"\n      }\n    ],\n    \"ImPlotShadedFlags_\": [\n      {\n        \"calc_value\": 0,\n        \"name\": \"ImPlotShadedFlags_None\",\n        \"value\": \"0\"\n      }\n    ],\n    \"ImPlotStairsFlags_\": [\n      {\n        \"calc_value\": 0,\n        \"name\": \"ImPlotStairsFlags_None\",\n        \"value\": \"0\"\n      },\n      {\n        \"calc_value\": 1024,\n        \"name\": \"ImPlotStairsFlags_PreStep\",\n        \"value\": \"1 << 10\"\n      },\n      {\n        \"calc_value\": 2048,\n        \"name\": \"ImPlotStairsFlags_Shaded\",\n        \"value\": \"1 << 11\"\n      }\n    ],\n    \"ImPlotStemsFlags_\": [\n      {\n        \"calc_value\": 0,\n        \"name\": \"ImPlotStemsFlags_None\",\n        \"value\": \"0\"\n      },\n      {\n        \"calc_value\": 1024,\n        \"name\": \"ImPlotStemsFlags_Horizontal\",\n        \"value\": \"1 << 10\"\n      }\n    ],\n    \"ImPlotStyleVar_\": [\n      {\n        \"calc_value\": 0,\n        \"name\": \"ImPlotStyleVar_LineWeight\",\n        \"value\": \"0\"\n      },\n      {\n        \"calc_value\": 1,\n        \"name\": \"ImPlotStyleVar_Marker\",\n        \"value\": \"1\"\n      },\n      {\n        \"calc_value\": 2,\n        \"name\": \"ImPlotStyleVar_MarkerSize\",\n        \"value\": \"2\"\n      },\n      {\n        \"calc_value\": 3,\n        \"name\": \"ImPlotStyleVar_MarkerWeight\",\n        \"value\": \"3\"\n      },\n      {\n        \"calc_value\": 4,\n        \"name\": \"ImPlotStyleVar_FillAlpha\",\n        \"value\": \"4\"\n      },\n      {\n        \"calc_value\": 5,\n        \"name\": \"ImPlotStyleVar_ErrorBarSize\",\n        \"value\": \"5\"\n      },\n      {\n        \"calc_value\": 6,\n        \"name\": \"ImPlotStyleVar_ErrorBarWeight\",\n        \"value\": \"6\"\n      },\n      {\n        \"calc_value\": 7,\n        \"name\": \"ImPlotStyleVar_DigitalBitHeight\",\n        \"value\": \"7\"\n      },\n      {\n        \"calc_value\": 8,\n        \"name\": \"ImPlotStyleVar_DigitalBitGap\",\n        \"value\": \"8\"\n      },\n      {\n        \"calc_value\": 9,\n        \"name\": \"ImPlotStyleVar_PlotBorderSize\",\n        \"value\": \"9\"\n      },\n      {\n        \"calc_value\": 10,\n        \"name\": \"ImPlotStyleVar_MinorAlpha\",\n        \"value\": \"10\"\n      },\n      {\n        \"calc_value\": 11,\n        \"name\": \"ImPlotStyleVar_MajorTickLen\",\n        \"value\": \"11\"\n      },\n      {\n        \"calc_value\": 12,\n        \"name\": \"ImPlotStyleVar_MinorTickLen\",\n        \"value\": \"12\"\n      },\n      {\n        \"calc_value\": 13,\n        \"name\": \"ImPlotStyleVar_MajorTickSize\",\n        \"value\": \"13\"\n      },\n      {\n        \"calc_value\": 14,\n        \"name\": \"ImPlotStyleVar_MinorTickSize\",\n        \"value\": \"14\"\n      },\n      {\n        \"calc_value\": 15,\n        \"name\": \"ImPlotStyleVar_MajorGridSize\",\n        \"value\": \"15\"\n      },\n      {\n        \"calc_value\": 16,\n        \"name\": \"ImPlotStyleVar_MinorGridSize\",\n        \"value\": \"16\"\n      },\n      {\n        \"calc_value\": 17,\n        \"name\": \"ImPlotStyleVar_PlotPadding\",\n        \"value\": \"17\"\n      },\n      {\n        \"calc_value\": 18,\n        \"name\": \"ImPlotStyleVar_LabelPadding\",\n        \"value\": \"18\"\n      },\n      {\n        \"calc_value\": 19,\n        \"name\": \"ImPlotStyleVar_LegendPadding\",\n        \"value\": \"19\"\n      },\n      {\n        \"calc_value\": 20,\n        \"name\": \"ImPlotStyleVar_LegendInnerPadding\",\n        \"value\": \"20\"\n      },\n      {\n        \"calc_value\": 21,\n        \"name\": \"ImPlotStyleVar_LegendSpacing\",\n        \"value\": \"21\"\n      },\n      {\n        \"calc_value\": 22,\n        \"name\": \"ImPlotStyleVar_MousePosPadding\",\n        \"value\": \"22\"\n      },\n      {\n        \"calc_value\": 23,\n        \"name\": \"ImPlotStyleVar_AnnotationPadding\",\n        \"value\": \"23\"\n      },\n      {\n        \"calc_value\": 24,\n        \"name\": \"ImPlotStyleVar_FitPadding\",\n        \"value\": \"24\"\n      },\n      {\n        \"calc_value\": 25,\n        \"name\": \"ImPlotStyleVar_PlotDefaultSize\",\n        \"value\": \"25\"\n      },\n      {\n        \"calc_value\": 26,\n        \"name\": \"ImPlotStyleVar_PlotMinSize\",\n        \"value\": \"26\"\n      },\n      {\n        \"calc_value\": 27,\n        \"name\": \"ImPlotStyleVar_COUNT\",\n        \"value\": \"27\"\n      }\n    ],\n    \"ImPlotSubplotFlags_\": [\n      {\n        \"calc_value\": 0,\n        \"name\": \"ImPlotSubplotFlags_None\",\n        \"value\": \"0\"\n      },\n      {\n        \"calc_value\": 1,\n        \"name\": \"ImPlotSubplotFlags_NoTitle\",\n        \"value\": \"1 << 0\"\n      },\n      {\n        \"calc_value\": 2,\n        \"name\": \"ImPlotSubplotFlags_NoLegend\",\n        \"value\": \"1 << 1\"\n      },\n      {\n        \"calc_value\": 4,\n        \"name\": \"ImPlotSubplotFlags_NoMenus\",\n        \"value\": \"1 << 2\"\n      },\n      {\n        \"calc_value\": 8,\n        \"name\": \"ImPlotSubplotFlags_NoResize\",\n        \"value\": \"1 << 3\"\n      },\n      {\n        \"calc_value\": 16,\n        \"name\": \"ImPlotSubplotFlags_NoAlign\",\n        \"value\": \"1 << 4\"\n      },\n      {\n        \"calc_value\": 32,\n        \"name\": \"ImPlotSubplotFlags_ShareItems\",\n        \"value\": \"1 << 5\"\n      },\n      {\n        \"calc_value\": 64,\n        \"name\": \"ImPlotSubplotFlags_LinkRows\",\n        \"value\": \"1 << 6\"\n      },\n      {\n        \"calc_value\": 128,\n        \"name\": \"ImPlotSubplotFlags_LinkCols\",\n        \"value\": \"1 << 7\"\n      },\n      {\n        \"calc_value\": 256,\n        \"name\": \"ImPlotSubplotFlags_LinkAllX\",\n        \"value\": \"1 << 8\"\n      },\n      {\n        \"calc_value\": 512,\n        \"name\": \"ImPlotSubplotFlags_LinkAllY\",\n        \"value\": \"1 << 9\"\n      },\n      {\n        \"calc_value\": 1024,\n        \"name\": \"ImPlotSubplotFlags_ColMajor\",\n        \"value\": \"1 << 10\"\n      }\n    ],\n    \"ImPlotTextFlags_\": [\n      {\n        \"calc_value\": 0,\n        \"name\": \"ImPlotTextFlags_None\",\n        \"value\": \"0\"\n      },\n      {\n        \"calc_value\": 1024,\n        \"name\": \"ImPlotTextFlags_Vertical\",\n        \"value\": \"1 << 10\"\n      }\n    ],\n    \"ImPlotTimeFmt_\": [\n      {\n        \"calc_value\": 0,\n        \"name\": \"ImPlotTimeFmt_None\",\n        \"value\": \"0\"\n      },\n      {\n        \"calc_value\": 1,\n        \"name\": \"ImPlotTimeFmt_Us\",\n        \"value\": \"1\"\n      },\n      {\n        \"calc_value\": 2,\n        \"name\": \"ImPlotTimeFmt_SUs\",\n        \"value\": \"2\"\n      },\n      {\n        \"calc_value\": 3,\n        \"name\": \"ImPlotTimeFmt_SMs\",\n        \"value\": \"3\"\n      },\n      {\n        \"calc_value\": 4,\n        \"name\": \"ImPlotTimeFmt_S\",\n        \"value\": \"4\"\n      },\n      {\n        \"calc_value\": 5,\n        \"name\": \"ImPlotTimeFmt_MinSMs\",\n        \"value\": \"5\"\n      },\n      {\n        \"calc_value\": 6,\n        \"name\": \"ImPlotTimeFmt_HrMinSMs\",\n        \"value\": \"6\"\n      },\n      {\n        \"calc_value\": 7,\n        \"name\": \"ImPlotTimeFmt_HrMinS\",\n        \"value\": \"7\"\n      },\n      {\n        \"calc_value\": 8,\n        \"name\": \"ImPlotTimeFmt_HrMin\",\n        \"value\": \"8\"\n      },\n      {\n        \"calc_value\": 9,\n        \"name\": \"ImPlotTimeFmt_Hr\",\n        \"value\": \"9\"\n      }\n    ],\n    \"ImPlotTimeUnit_\": [\n      {\n        \"calc_value\": 0,\n        \"name\": \"ImPlotTimeUnit_Us\",\n        \"value\": \"0\"\n      },\n      {\n        \"calc_value\": 1,\n        \"name\": \"ImPlotTimeUnit_Ms\",\n        \"value\": \"1\"\n      },\n      {\n        \"calc_value\": 2,\n        \"name\": \"ImPlotTimeUnit_S\",\n        \"value\": \"2\"\n      },\n      {\n        \"calc_value\": 3,\n        \"name\": \"ImPlotTimeUnit_Min\",\n        \"value\": \"3\"\n      },\n      {\n        \"calc_value\": 4,\n        \"name\": \"ImPlotTimeUnit_Hr\",\n        \"value\": \"4\"\n      },\n      {\n        \"calc_value\": 5,\n        \"name\": \"ImPlotTimeUnit_Day\",\n        \"value\": \"5\"\n      },\n      {\n        \"calc_value\": 6,\n        \"name\": \"ImPlotTimeUnit_Mo\",\n        \"value\": \"6\"\n      },\n      {\n        \"calc_value\": 7,\n        \"name\": \"ImPlotTimeUnit_Yr\",\n        \"value\": \"7\"\n      },\n      {\n        \"calc_value\": 8,\n        \"name\": \"ImPlotTimeUnit_COUNT\",\n        \"value\": \"8\"\n      }\n    ]\n  },\n  \"enumtypes\": [],\n  \"locations\": {\n    \"Formatter_Time_Data\": \"implot_internal:1649\",\n    \"ImAxis_\": \"implot:116\",\n    \"ImPlotAlignmentData\": \"implot_internal:920\",\n    \"ImPlotAnnotation\": \"implot_internal:433\",\n    \"ImPlotAnnotationCollection\": \"implot_internal:448\",\n    \"ImPlotAxis\": \"implot_internal:628\",\n    \"ImPlotAxisFlags_\": \"implot:146\",\n    \"ImPlotBarGroupsFlags_\": \"implot:264\",\n    \"ImPlotBarsFlags_\": \"implot:258\",\n    \"ImPlotBin_\": \"implot:459\",\n    \"ImPlotCol_\": \"implot:340\",\n    \"ImPlotColormapData\": \"implot_internal:323\",\n    \"ImPlotColormapScaleFlags_\": \"implot:215\",\n    \"ImPlotColormap_\": \"implot:426\",\n    \"ImPlotCond_\": \"implot:332\",\n    \"ImPlotContext\": \"implot_internal:1205\",\n    \"ImPlotDateFmt_\": \"implot_internal:249\",\n    \"ImPlotDateTimeSpec\": \"implot_internal:282\",\n    \"ImPlotDigitalFlags_\": \"implot:311\",\n    \"ImPlotDragToolFlags_\": \"implot:206\",\n    \"ImPlotDummyFlags_\": \"implot:327\",\n    \"ImPlotErrorBarsFlags_\": \"implot:271\",\n    \"ImPlotFlags_\": \"implot:130\",\n    \"ImPlotHeatmapFlags_\": \"implot:295\",\n    \"ImPlotHistogramFlags_\": \"implot:301\",\n    \"ImPlotImageFlags_\": \"implot:316\",\n    \"ImPlotInfLinesFlags_\": \"implot:283\",\n    \"ImPlotInputMap\": \"implot:556\",\n    \"ImPlotItem\": \"implot_internal:943\",\n    \"ImPlotItemFlags_\": \"implot:223\",\n    \"ImPlotItemGroup\": \"implot_internal:990\",\n    \"ImPlotLegend\": \"implot_internal:966\",\n    \"ImPlotLegendFlags_\": \"implot:186\",\n    \"ImPlotLineFlags_\": \"implot:230\",\n    \"ImPlotLocation_\": \"implot:446\",\n    \"ImPlotMarker_\": \"implot:410\",\n    \"ImPlotMouseTextFlags_\": \"implot:198\",\n    \"ImPlotNextItemData\": \"implot_internal:1176\",\n    \"ImPlotNextPlotData\": \"implot_internal:1154\",\n    \"ImPlotPieChartFlags_\": \"implot:289\",\n    \"ImPlotPlot\": \"implot_internal:1013\",\n    \"ImPlotPoint\": \"implot:467\",\n    \"ImPlotPointError\": \"implot_internal:425\",\n    \"ImPlotRange\": \"implot:481\",\n    \"ImPlotRect\": \"implot:491\",\n    \"ImPlotScale_\": \"implot:402\",\n    \"ImPlotScatterFlags_\": \"implot:240\",\n    \"ImPlotShadedFlags_\": \"implot:253\",\n    \"ImPlotStairsFlags_\": \"implot:246\",\n    \"ImPlotStemsFlags_\": \"implot:277\",\n    \"ImPlotStyle\": \"implot:505\",\n    \"ImPlotStyleVar_\": \"implot:368\",\n    \"ImPlotSubplot\": \"implot_internal:1118\",\n    \"ImPlotSubplotFlags_\": \"implot:170\",\n    \"ImPlotTag\": \"implot_internal:487\",\n    \"ImPlotTagCollection\": \"implot_internal:495\",\n    \"ImPlotTextFlags_\": \"implot:321\",\n    \"ImPlotTick\": \"implot_internal:536\",\n    \"ImPlotTicker\": \"implot_internal:558\",\n    \"ImPlotTime\": \"implot_internal:297\",\n    \"ImPlotTimeFmt_\": \"implot_internal:258\",\n    \"ImPlotTimeUnit_\": \"implot_internal:237\"\n  },\n  \"structs\": {\n    \"Formatter_Time_Data\": [\n      {\n        \"name\": \"Time\",\n        \"type\": \"ImPlotTime\"\n      },\n      {\n        \"name\": \"Spec\",\n        \"type\": \"ImPlotDateTimeSpec\"\n      },\n      {\n        \"name\": \"UserFormatter\",\n        \"type\": \"ImPlotFormatter\"\n      },\n      {\n        \"name\": \"UserFormatterData\",\n        \"type\": \"void*\"\n      }\n    ],\n    \"ImPlotAlignmentData\": [\n      {\n        \"name\": \"Vertical\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"PadA\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"PadB\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"PadAMax\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"PadBMax\",\n        \"type\": \"float\"\n      }\n    ],\n    \"ImPlotAnnotation\": [\n      {\n        \"name\": \"Pos\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"Offset\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"ColorBg\",\n        \"type\": \"ImU32\"\n      },\n      {\n        \"name\": \"ColorFg\",\n        \"type\": \"ImU32\"\n      },\n      {\n        \"name\": \"TextOffset\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"Clamp\",\n        \"type\": \"bool\"\n      }\n    ],\n    \"ImPlotAnnotationCollection\": [\n      {\n        \"name\": \"Annotations\",\n        \"template_type\": \"ImPlotAnnotation\",\n        \"type\": \"ImVector_ImPlotAnnotation\"\n      },\n      {\n        \"name\": \"TextBuffer\",\n        \"type\": \"ImGuiTextBuffer\"\n      },\n      {\n        \"name\": \"Size\",\n        \"type\": \"int\"\n      }\n    ],\n    \"ImPlotAxis\": [\n      {\n        \"name\": \"ID\",\n        \"type\": \"ImGuiID\"\n      },\n      {\n        \"name\": \"Flags\",\n        \"type\": \"ImPlotAxisFlags\"\n      },\n      {\n        \"name\": \"PreviousFlags\",\n        \"type\": \"ImPlotAxisFlags\"\n      },\n      {\n        \"name\": \"Range\",\n        \"type\": \"ImPlotRange\"\n      },\n      {\n        \"name\": \"RangeCond\",\n        \"type\": \"ImPlotCond\"\n      },\n      {\n        \"name\": \"Scale\",\n        \"type\": \"ImPlotScale\"\n      },\n      {\n        \"name\": \"FitExtents\",\n        \"type\": \"ImPlotRange\"\n      },\n      {\n        \"name\": \"OrthoAxis\",\n        \"type\": \"ImPlotAxis*\"\n      },\n      {\n        \"name\": \"ConstraintRange\",\n        \"type\": \"ImPlotRange\"\n      },\n      {\n        \"name\": \"ConstraintZoom\",\n        \"type\": \"ImPlotRange\"\n      },\n      {\n        \"name\": \"Ticker\",\n        \"type\": \"ImPlotTicker\"\n      },\n      {\n        \"name\": \"Formatter\",\n        \"type\": \"ImPlotFormatter\"\n      },\n      {\n        \"name\": \"FormatterData\",\n        \"type\": \"void*\"\n      },\n      {\n        \"name\": \"FormatSpec[16]\",\n        \"size\": 16,\n        \"type\": \"char\"\n      },\n      {\n        \"name\": \"Locator\",\n        \"type\": \"ImPlotLocator\"\n      },\n      {\n        \"name\": \"LinkedMin\",\n        \"type\": \"double*\"\n      },\n      {\n        \"name\": \"LinkedMax\",\n        \"type\": \"double*\"\n      },\n      {\n        \"name\": \"PickerLevel\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"PickerTimeMin\",\n        \"type\": \"ImPlotTime\"\n      },\n      {\n        \"name\": \"PickerTimeMax\",\n        \"type\": \"ImPlotTime\"\n      },\n      {\n        \"name\": \"TransformForward\",\n        \"type\": \"ImPlotTransform\"\n      },\n      {\n        \"name\": \"TransformInverse\",\n        \"type\": \"ImPlotTransform\"\n      },\n      {\n        \"name\": \"TransformData\",\n        \"type\": \"void*\"\n      },\n      {\n        \"name\": \"PixelMin\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"PixelMax\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"ScaleMin\",\n        \"type\": \"double\"\n      },\n      {\n        \"name\": \"ScaleMax\",\n        \"type\": \"double\"\n      },\n      {\n        \"name\": \"ScaleToPixel\",\n        \"type\": \"double\"\n      },\n      {\n        \"name\": \"Datum1\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"Datum2\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"HoverRect\",\n        \"type\": \"ImRect\"\n      },\n      {\n        \"name\": \"LabelOffset\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"ColorMaj\",\n        \"type\": \"ImU32\"\n      },\n      {\n        \"name\": \"ColorMin\",\n        \"type\": \"ImU32\"\n      },\n      {\n        \"name\": \"ColorTick\",\n        \"type\": \"ImU32\"\n      },\n      {\n        \"name\": \"ColorTxt\",\n        \"type\": \"ImU32\"\n      },\n      {\n        \"name\": \"ColorBg\",\n        \"type\": \"ImU32\"\n      },\n      {\n        \"name\": \"ColorHov\",\n        \"type\": \"ImU32\"\n      },\n      {\n        \"name\": \"ColorAct\",\n        \"type\": \"ImU32\"\n      },\n      {\n        \"name\": \"ColorHiLi\",\n        \"type\": \"ImU32\"\n      },\n      {\n        \"name\": \"Enabled\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"Vertical\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"FitThisFrame\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"HasRange\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"HasFormatSpec\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"ShowDefaultTicks\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"Hovered\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"Held\",\n        \"type\": \"bool\"\n      }\n    ],\n    \"ImPlotColormapData\": [\n      {\n        \"name\": \"Keys\",\n        \"template_type\": \"ImU32\",\n        \"type\": \"ImVector_ImU32\"\n      },\n      {\n        \"name\": \"KeyCounts\",\n        \"template_type\": \"int\",\n        \"type\": \"ImVector_int\"\n      },\n      {\n        \"name\": \"KeyOffsets\",\n        \"template_type\": \"int\",\n        \"type\": \"ImVector_int\"\n      },\n      {\n        \"name\": \"Tables\",\n        \"template_type\": \"ImU32\",\n        \"type\": \"ImVector_ImU32\"\n      },\n      {\n        \"name\": \"TableSizes\",\n        \"template_type\": \"int\",\n        \"type\": \"ImVector_int\"\n      },\n      {\n        \"name\": \"TableOffsets\",\n        \"template_type\": \"int\",\n        \"type\": \"ImVector_int\"\n      },\n      {\n        \"name\": \"Text\",\n        \"type\": \"ImGuiTextBuffer\"\n      },\n      {\n        \"name\": \"TextOffsets\",\n        \"template_type\": \"int\",\n        \"type\": \"ImVector_int\"\n      },\n      {\n        \"name\": \"Quals\",\n        \"template_type\": \"bool\",\n        \"type\": \"ImVector_bool\"\n      },\n      {\n        \"name\": \"Map\",\n        \"type\": \"ImGuiStorage\"\n      },\n      {\n        \"name\": \"Count\",\n        \"type\": \"int\"\n      }\n    ],\n    \"ImPlotContext\": [\n      {\n        \"name\": \"Plots\",\n        \"template_type\": \"ImPlotPlot\",\n        \"type\": \"ImPool_ImPlotPlot\"\n      },\n      {\n        \"name\": \"Subplots\",\n        \"template_type\": \"ImPlotSubplot\",\n        \"type\": \"ImPool_ImPlotSubplot\"\n      },\n      {\n        \"name\": \"CurrentPlot\",\n        \"type\": \"ImPlotPlot*\"\n      },\n      {\n        \"name\": \"CurrentSubplot\",\n        \"type\": \"ImPlotSubplot*\"\n      },\n      {\n        \"name\": \"CurrentItems\",\n        \"type\": \"ImPlotItemGroup*\"\n      },\n      {\n        \"name\": \"CurrentItem\",\n        \"type\": \"ImPlotItem*\"\n      },\n      {\n        \"name\": \"PreviousItem\",\n        \"type\": \"ImPlotItem*\"\n      },\n      {\n        \"name\": \"CTicker\",\n        \"type\": \"ImPlotTicker\"\n      },\n      {\n        \"name\": \"Annotations\",\n        \"type\": \"ImPlotAnnotationCollection\"\n      },\n      {\n        \"name\": \"Tags\",\n        \"type\": \"ImPlotTagCollection\"\n      },\n      {\n        \"name\": \"ChildWindowMade\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"Style\",\n        \"type\": \"ImPlotStyle\"\n      },\n      {\n        \"name\": \"ColorModifiers\",\n        \"template_type\": \"ImGuiColorMod\",\n        \"type\": \"ImVector_ImGuiColorMod\"\n      },\n      {\n        \"name\": \"StyleModifiers\",\n        \"template_type\": \"ImGuiStyleMod\",\n        \"type\": \"ImVector_ImGuiStyleMod\"\n      },\n      {\n        \"name\": \"ColormapData\",\n        \"type\": \"ImPlotColormapData\"\n      },\n      {\n        \"name\": \"ColormapModifiers\",\n        \"template_type\": \"ImPlotColormap\",\n        \"type\": \"ImVector_ImPlotColormap\"\n      },\n      {\n        \"name\": \"Tm\",\n        \"type\": \"tm\"\n      },\n      {\n        \"name\": \"TempDouble1\",\n        \"template_type\": \"double\",\n        \"type\": \"ImVector_double\"\n      },\n      {\n        \"name\": \"TempDouble2\",\n        \"template_type\": \"double\",\n        \"type\": \"ImVector_double\"\n      },\n      {\n        \"name\": \"TempInt1\",\n        \"template_type\": \"int\",\n        \"type\": \"ImVector_int\"\n      },\n      {\n        \"name\": \"DigitalPlotItemCnt\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"DigitalPlotOffset\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"NextPlotData\",\n        \"type\": \"ImPlotNextPlotData\"\n      },\n      {\n        \"name\": \"NextItemData\",\n        \"type\": \"ImPlotNextItemData\"\n      },\n      {\n        \"name\": \"InputMap\",\n        \"type\": \"ImPlotInputMap\"\n      },\n      {\n        \"name\": \"OpenContextThisFrame\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"MousePosStringBuilder\",\n        \"type\": \"ImGuiTextBuffer\"\n      },\n      {\n        \"name\": \"SortItems\",\n        \"type\": \"ImPlotItemGroup*\"\n      },\n      {\n        \"name\": \"AlignmentData\",\n        \"template_type\": \"ImPlotAlignmentData\",\n        \"type\": \"ImPool_ImPlotAlignmentData\"\n      },\n      {\n        \"name\": \"CurrentAlignmentH\",\n        \"type\": \"ImPlotAlignmentData*\"\n      },\n      {\n        \"name\": \"CurrentAlignmentV\",\n        \"type\": \"ImPlotAlignmentData*\"\n      }\n    ],\n    \"ImPlotDateTimeSpec\": [\n      {\n        \"name\": \"Date\",\n        \"type\": \"ImPlotDateFmt\"\n      },\n      {\n        \"name\": \"Time\",\n        \"type\": \"ImPlotTimeFmt\"\n      },\n      {\n        \"name\": \"UseISO8601\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"Use24HourClock\",\n        \"type\": \"bool\"\n      }\n    ],\n    \"ImPlotInputMap\": [\n      {\n        \"name\": \"Pan\",\n        \"type\": \"ImGuiMouseButton\"\n      },\n      {\n        \"name\": \"PanMod\",\n        \"type\": \"ImGuiModFlags\"\n      },\n      {\n        \"name\": \"Fit\",\n        \"type\": \"ImGuiMouseButton\"\n      },\n      {\n        \"name\": \"Select\",\n        \"type\": \"ImGuiMouseButton\"\n      },\n      {\n        \"name\": \"SelectCancel\",\n        \"type\": \"ImGuiMouseButton\"\n      },\n      {\n        \"name\": \"SelectMod\",\n        \"type\": \"ImGuiModFlags\"\n      },\n      {\n        \"name\": \"SelectHorzMod\",\n        \"type\": \"ImGuiModFlags\"\n      },\n      {\n        \"name\": \"SelectVertMod\",\n        \"type\": \"ImGuiModFlags\"\n      },\n      {\n        \"name\": \"Menu\",\n        \"type\": \"ImGuiMouseButton\"\n      },\n      {\n        \"name\": \"OverrideMod\",\n        \"type\": \"ImGuiModFlags\"\n      },\n      {\n        \"name\": \"ZoomMod\",\n        \"type\": \"ImGuiModFlags\"\n      },\n      {\n        \"name\": \"ZoomRate\",\n        \"type\": \"float\"\n      }\n    ],\n    \"ImPlotItem\": [\n      {\n        \"name\": \"ID\",\n        \"type\": \"ImGuiID\"\n      },\n      {\n        \"name\": \"Color\",\n        \"type\": \"ImU32\"\n      },\n      {\n        \"name\": \"LegendHoverRect\",\n        \"type\": \"ImRect\"\n      },\n      {\n        \"name\": \"NameOffset\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"Show\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"LegendHovered\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"SeenThisFrame\",\n        \"type\": \"bool\"\n      }\n    ],\n    \"ImPlotItemGroup\": [\n      {\n        \"name\": \"ID\",\n        \"type\": \"ImGuiID\"\n      },\n      {\n        \"name\": \"Legend\",\n        \"type\": \"ImPlotLegend\"\n      },\n      {\n        \"name\": \"ItemPool\",\n        \"template_type\": \"ImPlotItem\",\n        \"type\": \"ImPool_ImPlotItem\"\n      },\n      {\n        \"name\": \"ColormapIdx\",\n        \"type\": \"int\"\n      }\n    ],\n    \"ImPlotLegend\": [\n      {\n        \"name\": \"Flags\",\n        \"type\": \"ImPlotLegendFlags\"\n      },\n      {\n        \"name\": \"PreviousFlags\",\n        \"type\": \"ImPlotLegendFlags\"\n      },\n      {\n        \"name\": \"Location\",\n        \"type\": \"ImPlotLocation\"\n      },\n      {\n        \"name\": \"PreviousLocation\",\n        \"type\": \"ImPlotLocation\"\n      },\n      {\n        \"name\": \"Indices\",\n        \"template_type\": \"int\",\n        \"type\": \"ImVector_int\"\n      },\n      {\n        \"name\": \"Labels\",\n        \"type\": \"ImGuiTextBuffer\"\n      },\n      {\n        \"name\": \"Rect\",\n        \"type\": \"ImRect\"\n      },\n      {\n        \"name\": \"Hovered\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"Held\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"CanGoInside\",\n        \"type\": \"bool\"\n      }\n    ],\n    \"ImPlotNextItemData\": [\n      {\n        \"name\": \"Colors[5]\",\n        \"size\": 5,\n        \"type\": \"ImVec4\"\n      },\n      {\n        \"name\": \"LineWeight\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"Marker\",\n        \"type\": \"ImPlotMarker\"\n      },\n      {\n        \"name\": \"MarkerSize\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"MarkerWeight\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"FillAlpha\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"ErrorBarSize\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"ErrorBarWeight\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"DigitalBitHeight\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"DigitalBitGap\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"RenderLine\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"RenderFill\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"RenderMarkerLine\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"RenderMarkerFill\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"HasHidden\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"Hidden\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"HiddenCond\",\n        \"type\": \"ImPlotCond\"\n      }\n    ],\n    \"ImPlotNextPlotData\": [\n      {\n        \"name\": \"RangeCond[ImAxis_COUNT]\",\n        \"size\": 6,\n        \"type\": \"ImPlotCond\"\n      },\n      {\n        \"name\": \"Range[ImAxis_COUNT]\",\n        \"size\": 6,\n        \"type\": \"ImPlotRange\"\n      },\n      {\n        \"name\": \"HasRange[ImAxis_COUNT]\",\n        \"size\": 6,\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"Fit[ImAxis_COUNT]\",\n        \"size\": 6,\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"LinkedMin[ImAxis_COUNT]\",\n        \"size\": 6,\n        \"type\": \"double*\"\n      },\n      {\n        \"name\": \"LinkedMax[ImAxis_COUNT]\",\n        \"size\": 6,\n        \"type\": \"double*\"\n      }\n    ],\n    \"ImPlotPlot\": [\n      {\n        \"name\": \"ID\",\n        \"type\": \"ImGuiID\"\n      },\n      {\n        \"name\": \"Flags\",\n        \"type\": \"ImPlotFlags\"\n      },\n      {\n        \"name\": \"PreviousFlags\",\n        \"type\": \"ImPlotFlags\"\n      },\n      {\n        \"name\": \"MouseTextLocation\",\n        \"type\": \"ImPlotLocation\"\n      },\n      {\n        \"name\": \"MouseTextFlags\",\n        \"type\": \"ImPlotMouseTextFlags\"\n      },\n      {\n        \"name\": \"Axes[ImAxis_COUNT]\",\n        \"size\": 6,\n        \"type\": \"ImPlotAxis\"\n      },\n      {\n        \"name\": \"TextBuffer\",\n        \"type\": \"ImGuiTextBuffer\"\n      },\n      {\n        \"name\": \"Items\",\n        \"type\": \"ImPlotItemGroup\"\n      },\n      {\n        \"name\": \"CurrentX\",\n        \"type\": \"ImAxis\"\n      },\n      {\n        \"name\": \"CurrentY\",\n        \"type\": \"ImAxis\"\n      },\n      {\n        \"name\": \"FrameRect\",\n        \"type\": \"ImRect\"\n      },\n      {\n        \"name\": \"CanvasRect\",\n        \"type\": \"ImRect\"\n      },\n      {\n        \"name\": \"PlotRect\",\n        \"type\": \"ImRect\"\n      },\n      {\n        \"name\": \"AxesRect\",\n        \"type\": \"ImRect\"\n      },\n      {\n        \"name\": \"SelectRect\",\n        \"type\": \"ImRect\"\n      },\n      {\n        \"name\": \"SelectStart\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"TitleOffset\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"JustCreated\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"Initialized\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"SetupLocked\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"FitThisFrame\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"Hovered\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"Held\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"Selecting\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"Selected\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"ContextLocked\",\n        \"type\": \"bool\"\n      }\n    ],\n    \"ImPlotPoint\": [\n      {\n        \"name\": \"x\",\n        \"type\": \"double\"\n      },\n      {\n        \"name\": \"y\",\n        \"type\": \"double\"\n      }\n    ],\n    \"ImPlotPointError\": [\n      {\n        \"name\": \"X\",\n        \"type\": \"double\"\n      },\n      {\n        \"name\": \"Y\",\n        \"type\": \"double\"\n      },\n      {\n        \"name\": \"Neg\",\n        \"type\": \"double\"\n      },\n      {\n        \"name\": \"Pos\",\n        \"type\": \"double\"\n      }\n    ],\n    \"ImPlotRange\": [\n      {\n        \"name\": \"Min\",\n        \"type\": \"double\"\n      },\n      {\n        \"name\": \"Max\",\n        \"type\": \"double\"\n      }\n    ],\n    \"ImPlotRect\": [\n      {\n        \"name\": \"X\",\n        \"type\": \"ImPlotRange\"\n      },\n      {\n        \"name\": \"Y\",\n        \"type\": \"ImPlotRange\"\n      }\n    ],\n    \"ImPlotStyle\": [\n      {\n        \"name\": \"LineWeight\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"Marker\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"MarkerSize\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"MarkerWeight\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"FillAlpha\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"ErrorBarSize\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"ErrorBarWeight\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"DigitalBitHeight\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"DigitalBitGap\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"PlotBorderSize\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"MinorAlpha\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"MajorTickLen\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"MinorTickLen\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"MajorTickSize\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"MinorTickSize\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"MajorGridSize\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"MinorGridSize\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"PlotPadding\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"LabelPadding\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"LegendPadding\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"LegendInnerPadding\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"LegendSpacing\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"MousePosPadding\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"AnnotationPadding\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"FitPadding\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"PlotDefaultSize\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"PlotMinSize\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"Colors[ImPlotCol_COUNT]\",\n        \"size\": 21,\n        \"type\": \"ImVec4\"\n      },\n      {\n        \"name\": \"Colormap\",\n        \"type\": \"ImPlotColormap\"\n      },\n      {\n        \"name\": \"UseLocalTime\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"UseISO8601\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"Use24HourClock\",\n        \"type\": \"bool\"\n      }\n    ],\n    \"ImPlotSubplot\": [\n      {\n        \"name\": \"ID\",\n        \"type\": \"ImGuiID\"\n      },\n      {\n        \"name\": \"Flags\",\n        \"type\": \"ImPlotSubplotFlags\"\n      },\n      {\n        \"name\": \"PreviousFlags\",\n        \"type\": \"ImPlotSubplotFlags\"\n      },\n      {\n        \"name\": \"Items\",\n        \"type\": \"ImPlotItemGroup\"\n      },\n      {\n        \"name\": \"Rows\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"Cols\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"CurrentIdx\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"FrameRect\",\n        \"type\": \"ImRect\"\n      },\n      {\n        \"name\": \"GridRect\",\n        \"type\": \"ImRect\"\n      },\n      {\n        \"name\": \"CellSize\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"RowAlignmentData\",\n        \"template_type\": \"ImPlotAlignmentData\",\n        \"type\": \"ImVector_ImPlotAlignmentData\"\n      },\n      {\n        \"name\": \"ColAlignmentData\",\n        \"template_type\": \"ImPlotAlignmentData\",\n        \"type\": \"ImVector_ImPlotAlignmentData\"\n      },\n      {\n        \"name\": \"RowRatios\",\n        \"template_type\": \"float\",\n        \"type\": \"ImVector_float\"\n      },\n      {\n        \"name\": \"ColRatios\",\n        \"template_type\": \"float\",\n        \"type\": \"ImVector_float\"\n      },\n      {\n        \"name\": \"RowLinkData\",\n        \"template_type\": \"ImPlotRange\",\n        \"type\": \"ImVector_ImPlotRange\"\n      },\n      {\n        \"name\": \"ColLinkData\",\n        \"template_type\": \"ImPlotRange\",\n        \"type\": \"ImVector_ImPlotRange\"\n      },\n      {\n        \"name\": \"TempSizes[2]\",\n        \"size\": 2,\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"FrameHovered\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"HasTitle\",\n        \"type\": \"bool\"\n      }\n    ],\n    \"ImPlotTag\": [\n      {\n        \"name\": \"Axis\",\n        \"type\": \"ImAxis\"\n      },\n      {\n        \"name\": \"Value\",\n        \"type\": \"double\"\n      },\n      {\n        \"name\": \"ColorBg\",\n        \"type\": \"ImU32\"\n      },\n      {\n        \"name\": \"ColorFg\",\n        \"type\": \"ImU32\"\n      },\n      {\n        \"name\": \"TextOffset\",\n        \"type\": \"int\"\n      }\n    ],\n    \"ImPlotTagCollection\": [\n      {\n        \"name\": \"Tags\",\n        \"template_type\": \"ImPlotTag\",\n        \"type\": \"ImVector_ImPlotTag\"\n      },\n      {\n        \"name\": \"TextBuffer\",\n        \"type\": \"ImGuiTextBuffer\"\n      },\n      {\n        \"name\": \"Size\",\n        \"type\": \"int\"\n      }\n    ],\n    \"ImPlotTick\": [\n      {\n        \"name\": \"PlotPos\",\n        \"type\": \"double\"\n      },\n      {\n        \"name\": \"PixelPos\",\n        \"type\": \"float\"\n      },\n      {\n        \"name\": \"LabelSize\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"TextOffset\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"Major\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"ShowLabel\",\n        \"type\": \"bool\"\n      },\n      {\n        \"name\": \"Level\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"Idx\",\n        \"type\": \"int\"\n      }\n    ],\n    \"ImPlotTicker\": [\n      {\n        \"name\": \"Ticks\",\n        \"template_type\": \"ImPlotTick\",\n        \"type\": \"ImVector_ImPlotTick\"\n      },\n      {\n        \"name\": \"TextBuffer\",\n        \"type\": \"ImGuiTextBuffer\"\n      },\n      {\n        \"name\": \"MaxSize\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"LateSize\",\n        \"type\": \"ImVec2\"\n      },\n      {\n        \"name\": \"Levels\",\n        \"type\": \"int\"\n      }\n    ],\n    \"ImPlotTime\": [\n      {\n        \"name\": \"S\",\n        \"type\": \"time_t\"\n      },\n      {\n        \"name\": \"Us\",\n        \"type\": \"int\"\n      }\n    ]\n  }\n}"
  },
  {
    "path": "tools/ImGui.NET/CodeGenerator/definitions/cimplot/variants.json",
    "content": "﻿{\n}"
  },
  {
    "path": "tools/ImGui.NET/LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2017 Eric Mellino and ImGui.NET contributors\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "tools/ImGui.NET/README",
    "content": "JitterDemo is using a slightly modified version of the ImGUI.NET\nsource code generator to generate a native wrapper for cimgui.\n\nDerived from\n\ncommit 7cea5ef042aa7302346340653f6cf5de55dd87ec\n(HEAD -> master, tag: v1.89.4, origin/master, origin/HEAD)\n"
  },
  {
    "path": "tools/ImGui.NET/cimgui/mingw-w64-x86_64.cmake",
    "content": "# Derived from\n# https://gist.github.com/peterspackman/8cf73f7f12ba270aa8192d6911972fe8\n# \n# Sample toolchain file for building for Windows from an Ubuntu Linux system.\n#\n# Typical usage:\n#    *) install cross compiler: `sudo apt-get install mingw-w64`\n#    *) cd build\n#    *) cmake -DCMAKE_TOOLCHAIN_FILE=~/mingw-w64-x86_64.cmake ..\n# This is free and unencumbered software released into the public domain.\n\n# cimgui\n#  git clone --recursive https://github.com/cimgui/cimgui.git\n#  cd cimgui\n#  mkdir build; cd build\n#  cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_TOOLCHAIN_FILE=~/mingw-w64-x86_64.cmake ..\n#  cmake --build .\n\nset(CMAKE_SYSTEM_NAME Windows)\nset(TOOLCHAIN_PREFIX x86_64-w64-mingw32)  # 64bit\n# set(TOOLCHAIN_PREFIX i686-w64-mingw32)  # 32bit\n\n#set(TOOLCHAIN_SUFFIX \"-win32\")\n\n# cross compilers to use for C, C++ and Fortran\nset(CMAKE_C_COMPILER ${TOOLCHAIN_PREFIX}-gcc${TOOLCHAIN_SUFFIX})\nset(CMAKE_CXX_COMPILER ${TOOLCHAIN_PREFIX}-g++${TOOLCHAIN_SUFFIX})\nset(CMAKE_Fortran_COMPILER ${TOOLCHAIN_PREFIX}-gfortran${TOOLCHAIN_SUFFIX})\nset(CMAKE_RC_COMPILER ${TOOLCHAIN_PREFIX}-windres${TOOLCHAIN_SUFFIX})\n\n# target environment on the build host system\nset(CMAKE_FIND_ROOT_PATH /usr/${TOOLCHAIN_PREFIX})\n\n# modify default behavior of FIND_XXX() commands\nset(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)\nset(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)\nset(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)\n\n#set(CMAKE_CXX_STANDARD_LIBRARIES \"-static-libgcc -static-libstdc++ -lwsock32 -lws2_32 ${CMAKE_CXX_STANDARD_LIBRARIES}\")\n#set(CMAKE_EXE_LINKER_FLAGS \"${CMAKE_EXE_LINKER_FLAGS} -Wl,-Bstatic,--whole-archive -lwinpthread -Wl,--no-whole-archive\")\n#set(CMAKE_C_FLAGS \"-static ${CMAKE_C_FLAGS}\")\n\n# otherwise we get nasty dependencies\nset(CMAKE_SHARED_LINKER_FLAGS \"-static-libgcc -static-libstdc++\")\n\n"
  }
]