[
  {
    "path": ".bazelignore",
    "content": "# -*- mode: gitignore; -*-\n# vi: set ft=gitignore:\n\n#\n# .bazelignore\n# RVO2-3D Library\n#\n# SPDX-FileCopyrightText: 2008 University of North Carolina at Chapel Hill\n# SPDX-License-Identifier: Apache-2.0\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#\n#     https://www.apache.org/licenses/LICENSE-2.0\n#\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# Please send all bug reports to <geom@cs.unc.edu>.\n#\n# The authors may be contacted via:\n#\n# Jur van den Berg, Stephen J. Guy, Jamie Snape, Ming C. Lin, Dinesh Manocha\n# Dept. of Computer Science\n# 201 S. Columbia St.\n# Frederick P. Brooks, Jr. Computer Science Bldg.\n# Chapel Hill, N.C. 27599-3175\n# United States of America\n#\n# <https://gamma.cs.unc.edu/RVO2/>\n#\n\n_build/\n.github/\n.idea/\n.reuse/\ncmake-build-*/\n"
  },
  {
    "path": ".bazelrc",
    "content": "#\n# .bazelrc\n# RVO2-3D Library\n#\n# SPDX-FileCopyrightText: 2008 University of North Carolina at Chapel Hill\n# SPDX-License-Identifier: Apache-2.0\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#\n#     https://www.apache.org/licenses/LICENSE-2.0\n#\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# Please send all bug reports to <geom@cs.unc.edu>.\n#\n# The authors may be contacted via:\n#\n# Jur van den Berg, Stephen J. Guy, Jamie Snape, Ming C. Lin, Dinesh Manocha\n# Dept. of Computer Science\n# 201 S. Columbia St.\n# Frederick P. Brooks, Jr. Computer Science Bldg.\n# Chapel Hill, N.C. 27599-3175\n# United States of America\n#\n# <https://gamma.cs.unc.edu/RVO2/>\n#\n\nbuild --force_pic=true\nbuild --remote_upload_local_results=false\nbuild --sandbox_default_allow_network=false\n\nbuild:macos --apple_generate_dsym=true\nbuild:macos --apple_crosstool_top=@local_config_apple_cc//:toolchain\nbuild:macos --apple_platform_type=macos\n\ncommon --enable_platform_specific_config=true\ncommon --heap_dump_on_oom=true\n\ntest --test_verbose_timeout_warnings=true\n\ntry-import %workspace%/.user.bazelrc\n"
  },
  {
    "path": ".bazelversion",
    "content": "9.x\n"
  },
  {
    "path": ".bazelversion.license",
    "content": ".bazelversion\nRVO2-3D Library\n\nSPDX-FileCopyrightText: 2008 University of North Carolina at Chapel Hill\nSPDX-License-Identifier: Apache-2.0\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    https://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n\nPlease send all bug reports to <geom@cs.unc.edu>.\n\nThe authors may be contacted via:\n\nJur van den Berg, Stephen J. Guy, Jamie Snape, Ming C. Lin, Dinesh Manocha\nDept. of Computer Science\n201 S. Columbia St.\nFrederick P. Brooks, Jr. Computer Science Bldg.\nChapel Hill, N.C. 27599-3175\nUnited States of America\n\n<https://gamma.cs.unc.edu/RVO2/>\n"
  },
  {
    "path": ".buildifier.json",
    "content": "{\n  \"type\": \"auto\",\n  \"mode\": \"fix\",\n  \"lint\": \"fix\",\n  \"warningsList\": [\n    \"all\"\n  ]\n}\n"
  },
  {
    "path": ".buildifier.json.license",
    "content": ".buildifier.json\nRVO2-3D Library\n\nSPDX-FileCopyrightText: 2008 University of North Carolina at Chapel Hill\nSPDX-License-Identifier: Apache-2.0\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    https://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n\nPlease send all bug reports to <geom@cs.unc.edu>.\n\nThe authors may be contacted via:\n\nJur van den Berg, Stephen J. Guy, Jamie Snape, Ming C. Lin, Dinesh Manocha\nDept. of Computer Science\n201 S. Columbia St.\nFrederick P. Brooks, Jr. Computer Science Bldg.\nChapel Hill, N.C. 27599-3175\nUnited States of America\n\n<https://gamma.cs.unc.edu/RVO2/>\n"
  },
  {
    "path": ".clang-format",
    "content": "# -*- mode: yaml; -*-\n# vi: set ft=yaml:\n\n#\n# .clang-format\n# RVO2-3D Library\n#\n# SPDX-FileCopyrightText: 2008 University of North Carolina at Chapel Hill\n# SPDX-License-Identifier: Apache-2.0\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#\n#     https://www.apache.org/licenses/LICENSE-2.0\n#\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# Please send all bug reports to <geom@cs.unc.edu>.\n#\n# The authors may be contacted via:\n#\n# Jur van den Berg, Stephen J. Guy, Jamie Snape, Ming C. Lin, Dinesh Manocha\n# Dept. of Computer Science\n# 201 S. Columbia St.\n# Frederick P. Brooks, Jr. Computer Science Bldg.\n# Chapel Hill, N.C. 27599-3175\n# United States of America\n#\n# <https://gamma.cs.unc.edu/RVO2/>\n#\n\n---\nBasedOnStyle: Google\nPointerAlignment: Right\n"
  },
  {
    "path": ".clang-tidy",
    "content": "# -*- mode: yaml; -*-\n# vi: set ft=yaml:\n\n#\n# .clang-tidy\n# RVO2-3D Library\n#\n# SPDX-FileCopyrightText: 2008 University of North Carolina at Chapel Hill\n# SPDX-License-Identifier: Apache-2.0\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#\n#     https://www.apache.org/licenses/LICENSE-2.0\n#\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# Please send all bug reports to <geom@cs.unc.edu>.\n#\n# The authors may be contacted via:\n#\n# Jur van den Berg, Stephen J. Guy, Jamie Snape, Ming C. Lin, Dinesh Manocha\n# Dept. of Computer Science\n# 201 S. Columbia St.\n# Frederick P. Brooks, Jr. Computer Science Bldg.\n# Chapel Hill, N.C. 27599-3175\n# United States of America\n#\n# <https://gamma.cs.unc.edu/RVO2/>\n#\n\n---\nChecks: >\n  bugprone-*,\n  cert-*,\n  clang-analyzer-*,\n  clang-diagnostic-*,\n  cppcoreguidelines-*,\n  google-*,\n  misc-*,\n  openmp-*,\n  performance-*,\n  portability-*,\n  readability-*,\n  -bugprone-easily-swappable-parameters,\n  -bugprone-exception-escape,\n  -bugprone-narrowing-conversions,\n  -cppcoreguidelines-avoid-magic-numbers,\n  -cppcoreguidelines-narrowing-conversions,\n  -cppcoreguidelines-pro-bounds-constant-array-index,\n  -cppcoreguidelines-pro-bounds-pointer-arithmetic,\n  -misc-no-recursion,\n  -readability-identifier-length,\n  -readability-magic-numbers\n\nCheckOptions:\n  - key: misc-non-private-member-variables-in-classes.IgnoreClassesWithAllMemberVariablesBeingPublic\n    value: 1\n\nFormatStyle: file\n\nHeaderFilterRegex: '.*'\n\nWarningsAsErrors: '*'\n"
  },
  {
    "path": ".devcontainer/devcontainer.json",
    "content": "{\n  \"name\": \"RVO2-3D\",\n  \"customizations\": {\n    \"vscode\": {\n      \"extensions\": [\n        \"bazelbuild.vscode-bazel\",\n        \"editorconfig.editorconfig\",\n        \"ms-vscode.cmake-tools\",\n        \"ms-vscode.cpptools\",\n        \"ms-vscode.vscode-markdown-notebook\",\n        \"ms-vscode-remote.remote-containers\",\n        \"redhat.vscode-yaml\"\n      ],\n      \"settings\": {\n        \"cmake.buildDirectory\": \"${workspaceFolder}/_build\",\n        \"cmake.preferredGenerators\": [\n          \"Ninja Multi-Config\",\n          \"Ninja\"\n        ]\n      }\n    }\n  },\n  \"containerUser\": \"ubuntu\",\n  \"dockerComposeFile\": \"../compose.yaml\",\n  \"overrideCommand\": true,\n  \"service\": \"dev\",\n  \"workspaceFolder\": \"/workspace\"\n}\n"
  },
  {
    "path": ".devcontainer/devcontainer.json.license",
    "content": "devcontainer.json\nRVO2-3D Library\n\nSPDX-FileCopyrightText: 2008 University of North Carolina at Chapel Hill\nSPDX-License-Identifier: Apache-2.0\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    https://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n\nPlease send all bug reports to <geom@cs.unc.edu>.\n\nThe authors may be contacted via:\n\nJur van den Berg, Stephen J. Guy, Jamie Snape, Ming C. Lin, Dinesh Manocha\nDept. of Computer Science\n201 S. Columbia St.\nFrederick P. Brooks, Jr. Computer Science Bldg.\nChapel Hill, N.C. 27599-3175\nUnited States of America\n\n<https://gamma.cs.unc.edu/RVO2/>\n"
  },
  {
    "path": ".dockerignore",
    "content": "# -*- mode: gitignore; -*-\n# vi: set ft=gitignore:\n\n#\n# .dockerignore\n# RVO2-3D Library\n#\n# SPDX-FileCopyrightText: 2008 University of North Carolina at Chapel Hill\n# SPDX-License-Identifier: Apache-2.0\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#\n#     https://www.apache.org/licenses/LICENSE-2.0\n#\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# Please send all bug reports to <geom@cs.unc.edu>.\n#\n# The authors may be contacted via:\n#\n# Jur van den Berg, Stephen J. Guy, Jamie Snape, Ming C. Lin, Dinesh Manocha\n# Dept. of Computer Science\n# 201 S. Columbia St.\n# Frederick P. Brooks, Jr. Computer Science Bldg.\n# Chapel Hill, N.C. 27599-3175\n# United States of America\n#\n# <https://gamma.cs.unc.edu/RVO2/>\n#\n\n_build/\n.idea/\n.user.bazelrc\nbazel-*\ncmake-build-*/\nCMakeUserPresets.json\n"
  },
  {
    "path": ".editorconfig",
    "content": "# -*- mode: editorconfig; -*-\n# vi: set ft=editorconfig:\n\n#\n# .editorconfig\n# RVO2-3D Library\n#\n# SPDX-FileCopyrightText: 2008 University of North Carolina at Chapel Hill\n# SPDX-License-Identifier: Apache-2.0\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#\n#     https://www.apache.org/licenses/LICENSE-2.0\n#\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# Please send all bug reports to <geom@cs.unc.edu>.\n#\n# The authors may be contacted via:\n#\n# Jur van den Berg, Stephen J. Guy, Jamie Snape, Ming C. Lin, Dinesh Manocha\n# Dept. of Computer Science\n# 201 S. Columbia St.\n# Frederick P. Brooks, Jr. Computer Science Bldg.\n# Chapel Hill, N.C. 27599-3175\n# United States of America\n#\n# <https://gamma.cs.unc.edu/RVO2/>\n#\n\nroot = true\n\n[*]\ncharset = utf-8\nend_of_line = lf\nindent_size = 2\nindent_style = space\ninsert_final_newline = true\nmax_line_length = 80\ntrim_trailing_whitespace = true\n\n[*.bazel]\nindent_size = 4\n\n[*.md]\ntrim_trailing_whitespace = false\n\n[.bazelignore]\nindent_size = 4\n\n[.bazelrc]\nindent_size = 4\n\n[Brewfile]\nindent_size = 4\n\n[dep5]\nindent_size = 1\n"
  },
  {
    "path": ".gitattributes",
    "content": "# -*- mode: gitattributes; -*-\n# vi: set ft=gitattributes:\n\n#\n# .gitattributes\n# RVO2-3D Library\n#\n# SPDX-FileCopyrightText: 2008 University of North Carolina at Chapel Hill\n# SPDX-License-Identifier: Apache-2.0\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#\n#     https://www.apache.org/licenses/LICENSE-2.0\n#\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# Please send all bug reports to <geom@cs.unc.edu>.\n#\n# The authors may be contacted via:\n#\n# Jur van den Berg, Stephen J. Guy, Jamie Snape, Ming C. Lin, Dinesh Manocha\n# Dept. of Computer Science\n# 201 S. Columbia St.\n# Frederick P. Brooks, Jr. Computer Science Bldg.\n# Chapel Hill, N.C. 27599-3175\n# United States of America\n#\n# <https://gamma.cs.unc.edu/RVO2/>\n#\n\n[attr]whitespace-0   whitespace=tab-in-indent,trailing-space\n[attr]whitespace-1   whitespace=tab-in-indent,tabwidth=1,trailing-space\n[attr]whitespace-2   whitespace=tab-in-indent,tabwidth=2,trailing-space\n[attr]whitespace-4   whitespace=tab-in-indent,tabwidth=4,trailing-space\n[attr]whitespace-md  whitespace=-blank-at-eol,blank-at-eof,tab-in-indent\n\n*                    text=auto\n\n*.bazel              text diff=python linguist-language=starlark whitespace-4\n*.cc                 text diff=cpp linguist-language=c++ whitespace-2\n*.cff                text linguist-documentation whitespace-2\n*.cfg                text whitespace-2\n*.cmake              text whitespace-2\n*.cmake.in           text whitespace-2\n*.css                text diff=css linguist-documentation whitespace=trailing-space\n*.h                  text diff=cpp linguist-language=c++ whitespace-2\n*.html               text diff=html linguist-documentation whitespace=trailing-space\n*.imp                text linguist-language=json whitespace-2\n*.json               text whitespace-2\n*.license            text linguist-documentation whitespace-0\n*.md                 text diff=markdown whitespace-md\n*.pc.in              text whitespace-2\n*.txt                text\n*.xml                text\n*.yaml               text whitespace-2\n*.yml                text whitespace-2\n\n.bazelignore         text whitespace-4\n.bazelrc             text whitespace-4\n.bazelversion        text whitespace-4\n.clang-format        text whitespace-2\n.clang-tidy          text whitespace-2\n.dockerignore        text whitespace-2\n.editorconfig        text whitespace-2\n.gitattributes       text export-ignore whitespace-2\n.gitignore           text export-ignore whitespace-2\n.zenodo.json         export-ignore linguist-documentation\nBrewfile             text diff=ruby export-ignore whitespace-4\nCMakeLists.txt       whitespace-2\nCODEOWNERS           text whitespace-2\ndep5                 text linguist-documentation whitespace-1\nDockerfile           text whitespace-2\nLICENSE              text linguist-documentation linguist-vendored whitespace-0\nREADME.md            linguist-documentation\nrequirements.txt     whitespace-2\ntriggers             whitespace-0\n\n.github/**           export-ignore\n.github/**/*.md      linguist-documentation\nLICENSES/**/*.txt    linguist-documentation linguist-vendored whitespace-0\n"
  },
  {
    "path": ".github/CODEOWNERS",
    "content": "# -*- mode: gitignore; -*-\n# vi: set ft=gitignore:\n\n#\n# CODEOWNERS\n# RVO2-3D Library\n#\n# SPDX-FileCopyrightText: 2008 University of North Carolina at Chapel Hill\n# SPDX-License-Identifier: Apache-2.0\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#\n#     https://www.apache.org/licenses/LICENSE-2.0\n#\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# Please send all bug reports to <geom@cs.unc.edu>.\n#\n# The authors may be contacted via:\n#\n# Jur van den Berg, Stephen J. Guy, Jamie Snape, Ming C. Lin, Dinesh Manocha\n# Dept. of Computer Science\n# 201 S. Columbia St.\n# Frederick P. Brooks, Jr. Computer Science Bldg.\n# Chapel Hill, N.C. 27599-3175\n# United States of America\n#\n# <https://gamma.cs.unc.edu/RVO2/>\n#\n\n*  @snape\n"
  },
  {
    "path": ".github/CODE_OF_CONDUCT.md",
    "content": "<!--\nCODE_OF_CONDUCT.md\nRVO2-3D Library\n\nSPDX-FileCopyrightText: 2014 Coraline Ada Ehmke\nSPDX-License-Identifier: CC-BY-4.0\n\nCreative Commons Attribution 4.0 International Public License\n\nYou are free to:\n\n* Share -- copy and redistribute the material in any medium or format\n\n* Adapt -- remix, transform, and build upon the material for any purpose, even\n  commercially.\n\nThe licensor cannot revoke these freedoms as long as you follow the license\nterms.\n\nUnder the following terms:\n\n* Attribution -- You must give appropriate credit, provide a link to the\n  license, and indicate if changes were made. You may do so in any reasonable\n  manner, but not in any way that suggests the licensor endorses you or your\n  use.\n\n* No additional restrictions -- You may not apply legal terms or technological\n  measures that legally restrict others from doing anything the license\n  permits.\n\nNotices:\n\n* You do not have to comply with the license for elements of the material in\n  the public domain or where your use is permitted by an applicable exception\n  or limitation.\n\n* No warranties are given. The license may not give you all of the permissions\n  necessary for your intended use. For example, other rights such as publicity,\n  privacy, or moral rights may limit how you use the material.\n-->\n\n# Contributor Covenant Code of Conduct\n\n## Our Pledge\n\nWe as members, contributors, and leaders pledge to make participation in our\ncommunity a harassment-free experience for everyone, regardless of age, body\nsize, visible or invisible disability, ethnicity, sex characteristics, gender\nidentity and expression, level of experience, education, socio-economic status,\nnationality, personal appearance, race, caste, color, religion, or sexual\nidentity and orientation.\n\nWe pledge to act and interact in ways that contribute to an open, welcoming,\ndiverse, inclusive, and healthy community.\n\n## Our Standards\n\nExamples of behavior that contributes to a positive environment for our\ncommunity include:\n\n* Demonstrating empathy and kindness toward other people\n* Being respectful of differing opinions, viewpoints, and experiences\n* Giving and gracefully accepting constructive feedback\n* Accepting responsibility and apologizing to those affected by our mistakes,\n  and learning from the experience\n* Focusing on what is best not just for us as individuals, but for the overall\n  community\n\nExamples of unacceptable behavior include:\n\n* The use of sexualized language or imagery, and sexual attention or advances\n  of any kind\n* Trolling, insulting or derogatory comments, and personal or political attacks\n* Public or private harassment\n* Publishing others' private information, such as a physical or email address,\n  without their explicit permission\n* Other conduct which could reasonably be considered inappropriate in a\n  professional setting\n\n## Enforcement Responsibilities\n\nCommunity leaders are responsible for clarifying and enforcing our standards of\nacceptable behavior and will take appropriate and fair corrective action in\nresponse to any behavior that they deem inappropriate, threatening, offensive,\nor harmful.\n\nCommunity leaders have the right and responsibility to remove, edit, or reject\ncomments, commits, code, wiki edits, issues, and other contributions that are\nnot aligned to this Code of Conduct, and will communicate reasons for\nmoderation decisions when appropriate.\n\n## Scope\n\nThis Code of Conduct applies within all community spaces, and also applies when\nan individual is officially representing the community in public spaces.\nExamples of representing our community include using an official e-mail\naddress, posting via an official social media account, or acting as an\nappointed representative at an online or offline event.\n\n## Enforcement\n\nInstances of abusive, harassing, or otherwise unacceptable behavior may be\nreported to the community leaders responsible for enforcement. All complaints\nwill be reviewed and investigated promptly and fairly.\n\nAll community leaders are obligated to respect the privacy and security of the\nreporter of any incident.\n\n## Enforcement Guidelines\n\nCommunity leaders will follow these Community Impact Guidelines in determining\nthe consequences for any action they deem in violation of this Code of Conduct:\n\n### 1. Correction\n\n**Community Impact**: Use of inappropriate language or other behavior deemed\nunprofessional or unwelcome in the community.\n\n**Consequence**: A private, written warning from community leaders, providing\nclarity around the nature of the violation and an explanation of why the\nbehavior was inappropriate. A public apology may be requested.\n\n### 2. Warning\n\n**Community Impact**: A violation through a single incident or series of\nactions.\n\n**Consequence**: A warning with consequences for continued behavior. No\ninteraction with the people involved, including unsolicited interaction with\nthose enforcing the Code of Conduct, for a specified period of time. This\nincludes avoiding interactions in community spaces as well as external channels\nlike social media. Violating these terms may lead to a temporary or permanent\nban.\n\n### 3. Temporary Ban\n\n**Community Impact**: A serious violation of community standards, including\nsustained inappropriate behavior.\n\n**Consequence**: A temporary ban from any sort of interaction or public\ncommunication with the community for a specified period of time. No public or\nprivate interaction with the people involved, including unsolicited interaction\nwith those enforcing the Code of Conduct, is allowed during this period.\nViolating these terms may lead to a permanent ban.\n\n### 4. Permanent Ban\n\n**Community Impact**: Demonstrating a pattern of violation of community\nstandards, including sustained inappropriate behavior, harassment of an\nindividual, or aggression toward or disparagement of classes of individuals.\n\n**Consequence**: A permanent ban from any sort of public interaction within the\ncommunity.\n\n## Attribution\n\nThis Code of Conduct is adapted from the\n[Contributor Covenant](https://www.contributor-covenant.org), version 2.1,\navailable at\n<https://www.contributor-covenant.org/version/2/1/code_of_conduct.html>.\nCommunity Impact Guidelines were inspired by\n[Mozilla's code of conduct enforcement ladder](https://github.com/mozilla/diversity).\n\nFor answers to common questions about this code of conduct, see the FAQ at\n<https://www.contributor-covenant.org/faq>. Translations are available at\n<https://www.contributor-covenant.org/translations>.\n"
  },
  {
    "path": ".github/SECURITY.md",
    "content": "<!--\nSECURITY.md\nRVO2-3D Library\n\nSPDX-FileCopyrightText: 2008 University of North Carolina at Chapel Hill\nSPDX-License-Identifier: CC-BY-SA-4.0\n\nCreative Commons Attribution-ShareAlike 4.0 International Public License\n\nYou are free to:\n\n* Share -- copy and redistribute the material in any medium or format\n\n* ShareAlike -- If you remix, transform, or build upon the material, you must\n  distribute your contributions under the same license as the original\n\n* Adapt -- remix, transform, and build upon the material for any purpose, even\n  commercially.\n\nThe licensor cannot revoke these freedoms as long as you follow the license\nterms.\n\nUnder the following terms:\n\n* Attribution -- You must give appropriate credit, provide a link to the\n  license, and indicate if changes were made. You may do so in any reasonable\n  manner, but not in any way that suggests the licensor endorses you or your\n  use.\n\n* No additional restrictions -- You may not apply legal terms or technological\n  measures that legally restrict others from doing anything the license\n  permits.\n\nNotices:\n\n* You do not have to comply with the license for elements of the material in\n  the public domain or where your use is permitted by an applicable exception\n  or limitation.\n\n* No warranties are given. The license may not give you all of the permissions\n  necessary for your intended use. For example, other rights such as publicity,\n  privacy, or moral rights may limit how you use the material.\n\nPlease send all bug reports to <geom@cs.unc.edu>.\n\nThe authors may be contacted via:\n\nJur van den Berg, Stephen J. Guy, Jamie Snape, Ming C. Lin, Dinesh Manocha\nDept. of Computer Science\n201 S. Columbia St.\nFrederick P. Brooks, Jr. Computer Science Bldg.\nChapel Hill, N.C. 27599-3175\nUnited States of America\n\n<https://gamma.cs.unc.edu/RVO2/>\n-->\n\n# Security Policy\n\n## Supported Versions\n\nThe current release will be supported with security updates when practical.\n\n## Reporting a Vulnerability\n\nPlease send all vulnerability reports to\n[geom@cs.unc.edu](mailto:geom@cs.unc.edu).\n\nThe authors may be contacted via:\n\nJur van den Berg, Stephen J. Guy, Jamie Snape, Ming C. Lin, Dinesh Manocha  \nDept. of Computer Science  \n201 S. Columbia St.  \nFrederick P. Brooks, Jr. Computer Science Bldg.  \nChapel Hill, N.C. 27599-3175  \nUnited States of America\n\n<https://gamma.cs.unc.edu/RVO2/>\n"
  },
  {
    "path": ".github/SUPPORT.md",
    "content": "<!--\nSUPPORT.md\nRVO2-3D Library\n\nSPDX-FileCopyrightText: 2008 University of North Carolina at Chapel Hill\nSPDX-License-Identifier: CC-BY-SA-4.0\n\nCreative Commons Attribution-ShareAlike 4.0 International Public License\n\nYou are free to:\n\n* Share -- copy and redistribute the material in any medium or format\n\n* ShareAlike -- If you remix, transform, or build upon the material, you must\n  distribute your contributions under the same license as the original\n\n* Adapt -- remix, transform, and build upon the material for any purpose, even\n  commercially.\n\nThe licensor cannot revoke these freedoms as long as you follow the license\nterms.\n\nUnder the following terms:\n\n* Attribution -- You must give appropriate credit, provide a link to the\n  license, and indicate if changes were made. You may do so in any reasonable\n  manner, but not in any way that suggests the licensor endorses you or your\n  use.\n\n* No additional restrictions -- You may not apply legal terms or technological\n  measures that legally restrict others from doing anything the license\n  permits.\n\nNotices:\n\n* You do not have to comply with the license for elements of the material in\n  the public domain or where your use is permitted by an applicable exception\n  or limitation.\n\n* No warranties are given. The license may not give you all of the permissions\n  necessary for your intended use. For example, other rights such as publicity,\n  privacy, or moral rights may limit how you use the material.\n\nPlease send all bug reports to <geom@cs.unc.edu>.\n\nThe authors may be contacted via:\n\nJur van den Berg, Stephen J. Guy, Jamie Snape, Ming C. Lin, Dinesh Manocha\nDept. of Computer Science\n201 S. Columbia St.\nFrederick P. Brooks, Jr. Computer Science Bldg.\nChapel Hill, N.C. 27599-3175\nUnited States of America\n\n<https://gamma.cs.unc.edu/RVO2/>\n-->\n\n# Support Resources\n\nPlease send all bug reports to [geom@cs.unc.edu](mailto:geom@cs.unc.edu).\n\nThe authors may be contacted via:\n\nJur van den Berg, Stephen J. Guy, Jamie Snape, Ming C. Lin, Dinesh Manocha  \nDept. of Computer Science  \n201 S. Columbia St.  \nFrederick P. Brooks, Jr. Computer Science Bldg.  \nChapel Hill, N.C. 27599-3175  \nUnited States of America\n\n<https://gamma.cs.unc.edu/RVO2/>\n"
  },
  {
    "path": ".github/workflows/ci.yml",
    "content": "#\n# ci.yml\n# RVO2-3D Library\n#\n# SPDX-FileCopyrightText: 2008 University of North Carolina at Chapel Hill\n# SPDX-License-Identifier: Apache-2.0\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#\n#     https://www.apache.org/licenses/LICENSE-2.0\n#\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# Please send all bug reports to <geom@cs.unc.edu>.\n#\n# The authors may be contacted via:\n#\n# Jur van den Berg, Stephen J. Guy, Jamie Snape, Ming C. Lin, Dinesh Manocha\n# Dept. of Computer Science\n# 201 S. Columbia St.\n# Frederick P. Brooks, Jr. Computer Science Bldg.\n# Chapel Hill, N.C. 27599-3175\n# United States of America\n#\n# <https://gamma.cs.unc.edu/RVO2/>\n#\n\n---\nname: ci\n\non:  # yamllint disable-line rule:truthy\n  push:\n    branches:\n      - main\n  pull_request:\n    branches:\n      - main\n  schedule:\n    - cron: '0 5 * * *'\n\njobs:\n  bazel-almalinux:\n    name: bazel almalinux amd64\n    runs-on: ubuntu-latest\n    container: almalinux:10\n    steps:\n      - name: setup\n        run: |\n          dnf makecache -q --refresh || (sleep 15; dnf makecache -q --refresh)\n          dnf upgrade -q -y\n          dnf install -q -y \\\n            ca-certificates \\\n            gcc-c++ \\\n            git \\\n            python3 \\\n            wget \\\n            which\n          dnf clean all\n          rm -rf /var/cache/yum\n          wget -qO /usr/local/bin/bazelisk \\\n            https://github.com/bazelbuild/bazelisk/releases/latest/download/bazelisk-linux-amd64\n          chmod +x /usr/local/bin/bazelisk\n          ln -s /usr/local/bin/bazelisk /usr/local/bin/bazel\n        shell: bash\n      - name: checkout\n        uses: actions/checkout@v6\n      - name: build test package\n        run: bazel test --flaky_test_attempts=3 ...\n        shell: bash\n\n  bazel-alpine:\n    name: bazel alpine linux amd64\n    runs-on: ubuntu-latest\n    container: alpine:3\n    steps:\n      - name: setup\n        run: |\n          apk upgrade -q --no-cache\n          apk add -q --no-cache \\\n            ca-certificates \\\n            g++ \\\n            git \\\n            libc6-compat \\\n            python3 \\\n            wget \\\n            which\n          wget -qO /usr/local/bin/bazelisk \\\n            https://github.com/bazelbuild/bazelisk/releases/latest/download/bazelisk-linux-amd64\n          chmod +x /usr/local/bin/bazelisk\n          ln -s /usr/local/bin/bazelisk /usr/local/bin/bazel\n        shell: sh\n      - name: checkout\n        uses: actions/checkout@v6\n      # - name: build test package\n      #   run: bazel test --flaky_test_attempts=3 ...\n      #   shell: sh\n\n  bazel-arch:\n    name: bazel arch linux amd64\n    runs-on: ubuntu-latest\n    container: archlinux:latest\n    steps:\n      - name: setup\n        run: |\n          pacman --needed --noconfirm --noprogressbar -S -u -y \\\n            ca-certificates \\\n            gcc \\\n            git \\\n            python \\\n            wget \\\n            which\n          rm -rf \\\n            /var/cache/pacman/pkg/* \\\n            /var/lib/pacman/sync/*\n          wget -qO /usr/local/bin/bazelisk \\\n            https://github.com/bazelbuild/bazelisk/releases/latest/download/bazelisk-linux-amd64\n          chmod +x /usr/local/bin/bazelisk\n          ln -s /usr/local/bin/bazelisk /usr/local/bin/bazel\n        shell: bash\n      - name: checkout\n        uses: actions/checkout@v6\n      - name: build test package\n        run: bazel test --flaky_test_attempts=3 ...\n        shell: bash\n\n  bazel-fedora:\n    name: bazel fedora linux amd64\n    runs-on: ubuntu-latest\n    container: fedora:44\n    steps:\n      - name: setup\n        run: |\n          dnf makecache -q --refresh || (sleep 15; dnf makecache -q --refresh)\n          dnf upgrade -q -y\n          dnf install -q -y \\\n            ca-certificates \\\n            gcc-c++ \\\n            git \\\n            python3 \\\n            wget \\\n            which\n          dnf clean all\n          rm -rf /var/cache/yum\n          wget -qO /usr/local/bin/bazelisk \\\n            https://github.com/bazelbuild/bazelisk/releases/latest/download/bazelisk-linux-amd64\n          chmod +x /usr/local/bin/bazelisk\n          ln -s /usr/local/bin/bazelisk /usr/local/bin/bazel\n        shell: bash\n      - name: checkout\n        uses: actions/checkout@v6\n      - name: build test package\n        run: bazel test --flaky_test_attempts=3 ...\n        shell: bash\n\n  bazel-macos:\n    name: bazel macos arm64\n    runs-on: macos-15\n    steps:\n      - name: checkout\n        uses: actions/checkout@v6\n      - name: setup\n        run: |\n          brew update -q\n          brew bundle install -q\n          brew cleanup -q -s\n          rm -rf $(brew --cache)\n        env:\n          HOMEBREW_NO_ANALYTICS: 1\n          HOMEBREW_NO_AUTO_UPDATE: 1\n          HOMEBREW_NO_INSTALL_CLEANUP: 1\n        shell: zsh -efuo pipefail {0}\n      - name: build test package\n        run: bazel test --flaky_test_attempts=3 ...\n        shell: zsh -efuo pipefail {0}\n\n  bazel-opensuse:\n    name: bazel opensuse leap amd64\n    runs-on: ubuntu-latest\n    container: opensuse/leap:16.0\n    steps:\n      - name: setup\n        run: |\n          zypper -n -q ref || (sleep 15; zypper -n -q ref)\n          zypper -n -q up\n          zypper -n -q in --no-recommends \\\n            ca-certificates \\\n            gcc-c++ \\\n            git \\\n            python3 \\\n            wget \\\n            which\n          zypper -n -q cc -a\n          wget -qO /usr/local/bin/bazelisk \\\n            https://github.com/bazelbuild/bazelisk/releases/latest/download/bazelisk-linux-amd64\n          chmod +x /usr/local/bin/bazelisk\n          ln -s /usr/local/bin/bazelisk /usr/local/bin/bazel\n        shell: bash\n      - name: checkout\n        uses: actions/checkout@v6\n      - name: build test package\n        run: bazel test --flaky_test_attempts=3 ...\n        shell: bash\n\n  bazel-ubuntu:\n    name: bazel ubuntu amd64\n    runs-on: ubuntu-latest\n    container: ubuntu:24.04\n    steps:\n      - name: setup\n        run: |\n          apt-get -qq -o APT::Acquire::Retries=4 update \\\n            || (sleep 15; apt-get -qq -o APT::Acquire::Retries=4 update)\n          apt-get -qq -o APT::Acquire::Retries=4 -o Dpkg::Use-Pty=0 \\\n            upgrade\n          apt-get -qq -o APT::Acquire::Retries=4 -o Dpkg::Use-Pty=0 \\\n              --no-install-recommends install \\\n            ca-certificates \\\n            g++ \\\n            git \\\n            python-is-python3 \\\n            wget\n          apt-get -qq -o Dpkg::Use-Pty=0 autoremove\n          rm -rf /var/lib/apt/lists/*\n          wget -q https://github.com/bazelbuild/bazelisk/releases/latest/download/bazelisk-amd64.deb\n          dpkg -i bazelisk-amd64.deb\n          rm -rf bazelisk-amd64.deb\n        env:\n          DEBIAN_FRONTEND: noninteractive\n        shell: bash\n      - name: checkout\n        uses: actions/checkout@v6\n      - name: build test package\n        run: bazel test --flaky_test_attempts=3 ...\n        shell: bash\n\n  bazel-ubuntu-arm64:\n    name: bazel ubuntu arm64\n    runs-on: ubuntu-24.04-arm\n    container: ubuntu:24.04\n    steps:\n      - name: setup\n        run: |\n          apt-get -qq -o APT::Acquire::Retries=4 update \\\n            || (sleep 15; apt-get -qq -o APT::Acquire::Retries=4 update)\n          apt-get -qq -o APT::Acquire::Retries=4 -o Dpkg::Use-Pty=0 \\\n            upgrade\n          apt-get -qq -o APT::Acquire::Retries=4 -o Dpkg::Use-Pty=0 \\\n              --no-install-recommends install \\\n            ca-certificates \\\n            g++ \\\n            git \\\n            python-is-python3 \\\n            wget\n          apt-get -qq -o Dpkg::Use-Pty=0 autoremove\n          rm -rf /var/lib/apt/lists/*\n          wget -q https://github.com/bazelbuild/bazelisk/releases/latest/download/bazelisk-arm64.deb\n          dpkg -i bazelisk-arm64.deb\n          rm -rf bazelisk-arm64.deb\n        env:\n          DEBIAN_FRONTEND: noninteractive\n        shell: bash\n      - name: checkout\n        uses: actions/checkout@v6\n      - name: build test package\n        run: bazel test --flaky_test_attempts=3 ...\n        shell: bash\n\n  cmake-almalinux:\n    name: cmake almalinux amd64\n    runs-on: ubuntu-latest\n    container: almalinux:10\n    steps:\n      - name: setup\n        run: |\n          dnf makecache -q --refresh || (sleep 15; dnf makecache -q --refresh)\n          dnf upgrade -q -y\n          dnf install -q -y \\\n            ca-certificates \\\n            cmake \\\n            dnf-plugins-core \\\n            gcc-c++ \\\n            git \\\n            glibc-langpack-en \\\n            graphviz \\\n            make \\\n            pkgconf-pkg-config \\\n            rpm-build\n          dnf config-manager --set-enabled crb\n          dnf install -q -y doxygen\n          dnf clean all\n          rm -rf /var/cache/yum\n        shell: bash\n      - name: checkout\n        uses: actions/checkout@v6\n      - name: build test package\n        run: |\n          mkdir _build\n          cd _build\n          cmake \\\n            -DBUILD_DOCUMENTATION:BOOL=ON \\\n            -DBUILD_TESTING:BOOL=ON \\\n            -DCMAKE_INSTALL_PREFIX:PATH=install \\\n            -DENABLE_HARDENING:BOOL=ON \\\n            -DENABLE_INTERPROCEDURAL_OPTIMIZATION:BOOL=ON \\\n            -DENABLE_OPENMP:BOOL=ON \\\n            -DOUTPUT_TIME_AND_POSITIONS:BOOL=OFF \\\n            -DWARNINGS_AS_ERRORS:BOOL=ON \\\n            --warn-uninitialized \\\n            ..\n          cmake --build .\n          ctest . --repeat after-timeout:3\n          cmake --install .\n          cpack -G RPM\n          cpack -G RPM --config CPackSourceConfig.cmake\n        shell: bash\n\n  cmake-alpine:\n    name: cmake alpine linux amd64\n    runs-on: ubuntu-latest\n    container: alpine:3\n    steps:\n      - name: setup\n        run: |\n          apk upgrade -q --no-cache\n          apk add -q --no-cache \\\n            ca-certificates \\\n            cmake \\\n            doxygen \\\n            g++ \\\n            git \\\n            graphviz \\\n            make \\\n            pkgconf\n        shell: sh\n      - name: checkout\n        uses: actions/checkout@v6\n      - name: build test package\n        run: |\n          mkdir _build\n          cd _build\n          cmake \\\n            -DBUILD_DOCUMENTATION:BOOL=ON \\\n            -DBUILD_TESTING:BOOL=ON \\\n            -DCMAKE_INSTALL_PREFIX:PATH=install \\\n            -DENABLE_HARDENING:BOOL=ON \\\n            -DENABLE_INTERPROCEDURAL_OPTIMIZATION:BOOL=ON \\\n            -DENABLE_OPENMP:BOOL=ON \\\n            -DOUTPUT_TIME_AND_POSITIONS:BOOL=OFF \\\n            -DWARNINGS_AS_ERRORS:BOOL=ON \\\n            --warn-uninitialized \\\n            ..\n          cmake --build .\n          ctest . --repeat after-timeout:3\n          cmake --install .\n          cpack -G TGZ\n          cpack -G TGZ --config CPackSourceConfig.cmake\n        shell: sh\n\n  cmake-arch:\n    name: cmake arch linux amd64\n    runs-on: ubuntu-latest\n    container: archlinux:latest\n    steps:\n      - name: setup\n        run: |\n          pacman --needed --noconfirm --noprogressbar -S -u -y \\\n            ca-certificates \\\n            cmake \\\n            doxygen \\\n            gcc \\\n            git \\\n            graphviz \\\n            make \\\n            pkgconf\n          rm -rf \\\n            /var/cache/pacman/pkg/* \\\n            /var/lib/pacman/sync/*\n        shell: bash\n      - name: checkout\n        uses: actions/checkout@v6\n      - name: build test package\n        run: |\n          mkdir _build\n          cd _build\n          cmake \\\n            -DBUILD_DOCUMENTATION:BOOL=ON \\\n            -DBUILD_TESTING:BOOL=ON \\\n            -DCMAKE_INSTALL_PREFIX:PATH=install \\\n            -DENABLE_HARDENING:BOOL=ON \\\n            -DENABLE_INTERPROCEDURAL_OPTIMIZATION:BOOL=ON \\\n            -DENABLE_OPENMP:BOOL=ON \\\n            -DOUTPUT_TIME_AND_POSITIONS:BOOL=OFF \\\n            -DWARNINGS_AS_ERRORS:BOOL=ON \\\n            --warn-uninitialized \\\n            ..\n          cmake --build .\n          ctest . --repeat after-timeout:3\n          cmake --install .\n          cpack -G TGZ\n          cpack -G TGZ --config CPackSourceConfig.cmake\n        shell: bash\n\n  cmake-fedora:\n    name: cmake fedora linux amd64\n    runs-on: ubuntu-latest\n    container: fedora:44\n    steps:\n      - name: setup\n        run: |\n          dnf makecache -q --refresh || (sleep 15; dnf makecache -q --refresh)\n          dnf upgrade -q -y\n          dnf install -q -y \\\n            ca-certificates \\\n            cmake \\\n            doxygen \\\n            gcc-c++ \\\n            git \\\n            glibc-langpack-en \\\n            graphviz \\\n            make \\\n            pkgconf-pkg-config \\\n            rpm-build\n          dnf clean all\n          rm -rf /var/cache/yum\n        shell: bash\n      - name: checkout\n        uses: actions/checkout@v6\n      - name: build test package\n        run: |\n          mkdir _build\n          cd _build\n          cmake \\\n            -DBUILD_DOCUMENTATION:BOOL=ON \\\n            -DBUILD_TESTING:BOOL=ON \\\n            -DCMAKE_INSTALL_PREFIX:PATH=install \\\n            -DENABLE_HARDENING:BOOL=ON \\\n            -DENABLE_INTERPROCEDURAL_OPTIMIZATION:BOOL=ON \\\n            -DENABLE_OPENMP:BOOL=ON \\\n            -DOUTPUT_TIME_AND_POSITIONS:BOOL=OFF \\\n            -DWARNINGS_AS_ERRORS:BOOL=ON \\\n            --warn-uninitialized \\\n            ..\n          cmake --build .\n          ctest . --repeat after-timeout:3\n          cmake --install .\n          cpack -G RPM\n          cpack -G RPM --config CPackSourceConfig.cmake\n        shell: bash\n\n  cmake-macos:\n    name: cmake macos arm64\n    runs-on: macos-15\n    steps:\n      - name: checkout\n        uses: actions/checkout@v6\n      - name: setup\n        run: |\n          brew update -q\n          brew bundle install -q\n          brew cleanup -q -s\n          rm -rf $(brew --cache)\n        env:\n          HOMEBREW_NO_ANALYTICS: 1\n          HOMEBREW_NO_AUTO_UPDATE: 1\n          HOMEBREW_NO_INSTALL_CLEANUP: 1\n        shell: zsh -efuo pipefail {0}\n      - name: build test package\n        run: |\n          mkdir _build\n          cd _build\n          cmake \\\n            -DBUILD_DOCUMENTATION:BOOL=ON \\\n            -DBUILD_TESTING:BOOL=ON \\\n            -DCMAKE_INSTALL_PREFIX:PATH=install \\\n            -DENABLE_HARDENING:BOOL=ON \\\n            -DENABLE_INTERPROCEDURAL_OPTIMIZATION:BOOL=ON \\\n            -DENABLE_OPENMP:BOOL=OFF \\\n            -DOUTPUT_TIME_AND_POSITIONS:BOOL=OFF \\\n            -DWARNINGS_AS_ERRORS:BOOL=ON \\\n            --warn-uninitialized \\\n            ..\n          cmake --build .\n          ctest . --repeat after-timeout:3\n          cmake --install .\n          cpack -G TGZ\n          cpack -G TGZ --config CPackSourceConfig.cmake\n        shell: zsh -efuo pipefail {0}\n\n  cmake-opensuse:\n    name: cmake opensuse leap amd64\n    runs-on: ubuntu-latest\n    container: opensuse/leap:16.0\n    steps:\n      - name: setup\n        run: |\n          zypper -n -q ref || (sleep 15; zypper -n -q ref)\n          zypper -n -q up\n          zypper -n -q in --no-recommends \\\n            ca-certificates \\\n            cmake \\\n            doxygen \\\n            gcc-c++ \\\n            git \\\n            graphviz \\\n            make \\\n            pkgconf \\\n            rpm-build\n          zypper -n -q cc -a\n        shell: bash\n      - name: checkout\n        uses: actions/checkout@v6\n      - name: build test package\n        run: |\n          mkdir _build\n          cd _build\n          cmake \\\n            -DBUILD_DOCUMENTATION:BOOL=ON \\\n            -DBUILD_TESTING:BOOL=ON \\\n            -DCMAKE_INSTALL_PREFIX:PATH=install \\\n            -DENABLE_HARDENING:BOOL=ON \\\n            -DENABLE_INTERPROCEDURAL_OPTIMIZATION:BOOL=ON \\\n            -DENABLE_OPENMP:BOOL=ON \\\n            -DOUTPUT_TIME_AND_POSITIONS:BOOL=OFF \\\n            -DWARNINGS_AS_ERRORS:BOOL=ON \\\n            --warn-uninitialized \\\n            ..\n          cmake --build .\n          ctest . --repeat after-timeout:3\n          cmake --install .\n          cpack -G RPM\n          cpack -G RPM --config CPackSourceConfig.cmake\n        shell: bash\n\n  cmake-ubuntu:\n    name: cmake ubuntu amd64\n    runs-on: ubuntu-latest\n    container: ubuntu:24.04\n    steps:\n      - name: setup\n        run: |\n          apt-get -qq -o APT::Acquire::Retries=4 update \\\n            || (sleep 15; apt-get -qq -o APT::Acquire::Retries=4 update)\n          apt-get -qq -o APT::Acquire::Retries=4 -o Dpkg::Use-Pty=0 \\\n            upgrade\n          apt-get -qq -o APT::Acquire::Retries=4 -o Dpkg::Use-Pty=0 \\\n              --no-install-recommends install \\\n            ca-certificates \\\n            cmake \\\n            doxygen \\\n            dpkg-dev \\\n            file \\\n            g++ \\\n            git \\\n            graphviz \\\n            make \\\n            pkgconf\n          apt-get -qq -o Dpkg::Use-Pty=0 autoremove\n          rm -rf /var/lib/apt/lists/*\n        env:\n          DEBIAN_FRONTEND: noninteractive\n        shell: bash\n      - name: checkout\n        uses: actions/checkout@v6\n      - name: build test package\n        run: |\n          mkdir _build\n          cd _build\n          cmake \\\n            -DBUILD_DOCUMENTATION:BOOL=ON \\\n            -DBUILD_TESTING:BOOL=ON \\\n            -DCMAKE_INSTALL_PREFIX:PATH=install \\\n            -DENABLE_HARDENING:BOOL=ON \\\n            -DENABLE_INTERPROCEDURAL_OPTIMIZATION:BOOL=ON \\\n            -DENABLE_OPENMP:BOOL=ON \\\n            -DOUTPUT_TIME_AND_POSITIONS:BOOL=OFF \\\n            -DWARNINGS_AS_ERRORS:BOOL=ON \\\n            --warn-uninitialized \\\n            ..\n          cmake --build .\n          ctest . --repeat after-timeout:3\n          cmake --install .\n          cpack -G DEB\n          cpack -G DEB --config CPackSourceConfig.cmake\n        shell: bash\n\n  cmake-ubuntu-arm64:\n    name: cmake ubuntu arm64\n    runs-on: ubuntu-24.04-arm\n    container: ubuntu:24.04\n    steps:\n      - name: setup\n        run: |\n          apt-get -qq -o APT::Acquire::Retries=4 update \\\n            || (sleep 15; apt-get -qq -o APT::Acquire::Retries=4 update)\n          apt-get -qq -o APT::Acquire::Retries=4 -o Dpkg::Use-Pty=0 \\\n            upgrade\n          apt-get -qq -o APT::Acquire::Retries=4 -o Dpkg::Use-Pty=0 \\\n              --no-install-recommends install \\\n            ca-certificates \\\n            cmake \\\n            doxygen \\\n            dpkg-dev \\\n            file \\\n            g++ \\\n            git \\\n            graphviz \\\n            make \\\n            pkgconf\n          apt-get -qq -o Dpkg::Use-Pty=0 autoremove\n          rm -rf /var/lib/apt/lists/*\n        env:\n          DEBIAN_FRONTEND: noninteractive\n        shell: bash\n      - name: checkout\n        uses: actions/checkout@v6\n      - name: build test package\n        run: |\n          mkdir _build\n          cd _build\n          cmake \\\n            -DBUILD_DOCUMENTATION:BOOL=ON \\\n            -DBUILD_TESTING:BOOL=ON \\\n            -DCMAKE_INSTALL_PREFIX:PATH=install \\\n            -DENABLE_HARDENING:BOOL=ON \\\n            -DENABLE_INTERPROCEDURAL_OPTIMIZATION:BOOL=ON \\\n            -DENABLE_OPENMP:BOOL=ON \\\n            -DOUTPUT_TIME_AND_POSITIONS:BOOL=OFF \\\n            -DWARNINGS_AS_ERRORS:BOOL=ON \\\n            --warn-uninitialized \\\n            ..\n          cmake --build .\n          ctest . --repeat after-timeout:3\n          cmake --install .\n          cpack -G DEB\n          cpack -G DEB --config CPackSourceConfig.cmake\n        shell: bash\n\n  cmake-windows:\n    name: cmake windows amd64\n    runs-on: windows-latest\n    steps:\n      - name: checkout\n        uses: actions/checkout@v6\n      - name: setup\n        run: |\n          choco upgrade cmake.install -r -y --install-arguments=ADD_CMAKE_TO_PATH=System `\n            --no-progress\n        shell: pwsh\n      - name: build test package\n        run: |\n          mkdir _build\n          cd _build\n          cmake `\n            -DBUILD_DOCUMENTATION:BOOL=ON `\n            -DBUILD_TESTING:BOOL=ON `\n            -DCMAKE_INSTALL_PREFIX:PATH=install `\n            -DENABLE_HARDENING:BOOL=ON `\n            -DENABLE_INTERPROCEDURAL_OPTIMIZATION:BOOL=ON `\n            -DENABLE_OPENMP:BOOL=OFF `\n            -DOUTPUT_TIME_AND_POSITIONS:BOOL=OFF `\n            -DWARNINGS_AS_ERRORS:BOOL=ON `\n            --warn-uninitialized `\n            ..\n          cmake --build . --config Release\n          ctest . --build-config Release --repeat after-timeout:3\n          cmake --install .\n          cpack -C Release -G ZIP\n          cpack -C Release -G ZIP --config CPackSourceConfig.cmake\n        shell: pwsh\n"
  },
  {
    "path": ".github/workflows/codeql.yml",
    "content": "#\n# codeql.yml\n# RVO2-3D Library\n#\n# SPDX-FileCopyrightText: 2008 University of North Carolina at Chapel Hill\n# SPDX-License-Identifier: Apache-2.0\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#\n#     https://www.apache.org/licenses/LICENSE-2.0\n#\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# Please send all bug reports to <geom@cs.unc.edu>.\n#\n# The authors may be contacted via:\n#\n# Jur van den Berg, Stephen J. Guy, Jamie Snape, Ming C. Lin, Dinesh Manocha\n# Dept. of Computer Science\n# 201 S. Columbia St.\n# Frederick P. Brooks, Jr. Computer Science Bldg.\n# Chapel Hill, N.C. 27599-3175\n# United States of America\n#\n# <https://gamma.cs.unc.edu/RVO2/>\n#\n\n---\nname: codeql\n\non:  # yamllint disable-line rule:truthy\n  push:\n    branches:\n      - main\n  pull_request:\n    branches:\n      - main\n  schedule:\n    - cron: '0 6 * * 3'\n\njobs:\n  analyze:\n    name: analyze\n    runs-on: ubuntu-latest\n    steps:\n      - name: checkout\n        uses: actions/checkout@v6\n      - name: initialize codeql\n        uses: github/codeql-action/init@v4\n        with:\n          languages: cpp\n      - name: autobuild\n        uses: github/codeql-action/autobuild@v4\n      - name: perform codeql analysis\n        uses: github/codeql-action/analyze@v4\n"
  },
  {
    "path": ".gitignore",
    "content": "# -*- mode: gitignore; -*-\n# vi: set ft=gitignore:\n\n#\n# .gitignore\n# RVO2-3D Library\n#\n# SPDX-FileCopyrightText: 2008 University of North Carolina at Chapel Hill\n# SPDX-License-Identifier: Apache-2.0\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#\n#     https://www.apache.org/licenses/LICENSE-2.0\n#\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# Please send all bug reports to <geom@cs.unc.edu>.\n#\n# The authors may be contacted via:\n#\n# Jur van den Berg, Stephen J. Guy, Jamie Snape, Ming C. Lin, Dinesh Manocha\n# Dept. of Computer Science\n# 201 S. Columbia St.\n# Frederick P. Brooks, Jr. Computer Science Bldg.\n# Chapel Hill, N.C. 27599-3175\n# United States of America\n#\n# <https://gamma.cs.unc.edu/RVO2/>\n#\n\n/_build/\n/.idea/\n/.user.bazelrc\n/.venv/\n/bazel-*\n/cmake-build-*/\n/CMakeUserPresets.json\n/MODULE.bazel.lock\n"
  },
  {
    "path": ".pre-commit-config.yaml",
    "content": "---\nrepos:\n  - repo: https://codeberg.org/fsfe/reuse-tool\n    rev: v6.2.0\n    hooks:\n      - id: reuse-lint-file\n\n  - repo: https://github.com/adrienverge/yamllint\n    rev: v1.38.0\n    hooks:\n      - id: yamllint\n        args:\n          - --format\n          - parsable\n\n  - repo: https://github.com/codespell-project/codespell\n    rev: v2.4.2\n    hooks:\n      - id: codespell\n\n  - repo: https://github.com/pocc/pre-commit-hooks\n    rev: master\n    hooks:\n      - id: clang-format\n        entry: >-\n          sh -c 'set -eu;\n          if [ \"$(uname -s)\" = Darwin ]; then\n            PATH=\"/opt/homebrew/opt/llvm/bin:${PATH}\";\n          fi;\n          exec clang-format-hook \"$@\"' --\n      - id: cpplint\n\n  - repo: https://github.com/pre-commit/pre-commit-hooks\n    rev: v6.0.0\n    hooks:\n      - id: check-case-conflict\n      - id: check-json\n      - id: check-merge-conflict\n      - id: check-yaml\n      - id: end-of-file-fixer\n      - id: trailing-whitespace\n        exclude: (?i)\\.(markdown|md)$\n\n  - repo: https://github.com/rhysd/actionlint\n    rev: v1.7.12\n    hooks:\n      - id: actionlint\n        args:\n          - -oneline\n\n\n\n\n\n\n"
  },
  {
    "path": ".vscode/extensions.json",
    "content": "{\n  \"recommendations\": [\n    \"bazelbuild.vscode-bazel\",\n    \"editorconfig.editorconfig\",\n    \"ms-vscode.cmake-tools\",\n    \"ms-vscode.cpptools\",\n    \"ms-vscode.vscode-markdown-notebook\",\n    \"ms-vscode-remote.remote-containers\",\n    \"redhat.vscode-yaml\"\n  ]\n}\n"
  },
  {
    "path": ".vscode/extensions.json.license",
    "content": "extensions.json\nRVO2-3D Library\n\nSPDX-FileCopyrightText: 2008 University of North Carolina at Chapel Hill\nSPDX-License-Identifier: Apache-2.0\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    https://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n\nPlease send all bug reports to <geom@cs.unc.edu>.\n\nThe authors may be contacted via:\n\nJur van den Berg, Stephen J. Guy, Jamie Snape, Ming C. Lin, Dinesh Manocha\nDept. of Computer Science\n201 S. Columbia St.\nFrederick P. Brooks, Jr. Computer Science Bldg.\nChapel Hill, N.C. 27599-3175\nUnited States of America\n\n<https://gamma.cs.unc.edu/RVO2/>\n"
  },
  {
    "path": ".vscode/settings.json",
    "content": "{\n  \"cmake.buildDirectory\": \"${workspaceFolder}/_build\",\n  \"cmake.preferredGenerators\": [\n    \"Ninja Multi-Config\",\n    \"Ninja\"\n  ]\n}\n"
  },
  {
    "path": ".vscode/settings.json.license",
    "content": "settings.json\nRVO2-3D Library\n\nSPDX-FileCopyrightText: 2008 University of North Carolina at Chapel Hill\nSPDX-License-Identifier: Apache-2.0\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    https://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n\nPlease send all bug reports to <geom@cs.unc.edu>.\n\nThe authors may be contacted via:\n\nJur van den Berg, Stephen J. Guy, Jamie Snape, Ming C. Lin, Dinesh Manocha\nDept. of Computer Science\n201 S. Columbia St.\nFrederick P. Brooks, Jr. Computer Science Bldg.\nChapel Hill, N.C. 27599-3175\nUnited States of America\n\n<https://gamma.cs.unc.edu/RVO2/>\n"
  },
  {
    "path": ".yamllint.yaml",
    "content": "#\n# .yamllint.yaml\n# RVO2-3D Library\n#\n# SPDX-FileCopyrightText: 2008 University of North Carolina at Chapel Hill\n# SPDX-License-Identifier: Apache-2.0\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#\n#     https://www.apache.org/licenses/LICENSE-2.0\n#\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# Please send all bug reports to <geom@cs.unc.edu>.\n#\n# The authors may be contacted via:\n#\n# Jur van den Berg, Stephen J. Guy, Jamie Snape, Ming C. Lin, Dinesh Manocha\n# Dept. of Computer Science\n# 201 S. Columbia St.\n# Frederick P. Brooks, Jr. Computer Science Bldg.\n# Chapel Hill, N.C. 27599-3175\n# United States of America\n#\n# <https://gamma.cs.unc.edu/RVO2/>\n#\n\n---\nextends: default\n\nrules:\n  line-length:\n    max: 80\n    level: warning\n"
  },
  {
    "path": ".zenodo.json",
    "content": "{\n  \"upload_type\": \"software\",\n  \"title\": \"Optimal Reciprocal Collision Avoidance in Three Dimensions\",\n  \"creators\": [\n    {\n      \"name\": \"Van den Berg, Jur\",\n      \"affiliation\": \"University of North Carolina at Chapel Hill\"\n    },\n    {\n      \"name\": \"Guy, Stephen J.\",\n      \"affiliation\": \"University of North Carolina at Chapel Hill\",\n      \"orcid\": \"0000-0001-8986-5817\"\n    },\n    {\n      \"name\": \"Snape, Jamie\",\n      \"affiliation\": \"University of North Carolina at Chapel Hill\",\n      \"orcid\": \"0000-0002-3326-9765\"\n    },\n    {\n      \"name\": \"Lin, Ming C.\",\n      \"affiliation\": \"University of North Carolina at Chapel Hill\",\n      \"orcid\": \"0000-0003-3736-6949\"\n    },\n    {\n      \"name\": \"Manocha, Dinesh\",\n      \"affiliation\": \"University of North Carolina at Chapel Hill\",\n      \"orcid\": \"0000-0001-7047-9801\"\n    }\n  ],\n  \"description\": \"We present a formal approach to reciprocal collision avoidance, where multiple independent mobile robots or agents need to avoid collisions with each other without communication among agents while moving in a common workspace. Our formulation, optimal reciprocal collision avoidance (ORCA), provides sufficient conditions for collision-free motion by letting each agent take half of the responsibility of avoiding pairwise collisions. Selecting the optimal action for each agent is reduced to solving a low-dimensional linear program, and we prove that the resulting motions are smooth. We test our optimal reciprocal collision avoidance approach on several dense and complex simulation scenarios workspaces involving thousands of agents, and compute collision-free actions for all of them in only a few milliseconds. RVO2-3D Library is an open-source C++98 implementation of our algorithm in three dimensions. It has a simple API for third-party applications. The user specifies agents and their preferred velocities. The simulation is performed step-by-step via a simple call to the library. The simulation is fully accessible and manipulable during runtime. The library exploits multiple processors if they are available using OpenMP for efficient parallelization of the simulation.\",\n  \"access_right\": \"open\",\n  \"license\": {\n    \"id\": \"Apache-2.0\",\n    \"title\": \"Apache License 2.0\",\n    \"url\": \"https://www.apache.org/licenses/LICENSE-2.0\"\n  },\n  \"keywords\": [\n    \"collision avoidance\",\n    \"mobile robots\",\n    \"motion planning\",\n    \"multi-robot systems\",\n    \"navigation\"\n  ],\n  \"grants\": [\n    {\n      \"id\": \"10.13039/100000001::0636208\"\n    },\n    {\n      \"id\": \"10.13039/100000001::0917040\"\n    },\n    {\n      \"id\": \"10.13039/100000001::0904990\"\n    }\n  ]\n}\n"
  },
  {
    "path": ".zenodo.json.license",
    "content": ".zenodo.json\nRVO2-3D Library\n\nSPDX-FileCopyrightText: No Copyright\nSPDX-License-Identifier: CC0-1.0\n\nCC0 1.0 Universal Public Domain Dedication\n\nNo Copyright\n\nThe person who associated a work with this deed has dedicated the work to the\npublic domain by waiving all of his or her rights to the work worldwide under\ncopyright law, including all related and neighboring rights, to the extent\nallowed by law.\n\nYou can copy, modify, distribute and perform the work, even for commercial\npurposes, all without asking permission. See Other Information below.\n\nOther Information:\n\n* In no way are the patent or trademark rights of any person affected by CC0,\n  nor are the rights that other persons may have in the work or in how the work\n  is used, such as publicity or privacy rights.\n\n* Unless expressly stated otherwise, the person who associated a work with this\n  deed makes no warranties about the work, and disclaims liability for all uses\n  of the work, to the fullest extent permitted by applicable law.\n\n* When using or citing the work, you should not imply endorsement by the author\n  or the affirmer.\n\nPlease send all bug reports to <geom@cs.unc.edu>.\n\nThe authors may be contacted via:\n\nJur van den Berg, Stephen J. Guy, Jamie Snape, Ming C. Lin, Dinesh Manocha\nDept. of Computer Science\n201 S. Columbia St.\nFrederick P. Brooks, Jr. Computer Science Bldg.\nChapel Hill, N.C. 27599-3175\nUnited States of America\n\n<https://gamma.cs.unc.edu/RVO2/>\n"
  },
  {
    "path": "BUILD.bazel",
    "content": "# -*- mode: bazel; -*-\n# vi: set ft=bazel:\n\n#\n# BUILD.bazel\n# RVO2-3D Library\n#\n# SPDX-FileCopyrightText: 2008 University of North Carolina at Chapel Hill\n# SPDX-License-Identifier: Apache-2.0\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#\n#     https://www.apache.org/licenses/LICENSE-2.0\n#\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# Please send all bug reports to <geom@cs.unc.edu>.\n#\n# The authors may be contacted via:\n#\n# Jur van den Berg, Stephen J. Guy, Jamie Snape, Ming C. Lin, Dinesh Manocha\n# Dept. of Computer Science\n# 201 S. Columbia St.\n# Frederick P. Brooks, Jr. Computer Science Bldg.\n# Chapel Hill, N.C. 27599-3175\n# United States of America\n#\n# <https://gamma.cs.unc.edu/RVO2/>\n#\n\nload(\"@rules_cc//cc:defs.bzl\", \"cc_shared_library\")\nload(\"@rules_license//rules:license.bzl\", \"license\")\nload(\"@rules_license//rules:package_info.bzl\", \"package_info\")\nload(\"@rules_pkg//pkg:mappings.bzl\", \"pkg_attributes\", \"pkg_files\")\nload(\"@rules_pkg//pkg:pkg.bzl\", \"pkg_deb\", \"pkg_tar\")\n\npackage(default_package_metadata = [\n    \":license\",\n    \":package_info\",\n])\n\nlicense(\n    name = \"license\",\n    copyright_notice = \"2008 University of North Carolina at Chapel Hill\",\n    license_kinds = [\"@rules_license//licenses/spdx:Apache-2.0\"],\n    license_text = \"LICENSE\",\n    visibility = [\"//:__subpackages__\"],\n)\n\npackage_info(\n    name = \"package_info\",\n    package_name = \"RVO2-3D Library\",\n    package_url = \"https://gamma.cs.unc.edu/RVO2/\",\n    package_version = \"1.1.0\",\n    visibility = [\"//:__subpackages__\"],\n)\n\nexports_files(\n    [\"LICENSE\"],\n    visibility = [\"//visibility:public\"],\n)\n\npkg_files(\n    name = \"doc\",\n    srcs = [\"LICENSE\"],\n    attributes = pkg_attributes(mode = \"0644\"),\n    prefix = \"usr/share/doc/RVO3D\",\n)\n\ncc_shared_library(\n    name = \"RVO3D\",\n    visibility = [\"//visibility:public\"],\n    deps = [\"//src:RVO3D\"],\n)\n\npkg_files(\n    name = \"lib\",\n    srcs = [\":RVO3D\"],\n    attributes = pkg_attributes(mode = \"0644\"),\n    prefix = \"usr/lib\",\n)\n\ngenrule(\n    name = \"rvo3d_cps\",\n    outs = [\"RVO3D.cps\"],\n    cmd = \"\"\"\ncat << 'EOF' > $@\n{\n  \"compat_version\": \"1\",\n  \"components\":\n  {\n    \"RVO3D\":\n    {\n      \"includes\": [\"@prefix@/include/RVO3D\"],\n      \"type\": \"dylib\"\n    }\n  },\n  \"cps_path\": \"@prefix@/lib/cps/RVO3D\",\n  \"cps_version\": \"0.14.1\",\n  \"default_components\": [\"RVO3D\"],\n  \"description\": \"Optimal Reciprocal Collision Avoidance in Three Dimensions\",\n  \"license\": \"Apache-2.0\",\n  \"name\": \"RVO3D\",\n  \"version\": \"1.1.0\",\n  \"version_schema\": \"simple\",\n  \"website\": \"https://gamma.cs.unc.edu/RVO2/\"\n}\nEOF\n\"\"\",\n)\n\ngenrule(\n    name = \"rvo3d_release_cps\",\n    outs = [\"RVO3D@release.cps\"],\n    cmd = select({\n        \"@platforms//os:macos\": \"\"\"\ncat << 'EOF' > $@\n{\n  \"components\":\n  {\n    \"RVO3D\":\n    {\n      \"location\": \"@prefix@/lib/libRVO3D.dylib\"\n    }\n  },\n  \"configuration\": \"Release\",\n  \"name\": \"RVO3D\"\n}\nEOF\n\"\"\",\n        \"@platforms//os:windows\": \"\"\"\ncat << 'EOF' > $@\n{\n  \"components\":\n  {\n    \"RVO3D\":\n    {\n      \"location\": \"@prefix@/lib/RVO3D.dll\"\n    }\n  },\n  \"configuration\": \"Release\",\n  \"name\": \"RVO3D\"\n}\nEOF\n\"\"\",\n        \"//conditions:default\": \"\"\"\ncat << 'EOF' > $@\n{\n  \"components\":\n  {\n    \"RVO3D\":\n    {\n      \"location\": \"@prefix@/lib/libRVO3D.so\"\n    }\n  },\n  \"configuration\": \"Release\",\n  \"name\": \"RVO3D\"\n}\nEOF\n\"\"\",\n    }),\n)\n\npkg_files(\n    name = \"cps\",\n    srcs = [\n        \"RVO3D.cps\",\n        \"RVO3D@release.cps\",\n    ],\n    attributes = pkg_attributes(mode = \"0644\"),\n    prefix = \"usr/lib/cps/RVO3D\",\n)\n\n# REUSE-IgnoreStart\ngenrule(\n    name = \"rvo3d_pc\",\n    outs = [\"RVO3D.pc\"],\n    cmd = \"\"\"\ncat << 'EOF' > $@\n#\n# RVO3D.pc\n# RVO2-3D Library\n#\n# SPDX-FileCopyrightText: 2008 University of North Carolina at Chapel Hill\n# SPDX-License-Identifier: Apache-2.0\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#\n#     https://www.apache.org/licenses/LICENSE-2.0\n#\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# Please send all bug reports to <geom@cs.unc.edu>.\n#\n# The authors may be contacted via:\n#\n# Jur van den Berg, Stephen J. Guy, Jamie Snape, Ming C. Lin, Dinesh Manocha\n# Dept. of Computer Science\n# 201 S. Columbia St.\n# Frederick P. Brooks, Jr. Computer Science Bldg.\n# Chapel Hill, N.C. 27599-3175\n# United States of America\n#\n# <https://gamma.cs.unc.edu/RVO2/>\n#\n\nprefix=/usr\nexec_prefix=$${prefix}\nlibdir=$${exec_prefix}/lib\nincludedir=$${prefix}/include/RVO3D\n\nName: RVO2-3D Library\nDescription: Optimal Reciprocal Collision Avoidance in Three Dimensions\nURL: https://gamma.cs.unc.edu/RVO2/\nVersion: 1.1.0\nLibs: -L$${libdir} -lRVO3D\nCflags: -I$${includedir}\nEOF\n\"\"\",\n)\n# REUSE-IgnoreEnd\n\npkg_files(\n    name = \"pkgconfig\",\n    srcs = [\"RVO3D.pc\"],\n    attributes = pkg_attributes(mode = \"0644\"),\n    prefix = \"usr/lib/pkgconfig\",\n)\n\npkg_tar(\n    name = \"tar\",\n    srcs = [\n        \":cps\",\n        \":doc\",\n        \":lib\",\n        \":pkgconfig\",\n        \"//src:include\",\n    ],\n    extension = \"tar.gz\",\n)\n\npkg_deb(\n    name = \"deb\",\n    architecture = select(\n        {\n            \"@platforms//cpu:aarch64\": \"arm64\",\n            \"@platforms//cpu:x86_64\": \"amd64\",\n        },\n        no_match_error = \"Unsupported CPU for //:deb. Supported CPUs: aarch64, x86_64.\",\n    ),\n    data = \":tar\",\n    depends = [\n        \"libc6\",\n        \"libgcc-s1\",\n        \"libstdc++6\",\n    ],\n    description = \"Optimal Reciprocal Collision Avoidance in Three Dimensions\",\n    homepage = \"https://gamma.cs.unc.edu/RVO2/\",\n    license = \"Apache-2\",\n    maintainer = \"Jamie Snape\",\n    package = \"rvo3d\",\n    priority = \"optional\",\n    section = \"contrib/libdevel\",\n    target_compatible_with = [\"@platforms//os:linux\"],\n    triggers = \"triggers\",\n    version = \"1.1.0\",\n)\n"
  },
  {
    "path": "Brewfile",
    "content": "# -*- mode: ruby; -*-\n# vi: set ft=ruby:\n\n#\n# Brewfile\n# RVO2-3D Library\n#\n# SPDX-FileCopyrightText: 2008 University of North Carolina at Chapel Hill\n# SPDX-License-Identifier: Apache-2.0\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#\n#     https://www.apache.org/licenses/LICENSE-2.0\n#\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# Please send all bug reports to <geom@cs.unc.edu>.\n#\n# The authors may be contacted via:\n#\n# Jur van den Berg, Stephen J. Guy, Jamie Snape, Ming C. Lin, Dinesh Manocha\n# Dept. of Computer Science\n# 201 S. Columbia St.\n# Frederick P. Brooks, Jr. Computer Science Bldg.\n# Chapel Hill, N.C. 27599-3175\n# United States of America\n#\n# <https://gamma.cs.unc.edu/RVO2/>\n#\n\nbrew 'bazelisk', conflicts_with: ['bazel']\nbrew 'buildifier'\nbrew 'buildozer'\nbrew 'cmake'\nbrew 'cppcheck'\nbrew 'cpplint'\nbrew 'doxygen'\nbrew 'gcc'\nbrew 'git'\nbrew 'graphviz'\nbrew 'include-what-you-use'\nbrew 'jsonlint'\nbrew 'lcov'\nbrew 'llvm'\nbrew 'markdownlint-cli'\nbrew 'ninja'\nbrew 'pkgconf', conflicts_with: ['pkg-config']\nbrew 'python'\nbrew 'yamllint'\n"
  },
  {
    "path": "CITATION.cff",
    "content": "# -*- mode: yaml; -*-\n# vi: set ft=yaml:\n\n#\n# CITATION.cff\n# RVO2-3D Library\n#\n# SPDX-FileCopyrightText: 2008 University of North Carolina at Chapel Hill\n# SPDX-License-Identifier: CC-BY-SA-4.0\n#\n# Creative Commons Attribution-ShareAlike 4.0 International Public License\n#\n# You are free to:\n#\n# * Share -- copy and redistribute the material in any medium or format\n#\n# * ShareAlike -- If you remix, transform, or build upon the material, you must\n#   distribute your contributions under the same license as the original\n#\n# * Adapt -- remix, transform, and build upon the material for any purpose, even\n#   commercially.\n#\n# The licensor cannot revoke these freedoms as long as you follow the license\n# terms.\n#\n# Under the following terms:\n#\n# * Attribution -- You must give appropriate credit, provide a link to the\n#   license, and indicate if changes were made. You may do so in any reasonable\n#   manner, but not in any way that suggests the licensor endorses you or your\n#   use.\n#\n# * No additional restrictions -- You may not apply legal terms or technological\n#   measures that legally restrict others from doing anything the license\n#   permits.\n#\n# Notices:\n#\n# * You do not have to comply with the license for elements of the material in\n#   the public domain or where your use is permitted by an applicable exception\n#   or limitation.\n#\n# * No warranties are given. The license may not give you all of the permissions\n#   necessary for your intended use. For example, other rights such as\n#   publicity, privacy, or moral rights may limit how you use the material.\n#\n# Please send all bug reports to <geom@cs.unc.edu>.\n#\n# The authors may be contacted via:\n#\n# Jur van den Berg, Stephen J. Guy, Jamie Snape, Ming C. Lin, Dinesh Manocha\n# Dept. of Computer Science\n# 201 S. Columbia St.\n# Frederick P. Brooks, Jr. Computer Science Bldg.\n# Chapel Hill, N.C. 27599-3175\n# United States of America\n#\n# <https://gamma.cs.unc.edu/RVO2/>\n#\n\n---\ncff-version: 1.2.0\nabstract: >-\n  We present a formal approach to reciprocal collision avoidance, where\n  multiple independent mobile robots or agents need to avoid collisions with\n  each other without communication among agents while moving in a common\n  workspace. Our formulation, optimal reciprocal collision avoidance (ORCA),\n  provides sufficient conditions for collision-free motion by letting each\n  agent take half of the responsibility of avoiding pairwise collisions.\n  Selecting the optimal action for each agent is reduced to solving a\n  low-dimensional linear program, and we prove that the resulting motions are\n  smooth. We test our optimal reciprocal collision avoidance approach on\n  several dense and complex simulation scenarios workspaces involving thousands\n  of agents, and compute collision-free actions for all of them in only a few\n  milliseconds.\n\n  RVO2-3D Library is an open-source C++98 implementation of our algorithm in\n  three dimensions. It has a simple API for third-party applications. The user\n  specifies agents and their preferred velocities. The simulation is performed\n  step-by-step via a simple call to the library. The simulation is fully\n  accessible and manipulable during runtime. The library exploits multiple\n  processors if they are available using OpenMP for efficient parallelization\n  of the simulation.\nauthors:\n  - address: >-\n      201 S Columbia St, Frederick P. Brooks, Jr. Computer Science Bldg\n    affiliation: 'University of North Carolina at Chapel Hill'\n    city: 'Chapel Hill'\n    country: US\n    family-names: Berg\n    given-names: Jur\n    name-particle: 'van den'\n    post-code: 27599\n    region: NC\n  - address: >-\n      201 S Columbia St, Frederick P. Brooks, Jr. Computer Science Bldg\n    affiliation: 'University of North Carolina at Chapel Hill'\n    city: 'Chapel Hill'\n    country: US\n    family-names: Guy\n    given-names: 'Stephen J.'\n    orcid: 'https://orcid.org/0000-0001-8986-5817'\n    post-code: 27599\n    region: NC\n    website: 'https://www-users.cse.umn.edu/~sjguy/'\n  - address: >-\n      201 S Columbia St, Frederick P. Brooks, Jr. Computer Science Bldg\n    affiliation: 'University of North Carolina at Chapel Hill'\n    city: 'Chapel Hill'\n    country: US\n    family-names: Snape\n    given-names: Jamie\n    orcid: 'https://orcid.org/0000-0002-3326-9765'\n    post-code: 27599\n    region: NC\n    website: 'https://www.jamiesnape.io/'\n  - address: >-\n      201 S Columbia St, Frederick P. Brooks, Jr. Computer Science Bldg\n    affiliation: 'University of North Carolina at Chapel Hill'\n    city: 'Chapel Hill'\n    country: US\n    family-names: Lin\n    given-names: 'Ming C.'\n    orcid: 'https://orcid.org/0000-0003-3736-6949'\n    post-code: 27599\n    region: NC\n    website: 'https://www.cs.umd.edu/people/lin/'\n  - address: >-\n      201 S Columbia St, Frederick P. Brooks, Jr. Computer Science Bldg\n    affiliation: 'University of North Carolina at Chapel Hill'\n    city: 'Chapel Hill'\n    country: US\n    family-names: Manocha\n    given-names: Dinesh\n    orcid: 'https://orcid.org/0000-0001-7047-9801'\n    post-code: 27599\n    region: NC\n    website: 'https://www.cs.umd.edu/people/dmanocha/'\nidentifiers:\n  - type: doi\n    value: '10.5281/zenodo.7039619'\nkeywords:\n  - 'collision avoidance'\n  - 'mobile robots'\n  - 'motion planning'\n  - 'multi-robot systems'\n  - navigation\nlicense: 'Apache-2.0'\nmessage: >-\n  If you use this software, please cite it using the metadata from this file\n  and the metadata from 'preferred-citation'.\nreferences:\n  - abstract: >-\n      We present a formal approach to reciprocal collision avoidance, where\n      multiple independent mobile robots or agents need to avoid collisions\n      with each other without communication among agents while moving in a\n      common workspace. Our formulation, optimal reciprocal collision avoidance\n      (ORCA), provides sufficient conditions for collision-free motion by\n      letting each agent take half of the responsibility of avoiding pairwise\n      collisions. Selecting the optimal action for each agent is reduced to\n      solving a low-dimensional linear program, and we prove that the resulting\n      motions are smooth. We test our optimal reciprocal collision avoidance\n      approach on several dense and complex simulation scenarios workspaces\n      involving thousands of agents, and compute collision-free actions for all\n      of them in only a few milliseconds.\n    authors:\n      - address: >-\n          201 S Columbia St, Frederick P. Brooks, Jr. Computer Science Bldg\n        affiliation: 'University of North Carolina at Chapel Hill'\n        city: 'Chapel Hill'\n        country: US\n        family-names: Berg\n        given-names: Jur\n        name-particle: 'van den'\n        post-code: 27599\n        region: NC\n      - address: >-\n          201 S Columbia St, Frederick P. Brooks, Jr. Computer Science Bldg\n        affiliation: 'University of North Carolina at Chapel Hill'\n        city: 'Chapel Hill'\n        country: US\n        family-names: Guy\n        given-names: 'Stephen J.'\n        orcid: 'https://orcid.org/0000-0001-8986-5817'\n        post-code: 27599\n        region: NC\n        website: 'https://www-users.cse.umn.edu/~sjguy/'\n      - address: >-\n          201 S Columbia St, Frederick P. Brooks, Jr. Computer Science Bldg\n        affiliation: 'University of North Carolina at Chapel Hill'\n        city: 'Chapel Hill'\n        country: US\n        family-names: Lin\n        given-names: 'Ming C.'\n        orcid: 'https://orcid.org/0000-0003-3736-6949'\n        post-code: 27599\n        region: NC\n        website: 'https://www.cs.umd.edu/people/lin/'\n      - address: >-\n          201 S Columbia St, Frederick P. Brooks, Jr. Computer Science Bldg\n        affiliation: 'University of North Carolina at Chapel Hill'\n        city: 'Chapel Hill'\n        country: US\n        family-names: Manocha\n        given-names: Dinesh\n        orcid: 'https://orcid.org/0000-0001-7047-9801'\n        post-code: 27599\n        region: NC\n        website: 'https://www.cs.umd.edu/people/dmanocha/'\n    conference:\n      address: 'Hotel Astoria, Pilatusstrasse 29'\n      city: Lucerne\n      country: CH\n      date-end: '2009-09-03'\n      date-start: '2009-08-31'\n      name: '14th International Symposium of Robotics Research (ISRR)'\n      post-code: 6002\n    contact:\n      - address: >-\n          201 S Columbia St, Frederick P. Brooks, Jr. Computer Science Bldg\n        affiliation: 'University of North Carolina at Chapel Hill'\n        city: 'Chapel Hill'\n        country: US\n        family-names: Guy\n        given-names: 'Stephen J.'\n        orcid: 'https://orcid.org/0000-0001-8986-5817'\n        post-code: 27599\n        region: NC\n        website: 'https://www-users.cse.umn.edu/~sjguy/'\n    collection-doi: '10.1007/978-3-642-19457-3'\n    collection-title: >-\n      Robotics Research: The 14th International Symposium ISRR\n    collection-type: proceedings\n    copyright: >-\n      Copyright © 2011 Springer Verlag\n    editors:\n      - address: >-\n          Institute of Robotics and Intelligent Systems (IRIS), Autonomous\n          Systems Lab, Leonhardstrasse 21\n        affiliation: ETH Zürich\n        city: Zürich\n        country: CH\n        family-names: Pradalier\n        given-names: Cédric\n        orcid: 'https://orcid.org/0000-0002-1746-2733'\n        post-code: 8092\n      - address: >-\n          Institute of Robotics and Intelligent Systems (IRIS), Autonomous\n          Systems Lab, Leonhardstrasse 21\n        affiliation: ETH Zürich\n        city: Zürich\n        country: CH\n        family-names: Siegwart\n        given-names: Roland\n        orcid: 'https://orcid.org/0000-0002-2760-7983'\n        post-code: 8092\n      - address: >-\n          Deutsches Zentrum für Luft und Raumfahrt (DLR), Institut für Robotik\n          und Mechatronik, Münchener Straße 20\n        affiliation: German Aerospace Center\n        city: 'Oberpfaffenhofen-Weßling'\n        country: DE\n        family-names: Hirzinger\n        given-names: Gerhard\n        post-code: 82234\n    end: 19\n    identifiers:\n      - type: doi\n        value: '10.1007/978-3-642-19457-3_1'\n    isbn: '978-3-642-19456-6'\n    keywords:\n      - 'collision avoidance'\n      - 'mobile robots'\n      - 'motion planning'\n      - 'multi-robot systems'\n      - navigation\n    publisher:\n      address: 'Tiergartenstraße 17'\n      city: Heidelberg\n      country: DE\n      name: 'Springer Verlag'\n      post-code: 69121\n    languages:\n      - en\n    month: 5\n    pages: 17\n    start: 3\n    title: 'Reciprocal n-body collision avoidance'\n    type: 'conference-paper'\n    url: 'https://gamma.cs.unc.edu/ORCA/'\n    volume: 70\n    year: 2011\n  - abstract: >-\n      We present an algorithm for collision-free navigation of multiple flying\n      robots in three-dimensional workspace. Our approach extends the model of a\n      simple car to a simple-airplane, which has constraints on speed and\n      steering angle and includes a configuration variable for the altitude. We\n      use a locally optimal reciprocal collision avoidance scheme that computes\n      the trajectory without any collisions or oscillations for each airplane\n      independently. In addition, our algorithm explicitly considers the\n      kinematic and dynamic constraints of a simple-airplane and uses the notion\n      of variable reciprocity when choosing velocities to ensure that\n      simple-airplanes that are less constrained take more responsibility for\n      avoiding collisions. We test our approach in two simulations and compute\n      collision-free and oscillation-free trajectories that satisfy the kinematic\n      and dynamic constraints of each simple-airplane.\n    authors:\n      - address: >-\n          201 S Columbia St, Frederick P. Brooks, Jr. Computer Science Bldg\n        affiliation: 'University of North Carolina at Chapel Hill'\n        city: 'Chapel Hill'\n        country: US\n        family-names: Snape\n        given-names: Jamie\n        orcid: 'https://orcid.org/0000-0002-3326-9765'\n        post-code: 27599\n        region: NC\n        website: 'https://www.jamiesnape.io/'\n      - address: >-\n          201 S Columbia St, Frederick P. Brooks, Jr. Computer Science Bldg\n        affiliation: 'University of North Carolina at Chapel Hill'\n        city: 'Chapel Hill'\n        country: US\n        family-names: Manocha\n        given-names: Dinesh\n        orcid: 'https://orcid.org/0000-0001-7047-9801'\n        post-code: 27599\n        region: NC\n        website: 'https://www.cs.umd.edu/people/dmanocha/'\n    conference:\n      address: '555 W Fifth Ave, William A. Egan Civic and Convention Center'\n      city: Anchorage\n      country: CH\n      date-end: '2010-05-03'\n      date-start: '2010-05-08'\n      name: >-\n        2010 IEEE International Conference on Robotics and Automation (ICRA)\n      post-code: 99501\n      region: AK\n    contact:\n      - address: >-\n          201 S Columbia St, Frederick P. Brooks, Jr. Computer Science Bldg\n        affiliation: 'University of North Carolina at Chapel Hill'\n        city: 'Chapel Hill'\n        country: US\n        family-names: Snape\n        given-names: Jamie\n        orcid: 'https://orcid.org/0000-0002-3326-9765'\n        post-code: 27599\n        region: NC\n        website: 'https://www.jamiesnape.io/'\n    collection-doi: '10.1109/ICRA11042.2010'\n    collection-title: >-\n      Proceedings of the 2010 IEEE International Conference on Robotics and\n      Automation (ICRA)\n    collection-type: proceedings\n    copyright: >-\n      Copyright © 2010 Institute of Electrical and Electronics Engineers\n    date-published: '2010-07-15'\n    end: 3980\n    identifiers:\n      - type: doi\n        value: '10.1109/ROBOT.2010.5509580'\n    isbn: '978-1-4244-5038-1'\n    issn: '1050-4729'\n    keywords:\n      - 'collision avoidance'\n      - 'mobile robots'\n      - 'motion planning'\n      - 'multi-robot systems'\n      - navigation\n    publisher:\n      address: '3 Park Ave 17th Fl'\n      city: 'New York'\n      country: US\n      name: 'Institute of Electrical and Electronics Engineers'\n      post-code: 10016\n      region: NY\n    languages:\n      - en\n    month: 5\n    pages: 6\n    start: 3974\n    title: 'Navigating Multiple Simple-Airplanes in 3D Workspace'\n    type: 'conference-paper'\n    url: 'https://gamma.cs.unc.edu/S-AIRPLANE/'\n    year: 2010\nrepository-code: 'https://github.com/snape/RVO2-3D'\ntitle: 'Optimal Reciprocal Collision Avoidance in Three Dimensions'\ntype: software\nurl: 'https://gamma.cs.unc.edu/RVO2/'\n"
  },
  {
    "path": "CMakeLists.txt",
    "content": "# -*- mode: cmake; -*-\n# vi: set ft=cmake:\n\n#\n# CMakeLists.txt\n# RVO2-3D Library\n#\n# SPDX-FileCopyrightText: 2008 University of North Carolina at Chapel Hill\n# SPDX-License-Identifier: Apache-2.0\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#\n#     https://www.apache.org/licenses/LICENSE-2.0\n#\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# Please send all bug reports to <geom@cs.unc.edu>.\n#\n# The authors may be contacted via:\n#\n# Jur van den Berg, Stephen J. Guy, Jamie Snape, Ming C. Lin, Dinesh Manocha\n# Dept. of Computer Science\n# 201 S. Columbia St.\n# Frederick P. Brooks, Jr. Computer Science Bldg.\n# Chapel Hill, N.C. 27599-3175\n# United States of America\n#\n# <https://gamma.cs.unc.edu/RVO2/>\n#\n\ncmake_minimum_required(VERSION 3.26)\nproject(RVO3D\n  VERSION 1.1.0\n  DESCRIPTION \"Optimal Reciprocal Collision Avoidance in Three Dimensions\"\n  HOMEPAGE_URL https://gamma.cs.unc.edu/RVO2/\n  LANGUAGES CXX)\n\nif(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)\n  # cmake-lint: disable=C0301\n  set(CMAKE_BUILD_TYPE Release CACHE STRING\n    \"Choose the type of build; options are Debug Release RelWithDebInfo MinSizeRel\"\n    FORCE)\n  set_property(CACHE CMAKE_BUILD_TYPE PROPERTY\n    STRINGS Debug Release RelWithDebInfo MinSizeRel)\nendif()\n\noption(ENABLE_CMAKE_EXPERIMENTAL_FEATURES\n  \"Enable CMake experimental features\" OFF)\n\ninclude(CTest)\n\nif(WIN32)\n  set(BUILD_SHARED_LIBS OFF)\nelse()\n  option(BUILD_SHARED_LIBS \"Build all libraries as shared\"\n    ${PROJECT_IS_TOP_LEVEL})\nendif()\n\ninclude(GNUInstallDirs)\n\nset(RVO3D_DIR ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME})\nset(RVO3D_INCLUDE_DIR ${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME})\nset(RVO3D_LIBRARY_DIR ${CMAKE_INSTALL_LIBDIR})\nset(RVO3D_LIBRARY RVO3D)\n\nset(RVO3D_NAME \"RVO2-3D Library\")\n\nset(CMAKE_CXX_STANDARD 98)\nset(CMAKE_CXX_STANDARD_REQUIRED ON)\nset(CMAKE_CXX_EXTENSIONS OFF)\nset(CMAKE_POSITION_INDEPENDENT_CODE ON)\n\noption(BUILD_DOCUMENTATION \"Build documentation\" OFF)\n\nif(BUILD_DOCUMENTATION)\n  find_package(Doxygen 1.9.1 MODULE OPTIONAL_COMPONENTS dot)\nendif()\n\noption(ENABLE_OPENMP \"Enable OpenMP if available\" OFF)\n\nif(ENABLE_OPENMP)\n  find_package(OpenMP MODULE)\nendif()\n\noption(ENABLE_INTERPROCEDURAL_OPTIMIZATION\n  \"Enable interprocedural optimization if supported\" OFF)\n\nif(ENABLE_INTERPROCEDURAL_OPTIMIZATION)\n  include(CheckIPOSupported)\n\n  check_ipo_supported(RESULT RVO3D_INTERPROCEDURAL_OPTIMIZATION_SUPPORTED\n    LANGUAGES CXX)\n\n  if(RVO3D_INTERPROCEDURAL_OPTIMIZATION_SUPPORTED)\n    message(STATUS \"Interprocedural optimization is supported\")\n  else()\n    message(STATUS \"Interprocedural optimization is NOT supported\")\n  endif()\nelse()\n  set(RVO3D_INTERPROCEDURAL_OPTIMIZATION_SUPPORTED)\nendif()\n\ninclude(CheckCXXCompilerFlag)\ninclude(CheckLinkerFlag)\n\noption(ENABLE_HARDENING\n  \"Enable hardening compiler and linker flags if supported\" ON)\n\nif(ENABLE_HARDENING)\n  if(MSVC)\n    check_cxx_compiler_flag(/GS RVO3D_COMPILER_SUPPORTS_GS)\n    check_cxx_compiler_flag(/guard:cf RVO3D_COMPILER_SUPPORTS_GUARD_CF)\n\n    if(RVO3D_COMPILER_SUPPORTS_GS)\n      add_compile_options(/GS)\n    endif()\n\n    check_linker_flag(CXX /DYNAMICBASE RVO3D_LINKER_SUPPORTS_DYNAMICBASE)\n    check_linker_flag(CXX /GUARD:CF RVO3D_LINKER_SUPPORTS_GUARD_CF)\n    check_linker_flag(CXX /NXCOMPAT RVO3D_LINKER_SUPPORTS_NXCOMPAT)\n\n    if(RVO3D_COMPILER_SUPPORTS_GUARD_CF\n        AND RVO3D_LINKER_SUPPORTS_DYNAMICBASE\n        AND RVO3D_LINKER_SUPPORTS_GUARD_CF)\n      add_compile_options(/guard:cf)\n      add_link_options(/DYNAMICBASE /GUARD:CF)\n    endif()\n\n    if(RVO3D_LINKER_SUPPORTS_NXCOMPAT)\n      add_link_options(/NXCOMPAT)\n    endif()\n  else()\n    if(APPLE)\n      set(RVO3D_REQUIRED_FLAGS \"${CMAKE_REQUIRED_FLAGS}\")\n\n      check_cxx_compiler_flag(-Werror=unused-command-line-argument\n        RVO3D_COMPILER_SUPPORTS_WERROR_UNUSED_COMMAND_LINE_ARGUMENT)\n\n      if(RVO3D_COMPILER_SUPPORTS_WERROR_UNUSED_COMMAND_LINE_ARGUMENT)\n        set(CMAKE_REQUIRED_FLAGS\n          \"${CMAKE_REQUIRED_FLAGS} -Werror=unused-command-line-argument\")\n      endif()\n    endif()\n\n    check_cxx_compiler_flag(-D_FORTIFY_SOURCE=2\n      RVO3D_COMPILER_SUPPORTS_D_FORTIFY_SOURCE_2)\n    check_cxx_compiler_flag(-fcf-protection\n      RVO3D_COMPILER_SUPPORTS_FCF_PROTECTION)\n    check_cxx_compiler_flag(-fno-common RVO3D_COMPILER_SUPPORTS_FNO_COMMON)\n    check_cxx_compiler_flag(-fsanitize=safe-stack\n      RVO3D_COMPILER_SUPPORTS_FSANITIZE_SAFE_STACK)\n    check_cxx_compiler_flag(-fstack-clash-protection\n      RVO3D_COMPILER_SUPPORTS_FSTACK_CLASH_PROTECTION)\n    check_cxx_compiler_flag(-fstack-protector-strong\n      RVO3D_COMPILER_SUPPORTS_FSTACK_PROTECTOR_STRONG)\n\n    if(RVO3D_COMPILER_SUPPORTS_FSTACK_PROTECTOR_STRONG)\n      set(RVO3D_COMPILER_SUPPORTS_FSTACK_PROTECTOR)\n    else()\n      check_cxx_compiler_flag(-fstack-protector\n        RVO3D_COMPILER_SUPPORTS_FSTACK_PROTECTOR)\n    endif()\n\n    if(RVO3D_COMPILER_SUPPORTS_D_FORTIFY_SOURCE_2)\n      add_compile_options($<$<NOT:$<CONFIG:Debug>>:-D_FORTIFY_SOURCE=2>)\n    endif()\n    if(RVO3D_COMPILER_SUPPORTS_FCF_PROTECTION)\n      add_compile_options(-fcf-protection)\n    endif()\n    if(RVO3D_COMPILER_SUPPORTS_FNO_COMMON)\n      add_compile_options(-fno-common)\n    endif()\n    if(RVO3D_COMPILER_SUPPORTS_FSTACK_CLASH_PROTECTION)\n      add_compile_options(-fstack-clash-protection)\n    endif()\n    if(RVO3D_COMPILER_SUPPORTS_FSTACK_PROTECTOR_STRONG)\n      add_compile_options(-fstack-protector-strong)\n    elseif(RVO3D_COMPILER_SUPPORTS_FSTACK_PROTECTOR)\n      add_compile_options(-fstack-protector)\n    endif()\n\n    check_linker_flag(CXX -Wl,-Bsymbolic-functions\n      RVO3D_LINKER_SUPPORTS_BSYMBOLIC_FUNCTIONS)\n    check_linker_flag(CXX -fsanitize=safe-stack\n      RVO3D_LINKER_SUPPORTS_FSANITIZE_SAFE_STACK)\n    check_linker_flag(CXX -Wl,-z,defs RVO3D_LINKER_SUPPORTS_Z_DEFS)\n    check_linker_flag(CXX -Wl,-z,noexecheap RVO3D_LINKER_SUPPORTS_Z_NOEXECHEAP)\n    check_linker_flag(CXX -Wl,-z,noexecstack\n      RVO3D_LINKER_SUPPORTS_Z_NOEXECSTACK)\n    check_linker_flag(CXX -Wl,-z,now RVO3D_LINKER_SUPPORTS_Z_NOW)\n    check_linker_flag(CXX -Wl,-z,relro RVO3D_LINKER_SUPPORTS_Z_RELRO)\n    check_linker_flag(CXX -Wl,-z,separate-code RVO3D_LINKER_SUPPORTS_Z_SEPARATE_CODE)\n\n    if(RVO3D_LINKER_SUPPORTS_BSYMBOLIC_FUNCTIONS)\n      add_link_options($<$<NOT:$<CONFIG:Debug>>:-Wl,-Bsymbolic-functions>)\n    endif()\n    if(RVO3D_COMPILER_SUPPORTS_FSANITIZE_SAFE_STACK\n        AND RVO3D_LINKER_SUPPORTS_FSANITIZE_SAFE_STACK)\n      add_compile_options($<$<NOT:$<CONFIG:Debug>>:-fsanitize=safe-stack>)\n      add_link_options($<$<NOT:$<CONFIG:Debug>>:-fsanitize=safe-stack>)\n    endif()\n    if(RVO3D_LINKER_SUPPORTS_Z_DEFS)\n      add_link_options(-Wl,-z,defs)\n    endif()\n    if(RVO3D_LINKER_SUPPORTS_Z_NOEXECHEAP)\n      add_link_options(-Wl,-z,noexecheap)\n    endif()\n    if(RVO3D_LINKER_SUPPORTS_Z_NOEXECSTACK)\n      add_link_options(-Wl,-z,noexecstack)\n    endif()\n    if(RVO3D_LINKER_SUPPORTS_Z_NOW)\n      add_link_options(-Wl,-z,now)\n    endif()\n    if(RVO3D_LINKER_SUPPORTS_Z_RELRO)\n      add_link_options(-Wl,-z,relro)\n    endif()\n    if(RVO3D_LINKER_SUPPORTS_Z_SEPARATE_CODE)\n      add_link_options(-Wl,-z,separate-code)\n    endif()\n\n    if(APPLE)\n      set(CMAKE_REQUIRED_FLAGS \"${RVO3D_REQUIRED_FLAGS}\")\n      unset(RVO3D_REQUIRED_FLAGS)\n    endif()\n  endif()\nendif()\n\nif(MSVC)\n  check_cxx_compiler_flag(/W4 RVO3D_COMPILER_SUPPORTS_W4)\n\n  if(RVO3D_COMPILER_SUPPORTS_W4)\n    add_compile_options(/W4)\n  endif()\nelse()\n  check_cxx_compiler_flag(-Wall RVO3D_COMPILER_SUPPORTS_WALL)\n  check_cxx_compiler_flag(-Wformat-security\n    RVO3D_COMPILER_SUPPORTS_WFORMAT_SECURITY)\n  check_cxx_compiler_flag(-Werror=format-security\n    RVO3D_COMPILER_SUPPORTS_WERROR_FORMAT_SECURITY)\n\n  if(RVO3D_COMPILER_SUPPORTS_WALL)\n    add_compile_options(-Wall)\n  endif()\n  if(RVO3D_COMPILER_SUPPORTS_WFORMAT_SECURITY)\n    add_compile_options(-Wformat-security)\n  endif()\n  if(RVO3D_COMPILER_SUPPORTS_WERROR_FORMAT_SECURITY)\n    add_compile_options(-Werror=format-security)\n  endif()\nendif()\n\nif(NOT MSVC)\n  check_linker_flag(CXX -Wl,--as-needed RVO3D_LINKER_SUPPORTS__AS_NEEDED)\n\n  if(RVO3D_LINKER_SUPPORTS__AS_NEEDED)\n      add_link_options(-Wl,--as-needed)\n  endif()\nendif()\n\noption(WARNINGS_AS_ERRORS \"Turn compiler warnings into errors\" OFF)\n\nif(WARNINGS_AS_ERRORS)\n  if(MSVC)\n    check_cxx_compiler_flag(/WX RVO3D_COMPILER_SUPPORTS_WX)\n\n    if(RVO3D_COMPILER_SUPPORTS_WX)\n      add_compile_options(/WX)\n    endif()\n  else()\n    check_cxx_compiler_flag(-Werror RVO3D_COMPILER_SUPPORTS_WERROR)\n\n    if(RVO3D_COMPILER_SUPPORTS_WERROR)\n      add_compile_options(-Werror)\n    endif()\n  endif()\nendif()\n\noption(ENABLE_INSTALLATION \"Enable installation\" ${PROJECT_IS_TOP_LEVEL})\n\nadd_subdirectory(src)\nadd_subdirectory(examples)\nadd_subdirectory(doc)\n\nif(ENABLE_INSTALLATION)\n  install(FILES LICENSE\n    COMPONENT runtime\n    TYPE DOC)\n\n  include(CMakePackageConfigHelpers)\n\n  configure_package_config_file(\n    ${PROJECT_NAME}Config.cmake.in ${PROJECT_NAME}Config.cmake\n    INSTALL_DESTINATION ${RVO3D_DIR}\n    PATH_VARS RVO3D_INCLUDE_DIR RVO3D_LIBRARY_DIR)\n\n  write_basic_package_version_file(${PROJECT_NAME}ConfigVersion.cmake\n    COMPATIBILITY SameMajorVersion)\n\n  install(FILES\n    \"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake\"\n    \"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake\"\n    COMPONENT development\n    DESTINATION ${RVO3D_DIR})\n\n  find_package(PkgConfig MODULE)\n\n  if(PkgConfig_FOUND)\n    configure_file(${PROJECT_NAME}.pc.in ${PROJECT_NAME}.pc @ONLY)\n    install(FILES \"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.pc\"\n      COMPONENT development\n      DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)\n  endif()\nendif()\n\noption(ENABLE_PACKAGING \"Enable packaging\" ${PROJECT_IS_TOP_LEVEL})\n\nif(ENABLE_PACKAGING)\n  include(InstallRequiredSystemLibraries)\n\n  set(CPACK_PACKAGE_NAME ${PROJECT_NAME})\n  set(CPACK_PACKAGE_CONTACT \"Jamie Snape\")\n  set(CPACK_PACKAGE_VENDOR \"University of North Carolina at Chapel Hill\")\n  set(CPACK_PACKAGE_VERSION_MAJOR ${PROJECT_VERSION_MAJOR})\n  set(CPACK_PACKAGE_VERSION_MINOR ${PROJECT_VERSION_MINOR})\n  set(CPACK_PACKAGE_VERSION_PATCH ${PROJECT_VERSION_PATCH})\n  set(CPACK_PACKAGE_DESCRIPTION_SUMMARY \"${PROJECT_DESCRIPTION}\")\n  set(CPACK_RESOURCE_FILE_LICENSE \"${CMAKE_CURRENT_SOURCE_DIR}/LICENSE\")\n  set(CPACK_STRIP_FILES ON)\n\n  set(CPACK_SOURCE_IGNORE_FILES\n    _build/ \\\\\\\\.git/ \\\\\\\\.gitattributes \\\\\\\\.github/ \\\\\\\\.gitignore bazel-\n    Brewfile)\n  set(CPACK_SOURCE_STRIP_FILES ON)\n\n  set(CPACK_DEBIAN_COMPRESSION_TYPE zstd)\n  set(CPACK_DEBIAN_FILE_NAME DEB-DEFAULT)\n  set(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA \"${CMAKE_CURRENT_SOURCE_DIR}/triggers\")\n  set(CPACK_DEBIAN_PACKAGE_DEPENDS)\n  set(CPACK_DEBIAN_PACKAGE_HOMEPAGE ${PROJECT_HOMEPAGE_URL})\n  set(CPACK_DEBIAN_PACKAGE_SECTION contrib/libdevel)\n  set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS ON)\n\n  set(CPACK_FREEBSD_PACKAGE_DEPS)\n  set(CPACK_FREEBSD_PACKAGE_LICENSE APACHE20)\n  set(CPACK_FREEBSD_PACKAGE_WWW ${PROJECT_HOMEPAGE_URL})\n\n  set(CPACK_RPM_FILE_NAME RPM-DEFAULT)\n  set(CPACK_RPM_PACKAGE_AUTOREQPROV ON)\n  set(CPACK_RPM_PACKAGE_LICENSE \"ASL 2.0\")\n  set(CPACK_RPM_PACKAGE_REQUIRES)\n  set(CPACK_RPM_PACKAGE_URL ${PROJECT_HOMEPAGE_URL})\n\n  include(CPack)\nendif()\n"
  },
  {
    "path": "CMakePresets.json",
    "content": "{\n  \"version\": 6,\n  \"cmakeMinimumRequired\": {\n    \"major\": 3,\n    \"minor\": 26,\n    \"patch\": 0\n  }\n}\n"
  },
  {
    "path": "CMakePresets.json.license",
    "content": "CMakePresets.json\nRVO2-3D Library\n\nSPDX-FileCopyrightText: 2008 University of North Carolina at Chapel Hill\nSPDX-License-Identifier: Apache-2.0\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    https://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n\nPlease send all bug reports to <geom@cs.unc.edu>.\n\nThe authors may be contacted via:\n\nJur van den Berg, Stephen J. Guy, Jamie Snape, Ming C. Lin, Dinesh Manocha\nDept. of Computer Science\n201 S. Columbia St.\nFrederick P. Brooks, Jr. Computer Science Bldg.\nChapel Hill, N.C. 27599-3175\nUnited States of America\n\n<https://gamma.cs.unc.edu/RVO2/>\n"
  },
  {
    "path": "CPPLINT.cfg",
    "content": "# -*- mode: ini; -*-\n# vi: set ft=ini:\n\n#\n# CPPLINT.cfg\n# RVO2-3D Library\n#\n# SPDX-FileCopyrightText: 2008 University of North Carolina at Chapel Hill\n# SPDX-License-Identifier: Apache-2.0\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#\n#     https://www.apache.org/licenses/LICENSE-2.0\n#\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# Please send all bug reports to <geom@cs.unc.edu>.\n#\n# The authors may be contacted via:\n#\n# Jur van den Berg, Stephen J. Guy, Jamie Snape, Ming C. Lin, Dinesh Manocha\n# Dept. of Computer Science\n# 201 S. Columbia St.\n# Frederick P. Brooks, Jr. Computer Science Bldg.\n# Chapel Hill, N.C. 27599-3175\n# United States of America\n#\n# <https://gamma.cs.unc.edu/RVO2/>\n#\n\nset noparent\n\nfilter=-build/header_guard\nfilter=-build/include_what_you_use\nfilter=-whitespace/indent_namespace\n\n\nlinelength=80\n"
  },
  {
    "path": "CTestConfig.cmake",
    "content": "#\n# CTestConfig.cmake\n# RVO2-3D Library\n#\n# SPDX-FileCopyrightText: 2008 University of North Carolina at Chapel Hill\n# SPDX-License-Identifier: Apache-2.0\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#\n#     https://www.apache.org/licenses/LICENSE-2.0\n#\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# Please send all bug reports to <geom@cs.unc.edu>.\n#\n# The authors may be contacted via:\n#\n# Jur van den Berg, Stephen J. Guy, Jamie Snape, Ming C. Lin, Dinesh Manocha\n# Dept. of Computer Science\n# 201 S. Columbia St.\n# Frederick P. Brooks, Jr. Computer Science Bldg.\n# Chapel Hill, N.C. 27599-3175\n# United States of America\n#\n# <https://gamma.cs.unc.edu/RVO2/>\n#\n\nset(CTEST_PROJECT_NAME RVO2-3D)\nset(CTEST_NIGHTLY_START_TIME \"01:00:00 UTC\")\n\nset(CTEST_DROP_METHOD https)\nset(CTEST_DROP_SITE my.cdash.org)\nset(CTEST_DROP_LOCATION \"/submit.php?project=${CTEST_PROJECT_NAME}\")\nset(CTEST_DROP_SITE_CDASH ON)\n"
  },
  {
    "path": "Dockerfile",
    "content": "# syntax=docker.io/docker/dockerfile:1\n\n#\n# Dockerfile\n# RVO2-3D Library\n#\n# SPDX-FileCopyrightText: 2008 University of North Carolina at Chapel Hill\n# SPDX-License-Identifier: Apache-2.0\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#\n#     https://www.apache.org/licenses/LICENSE-2.0\n#\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# Please send all bug reports to <geom@cs.unc.edu>.\n#\n# The authors may be contacted via:\n#\n# Jur van den Berg, Stephen J. Guy, Jamie Snape, Ming C. Lin, Dinesh Manocha\n# Dept. of Computer Science\n# 201 S. Columbia St.\n# Frederick P. Brooks, Jr. Computer Science Bldg.\n# Chapel Hill, N.C. 27599-3175\n# United States of America\n#\n# <https://gamma.cs.unc.edu/RVO2/>\n#\n\nFROM ubuntu:24.04\nARG TARGETARCH\nLABEL org.opencontainers.image.authors=\"Jur van den Berg, Stephen J. Guy, Jamie Snape, Ming C. Lin, Dinesh Manocha\"\nLABEL org.opencontainers.image.base.name=\"docker.io/library/ubuntu:latest\"\nLABEL org.opencontainers.image.description=\"Optimal Reciprocal Collision Avoidance in Three Dimensions\"\nLABEL org.opencontainers.image.licenses=\"Apache-2.0\"\nLABEL org.opencontainers.image.source=\"https://github.com/snape/RVO2-3D/\"\nLABEL org.opencontainers.image.title=\"RVO2-3D Library\"\nLABEL org.opencontainers.image.url=\"https://gamma.cs.unc.edu/RVO2/\"\nLABEL org.opencontainers.image.vendor=\"University of North Carolina at Chapel Hill\"\nLABEL org.opencontainers.image.version=\"1.1.0\"\nENV LANG=C.UTF-8\nENV LOGNAME=root\nENV USER=root\nRUN export DEBIAN_FRONTEND=noninteractive \\\n  && apt-get update -qq \\\n  && apt-get install --no-install-recommends -o Dpkg::Use-Pty=0 -qy \\\n    ca-certificates \\\n    clang \\\n    clang-tidy \\\n    cmake \\\n    cmake-format \\\n    cppcheck \\\n    cpplint \\\n    dirmngr \\\n    doxygen \\\n    dpkg-dev \\\n    file \\\n    g++ \\\n    gdb \\\n    git \\\n    gnupg \\\n    graphviz \\\n    iwyu \\\n    jsonlint \\\n    lcov \\\n    lldb \\\n    make \\\n    markdownlint \\\n    nano \\\n    netbase \\\n    ninja-build \\\n    openssh-client \\\n    pkgconf \\\n    python3 \\\n    python3-click \\\n    python3-dateutil \\\n    python3-docopt \\\n    python3-jsonschema \\\n    python3-pip \\\n    python3-pykwalify \\\n    python3-requests \\\n    python3-ruamel.yaml \\\n    python3-venv \\\n    reuse \\\n    strace \\\n    sudo \\\n    valgrind \\\n    yamllint \\\n  && rm -rf /var/lib/apt/lists/* \\\n  && wget -q https://github.com/bazelbuild/bazelisk/releases/latest/download/bazelisk-${TARGETARCH:-amd64}.deb \\\n  && dpkg -i bazelisk-${TARGETARCH:-amd64}.deb \\\n  && rm -rf bazelisk-${TARGETARCH:-amd64}.deb \\\n  && wget -qO /usr/local/bin/buildifier \\\n    https://github.com/bazelbuild/buildtools/releases/latest/download/buildifier-linux-${TARGETARCH:-amd64} \\\n  && wget -qO /usr/local/bin/buildozer \\\n    https://github.com/bazelbuild/buildtools/releases/latest/download/buildozer-linux-${TARGETARCH:-amd64} \\\n  && chmod +x \\\n    /usr/local/bin/buildifier \\\n    /usr/local/bin/buildozer \\\n  && python3 -m venv --system-site-packages /home/ubuntu/.venv \\\n  && . /home/ubuntu/.venv/bin/activate \\\n  && pip install --no-cache-dir -qq \\\n    cffconvert \\\n  && echo \"ubuntu ALL=(root) NOPASSWD:ALL\" > /etc/sudoers.d/ubuntu \\\n  && chmod 0440 /etc/sudoers.d/ubuntu\nENV LOGNAME=ubuntu\nENV PATH=\"/home/ubuntu/.venv/bin:${PATH}\"\nENV SHELL=/bin/bash\nENV USER=ubuntu\nENV VIRTUAL_ENV=/home/ubuntu/.venv\nUSER ubuntu\nWORKDIR /workspace\n"
  },
  {
    "path": "LICENSE",
    "content": "\n                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright [yyyy] [name of copyright owner]\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\n       http://www.apache.org/licenses/LICENSE-2.0\n\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"
  },
  {
    "path": "LICENSES/Apache-2.0.txt",
    "content": "                                Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\nTERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n1. Definitions.\n\n   \"License\" shall mean the terms and conditions for use, reproduction, and\n   distribution as defined by Sections 1 through 9 of this document.\n\n   \"Licensor\" shall mean the copyright owner or entity authorized by the\n   copyright owner that is granting the License.\n\n   \"Legal Entity\" shall mean the union of the acting entity and all other\n   entities that control, are controlled by, or are under common control with\n   that entity. For the purposes of this definition, \"control\" means (i) the\n   power, direct or indirect, to cause the direction or management of such\n   entity, whether by contract or otherwise, or (ii) ownership of fifty percent\n   (50%) or more of the outstanding shares, or (iii) beneficial ownership of\n   such entity.\n\n   \"You\" (or \"Your\") shall mean an individual or Legal Entity exercising\n   permissions granted by this License.\n\n   \"Source\" form shall mean the preferred form for making modifications,\n   including but not limited to software source code, documentation source, and\n   configuration files.\n\n   \"Object\" form shall mean any form resulting from mechanical transformation\n   or translation of a Source form, including but not limited to compiled\n   object code, generated documentation, and conversions to other media types.\n\n   \"Work\" shall mean the work of authorship, whether in Source or Object form,\n   made available under the License, as indicated by a copyright notice that is\n   included in or attached to the work (an example is provided in the Appendix\n   below).\n\n   \"Derivative Works\" shall mean any work, whether in Source or Object form,\n   that is based on (or derived from) the Work and for which the editorial\n   revisions, annotations, elaborations, or other modifications represent, as a\n   whole, an original work of authorship. For the purposes of this License,\n   Derivative Works shall not include works that remain separable from, or\n   merely link (or bind by name) to the interfaces of, the Work and Derivative\n   Works thereof.\n\n   \"Contribution\" shall mean any work of authorship, including the original\n   version of the Work and any modifications or additions to that Work or\n   Derivative Works thereof, that is intentionally submitted to Licensor for\n   inclusion in the Work by the copyright owner or by an individual or Legal\n   Entity authorized to submit on behalf of the copyright owner. For the\n   purposes of this definition, \"submitted\" means any form of electronic,\n   verbal, or written communication sent to the Licensor or its\n   representatives, including but not limited to communication on electronic\n   mailing lists, source code control systems, and issue tracking systems that\n   are managed by, or on behalf of, the Licensor for the purpose of discussing\n   and improving the Work, but excluding communication that is conspicuously\n   marked or otherwise designated in writing by the copyright owner as \"Not a\n   Contribution.\"\n\n   \"Contributor\" shall mean Licensor and any individual or Legal Entity on\n   behalf of whom a Contribution has been received by Licensor and subsequently\n   incorporated within the Work.\n\n2. Grant of Copyright License. Subject to the terms and conditions of this\n   License, each Contributor hereby grants to You a perpetual, worldwide,\n   non-exclusive, no-charge, royalty-free, irrevocable copyright license to\n   reproduce, prepare Derivative Works of, publicly display, publicly perform,\n   sublicense, and distribute the Work and such Derivative Works in Source or\n   Object form.\n\n3. Grant of Patent License. Subject to the terms and conditions of this\n   License, each Contributor hereby grants to You a perpetual, worldwide,\n   non-exclusive, no-charge, royalty-free, irrevocable (except as stated in\n   this section) patent license to make, have made, use, offer to sell, sell,\n   import, and otherwise transfer the Work, where such license applies only to\n   those patent claims licensable by such Contributor that are necessarily\n   infringed by their Contribution(s) alone or by combination of their\n   Contribution(s) with the Work to which such Contribution(s) was submitted.\n   If You institute patent litigation against any entity (including a\n   cross-claim or counterclaim in a lawsuit) alleging that the Work or a\n   Contribution incorporated within the Work constitutes direct or contributory\n   patent infringement, then any patent licenses granted to You under this\n   License for that Work shall terminate as of the date such litigation is\n   filed.\n\n4. Redistribution. You may reproduce and distribute copies of the Work or\n   Derivative Works thereof in any medium, with or without modifications, and\n   in Source or Object form, provided that You meet the following conditions:\n\n   (a) You must give any other recipients of the Work or Derivative Works a\n       copy of this License; and\n\n   (b) You must cause any modified files to carry prominent notices stating\n       that You changed the files; and\n\n   (c) You must retain, in the Source form of any Derivative Works that You\n       distribute, all copyright, patent, trademark, and attribution notices\n       from the Source form of the Work, excluding those notices that do not\n       pertain to any part of the Derivative Works; and\n\n   (d) If the Work includes a \"NOTICE\" text file as part of its distribution,\n       then any Derivative Works that You distribute must include a readable\n       copy of the attribution notices contained within such NOTICE file,\n       excluding those notices that do not pertain to any part of the\n       Derivative Works, in at least one of the following places: within a\n       NOTICE text file distributed as part of the Derivative Works; within the\n       Source form or documentation, if provided along with the Derivative\n       Works; or, within a display generated by the Derivative Works, if and\n       wherever such third-party notices normally appear. The contents of the\n       NOTICE file are for informational purposes only and do not modify the\n       License. You may add Your own attribution notices within Derivative\n       Works that You distribute, alongside or as an addendum to the NOTICE\n       text from the Work, provided that such additional attribution notices\n       cannot be construed as modifying the License.\n\n   You may add Your own copyright statement to Your modifications and may\n   provide additional or different license terms and conditions for use,\n   reproduction, or distribution of Your modifications, or for any such\n   Derivative Works as a whole, provided Your use, reproduction, and\n   distribution of the Work otherwise complies with the conditions stated in\n   this License.\n\n5. Submission of Contributions. Unless You explicitly state otherwise, any\n   Contribution intentionally submitted for inclusion in the Work by You to the\n   Licensor shall be under the terms and conditions of this License, without\n   any additional terms or conditions. Notwithstanding the above, nothing\n   herein shall supersede or modify the terms of any separate license agreement\n   you may have executed with Licensor regarding such Contributions.\n\n6. Trademarks. This License does not grant permission to use the trade names,\n   trademarks, service marks, or product names of the Licensor, except as\n   required for reasonable and customary use in describing the origin of the\n   Work and reproducing the content of the NOTICE file.\n\n7. Disclaimer of Warranty. Unless required by applicable law or agreed to in\n   writing, Licensor provides the Work (and each Contributor provides its\n   Contributions) on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n   KIND, either express or implied, including, without limitation, any\n   warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or\n   FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining\n   the appropriateness of using or redistributing the Work and assume any risks\n   associated with Your exercise of permissions under this License.\n\n8. Limitation of Liability. In no event and under no legal theory, whether in\n   tort (including negligence), contract, or otherwise, unless required by\n   applicable law (such as deliberate and grossly negligent acts) or agreed to\n   in writing, shall any Contributor be liable to You for damages, including\n   any direct, indirect, special, incidental, or consequential damages of any\n   character arising as a result of this License or out of the use or inability\n   to use the Work (including but not limited to damages for loss of goodwill,\n   work stoppage, computer failure or malfunction, or any and all other\n   commercial damages or losses), even if such Contributor has been advised of\n   the possibility of such damages.\n\n9. Accepting Warranty or Additional Liability. While redistributing the Work or\n   Derivative Works thereof, You may choose to offer, and charge a fee for,\n   acceptance of support, warranty, indemnity, or other liability obligations\n   and/or rights consistent with this License. However, in accepting such\n   obligations, You may act only on Your own behalf and on Your sole\n   responsibility, not on behalf of any other Contributor, and only if You\n   agree to indemnify, defend, and hold each Contributor harmless for any\n   liability incurred by, or claims asserted against, such Contributor by\n   reason of your accepting any such warranty or additional liability.\n\nEND OF TERMS AND CONDITIONS\n\nAPPENDIX: How to apply the Apache License to your work.\n\n   To apply the Apache License to your work, attach the following boilerplate\n   notice, with the fields enclosed by brackets \"[]\" replaced with your own\n   identifying information. (Don't include the brackets!)  The text should be\n   enclosed in the appropriate comment syntax for the file format. We also\n   recommend that a file or class name and description of purpose be included\n   on the same \"printed page\" as the copyright notice for easier identification\n   within third-party archives.\n\n   Copyright [yyyy] [name of copyright owner]\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\n       http://www.apache.org/licenses/LICENSE-2.0\n\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"
  },
  {
    "path": "LICENSES/CC-BY-4.0.txt",
    "content": "Creative Commons Attribution 4.0 International\n\nCreative Commons Corporation (\"Creative Commons\") is not a law firm and does\nnot provide legal services or legal advice. Distribution of Creative Commons\npublic licenses does not create a lawyer-client or other relationship. Creative\nCommons makes its licenses and related information available on an \"as-is\"\nbasis. Creative Commons gives no warranties regarding its licenses, any\nmaterial licensed under their terms and conditions, or any related information.\nCreative Commons disclaims all liability for damages resulting from their use\nto the fullest extent possible.\n\nUsing Creative Commons Public Licenses\n\nCreative Commons public licenses provide a standard set of terms and conditions\nthat creators and other rights holders may use to share original works of\nauthorship and other material subject to copyright and certain other rights\nspecified in the public license below. The following considerations are for\ninformational purposes only, are not exhaustive, and do not form part of our\nlicenses.\n\nConsiderations for licensors: Our public licenses are intended for use by those\nauthorized to give the public permission to use material in ways otherwise\nrestricted by copyright and certain other rights. Our licenses are irrevocable.\nLicensors should read and understand the terms and conditions of the license\nthey choose before applying it. Licensors should also secure all rights\nnecessary before applying our licenses so that the public can reuse the\nmaterial as expected. Licensors should clearly mark any material not subject to\nthe license. This includes other CC-licensed material, or material used under\nan exception or limitation to copyright. More considerations for licensors.\n\nConsiderations for the public: By using one of our public licenses, a licensor\ngrants the public permission to use the licensed material under specified terms\nand conditions. If the licensor's permission is not necessary for any\nreason-for example, because of any applicable exception or limitation to\ncopyright-then that use is not regulated by the license. Our licenses grant\nonly permissions under copyright and certain other rights that a licensor has\nauthority to grant. Use of the licensed material may still be restricted for\nother reasons, including because others have copyright or other rights in the\nmaterial. A licensor may make special requests, such as asking that all changes\nbe marked or described. Although not required by our licenses, you are\nencouraged to respect those requests where reasonable. More considerations for\nthe public.\n\nCreative Commons Attribution 4.0 International Public License\n\nBy exercising the Licensed Rights (defined below), You accept and agree to be\nbound by the terms and conditions of this Creative Commons Attribution 4.0\nInternational Public License (\"Public License\"). To the extent this Public\nLicense may be interpreted as a contract, You are granted the Licensed Rights\nin consideration of Your acceptance of these terms and conditions, and the\nLicensor grants You such rights in consideration of benefits the Licensor\nreceives from making the Licensed Material available under these terms and\nconditions.\n\nSection 1 - Definitions.\n\na. Adapted Material means material subject to Copyright and Similar Rights that\n   is derived from or based upon the Licensed Material and in which the\n   Licensed Material is translated, altered, arranged, transformed, or\n   otherwise modified in a manner requiring permission under the Copyright and\n   Similar Rights held by the Licensor. For purposes of this Public License,\n   where the Licensed Material is a musical work, performance, or sound\n   recording, Adapted Material is always produced where the Licensed Material\n   is synched in timed relation with a moving image.\n\nb. Adapter's License means the license You apply to Your Copyright and Similar\n   Rights in Your contributions to Adapted Material in accordance with the\n   terms and conditions of this Public License.\n\nc. Copyright and Similar Rights means copyright and/or similar rights closely\n   related to copyright including, without limitation, performance, broadcast,\n   sound recording, and Sui Generis Database Rights, without regard to how the\n   rights are labeled or categorized. For purposes of this Public License, the\n   rights specified in Section 2(b)(1)-(2) are not Copyright and Similar\n   Rights.\n\nd. Effective Technological Measures means those measures that, in the absence\n   of proper authority, may not be circumvented under laws fulfilling\n   obligations under Article 11 of the WIPO Copyright Treaty adopted on\n   December 20, 1996, and/or similar international agreements.\n\ne. Exceptions and Limitations means fair use, fair dealing, and/or any other\n   exception or limitation to Copyright and Similar Rights that applies to Your\n   use of the Licensed Material.\n\nf. Licensed Material means the artistic or literary work, database, or other\n   material to which the Licensor applied this Public License.\n\ng. Licensed Rights means the rights granted to You subject to the terms and\n   conditions of this Public License, which are limited to all Copyright and\n   Similar Rights that apply to Your use of the Licensed Material and that the\n   Licensor has authority to license.\n\nh. Licensor means the individual(s) or entity(ies) granting rights under this\n   Public License.\n\ni. Share means to provide material to the public by any means or process that\n   requires permission under the Licensed Rights, such as reproduction, public\n   display, public performance, distribution, dissemination, communication, or\n   importation, and to make material available to the public including in ways\n   that members of the public may access the material from a place and at a\n   time individually chosen by them.\n\nj. Sui Generis Database Rights means rights other than copyright resulting from\n   Directive 96/9/EC of the European Parliament and of the Council of 11 March\n   1996 on the legal protection of databases, as amended and/or succeeded, as\n   well as other essentially equivalent rights anywhere in the world.\n\nk. You means the individual or entity exercising the Licensed Rights under this\n   Public License. Your has a corresponding meaning.\n\nSection 2 - Scope.\n\na. License grant.\n\n   1. Subject to the terms and conditions of this Public License, the Licensor\n      hereby grants You a worldwide, royalty-free, non-sublicensable,\n      non-exclusive, irrevocable license to exercise the Licensed Rights in the\n      Licensed Material to:\n\n      A. reproduce and Share the Licensed Material, in whole or in part; and\n\n      B. produce, reproduce, and Share Adapted Material.\n\n   2. Exceptions and Limitations. For the avoidance of doubt, where Exceptions\n      and Limitations apply to Your use, this Public License does not apply,\n      and You do not need to comply with its terms and conditions.\n\n   3. Term. The term of this Public License is specified in Section 6(a).\n\n   4. Media and formats; technical modifications allowed. The Licensor\n      authorizes You to exercise the Licensed Rights in all media and formats\n      whether now known or hereafter created, and to make technical\n      modifications necessary to do so. The Licensor waives and/or agrees not\n      to assert any right or authority to forbid You from making technical\n      modifications necessary to exercise the Licensed Rights, including\n      technical modifications necessary to circumvent Effective Technological\n      Measures. For purposes of this Public License, simply making\n      modifications authorized by this Section 2(a)(4) never produces Adapted\n      Material.\n\n   5. Downstream recipients.\n\n      A. Offer from the Licensor - Licensed Material. Every recipient of the\n         Licensed Material automatically receives an offer from the Licensor to\n         exercise the Licensed Rights under the terms and conditions of this\n         Public License.\n\n      B. No downstream restrictions. You may not offer or impose any additional\n         or different terms or conditions on, or apply any Effective\n         Technological Measures to, the Licensed Material if doing so restricts\n         exercise of the Licensed Rights by any recipient of the Licensed\n         Material.\n\n   6. No endorsement. Nothing in this Public License constitutes or may be\n      construed as permission to assert or imply that You are, or that Your use\n      of the Licensed Material is, connected with, or sponsored, endorsed, or\n      granted official status by, the Licensor or others designated to receive\n      attribution as provided in Section 3(a)(1)(A)(i).\n\nb. Other rights.\n\n   1. Moral rights, such as the right of integrity, are not licensed under this\n      Public License, nor are publicity, privacy, and/or other similar\n      personality rights; however, to the extent possible, the Licensor waives\n      and/or agrees not to assert any such rights held by the Licensor to the\n      limited extent necessary to allow You to exercise the Licensed Rights,\n      but not otherwise.\n\n   2. Patent and trademark rights are not licensed under this Public License.\n\n   3. To the extent possible, the Licensor waives any right to collect\n      royalties from You for the exercise of the Licensed Rights, whether\n      directly or through a collecting society under any voluntary or waivable\n      statutory or compulsory licensing scheme. In all other cases the Licensor\n      expressly reserves any right to collect such royalties.\n\nSection 3 - License Conditions.\n\nYour exercise of the Licensed Rights is expressly made subject to the following\nconditions.\n\na. Attribution.\n\n   1. If You Share the Licensed Material (including in modified form), You\n      must:\n\n      A. retain the following if it is supplied by the Licensor with the\n         Licensed Material:\n\n         i.   identification of the creator(s) of the Licensed Material and any\n              others designated to receive attribution, in any reasonable\n              manner requested by the Licensor (including by pseudonym if\n              designated);\n\n         ii.  a copyright notice;\n\n         iii. a notice that refers to this Public License;\n\n         iv.  a notice that refers to the disclaimer of warranties;\n\n         v.   a URI or hyperlink to the Licensed Material to the extent\n              reasonably practicable;\n\n      B. indicate if You modified the Licensed Material and retain an\n         indication of any previous modifications; and\n\n      C. indicate the Licensed Material is licensed under this Public License,\n         and include the text of, or the URI or hyperlink to, this Public\n         License.\n\n   2. You may satisfy the conditions in Section 3(a)(1) in any reasonable\n      manner based on the medium, means, and context in which You Share the\n      Licensed Material. For example, it may be reasonable to satisfy the\n      conditions by providing a URI or hyperlink to a resource that includes\n      the required information.\n\n   3. If requested by the Licensor, You must remove any of the information\n      required by Section 3(a)(1)(A) to the extent reasonably practicable.\n\n   4. If You Share Adapted Material You produce, the Adapter's License You\n      apply must not prevent recipients of the Adapted Material from complying\n      with this Public License.\n\nSection 4 - Sui Generis Database Rights.\n\nWhere the Licensed Rights include Sui Generis Database Rights that apply to\nYour use of the Licensed Material:\n\na. for the avoidance of doubt, Section 2(a)(1) grants You the right to extract,\n   reuse, reproduce, and Share all or a substantial portion of the contents of\n   the database;\n\nb. if You include all or a substantial portion of the database contents in a\n   database in which You have Sui Generis Database Rights, then the database in\n   which You have Sui Generis Database Rights (but not its individual contents)\n   is Adapted Material; and\n\nc. You must comply with the conditions in Section 3(a) if You Share all or a\n   substantial portion of the contents of the database.\n\nFor the avoidance of doubt, this Section 4 supplements and does not replace\nYour obligations under this Public License where the Licensed Rights include\nother Copyright and Similar Rights.\n\nSection 5 - Disclaimer of Warranties and Limitation of Liability.\n\na. Unless otherwise separately undertaken by the Licensor, to the extent\n   possible, the Licensor offers the Licensed Material as-is and as-available,\n   and makes no representations or warranties of any kind concerning the\n   Licensed Material, whether express, implied, statutory, or other. This\n   includes, without limitation, warranties of title, merchantability, fitness\n   for a particular purpose, non-infringement, absence of latent or other\n   defects, accuracy, or the presence or absence of errors, whether or not\n   known or discoverable. Where disclaimers of warranties are not allowed in\n   full or in part, this disclaimer may not apply to You.\n\nb. To the extent possible, in no event will the Licensor be liable to You on\n   any legal theory (including, without limitation, negligence) or otherwise\n   for any direct, special, indirect, incidental, consequential, punitive,\n   exemplary, or other losses, costs, expenses, or damages arising out of this\n   Public License or use of the Licensed Material, even if the Licensor has\n   been advised of the possibility of such losses, costs, expenses, or damages.\n   Where a limitation of liability is not allowed in full or in part, this\n   limitation may not apply to You.\n\nc. The disclaimer of warranties and limitation of liability provided above\n   shall be interpreted in a manner that, to the extent possible, most closely\n   approximates an absolute disclaimer and waiver of all liability.\n\nSection 6 - Term and Termination.\n\na. This Public License applies for the term of the Copyright and Similar Rights\n   licensed here. However, if You fail to comply with this Public License, then\n   Your rights under this Public License terminate automatically.\n\nb. Where Your right to use the Licensed Material has terminated under Section\n   6(a), it reinstates:\n\n   1. automatically as of the date the violation is cured, provided it is cured\n      within 30 days of Your discovery of the violation; or\n\n   2. upon express reinstatement by the Licensor.\n\nc. For the avoidance of doubt, this Section 6(b) does not affect any right the\n   Licensor may have to seek remedies for Your violations of this Public\n   License.\n\nd. For the avoidance of doubt, the Licensor may also offer the Licensed\n   Material under separate terms or conditions or stop distributing the\n   Licensed Material at any time; however, doing so will not terminate this\n   Public License.\n\ne. Sections 1, 5, 6, 7, and 8 survive termination of this Public License.\n\nSection 7 - Other Terms and Conditions.\n\na. The Licensor shall not be bound by any additional or different terms or\n   conditions communicated by You unless expressly agreed.\n\nb. Any arrangements, understandings, or agreements regarding the Licensed\n   Material not stated herein are separate from and independent of the terms\n   and conditions of this Public License.\n\nSection 8 - Interpretation.\n\na. For the avoidance of doubt, this Public License does not, and shall not be\n   interpreted to, reduce, limit, restrict, or impose conditions on any use of\n   the Licensed Material that could lawfully be made without permission under\n   this Public License.\n\nb. To the extent possible, if any provision of this Public License is deemed\n   unenforceable, it shall be automatically reformed to the minimum extent\n   necessary to make it enforceable. If the provision cannot be reformed, it\n   shall be severed from this Public License without affecting the\n   enforceability of the remaining terms and conditions.\n\nc. No term or condition of this Public License will be waived and no failure to\n   comply consented to unless expressly agreed to by the Licensor.\n\nd. Nothing in this Public License constitutes or may be interpreted as a\n   limitation upon, or waiver of, any privileges and immunities that apply to\n   the Licensor or You, including from the legal processes of any jurisdiction\n   or authority.\n\nCreative Commons is not a party to its public licenses. Notwithstanding,\nCreative Commons may elect to apply one of its public licenses to material it\npublishes and in those instances will be considered the \"Licensor.\" Except for\nthe limited purpose of indicating that material is shared under a Creative\nCommons public license or as otherwise permitted by the Creative Commons\npolicies published at creativecommons.org/policies, Creative Commons does not\nauthorize the use of the trademark \"Creative Commons\" or any other trademark or\nlogo of Creative Commons without its prior written consent including, without\nlimitation, in connection with any unauthorized modifications to any of its\npublic licenses or any other arrangements, understandings, or agreements\nconcerning use of licensed material. For the avoidance of doubt, this paragraph\ndoes not form part of the public licenses.\n\nCreative Commons may be contacted at creativecommons.org.\n"
  },
  {
    "path": "LICENSES/CC-BY-SA-4.0.txt",
    "content": "Creative Commons Attribution-ShareAlike 4.0 International\n\nCreative Commons Corporation (\"Creative Commons\") is not a law firm and does\nnot provide legal services or legal advice. Distribution of Creative Commons\npublic licenses does not create a lawyer-client or other relationship. Creative\nCommons makes its licenses and related information available on an \"as-is\"\nbasis. Creative Commons gives no warranties regarding its licenses, any\nmaterial licensed under their terms and conditions, or any related information.\nCreative Commons disclaims all liability for damages resulting from their use\nto the fullest extent possible.\n\nUsing Creative Commons Public Licenses\n\nCreative Commons public licenses provide a standard set of terms and conditions\nthat creators and other rights holders may use to share original works of\nauthorship and other material subject to copyright and certain other rights\nspecified in the public license below. The following considerations are for\ninformational purposes only, are not exhaustive, and do not form part of our\nlicenses.\n\nConsiderations for licensors: Our public licenses are intended for use by those\nauthorized to give the public permission to use material in ways otherwise\nrestricted by copyright and certain other rights. Our licenses are irrevocable.\nLicensors should read and understand the terms and conditions of the license\nthey choose before applying it. Licensors should also secure all rights\nnecessary before applying our licenses so that the public can reuse the\nmaterial as expected. Licensors should clearly mark any material not subject to\nthe license. This includes other CC-licensed material, or material used under\nan exception or limitation to copyright. More considerations for licensors.\n\nConsiderations for the public: By using one of our public licenses, a licensor\ngrants the public permission to use the licensed material under specified terms\nand conditions. If the licensor's permission is not necessary for any\nreason-for example, because of any applicable exception or limitation to\ncopyright-then that use is not regulated by the license. Our licenses grant\nonly permissions under copyright and certain other rights that a licensor has\nauthority to grant. Use of the licensed material may still be restricted for\nother reasons, including because others have copyright or other rights in the\nmaterial. A licensor may make special requests, such as asking that all changes\nbe marked or described.\n\nAlthough not required by our licenses, you are encouraged to respect those\nrequests where reasonable. More considerations for the public.\n\nCreative Commons Attribution-ShareAlike 4.0 International Public License\n\nBy exercising the Licensed Rights (defined below), You accept and agree to be\nbound by the terms and conditions of this Creative Commons\nAttribution-ShareAlike 4.0 International Public License (\"Public License\"). To\nthe extent this Public License may be interpreted as a contract, You are\ngranted the Licensed Rights in consideration of Your acceptance of these terms\nand conditions, and the Licensor grants You such rights in consideration of\nbenefits the Licensor receives from making the Licensed Material available\nunder these terms and conditions.\n\nSection 1 - Definitions.\n\na. Adapted Material means material subject to Copyright and Similar Rights that\n   is derived from or based upon the Licensed Material and in which the\n   Licensed Material is translated, altered, arranged, transformed, or\n   otherwise modified in a manner requiring permission under the Copyright and\n   Similar Rights held by the Licensor. For purposes of this Public License,\n   where the Licensed Material is a musical work, performance, or sound\n   recording, Adapted Material is always produced where the Licensed Material\n   is synched in timed relation with a moving image.\n\nb. Adapter's License means the license You apply to Your Copyright and Similar\n   Rights in Your contributions to Adapted Material in accordance with the\n   terms and conditions of this Public License.\n\nc. BY-SA Compatible License means a license listed at\n   creativecommons.org/compatiblelicenses, approved by Creative Commons as\n   essentially the equivalent of this Public License.\n\nd. Copyright and Similar Rights means copyright and/or similar rights closely\n   related to copyright including, without limitation, performance, broadcast,\n   sound recording, and Sui Generis Database Rights, without regard to how the\n   rights are labeled or categorized. For purposes of this Public License, the\n   rights specified in Section 2(b)(1)-(2) are not Copyright and Similar\n   Rights.\n\ne. Effective Technological Measures means those measures that, in the absence\n   of proper authority, may not be circumvented under laws fulfilling\n   obligations under Article 11 of the WIPO Copyright Treaty adopted on\n   December 20, 1996, and/or similar international agreements.\n\nf. Exceptions and Limitations means fair use, fair dealing, and/or any other\n   exception or limitation to Copyright and Similar Rights that applies to Your\n   use of the Licensed Material.\n\ng. License Elements means the license attributes listed in the name of a\n   Creative Commons Public License. The License Elements of this Public License\n   are Attribution and ShareAlike.\n\nh. Licensed Material means the artistic or literary work, database, or other\n   material to which the Licensor applied this Public License.\n\ni. Licensed Rights means the rights granted to You subject to the terms and\n   conditions of this Public License, which are limited to all Copyright and\n   Similar Rights that apply to Your use of the Licensed Material and that the\n   Licensor has authority to license.\n\nj. Licensor means the individual(s) or entity(ies) granting rights under this\n   Public License.\n\nk. Share means to provide material to the public by any means or process that\n   requires permission under the Licensed Rights, such as reproduction, public\n   display, public performance, distribution, dissemination, communication, or\n   importation, and to make material available to the public including in ways\n   that members of the public may access the material from a place and at a\n   time individually chosen by them.\n\nl. Sui Generis Database Rights means rights other than copyright resulting from\n   Directive 96/9/EC of the European Parliament and of the Council of 11 March\n   1996 on the legal protection of databases, as amended and/or succeeded, as\n   well as other essentially equivalent rights anywhere in the world.\n\nm. You means the individual or entity exercising the Licensed Rights under this\n   Public License. Your has a corresponding meaning.\n\nSection 2 - Scope.\n\na. License grant.\n\n   1. Subject to the terms and conditions of this Public License, the Licensor\n      hereby grants You a worldwide, royalty-free, non-sublicensable,\n      non-exclusive, irrevocable license to exercise the Licensed Rights in the\n      Licensed Material to:\n\n      A. reproduce and Share the Licensed Material, in whole or in part; and\n\n      B. produce, reproduce, and Share Adapted Material.\n\n   2. Exceptions and Limitations. For the avoidance of doubt, where Exceptions\n      and Limitations apply to Your use, this Public License does not apply,\n      and You do not need to comply with its terms and conditions.\n\n   3. Term. The term of this Public License is specified in Section 6(a).\n\n   4. Media and formats; technical modifications allowed. The Licensor\n      authorizes You to exercise the Licensed Rights in all media and formats\n      whether now known or hereafter created, and to make technical\n      modifications necessary to do so. The Licensor waives and/or agrees not\n      to assert any right or authority to forbid You from making technical\n      modifications necessary to exercise the Licensed Rights, including\n      technical modifications necessary to circumvent Effective Technological\n      Measures. For purposes of this Public License, simply making\n      modifications authorized by this Section 2(a)(4) never produces Adapted\n      Material.\n\n   5. Downstream recipients.\n\n      A. Offer from the Licensor - Licensed Material. Every recipient of the\n         Licensed Material automatically receives an offer from the Licensor to\n         exercise the Licensed Rights under the terms and conditions of this\n         Public License.\n\n      B. Additional offer from the Licensor - Adapted Material. Every recipient\n         of Adapted Material from You automatically receives an offer from the\n         Licensor to exercise the Licensed Rights in the Adapted Material under\n         the conditions of the Adapter's License You apply.\n\n      C. No downstream restrictions. You may not offer or impose any additional\n         or different terms or conditions on, or apply any Effective\n         Technological Measures to, the Licensed Material if doing so restricts\n         exercise of the Licensed Rights by any recipient of the Licensed\n         Material.\n\n   6. No endorsement. Nothing in this Public License constitutes or may be\n      construed as permission to assert or imply that You are, or that Your use\n      of the Licensed Material is, connected with, or sponsored, endorsed, or\n      granted official status by, the Licensor or others designated to receive\n      attribution as provided in Section 3(a)(1)(A)(i).\n\nb. Other rights.\n\n   1. Moral rights, such as the right of integrity, are not licensed under this\n      Public License, nor are publicity, privacy, and/or other similar\n      personality rights; however, to the extent possible, the Licensor waives\n      and/or agrees not to assert any such rights held by the Licensor to the\n      limited extent necessary to allow You to exercise the Licensed Rights,\n      but not otherwise.\n\n   2. Patent and trademark rights are not licensed under this Public License.\n\n   3. To the extent possible, the Licensor waives any right to collect\n      royalties from You for the exercise of the Licensed Rights, whether\n      directly or through a collecting society under any voluntary or waivable\n      statutory or compulsory licensing scheme. In all other cases the Licensor\n      expressly reserves any right to collect such royalties.\n\nSection 3 - License Conditions.\n\nYour exercise of the Licensed Rights is expressly made subject to the following\nconditions.\n\na. Attribution.\n\n   1. If You Share the Licensed Material (including in modified form), You\n      must:\n\n      A. retain the following if it is supplied by the Licensor with the\n         Licensed Material:\n\n         i.   identification of the creator(s) of the Licensed Material and any\n              others designated to receive attribution, in any reasonable\n              manner requested by the Licensor (including by pseudonym if\n              designated);\n\n         ii.  a copyright notice;\n\n         iii. a notice that refers to this Public License;\n\n         iv.  a notice that refers to the disclaimer of warranties;\n\n         v.   a URI or hyperlink to the Licensed Material to the extent\n              reasonably practicable;\n\n      B. indicate if You modified the Licensed Material and retain an\n         indication of any previous modifications; and\n\n      C. indicate the Licensed Material is licensed under this Public License,\n         and include the text of, or the URI or hyperlink to, this Public\n         License.\n\n   2. You may satisfy the conditions in Section 3(a)(1) in any reasonable\n      manner based on the medium, means, and context in which You Share the\n      Licensed Material. For example, it may be reasonable to satisfy the\n      conditions by providing a URI or hyperlink to a resource that includes\n      the required information.\n\n   3. If requested by the Licensor, You must remove any of the information\n      required by Section 3(a)(1)(A) to the extent reasonably practicable.\n\nb. ShareAlike.In addition to the conditions in Section 3(a), if You Share\n   Adapted Material You produce, the following conditions also apply.\n\n   1. The Adapter's License You apply must be a Creative Commons license with\n      the same License Elements, this version or later, or a BY-SA Compatible\n      License.\n\n   2. You must include the text of, or the URI or hyperlink to, the Adapter's\n      License You apply. You may satisfy this condition in any reasonable\n      manner based on the medium, means, and context in which You Share Adapted\n      Material.\n\n   3. You may not offer or impose any additional or different terms or\n      conditions on, or apply any Effective Technological Measures to, Adapted\n      Material that restrict exercise of the rights granted under the Adapter's\n      License You apply.\n\nSection 4 - Sui Generis Database Rights.\n\nWhere the Licensed Rights include Sui Generis Database Rights that apply to\nYour use of the Licensed Material:\n\na. for the avoidance of doubt, Section 2(a)(1) grants You the right to extract,\n   reuse, reproduce, and Share all or a substantial portion of the contents of\n   the database;\n\nb. if You include all or a substantial portion of the database contents in a\n   database in which You have Sui Generis Database Rights, then the database in\n   which You have Sui Generis Database Rights (but not its individual contents)\n   is Adapted Material, including for purposes of Section 3(b); and\n\nc. You must comply with the conditions in Section 3(a) if You Share all or a\n   substantial portion of the contents of the database.\n\nFor the avoidance of doubt, this Section 4 supplements and does not replace\nYour obligations under this Public License where the Licensed Rights include\nother Copyright and Similar Rights.\n\nSection 5 - Disclaimer of Warranties and Limitation of Liability.\n\na. Unless otherwise separately undertaken by the Licensor, to the extent\n   possible, the Licensor offers the Licensed Material as-is and as-available,\n   and makes no representations or warranties of any kind concerning the\n   Licensed Material, whether express, implied, statutory, or other. This\n   includes, without limitation, warranties of title, merchantability, fitness\n   for a particular purpose, non-infringement, absence of latent or other\n   defects, accuracy, or the presence or absence of errors, whether or not\n   known or discoverable. Where disclaimers of warranties are not allowed in\n   full or in part, this disclaimer may not apply to You.\n\nb. To the extent possible, in no event will the Licensor be liable to You on\n   any legal theory (including, without limitation, negligence) or otherwise\n   for any direct, special, indirect, incidental, consequential, punitive,\n   exemplary, or other losses, costs, expenses, or damages arising out of this\n   Public License or use of the Licensed Material, even if the Licensor has\n   been advised of the possibility of such losses, costs, expenses, or damages.\n   Where a limitation of liability is not allowed in full or in part, this\n   limitation may not apply to You.\n\nc. The disclaimer of warranties and limitation of liability provided above\n   shall be interpreted in a manner that, to the extent possible, most closely\n   approximates an absolute disclaimer and waiver of all liability.\n\nSection 6 - Term and Termination.\n\na. This Public License applies for the term of the Copyright and Similar Rights\n   licensed here. However, if You fail to comply with this Public License, then\n   Your rights under this Public License terminate automatically.\n\nb. Where Your right to use the Licensed Material has terminated under Section\n   6(a), it reinstates:\n\n   1. automatically as of the date the violation is cured, provided it is cured\n      within 30 days of Your discovery of the violation; or\n\n   2. upon express reinstatement by the Licensor.\n\nc. For the avoidance of doubt, this Section 6(b) does not affect any right the\n   Licensor may have to seek remedies for Your violations of this Public\n   License.\n\nd. For the avoidance of doubt, the Licensor may also offer the Licensed\n   Material under separate terms or conditions or stop distributing the\n   Licensed Material at any time; however, doing so will not terminate this\n   Public License.\n\ne. Sections 1, 5, 6, 7, and 8 survive termination of this Public License.\n\nSection 7 - Other Terms and Conditions.\n\na. The Licensor shall not be bound by any additional or different terms or\n   conditions communicated by You unless expressly agreed.\n\nb. Any arrangements, understandings, or agreements regarding the Licensed\n   Material not stated herein are separate from and independent of the terms\n   and conditions of this Public License.\n\nSection 8 - Interpretation.\n\na. For the avoidance of doubt, this Public License does not, and shall not be\n   interpreted to, reduce, limit, restrict, or impose conditions on any use of\n   the Licensed Material that could lawfully be made without permission under\n   this Public License.\n\nb. To the extent possible, if any provision of this Public License is deemed\n   unenforceable, it shall be automatically reformed to the minimum extent\n   necessary to make it enforceable. If the provision cannot be reformed, it\n   shall be severed from this Public License without affecting the\n   enforceability of the remaining terms and conditions.\n\nc. No term or condition of this Public License will be waived and no failure to\n   comply consented to unless expressly agreed to by the Licensor.\n\nd. Nothing in this Public License constitutes or may be interpreted as a\n   limitation upon, or waiver of, any privileges and immunities that apply to\n   the Licensor or You, including from the legal processes of any jurisdiction\n   or authority.\n\nCreative Commons is not a party to its public licenses. Notwithstanding,\nCreative Commons may elect to apply one of its public licenses to material it\npublishes and in those instances will be considered the \"Licensor.\" Except for\nthe limited purpose of indicating that material is shared under a Creative\nCommons public license or as otherwise permitted by the Creative Commons\npolicies published at creativecommons.org/policies, Creative Commons does not\nauthorize the use of the trademark \"Creative Commons\" or any other trademark or\nlogo of Creative Commons without its prior written consent including, without\nlimitation, in connection with any unauthorized modifications to any of its\npublic licenses or any other arrangements, understandings, or agreements\nconcerning use of licensed material. For the avoidance of doubt, this paragraph\ndoes not form part of the public licenses.\n\nCreative Commons may be contacted at creativecommons.org.\n"
  },
  {
    "path": "LICENSES/CC0-1.0.txt",
    "content": "Creative Commons Legal Code\n\nCC0 1.0 Universal\n\n    CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE\n    LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN\n    ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS\n    INFORMATION ON AN \"AS-IS\" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES\n    REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS\n    PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM\n    THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED\n    HEREUNDER.\n\nStatement of Purpose\n\nThe laws of most jurisdictions throughout the world automatically confer\nexclusive Copyright and Related Rights (defined below) upon the creator\nand subsequent owner(s) (each and all, an \"owner\") of an original work of\nauthorship and/or a database (each, a \"Work\").\n\nCertain owners wish to permanently relinquish those rights to a Work for\nthe purpose of contributing to a commons of creative, cultural and\nscientific works (\"Commons\") that the public can reliably and without fear\nof later claims of infringement build upon, modify, incorporate in other\nworks, reuse and redistribute as freely as possible in any form whatsoever\nand for any purposes, including without limitation commercial purposes.\nThese owners may contribute to the Commons to promote the ideal of a free\nculture and the further production of creative, cultural and scientific\nworks, or to gain reputation or greater distribution for their Work in\npart through the use and efforts of others.\n\nFor these and/or other purposes and motivations, and without any\nexpectation of additional consideration or compensation, the person\nassociating CC0 with a Work (the \"Affirmer\"), to the extent that he or she\nis an owner of Copyright and Related Rights in the Work, voluntarily\nelects to apply CC0 to the Work and publicly distribute the Work under its\nterms, with knowledge of his or her Copyright and Related Rights in the\nWork and the meaning and intended legal effect of CC0 on those rights.\n\n1. Copyright and Related Rights. A Work made available under CC0 may be\nprotected by copyright and related or neighboring rights (\"Copyright and\nRelated Rights\"). Copyright and Related Rights include, but are not\nlimited to, the following:\n\n  i. the right to reproduce, adapt, distribute, perform, display,\n     communicate, and translate a Work;\n ii. moral rights retained by the original author(s) and/or performer(s);\niii. publicity and privacy rights pertaining to a person's image or\n     likeness depicted in a Work;\n iv. rights protecting against unfair competition in regards to a Work,\n     subject to the limitations in paragraph 4(a), below;\n  v. rights protecting the extraction, dissemination, use and reuse of data\n     in a Work;\n vi. database rights (such as those arising under Directive 96/9/EC of the\n     European Parliament and of the Council of 11 March 1996 on the legal\n     protection of databases, and under any national implementation\n     thereof, including any amended or successor version of such\n     directive); and\nvii. other similar, equivalent or corresponding rights throughout the\n     world based on applicable law or treaty, and any national\n     implementations thereof.\n\n2. Waiver. To the greatest extent permitted by, but not in contravention\nof, applicable law, Affirmer hereby overtly, fully, permanently,\nirrevocably and unconditionally waives, abandons, and surrenders all of\nAffirmer's Copyright and Related Rights and associated claims and causes\nof action, whether now known or unknown (including existing as well as\nfuture claims and causes of action), in the Work (i) in all territories\nworldwide, (ii) for the maximum duration provided by applicable law or\ntreaty (including future time extensions), (iii) in any current or future\nmedium and for any number of copies, and (iv) for any purpose whatsoever,\nincluding without limitation commercial, advertising or promotional\npurposes (the \"Waiver\"). Affirmer makes the Waiver for the benefit of each\nmember of the public at large and to the detriment of Affirmer's heirs and\nsuccessors, fully intending that such Waiver shall not be subject to\nrevocation, rescission, cancellation, termination, or any other legal or\nequitable action to disrupt the quiet enjoyment of the Work by the public\nas contemplated by Affirmer's express Statement of Purpose.\n\n3. Public License Fallback. Should any part of the Waiver for any reason\nbe judged legally invalid or ineffective under applicable law, then the\nWaiver shall be preserved to the maximum extent permitted taking into\naccount Affirmer's express Statement of Purpose. In addition, to the\nextent the Waiver is so judged Affirmer hereby grants to each affected\nperson a royalty-free, non transferable, non sublicensable, non exclusive,\nirrevocable and unconditional license to exercise Affirmer's Copyright and\nRelated Rights in the Work (i) in all territories worldwide, (ii) for the\nmaximum duration provided by applicable law or treaty (including future\ntime extensions), (iii) in any current or future medium and for any number\nof copies, and (iv) for any purpose whatsoever, including without\nlimitation commercial, advertising or promotional purposes (the\n\"License\"). The License shall be deemed effective as of the date CC0 was\napplied by Affirmer to the Work. Should any part of the License for any\nreason be judged legally invalid or ineffective under applicable law, such\npartial invalidity or ineffectiveness shall not invalidate the remainder\nof the License, and in such case Affirmer hereby affirms that he or she\nwill not (i) exercise any of his or her remaining Copyright and Related\nRights in the Work or (ii) assert any associated claims and causes of\naction with respect to the Work, in either case contrary to Affirmer's\nexpress Statement of Purpose.\n\n4. Limitations and Disclaimers.\n\n a. No trademark or patent rights held by Affirmer are waived, abandoned,\n    surrendered, licensed or otherwise affected by this document.\n b. Affirmer offers the Work as-is and makes no representations or\n    warranties of any kind concerning the Work, express, implied,\n    statutory or otherwise, including without limitation warranties of\n    title, merchantability, fitness for a particular purpose, non\n    infringement, or the absence of latent or other defects, accuracy, or\n    the present or absence of errors, whether or not discoverable, all to\n    the greatest extent permissible under applicable law.\n c. Affirmer disclaims responsibility for clearing rights of other persons\n    that may apply to the Work or any use thereof, including without\n    limitation any person's Copyright and Related Rights in the Work.\n    Further, Affirmer disclaims responsibility for obtaining any necessary\n    consents, permissions or other rights required for any use of the\n    Work.\n d. Affirmer understands and acknowledges that Creative Commons is not a\n    party to this document and has no duty or obligation with respect to\n    this CC0 or use of the Work.\n"
  },
  {
    "path": "MODULE.bazel",
    "content": "# -*- mode: bazel; -*-\n# vi: set ft=bazel:\n\n#\n# MODULE.bazel\n# RVO2-3D Library\n#\n# SPDX-FileCopyrightText: 2008 University of North Carolina at Chapel Hill\n# SPDX-License-Identifier: Apache-2.0\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#\n#     https://www.apache.org/licenses/LICENSE-2.0\n#\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# Please send all bug reports to <geom@cs.unc.edu>.\n#\n# The authors may be contacted via:\n#\n# Jur van den Berg, Stephen J. Guy, Jamie Snape, Ming C. Lin, Dinesh Manocha\n# Dept. of Computer Science\n# 201 S. Columbia St.\n# Frederick P. Brooks, Jr. Computer Science Bldg.\n# Chapel Hill, N.C. 27599-3175\n# United States of America\n#\n# <https://gamma.cs.unc.edu/RVO2/>\n#\n\nmodule(\n    name = \"rvo_3d\",\n    version = \"1.1.0\",\n)\n\nbazel_dep(\n    name = \"apple_support\",\n    version = \"2.5.3\",\n    dev_dependency = True,\n    repo_name = \"build_bazel_apple_support\",\n)\n\napple_cc_configure = use_extension(\n    \"@build_bazel_apple_support//crosstool:setup.bzl\",\n    \"apple_cc_configure_extension\",\n)\nuse_repo(apple_cc_configure, \"local_config_apple_cc\")\n\nbazel_dep(name = \"rules_cc\", version = \"0.2.17\")\nbazel_dep(name = \"rules_license\", version = \"1.0.0\")\n\nbazel_dep(name = \"rules_python\", version = \"1.9.0\", dev_dependency = True)\n\npython = use_extension(\n    \"@rules_python//python/extensions:python.bzl\",\n    \"python\",\n)\npython.toolchain(\n    ignore_root_user_error = True,\n    is_default = True,\n    python_version = \"3.14\",\n)\n\nbazel_dep(name = \"platforms\", version = \"1.0.0\", dev_dependency = True)\nbazel_dep(name = \"rules_pkg\", version = \"1.2.0\", dev_dependency = True)\n"
  },
  {
    "path": "QUALITY_DECLARATION.md",
    "content": "<!--\nQUALITY_DECLARATION.md\nRVO2-3D Library\n\nSPDX-FileCopyrightText: 2008 University of North Carolina at Chapel Hill\nSPDX-License-Identifier: CC-BY-SA-4.0\n\nCreative Commons Attribution-ShareAlike 4.0 International Public License\n\nYou are free to:\n\n* Share -- copy and redistribute the material in any medium or format\n\n* ShareAlike -- If you remix, transform, or build upon the material, you must\n  distribute your contributions under the same license as the original\n\n* Adapt -- remix, transform, and build upon the material for any purpose, even\n  commercially.\n\nThe licensor cannot revoke these freedoms as long as you follow the license\nterms.\n\nUnder the following terms:\n\n* Attribution -- You must give appropriate credit, provide a link to the\n  license, and indicate if changes were made. You may do so in any reasonable\n  manner, but not in any way that suggests the licensor endorses you or your\n  use.\n\n* No additional restrictions -- You may not apply legal terms or technological\n  measures that legally restrict others from doing anything the license\n  permits.\n\nNotices:\n\n* You do not have to comply with the license for elements of the material in\n  the public domain or where your use is permitted by an applicable exception\n  or limitation.\n\n* No warranties are given. The license may not give you all of the permissions\n  necessary for your intended use. For example, other rights such as publicity,\n  privacy, or moral rights may limit how you use the material.\n\nPlease send all bug reports to <geom@cs.unc.edu>.\n\nThe authors may be contacted via:\n\nJur van den Berg, Stephen J. Guy, Jamie Snape, Ming C. Lin, Dinesh Manocha\nDept. of Computer Science\n201 S. Columbia St.\nFrederick P. Brooks, Jr. Computer Science Bldg.\nChapel Hill, N.C. 27599-3175\nUnited States of America\n\n<https://gamma.cs.unc.edu/RVO2/>\n-->\n\n# `RVO2-3D Library` Quality Declaration\n\nThe package `RVO2-3D Library` claims to be in the **Quality Level 2** category.\n\nBelow are the rationales, notes, and caveats for this claim, organized by each\nrequirement listed in the Package Requirements for Quality Level 2 in\n[REP-2004](https://www.ros.org/reps/rep-2004.html).\n\n## Version Policy [1]\n\n### Version Scheme [1.i]\n\n`RVO2-3D Library` uses [Semantic Versioning 2.0.0](https://semver.org/), and is\nat version `1.1.0`. The version is declared in `CMakeLists.txt` and\n`MODULE.bazel`.\n\n### Version Stability [1.ii]\n\n`RVO2-3D Library` is at a stable version (`1.1.0`), which is greater than\n`1.0.0`.\n\n### Public API Declaration [1.iii]\n\nThe public API of `RVO2-3D Library` is the set of symbols declared in\n[`src/RVO.h`](src/RVO.h). This header aggregates the public interfaces of\n`RVOSimulator`, `Vector3`, and `Plane`. Internal implementation details in\n`Agent` and `KdTree` are not part of the public API.\n\n### API Stability Within a Released Version [1.iv]\n\nThe public API is stable across patch and minor versions. Breaking API changes\nare only introduced in new major versions.\n\n### ABI Stability Within a Released Version [1.v]\n\nABI compatibility is maintained across patch versions within the same\n`major.minor` release series. New major or minor versions may introduce\nABI-breaking changes.\n\n## Change Control Process [2]\n\n### Change Requests [2.i]\n\nAll changes to `RVO2-3D Library` are submitted through pull requests on\n[GitHub](https://github.com/snape/RVO2-3D). Direct commits to the `main` branch\nare not permitted outside of automated tooling.\n\n### Contributor Origin [2.ii]\n\nAll contributors must sign off on their commits using the\n[Developer Certificate of Origin (DCO)](https://developercertificate.org/),\nenforced via the DCO GitHub App on every pull request.\n\n### Peer Review Policy [2.iii]\n\nAs a single-maintainer project, all changes are reviewed by the primary\nmaintainer [@snape](https://github.com/snape) before merging.\n\n### Continuous Integration [2.iv]\n\nCI is performed via GitHub Actions on every push and pull request to `main`,\nand on a daily schedule:\n\n- [`.github/workflows/ci.yml`](.github/workflows/ci.yml): builds and tests\n  with both CMake and Bazel on AlmaLinux, Alpine, Arch Linux, Fedora,\n  openSUSE, and Ubuntu (amd64 and arm64), and macOS (arm64). CMake builds\n  enable `BUILD_TESTING`, `ENABLE_HARDENING`, `ENABLE_OPENMP`, and\n  `WARNINGS_AS_ERRORS`.\n- [`.github/workflows/codeql.yml`](.github/workflows/codeql.yml): runs GitHub\n  CodeQL semantic code analysis for C++ on a weekly schedule.\n\n### Documentation Policy [2.v]\n\nChanges are documented through commit messages and pull request descriptions\non GitHub.\n\n## Documentation [3]\n\n### Feature Documentation [3.i]\n\nAll features of `RVO2-3D Library` are documented in the Doxygen markup within\n[`src/RVO.h`](src/RVO.h) and related headers, including a usage guide,\nparameter overview, and example code. One annotated example program\n([`examples/Sphere.cc`](examples/Sphere.cc)) demonstrates typical usage\npatterns covering agents and step-wise simulation.\n\n### Public API Documentation [3.ii]\n\nAll public API elements are documented with Doxygen markup. HTML documentation\nis generated from the source headers using `cmake -DBUILD_DOCUMENTATION=ON`\nand installed with the library.\n\n### License [3.iii]\n\nSource code is licensed under the\n[Apache License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0).\nDocumentation is licensed under the\n[Creative Commons Attribution-ShareAlike 4.0 International (CC-BY-SA-4.0)](https://creativecommons.org/licenses/by-sa/4.0/)\nPublic License.\n\nThe project uses the [REUSE Specification](https://reuse.software/) for license\ncompliance. Every source file contains machine-readable SPDX license and\ncopyright headers, and license texts are provided in the [`LICENSES/`](LICENSES/)\ndirectory. License compliance is verified by the `reuse` pre-commit hook.\n\n### Copyright Statement [3.iv]\n\nCopyright is held by the University of North Carolina at Chapel Hill. All\nsource files include the SPDX copyright notice:\n\n```\nSPDX-FileCopyrightText: 2008 University of North Carolina at Chapel Hill\n```\n\n### Quality Declaration [3.v]\n\nThis document is the quality declaration for `RVO2-3D Library` and is linked from\nthe project README.\n\n## Testing [4]\n\n### Feature Testing [4.i]\n\nOne system-level simulation scenario forms the test suite, run via `ctest`\n(CMake) and `bazel test` (Bazel):\n\n- **Sphere**: 812 agents initially distributed evenly on a sphere moving to\n  their antipodal positions.\n\nThis scenario exercises all documented features of the library, including\nagent management, the k-D tree spatial index, and step-wise simulation.\n\n### Public API Testing [4.ii]\n\nThe simulation scenario exercises all major public API functions of\n`RVOSimulator`, `Vector3`, and `Plane`. Dedicated unit tests for individual\nAPI functions are not currently present.\n\n### Coverage [4.iii]\n\nCode coverage is not currently tracked. The simulation scenario provides\nbroad functional coverage of the library, but no formal coverage measurement\nor policy is in place. This is a known gap relative to Quality Level 2\nrequirements.\n\n### Performance [4.iv]\n\nNo formal performance regression tests are in place. The simulation scenario\nimplicitly exercises performance characteristics of the library (e.g., the\nSphere scenario with 812 agents), but no automated performance benchmarks are\nrun in CI.\n\n### Linters and Static Analysis [4.v]\n\nThe following linters and static analysis tools are enforced, with all warnings\ntreated as errors in CI:\n\n- **clang-format**: code formatting enforced via [`.clang-format`](.clang-format)\n  (Google style with `PointerAlignment: Right`)\n- **clang-tidy**: static analysis via [`.clang-tidy`](.clang-tidy), enabling\n  `bugprone-*`, `cert-*`, `clang-analyzer-*`, `cppcoreguidelines-*`,\n  `google-*`, `performance-*`, `portability-*`, `readability-*`, and\n  `openmp-*` checks, with `WarningsAsErrors: '*'`\n- **cpplint**: Google C++ style enforcement via [`CPPLINT.cfg`](CPPLINT.cfg)\n- **buildifier**: Bazel file formatting via [`.buildifier.json`](.buildifier.json)\n- **CodeQL**: GitHub's semantic code analysis for C++ via\n  [`.github/workflows/codeql.yml`](.github/workflows/codeql.yml)\n- **pre-commit hooks**: `codespell` (spell checking), `yamllint`, `actionlint`\n  (workflow validation), REUSE compliance, case-conflict detection, and\n  trailing-whitespace removal via [`.pre-commit-config.yaml`](.pre-commit-config.yaml)\n\n## Dependencies [5]\n\n### Direct Runtime ROS Dependencies [5.i]\n\nNone.\n\n### Optional Direct Runtime ROS Dependencies [5.ii]\n\nNone.\n\n### Direct Runtime non-ROS Dependencies [5.iii]\n\n- **C++ Standard Library**: provided by the compiler toolchain (GCC, Clang, or\n  MSVC). This is a de facto standard with no quality level concerns.\n- **OpenMP** (optional): a widely-adopted, ISO-standardized API for shared-memory\n  parallel computing, available in all major compiler toolchains. Enabling\n  OpenMP parallelizes simulation steps across available processors.\n\n## Platform Support [6]\n\n`RVO2-3D Library` is built and tested continuously via GitHub Actions on the\nfollowing platforms:\n\n| Platform       | Architecture | Build System |\n|----------------|--------------|--------------|\n| AlmaLinux 10   | amd64        | CMake, Bazel |\n| Alpine Linux   | amd64        | CMake, Bazel |\n| Arch Linux     | amd64        | CMake, Bazel |\n| Fedora         | amd64        | CMake, Bazel |\n| openSUSE Leap  | amd64        | CMake, Bazel |\n| Ubuntu         | amd64, arm64 | CMake, Bazel |\n| macOS          | arm64        | CMake, Bazel |\n\n## Security [7]\n\n### Vulnerability Disclosure Policy [7.i]\n\nThe security policy is documented in\n[`.github/SECURITY.md`](.github/SECURITY.md). Vulnerability reports should be\nsent to [geom@cs.unc.edu](mailto:geom@cs.unc.edu). The current release is\nsupported with security updates when practical.\n"
  },
  {
    "path": "README.md",
    "content": "<!--\nREADME.md\nRVO2-3D Library\n\nSPDX-FileCopyrightText: 2008 University of North Carolina at Chapel Hill\nSPDX-License-Identifier: CC-BY-SA-4.0\n\nCreative Commons Attribution-ShareAlike 4.0 International Public License\n\nYou are free to:\n\n* Share -- copy and redistribute the material in any medium or format\n\n* ShareAlike -- If you remix, transform, or build upon the material, you must\n  distribute your contributions under the same license as the original\n\n* Adapt -- remix, transform, and build upon the material for any purpose, even\n  commercially.\n\nThe licensor cannot revoke these freedoms as long as you follow the license\nterms.\n\nUnder the following terms:\n\n* Attribution -- You must give appropriate credit, provide a link to the\n  license, and indicate if changes were made. You may do so in any reasonable\n  manner, but not in any way that suggests the licensor endorses you or your\n  use.\n\n* No additional restrictions -- You may not apply legal terms or technological\n  measures that legally restrict others from doing anything the license\n  permits.\n\nNotices:\n\n* You do not have to comply with the license for elements of the material in\n  the public domain or where your use is permitted by an applicable exception\n  or limitation.\n\n* No warranties are given. The license may not give you all of the permissions\n  necessary for your intended use. For example, other rights such as publicity,\n  privacy, or moral rights may limit how you use the material.\n\nPlease send all bug reports to <geom@cs.unc.edu>.\n\nThe authors may be contacted via:\n\nJur van den Berg, Stephen J. Guy, Jamie Snape, Ming C. Lin, Dinesh Manocha\nDept. of Computer Science\n201 S. Columbia St.\nFrederick P. Brooks, Jr. Computer Science Bldg.\nChapel Hill, N.C. 27599-3175\nUnited States of America\n\n<https://gamma.cs.unc.edu/RVO2/>\n-->\n\nOptimal Reciprocal Collision Avoidance in Three Dimensions\n==========================================================\n\n<https://gamma.cs.unc.edu/RVO2/>\n\n[![DOI](https://zenodo.org/badge/10955299.svg)](https://zenodo.org/badge/latestdoi/10955299)\n\nWe present a formal approach to reciprocal collision avoidance, where multiple\nindependent mobile robots or agents need to avoid collisions with each other\nwithout communication among agents while moving in a common workspace. Our\nformulation, optimal reciprocal collision avoidance (ORCA), provides sufficient\nconditions for collision-free motion by letting each agent take half of the\nresponsibility of avoiding pairwise collisions. Selecting the optimal action for\neach agent is reduced to solving a low-dimensional linear program, and we prove\nthat the resulting motions are smooth. We test our optimal reciprocal collision\navoidance approach on several dense and complex simulation scenarios workspaces\ninvolving thousands of agents, and compute collision-free actions for all of\nthem in only a few milliseconds.\n\nRVO2-3D Library is an open-source C++98 implementation of our algorithm in three\ndimensions. It has a simple API for third-party applications. The user specifies\nagents and their preferred velocities. The simulation is performed step-by-step\nvia a simple call to the library. The simulation is fully accessible and\nmanipulable during runtime. The library exploits multiple processors if they are\navailable using OpenMP for efficient parallelization of the simulation.\n\n![Build Status](https://github.com/snape/RVO2-3D/actions/workflows/ci.yml/badge.svg?branch=main)\n\n<!-- REUSE-IgnoreStart -->\nSPDX-FileCopyrightText: 2008 University of North Carolina at Chapel Hill  \nSPDX-License-Identifier: Apache-2.0\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n&nbsp;&nbsp;<https://www.apache.org/licenses/LICENSE-2.0>\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n\nPlease send all bug reports to [geom@cs.unc.edu](mailto:geom@cs.unc.edu).\n\nThe authors may be contacted via:\n\nJur van den Berg, Stephen J. Guy, Jamie Snape, Ming C. Lin, Dinesh Manocha  \nDept. of Computer Science  \n201 S. Columbia St.  \nFrederick P. Brooks, Jr. Computer Science Bldg.  \nChapel Hill, N.C. 27599-3175  \nUnited States of America\n<!-- REUSE-IgnoreEnd -->\n"
  },
  {
    "path": "RVO3D.pc.in",
    "content": "#\n# RVO3D.pc\n# RVO2-3D Library\n#\n# SPDX-FileCopyrightText: 2008 University of North Carolina at Chapel Hill\n# SPDX-License-Identifier: Apache-2.0\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#\n#     https://www.apache.org/licenses/LICENSE-2.0\n#\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# Please send all bug reports to <geom@cs.unc.edu>.\n#\n# The authors may be contacted via:\n#\n# Jur van den Berg, Stephen J. Guy, Jamie Snape, Ming C. Lin, Dinesh Manocha\n# Dept. of Computer Science\n# 201 S. Columbia St.\n# Frederick P. Brooks, Jr. Computer Science Bldg.\n# Chapel Hill, N.C. 27599-3175\n# United States of America\n#\n# <https://gamma.cs.unc.edu/RVO2/>\n#\n\nprefix=@CMAKE_INSTALL_PREFIX@\nexec_prefix=${prefix}\nlibdir=${exec_prefix}/@RVO3D_LIBRARY_DIR@\nincludedir=${prefix}/@RVO3D_INCLUDE_DIR@\n\nName: @RVO3D_NAME@\nDescription: @PROJECT_DESCRIPTION@\nURL: @PROJECT_HOMEPAGE_URL@\nVersion: @PROJECT_VERSION@\nLibs: -L${libdir} -l@RVO3D_LIBRARY@\nCflags: -I${includedir}\n"
  },
  {
    "path": "RVO3DConfig.cmake.in",
    "content": "# -*- mode: cmake; -*-\n# vi: set ft=cmake:\n\n#\n# RVO3DConfig.cmake\n# RVO2-3D Library\n#\n# SPDX-FileCopyrightText: 2008 University of North Carolina at Chapel Hill\n# SPDX-License-Identifier: Apache-2.0\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#\n#     https://www.apache.org/licenses/LICENSE-2.0\n#\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# Please send all bug reports to <geom@cs.unc.edu>.\n#\n# The authors may be contacted via:\n#\n# Jur van den Berg, Stephen J. Guy, Jamie Snape, Ming C. Lin, Dinesh Manocha\n# Dept. of Computer Science\n# 201 S. Columbia St.\n# Frederick P. Brooks, Jr. Computer Science Bldg.\n# Chapel Hill, N.C. 27599-3175\n# United States of America\n#\n# <https://gamma.cs.unc.edu/RVO2/>\n#\n\n@PACKAGE_INIT@\n\nset(RVO3D_VERSION_MAJOR @PROJECT_VERSION_MAJOR@)\nset(RVO3D_VERSION_MINOR @PROJECT_VERSION_MINOR@)\nset(RVO3D_VERSION_PATCH @PROJECT_VERSION_PATCH@)\n\nset(RVO3D_VERSION @PROJECT_VERSION@)\n\nset_and_check(RVO3D_INCLUDE_DIRS \"@PACKAGE_RVO3D_INCLUDE_DIR@\")\nset_and_check(RVO3D_LIBRARY_DIRS \"@PACKAGE_RVO3D_LIBRARY_DIR@\")\nset(RVO3D_LIBRARIES @PROJECT_NAME@::@RVO3D_LIBRARY@)\n\ncheck_required_components(@PROJECT_NAME@)\n\ninclude(\"${CMAKE_CURRENT_LIST_DIR}/@PROJECT_NAME@Targets.cmake\")\n"
  },
  {
    "path": "compose.yaml",
    "content": "#\n# compose.yaml\n# RVO2-3D Library\n#\n# SPDX-FileCopyrightText: 2008 University of North Carolina at Chapel Hill\n# SPDX-License-Identifier: Apache-2.0\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#\n#     https://www.apache.org/licenses/LICENSE-2.0\n#\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# Please send all bug reports to <geom@cs.unc.edu>.\n#\n# The authors may be contacted via:\n#\n# Jur van den Berg, Stephen J. Guy, Jamie Snape, Ming C. Lin, Dinesh Manocha\n# Dept. of Computer Science\n# 201 S. Columbia St.\n# Frederick P. Brooks, Jr. Computer Science Bldg.\n# Chapel Hill, N.C. 27599-3175\n# United States of America\n#\n# <https://gamma.cs.unc.edu/RVO2/>\n#\n\n---\nservices:\n  dev:\n    build:\n      context: .\n      dockerfile: Dockerfile\n    volumes:\n      - .:/workspace:cached\n"
  },
  {
    "path": "doc/CMakeLists.txt",
    "content": "# -*- mode: cmake; -*-\n# vi: set ft=cmake:\n\n#\n# doc/CMakeLists.txt\n# RVO2-3D Library\n#\n# SPDX-FileCopyrightText: 2008 University of North Carolina at Chapel Hill\n# SPDX-License-Identifier: Apache-2.0\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#\n#     https://www.apache.org/licenses/LICENSE-2.0\n#\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# Please send all bug reports to <geom@cs.unc.edu>.\n#\n# The authors may be contacted via:\n#\n# Jur van den Berg, Stephen J. Guy, Jamie Snape, Ming C. Lin, Dinesh Manocha\n# Dept. of Computer Science\n# 201 S. Columbia St.\n# Frederick P. Brooks, Jr. Computer Science Bldg.\n# Chapel Hill, N.C. 27599-3175\n# United States of America\n#\n# <https://gamma.cs.unc.edu/RVO2/>\n#\n\nif(BUILD_DOCUMENTATION AND Doxygen_FOUND)\n  set(DOXYGEN_PROJECT_NAME \"${RVO3D_NAME}\")\n  set(DOXYGEN_PROJECT_NUMBER ${PROJECT_VERSION})\n  set(DOXYGEN_PROJECT_BRIEF \"${PROJECT_DESCRIPTION}\")\n\n  set(DOXYGEN_STRIP_FROM_PATH\n    \"${PROJECT_BINARY_DIR}/src\" \"${PROJECT_SOURCE_DIR}/src\")\n  set(DOXYGEN_BUILTIN_STL_SUPPORT YES)\n\n  set(DOXYGEN_EXTRACT_ALL YES)\n\n  set(DOXYGEN_FILE_PATTERNS \"*.h\")\n  set(DOXYGEN_EXAMPLE_PATH \"${PROJECT_SOURCE_DIR}/examples\")\n  set(DOXYGEN_EXAMPLE_PATTERNS \"*.cc\")\n\n  set(DOXYGEN_HTML_HEADER \"${CMAKE_CURRENT_SOURCE_DIR}/header.html\")\n  set(DOXYGEN_HTML_FOOTER \"${CMAKE_CURRENT_SOURCE_DIR}/footer.html\")\n  set(DOXYGEN_HTML_EXTRA_STYLESHEET\n    \"${CMAKE_CURRENT_SOURCE_DIR}/stylesheet.css\")\n  set(DOXYGEN_SEARCHENGINE NO)\n\n  set(DOXYGEN_DOT_IMAGE_FORMAT svg)\n  set(DOXYGEN_INTERACTIVE_SVG YES)\n\n  doxygen_add_docs(documentation\n    \"${PROJECT_BINARY_DIR}/src/Export.h\"\n    \"${PROJECT_SOURCE_DIR}/src/Plane.h\"\n    \"${PROJECT_SOURCE_DIR}/src/RVO.h\"\n    \"${PROJECT_SOURCE_DIR}/src/RVOSimulator.h\"\n    \"${PROJECT_SOURCE_DIR}/src/Vector3.h\"\n    ALL\n    USE_STAMP_FILE)\n\n  if(ENABLE_INSTALLATION)\n    install(DIRECTORY \"${CMAKE_CURRENT_BINARY_DIR}/html\"\n      COMPONENT documentation\n      TYPE DOC)\n  endif()\nendif()\n"
  },
  {
    "path": "doc/footer.html",
    "content": "<!-- HTML footer for doxygen 1.8.13 -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\n$projectname. Copyright 2008 University of North Carolina at Chapel Hill.\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "doc/footer.html.license",
    "content": "footer.html\nRVO2-3D Library\n\nSPDX-FileCopyrightText: 2008 University of North Carolina at Chapel Hill\nSPDX-License-Identifier: CC-BY-SA-4.0\n\nCreative Commons Attribution-ShareAlike 4.0 International Public License\n\nYou are free to:\n\n* Share -- copy and redistribute the material in any medium or format\n\n* ShareAlike -- If you remix, transform, or build upon the material, you must\n  distribute your contributions under the same license as the original\n\n* Adapt -- remix, transform, and build upon the material for any purpose, even\n  commercially.\n\nThe licensor cannot revoke these freedoms as long as you follow the license\nterms.\n\nUnder the following terms:\n\n* Attribution -- You must give appropriate credit, provide a link to the\n  license, and indicate if changes were made. You may do so in any reasonable\n  manner, but not in any way that suggests the licensor endorses you or your\n  use.\n\n* No additional restrictions -- You may not apply legal terms or technological\n  measures that legally restrict others from doing anything the license\n  permits.\n\nNotices:\n\n* You do not have to comply with the license for elements of the material in\n  the public domain or where your use is permitted by an applicable exception\n  or limitation.\n\n* No warranties are given. The license may not give you all of the permissions\n  necessary for your intended use. For example, other rights such as publicity,\n  privacy, or moral rights may limit how you use the material.\n\nPlease send all bug reports to <geom@cs.unc.edu>.\n\nThe authors may be contacted via:\n\nJur van den Berg, Stephen J. Guy, Jamie Snape, Ming C. Lin, Dinesh Manocha\nDept. of Computer Science\n201 S. Columbia St.\nFrederick P. Brooks, Jr. Computer Science Bldg.\nChapel Hill, N.C. 27599-3175\nUnited States of America\n\n<https://gamma.cs.unc.edu/RVO2/>\n"
  },
  {
    "path": "doc/header.html",
    "content": "<!--\nRVO2-3D Library\n\nSPDX-FileCopyrightText: 2008 University of North Carolina at Chapel Hill\nSPDX-License-Identifier: CC-BY-SA-4.0\n\nCreative Commons Attribution-ShareAlike 4.0 International Public License\n\nYou are free to:\n\n* Share -- copy and redistribute the material in any medium or format\n\n* ShareAlike -- If you remix, transform, or build upon the material, you must\n  distribute your contributions under the same license as the original\n\n* Adapt -- remix, transform, and build upon the material for any purpose, even\n  commercially.\n\nThe licensor cannot revoke these freedoms as long as you follow the license\nterms.\n\nUnder the following terms:\n\n* Attribution -- You must give appropriate credit, provide a link to the\n  license, and indicate if changes were made. You may do so in any reasonable\n  manner, but not in any way that suggests the licensor endorses you or your\n  use.\n\n* No additional restrictions -- You may not apply legal terms or technological\n  measures that legally restrict others from doing anything the license\n  permits.\n\nNotices:\n\n* You do not have to comply with the license for elements of the material in\n  the public domain or where your use is permitted by an applicable exception\n  or limitation.\n\n* No warranties are given. The license may not give you all of the permissions\n  necessary for your intended use. For example, other rights such as publicity,\n  privacy, or moral rights may limit how you use the material.\n\nPlease send all bug reports to <geom@cs.unc.edu>.\n\nThe authors may be contacted via:\n\nJur van den Berg, Stephen J. Guy, Jamie Snape, Ming C. Lin, Dinesh Manocha\nDept. of Computer Science\n201 S. Columbia St.\nFrederick P. Brooks, Jr. Computer Science Bldg.\nChapel Hill, N.C. 27599-3175\nUnited States of America\n\n<https://gamma.cs.unc.edu/RVO2/>\n-->\n\n<!-- HTML header for doxygen 1.8.13 -->\n<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen $doxygenversion\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>$projectname: $title</title>\n<link href=\"$relpath^tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"$relpath^jquery.js\"></script>\n<script type=\"text/javascript\" src=\"$relpath^dynsections.js\"></script>\n<link href=\"$relpath^$stylesheet\" rel=\"stylesheet\" type=\"text/css\" />\n$extrastylesheet\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n\n<!--BEGIN TITLEAREA-->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">$projectname\n   &#160;<span id=\"projectnumber\">$projectnumber</span>\n   </div>\n   <div id=\"projectbrief\">$projectbrief</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!--END TITLEAREA-->\n<!-- end header part -->\n"
  },
  {
    "path": "doc/header.html.license",
    "content": "header.html\nRVO2-3D Library\n\nSPDX-FileCopyrightText: 2008 University of North Carolina at Chapel Hill\nSPDX-License-Identifier: CC-BY-SA-4.0\n\nCreative Commons Attribution-ShareAlike 4.0 International Public License\n\nYou are free to:\n\n* Share -- copy and redistribute the material in any medium or format\n\n* ShareAlike -- If you remix, transform, or build upon the material, you must\n  distribute your contributions under the same license as the original\n\n* Adapt -- remix, transform, and build upon the material for any purpose, even\n  commercially.\n\nThe licensor cannot revoke these freedoms as long as you follow the license\nterms.\n\nUnder the following terms:\n\n* Attribution -- You must give appropriate credit, provide a link to the\n  license, and indicate if changes were made. You may do so in any reasonable\n  manner, but not in any way that suggests the licensor endorses you or your\n  use.\n\n* No additional restrictions -- You may not apply legal terms or technological\n  measures that legally restrict others from doing anything the license\n  permits.\n\nNotices:\n\n* You do not have to comply with the license for elements of the material in\n  the public domain or where your use is permitted by an applicable exception\n  or limitation.\n\n* No warranties are given. The license may not give you all of the permissions\n  necessary for your intended use. For example, other rights such as publicity,\n  privacy, or moral rights may limit how you use the material.\n\nPlease send all bug reports to <geom@cs.unc.edu>.\n\nThe authors may be contacted via:\n\nJur van den Berg, Stephen J. Guy, Jamie Snape, Ming C. Lin, Dinesh Manocha\nDept. of Computer Science\n201 S. Columbia St.\nFrederick P. Brooks, Jr. Computer Science Bldg.\nChapel Hill, N.C. 27599-3175\nUnited States of America\n\n<https://gamma.cs.unc.edu/RVO2/>\n"
  },
  {
    "path": "doc/stylesheet.css",
    "content": "/*\n * stylesheet.css\n * RVO2-3D Library\n *\n * SPDX-FileCopyrightText: 2008 University of North Carolina at Chapel Hill\n * SPDX-License-Identifier: CC-BY-SA-4.0\n *\n * Creative Commons Attribution-ShareAlike 4.0 International Public License\n *\n * You are free to:\n *\n * * Share -- copy and redistribute the material in any medium or format\n *\n * * ShareAlike -- If you remix, transform, or build upon the material, you must\n *   distribute your contributions under the same license as the original\n *\n * * Adapt -- remix, transform, and build upon the material for any purpose,\n *   even commercially.\n *\n * The licensor cannot revoke these freedoms as long as you follow the license\n * terms.\n *\n * Under the following terms:\n *\n * * Attribution -- You must give appropriate credit, provide a link to the\n *   license, and indicate if changes were made. You may do so in any\n *   reasonable manner, but not in any way that suggests the licensor endorses\n *   you or your use.\n *\n * * No additional restrictions -- You may not apply legal terms or\n *   technological measures that legally restrict others from doing anything\n *   the license permits.\n *\n * Notices:\n *\n * * You do not have to comply with the license for elements of the material in\n *   the public domain or where your use is permitted by an applicable\n *   exception or limitation.\n *\n * * No warranties are given. The license may not give you all of the\n *   permissions necessary for your intended use. For example, other rights\n *   such as publicity, privacy, or moral rights may limit how you use the\n *   material.\n *\n * Please send all bug reports to <geom@cs.unc.edu>.\n *\n * The authors may be contacted via:\n *\n * Jur van den Berg, Stephen J. Guy, Jamie Snape, Ming C. Lin, Dinesh Manocha\n * Dept. of Computer Science\n * 201 S. Columbia St.\n * Frederick P. Brooks, Jr. Computer Science Bldg.\n * Chapel Hill, N.C. 27599-3175\n * United States of America\n *\n * <https://gamma.cs.unc.edu/RVO2/>\n */\n\n/* CSS for doxygen 1.8.13 */\n\nbody, table, div, p, dl {\n\tfont: 400 14px/22px Roboto,sans-serif;\n}\n\np.reference, p.definition {\n\tfont: 400 14px/22px Roboto,sans-serif;\n}\n\n/* @group Heading Levels */\n\nh1.groupheader {\n\tfont-size: 150%;\n}\n\n.title {\n\tfont: 400 14px/28px Roboto,sans-serif;\n\tfont-size: 150%;\n\tfont-weight: bold;\n\tmargin: 10px 2px;\n}\n\nh2.groupheader {\n\tborder-bottom: 1px solid #879ECB;\n\tcolor: #354C7B;\n\tfont-size: 150%;\n\tfont-weight: normal;\n\tmargin-top: 1.75em;\n\tpadding-top: 8px;\n\tpadding-bottom: 4px;\n\twidth: 100%;\n}\n\nh3.groupheader {\n\tfont-size: 100%;\n}\n\nh1, h2, h3, h4, h5, h6 {\n\t-webkit-transition: text-shadow 0.5s linear;\n\t-moz-transition: text-shadow 0.5s linear;\n\t-ms-transition: text-shadow 0.5s linear;\n\t-o-transition: text-shadow 0.5s linear;\n\ttransition: text-shadow 0.5s linear;\n\tmargin-right: 15px;\n}\n\nh1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow {\n\ttext-shadow: 0 0 15px cyan;\n}\n\ndt {\n\tfont-weight: bold;\n}\n\ndiv.multicol {\n\t-moz-column-gap: 1em;\n\t-webkit-column-gap: 1em;\n\t-moz-column-count: 3;\n\t-webkit-column-count: 3;\n}\n\np.startli, p.startdd {\n\tmargin-top: 2px;\n}\n\np.starttd {\n\tmargin-top: 0px;\n}\n\np.endli {\n\tmargin-bottom: 0px;\n}\n\np.enddd {\n\tmargin-bottom: 4px;\n}\n\np.endtd {\n\tmargin-bottom: 2px;\n}\n\n/* @end */\n\ncaption {\n\tfont-weight: bold;\n}\n\nspan.legend {\n  font-size: 70%;\n  text-align: center;\n}\n\nh3.version {\n  font-size: 90%;\n  text-align: center;\n}\n\ndiv.qindex, div.navtab {\n\tbackground-color: #EBEFF6;\n\tborder: 1px solid #A3B4D7;\n\ttext-align: center;\n}\n\ndiv.qindex, div.navpath {\n\twidth: 100%;\n\tline-height: 140%;\n}\n\ndiv.navtab {\n\tmargin-right: 15px;\n}\n\n/* @group Link Styling */\n\na {\n\tcolor: #3D578C;\n\tfont-weight: normal;\n\ttext-decoration: none;\n}\n\n.contents a:visited {\n\tcolor: #4665A2;\n}\n\na:hover {\n\ttext-decoration: underline;\n}\n\na.qindex {\n\tfont-weight: bold;\n}\n\na.qindexHL {\n\tfont-weight: bold;\n\tbackground-color: #9CAFD4;\n\tcolor: #ffffff;\n\tborder: 1px double #869DCA;\n}\n\n.contents a.qindexHL:visited {\n  color: #ffffff;\n}\n\na.el {\n\tfont-weight: bold;\n}\n\na.elRef {\n}\n\na.code, a.code:visited, a.line, a.line:visited {\n\tcolor: #4665A2;\n}\n\na.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited {\n\tcolor: #4665A2;\n}\n\n/* @end */\n\ndl.el {\n\tmargin-left: -1cm;\n}\n\npre.fragment {\n  border: 1px solid #C4CFE5;\n  background-color: #FBFCFD;\n  padding: 4px 6px;\n  margin: 4px 8px 4px 2px;\n  overflow: auto;\n  word-wrap: break-word;\n  font-size: 9pt;\n  line-height: 125%;\n  font-family: monospace, fixed;\n  font-size: 105%;\n}\n\ndiv.fragment {\n  padding: 0px;\n  margin: 4px 8px 4px 2px;\n\tbackground-color: #FBFCFD;\n\tborder: 1px solid #C4CFE5;\n}\n\ndiv.line {\n\tfont-family: monospace, fixed;\n  font-size: 13px;\n\tmin-height: 13px;\n\tline-height: 1.0;\n\ttext-wrap: unrestricted;\n\twhite-space: -moz-pre-wrap; /* Moz */\n\twhite-space: -pre-wrap;     /* Opera 4-6 */\n\twhite-space: -o-pre-wrap;   /* Opera 7 */\n\twhite-space: pre-wrap;      /* CSS3  */\n\tword-wrap: break-word;      /* IE 5.5+ */\n\ttext-indent: -53px;\n\tpadding-left: 53px;\n\tpadding-bottom: 0px;\n\tmargin: 0px;\n\t-webkit-transition-property: background-color, box-shadow;\n\t-webkit-transition-duration: 0.5s;\n\t-moz-transition-property: background-color, box-shadow;\n\t-moz-transition-duration: 0.5s;\n\t-ms-transition-property: background-color, box-shadow;\n\t-ms-transition-duration: 0.5s;\n\t-o-transition-property: background-color, box-shadow;\n\t-o-transition-duration: 0.5s;\n\ttransition-property: background-color, box-shadow;\n\ttransition-duration: 0.5s;\n}\n\ndiv.line:after {\n  content:\"\\000A\";\n  white-space: pre;\n}\n\ndiv.line.glow {\n\tbackground-color: cyan;\n\tbox-shadow: 0 0 10px cyan;\n}\n\nspan.lineno {\n\tpadding-right: 4px;\n\ttext-align: right;\n\tborder-right: 2px solid #0F0;\n\tbackground-color: #E8E8E8;\n  white-space: pre;\n}\nspan.lineno a {\n\tbackground-color: #D8D8D8;\n}\n\nspan.lineno a:hover {\n\tbackground-color: #C8C8C8;\n}\n\n.lineno {\n\t-webkit-touch-callout: none;\n\t-webkit-user-select: none;\n\t-khtml-user-select: none;\n\t-moz-user-select: none;\n\t-ms-user-select: none;\n\tuser-select: none;\n}\n\ndiv.ah, span.ah {\n\tbackground-color: black;\n\tfont-weight: bold;\n\tcolor: #ffffff;\n\tmargin-bottom: 3px;\n\tmargin-top: 3px;\n\tpadding: 0.2em;\n\tborder: solid thin #333;\n\tborder-radius: 0.5em;\n\t-webkit-border-radius: .5em;\n\t-moz-border-radius: .5em;\n\tbox-shadow: 2px 2px 3px #999;\n\t-webkit-box-shadow: 2px 2px 3px #999;\n\t-moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px;\n\tbackground-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444));\n\tbackground-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000 110%);\n}\n\ndiv.classindex ul {\n  list-style: none;\n  padding-left: 0;\n}\n\ndiv.classindex span.ai {\n  display: inline-block;\n}\n\ndiv.groupHeader {\n\tmargin-left: 16px;\n\tmargin-top: 12px;\n\tfont-weight: bold;\n}\n\ndiv.groupText {\n\tmargin-left: 16px;\n\tfont-style: italic;\n}\n\nbody {\n\tbackground-color: white;\n\tcolor: black;\n  margin: 0;\n}\n\ndiv.contents {\n\tmargin-top: 10px;\n\tmargin-left: 12px;\n\tmargin-right: 8px;\n}\n\ntd.indexkey {\n\tbackground-color: #EBEFF6;\n\tfont-weight: bold;\n\tborder: 1px solid #C4CFE5;\n\tmargin: 2px 0px 2px 0;\n\tpadding: 2px 10px;\n  white-space: nowrap;\n  vertical-align: top;\n}\n\ntd.indexvalue {\n\tbackground-color: #EBEFF6;\n\tborder: 1px solid #C4CFE5;\n\tpadding: 2px 10px;\n\tmargin: 2px 0px;\n}\n\ntr.memlist {\n\tbackground-color: #EEF1F7;\n}\n\np.formulaDsp {\n\ttext-align: center;\n}\n\nimg.formulaDsp {\n\n}\n\nimg.formulaInl {\n\tvertical-align: middle;\n}\n\ndiv.center {\n\ttext-align: center;\n  margin-top: 0px;\n  margin-bottom: 0px;\n  padding: 0px;\n}\n\ndiv.center img {\n\tborder: 0px;\n}\n\naddress.footer {\n\ttext-align: right;\n\tpadding-right: 12px;\n}\n\nimg.footer {\n\tborder: 0px;\n\tvertical-align: middle;\n}\n\n/* @group Code Colorization */\n\nspan.keyword {\n\tcolor: #008000\n}\n\nspan.keywordtype {\n\tcolor: #604020\n}\n\nspan.keywordflow {\n\tcolor: #e08000\n}\n\nspan.comment {\n\tcolor: #800000\n}\n\nspan.preprocessor {\n\tcolor: #806020\n}\n\nspan.stringliteral {\n\tcolor: #002080\n}\n\nspan.charliteral {\n\tcolor: #008080\n}\n\nspan.vhdldigit {\n\tcolor: #ff00ff\n}\n\nspan.vhdlchar {\n\tcolor: #000000\n}\n\nspan.vhdlkeyword {\n\tcolor: #700070\n}\n\nspan.vhdllogic {\n\tcolor: #ff0000\n}\n\nblockquote {\n  background-color: #F7F8FB;\n  border-left: 2px solid #9CAFD4;\n  margin: 0 24px 0 4px;\n  padding: 0 12px 0 16px;\n}\n\n/* @end */\n\ntd.tiny {\n\tfont-size: 75%;\n}\n\n.dirtab {\n\tpadding: 4px;\n\tborder-collapse: collapse;\n\tborder: 1px solid #A3B4D7;\n}\n\nth.dirtab {\n\tbackground: #EBEFF6;\n\tfont-weight: bold;\n}\n\nhr {\n\theight: 0px;\n\tborder: none;\n\tborder-top: 1px solid #4A6AAA;\n}\n\nhr.footer {\n\theight: 1px;\n}\n\n/* @group Member Descriptions */\n\ntable.memberdecls {\n\tborder-spacing: 0px;\n\tpadding: 0px;\n}\n\n.memberdecls td, .fieldtable tr {\n\t-webkit-transition-property: background-color, box-shadow;\n\t-webkit-transition-duration: 0.5s;\n\t-moz-transition-property: background-color, box-shadow;\n\t-moz-transition-duration: 0.5s;\n\t-ms-transition-property: background-color, box-shadow;\n\t-ms-transition-duration: 0.5s;\n\t-o-transition-property: background-color, box-shadow;\n\t-o-transition-duration: 0.5s;\n\ttransition-property: background-color, box-shadow;\n\ttransition-duration: 0.5s;\n}\n\n.memberdecls td.glow, .fieldtable tr.glow {\n\tbackground-color: cyan;\n\tbox-shadow: 0 0 15px cyan;\n}\n\n.mdescLeft, .mdescRight,\n.memItemLeft, .memItemRight,\n.memTemplItemLeft, .memTemplItemRight, .memTemplParams {\n\tbackground-color: #F9FAFC;\n\tborder: none;\n\tmargin: 4px;\n\tpadding: 1px 0 0 8px;\n}\n\n.mdescLeft, .mdescRight {\n\tpadding: 0px 8px 4px 8px;\n\tcolor: #555;\n}\n\n.memSeparator {\n  border-bottom: 1px solid #DEE4F0;\n  line-height: 1px;\n  margin: 0px;\n  padding: 0px;\n}\n\n.memItemLeft, .memTemplItemLeft {\n  white-space: nowrap;\n}\n\n.memItemRight {\n\twidth: 100%;\n}\n\n.memTemplParams {\n\tcolor: #4665A2;\n  white-space: nowrap;\n\tfont-size: 80%;\n}\n\n/* @end */\n\n/* @group Member Details */\n\n.memtitle {\n\tpadding: 8px;\n\tborder-top: 1px solid #A8B8D9;\n\tborder-left: 1px solid #A8B8D9;\n\tborder-right: 1px solid #A8B8D9;\n\tborder-top-right-radius: 4px;\n\tborder-top-left-radius: 4px;\n\tmargin-bottom: -1px;\n\tbackground-image: url('nav_f.png');\n\tbackground-repeat: repeat-x;\n\tbackground-color: #E2E8F2;\n\tline-height: 1.25;\n\tfont-weight: 300;\n\tfloat:left;\n}\n\n.permalink {\n  font-size: 65%;\n  display: inline-block;\n  vertical-align: middle;\n}\n\n.memtemplate {\n\tfont-size: 80%;\n\tcolor: #4665A2;\n\tfont-weight: normal;\n\tmargin-left: 9px;\n}\n\n.memnav {\n\tbackground-color: #EBEFF6;\n\tborder: 1px solid #A3B4D7;\n\ttext-align: center;\n\tmargin: 2px;\n\tmargin-right: 15px;\n\tpadding: 2px;\n}\n\n.mempage {\n\twidth: 100%;\n}\n\n.memitem {\n\tpadding: 0;\n\tmargin-bottom: 10px;\n\tmargin-right: 5px;\n  -webkit-transition: box-shadow 0.5s linear;\n  -moz-transition: box-shadow 0.5s linear;\n  -ms-transition: box-shadow 0.5s linear;\n  -o-transition: box-shadow 0.5s linear;\n  transition: box-shadow 0.5s linear;\n  display: table !important;\n  width: 100%;\n}\n\n.memitem.glow {\n  box-shadow: 0 0 15px cyan;\n}\n\n.memname {\n  font-weight: 400;\n  margin-left: 6px;\n}\n\n.memname td {\n\tvertical-align: bottom;\n}\n\n.memproto, dl.reflist dt {\n  border-top: 1px solid #A8B8D9;\n  border-left: 1px solid #A8B8D9;\n  border-right: 1px solid #A8B8D9;\n  padding: 6px 0px 6px 0px;\n  color: #253555;\n  font-weight: bold;\n  text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);\n  background-color: #DFE5F1;\n  /* opera specific markup */\n  box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);\n  border-top-right-radius: 4px;\n  /* firefox specific markup */\n  -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;\n  -moz-border-radius-topright: 4px;\n  /* webkit specific markup */\n  -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);\n  -webkit-border-top-right-radius: 4px;\n\n}\n\n.overload {\n  font-family: \"courier new\",courier,monospace;\n\tfont-size: 65%;\n}\n\n.memdoc, dl.reflist dd {\n  border-bottom: 1px solid #A8B8D9;\n  border-left: 1px solid #A8B8D9;\n  border-right: 1px solid #A8B8D9;\n  padding: 6px 10px 2px 10px;\n  background-color: #FBFCFD;\n  border-top-width: 0;\n  background-image: url('nav_g.png');\n  background-repeat: repeat-x;\n  background-color: #FFFFFF;\n  /* opera specific markup */\n  border-bottom-left-radius: 4px;\n  border-bottom-right-radius: 4px;\n  box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);\n  /* firefox specific markup */\n  -moz-border-radius-bottomleft: 4px;\n  -moz-border-radius-bottomright: 4px;\n  -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;\n  /* webkit specific markup */\n  -webkit-border-bottom-left-radius: 4px;\n  -webkit-border-bottom-right-radius: 4px;\n  -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);\n}\n\ndl.reflist dt {\n  padding: 5px;\n}\n\ndl.reflist dd {\n  margin: 0px 0px 10px 0px;\n  padding: 5px;\n}\n\n.paramkey {\n\ttext-align: right;\n}\n\n.paramtype {\n\twhite-space: nowrap;\n}\n\n.paramname {\n\tcolor: #602020;\n\twhite-space: nowrap;\n}\n.paramname em {\n\tfont-style: normal;\n}\n.paramname code {\n  line-height: 14px;\n}\n\n.params, .retval, .exception, .tparams {\n  margin-left: 0px;\n  padding-left: 0px;\n}\n\n.params .paramname, .retval .paramname {\n  font-weight: bold;\n  vertical-align: top;\n}\n\n.params .paramtype {\n  font-style: italic;\n  vertical-align: top;\n}\n\n.params .paramdir {\n  font-family: \"courier new\",courier,monospace;\n  vertical-align: top;\n}\n\ntable.mlabels {\n\tborder-spacing: 0px;\n}\n\ntd.mlabels-left {\n\twidth: 100%;\n\tpadding: 0px;\n}\n\ntd.mlabels-right {\n\tvertical-align: bottom;\n\tpadding: 0px;\n\twhite-space: nowrap;\n}\n\nspan.mlabels {\n  margin-left: 8px;\n}\n\nspan.mlabel {\n  background-color: #728DC1;\n  border-top: 1px solid #5373B4;\n  border-left: 1px solid #5373B4;\n  border-right: 1px solid #C4CFE5;\n  border-bottom: 1px solid #C4CFE5;\n\ttext-shadow: none;\n\tcolor: white;\n\tmargin-right: 4px;\n\tpadding: 2px 3px;\n\tborder-radius: 3px;\n\tfont-size: 7pt;\n\twhite-space: nowrap;\n\tvertical-align: middle;\n}\n\n/* @end */\n\n/* these are for tree view inside a (index) page */\n\ndiv.directory {\n  margin: 10px 0px;\n  border-top: 1px solid #9CAFD4;\n  border-bottom: 1px solid #9CAFD4;\n  width: 100%;\n}\n\n.directory table {\n  border-collapse: collapse;\n}\n\n.directory td {\n  margin: 0px;\n  padding: 0px;\n\tvertical-align: top;\n}\n\n.directory td.entry {\n  white-space: nowrap;\n  padding-right: 6px;\n\tpadding-top: 3px;\n}\n\n.directory td.entry a {\n  outline: none;\n}\n\n.directory td.entry a img {\n  border: none;\n}\n\n.directory td.desc {\n  width: 100%;\n  padding-left: 6px;\n\tpadding-right: 6px;\n\tpadding-top: 3px;\n\tborder-left: 1px solid rgba(0,0,0,0.05);\n}\n\n.directory tr.even {\n\tpadding-left: 6px;\n\tbackground-color: #F7F8FB;\n}\n\n.directory img {\n\tvertical-align: -30%;\n}\n\n.directory .levels {\n  white-space: nowrap;\n  width: 100%;\n  text-align: right;\n  font-size: 9pt;\n}\n\n.directory .levels span {\n  cursor: pointer;\n  padding-left: 2px;\n  padding-right: 2px;\n\tcolor: #3D578C;\n}\n\n.arrow {\n  color: #9CAFD4;\n  -webkit-user-select: none;\n  -khtml-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n  cursor: pointer;\n  font-size: 80%;\n  display: inline-block;\n  width: 16px;\n  height: 22px;\n}\n\n.icon {\n  font-family: Arial, Helvetica;\n  font-weight: bold;\n  font-size: 12px;\n  height: 14px;\n  width: 16px;\n  display: inline-block;\n  background-color: #728DC1;\n  color: white;\n  text-align: center;\n  border-radius: 4px;\n  margin-left: 2px;\n  margin-right: 2px;\n}\n\n.icona {\n  width: 24px;\n  height: 22px;\n  display: inline-block;\n}\n\n.iconfopen {\n  width: 24px;\n  height: 18px;\n  margin-bottom: 4px;\n  background-image: url('folderopen.png');\n  background-position: 0px -4px;\n  background-repeat: repeat-y;\n  vertical-align: top;\n  display: inline-block;\n}\n\n.iconfclosed {\n  width: 24px;\n  height: 18px;\n  margin-bottom: 4px;\n  background-image: url('folderclosed.png');\n  background-position: 0px -4px;\n  background-repeat: repeat-y;\n  vertical-align: top;\n  display: inline-block;\n}\n\n.icondoc {\n  width: 24px;\n  height: 18px;\n  margin-bottom: 4px;\n  background-image: url('doc.png');\n  background-position: 0px -4px;\n  background-repeat: repeat-y;\n  vertical-align: top;\n  display: inline-block;\n}\n\ntable.directory {\n  font: 400 14px Roboto,sans-serif;\n}\n\n/* @end */\n\ndiv.dynheader {\n  margin-top: 8px;\n\t-webkit-touch-callout: none;\n\t-webkit-user-select: none;\n\t-khtml-user-select: none;\n\t-moz-user-select: none;\n\t-ms-user-select: none;\n\tuser-select: none;\n}\n\naddress {\n\tfont-style: normal;\n\tcolor: #2A3D61;\n}\n\ntable.doxtable caption {\n\tcaption-side: top;\n}\n\ntable.doxtable {\n\tborder-collapse:collapse;\n  margin-top: 4px;\n  margin-bottom: 4px;\n}\n\ntable.doxtable td, table.doxtable th {\n\tborder: 1px solid #2D4068;\n\tpadding: 3px 7px 2px;\n}\n\ntable.doxtable th {\n\tbackground-color: #374F7F;\n\tcolor: #FFFFFF;\n\tfont-size: 110%;\n\tpadding-bottom: 4px;\n\tpadding-top: 5px;\n}\n\ntable.fieldtable {\n  margin-bottom: 10px;\n  border: 1px solid #A8B8D9;\n  border-spacing: 0px;\n  -moz-border-radius: 4px;\n  -webkit-border-radius: 4px;\n  border-radius: 4px;\n  -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px;\n  -webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15);\n  box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15);\n}\n\n.fieldtable td, .fieldtable th {\n  padding: 3px 7px 2px;\n}\n\n.fieldtable td.fieldtype, .fieldtable td.fieldname {\n  white-space: nowrap;\n  border-right: 1px solid #A8B8D9;\n  border-bottom: 1px solid #A8B8D9;\n  vertical-align: top;\n}\n\n.fieldtable td.fieldname {\n  padding-top: 3px;\n}\n\n.fieldtable td.fielddoc {\n  border-bottom: 1px solid #A8B8D9;\n}\n\n.fieldtable td.fielddoc p:first-child {\n  margin-top: 0px;\n}\n\n.fieldtable td.fielddoc p:last-child {\n  margin-bottom: 2px;\n}\n\n.fieldtable tr:last-child td {\n  border-bottom: none;\n}\n\n.fieldtable th {\n  background-image: url('nav_f.png');\n  background-repeat: repeat-x;\n  background-color: #E2E8F2;\n  font-size: 90%;\n  color: #253555;\n  padding-bottom: 4px;\n  padding-top: 5px;\n  text-align: left;\n  font-weight: 400;\n  -moz-border-radius-topleft: 4px;\n  -moz-border-radius-topright: 4px;\n  -webkit-border-top-left-radius: 4px;\n  -webkit-border-top-right-radius: 4px;\n  border-top-left-radius: 4px;\n  border-top-right-radius: 4px;\n  border-bottom: 1px solid #A8B8D9;\n}\n\n.tabsearch {\n\ttop: 0px;\n\tleft: 10px;\n\theight: 36px;\n\tbackground-image: url('tab_b.png');\n\tz-index: 101;\n\toverflow: hidden;\n\tfont-size: 13px;\n}\n\n.navpath ul {\n\tfont-size: 11px;\n\tbackground-image:url('tab_b.png');\n\tbackground-repeat:repeat-x;\n\tbackground-position: 0 -5px;\n\theight:30px;\n\tline-height:30px;\n\tcolor:#8AA0CC;\n\tborder:solid 1px #C2CDE4;\n\toverflow:hidden;\n\tmargin:0px;\n\tpadding:0px;\n}\n\n.navpath li {\n\tlist-style-type:none;\n\tfloat:left;\n\tpadding-left:10px;\n\tpadding-right:15px;\n\tbackground-image:url('bc_s.png');\n\tbackground-repeat:no-repeat;\n\tbackground-position:right;\n\tcolor:#364D7C;\n}\n\n.navpath li.navelem a {\n\theight:32px;\n\tdisplay:block;\n\ttext-decoration: none;\n\toutline: none;\n\tcolor: #283A5D;\n\tfont-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif;\n\ttext-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);\n\ttext-decoration: none;\n}\n\n.navpath li.navelem a:hover {\n\tcolor:#6884BD;\n}\n\n.navpath li.footer {\n  list-style-type: none;\n  float: right;\n  padding-left: 10px;\n  padding-right: 15px;\n  background-image: none;\n  background-repeat: no-repeat;\n  background-position: right;\n  color:#364D7C;\n  font-size: 8pt;\n}\n\ndiv.summary {\n\tfloat: right;\n\tfont-size: 8pt;\n\tpadding-right: 5px;\n\twidth: 50%;\n\ttext-align: right;\n}\n\ndiv.summary a {\n\twhite-space: nowrap;\n}\n\ntable.classindex {\n  margin: 10px;\n  white-space: nowrap;\n  margin-left: 3%;\n  margin-right: 3%;\n  width: 94%;\n  border: 0;\n  border-spacing: 0;\n  padding: 0;\n}\n\ndiv.ingroups {\n\tfont-size: 8pt;\n\twidth: 50%;\n\ttext-align: left;\n}\n\ndiv.ingroups a {\n\twhite-space: nowrap;\n}\n\ndiv.header {\n  background-image: url('nav_h.png');\n  background-repeat: repeat-x;\n\tbackground-color: #F9FAFC;\n\tmargin: 0px;\n\tborder-bottom: 1px solid #C4CFE5;\n}\n\ndiv.headertitle {\n\tpadding: 5px 5px 5px 10px;\n}\n\ndl {\n  padding: 0 0 0 10px;\n}\n\ndl.section {\n\tmargin-left: 0px;\n\tpadding-left: 0px;\n}\n\ndl.note {\n  margin-left:-7px;\n  padding-left: 3px;\n  border-left: 4px solid;\n  border-color: #D0C000;\n}\n\ndl.warning, dl.attention {\n  margin-left:-7px;\n  padding-left: 3px;\n  border-left: 4px solid;\n  border-color: #FF0000;\n}\n\ndl.pre, dl.post, dl.invariant {\n  margin-left:-7px;\n  padding-left: 3px;\n  border-left: 4px solid;\n  border-color: #00D000;\n}\n\ndl.deprecated {\n  margin-left:-7px;\n  padding-left: 3px;\n  border-left: 4px solid;\n  border-color: #505050;\n}\n\ndl.todo {\n  margin-left:-7px;\n  padding-left: 3px;\n  border-left: 4px solid;\n  border-color: #00C0E0;\n}\n\ndl.test {\n  margin-left:-7px;\n  padding-left: 3px;\n  border-left: 4px solid;\n  border-color: #3030E0;\n}\n\ndl.bug {\n  margin-left:-7px;\n  padding-left: 3px;\n  border-left: 4px solid;\n  border-color: #C08050;\n}\n\ndl.section dd {\n\tmargin-bottom: 6px;\n}\n\n#projectlogo {\n\ttext-align: center;\n\tvertical-align: bottom;\n\tborder-collapse: separate;\n}\n\n#projectlogo img {\n\tborder: 0px none;\n}\n\n#projectalign {\n  vertical-align: middle;\n}\n\n#projectname {\n\tfont: 300% Tahoma, Arial,sans-serif;\n\tmargin: 0px;\n\tpadding: 2px 0px;\n}\n\n#projectbrief {\n\tfont: 120% Tahoma, Arial,sans-serif;\n\tmargin: 0px;\n\tpadding: 0px;\n}\n\n#projectnumber {\n\tfont: 50% Tahoma, Arial,sans-serif;\n\tmargin: 0px;\n\tpadding: 0px;\n}\n\n#titlearea {\n\tpadding: 0px;\n\tmargin: 0px;\n\twidth: 100%;\n\tborder-bottom: 1px solid #5373B4;\n}\n\n.image {\n  text-align: center;\n}\n\n.dotgraph {\n  text-align: center;\n}\n\n.mscgraph {\n  text-align: center;\n}\n\n.plantumlgraph {\n  text-align: center;\n}\n\n.diagraph {\n  text-align: center;\n}\n\n.caption {\n\tfont-weight: bold;\n}\n\ndiv.zoom {\n\tborder: 1px solid #90A5CE;\n}\n\ndl.citelist {\n  margin-bottom: 50px;\n}\n\ndl.citelist dt {\n  color:#334975;\n  float: left;\n  font-weight: bold;\n  margin-right: 10px;\n  padding: 5px;\n}\n\ndl.citelist dd {\n  margin: 2px 0;\n  padding: 5px 0;\n}\n\ndiv.toc {\n  padding: 14px 25px;\n  background-color: #F4F6FA;\n  border: 1px solid #D8DFEE;\n  border-radius: 7px 7px 7px 7px;\n  float: right;\n  height: auto;\n  margin: 0 8px 10px 10px;\n  width: 200px;\n}\n\ndiv.toc li {\n  background: url(\"bdwn.png\") no-repeat scroll 0 5px transparent;\n  font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif;\n  margin-top: 5px;\n  padding-left: 10px;\n  padding-top: 2px;\n}\n\ndiv.toc h3 {\n  font: bold 12px/1.2 Arial,FreeSans,sans-serif;\n\tcolor: #4665A2;\n  border-bottom: 0 none;\n  margin: 0;\n}\n\ndiv.toc ul {\n  list-style: none outside none;\n  border: medium none;\n  padding: 0px;\n}\n\ndiv.toc li.level1 {\n  margin-left: 0px;\n}\n\ndiv.toc li.level2 {\n  margin-left: 15px;\n}\n\ndiv.toc li.level3 {\n  margin-left: 30px;\n}\n\ndiv.toc li.level4 {\n  margin-left: 45px;\n}\n\n.inherit_header {\n  font-weight: bold;\n  color: gray;\n  cursor: pointer;\n\t-webkit-touch-callout: none;\n\t-webkit-user-select: none;\n\t-khtml-user-select: none;\n\t-moz-user-select: none;\n\t-ms-user-select: none;\n\tuser-select: none;\n}\n\n.inherit_header td {\n  padding: 6px 0px 2px 5px;\n}\n\n.inherit {\n  display: none;\n}\n\ntr.heading h2 {\n  margin-top: 12px;\n  margin-bottom: 4px;\n}\n\n/* tooltip related style info */\n\n.ttc {\n  position: absolute;\n  display: none;\n}\n\n#powerTip {\n\tcursor: default;\n\twhite-space: nowrap;\n\tbackground-color: white;\n\tborder: 1px solid gray;\n\tborder-radius: 4px 4px 4px 4px;\n\tbox-shadow: 1px 1px 7px gray;\n\tdisplay: none;\n\tfont-size: smaller;\n\tmax-width: 80%;\n\topacity: 0.9;\n\tpadding: 1ex 1em 1em;\n\tposition: absolute;\n\tz-index: 2147483647;\n}\n\n#powerTip div.ttdoc {\n  color: grey;\n\tfont-style: italic;\n}\n\n#powerTip div.ttname a {\n  font-weight: bold;\n}\n\n#powerTip div.ttname {\n  font-weight: bold;\n}\n\n#powerTip div.ttdeci {\n  color: #006318;\n}\n\n#powerTip div {\n  margin: 0px;\n  padding: 0px;\n  font: 12px/16px Roboto,sans-serif;\n}\n\n#powerTip:before, #powerTip:after {\n\tcontent: \"\";\n\tposition: absolute;\n\tmargin: 0px;\n}\n\n#powerTip.n:after, #powerTip.n:before,\n#powerTip.s:after, #powerTip.s:before,\n#powerTip.w:after, #powerTip.w:before,\n#powerTip.e:after, #powerTip.e:before,\n#powerTip.ne:after, #powerTip.ne:before,\n#powerTip.se:after, #powerTip.se:before,\n#powerTip.nw:after, #powerTip.nw:before,\n#powerTip.sw:after, #powerTip.sw:before {\n\tborder: solid transparent;\n\tcontent: \" \";\n\theight: 0;\n\twidth: 0;\n\tposition: absolute;\n}\n\n#powerTip.n:after, #powerTip.s:after,\n#powerTip.w:after, #powerTip.e:after,\n#powerTip.nw:after, #powerTip.ne:after,\n#powerTip.sw:after, #powerTip.se:after {\n\tborder-color: rgba(255, 255, 255, 0);\n}\n\n#powerTip.n:before, #powerTip.s:before,\n#powerTip.w:before, #powerTip.e:before,\n#powerTip.nw:before, #powerTip.ne:before,\n#powerTip.sw:before, #powerTip.se:before {\n\tborder-color: rgba(128, 128, 128, 0);\n}\n\n#powerTip.n:after, #powerTip.n:before,\n#powerTip.ne:after, #powerTip.ne:before,\n#powerTip.nw:after, #powerTip.nw:before {\n\ttop: 100%;\n}\n\n#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after {\n\tborder-top-color: #ffffff;\n\tborder-width: 10px;\n\tmargin: 0px -10px;\n}\n#powerTip.n:before {\n\tborder-top-color: #808080;\n\tborder-width: 11px;\n\tmargin: 0px -11px;\n}\n#powerTip.n:after, #powerTip.n:before {\n\tleft: 50%;\n}\n\n#powerTip.nw:after, #powerTip.nw:before {\n\tright: 14px;\n}\n\n#powerTip.ne:after, #powerTip.ne:before {\n\tleft: 14px;\n}\n\n#powerTip.s:after, #powerTip.s:before,\n#powerTip.se:after, #powerTip.se:before,\n#powerTip.sw:after, #powerTip.sw:before {\n\tbottom: 100%;\n}\n\n#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after {\n\tborder-bottom-color: #ffffff;\n\tborder-width: 10px;\n\tmargin: 0px -10px;\n}\n\n#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before {\n\tborder-bottom-color: #808080;\n\tborder-width: 11px;\n\tmargin: 0px -11px;\n}\n\n#powerTip.s:after, #powerTip.s:before {\n\tleft: 50%;\n}\n\n#powerTip.sw:after, #powerTip.sw:before {\n\tright: 14px;\n}\n\n#powerTip.se:after, #powerTip.se:before {\n\tleft: 14px;\n}\n\n#powerTip.e:after, #powerTip.e:before {\n\tleft: 100%;\n}\n#powerTip.e:after {\n\tborder-left-color: #ffffff;\n\tborder-width: 10px;\n\ttop: 50%;\n\tmargin-top: -10px;\n}\n#powerTip.e:before {\n\tborder-left-color: #808080;\n\tborder-width: 11px;\n\ttop: 50%;\n\tmargin-top: -11px;\n}\n\n#powerTip.w:after, #powerTip.w:before {\n\tright: 100%;\n}\n#powerTip.w:after {\n\tborder-right-color: #ffffff;\n\tborder-width: 10px;\n\ttop: 50%;\n\tmargin-top: -10px;\n}\n#powerTip.w:before {\n\tborder-right-color: #808080;\n\tborder-width: 11px;\n\ttop: 50%;\n\tmargin-top: -11px;\n}\n\n@media print {\n  #top {\n    display: none;\n  }\n\n  #side-nav {\n    display: none;\n  }\n\n  #nav-path {\n    display: none;\n  }\n\n  body {\n    overflow: visible;\n  }\n\n  h1, h2, h3, h4, h5, h6 {\n    page-break-after: avoid;\n  }\n\n  .summary {\n    display: none;\n  }\n\n  .memitem {\n    page-break-inside: avoid;\n  }\n\n  #doc-content {\n    margin-left: 0 !important;\n    height: auto !important;\n    width: auto !important;\n    overflow: inherit;\n    display: inline;\n  }\n}\n\n/* @group Markdown */\n\ntable.markdownTable {\n\tborder-collapse:collapse;\n  margin-top: 4px;\n  margin-bottom: 4px;\n}\n\ntable.markdownTable td, table.markdownTable th {\n\tborder: 1px solid #2D4068;\n\tpadding: 3px 7px 2px;\n}\n\ntable.markdownTable tr {\n}\n\nth.markdownTableHeadLeft, th.markdownTableHeadRight, th.markdownTableHeadCenter, th.markdownTableHeadNone {\n\tbackground-color: #374F7F;\n\tcolor: #FFFFFF;\n\tfont-size: 110%;\n\tpadding-bottom: 4px;\n\tpadding-top: 5px;\n}\n\nth.markdownTableHeadLeft, td.markdownTableBodyLeft {\n\ttext-align: left\n}\n\nth.markdownTableHeadRight, td.markdownTableBodyRight {\n\ttext-align: right\n}\n\nth.markdownTableHeadCenter, td.markdownTableBodyCenter {\n\ttext-align: center\n}\n\n/* @end */\n"
  },
  {
    "path": "examples/BUILD.bazel",
    "content": "# -*- mode: bazel; -*-\n# vi: set ft=bazel:\n\n#\n# examples/BUILD.bazel\n# RVO2-3D Library\n#\n# SPDX-FileCopyrightText: 2008 University of North Carolina at Chapel Hill\n# SPDX-License-Identifier: Apache-2.0\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#\n#     https://www.apache.org/licenses/LICENSE-2.0\n#\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# Please send all bug reports to <geom@cs.unc.edu>.\n#\n# The authors may be contacted via:\n#\n# Jur van den Berg, Stephen J. Guy, Jamie Snape, Ming C. Lin, Dinesh Manocha\n# Dept. of Computer Science\n# 201 S. Columbia St.\n# Frederick P. Brooks, Jr. Computer Science Bldg.\n# Chapel Hill, N.C. 27599-3175\n# United States of America\n#\n# <https://gamma.cs.unc.edu/RVO2/>\n#\n\nload(\"@rules_cc//cc:defs.bzl\", \"cc_test\")\n\npackage(default_package_metadata = [\n    \"//:license\",\n    \"//:package_info\",\n])\n\ncc_test(\n    name = \"Sphere\",\n    size = \"medium\",\n    timeout = \"short\",\n    srcs = [\"Sphere.cc\"],\n    copts = select({\n        \"@platforms//os:windows\": [\"/W4\"],\n        \"//conditions:default\": [\n            \"-Wall\",\n            \"-Werror=format-security\",\n        ],\n    }),\n    defines = [\"RVO3D_OUTPUT_TIME_AND_POSITIONS=0\"],\n    tags = [\"block-network\"],\n    deps = [\"//src:RVO3D\"],\n)\n"
  },
  {
    "path": "examples/CMakeLists.txt",
    "content": "# -*- mode: cmake; -*-\n# vi: set ft=cmake:\n\n#\n# examples/CMakeLists.txt\n# RVO2-3D Library\n#\n# SPDX-FileCopyrightText: 2008 University of North Carolina at Chapel Hill\n# SPDX-License-Identifier: Apache-2.0\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#\n#     https://www.apache.org/licenses/LICENSE-2.0\n#\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# Please send all bug reports to <geom@cs.unc.edu>.\n#\n# The authors may be contacted via:\n#\n# Jur van den Berg, Stephen J. Guy, Jamie Snape, Ming C. Lin, Dinesh Manocha\n# Dept. of Computer Science\n# 201 S. Columbia St.\n# Frederick P. Brooks, Jr. Computer Science Bldg.\n# Chapel Hill, N.C. 27599-3175\n# United States of America\n#\n# <https://gamma.cs.unc.edu/RVO2/>\n#\n\noption(BUILD_EXAMPLES \"Build examples\" ${PROJECT_IS_TOP_LEVEL})\n\nif(BUILD_EXAMPLES)\n  option(OUTPUT_TIME_AND_POSITIONS \"Output time and positions\" ON)\n\n  if(OUTPUT_TIME_AND_POSITIONS)\n    set(RVO3D_EXAMPLES_COMPILE_DEFINITIONS\n      RVO3D_OUTPUT_TIME_AND_POSITIONS=1)\n  else()\n    set(RVO3D_EXAMPLES_COMPILE_DEFINITIONS\n      RVO3D_OUTPUT_TIME_AND_POSITIONS=0)\n  endif()\n\n  if(ENABLE_INTERPROCEDURAL_OPTIMIZATION\n      AND RVO3D_INTERPROCEDURAL_OPTIMIZATION_SUPPORTED)\n    set(RVO3D_EXAMPLES_INTERPROCEDURAL_OPTIMIZATION ON)\n  else()\n    set(RVO3D_EXAMPLES_INTERPROCEDURAL_OPTIMIZATION OFF)\n  endif()\n\n  include(CheckPIESupported)\n  check_pie_supported()\n\n  add_executable(Sphere Sphere.cc)\n  target_compile_definitions(Sphere PRIVATE\n    ${RVO3D_EXAMPLES_COMPILE_DEFINITIONS})\n  target_link_libraries(Sphere PRIVATE ${RVO3D_LIBRARY})\n  if(ENABLE_OPENMP AND OpenMP_FOUND)\n    target_link_libraries(Sphere PRIVATE OpenMP::OpenMP_CXX)\n  endif()\n  set_target_properties(Sphere PROPERTIES\n    INTERPROCEDURAL_OPTIMIZATION ${RVO3D_EXAMPLES_INTERPROCEDURAL_OPTIMIZATION})\n  if(CMAKE_VERSION VERSION_GREATER_EQUAL 4.1)\n    set_target_properties(Sphere PROPERTIES\n      SPDX_LICENSE Apache-2.0)\n  endif()\n  add_test(NAME Sphere COMMAND Sphere)\n  set_tests_properties(Sphere PROPERTIES\n    LABELS medium\n    TIMEOUT 60)\nendif()\n"
  },
  {
    "path": "examples/Sphere.cc",
    "content": "/*\n * Sphere.cc\n * RVO2-3D Library\n *\n * SPDX-FileCopyrightText: 2008 University of North Carolina at Chapel Hill\n * SPDX-License-Identifier: Apache-2.0\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 *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\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 * Please send all bug reports to <geom@cs.unc.edu>.\n *\n * The authors may be contacted via:\n *\n * Jur van den Berg, Stephen J. Guy, Jamie Snape, Ming C. Lin, Dinesh Manocha\n * Dept. of Computer Science\n * 201 S. Columbia St.\n * Frederick P. Brooks, Jr. Computer Science Bldg.\n * Chapel Hill, N.C. 27599-3175\n * United States of America\n *\n * <https://gamma.cs.unc.edu/RVO2/>\n */\n\n/**\n * @file  Sphere.cc\n * @brief Example file showing a demo with 812 agents initially positioned\n *        evenly distributed on a sphere attempting to move to the antipodal\n *        position on the sphere.\n */\n\n#ifndef RVO3D_OUTPUT_TIME_AND_POSITIONS\n#define RVO3D_OUTPUT_TIME_AND_POSITIONS 1\n#endif\n\n#include <cmath>\n#include <cstddef>\n#include <vector>\n\n#if RVO3D_OUTPUT_TIME_AND_POSITIONS\n#include <iostream>\n#endif /* RVO3D_OUTPUT_TIME_AND_POSITIONS */\n\n#include <RVO.h>\n\nnamespace {\nconst float RVO3D_TWO_PI = 6.28318530717958647692F;\n\nvoid setupScenario(\n    RVO::RVOSimulator *sim,\n    std::vector<RVO::Vector3> &goals) { /* NOLINT(runtime/references) */\n  /* Specify the global time step of the simulation. */\n  sim->setTimeStep(0.125F);\n\n  /* Specify the default parameters for agents that are subsequently added. */\n  sim->setAgentDefaults(15.0F, 10U, 10.0F, 1.5F, 2.0F);\n\n  /* Add agents, specifying their start position, and store their goals on the\n   * opposite side of the environment.\n   */\n  for (std::size_t i = 0U; i < 5.0F * RVO3D_TWO_PI; ++i) {\n    const float z = 100.0F * std::cos(i / 10.0F);\n    const float r = 100.0F * std::sin(i / 10.0F);\n\n    for (std::size_t j = 0U; j < r / 2.5F; ++j) {\n      const float x = r * std::cos(j * RVO3D_TWO_PI / (r / 2.5F));\n      const float y = r * std::sin(j * RVO3D_TWO_PI / (r / 2.5F));\n\n      sim->addAgent(RVO::Vector3(x, y, z));\n      goals.push_back(-sim->getAgentPosition(sim->getNumAgents() - 1U));\n    }\n  }\n}\n\n#if RVO3D_OUTPUT_TIME_AND_POSITIONS\nvoid updateVisualization(RVO::RVOSimulator *sim) {\n  /* Output the current global time. */\n  std::cout << sim->getGlobalTime();\n\n  /* Output the position for all the agents. */\n  for (std::size_t i = 0U; i < sim->getNumAgents(); ++i) {\n    std::cout << \" \" << sim->getAgentPosition(i);\n  }\n\n  std::cout << std::endl;\n}\n#endif /* RVO3D_OUTPUT_TIME_AND_POSITIONS */\n} /* namespace */\n\nvoid setPreferredVelocities(RVO::RVOSimulator *sim,\n                            const std::vector<RVO::Vector3> &goals) {\n  /* Set the preferred velocity to be a vector of unit magnitude (speed) in the\n   * direction of the goal.\n   */\n  for (std::size_t i = 0U; i < sim->getNumAgents(); ++i) {\n    RVO::Vector3 goalVector = goals[i] - sim->getAgentPosition(i);\n\n    if (RVO::absSq(goalVector) > 1.0F) {\n      goalVector = RVO::normalize(goalVector);\n    }\n\n    sim->setAgentPrefVelocity(i, goalVector);\n  }\n}\n\nbool reachedGoal(RVO::RVOSimulator *sim,\n                 const std::vector<RVO::Vector3> &goals) {\n  /* Check if all agents have reached their goals. */\n  for (std::size_t i = 0U; i < sim->getNumAgents(); ++i) {\n    if (RVO::absSq(sim->getAgentPosition(i) - goals[i]) >\n        4.0F * sim->getAgentRadius(i) * sim->getAgentRadius(i)) {\n      return false;\n    }\n  }\n\n  return true;\n}\n\nint main() {\n  /* Create a new simulator instance. */\n  RVO::RVOSimulator *sim = new RVO::RVOSimulator();\n\n  /* Store the goals of the agents. */\n  std::vector<RVO::Vector3> goals;\n\n  /* Set up the scenario. */\n  setupScenario(sim, goals);\n\n  /* Perform (and manipulate) the simulation. */\n  do {\n#if RVO3D_OUTPUT_TIME_AND_POSITIONS\n    updateVisualization(sim);\n#endif /* RVO3D_OUTPUT_TIME_AND_POSITIONS */\n    setPreferredVelocities(sim, goals);\n    sim->doStep();\n  } while (!reachedGoal(sim, goals));\n\n  delete sim;\n\n  return 0;\n}\n"
  },
  {
    "path": "include-what-you-use.imp",
    "content": "[\n  {\n    \"include\": [\"@<__algorithm/.*>\", \"private\", \"<algorithm>\", \"public\"]\n  },\n  {\n    \"include\": [\"@<__utility/.*>\", \"private\", \"<utility>\", \"public\"]\n  }\n]\n"
  },
  {
    "path": "include-what-you-use.imp.license",
    "content": "include-what-you-use.imp\nRVO2-3D Library\n\nSPDX-FileCopyrightText: 2008 University of North Carolina at Chapel Hill\nSPDX-License-Identifier: Apache-2.0\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    https://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n\nPlease send all bug reports to <geom@cs.unc.edu>.\n\nThe authors may be contacted via:\n\nJur van den Berg, Stephen J. Guy, Jamie Snape, Ming C. Lin, Dinesh Manocha\nDept. of Computer Science\n201 S. Columbia St.\nFrederick P. Brooks, Jr. Computer Science Bldg.\nChapel Hill, N.C. 27599-3175\nUnited States of America\n\n<https://gamma.cs.unc.edu/RVO2/>\n"
  },
  {
    "path": "package.xml",
    "content": "<?xml version=\"1.0\"?>\n<?xml-model href=\"http://download.ros.org/schema/package_format3.xsd\"\n  schematypens=\"http://www.w3.org/2001/XMLSchema\"?>\n<!--\npackage.xml\nRVO2-3D Library\n\nSPDX-FileCopyrightText: 2008 University of North Carolina at Chapel Hill\nSPDX-License-Identifier: Apache-2.0\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    https://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n\nPlease send all bug reports to <geom@cs.unc.edu>.\n\nThe authors may be contacted via:\n\nJur van den Berg, Stephen J. Guy, Jamie Snape, Ming C. Lin, Dinesh Manocha\nDept. of Computer Science\n201 S. Columbia St.\nFrederick P. Brooks, Jr. Computer Science Bldg.\nChapel Hill, N.C. 27599-3175\nUnited States of America\n\n<https://gamma.cs.unc.edu/RVO2/>\n-->\n<package format=\"3\">\n  <name>rvo2_3d</name>\n  <version>1.1.0</version>\n  <description>\n    Optimal Reciprocal Collision Avoidance in Three Dimensions\n  </description>\n\n  <maintainer email=\"geom@cs.unc.edu\">Jamie Snape</maintainer>\n\n  <license>Apache-2.0</license>\n\n  <url type=\"website\">https://gamma.cs.unc.edu/RVO2/</url>\n  <url type=\"repository\">https://github.com/snape/RVO2-3D</url>\n\n  <author>Jur van den Berg</author>\n  <author>Stephen J. Guy</author>\n  <author>Jamie Snape</author>\n  <author>Ming C. Lin</author>\n  <author>Dinesh Manocha</author>\n\n  <buildtool_depend>cmake</buildtool_depend>\n\n  <export>\n    <build_type>cmake</build_type>\n  </export>\n</package>\n"
  },
  {
    "path": "renovate.json",
    "content": "{\n  \"$schema\": \"https://docs.renovatebot.com/renovate-schema.json\",\n  \"extends\": [\n    \"config:recommended\"\n  ]\n}\n"
  },
  {
    "path": "renovate.json.license",
    "content": "renovate.json\nRVO2-3D Library\n\nSPDX-FileCopyrightText: 2008 University of North Carolina at Chapel Hill\nSPDX-License-Identifier: Apache-2.0\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    https://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n\nPlease send all bug reports to <geom@cs.unc.edu>.\n\nThe authors may be contacted via:\n\nJur van den Berg, Stephen J. Guy, Jamie Snape, Ming C. Lin, Dinesh Manocha\nDept. of Computer Science\n201 S. Columbia St.\nFrederick P. Brooks, Jr. Computer Science Bldg.\nChapel Hill, N.C. 27599-3175\nUnited States of America\n\n<https://gamma.cs.unc.edu/RVO2/>\n"
  },
  {
    "path": "requirements.txt",
    "content": "#\n# requirements.txt\n# RVO2-3D Library\n#\n# SPDX-FileCopyrightText: 2008 University of North Carolina at Chapel Hill\n# SPDX-License-Identifier: Apache-2.0\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#\n#     https://www.apache.org/licenses/LICENSE-2.0\n#\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# Please send all bug reports to <geom@cs.unc.edu>.\n#\n# The authors may be contacted via:\n#\n# Jur van den Berg, Stephen J. Guy, Jamie Snape, Ming C. Lin, Dinesh Manocha\n# Dept. of Computer Science\n# 201 S. Columbia St.\n# Frederick P. Brooks, Jr. Computer Science Bldg.\n# Chapel Hill, N.C. 27599-3175\n# United States of America\n#\n# <https://gamma.cs.unc.edu/RVO2/>\n#\n\ncffconvert\ncmakelang\ncpplint\nreuse\n"
  },
  {
    "path": "src/Agent.cc",
    "content": "/*\n * Agent.cc\n * RVO2-3D Library\n *\n * SPDX-FileCopyrightText: 2008 University of North Carolina at Chapel Hill\n * SPDX-License-Identifier: Apache-2.0\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 *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\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 * Please send all bug reports to <geom@cs.unc.edu>.\n *\n * The authors may be contacted via:\n *\n * Jur van den Berg, Stephen J. Guy, Jamie Snape, Ming C. Lin, Dinesh Manocha\n * Dept. of Computer Science\n * 201 S. Columbia St.\n * Frederick P. Brooks, Jr. Computer Science Bldg.\n * Chapel Hill, N.C. 27599-3175\n * United States of America\n *\n * <https://gamma.cs.unc.edu/RVO2/>\n */\n\n#include \"Agent.h\"\n\n#include <algorithm>\n#include <cmath>\n\n#include \"KdTree.h\"\n#include \"RVOSimulator.h\"\n\nnamespace RVO {\nnamespace {\n/**\n * @brief A sufficiently small positive number.\n */\nconst float RVO3D_EPSILON = 0.00001F;\n\n/**\n * @brief Defines a directed line.\n */\nclass Line {\n public:\n  /**\n   * @brief Constructs a directed line.``\n   */\n  Line();\n\n  /**\n   * @brief The direction of the directed line.\n   */\n  Vector3 direction;\n\n  /**\n   * @brief A point on the directed line.\n   */\n  Vector3 point;\n};\n\nLine::Line() {}\n\n/**\n * @brief     Solves a one-dimensional linear program on a specified line\n *            subject to linear constraints defined by planes and a spherical\n *            constraint.\n * @param[in] planes       Planes defining the linear constraints.\n * @param[in] planeNo      The plane on which the line lies.\n * @param[in] line         The line on which the one-dimensional linear program\n *                         is solved.\n * @param[in] radius       The radius of the spherical constraint.\n * @param[in] optVelocity  The optimization velocity.\n * @param[in] directionOpt True if the direction should be optimized.\n * @param[in] result       A reference to the result of the linear program.\n * @return True if successful.\n */\nbool linearProgram1(const std::vector<Plane> &planes, std::size_t planeNo,\n                    const Line &line, float radius, const Vector3 &optVelocity,\n                    bool directionOpt,\n                    Vector3 &result) { /* NOLINT(runtime/references) */\n  const float dotProduct = line.point * line.direction;\n  const float discriminant =\n      dotProduct * dotProduct + radius * radius - absSq(line.point);\n\n  if (discriminant < 0.0F) {\n    /* Max speed sphere fully invalidates line. */\n    return false;\n  }\n\n  const float sqrtDiscriminant = std::sqrt(discriminant);\n  float tLeft = -dotProduct - sqrtDiscriminant;\n  float tRight = -dotProduct + sqrtDiscriminant;\n\n  for (std::size_t i = 0U; i < planeNo; ++i) {\n    const float numerator = (planes[i].point - line.point) * planes[i].normal;\n    const float denominator = line.direction * planes[i].normal;\n\n    if (denominator * denominator <= RVO3D_EPSILON) {\n      /* Lines line is (almost) parallel to plane i. */\n      if (numerator > 0.0F) {\n        return false;\n      }\n\n      continue;\n    }\n\n    const float t = numerator / denominator;\n\n    if (denominator >= 0.0F) {\n      /* Plane i bounds line on the left. */\n      tLeft = std::max(tLeft, t);\n    } else {\n      /* Plane i bounds line on the right. */\n      tRight = std::min(tRight, t);\n    }\n\n    if (tLeft > tRight) {\n      return false;\n    }\n  }\n\n  if (directionOpt) {\n    /* Optimize direction. */\n    if (optVelocity * line.direction > 0.0F) {\n      /* Take right extreme. */\n      result = line.point + tRight * line.direction;\n    } else {\n      /* Take left extreme. */\n      result = line.point + tLeft * line.direction;\n    }\n  } else {\n    /* Optimize closest point. */\n    const float t = line.direction * (optVelocity - line.point);\n\n    if (t < tLeft) {\n      result = line.point + tLeft * line.direction;\n    } else if (t > tRight) {\n      result = line.point + tRight * line.direction;\n    } else {\n      result = line.point + t * line.direction;\n    }\n  }\n\n  return true;\n}\n\n/**\n * @brief      Solves a two-dimensional linear program on a specified plane\n *             subject to linear constraints defined by planes and a spherical\n *             constraint.\n * @param[in]  planes       Planes defining the linear constraints.\n * @param[in]  planeNo      The plane on which the two-dimensional linear\n *                          program is solved.\n * @param[in]  radius       The radius of the spherical constraint.\n * @param[in]  optVelocity  The optimization velocity.\n * @param[in]  directionOpt True if the direction should be optimized.\n * @param[out] result       A reference to the result of the linear program.\n * @return     True if successful.\n */\nbool linearProgram2(const std::vector<Plane> &planes, std::size_t planeNo,\n                    float radius, const Vector3 &optVelocity, bool directionOpt,\n                    Vector3 &result) { /* NOLINT(runtime/references) */\n  const float planeDist = planes[planeNo].point * planes[planeNo].normal;\n  const float planeDistSq = planeDist * planeDist;\n  const float radiusSq = radius * radius;\n\n  if (planeDistSq > radiusSq) {\n    /* Max speed sphere fully invalidates plane planeNo. */\n    return false;\n  }\n\n  const float planeRadiusSq = radiusSq - planeDistSq;\n\n  const Vector3 planeCenter = planeDist * planes[planeNo].normal;\n\n  if (directionOpt) {\n    /* Project direction optVelocity on plane planeNo. */\n    const Vector3 planeOptVelocity =\n        optVelocity -\n        (optVelocity * planes[planeNo].normal) * planes[planeNo].normal;\n    const float planeOptVelocityLengthSq = absSq(planeOptVelocity);\n\n    if (planeOptVelocityLengthSq <= RVO3D_EPSILON) {\n      result = planeCenter;\n    } else {\n      result =\n          planeCenter + std::sqrt(planeRadiusSq / planeOptVelocityLengthSq) *\n                            planeOptVelocity;\n    }\n  } else {\n    /* Project point optVelocity on plane planeNo. */\n    result = optVelocity +\n             ((planes[planeNo].point - optVelocity) * planes[planeNo].normal) *\n                 planes[planeNo].normal;\n\n    /* If outside planeCircle, project on planeCircle. */\n    if (absSq(result) > radiusSq) {\n      const Vector3 planeResult = result - planeCenter;\n      const float planeResultLengthSq = absSq(planeResult);\n      result = planeCenter +\n               std::sqrt(planeRadiusSq / planeResultLengthSq) * planeResult;\n    }\n  }\n\n  for (std::size_t i = 0U; i < planeNo; ++i) {\n    if (planes[i].normal * (planes[i].point - result) > 0.0F) {\n      /* Result does not satisfy constraint i. Compute new optimal result.\n       * Compute intersection line of plane i and plane planeNo.\n       */\n      Vector3 crossProduct = cross(planes[i].normal, planes[planeNo].normal);\n\n      if (absSq(crossProduct) <= RVO3D_EPSILON) {\n        /* Planes planeNo and i are (almost) parallel, and plane i fully\n         * invalidates plane planeNo.\n         */\n        return false;\n      }\n\n      Line line;\n      line.direction = normalize(crossProduct);\n      const Vector3 lineNormal = cross(line.direction, planes[planeNo].normal);\n      line.point =\n          planes[planeNo].point +\n          (((planes[i].point - planes[planeNo].point) * planes[i].normal) /\n           (lineNormal * planes[i].normal)) *\n              lineNormal;\n\n      if (!linearProgram1(planes, i, line, radius, optVelocity, directionOpt,\n                          result)) {\n        return false;\n      }\n    }\n  }\n\n  return true;\n}\n\n/**\n * @brief      Solves a three-dimensional linear program subject to linear\n *             constraints defined by planes and a spherical constraint.\n * @param[in]  planes       Planes defining the linear constraints.\n * @param[in]  radius       The radius of the spherical constraint.\n * @param[in]  optVelocity  The optimization velocity.\n * @param[in]  directionOpt True if the direction should be optimized.\n * @param[out] result       A reference to the result of the linear program.\n * @return     The number of the plane it fails on, and the number of planes if\n *             successful.\n */\nstd::size_t linearProgram3(const std::vector<Plane> &planes, float radius,\n                           const Vector3 &optVelocity, bool directionOpt,\n                           Vector3 &result) { /* NOLINT(runtime/references) */\n  if (directionOpt) {\n    /* Optimize direction. Note that the optimization velocity is of unit length\n     * in this case.\n     */\n    result = optVelocity * radius;\n  } else if (absSq(optVelocity) > radius * radius) {\n    /* Optimize closest point and outside circle. */\n    result = normalize(optVelocity) * radius;\n  } else {\n    /* Optimize closest point and inside circle. */\n    result = optVelocity;\n  }\n\n  for (std::size_t i = 0U; i < planes.size(); ++i) {\n    if (planes[i].normal * (planes[i].point - result) > 0.0F) {\n      /* Result does not satisfy constraint i. Compute new optimal result. */\n      const Vector3 tempResult = result;\n\n      if (!linearProgram2(planes, i, radius, optVelocity, directionOpt,\n                          result)) {\n        result = tempResult;\n        return i;\n      }\n    }\n  }\n\n  return planes.size();\n}\n\n/**\n * @brief      Solves a four-dimensional linear program subject to linear\n *             constraints defined by planes and a spherical constraint.\n * @param[in]  planes     Planes defining the linear constraints.\n * @param[in]  beginPlane The plane on which the three-dimensional linear\n *                        program failed.\n * @param[in]  radius     The radius of the spherical constraint.\n * @param[out] result     A reference to the result of the linear program.\n */\nvoid linearProgram4(const std::vector<Plane> &planes, std::size_t beginPlane,\n                    float radius,\n                    Vector3 &result) { /* NOLINT(runtime/references) */\n  float distance = 0.0F;\n\n  for (std::size_t i = beginPlane; i < planes.size(); ++i) {\n    if (planes[i].normal * (planes[i].point - result) > distance) {\n      /* Result does not satisfy constraint of plane i. */\n      std::vector<Plane> projPlanes;\n\n      for (std::size_t j = 0U; j < i; ++j) {\n        Plane plane;\n\n        const Vector3 crossProduct = cross(planes[j].normal, planes[i].normal);\n\n        if (absSq(crossProduct) <= RVO3D_EPSILON) {\n          /* Plane i and plane j are (almost) parallel. */\n          if (planes[i].normal * planes[j].normal > 0.0F) {\n            /* Plane i and plane j point in the same direction. */\n            continue;\n          }\n\n          /* Plane i and plane j point in opposite direction. */\n          plane.point = 0.5F * (planes[i].point + planes[j].point);\n        } else {\n          /* Plane.point is point on line of intersection between plane i and\n           * plane j.\n           */\n          const Vector3 lineNormal = cross(crossProduct, planes[i].normal);\n          plane.point =\n              planes[i].point +\n              (((planes[j].point - planes[i].point) * planes[j].normal) /\n               (lineNormal * planes[j].normal)) *\n                  lineNormal;\n        }\n\n        plane.normal = normalize(planes[j].normal - planes[i].normal);\n        projPlanes.push_back(plane);\n      }\n\n      const Vector3 tempResult = result;\n\n      if (linearProgram3(projPlanes, radius, planes[i].normal, true, result) <\n          projPlanes.size()) {\n        /* This should in principle not happen. The result is by definition\n         * already in the feasible region of this linear program. If it fails,\n         * it is due to small floating point error, and the current result is\n         * kept.\n         */\n        result = tempResult;\n      }\n\n      distance = planes[i].normal * (planes[i].point - result);\n    }\n  }\n}\n} /* namespace */\n\nAgent::Agent(RVOSimulator *sim)\n    : sim_(sim),\n      id_(0U),\n      maxNeighbors_(0U),\n      maxSpeed_(0.0F),\n      neighborDist_(0.0F),\n      radius_(0.0F),\n      timeHorizon_(0.0F) {}\n\nAgent::~Agent() {}\n\nvoid Agent::computeNeighbors() {\n  agentNeighbors_.clear();\n\n  if (maxNeighbors_ > 0U) {\n    sim_->kdTree_->computeAgentNeighbors(this, neighborDist_ * neighborDist_);\n  }\n}\n\nvoid Agent::computeNewVelocity() {\n  orcaPlanes_.clear();\n  const float invTimeHorizon = 1.0F / timeHorizon_;\n\n  /* Create agent ORCA planes. */\n  for (std::size_t i = 0U; i < agentNeighbors_.size(); ++i) {\n    const Agent *const other = agentNeighbors_[i].second;\n    const Vector3 relativePosition = other->position_ - position_;\n    const Vector3 relativeVelocity = velocity_ - other->velocity_;\n    const float distSq = absSq(relativePosition);\n    const float combinedRadius = radius_ + other->radius_;\n    const float combinedRadiusSq = combinedRadius * combinedRadius;\n\n    Plane plane;\n    Vector3 u;\n\n    if (distSq > combinedRadiusSq) {\n      /* No collision. */\n      const Vector3 w = relativeVelocity - invTimeHorizon * relativePosition;\n      /* Vector from cutoff center to relative velocity. */\n      const float wLengthSq = absSq(w);\n\n      const float dotProduct = w * relativePosition;\n\n      if (dotProduct < 0.0F &&\n          dotProduct * dotProduct > combinedRadiusSq * wLengthSq) {\n        /* Project on cut-off circle. */\n        const float wLength = std::sqrt(wLengthSq);\n        const Vector3 unitW = w / wLength;\n\n        plane.normal = unitW;\n        u = (combinedRadius * invTimeHorizon - wLength) * unitW;\n      } else {\n        /* Project on cone. */\n        const float a = distSq;\n        const float b = relativePosition * relativeVelocity;\n        const float c = absSq(relativeVelocity) -\n                        absSq(cross(relativePosition, relativeVelocity)) /\n                            (distSq - combinedRadiusSq);\n        const float t = (b + std::sqrt(b * b - a * c)) / a;\n        const Vector3 ww = relativeVelocity - t * relativePosition;\n        const float wwLength = abs(ww);\n        const Vector3 unitWW = ww / wwLength;\n\n        plane.normal = unitWW;\n        u = (combinedRadius * t - wwLength) * unitWW;\n      }\n    } else {\n      /* Collision. */\n      const float invTimeStep = 1.0F / sim_->timeStep_;\n      const Vector3 w = relativeVelocity - invTimeStep * relativePosition;\n      const float wLength = abs(w);\n      const Vector3 unitW = w / wLength;\n\n      plane.normal = unitW;\n      u = (combinedRadius * invTimeStep - wLength) * unitW;\n    }\n\n    plane.point = velocity_ + 0.5F * u;\n    orcaPlanes_.push_back(plane);\n  }\n\n  const std::size_t planeFail = linearProgram3(\n      orcaPlanes_, maxSpeed_, prefVelocity_, false, newVelocity_);\n\n  if (planeFail < orcaPlanes_.size()) {\n    linearProgram4(orcaPlanes_, planeFail, maxSpeed_, newVelocity_);\n  }\n}\n\nvoid Agent::insertAgentNeighbor(const Agent *agent, float &rangeSq) {\n  if (this != agent) {\n    const float distSq = absSq(position_ - agent->position_);\n\n    if (distSq < rangeSq) {\n      if (agentNeighbors_.size() < maxNeighbors_) {\n        agentNeighbors_.push_back(std::make_pair(distSq, agent));\n      }\n\n      std::size_t i = agentNeighbors_.size() - 1U;\n\n      while (i != 0U && distSq < agentNeighbors_[i - 1U].first) {\n        agentNeighbors_[i] = agentNeighbors_[i - 1U];\n        --i;\n      }\n\n      agentNeighbors_[i] = std::make_pair(distSq, agent);\n\n      if (agentNeighbors_.size() == maxNeighbors_) {\n        rangeSq = agentNeighbors_.back().first;\n      }\n    }\n  }\n}\n\nvoid Agent::update() {\n  velocity_ = newVelocity_;\n  position_ += velocity_ * sim_->timeStep_;\n}\n} /* namespace RVO */\n"
  },
  {
    "path": "src/Agent.h",
    "content": "/*\n * Agent.h\n * RVO2-3D Library\n *\n * SPDX-FileCopyrightText: 2008 University of North Carolina at Chapel Hill\n * SPDX-License-Identifier: Apache-2.0\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 *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\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 * Please send all bug reports to <geom@cs.unc.edu>.\n *\n * The authors may be contacted via:\n *\n * Jur van den Berg, Stephen J. Guy, Jamie Snape, Ming C. Lin, Dinesh Manocha\n * Dept. of Computer Science\n * 201 S. Columbia St.\n * Frederick P. Brooks, Jr. Computer Science Bldg.\n * Chapel Hill, N.C. 27599-3175\n * United States of America\n *\n * <https://gamma.cs.unc.edu/RVO2/>\n */\n\n#ifndef RVO3D_AGENT_H_\n#define RVO3D_AGENT_H_\n\n/**\n * @file  Agent.h\n * @brief Contains the Agent class.\n */\n\n#include <cstddef>\n#include <utility>\n#include <vector>\n\n#include \"Plane.h\"\n#include \"Vector3.h\"\n\nnamespace RVO {\nclass RVOSimulator;\n\n/**\n * @brief Defines an agent in the simulation.\n */\nclass Agent {\n private:\n  /**\n   * @brief     Constructs an agent instance.\n   * @param[in] sim The simulator instance.\n   */\n  explicit Agent(RVOSimulator *sim);\n\n  /**\n   * @brief Destroys this agent instance.\n   */\n  ~Agent();\n\n  /**\n   * @brief Computes the neighbors of this agent.\n   */\n  void computeNeighbors();\n\n  /**\n   * @brief Computes the new velocity of this agent.\n   */\n  void computeNewVelocity();\n\n  /**\n   * @brief     Inserts an agent neighbor into the set of neighbors of this\n   *            agent.\n   * @param[in] agent   A pointer to the agent to be inserted.\n   * @param[in] rangeSq The squared range around this agent.\n   */\n  void insertAgentNeighbor(const Agent *agent,\n                           float &rangeSq); /* NOLINT(runtime/references) */\n\n  /**\n   * @brief Updates the three-dimensional position and three-dimensional\n   *        velocity of this agent.\n   */\n  void update();\n\n  /* Not implemented. */\n  Agent(const Agent &other);\n\n  /* Not implemented. */\n  Agent &operator=(const Agent &other);\n\n  Vector3 newVelocity_;\n  Vector3 position_;\n  Vector3 prefVelocity_;\n  Vector3 velocity_;\n  RVOSimulator *sim_;\n  std::size_t id_;\n  std::size_t maxNeighbors_;\n  float maxSpeed_;\n  float neighborDist_;\n  float radius_;\n  float timeHorizon_;\n  std::vector<std::pair<float, const Agent *> > agentNeighbors_;\n  std::vector<Plane> orcaPlanes_;\n\n  friend class KdTree;\n  friend class RVOSimulator;\n};\n} /* namespace RVO */\n\n#endif /* RVO3D_AGENT_H_ */\n"
  },
  {
    "path": "src/BUILD.bazel",
    "content": "# -*- mode: bazel; -*-\n# vi: set ft=bazel:\n\n#\n# src/BUILD.bazel\n# RVO2-3D Library\n#\n# SPDX-FileCopyrightText: 2008 University of North Carolina at Chapel Hill\n# SPDX-License-Identifier: Apache-2.0\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#\n#     https://www.apache.org/licenses/LICENSE-2.0\n#\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# Please send all bug reports to <geom@cs.unc.edu>.\n#\n# The authors may be contacted via:\n#\n# Jur van den Berg, Stephen J. Guy, Jamie Snape, Ming C. Lin, Dinesh Manocha\n# Dept. of Computer Science\n# 201 S. Columbia St.\n# Frederick P. Brooks, Jr. Computer Science Bldg.\n# Chapel Hill, N.C. 27599-3175\n# United States of America\n#\n# <https://gamma.cs.unc.edu/RVO2/>\n#\n\nload(\"@rules_cc//cc:defs.bzl\", \"cc_library\")\nload(\"@rules_pkg//pkg:mappings.bzl\", \"pkg_attributes\", \"pkg_files\")\n\npackage(default_package_metadata = [\n    \"//:license\",\n    \"//:package_info\",\n])\n\n# REUSE-IgnoreStart\ngenrule(\n    name = \"export\",\n    outs = [\"Export.h\"],\n    cmd = \"\"\"\ncat << 'EOF' > $@\n/*\n * Export.h\n * RVO2-3D Library\n *\n * SPDX-FileCopyrightText: 2008 University of North Carolina at Chapel Hill\n * SPDX-License-Identifier: Apache-2.0\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 *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\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 * Please send all bug reports to <geom@cs.unc.edu>.\n *\n * The authors may be contacted via:\n *\n * Jur van den Berg, Stephen J. Guy, Jamie Snape, Ming C. Lin, Dinesh Manocha\n * Dept. of Computer Science\n * 201 S. Columbia St.\n * Frederick P. Brooks, Jr. Computer Science Bldg.\n * Chapel Hill, N.C. 27599-3175\n * United States of America\n *\n * <https://gamma.cs.unc.edu/RVO2/>\n */\n\n#ifndef RVO3D_EXPORT_H_\n#define RVO3D_EXPORT_H_\n\n#ifdef RVO3D_STATIC_DEFINE\n#define RVO3D_EXPORT\n#else\n#ifdef _WIN32\n#ifdef RVO3D_EXPORTS\n#define RVO3D_EXPORT __declspec(dllexport)\n#else\n#define RVO3D_EXPORT __declspec(dllimport)\n#endif\n#else\n#define RVO3D_EXPORT __attribute__((visibility(\"default\")))\n#endif\n#endif\n\n#endif /* RVO3D_EXPORT_H_ */\nEOF\n\"\"\",\n)\n# REUSE-IgnoreEnd\n\nfilegroup(\n    name = \"hdrs\",\n    srcs = [\n        \"Export.h\",\n        \"Plane.h\",\n        \"RVO.h\",\n        \"RVOSimulator.h\",\n        \"Vector3.h\",\n    ],\n)\n\ncc_library(\n    name = \"RVO3D\",\n    srcs = [\n        \"Agent.cc\",\n        \"Agent.h\",\n        \"KdTree.cc\",\n        \"KdTree.h\",\n        \"Plane.cc\",\n        \"RVOSimulator.cc\",\n        \"Vector3.cc\",\n    ],\n    hdrs = [\":hdrs\"],\n    copts = select({\n        \"@platforms//os:windows\": [\"/W4\"],\n        \"//conditions:default\": [\n            \"-fvisibility-inlines-hidden\",\n            \"-fvisibility=hidden\",\n            \"-Wall\",\n            \"-Werror=format-security\",\n        ],\n    }),\n    local_defines = select({\n        \"@platforms//os:windows\": [\"RVO_EXPORTS\"],\n        \"//conditions:default\": [],\n    }),\n    strip_include_prefix = \"/src\",\n    visibility = [\"//visibility:public\"],\n)\n\npkg_files(\n    name = \"include\",\n    srcs = [\":hdrs\"],\n    attributes = pkg_attributes(mode = \"0644\"),\n    prefix = \"usr/include/RVO3D\",\n    visibility = [\"//:__pkg__\"],\n)\n"
  },
  {
    "path": "src/CMakeLists.txt",
    "content": "# -*- mode: cmake; -*-\n# vi: set ft=cmake:\n\n#\n# src/CMakeLists.txt\n# RVO2-3D Library\n#\n# SPDX-FileCopyrightText: 2008 University of North Carolina at Chapel Hill\n# SPDX-License-Identifier: Apache-2.0\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#\n#     https://www.apache.org/licenses/LICENSE-2.0\n#\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# Please send all bug reports to <geom@cs.unc.edu>.\n#\n# The authors may be contacted via:\n#\n# Jur van den Berg, Stephen J. Guy, Jamie Snape, Ming C. Lin, Dinesh Manocha\n# Dept. of Computer Science\n# 201 S. Columbia St.\n# Frederick P. Brooks, Jr. Computer Science Bldg.\n# Chapel Hill, N.C. 27599-3175\n# United States of America\n#\n# <https://gamma.cs.unc.edu/RVO2/>\n#\n\nadd_library(${RVO3D_LIBRARY})\n\ninclude(GenerateExportHeader)\n\ngenerate_export_header(${RVO3D_LIBRARY}\n  EXPORT_FILE_NAME Export.h)\n\ntarget_sources(${RVO3D_LIBRARY}\n  PUBLIC\n    FILE_SET HEADERS\n    BASE_DIRS\n      \"${CMAKE_CURRENT_BINARY_DIR}\"\n      \"${CMAKE_CURRENT_SOURCE_DIR}\"\n    FILES\n      \"${CMAKE_CURRENT_BINARY_DIR}/Export.h\"\n      Plane.h\n      RVO.h\n      RVOSimulator.h\n      Vector3.h\n    PRIVATE\n      Agent.cc\n      Agent.h\n      KdTree.cc\n      KdTree.h\n      Plane.cc\n      RVOSimulator.cc\n      Vector3.cc)\n\nset_target_properties(${RVO3D_LIBRARY} PROPERTIES\n  CXX_VISIBILITY_PRESET hidden\n  SOVERSION ${PROJECT_VERSION_MAJOR}\n  VERSION ${PROJECT_VERSION}\n  VISIBILITY_INLINES_HIDDEN ON)\n\nif(ENABLE_INTERPROCEDURAL_OPTIMIZATION\n    AND RVO3D_INTERPROCEDURAL_OPTIMIZATION_SUPPORTED)\n  set_target_properties(${RVO3D_LIBRARY} PROPERTIES\n    INTERPROCEDURAL_OPTIMIZATION ON)\nendif()\n\nif(CMAKE_VERSION VERSION_GREATER_EQUAL 4.1)\n  set_target_properties(${RVO3D_LIBRARY} PROPERTIES\n    SPDX_LICENSE Apache-2.0)\nendif()\n\nif(WIN32)\n  target_compile_definitions(${RVO3D_LIBRARY} PUBLIC NOMINMAX)\nendif()\n\nif(ENABLE_OPENMP AND OpenMP_FOUND)\n  target_link_libraries(${RVO3D_LIBRARY} PRIVATE OpenMP::OpenMP_CXX)\nendif()\n\nadd_library(${PROJECT_NAME}::${RVO3D_LIBRARY} ALIAS ${RVO3D_LIBRARY})\n\nexport(TARGETS ${RVO3D_LIBRARY} NAMESPACE ${PROJECT_NAME}::\n  FILE \"${PROJECT_BINARY_DIR}/${PROJECT_NAME}Targets.cmake\")\n\nif(ENABLE_INSTALLATION)\n  install(TARGETS ${RVO3D_LIBRARY}\n    EXPORT ${PROJECT_NAME}Targets\n    ARCHIVE\n      COMPONENT development\n    FILE_SET HEADERS\n      COMPONENT development\n      DESTINATION ${RVO3D_INCLUDE_DIR}\n    LIBRARY\n      COMPONENT runtime\n      NAMELINK_COMPONENT development\n    RUNTIME\n      COMPONENT runtime\n    INCLUDES DESTINATION ${RVO3D_INCLUDE_DIR})\n\n  install(EXPORT ${PROJECT_NAME}Targets\n    COMPONENT development\n    DESTINATION ${RVO3D_DIR}\n    NAMESPACE ${PROJECT_NAME}::)\n\n  if(CMAKE_VERSION VERSION_GREATER_EQUAL 4.3)\n    install(PACKAGE_INFO ${RVO3D_LIBRARY}\n      EXPORT ${PROJECT_NAME}Targets\n      COMPONENT development\n      VERSION ${PROJECT_VERSION}\n      COMPAT_VERSION ${PROJECT_VERSION_MAJOR}\n      VERSION_SCHEMA simple\n      DEFAULT_TARGETS ${RVO3D_LIBRARY}\n      LICENSE Apache-2.0)\n\n    export(PACKAGE_INFO ${RVO3D_LIBRARY}\n      EXPORT ${PROJECT_NAME}Targets\n      VERSION ${PROJECT_VERSION}\n      COMPAT_VERSION ${PROJECT_VERSION_MAJOR}\n      VERSION_SCHEMA simple\n      DEFAULT_TARGETS ${RVO3D_LIBRARY}\n      LICENSE Apache-2.0)\n\n    if(ENABLE_CMAKE_EXPERIMENTAL_FEATURES)\n      set(CMAKE_EXPERIMENTAL_GENERATE_SBOM\n        ca494ed3-b261-4205-a01f-603c95e4cae0)\n\n      install(SBOM ${RVO3D_LIBRARY}\n        EXPORT ${PROJECT_NAME}Targets\n        COMPONENT development\n        LICENSE Apache-2.0)\n\n      export(SBOM ${RVO3D_LIBRARY}\n        EXPORT ${PROJECT_NAME}Targets\n        LICENSE Apache-2.0)\n    endif()\n  endif()\nendif()\n"
  },
  {
    "path": "src/KdTree.cc",
    "content": "/*\n * KdTree.cc\n * RVO2-3D Library\n *\n * SPDX-FileCopyrightText: 2008 University of North Carolina at Chapel Hill\n * SPDX-License-Identifier: Apache-2.0\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 *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\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 * Please send all bug reports to <geom@cs.unc.edu>.\n *\n * The authors may be contacted via:\n *\n * Jur van den Berg, Stephen J. Guy, Jamie Snape, Ming C. Lin, Dinesh Manocha\n * Dept. of Computer Science\n * 201 S. Columbia St.\n * Frederick P. Brooks, Jr. Computer Science Bldg.\n * Chapel Hill, N.C. 27599-3175\n * United States of America\n *\n * <https://gamma.cs.unc.edu/RVO2/>\n */\n\n#include \"KdTree.h\"\n\n#include <algorithm>\n#include <utility>\n\n#include \"Agent.h\"\n#include \"RVOSimulator.h\"\n#include \"Vector3.h\"\n\nnamespace RVO {\nnamespace {\n/**\n * @brief The maximum size of a k-D leaf node.\n */\nconst std::size_t RVO3D_MAX_LEAF_SIZE = 10U;\n} /* namespace */\n\n/**\n * @brief Defines an agent k-D tree node.\n */\nclass KdTree::AgentTreeNode {\n public:\n  /**\n   * @brief Constructs an agent k-D tree node.\n   */\n  AgentTreeNode();\n\n  /**\n   * @brief The beginning node number.\n   */\n  std::size_t begin;\n\n  /**\n   * @brief The ending node number.\n   */\n  std::size_t end;\n\n  /**\n   * @brief The left node number.\n   */\n  std::size_t left;\n\n  /**\n   * @brief The right node number.\n   */\n  std::size_t right;\n\n  /**\n   * @brief The maximum coordinates.\n   */\n  Vector3 maxCoord;\n\n  /**\n   * @brief The minimum coordinates.\n   */\n  Vector3 minCoord;\n};\n\nKdTree::AgentTreeNode::AgentTreeNode()\n    : begin(0U), end(0U), left(0U), right(0U) {}\n\nKdTree::KdTree(RVOSimulator *sim) : sim_(sim) {}\n\nKdTree::~KdTree() {}\n\nvoid KdTree::buildAgentTree() {\n  agents_ = sim_->agents_;\n\n  if (!agents_.empty()) {\n    agentTree_.resize(2U * agents_.size() - 1U);\n    buildAgentTreeRecursive(0U, agents_.size(), 0U);\n  }\n}\n\nvoid KdTree::buildAgentTreeRecursive(std::size_t begin, std::size_t end,\n                                     std::size_t node) {\n  agentTree_[node].begin = begin;\n  agentTree_[node].end = end;\n  agentTree_[node].minCoord = agents_[begin]->position_;\n  agentTree_[node].maxCoord = agents_[begin]->position_;\n\n  for (std::size_t i = begin + 1U; i < end; ++i) {\n    agentTree_[node].maxCoord[0] =\n        std::max(agentTree_[node].maxCoord[0], agents_[i]->position_.x());\n    agentTree_[node].minCoord[0] =\n        std::min(agentTree_[node].minCoord[0], agents_[i]->position_.x());\n    agentTree_[node].maxCoord[1] =\n        std::max(agentTree_[node].maxCoord[1], agents_[i]->position_.y());\n    agentTree_[node].minCoord[1] =\n        std::min(agentTree_[node].minCoord[1], agents_[i]->position_.y());\n    agentTree_[node].maxCoord[2] =\n        std::max(agentTree_[node].maxCoord[2], agents_[i]->position_.z());\n    agentTree_[node].minCoord[2] =\n        std::min(agentTree_[node].minCoord[2], agents_[i]->position_.z());\n  }\n\n  if (end - begin > RVO3D_MAX_LEAF_SIZE) {\n    /* No leaf node. */\n    std::size_t coord = 0U;\n\n    if (agentTree_[node].maxCoord[0] - agentTree_[node].minCoord[0] >\n            agentTree_[node].maxCoord[1] - agentTree_[node].minCoord[1] &&\n        agentTree_[node].maxCoord[0] - agentTree_[node].minCoord[0] >\n            agentTree_[node].maxCoord[2] - agentTree_[node].minCoord[2]) {\n      coord = 0U;\n    } else if (agentTree_[node].maxCoord[1] - agentTree_[node].minCoord[1] >\n               agentTree_[node].maxCoord[2] - agentTree_[node].minCoord[2]) {\n      coord = 1U;\n    } else {\n      coord = 2U;\n    }\n\n    const float splitValue = 0.5F * (agentTree_[node].maxCoord[coord] +\n                                     agentTree_[node].minCoord[coord]);\n\n    std::size_t left = begin;\n\n    std::size_t right = end;\n\n    while (left < right) {\n      while (left < right && agents_[left]->position_[coord] < splitValue) {\n        ++left;\n      }\n\n      while (right > left &&\n             agents_[right - 1U]->position_[coord] >= splitValue) {\n        --right;\n      }\n\n      if (left < right) {\n        std::swap(agents_[left], agents_[right - 1U]);\n        ++left;\n        --right;\n      }\n    }\n\n    std::size_t leftSize = left - begin;\n\n    if (leftSize == 0U) {\n      ++leftSize;\n      ++left;\n    }\n\n    agentTree_[node].left = node + 1U;\n    agentTree_[node].right = node + 2U * leftSize;\n\n    buildAgentTreeRecursive(begin, left, agentTree_[node].left);\n    buildAgentTreeRecursive(left, end, agentTree_[node].right);\n  }\n}\n\nvoid KdTree::computeAgentNeighbors(Agent *agent, float rangeSq) const {\n  queryAgentTreeRecursive(agent, rangeSq, 0U);\n}\n\nvoid KdTree::queryAgentTreeRecursive(Agent *agent, float &rangeSq,\n                                     std::size_t node) const {\n  if (agentTree_[node].end - agentTree_[node].begin <= RVO3D_MAX_LEAF_SIZE) {\n    for (std::size_t i = agentTree_[node].begin; i < agentTree_[node].end;\n         ++i) {\n      agent->insertAgentNeighbor(agents_[i], rangeSq);\n    }\n  } else {\n    const float distSqLeftMinX =\n        std::max(0.0F, agentTree_[agentTree_[node].left].minCoord[0] -\n                           agent->position_.x());\n    const float distSqLeftMaxX =\n        std::max(0.0F, agent->position_.x() -\n                           agentTree_[agentTree_[node].left].maxCoord[0]);\n    const float distSqLeftMinY =\n        std::max(0.0F, agentTree_[agentTree_[node].left].minCoord[1] -\n                           agent->position_.y());\n    const float distSqLeftMaxY =\n        std::max(0.0F, agent->position_.y() -\n                           agentTree_[agentTree_[node].left].maxCoord[1]);\n    const float distSqLeftMinZ =\n        std::max(0.0F, agentTree_[agentTree_[node].left].minCoord[2] -\n                           agent->position_.z());\n    const float distSqLeftMaxZ =\n        std::max(0.0F, agent->position_.z() -\n                           agentTree_[agentTree_[node].left].maxCoord[2]);\n\n    const float distSqLeft =\n        distSqLeftMinX * distSqLeftMinX + distSqLeftMaxX * distSqLeftMaxX +\n        distSqLeftMinY * distSqLeftMinY + distSqLeftMaxY * distSqLeftMaxY +\n        distSqLeftMinZ * distSqLeftMinZ + distSqLeftMaxZ * distSqLeftMaxZ;\n\n    const float distSqRightMinX =\n        std::max(0.0F, agentTree_[agentTree_[node].right].minCoord[0] -\n                           agent->position_.x());\n    const float distSqRightMaxX =\n        std::max(0.0F, agent->position_.x() -\n                           agentTree_[agentTree_[node].right].maxCoord[0]);\n    const float distSqRightMinY =\n        std::max(0.0F, agentTree_[agentTree_[node].right].minCoord[1] -\n                           agent->position_.y());\n    const float distSqRightMaxY =\n        std::max(0.0F, agent->position_.y() -\n                           agentTree_[agentTree_[node].right].maxCoord[1]);\n    const float distSqRightMinZ =\n        std::max(0.0F, agentTree_[agentTree_[node].right].minCoord[2] -\n                           agent->position_.z());\n    const float distSqRightMaxZ =\n        std::max(0.0F, agent->position_.z() -\n                           agentTree_[agentTree_[node].right].maxCoord[2]);\n\n    const float distSqRight =\n        distSqRightMinX * distSqRightMinX + distSqRightMaxX * distSqRightMaxX +\n        distSqRightMinY * distSqRightMinY + distSqRightMaxY * distSqRightMaxY +\n        distSqRightMinZ * distSqRightMinZ + distSqRightMaxZ * distSqRightMaxZ;\n\n    if (distSqLeft < distSqRight) {\n      if (distSqLeft < rangeSq) {\n        queryAgentTreeRecursive(agent, rangeSq, agentTree_[node].left);\n\n        if (distSqRight < rangeSq) {\n          queryAgentTreeRecursive(agent, rangeSq, agentTree_[node].right);\n        }\n      }\n    } else {\n      if (distSqRight < rangeSq) {\n        queryAgentTreeRecursive(agent, rangeSq, agentTree_[node].right);\n\n        if (distSqLeft < rangeSq) {\n          queryAgentTreeRecursive(agent, rangeSq, agentTree_[node].left);\n        }\n      }\n    }\n  }\n}\n} /* namespace RVO */\n"
  },
  {
    "path": "src/KdTree.h",
    "content": "/*\n * KdTree.h\n * RVO2-3D Library\n *\n * SPDX-FileCopyrightText: 2008 University of North Carolina at Chapel Hill\n * SPDX-License-Identifier: Apache-2.0\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 *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\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 * Please send all bug reports to <geom@cs.unc.edu>.\n *\n * The authors may be contacted via:\n *\n * Jur van den Berg, Stephen J. Guy, Jamie Snape, Ming C. Lin, Dinesh Manocha\n * Dept. of Computer Science\n * 201 S. Columbia St.\n * Frederick P. Brooks, Jr. Computer Science Bldg.\n * Chapel Hill, N.C. 27599-3175\n * United States of America\n *\n * <https://gamma.cs.unc.edu/RVO2/>\n */\n\n#ifndef RVO3D_KD_TREE_H_\n#define RVO3D_KD_TREE_H_\n\n/**\n * @file  KdTree.h\n * @brief Contains the KdTree class.\n */\n\n#include <cstddef>\n#include <vector>\n\nnamespace RVO {\nclass Agent;\nclass RVOSimulator;\n\n/**\n * @brief Defines a k-D tree for agents in the simulation.\n */\nclass KdTree {\n private:\n  class AgentTreeNode;\n\n  /**\n   * @brief     Constructs a k-D tree instance.\n   * @param[in] sim The simulator instance.\n   */\n  explicit KdTree(RVOSimulator *sim);\n\n  /**\n   * @brief Destroys this k-D tree instance.\n   */\n  ~KdTree();\n\n  /**\n   * @brief Builds an agent k-D tree.\n   */\n  void buildAgentTree();\n\n  /**\n   * @brief     Recursive function to build a k-D tree.\n   * @param[in] begin The beginning k-D tree node.\n   * @param[in] end   The ending k-D tree node.\n   * @param[in] node  The current k-D tree node.\n   */\n  void buildAgentTreeRecursive(std::size_t begin, std::size_t end,\n                               std::size_t node);\n\n  /**\n   * @brief     Computes the agent neighbors of the specified agent.\n   * @param[in] agent   A pointer to the agent for which agent neighbors are to\n   *                    be computed.\n   * @param[in] rangeSq The squared range around the agent.\n   */\n  void computeAgentNeighbors(Agent *agent, float rangeSq) const;\n\n  /**\n   * @brief         Recursive function to compute the neighbors of the specified\n   *                agent.\n   * @param[in]     agent   A pointer to the agent for which neighbors are to be\n   *                        computed.\n   * @param[in,out] rangeSq The squared range around the agent.\n   * @param[in]     node    The current k-D tree node.\n   */\n\n  void queryAgentTreeRecursive(Agent *agent,\n                               float &rangeSq, /* NOLINT(runtime/references) */\n                               std::size_t node) const;\n\n  /* Not implemented. */\n  KdTree(const KdTree &other);\n\n  /* Not implemented. */\n  KdTree &operator=(const KdTree &other);\n\n  std::vector<Agent *> agents_;\n  std::vector<AgentTreeNode> agentTree_;\n  RVOSimulator *sim_;\n\n  friend class Agent;\n  friend class RVOSimulator;\n};\n} /* namespace RVO */\n\n#endif /* RVO3D_KD_TREE_H_ */\n"
  },
  {
    "path": "src/Plane.cc",
    "content": "/*\n * Plane.cc\n * RVO2-3D Library\n *\n * SPDX-FileCopyrightText: 2008 University of North Carolina at Chapel Hill\n * SPDX-License-Identifier: Apache-2.0\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 *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\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 * Please send all bug reports to <geom@cs.unc.edu>.\n *\n * The authors may be contacted via:\n *\n * Jur van den Berg, Stephen J. Guy, Jamie Snape, Ming C. Lin, Dinesh Manocha\n * Dept. of Computer Science\n * 201 S. Columbia St.\n * Frederick P. Brooks, Jr. Computer Science Bldg.\n * Chapel Hill, N.C. 27599-3175\n * United States of America\n *\n * <https://gamma.cs.unc.edu/RVO2/>\n */\n\n#include \"Plane.h\"\n\nnamespace RVO {\nPlane::Plane() {}\n} /* namespace RVO */\n"
  },
  {
    "path": "src/Plane.h",
    "content": "/*\n * Plane.h\n * RVO2-3D Library\n *\n * SPDX-FileCopyrightText: 2008 University of North Carolina at Chapel Hill\n * SPDX-License-Identifier: Apache-2.0\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 *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\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 * Please send all bug reports to <geom@cs.unc.edu>.\n *\n * The authors may be contacted via:\n *\n * Jur van den Berg, Stephen J. Guy, Jamie Snape, Ming C. Lin, Dinesh Manocha\n * Dept. of Computer Science\n * 201 S. Columbia St.\n * Frederick P. Brooks, Jr. Computer Science Bldg.\n * Chapel Hill, N.C. 27599-3175\n * United States of America\n *\n * <https://gamma.cs.unc.edu/RVO2/>\n */\n\n#ifndef RVO3D_PLANE_H_\n#define RVO3D_PLANE_H_\n\n/**\n * @file  Plane.h\n * @brief Contains the Plane class.\n */\n\n#include \"Export.h\"\n#include \"Vector3.h\"\n\nnamespace RVO {\n/**\n * @brief Defines a plane.\n */\nclass RVO3D_EXPORT Plane {\n public:\n  /**\n   * @brief Constructs a plane.\n   */\n  Plane();\n\n  /**\n   * @brief A point on the plane.\n   */\n  Vector3 point;\n\n  /**\n   * @brief The normal to the plane.\n   */\n  Vector3 normal;\n};\n} /* namespace RVO */\n\n#endif /* RVO3D_PLANE_H_ */\n"
  },
  {
    "path": "src/RVO.h",
    "content": "/*\n * RVO.h\n * RVO2-3D Library\n *\n * SPDX-FileCopyrightText: 2008 University of North Carolina at Chapel Hill\n * SPDX-License-Identifier: Apache-2.0\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 *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\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 * Please send all bug reports to <geom@cs.unc.edu>.\n *\n * The authors may be contacted via:\n *\n * Jur van den Berg, Stephen J. Guy, Jamie Snape, Ming C. Lin, Dinesh Manocha\n * Dept. of Computer Science\n * 201 S. Columbia St.\n * Frederick P. Brooks, Jr. Computer Science Bldg.\n * Chapel Hill, N.C. 27599-3175\n * United States of America\n *\n * <https://gamma.cs.unc.edu/RVO2/>\n */\n\n#ifndef RVO3D_RVO_H_\n#define RVO3D_RVO_H_\n\n/* IWYU pragma: begin_exports */\n#include \"Export.h\"\n#include \"Plane.h\"\n#include \"RVOSimulator.h\"\n#include \"Vector3.h\"\n/* IWYU pragma: end_exports */\n\n/**\n\n@file  RVO.h\n@brief Includes all public headers in the library.\n\n@namespace RVO\n@brief     Contains all classes, functions, and constants used in the library.\n\n@mainpage  RVO2-3D Library\n@author    Jur van den Berg\n@author    Stephen J. Guy\n@author    Jamie Snape\n@author    Ming C. Lin\n@author    Dinesh Manocha\n@copyright 2008 University of North Carolina at Chapel Hill\n\n<b>RVO2-3D Library</b> is an easy-to-use C++ implementation of the <a\nhref=\"https://gamma.cs.unc.edu/CA/\">Optimal Reciprocal Collision Avoidance</a>\n(ORCA) formulation for multi-agent simulation in three dimensions. <b>RVO2-3D\nLibrary</b> automatically uses parallelism for computing the motion of the\nagents if your machine has multiple processors and your compiler supports <a\nhref=\"http://www.openmp.org/\">OpenMP</a>.\n\nPlease follow the following steps to install and use <b>RVO2-3D Library</b>.\n\n@li @subpage whatsnew\n@li @subpage building\n@li @subpage using\n@li @subpage params\n\nSee the documentation of the RVO::RVOSimulator class for an exhaustive list of\npublic functions of <b>RVO2-3D Library</b>.\n\n<b>RVO2-3D Library</b>, accompanying example code, and this documentation is\nreleased under the following @subpage terms \"terms and conditions\".\n\n@page whatsnew What Is New in RVO2-3D Library\n\n@section localca Three Dimensions\n\nIn contrast to RVO2 Library, <b>RVO2-3D Library</b> operates in\nthree-dimensional workspaces. It uses a three-dimensional implementation of <a\nhref=\"https://gamma.cs.unc.edu/CA/\">Optimal Reciprocal Collision Avoidance</a>\n(ORCA) for local collision avoidance. <b>RVO2-3D Library</b> does not replace\nRVO2 Library; for two-dimensional applications, RVO2 Library should be used.\n\n@section structure Structure of RVO2-3D Library\n\nThe structure of <b>RVO2-3D Library</b> is similar to that of RVO2 Library.\nUsers familiar with RVO2 Library should find little trouble in using <b>RVO2-3D\nLibrary</b>. <b>RVO2-3D Library</b> currently does not support static obstacles.\n\n@page building Building RVO2-3D Library\n\nWe assume that you have downloaded <b>RVO2-3D Library</b> and unpacked the ZIP\narchive to a path <tt>$RVO3D_ROOT</tt>.\n\n@section cmake CMake\n\nCreate and switch to your chosen build directory, e.g.,\n<tt>$RVO3D_ROOT/build</tt>. Run <tt>cmake</tt> inside the build directory on the\nsource directory, e.g., <tt>cmake $RVO3D_ROOT/src</tt>. Build files for the\ndefault generator for your platform will be generated in the build directory.\n\n@page using Using RVO2-3D Library\n\n@section structure Structure\n\nA program performing an <b>RVO2-3D Library</b> simulation has the following\nglobal structure.\n\n@code{.cpp}\n#include <RVO.h>\n\n#include <vector>\n\nint main() {\n  // Create a new simulator instance.\n  RVO::RVOSimulator *sim = new RVO::RVOSimulator();\n\n  // Store the goals of the agents.\n  std::vector<RVO::Vector3> goals;\n\n  // Set up the scenario.\n  setupScenario(sim, goals);\n\n  // Perform (and manipulate) the simulation.\n  do {\n    updateVisualization(sim);\n    setPreferredVelocities(sim, goals);\n    sim->doStep();\n  } while (!reachedGoal(sim, goals));\n\n  delete sim;\n\n  return 0;\n}\n@endcode\n\nIn order to use <b>RVO2-3D Library</b>, the user needs to include RVO.h. The\nfirst step is then to create an instance of RVO::RVOSimulator. Then, the process\nconsists of two stages. The first stage is specifying the simulation scenario\nand its parameters. In the above example program, this is done in the method\n<tt>setupScenario(...)</tt>, which we will discuss below. The second stage is\nthe actual performing of the simulation.\n\nIn the above example program, simulation steps are taken until all the agents\nhave reached some predefined goals. Prior to each simulation step, we set the\npreferred velocity for each agent, i.e., the velocity the agent would have taken\nif there were no other agents around, in the method\n<tt>setPreferredVelocities(...)</tt>. The simulator computes the actual\nvelocities of the agents and attempts to follow the preferred velocities as\nclosely as possible while guaranteeing collision avoidance at the same time.\nDuring the simulation, the user may want to retrieve information from the\nsimulation for instance to visualize the simulation. In the above example\nprogram, this is done in the method <tt>updateVisualization(...)</tt>, which we\nwill discuss below. It is also possible to manipulate the simulation during the\nsimulation, for instance by changing positions, radii, velocities, etc. of the\nagents.\n\n@section spec Setting up the Simulation Scenario\n\nA scenario that is to be simulated can be set up as follows. A scenario consists\nof a set of agents that can be manually specified. Agents may be added anytime\nbefore or during the simulation. The user may also want to define goal positions\nof the agents, or a roadmap to guide the agents around obstacles. This is not\ndone in <b>RVO2-3D Library</b>, but needs to be taken care of in the user's\nexternal application.\n\nThe following example creates a scenario with eight agents exchanging positions.\n\n@code{.cpp}\nvoid setupScenario(RVO::RVOSimulator *sim, std::vector<RVO::Vector3> &goals) {\n  // Specify global time step of the simulation.\n  sim->setTimeStep(0.25F);\n\n  // Specify default parameters for agents that are subsequently added.\n  sim->setAgentDefaults(15.0F, 10U, 10.0F, 2.0F, 2.0F);\n\n  // Add agents, specifying their start position.\n  sim->addAgent(RVO::Vector3(-50.0F, -50.0F, -50.0F));\n  sim->addAgent(RVO::Vector3(50.0F, -50.0F, -50.0F));\n  sim->addAgent(RVO::Vector3(50.0F, 50.0F, -50.0F));\n  sim->addAgent(RVO::Vector3(-50.0F, 50.0F, -50.0F));\n  sim->addAgent(RVO::Vector3(-50.0F, -50.0F, 50.0F));\n  sim->addAgent(RVO::Vector3(50.0F, -50.0F, 50.0F));\n  sim->addAgent(RVO::Vector3(50.0F, 50.0F, 50.0F));\n  sim->addAgent(RVO::Vector3(-50.0F, 50.0F, 50.0F));\n\n  // Create goals (simulator is unaware of these).\n  for (std::size_t i = 0U; i < sim->getNumAgents(); ++i) {\n    goals.push_back(-sim->getAgentPosition(i));\n  }\n}\n@endcode\n\nSee the documentation on RVO::RVOSimulator for a full overview of the\nfunctionality to specify scenarios.\n\n@section ret Retrieving Information from the Simulation\n\nDuring the simulation, the user can extract information from the simulation for\ninstance for visualization purposes, or to determine termination conditions of\nthe simulation. In the example program above, visualization is done in the\n<tt>updateVisualization(...)</tt> method. Below we give an example that simply\nwrites the positions of each agent in each time step to the standard output. The\ntermination condition is checked in the <tt>reachedGoal(...)</tt> method. Here\nwe give an example that returns true if all agents are within one radius of\ntheir goals.\n\n@code{.cpp}\n#include <iostream>\n\nvoid updateVisualization(RVO::RVOSimulator *sim) {\n  // Output the current global time.\n  std::cout << sim->getGlobalTime() << \" \";\n\n  // Output the position for all the agents.\n  for (std::size_t i = 0U; i < sim->getNumAgents(); ++i) {\n    std::cout << sim->getAgentPosition(i) << \" \";\n  }\n\n  std::cout << std::endl;\n}\n@endcode\n\n@code{.cpp}\nbool reachedGoal(RVO::RVOSimulator *sim,\n                 const std::vector<RVO::Vector3> &goals) {\n  // Check whether all agents have arrived at their goals.\n  for (std::size_t i = 0U; i < sim->getNumAgents(); ++i) {\n    if (absSq(goals[i] - sim->getAgentPosition(i)) > sim->getAgentRadius(i) *\n        sim->getAgentRadius(i)) {\n      // Agent is further away from its goal than one radius.\n      return false;\n    }\n  }\n\n  return true;\n}\n@endcode\n\nUsing similar functions as the ones used in this example, the user can access\ninformation about other parameters of the agents, as well as the global\nparameters, and the obstacles. See the documentation of the class\nRVO::RVOSimulator for an exhaustive list of public functions for retrieving\nsimulation information.\n\n@section manip Manipulating the Simulation\n\nDuring the simulation, the user can manipulate the simulation, for instance by\nchanging the global parameters, or changing the parameters of the agents\n(potentially causing abrupt different behavior). It is also possible to give the\nagents a new position, which make them jump through the scene. New agents can be\nadded to the simulation at any time.\n\nSee the documentation of the class RVO::RVOSimulator for an exhaustive list of\npublic functions for manipulating the simulation.\n\nTo provide global guidance to the agents, the preferred velocities of the agents\ncan be changed ahead of each simulation step. In the above example program, this\nhappens in the method <tt>setPreferredVelocities(...)</tt>. Here we give an\nexample that simply sets the preferred velocity to the unit vector towards the\nagent's goal for each agent (i.e., the preferred speed is <tt>1.0</tt>).\n\n@code{.cpp}\nvoid setPreferredVelocities(RVO::RVOSimulator *sim,\n                            const std::vector<RVO::Vector3> &goals) {\n  // Set the preferred velocity for each agent.\n  for (std::size_t i = 0U; i < sim->getNumAgents(); ++i) {\n    if (absSq(goals[i] - sim->getAgentPosition(i)) < sim->getAgentRadius(i) *\n        sim->getAgentRadius(i) ) {\n      // Agent is within one radius of its goal, set preferred velocity to zero.\n      sim->setAgentPrefVelocity(i, RVO::Vector3());\n    } else {\n      // Agent is far away from its goal, set preferred velocity as unit vector\n      // towards agent's goal.\n      sim->setAgentPrefVelocity(i, normalize(goals[i] -\n      sim->getAgentPosition(i)));\n    }\n  }\n}\n@endcode\n\n@section example Example Program\n\n<b>RVO2-3D Library</b> is accompanied by one example program, which can be found\nin the <tt>$RVO3D_ROOT/examples</tt> directory. The example is named Sphere, and\ncontains the following demonstration scenario:\n\n<table border=\"0\" cellpadding=\"3\" width=\"100%\">\n<tr>\n<td valign=\"top\" width=\"100\"><b>Sphere</b></td>\n<td valign=\"top\">A scenario in which 812 agents, initially positioned evenly\ndistributed on a sphere, move to the antipodal position on the sphere.</td>\n</tr>\n</table>\n\n@page params Parameter Overview\n\n@section globalp Global Parameters\n\n<table border=\"0\" cellpadding=\"3\" width=\"100%\">\n<tr>\n<td valign=\"top\" width=\"150\"><strong>Parameter</strong></td>\n<td valign=\"top\" width=\"150\"><strong>Type (unit)</strong></td>\n<td valign=\"top\"><strong>Meaning</strong></td>\n</tr>\n<tr>\n<td valign=\"top\">timeStep</td>\n<td valign=\"top\">float (time)</td>\n<td valign=\"top\">The time step of the simulation. Must be positive.</td>\n</tr>\n</table>\n\n@section agent Agent Parameters\n\n<table border=\"0\" cellpadding=\"3\" width=\"100%\">\n<tr>\n<td valign=\"top\" width=\"150\"><strong>Parameter</strong></td>\n<td valign=\"top\" width=\"150\"><strong>Type (unit)</strong></td>\n<td valign=\"top\"><strong>Meaning</strong></td>\n</tr>\n<tr>\n<td valign=\"top\">maxNeighbors</td>\n<td valign=\"top\">std::size_t</td>\n<td valign=\"top\">The maximum number of other agents the agent takes into account\nin the navigation. The larger this number, the longer the running time of the\nsimulation. If the number is too low, the simulation will not be safe.</td>\n</tr>\n<tr>\n<td valign=\"top\">maxSpeed</td>\n<td valign=\"top\">float (distance/time)</td>\n<td valign=\"top\">The maximum speed of the agent. Must be non-negative.</td>\n</tr>\n<tr>\n<td valign=\"top\">neighborDist</td>\n<td valign=\"top\">float (distance)</td>\n<td valign=\"top\">The maximum distance (center point to center point) to other\nagents the agent takes into account in the navigation. The larger this number,\nthe longer the running time of the simulation. If the number is too low, the\nsimulation will not be safe. Must be non-negative.</td>\n</tr>\n<tr>\n<td valign=\"top\" width=\"150\">position</td>\n<td valign=\"top\" width=\"150\">RVO::Vector3 (distance, distance)</td>\n<td valign=\"top\">The current position of the agent.</td>\n</tr>\n<tr>\n<td valign=\"top\" width=\"150\">prefVelocity</td>\n<td valign=\"top\" width=\"150\">RVO::Vector3 (distance/time, distance/time)\n</td>\n<td valign=\"top\">The current preferred velocity of the agent. This is the\nvelocity the agent would take if no other agents or obstacles were around. The\nsimulator computes an actual velocity for the agent that follows the preferred\nvelocity as closely as possible, but at the same time guarantees collision\navoidance.</td>\n</tr>\n<tr>\n<td valign=\"top\">radius</td>\n<td valign=\"top\">float (distance)</td>\n<td valign=\"top\">The radius of the agent. Must be non-negative.</td>\n</tr>\n<tr>\n<td valign=\"top\" width=\"150\">timeHorizon</td>\n<td valign=\"top\" width=\"150\">float (time)</td>\n<td valign=\"top\">The minimum amount of time for which the agent's velocities\nthat are computed by the simulation are safe with respect to other agents. The\nlarger this number, the sooner this agent will respond to the presence of other\nagents, but the less freedom the agent has in choosing its velocities. Must be\npositive.</td>\n</tr>\n<tr>\n<td valign=\"top\" width=\"150\">velocity</td>\n<td valign=\"top\" width=\"150\">RVO::Vector3 (distance/time, distance/time)</td>\n<td valign=\"top\">The (current) velocity of the agent.</td>\n</tr>\n</table>\n\n@page terms Terms and Conditions\n\n<b>RVO2-3D Library</b>\n\nCopyright 2008 University of North Carolina at Chapel Hill\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    https://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n\n */\n\n#endif /* RVO3D_RVO_H_ */\n"
  },
  {
    "path": "src/RVOSimulator.cc",
    "content": "/*\n * RVOSimulator.cc\n * RVO2-3D Library\n *\n * SPDX-FileCopyrightText: 2008 University of North Carolina at Chapel Hill\n * SPDX-License-Identifier: Apache-2.0\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 *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\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 * Please send all bug reports to <geom@cs.unc.edu>.\n *\n * The authors may be contacted via:\n *\n * Jur van den Berg, Stephen J. Guy, Jamie Snape, Ming C. Lin, Dinesh Manocha\n * Dept. of Computer Science\n * 201 S. Columbia St.\n * Frederick P. Brooks, Jr. Computer Science Bldg.\n * Chapel Hill, N.C. 27599-3175\n * United States of America\n *\n * <https://gamma.cs.unc.edu/RVO2/>\n */\n\n#include \"RVOSimulator.h\"\n\n#include <utility>\n\n#ifdef _OPENMP\n#include <omp.h>\n#endif /* _OPENMP */\n\n#include \"Agent.h\"\n#include \"KdTree.h\"\n#include \"Plane.h\"\n\nnamespace RVO {\nRVOSimulator::RVOSimulator()\n    : defaultAgent_(NULL),\n      kdTree_(new KdTree(this)),\n      globalTime_(0.0F),\n      timeStep_(0.0F) {}\n\nRVOSimulator::RVOSimulator(float timeStep, float neighborDist,\n                           std::size_t maxNeighbors, float timeHorizon,\n                           float radius, float maxSpeed,\n                           const Vector3 &velocity)\n    : defaultAgent_(new Agent(this)),\n      kdTree_(new KdTree(this)),\n      globalTime_(0.0F),\n      timeStep_(timeStep) {\n  defaultAgent_->maxNeighbors_ = maxNeighbors;\n  defaultAgent_->maxSpeed_ = maxSpeed;\n  defaultAgent_->neighborDist_ = neighborDist;\n  defaultAgent_->radius_ = radius;\n  defaultAgent_->timeHorizon_ = timeHorizon;\n  defaultAgent_->velocity_ = velocity;\n}\n\nRVOSimulator::~RVOSimulator() {\n  delete defaultAgent_;\n  delete kdTree_;\n\n  for (std::size_t i = 0U; i < agents_.size(); ++i) {\n    delete agents_[i];\n  }\n}\n\nstd::size_t RVOSimulator::getAgentNumAgentNeighbors(std::size_t agentNo) const {\n  return agents_[agentNo]->agentNeighbors_.size();\n}\n\nstd::size_t RVOSimulator::getAgentAgentNeighbor(std::size_t agentNo,\n                                                std::size_t neighborNo) const {\n  return agents_[agentNo]->agentNeighbors_[neighborNo].second->id_;\n}\n\nstd::size_t RVOSimulator::getAgentNumORCAPlanes(std::size_t agentNo) const {\n  return agents_[agentNo]->orcaPlanes_.size();\n}\n\nconst Plane &RVOSimulator::getAgentORCAPlane(std::size_t agentNo,\n                                             std::size_t planeNo) const {\n  return agents_[agentNo]->orcaPlanes_[planeNo];\n}\n\nvoid RVOSimulator::removeAgent(std::size_t agentNo) {\n  delete agents_[agentNo];\n  agents_[agentNo] = agents_.back();\n  agents_.pop_back();\n}\n\nstd::size_t RVOSimulator::addAgent(const Vector3 &position) {\n  if (defaultAgent_ == NULL) {\n    return RVO3D_ERROR;\n  }\n\n  Agent *agent = new Agent(this);\n\n  agent->position_ = position;\n  agent->maxNeighbors_ = defaultAgent_->maxNeighbors_;\n  agent->maxSpeed_ = defaultAgent_->maxSpeed_;\n  agent->neighborDist_ = defaultAgent_->neighborDist_;\n  agent->radius_ = defaultAgent_->radius_;\n  agent->timeHorizon_ = defaultAgent_->timeHorizon_;\n  agent->velocity_ = defaultAgent_->velocity_;\n\n  agent->id_ = agents_.size();\n\n  agents_.push_back(agent);\n\n  return agents_.size() - 1U;\n}\n\nstd::size_t RVOSimulator::addAgent(const Vector3 &position, float neighborDist,\n                                   std::size_t maxNeighbors, float timeHorizon,\n                                   float radius, float maxSpeed,\n                                   const Vector3 &velocity) {\n  Agent *agent = new Agent(this);\n\n  agent->position_ = position;\n  agent->maxNeighbors_ = maxNeighbors;\n  agent->maxSpeed_ = maxSpeed;\n  agent->neighborDist_ = neighborDist;\n  agent->radius_ = radius;\n  agent->timeHorizon_ = timeHorizon;\n  agent->velocity_ = velocity;\n\n  agent->id_ = agents_.size();\n\n  agents_.push_back(agent);\n\n  return agents_.size() - 1U;\n}\n\nvoid RVOSimulator::doStep() {\n  kdTree_->buildAgentTree();\n\n#ifdef _OPENMP\n#pragma omp parallel for\n#endif /* _OPENMP */\n  for (int i = 0; i < static_cast<int>(agents_.size()); ++i) {\n    agents_[i]->computeNeighbors();\n    agents_[i]->computeNewVelocity();\n  }\n\n#ifdef _OPENMP\n#pragma omp parallel for\n#endif /* _OPENMP */\n  for (int i = 0; i < static_cast<int>(agents_.size()); ++i) {\n    agents_[i]->update();\n  }\n\n  globalTime_ += timeStep_;\n}\n\nstd::size_t RVOSimulator::getAgentMaxNeighbors(std::size_t agentNo) const {\n  return agents_[agentNo]->maxNeighbors_;\n}\n\nfloat RVOSimulator::getAgentMaxSpeed(std::size_t agentNo) const {\n  return agents_[agentNo]->maxSpeed_;\n}\n\nfloat RVOSimulator::getAgentNeighborDist(std::size_t agentNo) const {\n  return agents_[agentNo]->neighborDist_;\n}\n\nconst Vector3 &RVOSimulator::getAgentPosition(std::size_t agentNo) const {\n  return agents_[agentNo]->position_;\n}\n\nconst Vector3 &RVOSimulator::getAgentPrefVelocity(std::size_t agentNo) const {\n  return agents_[agentNo]->prefVelocity_;\n}\n\nfloat RVOSimulator::getAgentRadius(std::size_t agentNo) const {\n  return agents_[agentNo]->radius_;\n}\n\nfloat RVOSimulator::getAgentTimeHorizon(std::size_t agentNo) const {\n  return agents_[agentNo]->timeHorizon_;\n}\n\nconst Vector3 &RVOSimulator::getAgentVelocity(std::size_t agentNo) const {\n  return agents_[agentNo]->velocity_;\n}\n\nvoid RVOSimulator::setAgentDefaults(float neighborDist,\n                                    std::size_t maxNeighbors, float timeHorizon,\n                                    float radius, float maxSpeed,\n                                    const Vector3 &velocity) {\n  if (defaultAgent_ == NULL) {\n    defaultAgent_ = new Agent(this);\n  }\n\n  defaultAgent_->maxNeighbors_ = maxNeighbors;\n  defaultAgent_->maxSpeed_ = maxSpeed;\n  defaultAgent_->neighborDist_ = neighborDist;\n  defaultAgent_->radius_ = radius;\n  defaultAgent_->timeHorizon_ = timeHorizon;\n  defaultAgent_->velocity_ = velocity;\n}\n\nvoid RVOSimulator::setAgentMaxNeighbors(std::size_t agentNo,\n                                        std::size_t maxNeighbors) {\n  agents_[agentNo]->maxNeighbors_ = maxNeighbors;\n}\n\nvoid RVOSimulator::setAgentMaxSpeed(std::size_t agentNo, float maxSpeed) {\n  agents_[agentNo]->maxSpeed_ = maxSpeed;\n}\n\nvoid RVOSimulator::setAgentNeighborDist(std::size_t agentNo,\n                                        float neighborDist) {\n  agents_[agentNo]->neighborDist_ = neighborDist;\n}\n\nvoid RVOSimulator::setAgentPosition(std::size_t agentNo,\n                                    const Vector3 &position) {\n  agents_[agentNo]->position_ = position;\n}\n\nvoid RVOSimulator::setAgentPrefVelocity(std::size_t agentNo,\n                                        const Vector3 &prefVelocity) {\n  agents_[agentNo]->prefVelocity_ = prefVelocity;\n}\n\nvoid RVOSimulator::setAgentRadius(std::size_t agentNo, float radius) {\n  agents_[agentNo]->radius_ = radius;\n}\n\nvoid RVOSimulator::setAgentTimeHorizon(std::size_t agentNo, float timeHorizon) {\n  agents_[agentNo]->timeHorizon_ = timeHorizon;\n}\n\nvoid RVOSimulator::setAgentVelocity(std::size_t agentNo,\n                                    const Vector3 &velocity) {\n  agents_[agentNo]->velocity_ = velocity;\n}\n} /* namespace RVO */\n"
  },
  {
    "path": "src/RVOSimulator.h",
    "content": "/*\n * RVOSimulator.h\n * RVO2-3D Library\n *\n * SPDX-FileCopyrightText: 2008 University of North Carolina at Chapel Hill\n * SPDX-License-Identifier: Apache-2.0\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 *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\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 * Please send all bug reports to <geom@cs.unc.edu>.\n *\n * The authors may be contacted via:\n *\n * Jur van den Berg, Stephen J. Guy, Jamie Snape, Ming C. Lin, Dinesh Manocha\n * Dept. of Computer Science\n * 201 S. Columbia St.\n * Frederick P. Brooks, Jr. Computer Science Bldg.\n * Chapel Hill, N.C. 27599-3175\n * United States of America\n *\n * <https://gamma.cs.unc.edu/RVO2/>\n */\n\n#ifndef RVO3D_RVO_SIMULATOR_H_\n#define RVO3D_RVO_SIMULATOR_H_\n\n/**\n * @file  RVOSimulator.h\n * @brief Contains the RVOSimulator class.\n */\n\n#include <cstddef>\n#include <limits>\n#include <vector>\n\n#include \"Export.h\"\n#include \"Vector3.h\"\n\nnamespace RVO {\nclass Agent;\nclass KdTree;\nclass Plane;\n\n/**\n * @brief Error value. A value equal to the largest unsigned integer, which is\n *        returned in case of an error by functions in RVO::RVOSimulator.\n */\nconst std::size_t RVO3D_ERROR = std::numeric_limits<std::size_t>::max();\n\n/**\n * @brief Defines the simulation. The main class of the library that contains\n *        all simulation functionality.\n */\nclass RVO3D_EXPORT RVOSimulator {\n public:\n  /**\n   * @brief Constructs a simulator instance.\n   */\n  RVOSimulator();\n\n  /**\n   * @brief     Constructs a simulator instance and sets the default properties\n   *            for any new agent that is added.\n   * @param[in] timeStep     The time step of the simulation. Must be positive.\n   * @param[in] neighborDist The default maximum distance (center point to\n   *                         center point) to other agents a new agent takes\n   *                         into account in the navigation. The larger this\n   *                         number, the longer the running time of the\n   *                         simulation. If the number is too low, the\n   *                         simulation will not be safe. Must be non-negative.\n   * @param[in] maxNeighbors The default maximum number of other agents a new\n   *                         agent takes into account in the navigation. The\n   *                         larger this number, the longer the running time of\n   *                         the simulation. If the number is too low, the\n   *                         simulation will not be safe.\n   * @param[in] timeHorizon  The default minimum amount of time for which a new\n   *                         agent's velocities that are computed by the\n   *                         simulation are safe with respect to other agents.\n   *                         The larger this number, the sooner an agent will\n   *                         respond to the presence of other agents, but the\n   *                         less freedom the agent has in choosing its\n   *                         velocities. Must be positive.\n   * @param[in] radius       The default radius of a new agent. Must be\n   *                         non-negative.\n   * @param[in] maxSpeed     The default maximum speed of a new agent. Must be\n   *                         non-negative.\n   * @param[in] velocity     The default initial three-dimensional linear\n   *                         velocity of a new agent (optional).\n   */\n  RVOSimulator(float timeStep, float neighborDist, std::size_t maxNeighbors,\n               float timeHorizon, float radius, float maxSpeed,\n               const Vector3 &velocity = Vector3());\n\n  /**\n   * @brief Destroys this simulator instance.\n   */\n  ~RVOSimulator();\n\n  /**\n   * @brief     Adds a new agent with default properties to the simulation.\n   * @param[in] position The three-dimensional starting position of this agent.\n   * @return    The number of the agent or RVO::RVO3D_ERROR when the agent\n   *            defaults have not been set.\n   */\n  std::size_t addAgent(const Vector3 &position);\n\n  /**\n   * @brief      Adds a new agent to the simulation.\n   * @param[in] position     The three-dimensional starting position of this\n   *                          agent.\n   * @param[in] neighborDist The maximum distance (center point to center\n   *                         point) to other agents this agent takes into\n   *                         account in the navigation. The larger this number,\n   *                         the longer the running time of the simulation. If\n   *                         the number is too low, the simulation will not be\n   *                         safe. Must be non-negative.\n   * @param[in] maxNeighbors The maximum number of other agents this agent takes\n   *                         into account in the navigation. The larger this\n   *                         number, the longer the running time of the\n   *                         simulation. If the number is too low, the\n   *                         simulation will not be safe.\n   * @param[in] timeHorizon  The minimum amount of time for which this agent's\n   *                         velocities that are computed by the simulation are\n   *                         safe with respect to other agents. The larger this\n   *                         number, the sooner this agent will respond to the\n   *                         presence of other agents, but the less freedom this\n   *                         agent has in choosing its velocities. Must be\n   *                         positive.\n   * @param[in] radius       The radius of this agent. Must be non-negative.\n   * @param[in] maxSpeed     The maximum speed of this agent. Must be\n   *                         non-negative.\n   * @param[in] velocity     The initial three-dimensional linear velocity of\n   *                         this agent (optional).\n   * @return    The number of the agent.\n   */\n  std::size_t addAgent(const Vector3 &position, float neighborDist,\n                       std::size_t maxNeighbors, float timeHorizon,\n                       float radius, float maxSpeed,\n                       const Vector3 &velocity = Vector3());\n\n  /**\n   * @brief Lets the simulator perform a simulation step and updates the\n   *        three-dimensional position and three-dimensional velocity of each\n   *        agent.\n   */\n  void doStep();\n\n  /**\n   * @brief     Returns the specified agent neighbor of the specified agent.\n   * @param[in] agentNo    The number of the agent whose agent neighbor is to\n   *                       be retrieved.\n   * @param[in] neighborNo The number of the agent neighbor to be retrieved.\n   * @return    The number of the neighboring agent.\n   */\n  std::size_t getAgentAgentNeighbor(std::size_t agentNo,\n                                    std::size_t neighborNo) const;\n\n  /**\n   * @brief     Returns the maximum neighbor count of a specified agent.\n   * @param[in] agentNo The number of the agent whose maximum neighbor count is\n   *                    to be retrieved.\n   * @return    The present maximum neighbor count of the agent.\n   */\n  std::size_t getAgentMaxNeighbors(std::size_t agentNo) const;\n\n  /**\n   * @brief     Returns the maximum speed of a specified agent.\n   * @param[in] agentNo The number of the agent whose maximum speed is to be\n   *                    retrieved.\n   * @return    The present maximum speed of the agent.\n   */\n  float getAgentMaxSpeed(std::size_t agentNo) const;\n\n  /**\n   * @brief     Returns the maximum neighbor distance of a specified agent.\n   * @param[in] agentNo The number of the agent whose maximum neighbor distance\n   *                    is to be retrieved.\n   * @return    The present maximum neighbor distance of the agent.\n   */\n  float getAgentNeighborDist(std::size_t agentNo) const;\n\n  /**\n   * @brief     Returns the count of agent neighbors taken into account to\n   *            compute the current velocity for the specified agent.\n   * @param[in] agentNo The number of the agent whose count of agent neighbors\n   *                    is to be retrieved.\n   * @return    The count of agent neighbors taken into account to compute the\n   *            current velocity for the specified agent.\n   */\n  std::size_t getAgentNumAgentNeighbors(std::size_t agentNo) const;\n\n  /**\n   * @brief     Returns the count of ORCA constraints used to compute the\n   *            current velocity for the specified agent.\n   * @param[in] agentNo The number of the agent whose count of ORCA constraints\n   *                    i to be retrieved.\n   * @return    The count of ORCA constraints used to compute the current\n   *            velocity for the specified agent.\n   */\n  std::size_t getAgentNumORCAPlanes(std::size_t agentNo) const;\n\n  /**\n   * @brief     Returns the specified ORCA constraint of the specified agent.\n   * @param[in] agentNo The number of the agent whose ORCA constraint is to be\n   *                    retrieved.\n   * @param[in] planeNo The number of the ORCA constraint to be retrieved.\n   * @return    A plane representing the specified ORCA constraint.\n   * @note      The halfspace to which the normal of the plane points is the\n   *            region of permissible velocities with respect to the specified\n   *            ORCA constraint.\n   */\n  const Plane &getAgentORCAPlane(std::size_t agentNo,\n                                 std::size_t planeNo) const;\n\n  /**\n   * @brief     Returns the three-dimensional position of a specified agent.\n   * @param[in] agentNo The number of the agent whose three-dimensional position\n   *                    is to be retrieved.\n   * @return    The present three-dimensional position of the (center of the)\n   *            agent.\n   */\n  const Vector3 &getAgentPosition(std::size_t agentNo) const;\n\n  /**\n   * @brief     Returns the three-dimensional preferred velocity of a specified\n   *            agent.\n   * @param[in] agentNo The number of the agent whose three-dimensional\n   *                    preferred velocity is to be retrieved.\n   * @return    The present three-dimensional preferred velocity of the agent.\n   */\n  const Vector3 &getAgentPrefVelocity(std::size_t agentNo) const;\n\n  /**\n   * @brief     Returns the radius of a specified agent.\n   * @param[in] agentNo The number of the agent whose radius is to be retrieved.\n   * @return    The present radius of the agent.\n   */\n  float getAgentRadius(std::size_t agentNo) const;\n\n  /**\n   * @brief     Returns the time horizon of a specified agent.\n   * @param[in] agentNo The number of the agent whose time horizon is to be\n   *                    retrieved.\n   * @return    The present time horizon of the agent.\n   */\n  float getAgentTimeHorizon(std::size_t agentNo) const;\n\n  /**\n   * @brief     Returns the three-dimensional linear velocity of a specified\n   *            agent.\n   * @param[in] agentNo The number of the agent whose three-dimensional linear\n   *                    velocity is to be retrieved.\n   * @return    The present three-dimensional linear velocity of the agent.\n   */\n  const Vector3 &getAgentVelocity(std::size_t agentNo) const;\n\n  /**\n   * @brief  Returns the global time of the simulation.\n   * @return The present global time of the simulation (zero initially).\n   */\n  float getGlobalTime() const { return globalTime_; }\n  /**\n   * @brief  Returns the count of agents in the simulation.\n   * @return The count of agents in the simulation.\n   */\n  std::size_t getNumAgents() const { return agents_.size(); }\n\n  /**\n   * @brief  Returns the time step of the simulation.\n   * @return The present time step of the simulation.\n   */\n  float getTimeStep() const { return timeStep_; }\n\n  /**\n   * @brief     Removes an agent from the simulation.\n   * @param[in] agentNo The number of the agent that is to be removed.\n   * @note      After the removal of the agent, the agent that previously had\n   *            number getNumAgents() - 1 will now have number agentNo.\n   */\n  void removeAgent(std::size_t agentNo);\n\n  /**\n   * @brief     Sets the default properties for any new agent that is added.\n   * @param[in] neighborDist The default maximum distance (center point to\n   *                         center point) to other agents a new agent takes\n   *                         into account in the navigation. The larger this\n   *                         number, the longer he running time of the\n   *                         simulation. If the number is too low, the\n   *                         simulation will not be safe. Must be non-negative.\n   * @param[in] maxNeighbors The default maximum number of other agents a new\n   *                         agent takes into account in the navigation. The\n   *                         larger this number, the longer the running time of\n   *                         the simulation. If the number is too low, the\n   *                         simulation will not be safe.\n   * @param[in] timeHorizon  The default minimum amount of time for which a new\n   *                         agent's velocities that are computed by the\n   *                         simulation are safe with respect to other agents.\n   *                         The larger this number, the sooner an agent will\n   *                         respond to the presence of other agents, but the\n   *                         less freedom the agent has in choosing its\n   *                         velocities. Must be positive.\n   * @param[in] radius       The default radius of a new agent. Must be\n   *                         non-negative.\n   * @param[in] maxSpeed     The default maximum speed of a new agent. Must be\n   *                         non-negative.\n   * @param[in] velocity     The default initial three-dimensional linear\n   *                         velocity of a new agent (optional).\n   */\n  void setAgentDefaults(float neighborDist, std::size_t maxNeighbors,\n                        float timeHorizon, float radius, float maxSpeed,\n                        const Vector3 &velocity = Vector3());\n\n  /**\n   * @brief     Sets the maximum neighbor count of a specified agent.\n   * @param[in] agentNo      The number of the agent whose maximum neighbor\n   *                         count is to be modified.\n   * @param[in] maxNeighbors The replacement maximum neighbor count.\n   */\n  void setAgentMaxNeighbors(std::size_t agentNo, std::size_t maxNeighbors);\n\n  /**\n   * @brief     Sets the maximum speed of a specified agent.\n   * @param[in] agentNo  The number of the agent whose maximum speed is to be\n   *                     modified.\n   * @param[in] maxSpeed The replacement maximum speed. Must be non-negative.\n   */\n  void setAgentMaxSpeed(std::size_t agentNo, float maxSpeed);\n\n  /**\n   * @brief     Sets the maximum neighbor distance of a specified agent.\n   * @param[in] agentNo      The number of the agent whose maximum neighbor\n   *                         distance is to be modified.\n   * @param[in] neighborDist The replacement maximum neighbor distance. Must be\n   *                         non-negative.\n   */\n  void setAgentNeighborDist(std::size_t agentNo, float neighborDist);\n\n  /**\n   * @brief     Sets the three-dimensional position of a specified agent.\n   * @param[in] agentNo  The number of the agent whose three-dimensional\n   *                     position is to be modified.\n   * @param[in] position The replacement of the three-dimensional position.\n   */\n  void setAgentPosition(std::size_t agentNo, const Vector3 &position);\n\n  /**\n   * @brief     Sets the three-dimensional preferred velocity of a specified\n   *            agent.\n   * @param[in] agentNo      The number of the agent whose three-dimensional\n   *                         preferred velocity is to be modified.\n   * @param[in] prefVelocity The replacement of the three-dimensional preferred\n   *                         velocity.\n   */\n  void setAgentPrefVelocity(std::size_t agentNo, const Vector3 &prefVelocity);\n\n  /**\n   * @brief     Sets the radius of a specified agent.\n   * @param[in] agentNo The number of the agent whose radius is to be modified.\n   * @param[in] radius  The replacement radius. Must be non-negative.\n   */\n  void setAgentRadius(std::size_t agentNo, float radius);\n\n  /**\n   * @brief     Sets the time horizon of a specified agent with respect to other\n   *            agents.\n   * @param[in] agentNo     The number of the agent whose time horizon is to be\n   *                        modified.\n   * @param[in] timeHorizon The replacement time horizon with respect to other\n   *                        agents. Must be positive.\n   */\n  void setAgentTimeHorizon(std::size_t agentNo, float timeHorizon);\n\n  /**\n   * @brief     Sets the three-dimensional linear velocity of a specified agent.\n   * @param[in] agentNo  The number of the agent whose three-dimensional linear\n   *                     velocity is to be modified.\n   * @param[in] velocity The replacement three-dimensional linear velocity.\n   */\n  void setAgentVelocity(std::size_t agentNo, const Vector3 &velocity);\n\n  /**\n   * @brief     Sets the time step of the simulation.\n   * @param[in] timeStep The time step of the simulation. Must be positive.\n   */\n  void setTimeStep(float timeStep) { timeStep_ = timeStep; }\n\n private:\n  /* Not implemented. */\n  RVOSimulator(const RVOSimulator &other);\n\n  /* Not implemented. */\n  RVOSimulator &operator=(const RVOSimulator &other);\n\n  Agent *defaultAgent_;\n  KdTree *kdTree_;\n  float globalTime_;\n  float timeStep_;\n  std::vector<Agent *> agents_;\n\n  friend class Agent;\n  friend class KdTree;\n};\n} /* namespace RVO */\n\n#endif /* RVO3D_RVO_SIMULATOR_H_ */\n"
  },
  {
    "path": "src/Vector3.cc",
    "content": "/*\n * Vector3.cc\n * RVO2-3D Library\n *\n * SPDX-FileCopyrightText: 2008 University of North Carolina at Chapel Hill\n * SPDX-License-Identifier: Apache-2.0\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 *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\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 * Please send all bug reports to <geom@cs.unc.edu>.\n *\n * The authors may be contacted via:\n *\n * Jur van den Berg, Stephen J. Guy, Jamie Snape, Ming C. Lin, Dinesh Manocha\n * Dept. of Computer Science\n * 201 S. Columbia St.\n * Frederick P. Brooks, Jr. Computer Science Bldg.\n * Chapel Hill, N.C. 27599-3175\n * United States of America\n *\n * <https://gamma.cs.unc.edu/RVO2/>\n */\n\n#include \"Vector3.h\"\n\n#include <cmath>\n#include <ostream>\n\nnamespace RVO {\nVector3::Vector3() : val_() {\n  val_[0] = 0.0F;\n  val_[1] = 0.0F;\n  val_[2] = 0.0F;\n}\n\nVector3::Vector3(const Vector3 &vector) : val_() {\n  val_[0] = vector[0];\n  val_[1] = vector[1];\n  val_[2] = vector[2];\n}\n\nVector3::Vector3(const float val[3]) : val_() {\n  val_[0] = val[0];\n  val_[1] = val[1];\n  val_[2] = val[2];\n}\n\nVector3::Vector3(float x, float y, float z) : val_() {\n  val_[0] = x;\n  val_[1] = y;\n  val_[2] = z;\n}\n\nVector3::~Vector3() {}\n\nVector3 &Vector3::operator=(const Vector3 &vector) {\n  if (this != &vector) {\n    val_[0] = vector[0];\n    val_[1] = vector[1];\n    val_[2] = vector[2];\n  }\n\n  return *this;\n}\n\nfloat Vector3::operator[](std::size_t i) const { return val_[i]; }\n\nfloat &Vector3::operator[](std::size_t i) { return val_[i]; }\n\nVector3 Vector3::operator-() const {\n  return Vector3(-val_[0], -val_[1], -val_[2]);\n}\n\nfloat Vector3::operator*(const Vector3 &vector) const {\n  return val_[0] * vector[0] + val_[1] * vector[1] + val_[2] * vector[2];\n}\n\nVector3 Vector3::operator*(float scalar) const {\n  return Vector3(val_[0] * scalar, val_[1] * scalar, val_[2] * scalar);\n}\n\nVector3 Vector3::operator/(float scalar) const {\n  const float invScalar = 1.0F / scalar;\n\n  return Vector3(val_[0] * invScalar, val_[1] * invScalar, val_[2] * invScalar);\n}\n\nVector3 Vector3::operator+(const Vector3 &vector) const {\n  return Vector3(val_[0] + vector[0], val_[1] + vector[1], val_[2] + vector[2]);\n}\n\nVector3 Vector3::operator-(const Vector3 &vector) const {\n  return Vector3(val_[0] - vector[0], val_[1] - vector[1], val_[2] - vector[2]);\n}\n\nbool Vector3::operator==(const Vector3 &vector) const {\n  return val_[0] == vector[0] && val_[1] == vector[1] && val_[2] == vector[2];\n}\n\nbool Vector3::operator!=(const Vector3 &vector) const {\n  return val_[0] != vector[0] || val_[1] != vector[1] || val_[2] != vector[2];\n}\n\nVector3 &Vector3::operator*=(float scalar) {\n  val_[0] *= scalar;\n  val_[1] *= scalar;\n  val_[2] *= scalar;\n\n  return *this;\n}\n\nVector3 &Vector3::operator/=(float scalar) {\n  const float invScalar = 1.0F / scalar;\n\n  val_[0] *= invScalar;\n  val_[1] *= invScalar;\n  val_[2] *= invScalar;\n\n  return *this;\n}\n\nVector3 &Vector3::operator+=(const Vector3 &vector) {\n  val_[0] += vector[0];\n  val_[1] += vector[1];\n  val_[2] += vector[2];\n\n  return *this;\n}\n\nVector3 &Vector3::operator-=(const Vector3 &vector) {\n  val_[0] -= vector[0];\n  val_[1] -= vector[1];\n  val_[2] -= vector[2];\n\n  return *this;\n}\n\nVector3 operator*(float scalar, const Vector3 &vector) {\n  return Vector3(scalar * vector[0], scalar * vector[1], scalar * vector[2]);\n}\n\nstd::ostream &operator<<(std::ostream &stream, const Vector3 &vector) {\n  stream << \"(\" << vector[0] << \",\" << vector[1] << \",\" << vector[2] << \")\";\n\n  return stream;\n}\n\nfloat abs(const Vector3 &vector) { return std::sqrt(vector * vector); }\n\nfloat absSq(const Vector3 &vector) { return vector * vector; }\n\nVector3 cross(const Vector3 &vector1, const Vector3 &vector2) {\n  return Vector3(vector1[1] * vector2[2] - vector1[2] * vector2[1],\n                 vector1[2] * vector2[0] - vector1[0] * vector2[2],\n                 vector1[0] * vector2[1] - vector1[1] * vector2[0]);\n}\n\nVector3 normalize(const Vector3 &vector) { return vector / abs(vector); }\n\n} /* namespace RVO */\n"
  },
  {
    "path": "src/Vector3.h",
    "content": "/*\n * Vector3.h\n * RVO2-3D Library\n *\n * SPDX-FileCopyrightText: 2008 University of North Carolina at Chapel Hill\n * SPDX-License-Identifier: Apache-2.0\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 *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\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 * Please send all bug reports to <geom@cs.unc.edu>.\n *\n * The authors may be contacted via:\n *\n * Jur van den Berg, Stephen J. Guy, Jamie Snape, Ming C. Lin, Dinesh Manocha\n * Dept. of Computer Science\n * 201 S. Columbia St.\n * Frederick P. Brooks, Jr. Computer Science Bldg.\n * Chapel Hill, N.C. 27599-3175\n * United States of America\n *\n * <https://gamma.cs.unc.edu/RVO2/>\n */\n\n#ifndef RVO3D_VECTOR3_H_\n#define RVO3D_VECTOR3_H_\n\n/**\n * @file  Vector3.h\n * @brief Contains the Vector3 class.\n */\n\n#include <cstddef>\n#include <iosfwd>\n\n#include \"Export.h\"\n\nnamespace RVO {\n/**\n * @brief Defines a three-dimensional vector.\n */\nclass RVO3D_EXPORT Vector3 {\n public:\n  /**\n   * @brief Constructs and initializes a three-dimensional vector instance to\n   *        zero.\n   */\n  Vector3();\n\n  /**\n   * @brief     Constructs and initializes a three-dimensional vector from the\n   *            specified three-dimensional vector.\n   * @param[in] vector The three-dimensional vector containing the\n   *                   xyz-coordinates.\n   */\n  Vector3(const Vector3 &vector);\n\n  /**\n   * @brief     Constructs and initializes a three-dimensional vector from the\n   *            specified three-element array.\n   * @param[in] val The three-element array containing the xyz-coordinates.\n   */\n  explicit Vector3(const float val[3]);\n\n  /**\n   * @brief     Constructs and initializes a three-dimensional vector from the\n   *            specified xyz-coordinates.\n   * @param[in] x The x-coordinate of the three-dimensional vector.\n   * @param[in] y The y-coordinate of the three-dimensional vector.\n   * @param[in] z The z-coordinate of the three-dimensional vector.\n   */\n  Vector3(float x, float y, float z);\n\n  /**\n   * @brief Destroys this three-dimensional vector instance.\n   */\n  ~Vector3();\n\n  /**\n   * @brief  Returns the x-coordinate of this three-dimensional vector.\n   * @return The x-coordinate of the three-dimensional vector.\n   */\n  float x() const { return val_[0]; }\n\n  /**\n   * @brief  Returns the y-coordinate of this three-dimensional vector.\n   * @return The y-coordinate of the three-dimensional vector.\n   */\n  float y() const { return val_[1]; }\n\n  /**\n   * @brief  Returns the z-coordinate of this three-dimensional vector.\n   * @return The z-coordinate of the three-dimensional vector.\n   */\n  float z() const { return val_[2]; }\n\n  /**\n   * @brief     Assigns a copy of the specified three-dimensional vector to\n   *            this three-dimensional vector instance.\n   * @param[in] vector The three-dimensional vector containing the\n   *                   xyz-coordinates.\n   * @return    A reference to this three-dimensional vector instance.\n   */\n  Vector3 &operator=(const Vector3 &vector);\n\n  /**\n   * @brief     Returns the specified coordinate of this three-dimensional\n   *            vector.\n   * @param[in] i The coordinate that should be returned (0 <= i < 3).\n   * @return    The specified coordinate of the three-dimensional vector.\n   */\n  float operator[](std::size_t i) const;\n\n  /**\n   * @brief     Returns a reference to the specified coordinate of this\n   *            three-dimensional vector.\n   * @param[in] i The coordinate to which a reference should be returned\n   *              (0 <= i < 3).\n   * @return    A reference to the specified coordinate of the three-dimensional\n   *            vector.\n   */\n  float &operator[](std::size_t i);\n\n  /**\n   * @brief  Computes the negation of this three-dimensional vector.\n   * @return The negation of this three-dimensional vector.\n   */\n  Vector3 operator-() const;\n\n  /**\n   * @brief     Computes the dot product of this three-dimensional vector with\n   *            the specified three-dimensional vector.\n   * @param[in] vector The three-dimensional vector with which the dot product\n   *                   should be computed.\n   * @return    The dot product of this three-dimensional vector with a\n   *            specified three-dimensional vector.\n   */\n  float operator*(const Vector3 &vector) const;\n\n  /**\n   * @brief     Computes the scalar multiplication of this three-dimensional\n   *            vector with the specified scalar value.\n   * @param[in] scalar The scalar value with which the scalar multiplication\n   *                   should be computed.\n   * @return    The scalar multiplication of this three-dimensional vector with\n   *            a specified scalar value.\n   */\n  Vector3 operator*(float scalar) const;\n\n  /**\n   * @brief     Computes the scalar division of this three-dimensional vector\n   *            with the specified scalar value.\n   * @param[in] scalar The scalar value with which the scalar division should be\n   *                   computed.\n   * @return    The scalar division of this three-dimensional vector with a\n   *            specified scalar value.\n   */\n  Vector3 operator/(float scalar) const;\n\n  /**\n   * @brief     Computes the vector sum of this three-dimensional vector with\n   *            the specified three-dimensional vector.\n   * @param[in] vector The three-dimensional vector with which the vector sum\n   *                   should be computed.\n   * @return    The vector sum of this three-dimensional vector with a specified\n   *            three-dimensional vector.\n   */\n  Vector3 operator+(const Vector3 &vector) const;\n\n  /**\n   * @brief      Computes the vector difference of this three-dimensional vector\n   *             with the specified three-dimensional vector.\n   * @param[in]  vector The three-dimensional vector with which the vector\n   *                    difference should be computed.\n   * @return     The vector difference of this three-dimensional vector with a\n   *             specified three-dimensional vector.\n   */\n  Vector3 operator-(const Vector3 &vector) const;\n\n  /**\n   * @brief     Tests this three-dimensional vector for equality with the\n   *            specified three-dimensional vector.\n   * @param[in] vector The three-dimensional vector with which to test for\n   *                   equality.\n   * @return    True if the three-dimensional vectors are equal.\n   */\n  bool operator==(const Vector3 &vector) const;\n\n  /**\n   * @brief     Tests this three-dimensional vector for inequality with the\n   *            specified three-dimensional vector\n   * @param[in] vector The three-dimensional vector with which to test for\n   *                   inequality.\n   * @return    True if the three-dimensional vectors are not equal.\n   */\n  bool operator!=(const Vector3 &vector) const;\n\n  /**\n   * @brief     Sets the value of this three-dimensional vector to the scalar\n   *            multiplication of itself with the specified scalar value.\n   * @param[in] scalar The scalar value with which the scalar multiplication\n   *                   should be computed.\n   * @return    A reference to this three-dimensional vector.\n   */\n  Vector3 &operator*=(float scalar);\n\n  /**\n   * @brief     Sets the value of this three-dimensional vector to the scalar\n   *            division of itself with the specified scalar value.\n   * @param[in] scalar The scalar value with which the scalar division should be\n   *                   computed.\n   * @return    A reference to this three-dimensional vector.\n   */\n  Vector3 &operator/=(float scalar);\n\n  /**\n   * @brief     Sets the value of this three-dimensional vector to the vector\n   *            sum of itself with the specified three-dimensional vector.\n   * @param[in] vector The three-dimensional vector with which the vector sum\n   *                   should be computed.\n   * @return    A reference to this three-dimensional vector.\n   */\n  Vector3 &operator+=(const Vector3 &vector);\n\n  /**\n   * @brief     Sets the value of this three-dimensional vector to the vector\n   *            difference of itself with the specified three-dimensional\n   *            vector.\n   * @param[in] vector The three-dimensional vector with which the vector\n   *                   difference should be computed.\n   * @return    A reference to this three-dimensional vector.\n   */\n  Vector3 &operator-=(const Vector3 &vector);\n\n private:\n  float val_[3];\n};\n\n/**\n * @relates   Vector3\n * @brief     Computes the scalar multiplication of the specified\n *            three-dimensional vector with the specified scalar value.\n * @param[in] scalar The scalar value with which the scalar multiplication\n *                   should be computed.\n * @param[in] vector The three-dimensional vector with which the scalar\n *                   multiplication should be computed.\n * @return    The scalar multiplication of the three-dimensional vector with the\n *            scalar value.\n */\nRVO3D_EXPORT Vector3 operator*(float scalar, const Vector3 &vector);\n\n/**\n * @relates       Vector3\n * @brief         Inserts the specified three-dimensional vector into the\n *                specified output stream.\n * @param[in,out] os     The output stream into which the three-dimensional\n *                       vector should be inserted.\n * @param[in]     vector The three-dimensional vector which to insert into the\n *                       output stream.\n * @return        A reference to the output stream.\n */\nRVO3D_EXPORT std::ostream &operator<<(std::ostream &stream,\n                                      const Vector3 &vector);\n\n/**\n * @relates   Vector3\n * @brief     Computes the length of a specified three-dimensional vector.\n * @param[in] vector The three-dimensional vector whose length is to be\n *            computed.\n * @return    The length of the three-dimensional vector.\n */\nRVO3D_EXPORT float abs(const Vector3 &vector);\n\n/**\n * @relates   Vector3\n * @brief     Computes the squared length of a specified three-dimensional\n *            vector.\n * @param[in] vector The three-dimensional vector whose squared length is to be\n *                   computed.\n * @return    The squared length of the three-dimensional vector.\n */\nRVO3D_EXPORT float absSq(const Vector3 &vector);\n\n/**\n * @relates   Vector3\n * @brief     Computes the cross product of the specified three-dimensional\n *            vectors.\n * @param[in] vector1 The first vector with which the cross product should be\n *                    computed.\n * @param[in] vector2 The second vector with which the cross product should be\n *                    computed.\n * @return    The cross product of the two specified vectors.\n */\nRVO3D_EXPORT Vector3 cross(const Vector3 &vector1, const Vector3 &vector2);\n\n/**\n * @relates   Vector3\n * @brief     Computes the normalization of the specified three-dimensiona\n *            vector.\n * @param[in] vector The three-dimensional vector whose normalization is to be\n *                   computed.\n * @return    The normalization of the three-dimensional vector.\n */\nRVO3D_EXPORT Vector3 normalize(const Vector3 &vector);\n} /* namespace RVO */\n\n#endif /* RVO3D_VECTOR3_H_ */\n"
  },
  {
    "path": "triggers",
    "content": "#\n# triggers\n# RVO2-3D Library\n#\n# SPDX-FileCopyrightText: 2008 University of North Carolina at Chapel Hill\n# SPDX-License-Identifier: Apache-2.0\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#\n#     https://www.apache.org/licenses/LICENSE-2.0\n#\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# Please send all bug reports to <geom@cs.unc.edu>.\n#\n# The authors may be contacted via:\n#\n# Jur van den Berg, Stephen J. Guy, Jamie Snape, Ming C. Lin, Dinesh Manocha\n# Dept. of Computer Science\n# 201 S. Columbia St.\n# Frederick P. Brooks, Jr. Computer Science Bldg.\n# Chapel Hill, N.C. 27599-3175\n# United States of America\n#\n# <https://gamma.cs.unc.edu/RVO2/>\n#\n\ninterest-await ldconfig\n"
  }
]